---
title: "4.1.6、系统字段（模块字段）：BusinessRest"
docId: "954956957171752961"
source: "https://weapp.eteams.cn/build/techdoc/wdoc/index.html#/public/repository/9c2e5f92-03b4-4207-9b22-a0c1dd79ac56/doc/954956957171752961"
---
# 模块字段接入

## 1. 业务对接

### 1.1 接口说明

> 接口名：BusinessRest
> 
> 1、获取业务模块字段，对接模块将字段接入，设置字段应用于那些表单场景中，即可在表单中使用
> 
> 2、获取、更新业务模块数据，按照表单设定格式传递，执行获取、更新，解耦增强通用性

```
/**
 * 业务模块对接的功能汇总入口
 *
 * @author Failymiss
 * @date 2022/6/9
 */
public interface BusinessRest {

    /**
     * 查询业务模块字段
     *
     * @param param   参数
     * @return 业务系统字段
     */
    List<BusinessField> listBusinessField(BaseBusinessFieldParam param);

    /**
     * 查询业务模块数据
     * @param param     业务数据查询参数
     * @return 业务模块数据详情
     */
    BusinessData getBusinessData(BusinessDataParam param);


    /**
     * 查询业务模块数据多个
     * @param param     业务数据查询参数
     * @return 业务模块数据详情
     */
    List<BusinessData> listBusinessDatas(BusinessDataParam param);

    /**
     * @author shmet
     * @date 2022/6/22
     * @desc 业务模块数据赋值
     */
    WeaResult updateBusinessData(BusinessData businessData);

    /**
     * @author shmet
     * @date 2022/7/1
     * @desc 业务模块数据赋值批量
     */
    WeaResult updateBusinessDatas(BusinessDataParam param, List<BusinessData> businessData);
}

```

### 1.2 参数说明

> List listBusinessField(BaseBusinessFieldParam param);

- BaseBusinessFieldParam

> 接口参数bean

| 名称 | 必填 | 类型 | 描述 |
| --- | --- | --- | --- |
| employeeId | 是 | Long | 当前登录人id |
| tenantKey | 是 | String | 租户Key |
| browserParam | 否 | `BusinessBrowserParam` | 浏览类型，区分是哪一个关联，如： 关联审批、关联表单数据， 应用于一个模块多个浏览字段，如需要钻取、筛选的场景 |
| customParam | 否 | `Map<String, Object>` | 描述 |
| name | 否 | String | 显示名称 |
| valueType | 否 | BusinessValueTypeEnum | 数据格式类型 |
| viewType | 否 | BusinessViewTypeEnum | 显示格式类型 |
| scenario | 否 | BusinessScenarioEnum | 应用场景 |
| scenarioEvent | 否 | String | 按照事件筛选 |
| scenarioBrowserParam | 否 | String | 按照显示格式类型的，所使用的浏览信息过滤 |

- BusinessField

> 模块字段bean

| 名称 | 类型 | 描述 |
| --- | --- | --- |
| name | String | 显示名称 |
| desc | String | 描述 |
| valueKey | String | 字段标识， 注意：一般为类型、枚举,非数字 |
| valueType | BusinessValueTypeEnum | 数据格式类型 |
| viewType | BusinessViewTypeEnum | 显示格式类型 |
| scenarios | `List<BusinessScenarioEnum>` | 应用场景，如：字段联动、触发字段等 |
| scenarioOrders | `List<BusinessOrderTypeEnum>` | 排序场景的时候使用 BusinessScenarioEnum.BROWSER_DATA_ORDER |
| scenarioEvents | `List<String>` | 限定场景，数据联动触发字段场景, BusinessScenarioEnum.DATA_LINKAGE_TRIGGER, 该类型为String， 表单通用事件，建议用FdLinkageEventEnum枚举录入 |
| scenarioBrowserParam | BusinessBrowserParam | 限定场景，如：浏览自定义, BusinessScenarioEnum.BROWSER_DATA_VARIABLE, 特定场景使用, 浏览按钮参数 |
| scenarioFieldOptions | `List<BusinessFieldOption>` | 限定场景，如：浏览自定义, BusinessScenarioEnum.BROWSER_DATA_VARIABLE, 字段选项列表, 建议少量选项使用, 多了改用浏览按钮 |
| scenarioDefConfigParam | String | 限定场景，如：设计器已有业务字段场景, BusinessScenarioEnum.FORM_BUILDER_BUSINESS_COMPONENT, 该类型为JSONString， 默认config设置的json |
| scenarioViewComponentParam | String | 限定场景，如：显示联动条件设置、适配业务字段渲染组件, BusinessScenarioEnum.DATA_LINKAGE_SOURCE及其他场景, 该类型为JSONString， 可以用Map结构创建，也可用组件的WeaFormItem |
| scenarioRelateMatchFields | `List<BusinessField>` | 限定场景，如：数据钻取, BusinessScenarioEnum.BROWSER_DATA_RELATE及其他场景, BusinessField类型，设置valueKey：ComponentKey对应表单的控件类型，如果是关联浏览，需要设置scenarioBrowserParam浏览的module和type |
| scenarioFieldAuthorityConfig | `Map<String, Object>` | 限定场景，如：字段权限, BusinessScenarioEnum.FORM_FIELD_AUTHORITY， 字段权限初始的配置数据 |

- BusinessValueTypeEnum

> 数据类型的枚举

| 类型 | 描述 |
| --- | --- |
| BusinessValueTypeEnum.TEXT | 文本类型 |
| BusinessValueTypeEnum.BOOLEAN | 布尔类型 |
| BusinessValueTypeEnum.DATE | 日期类型 |
| BusinessValueTypeEnum.NUMBER | 数字类型 |
| BusinessValueTypeEnum.LIST | 列表类型 |

- BusinessViewTypeEnum

> 数据类型的枚举

| 类型 | 描述 |
| --- | --- |
| BusinessViewTypeEnum.TEXT | 文本输入框 |
| BusinessViewTypeEnum.NUMBER | 数字输入框 |
| BusinessViewTypeEnum.DATE | 日期选择框 |
| BusinessViewTypeEnum.OPTION | 下拉选择框 |
| BusinessViewTypeEnum.BROWSER | 浏览选择框 |

- BusinessScenarioEnum

> 应用场景的类型

| 类型 | 描述 |
| --- | --- |
| BusinessScenarioEnum.VIEW_LINKAGE_TRIGGER | 显示联动触发字段 |
| BusinessScenarioEnum.VIEW_LINKAGE_SOURCE | 显示联动来源字段 |
| BusinessScenarioEnum.VIEW_LINKAGE_TARGET | 显示联动目标字段 |
| BusinessScenarioEnum.DATA_LINKAGE_TRIGGER | 数据联动触发字段 |
| BusinessScenarioEnum.DATA_LINKAGE_SOURCE | 数据联动来源字段 |
| BusinessScenarioEnum.DATA_LINKAGE_TARGET | 数据联动目标字段 |
| BusinessScenarioEnum.BROWSER_DATA_VARIABLE | 浏览数据自定义变量字段 |
| BusinessScenarioEnum.BROWSER_DATA_ORDER | 浏览数据排序字段 |
| BusinessScenarioEnum.BROWSER_DATA_FILTER | 浏览数据过滤字段 |
| BusinessScenarioEnum.BROWSER_DATA_RELATE | 浏览数据关联字段 |
| BusinessScenarioEnum.BROWSER_TABLE_COL | 浏览数据表格显示字段 |
| BusinessScenarioEnum.BROWSER_CARD_FIELD | 浏览数据卡片显示字段 |
| BusinessScenarioEnum.FORM_FIELD_QB_CODE | 二维码/条形码/链接 |
| BusinessScenarioEnum.FORM_FIELD_AUTHORITY | 字段权限 |
| BusinessScenarioEnum.FORM_LAYOUT_COMPONENT_INIT | 布局初始化组件 |
| BusinessScenarioEnum.FORM_BUILDER_BUSINESS_COMPONENT | 设计器已有业务组件 |
| BusinessScenarioEnum.FORM_BUILDER_LAYOUT_TEMPLATE_BIZ_COMPONENT | 设计器布局模板已有业务组件 |
| BusinessScenarioEnum.BUSINESS_FIELD_DATA | 业务字段的数据，应用于外部获取模块数据 |

- BusinessOrderTypeEnum

| 类型 | 描述 |
| --- | --- |
| BusinessOrderTypeEnum.ASC | 正序 |
| BusinessOrderTypeEnum.DESC | 倒序 |

- BusinessBrowserParam

| 类型 | 类型 | 描述 |
| --- | --- | --- |
| module | String | 浏览按钮的module |
| type | String | 浏览按钮的type |
| params | String | 浏览按钮的参数,JSON格式 |

- BusinessFieldOption

| 类型 | 类型 | 描述 |
| --- | --- | --- |
| id | String | 选项id |
| content | String | 选项名称 |

示例：

```
[
  {
    "desc": "字段的描述",
    "name": "上报标题",
    "scenarioOrders": [
      "ASC"
    ],
    "scenarios": [
      "VIEW_LINKAGE_TRIGGER",
      "VIEW_LINKAGE_SOURCE",
      "VIEW_LINKAGE_TARGET",
      "DATA_LINKAGE_TRIGGER",
      "DATA_LINKAGE_SOURCE",
      "DATA_LINKAGE_TARGET",
      "BROWSER_DATA_VARIABLE",
      "BROWSER_DATA_ORDER",
      "BROWSER_DATA_FILTER",
      "BROWSER_DATA_RELATE",
      "BROWSER_TABLE_COL",
      "BROWSER_CARD_FIELD"
    ],
    "valueKey": "report_title",
    "valueType": "TEXT",
    "scenarioViewComponentParam": "{\"placeholder\":\"请输入内容\",\"maxLength\":\"200\"}"
  }
]

```

> BusinessData getBusinessData(BusinessDataParam param);
> 
> List listBusinessDatas(BusinessDataParam param);
> 
> WeaResult updateBusinessData(BusinessData businessData);
> 
> WeaResult updateBusinessDatas(BusinessDataParam param, List businessDatas);

- BusinessDataParam

| 名称 | 类型 | 描述 |
| --- | --- | --- |
| dataId | String | 模块数据id |
| dataIds | `List<String>` | 模块数据id集合 |
| valueKeys | `List<String>` | 字段标识，如： id或type，对应下面的valueKey |
| browserParam | `BusinessBrowserParam` | 浏览类型，区分是哪一个关联，如： 关联审批、关联表单数据， 应用于一个模块多个浏览字段，如需要钻取、筛选的场景 |
| employeeId | Long | 当前登录人id |
| tenantKey | String | 租户Key |
| customParam | `Map<String, Object>` | 描述 |

- BusinessData

| 名称 | 类型 | 描述 |
| --- | --- | --- |
| dataId | String | 模块数据id |
| formDataId | String | 表单数据id |
| valueMap | `Map<String, BusinessValue>` | key BusinessField valueKey value BusinessValue 注：key为属性标识，对应上面的valueKey |

- BusinessValue

| 名称 | 类型 | 描述 |
| --- | --- | --- |
| textValue | String | 文本数据 |
| dateValue | Date | 日期数据 |
| numberValue | Number | 数字 |
| booleanValue | Boolean | boolean数据 |
| optionValue | BusinessValue | object |
| optionValues | `List<BusinessValue>` | list |
| valueType | BusinessValueTypeEnum | 数据类型，上面赋值时自动添加 |
| valueKey | String | 字段标识，一般为字段id，或类型 |
| name | String | 属性值对于的名称（数据显示使用） |

示例：

```
{
  "dataId": "123456789",
  "valueMap": {
    "report_title": {
      "name": "上报标题",
      "textValue": "上报demo",
      "valueKey": "report_title",
      "valueType": "TEXT"
    }
  }
}
```

### 1.3 内置工具

> BusinessValue

```
public class BusinessValue{
  /**
   * 不区分类型取值, 返回Object, 可根据类型区分使用
   */
  public Object getValue();

  /**
   * 获取简单的值, 全部返回字符串, 特殊类型说明: Date类型: 返回时间戳字符串; Object、List: 返回id,多个用逗号隔开;
   */
  public String getSimpleValue();

  /**
   * @desc 创建option属性, 适用于Object、List的项, 如人员: createOption(id,username), 简化代码量
   */
  public static BusinessValue createOption(String textValue, String name);

  /**
   * @desc 创建BusinessValue, 传递valueKey, valueType, value, 简化代码量
   */
  public static BusinessValue createBusinessValue(String valueKey, BusinessValueTypeEnum valueType, Object value);
}

```

> BusinessBrowserParam

```
public class BusinessBrowserParam {
    
  /**
   * @desc 双参构建器
   */
  public static BusinessBrowserParam createBrowserParam(String module, String type);

  /**
   * @desc 三参构建器
   */
  public static BusinessBrowserParam createBrowserParam(String module, String type, String params);
}

```

> BusinessFieldOption

```
public class BusinessFieldOption {
    
  /**
   * @desc 构建器
   */
  public static BusinessFieldOption createOption(String id, String content);
}

```

### 1.4 对接案例

> 已业务表单为例，实现BusinessRest

```
/**
 * @author shmet
 * @date 2022/6/23 10:59
 * @desc 业务表单模块，对接模块字段
 */
@Service("formdatareport_BusinessRest")
public class ReportBusinessServiceImpl implements BusinessRest {

    @Override
    public List<BusinessField> listBusinessField(String tenantKey, Map<String, Object> customParam) {
        List<BusinessField> bizField = new ArrayList<>();
        List<BusinessOrderTypeEnum> commonScenarioOrders = new ArrayList<>(Arrays.asList(BusinessOrderTypeEnum.DESC, BusinessOrderTypeEnum.ASC));
        List<BusinessField> relateMatchFieldDates = FormUtils.newArrayList(new BusinessField.Builder().valueKey(ComponentType.DateComponent.toString()).build());
        List<BusinessField> relateMatchFieldTexts = FormUtils.newArrayList(new BusinessField.Builder().valueKey(ComponentType.Text.toString()).build(), new BusinessField.Builder().valueKey(ComponentType.TextArea.toString()).build());
        List<BusinessField> relateMatchFieldEmployees = FormUtils.newArrayList(new BusinessField.Builder().valueKey(ComponentType.Employee.toString()).build(), new BusinessField.Builder().valueKey(ComponentType.EmployeeOrganization.toString()).build(), new BusinessField.Builder().valueKey(ComponentType.EmployeeScope.toString()).build());

      // 上报标题
        BusinessField titleField = new BusinessField();
        titleField.setName(SystemEnv.getHtmlLabelName(0l, "上报标题"));
        titleField.setDesc("请输入上报名称");
        titleField.setValueKey("formdatareport_title");
        titleField.setValueType(BusinessValueTypeEnum.TEXT);
        titleField.setScenarioOrders(Arrays.asList(BusinessOrderTypeEnum.DESC));
        // 全局通用，可以用BusinessScenarioEnum.values()
        titleField.setScenarios(Arrays.asList(BusinessScenarioEnum.DATA_LINKAGE_TRIGGER, BusinessScenarioEnum.DATA_LINKAGE_SOURCE));
        titleField.setScenarioEvents(Arrays.asList(FdLinkageEventEnum.changeField.toString(),FdLinkageEventEnum.onLoadForm.toString(), "REPORT_SUBMIT", "REPORT_SUBMIT"));
        // 显示组件参数，方式1
        WeaFormItem item = new WeaFormItem(WeaFormItemType.INPUT);
        item.setPlaceholder("请输入上报名称");
        item.setMaxLength("200");
        titleField.setScenarioViewComponentParam(JSON.toJSONString(item));
        // 上报名称可以被文本、多行文本选择到，并钻取
        titleField.setScenarioRelateMatchFields(relateMatchFieldTexts);
        
        // 上报提交人
        BusinessField creatorField = new BusinessField();
        creatorField.setName(SystemEnv.getHtmlLabelName(0l, "上报提交人"));
        creatorField.setDesc("上报提交人");
        creatorField.setValueKey("formdatareport_creator");
        creatorField.setValueType(BusinessValueTypeEnum.OBJECT);
        creatorField.setScenarioOrders(Arrays.asList(BusinessOrderTypeEnum.DESC, BusinessOrderTypeEnum.ASC));
        // 全局通用，可以用BusinessScenarioEnum.values()
        creatorField.setScenarios(Arrays.asList(BusinessScenarioEnum.DATA_LINKAGE_TRIGGER, BusinessScenarioEnum.DATA_LINKAGE_SOURCE));
        creatorField.setScenarioEvents(Arrays.asList("REPORT_SUBMIT", "REPORT_SUBMIT"));
        // 显示组件参数，方式2
        Map<String, Object> componentParam = new HashMap<>();
        componentParam.put("multiple","false");
        creatorField.setScenarioViewComponentParam(JSON.toJSONString(componentParam));
        creatorField.setScenarioRelateMatchFields(relateMatchFieldEmployees);


        // 上报状态
        BusinessField statusField = new BusinessField();
        statusField.setName(SystemEnv.getHtmlLabelName(0l, "上报状态"));
        statusField.setDesc("上报状态");
        statusField.setValueKey("formdatareport_status");
        statusField.setValueType(BusinessValueTypeEnum.TEXT);
        statusField.setScenarioOrders(Arrays.asList(BusinessOrderTypeEnum.DESC));
        // 限定功能使用
        statusField.setScenarios(Arrays.asList(BusinessScenarioEnum.DATA_LINKAGE_TRIGGER, BusinessScenarioEnum.DATA_LINKAGE_SOURCE));
        statusField.setScenarioEvents(Arrays.asList("REPORT_SUBMIT", "REPORT_SUBMIT"));
        
        // 上报共享人
        BusinessField shareField = new BusinessField();
        statusField.setName(SystemEnv.getHtmlLabelName(0l, "上报共享人"));
        statusField.setDesc("上报共享人");
        statusField.setValueKey("formdatareport_share");
        statusField.setValueType(BusinessValueTypeEnum.LIST);
        statusField.setScenarioOrders(Arrays.asList(BusinessOrderTypeEnum.DESC));
        // 限定功能使用
        statusField.setScenarios(Arrays.asList(BusinessScenarioEnum.DATA_LINKAGE_TRIGGER, BusinessScenarioEnum.DATA_LINKAGE_SOURCE));
        titleField.setScenarioEvents(new ArrayList());
        
        // 入队
        bizField.add(titleField);
        bizField.add(creatorField);
        bizField.add(statusField);
        bizField.add(shareField);
        return bizField;
    }

    @Override
    public BusinessData getBusinessData(BusinessDataParam param) {
        BusinessData bizData = new BusinessData();
        bizData.setDataId(param.getDataId());
        bizData.setValueMap(new HashMap<>());

        // 根据模块数据id查询
        // param.getDataId();

        // 上报标题值，text类型示例
        BusinessValue titleValue = new BusinessValue();
        titleValue.setValueKey("formdatareport_title");
        titleValue.setTextValue("这是个demo上报标题");
    
        // 上报提交人,Object类型示例
        BusinessValue titleValue = new BusinessValue();
        titleValue.setValueKey("formdatareport_creator");
        // 放入对象，这里代码按照自己习惯来，不用按照示例，仅供参考，可也可以使用构造器new BusinessValue("xxxxx","人员1");
        titleValue.setOptionValue(BusinessValue.createOption("xxxxxxxxxxxx", "人员1"));
        
        // 上报共享人，list类型示例
        BusinessValue shareValue = new BusinessValue();
        shareValue.setValueKey("formdatareport_share");
        shareValue.setOptionValues(new ArrayList<>());
        // 放入列表的共享人，人员1和人员2的id和名称
        BusinessValue sharePerson1 = BusinessValue.createOption("xxxxxxx", "人员1");
        BusinessValue sharePerson2 = BusinessValue.createOption("ddddddd", "人员2");
        // 入队
        shareValue.getOptionValues().add(sharePerson1);
        shareValue.getOptionValues().add(sharePerson2);

        // 放入map返回
        bizData.getValueMap().put("formdatareport_title", titleValue);
        bizData.getValueMap().put("formdatareport_share", shareValue);
        return bizData;
    }

    @Override
    public BusinessData listBusinessDatas(BusinessDataParam param) {
        List<String> dataIds = param.getDataIds();
        // 根据dataids查询数据，按照getBusinessData的示例放入数据
        return new ArrayList<>();
    }
    
    @Override
    public WeaResult updateBusinessData(BusinessData businessData) {
        // 代码示例，不考虑判空之类的逻辑
        BusinessValue title = businessData.getValueMap().get("formdatareport_title");
        // 使用内置工具取简化值
        String string = title.getSimpleValue();
        // 使用内置工具取完整值
        Object string = title.getValue(); 
        // update上报标题逻辑
        return WeaResult.success(true);
    }
    
    @Override
    public WeaResult updateBusinessDatas(BusinessDataParam param, List<BusinessData> businessDatas){
        // 代码示例，不考虑判空之类的逻辑
        // 批量更新businessDatas
        // 返回执行成功的Id
        return WeaResult.success(true);
    }
}

```

> *-dubbo.xml的配置示例，以业务表单为例(module为formdatareport):

```

<dubbo:service interface="com.weaver.common.form.api.rest.biz.BusinessRest"
               ref="formdatareport_BusinessRest" group="formdatareport"/>

```

### 1.5 俗成约定

> 浏览按钮自定义场景：BusinessScenarioEnum.BROWSER_DATA_VARIABLE
> 
> 约定`数据创建人`、`当前操作人`的valueKey为`browserDataCreator`和`browserCurrentOperator`

## 2. 使用说明

## 2.1 接口说明

```
public interface BusinessService {

    /**
     * 查询业务模块字段
     * @param param 查询参数
     * @return 业务系统字段
     */
    List<BusinessField> listBusinessField(BusinessFieldParam param);

    /**
     * 查询业务模块数据
     * @param param 查询参数
     * @return 业务模块数据
     */
    BusinessData getBusinessData(BusinessDataParam param);

    /**
     * 查询业务模块数据多个
     * @param param     业务数据查询参数
     * @return 业务模块数据详情
     */
    List<BusinessData> listBusinessDatas(BusinessDataParam param);

    /**
     * @author shmet
     * @date 2022/6/22
     * @desc 业务模块数据赋值
     */
    WeaResult updateBusinessData(BusinessDataParam param, BusinessData businessData);


    /**
     * @author shmet
     * @date 2022/7/1
     * @desc 业务模块数据赋值批量
     */
    WeaResult updateBusinessDatas(BusinessDataParam param, List<BusinessData> businessDatas);
}


```

### 2.1.1 参数说明

- BusinessFieldParam

| 名称 | 类型 | 必填 | 描述 |
| --- | --- | --- | --- |
| name | String | 否 | 字段名称 |
| scenario | BusinessScenarioEnum | 否 | 使用场景 |
| valueType | BusinessValueTypeEnum | 否 | 数据类型 |
| scenarioEvent | String | 否 | 触发事件，如字段联动，根据时间联动查询的字段 |
| browserParam | BusinessBrowserParam | 否 | 以浏览按钮展示的，用module和type筛选 |
| module | String | 是 | 调用模块的标识，必传 |
| employeeId | String | 是 | 租户id |
| tenantKey | String | 是 | 租户key |

> BusinessBrowserParam

| 名称 | 类型 | 描述 |
| --- | --- | --- |
| module | String | 浏览按钮module |
| type | String | 浏览按钮type |
| params | String | 固定参数,JSON格式字符串 |

- BusinessDataParam

| 名称 | 类型 | 必填 | 描述 |
| --- | --- | --- | --- |
| dataId | String | 否 | 模块数据id |
| dataIds | `List<String>` | 否 | 模块数据列表 |
| valueKeys | `List<String>` | 否 | 字段标识 |
| module | String | 是 | 调用模块的标识，必传 |
| employeeId | String | 是 | 租户id |
| tenantKey | String | 是 | 租户key |
| customParam | `Map<String, BusinessValue>` | 否 | 钩子参数 |

- [BusinessField](https://freeform.yunteams.cn/system-field/part-2-guide.html#biz_BusinessField)
  
  > 导航到参数表格
- [BusinessData](https://freeform.yunteams.cn/system-field/part-2-guide.html#biz_BusinessData)
  
  > 导航到参数表格

### 2.1.2 对接案例

> 字段联动触发字段对接示例（注：仅供参考）
> 
> 根据以下条件筛选，字段名称、使用场景（这里以BusinessScenarioEnum.DATA_LINKAGE_TRIGGER为例）、事件类型

```
@Service
public class FdLinkageColumnServiceImpl implements FdLinkageColumnService {

    @Autowired
    private BusinessService businessService;
    
    @Override
    public List<FdLinkageColumn> listCommonFormDrivenColumn(FdLinkageColumnDto param, SimpleEmployee currentUser) {
        // 取查询类型，默认为表单自定义字段
        String groupType = StringUtils.isNotEmpty(param.getGroupId()) ? param.getGroupId() : FdLinkageColumnGroupEnum.formField.toString();
        if (FdLinkageColumnGroupEnum.moduleField.toString().equals(groupType)) {
            List<BusinessField> bizFieldList = businessService.listBusinessField(new BusinessFieldParam.Builder().module(param.getModule()).name(param.getFieldName()).scenario(BusinessScenarioEnum.DATA_LINKAGE_TRIGGER).scenarioEvent(param.getEventType()).builder());
            return this.buildModuleColumns(bizFieldList);
        }
        return new ArrayList<>();
    }

    /**
     * @author shmet
     * @date 2022/6/24
     * @desc 构造模块字段数据
     */
    private List<FdLinkageColumn> buildModuleColumns(List<BusinessField> bizFieldList) {
        if (CollectionUtils.isNotEmpty(bizFieldList)) {
            String moduleField = FdLinkageColumnGroupEnum.moduleField.toString();
            String moduleFieldDesc = SystemEnv.getHtmlLabelName(122658l, "模块字段");
            String address = SystemEnv.getHtmlLabelName(117460l, "主表");
            String addressType = FdLinkageColumnAddressEnum.form.toString();
            return FormUtils.listObjToList(bizFieldList, FdLinkageColumn.class, (bizField) -> new FdLinkageColumn(moduleField, moduleFieldDesc, bizField.getValueKey(), bizField.getName(), address, addressType, bizField.getValueType().getDescription(), bizField.getValueType().toString(), null, null));
        }
        return new ArrayList<>();
    }
}

```

### 2.1.3 内置Controller接口说明

> 获取模块字段，根据参数
> 
> /api/{module}/business/listBusinessField 和 /api/{module}/{type}/business/listBusinessField
> 
> 入参: [BusinessFieldParam](https://freeform.yunteams.cn/system-field/part-2-guide.html#biz_BusinessFieldParam)
> 
> 出参: WeaResult<List<[BusinessField](https://freeform.yunteams.cn/system-field/part-2-guide.html#biz_BusinessField)>>

> 获取模块的数据，根据dataId
> 
> /api/{module}/business/getBusinessData 和 /api/{module}/{type}/business/getBusinessData
> 
> 入参: [BusinessDataParam](https://freeform.yunteams.cn/system-field/part-2-guide.html#biz_BusinessDataParam)
> 
> 出参: WeaResult<[BusinessData](https://freeform.yunteams.cn/system-field/part-2-guide.html#biz_BusinessData)>

## **3. **前端对接

### 3.1 对接方说明

> 模块需提供钩子，以实现获取业务数据、更新业务数据的能力
> 
> > 使用[模块字段数据和事件整合](https://weapp.eteams.cn/build/techdoc/wdoc/index.html#/public/doc/690fa970-5e59-4ba3-8c6b-d91f815c9013)：

### 3.2 使用方说明

#### 3.2.1 前端运行时

> 通过formStore.BusinessStore进行操作

> API说明

```javascript
/**
 * @author: shmet
 * @date: 2022/7/5
 * @desc: 前端业务字段interface
 */
export interface BusinessPropsType {

  // 根据参数查询业务字段
  listBusinessField(param: BusinessFieldParam): any;

}

```

> 使用示例

```javascript
const businessStore = this.formStore?.businessStore;
// 获取业务字段
const businessFields = businessStore?.listBusinessField({module: "formdatareport"});
// 根据名称获取
businessStore?.listBusinessField({module: "formdatareport", name: "上报标题"});
// 根据数据类型获取
businessStore?.listBusinessField({module: "formdatareport", valueType: "TEXT"});
// 根据场景获取，如数据联动场景
businessStore?.listBusinessField({module: "formdatareport", scenario: "DATA_LINKAGE_TRIGGER"});
// 根据支持事件获取
businessStore?.listBusinessField({
  module: "formdatareport",
  scenario: "DATA_LINKAGE_TRIGGER",
  scenarioEvent: "changeField"
});
```

#### 3.2.2 前端设计器

> 通过formBuilderStore.builderBusinessStore进行操作

> API说明

```
/**
 * @author: shmet
 * @date: 2022/7/5
 * @desc: 前端业务字段interface
 */
export interface BusinessPropsType {
  // 根据参数查询业务字段
  listBusinessField(param: BusinessFieldParam): Promise;
}

```

> 使用示例

```
const builderBusinessStore = this.formBuilderStore?.businessStore;
// 获取业务字段
builderBusinessStore?.listBusinessField({module: "formdatareport"}).then((result: any) => {
    // 获取数据
    const businessField = result?.data;
});

// 获取关联浏览的可钻取字段，如：关联人员
builderBusinessStore?.listBusinessField({module: "hrm", scenario:"BROWSER_DATA_RELATE", browserParam:{"module":"hrm", type:"resource", params:""}}).then((result: any) => {
  // 获取数据
  const businessField = result?.data;
});

```

> 参数示例

```
{
  "code": 200,
  "msg": "接口返回成功",
  "status": true,
  "data": [
    {
      "name": "上报id",
      "desc": "reportId",
      "valueKey": "reportId",
      "scenarios": [
        "FORM_FIELD_QB_CODE"
      ],
      "valueType": "TEXT",
      "viewType": "TEXT",
      "scenarioOrders": [
        "DESC",
        "ASC"
      ]
    }
  ]
}

```

#### 3.2.3 接口调用

**请求路径**

> /api/formdatareport/business/listBusinessField

**请求类型**

> POST

**参数说明：** [BusinessField](https://freeform.yunteams.cn/system-field/part-2-guide.html#biz_BusinessField)

**入参示例：**

```
{
    "module": "formdatareport",
    "scenario":"BROWSER_DATA_RELATE"
}

```

**出参示例：**

```
{
  "code": 200,
  "msg": "接口返回成功",
  "status": true,
  "data": [
    {
      "name": "上报id",
      "desc": "reportId",
      "valueKey": "reportId",
      "scenarios": [
        "FORM_FIELD_QB_CODE"
      ],
      "valueType": "TEXT",
      "viewType": "TEXT",
      "scenarioOrders": [
        "DESC",
        "ASC"
      ]
    }
  ]
}

```

### 3.3 基础渲染组件

**调用示例：**

```
<BusinessField weId={`${this.props.weId || ''}_jbjhsq`}
               value={value}
               onChange={this.onChange}
               businessField={businessField}
/>

```

**参数说明：**

| 名称 | 类型 | 描述 |
| --- | --- | --- |
| value | any | 属性值，回显使用 |
| onChange | `(data:any) => void` | 值变更事件 |
| businessField | Object | 字段设置内容，属性参见: [BusinessField](https://freeform.yunteams.cn/system-field/part-2-guide.html#biz_BusinessField) |

### 3.4 业务字段事件触发方案

> 实现场景：上报标题变化，通知二维码组件参数变更，二维码组件重新生成二维码； 或触发联动事件

> 业务模块事件触发通知
> 
> 参数说明

```json
{
    // 事件类型，按照约定的来
    eventType: string;
    // 字段key
    fieldMake: string;
    // 变更值
    data: any;
}

```

> 示例

```javascript
this.formStore.businessStore.eventEmitField('changeField', 'name', {value: "修改后的上报标题"});
```
