# 流程关联表单-二开口子

# 一、流程与表单关联关系

## 1.1、工作流workflowId与表单formId关系


### 1.1.1、表关系、sql说明

> 通过wfp_relateform表建立关联，relatekey为表单formid，relatetype='wea_form'代表工作流关联表单引擎的表单

```sql
-- 根据workflowid 查询工作流关联表单信息
-- 结果：relatekey为表单formid，relatetype为表单类型（表单引擎表单wea_form/挂载eb卡片wea_ebuilder/外部表单external_form等）
select id,relatekey,relatetype from wfp_relateform where workflowid = ?;

--根据表单formid查询物理表名称参考（如果是eb流程relatetype=wea_ebuilder需要到eb数据库中查询）
select table_name from form_table where form_id= ${relatekey}
--根据表单formid查询明细表名称参考
select table_name from form_table where form_id in (select id from sub_form where form_id = ${relatekey})
--根据表单formid查询明细表信息
select id from sub_form sf where form_id= ${relatekey}
```

### 1.1.2、获取工作流关联表单信息【RPC方法】

> 根据workflowId和user对象获取工作流与表单关联关系

方法路径：

```java
com.weaver.workflow.pathdef.api.rest.formdef.WfpRelateFormRest#getFirstRelateForm
```

方法入参：

| 参数名称   | 参数描述 | 必填 | 类型                                          | 备注                        |
| ---------- | -------- | ---- | --------------------------------------------- | --------------------------- |
| workflowId | 工作流id | 是   | long                                          |                             |
| user       | 用户对象 | 是   | com.weaver.workflow.common.entity.org.WeaUser | userid和租户key属性必须有值 |

返回值com.weaver.workflow.common.entity.formdef.WfpRelateFormEntity对象核心属性

| 参数名称   | 参数描述                    | 类型                                                         | 备注 |
| ---------- | --------------------------- | ------------------------------------------------------------ | ---- |
| id         | 主键id 即relateformId       | long                                                         |      |
| workflowId | 工作流id                    | long                                                         |      |
| relateType | 关联分类-枚举               | com.weaver.workflow.common.constant.formdef.WfpRelateFormType |      |
| relateKey  | 关联key，关联表单就是formid | long                                                         |      |

调用示例：

```java
@RpcReference(group = "workflow")
private WfpRelateFormRest wfpRelateFormRest;

WfpRelateFormEntity firstRelateForm = wfpRelateFormRest.getFirstRelateForm(workflowId, user);
```


## 1.2、流程实例requestID与表单数据dataId关联关系

### 1.2.1、表关系、sql说明

> 2501基线后产生的新数据，默认requesitd=物理表的form_data_id

> 历史数据需通过wfc_form_data联查，如果是挂载eb表单，物理表要查eb所在库
```sql
-- 根据流程实例requestId 查询表单数据dataId
select dataid from wfc_form_data where requestid = ?;

--根据dataId查询物理表数据，其中fto_5为对应物理表名称，即【1.1.1】中table_name
select * from fto_5 where form_data_id= ${dataid}
```

> 比如按物理表查询指定工作流、指定发起时间数据
```
select * from formtable_main_1 ft
inner join wfc_form_data wfd on wfd.workflowid =? and wfd.dataid = ft.FORM_DATA_ID 
inner join wfc_requestbase wr on wr.requestid =wfd.requestid 
where wr.delete_type =0 and wr.createdatetime>'2025-01-01'
```


### 1.2.2、获取流程关联表单数据dataId【RPC方法】

> 根据requestId、relateFormId和user对象获取dataId

方法路径：

```java
com.weaver.workflow.core.api.rest.form.WfcFormRest#getFormDataId
```


方法入参：

| 参数名称     | 参数描述   | 必填 | 类型                                          | 备注                        |
| ------------ | ---------- | ---- | --------------------------------------------- | --------------------------- |
| requestId    | 流程id     | 是   | long                                          |                             |
| relateFormId | 关联表单id | 是   | long                                          | wfp_relateform表主键id      |
| user         | 用户对象   | 是   | com.weaver.workflow.common.entity.org.WeaUser | userid和租户key属性必须有值 |

返回值说明：

dataId 即表单数据id

调用示例：

```java
@RpcReference(group = "workflow")
private WfcFormRest wfcFormRest;

WeaResult<Long> formDataIdResult = wfcFormRest.getFormDataId(requestId, relateFormId, user);
long dataid = formDataIdResult.getData();
```



# 二、常用接口

> 指入参为workflowid/requestid，返回对象为表单数据

## 2.1 获取字段值

### 2.1.1 获取表单所有字段值

#### 2.1.1.1 根据流程requestid获取

方法路径：

> 支持eb卡片

```java
com.weaver.workflow.core.api.rest.publicapi.WfcFormFieldRest#getFormDataByRequestId 
```

方法入参：

| 参数名称  | 参数描述 | 必填 | 类型                                        | 备注 |
| --------- | -------- | ---- | ------------------------------------------- | ---- |
| requestId | 流程id   | 是   | long                                        |      |
| employee  | 用户对象 | 是   | com.weaver.teams.domain.user.SimpleEmployee |      |

返回值说明：

   > 返回值类com.weaver.common.form.data.FormData属性说明

| 参数名称    | 参数描述 | 类型                                                    | 备注 |
| ----------- | -------- | ------------------------------------------------------- | ---- |
| dataDetails | 数据明细 | List<com.weaver.common.form.data.detail.FormDataDetail> | 详细说明参考：https://weapp.eteams.cn/build/techdoc/wdoc/index.html#/public/repository/72f6b79c-942a-4d1d-984a-911fe9522bb7/doc/954711594404675584      |



调用示例：

```java
@RpcReference
private WfcFormFieldRest wfcFormFieldRest;

FormData formData = wfcFormFieldRest.getFormDataByRequestId(requestId, employee);
```



#### 2.1.1.2 根据表单数据dataid获取

方法路径：

> 不支持eb卡片，仅支持流程表单

```java
com.weaver.workflow.core.api.rest.publicapi.WfcFormDataRest#getFullFormData
```

方法入参：

| 参数名称   | 参数描述   | 必填 | 类型                                        | 备注 |
| ---------- | ---------- | ---- | ------------------------------------------- | ---- |
| formDataId | 表单dataid | 是   | long                                        |      |
| employee   | 用户对象   | 是   | com.weaver.teams.domain.user.SimpleEmployee |      |

返回值说明：

   > 返回值类com.weaver.common.form.data.FormData属性说明

| 参数名称    | 参数描述 | 类型                                                    | 备注 |
| ----------- | -------- | ------------------------------------------------------- | ---- |
| dataDetails | 数据明细 | List<com.weaver.common.form.data.detail.FormDataDetail> | 详细说明参考：https://weapp.eteams.cn/build/techdoc/wdoc/index.html#/public/repository/72f6b79c-942a-4d1d-984a-911fe9522bb7/doc/954711594404675584     |

调用示例：

```java
@RpcReference
private WfcFormDataRest wfcFormDataRest;

FormData formData = wfcFormDataRest.getFullFormData(formDataId,employee);
```



### 2.1.2 获取表单指定字段值

#### 2.1.2.1 根据流程requestid、表单字段fieldId集合获取

方法路径：

> 支持eb卡片

```java
com.weaver.workflow.core.api.rest.publicapi.WfcFormDataRest#getFormFieldValue
```

方法入参：

| 参数名称  | 参数描述   | 必填 | 类型                 | 备注 |
| --------- | ---------- | ---- | -------------------- | ---- |
| requestId | 流程id     | 是   | long                 |      |
| fieldIds  | 字段id集合 | 是   | java.util.List<Long> |      |
| userId    | 用户id     | 是   | long                 |      |

返回值说明：

> 返回值类com.weaver.common.form.data.detail.FormDataDetail属性说明
  
详细说明参考：https://weapp.eteams.cn/build/techdoc/wdoc/index.html#/public/repository/72f6b79c-942a-4d1d-984a-911fe9522bb7/doc/954711594404675584

调用示例：

```java
@RpcReference
private WfcFormDataRest wfcFormDataRest;

List<FormDataDetail> formDataDetilList = wfcFormDataRest.getFormFieldValue(requestId,fieldIds,userId);
```



#### 2.1.2.2 根据表单数据dataid、表单字段fieldId集合获取

方法路径：

> 支持eb卡片

```java
com.weaver.workflow.core.api.rest.publicapi.WfcFormDataRest#queryFieldValue(com.weaver.workflow.common.entity.formdef.condition.RelateFormTypeCondition, java.lang.Long, java.util.List<java.lang.Long>, com.weaver.teams.domain.user.SimpleEmployee)
```

方法入参：

| 参数名称   | 参数描述   | 必填 | 类型                                        | 备注 |
| ---------- | ---------- | ---- | ------------------------------------------- | ---- |
| condition  | 关联表单condition| 是 | com.weaver.workflow.common.entity.formdef.condition.RelateFormTypeCondition|   |
| formDataId | 表单dataid | 是   | long                                        |      |
| fieldIds   | 字段id集合 | 是   | List<Long>                                  |      |
| employee   | 用户对象   | 是   | com.weaver.teams.domain.user.SimpleEmployee |      |

com.weaver.workflow.common.entity.formdef.condition.RelateFormTypeCondition属性说明：
  
| 参数名称       | 参数说明     | 参数类型                                                     | 备注                               |
| -------------- | ------------ | ------------------------------------------------------------ | ---------------------------------- |
| workflowId     | 工作流id     | long                                                         | workflowId和relateKey 必传其中之一 |
| relateKey      | 表单id       | long                                                         | workflowId和relateKey 必传其中之一 |
| relateFormType | 关联表单类型 | com.weaver.workflow.common.constant.formdef.WfpRelateFormType | 非必填                             |
| otherParams    | 其他参数     | Map<String, Object>                                          |                                    |

  

返回值说明：

com.weaver.common.form.data.detail.FormDataDetail对象list集合
  
详细说明参考：https://weapp.eteams.cn/build/techdoc/wdoc/index.html#/public/repository/72f6b79c-942a-4d1d-984a-911fe9522bb7/doc/954711594404675584

调用示例：

```java
@RpcReference
private WfcFormDataRest wfcFormDataRest;

List<FormDataDetail> formDataDetails = wfcFormDataRest.queryFieldValue(formDataId, fieldIds, user);
```



#### 2.1.2.3 根据流程requestid、FormDataSearchEntity条件获取

方法路径：

> 支持eb卡片

```java
com.weaver.workflow.core.api.rest.publicapi.WfcFormFieldRest#getFormDataListBySearchEntity
```

方法入参：

| 参数名称  | 参数描述     | 必填 | 类型                                                     | 备注                                    |
| --------- | ------------ | ---- | -------------------------------------------------------- | --------------------------------------- |
| requestId | 流程id       | 是   | long                                                     |                                         |
| entity    | 查询条件对象 | 是   | com.weaver.common.form.searchentity.FormDataSearchEntity | 获取数据详情containsDataDetails需传true |
| employee  | 用户对象     | 是   | com.weaver.teams.domain.user.SimpleEmployee              |                                         |

返回值说明：

   > 返回值类com.weaver.common.form.data.FormData属性说明

| 参数名称    | 参数描述 | 类型                                                    | 备注 |
| ----------- | -------- | ------------------------------------------------------- | ---- |
| dataDetails | 数据明细 | List<com.weaver.common.form.data.detail.FormDataDetail> |  详细说明参考：https://weapp.eteams.cn/build/techdoc/wdoc/index.html#/public/repository/72f6b79c-942a-4d1d-984a-911fe9522bb7/doc/954711594404675584    |

调用示例：

```java
@RpcReference
private WfcFormFieldRest wfcFormFieldRest;

 List<FormData> formDataList = wfcFormFieldRest.getFormDataListBySearchEntity(requestId, entity, employee);
```



### 2.1.3 批量获取表单字段值

#### 2.1.3.1 根据表单数据dataId集合和表单formId批量获取

方法路径：

> 不支持eb卡片，仅支持流程表单

```java
com.weaver.workflow.core.api.rest.publicapi.WfcFormDataRest#getFullFormDatasByIds
```

方法入参：

| 参数名称    | 参数描述       | 必填 | 类型                                        | 备注 |
| ----------- | -------------- | ---- | ------------------------------------------- | ---- |
| formDataIds | 表单dataid集合 | 是   | List<Long>                                  |      |
| formId      | 表单id         | 是   | long                                        |      |
| employee    | 用户对象       | 是   | com.weaver.teams.domain.user.SimpleEmployee |      |

返回值说明：

   > 返回值类com.weaver.common.form.data.FormData属性说明

| 参数名称    | 参数描述 | 类型                                                    | 备注 |
| ----------- | -------- | ------------------------------------------------------- | ---- |
| dataDetails | 数据明细 | List<com.weaver.common.form.data.detail.FormDataDetail> |  详细说明参考：https://weapp.eteams.cn/build/techdoc/wdoc/index.html#/public/repository/72f6b79c-942a-4d1d-984a-911fe9522bb7/doc/954711594404675584    |

示例：

```java
@RpcReference
private WfcFormDataRest wfcFormDataRest;

List<FormData> formDataList = wfcFormDataRest.getFullFormDatasByIds(formDataIds, formId, employee);
```



## 2.2 修改字段值

#### 2.2.1 根据流程条件实体及userId修改表单字段值

> 支持eb卡片

```java
com.weaver.workflow.core.api.rest.publicapi.WfcFormDataRest#changeFormData(com.weaver.workflow.common.dto.formrelate.WfFormDataDto, long) 
```

方法入参：  

| 参数名称    | 参数描述     | 必填 | 类型                                                    | 备注                                                         |
| ----------- | ------------ | ---- | ------------------------------------------------------- | ------------------------------------------------------------ |
| formDataDto | 表单data实体 | 是   | com.weaver.workflow.common.dto.formrelate.WfFormDataDto | relateFormId：必传；dataId、requestId传其一即可；传递dataId则直接使用传入的dataId；反之根据requestId计算dataId;fieldValues:必传；tableIndex：明细表下标，不传则为主表字段；contextId、fieldId传其一即可，没有fieldId，则通过contextId计算得到fieldId； |
| userId      | 人员id       | 是   | long                                                    |                                                              |

返回值说明：
更新结果，成功返回true，失败返回false

示例：

```java
@RpcReference
private WfcFormDataRest wfcFormDataRest;
  
boolean status = wfcFormDataRest.changeFormData(formDataDto, userId)
```
  
#### 2.2.2 根据流程条件实体及user对象修改表单字段值

> 支持eb卡片 2512基线开始包含

```java
com.weaver.workflow.core.api.rest.publicapi.WfcFormDataRest#changeFormData(com.weaver.workflow.common.dto.formrelate.WfFormDataDto, com.weaver.workflow.common.entity.org.WeaUser)
```
  
方法入参：  

| 参数名称    | 参数描述     | 必填 | 类型                                                    | 备注                                                         |
| ----------- | ------------ | ---- | ------------------------------------------------------- | ------------------------------------------------------------ |
| formDataDto | 表单data实体 | 是   | com.weaver.workflow.common.dto.formrelate.WfFormDataDto | relateFormId：必传；dataId、requestId传其一即可；传递dataId则直接使用传入的dataId；反之根据requestId计算dataId;fieldValues:必传；tableIndex：明细表下标，不传则为主表字段；contextId、fieldId传其一即可，没有fieldId，则通过contextId计算得到fieldId； |
| user      | 人员对象       | 是   | com.weaver.workflow.common.entity.org.WeaUser                                                   |                                                              |

返回值说明：
更新结果，成功返回true，失败返回false

示例：

```java
@RpcReference
private WfcFormDataRest wfcFormDataRest;
  
boolean status = wfcFormDataRest.changeFormData(formDataDto, user)
```  

## 2.3 获取字段信息

### 2.3.1 获取表单所有字段信息

#### 2.3.1.1 根据工作流workflowId获取

方法路径：

> 支持eb卡片

```java
com.weaver.workflow.core.api.rest.publicapi.WfcFormFieldRest#findFieldByWorkflowId
```

方法入参：

| 参数名称   | 参数描述 | 必填 | 类型                                        | 备注 |
| ---------- | -------- | ---- | ------------------------------------------- | ---- |
| workflowId | 工作流id | 是   | long                                        |      |
| employee   | 用户对象 | 是   | com.weaver.teams.domain.user.SimpleEmployee |      |

返回值说明：

> 返回值类com.weaver.common.form.metadata.field.FormField属性说明

| 参数名称     | 参数描述 | 类型   | 备注 |
| ------------ | -------- | ------ | ---- |
| title        | 字段标题 | String |      |
| componentKey | 控件类型 | String |      |
| dataKey      | 数据key  | String |      |
| formId       | 表单id   | long   |      |

示例：

```java
@RpcReference
private WfcFormFieldRest wfcFormFieldRest;

List<FormField> fieldList = wfcFormFieldRest.findFieldByWorkflowId(workflowId, employee);
```



### 2.3.2 获取表单指定字段信息

#### 2.3.2.1 根据字段fieldId获取

方法路径：

> 不支持eb卡片，仅支持流程表单

```java
com.weaver.workflow.core.api.rest.publicapi.WfcFormFieldRest#getById
```

方法入参：

| 参数名称 | 参数描述 | 必填 | 类型 | 备注 |
| -------- | -------- | ---- | ---- | ---- |
| fieldid  | 字段id   | 是   | long |      |

返回值说明：

> 返回值类com.weaver.common.form.metadata.field.FormField属性说明

| 参数名称     | 参数描述 | 类型   | 备注 |
| ------------ | -------- | ------ | ---- |
| title        | 字段标题 | String |      |
| componentKey | 控件类型 | String |      |
| dataKey      | 数据key  | String |      |
| formId       | 表单id   | long   |      |

示例：

```java
@RpcReference
private WfcFormFieldRest wfcFormFieldRest;

FormField formField = wfcFormFieldRest.getById(fieldId);
```
  
# 三、二开口子
  
## 3.1 复写流程详情PC端布局id、移动端布局id、字段权限id 
1. **钩子标识**
`com.weaver.workflow.bridge.form.secondhook.BridgeFormHookConstant#WORKFLOW_CORE_FLOW_PAGE_FORM_CONFIG_001`
2. **功能描述**：支持二开复写流程详情PC端布局id、移动端布局id、字段权限id
3. **返回类型**：`Map<String, String>`
4. **2602基线开始支持**

---

### 3.1.1 入参说明
调用钩子时会传入以下参数，参数类型均为字符串：

| 参数名 | 说明 |
| ---- | ---- |
| requestId | 流程实例ID |
| nodeId | 流程节点ID |
| workflowId | 工作流模板ID |
| userId | 用户ID |
| tenantKey | 租户唯一标识|

---

### 3.1.2 返回值说明
钩子返回固定结构的Map集合，包含三个核心配置键值对：

| 返回Key | 含义 |
| ---- | ---- |
| layoutMultiId | PC端表单布局ID |
| mLayoutId | 移动端表单布局ID |
| permissionId | 表单字段权限ID |

---

# 四、流程表单设计器系统字段labelId

1. 工作流名称：55572
2. 工作流类型：53778
3. 工作流描述：55629
4. 流程标题：1913
5. 流程编号：58253
6. 紧急程度：11610
7. 密级：95077
8. 提交人：58923
9. 提交人分部：150873
10. 提交人部门：65625
11. 提交时间：61432
12. 结束时间：61433
13. 流程状态：27783
14. 签字意见：56631
15. 拟签意见：174241
16. 到期时间：237032