> **支持基线: 2304.01**

##### 引入 weaver-ebuilder-form-client jar：

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

##### 请求接口:    ([为后续项目使用中切换应用独立部署的需要，二开逻辑请使用独立部署方式调用](https://weapp.eteams.cn/build/techdoc/wdoc/index.html#/public/doc/81831572-da60-474d-9328-2309af780fb9))

```java
// 基线版本:10.0.2410.01(含), 版本后必须使用该方式操作 - (为后续项目使用中切换应用独立部署的需要)
@Autowired
private PublishKitRuntimeUtil publishKitRuntimeUtil;

RemoteSimpleDataService remoteSimpleDataService = publishKitRuntimeUtil.buildRpcService(com.weaver.ebuilder.form.client.service.data.RemoteSimpleDataService.class, "ebuilderform", appId);
remoteSimpleDataService.saveFormData(ebDataChangeReqDto);

/******************************************************************************************************************/

// 基线版本:10.0.2410.01之前版本可使用:
@RpcReference(group = "ebuilderform")
private com.weaver.ebuilder.form.client.service.data.RemoteSimpleDataService remoteSimpleDataService;

remoteSimpleDataService.saveFormData(ebDataChangeReqDto);
```

 **注意**: 若是二开免登陆的方式调用 需要在调用之前用如下方式手动设置到上下文当前租户

	com.weaver.framework.rpc.context.impl.TenantRpcContext#setTargetTenantKey(String tenantKey)

##### 请求参数:

| 参数名 | 参数类型 | 参数说明 |
| --- | --- | --- |
| ebDataChangeReqDto | com.weaver.ebuilder.form.client.entity.data.EBDataChangeReqDto | eb数据变更请求信息 |

##### 参数说明:

###### [ eb系统参数获取说明(objId, appId, fieldId, layoutId)](https://weapp.eteams.cn/build/techdoc/wdoc/index.html#/public/doc/4771f4ea-bf3d-403e-81c1-c2983e604b06)

###### [ 数据操作请求参数说明](https://weapp.eteams.cn/sp/techdoc/doc/12446a88-388b-426f-a1dd-aad13907929c/freepass)

##### 请求示例:

```json
{
    "datas": [
        {
            "detailDatas": {
				// key:subFormId, value:传入字段值关系
                "778020080085254145": [
                    [
                        {
                            "content": "767",
                            "fieldId": "778020080085254147"
                        },
                        {
                            "content": "345",
                            "fieldId": "778020080085254146"
                        }
                    ],
                    [
                        {
                            "content": "767",
                            "fieldId": "778020080085254147"
                        },
                        {
                            "content": "345",
                            "fieldId": "778020080085254146"
                        }
                    ]
                ]
            },
            "mainDatas": [
                {
                    "content": "827779861835694084",
                    "fieldId": "827779767447076865"
                }
            ]
        }
    ],
    "header": {
        "objId": "827390643350716667",
        "operator": "2226677261577323087",
        "tenantKey": "tfg4et9wmj"
    },
    "operation": {
        "asyncPostProcess": true,
        "checkRight": false,
        "doActoin": false,
        "execMonitor": false,
        "execRelate": false,
        "needPostProcess": true,
        "optionNoFindIgnore": false
    }
}
```

##### 代码组装示例:

```java
EBDataChangeReqDto ebDataChangeReqDto = new EBDataChangeReqDto();
// 构建基础参数; objId 表单id, operator 操作人, tenantKey 租户
ebDataChangeReqDto.setHeader(new EBDataReqHeader("845949514837516289", "5112849484828049659", "t2k74i3rjo"));
List<EBDataReqDto> datas = new ArrayList<>();

// 若数据写入后就要从前台看到数据或者立即操作本次写入的数据, 需要调整后置处理为同步 权限处理完成再返回
EBDataReqOperation operation = new EBDataReqOperation();
operation.setAsyncPostProcess(false);
ebDataChangeReqDto.setOperation(operation);

// 数据1
EBDataReqDto ebDataReqDto1 = new EBDataReqDto();
// 以下两行密级参数如无需要可忽略
// 设置密级级别为4(公开),  具体密级级别需要以当前环境为准
ebDataReqDto1.setClassification(4);
// 设置密级期限为20年,  具体密级期限需要以当前环境为准
ebDataReqDto1.setClassificationExpire("20年");
// 主表数据参数
List<EBDataReqDetailDto> mainData1 = new ArrayList<>();
// 单行文本
mainData1.add(new EBDataReqDetailDto("845949549147324416", "单行文本数据1"));
// 选择框根据选项名赋值
mainData1.add(new EBDataReqDetailDto("845949549147324419", "选项1", true));
ebDataReqDto1.setMainDatas(mainData1);

// 明细数据参数
Map<Long, List<List<EBDataReqDetailDto>>> detailDatas = new HashMap<>();
// 多条明细数据
List<List<EBDataReqDetailDto>> subFormDatas = new ArrayList<>();
// 单明细数据不同字段值 - 明细数据1
List<EBDataReqDetailDto> subFormRowData1 = new ArrayList<>();
subFormRowData1.add(new EBDataReqDetailDto("845949549147324416", "明细数据1-1"));
subFormRowData1.add(new EBDataReqDetailDto("845949549147324417", "明细数据1-2"));
subFormDatas.add(subFormRowData1);
// 单明细数据不同字段值 - 明细数据2
List<EBDataReqDetailDto> subFormRowData2 = new ArrayList<>();
subFormRowData2.add(new EBDataReqDetailDto("845949549147324416", "明细数据2-1"));
subFormRowData2.add(new EBDataReqDetailDto("845949549147324417", "明细数据2-2"));
subFormDatas.add(subFormRowData2);
// 将明细数据设置到执行明细表中
detailDatas.put(845949549147324416L, subFormDatas);
ebDataReqDto1.setDetailDatas(detailDatas);

// 数据2
EBDataReqDto ebDataReqDto2 = new EBDataReqDto();
List<EBDataReqDetailDto> mainData2 = new ArrayList<>();
// 单行文本
mainData2.add(new EBDataReqDetailDto("845949549147324416", "单行文本数据2"));
// 选择框根据选项value值赋值
mainData2.add(new EBDataReqDetailDto("845949549147324419", "选项value值1", false));
ebDataReqDto2.setMainDatas(mainData2);

datas.add(ebDataReqDto1);
datas.add(ebDataReqDto2);
ebDataChangeReqDto.setDatas(datas);
EBDataChangeResult ebDataChangeResult = remoteSimpleDataService.saveFormData(ebDataChangeReqDto);
```

###### [特殊字段写入示例(地址位置、人员范围选择、人力资源条件、附件)](https://weapp.eteams.cn/build/techdoc/wdoc/index.html#/public/doc/a2d11226-de1b-4712-aab2-ae9d5dd7b0b4)

###### [以字段dataKey的方式请求操作数据](https://weapp.eteams.cn/build/techdoc/wdoc/index.html#/public/doc/285f851b-fbfc-4ffa-89e7-810fa0759339)

##### 返回成功示例:

```json
{
    "status": true,
	"ids": [
		"841452744116652236",
		"841452744116652237"
	]
}
```

##### 返回失败示例:

```json
{
    "status": false,
	"message": "没有数据操作权限，请联系管理员添加权限"
}

{
    "status": false,
	"message": "参数异常，请求参数中有效字段为空"
}
```
