此功能可以拦截eb表单的新增数据前后，编辑数据前后的动作执行第三方接口，第三方通过接口注册所调用的服务dubbo-group，实现提供的接口来执行具体业务

eb表单编辑数据或者新增数据时触发对应注册的接口

## 1、引入依赖

```html
<dependency>
    <groupId>com.weaver</groupId>
    <artifactId>weaver-ebuilder-form-bean</artifactId>
</dependency>
<dependency>
    <groupId>com.weaver</groupId>
    <artifactId>weaver-ebuilder-form-client</artifactId>
</dependency>
```

## 2、表单接口配置相关接口

相当于将第三方接口注册，当插入了配置，对应的表单即可在数据新增或者编辑时触发对应注册的dubbo接口

- 注册表单接口配置方法：com.weaver.ebuilder.form.client.service.obj.RemoteEBObjService#batchAddEbuilderFormActions
- 注意：每个表单的都只有一个接口配置
- 入参一览：
  
  ```java
  public class EbuilderExtendDto implements Serializable {
  
      /**
       * eb表单id
       */
      @JsonSerialize(using = ToStringSerializer.class)
      private Long objId;
  
      /**
       * 类路径(dubbo的模式不需要，默认空就行)
       */
      private String classPath;
  
      /**
       * 接口类型(sdk,dubbo)
       */
      private ObjActionTypeEnum actionType;
  
      /**
       * dubbo分组名称
       */
      private String groupName;
  
      /**
       * dubbo调用时 方法执行类型
       */
      private DataActionMethodType dataActionMethodType;
  }
  ```

## 3、实现RPC接口

在\*-dubbo.xml配置文件中添加以下标签："\<dubbo:service ref="beanName" interface="com.weaver.ebuilder.form.client.customjavacode.rest.EbuilderObjActionRest" timeout="240000" group="group"/\>"，其中group值为自定义值，beanName是实现的bean名称，只需确保第2点中配置中填写的groupName属性值与您指定的RPC group一致即可。

- 参数一览：
  
  ```java
  public class CustomJavaCodeDto implements Serializable {
  
      /**
       * 表单数据(dubbo的方式这个没有，不要取值)
       */
      private Map<String,Object> formData;
  
      /**
       * 更新的表单数据id
       */
      private List<Long> formDataIdList;
  
      /**
       * 表单id
       */
      private Long formId;
  
      /**
       * 新增后表单数据id
       */
      private List<Long> addFormDataIdList;
  
      /**
       * eb表单id
       */
      private Long objId;
  
      /**
       * 触发时机（触发的前后）
       */
      private DataChangeTriggerMomentEnum dataChangeTriggerMomentEnum;
  
      /**
       * 数据操作类型（add：新增，update:编辑）
       */
      public String operateType;
  
      /**
       * 自定义透传参数
       */
      private CustomJavaParam customJavaParam;
  }
  ```

```java
public class CustomJavaParam implements Serializable {

    /**
     * 定义自定义返回结果. 用于透传给后置处理动作
     * customParam
     */
    private Map<String, Object> customParam;

    /**
     * 支持版本 10.0.2606.01基线后
     * 自定义执行规则. 默认忽略异常
     */
    private EBDataOperationRuleEnum execRule = EBDataOperationRuleEnum.ignore;

    /**
     * 支持版本 10.0.2606.01基线后
     * 异常提示信息输出<br>
     * 结合 execRule参数为 {@link EBDataOperationRuleEnum#throwException}时阻断标准保存接口，抛出该提示
     */
    private String message;
```

- 3.1. 实现接口：com.weaver.ebuilder.form.client.customjavacode.rest.EbuilderObjActionRest#excute,  注册action执行类型为com.weaver.ebuilder.form.client.entity.customjavacode.enums.DataActionMethodType#NO\_RETURN或为空调用;  用于无返回值场景触发调用
- 3.2. 实现接口：com.weaver.ebuilder.form.client.customjavacode.rest.EbuilderObjActionRest#executeAction,  需要注册接口类型为com.weaver.ebuilder.form.client.entity.customjavacode.enums.DataActionMethodType#RETURN\_VALUE;  用于新增/修改调用前执行且返回自定义参数透传到数据操作后拦截方法中
  
  - 注册接口类型为DataActionMethodType#RETURN\_VALUE时 10.0.2606.01基线后支持返回execRule=throwException时阻断标准逻辑执行，并返回前台message参数提示
