写在前面
本方案仅出于丸子当时自己的即时想法,并非官方最佳实践方案。仅供技术交流参考,如你有更优雅的实现方式,欢迎随时交流!E10 多租户互通方案中,通过 E10 开放平台连接器,可以实现当前组织与 E10 其他组织的数据互通。本文将重点介绍如何使用 ESB 动作流配合 doCreateRequest 接口实现跨组织的流程创建。
1. 准备阶段
在开始配置前,请确保已查阅官方开发文档。
接口基础信息
接口地址:
http://url:port/papi/openapi/api/workflow/core/paService/v1/doCreateRequesthttp://url:port/papi/openapi/api/workflow/core/paService/v2/doCreateRequest
- 前置要求: 参照 "后台管理中心" -> "开放平台" -> "接口示例",完成应用的创建与鉴权配置。
ESB 连接器配置
- 进入 "ESB 中心" -> "内置" -> "E10 开放平台" 。
- 新建“连接”以及“接口”(注:系统默认并未内置新建流程接口,需要自行创建)。
创建字段映射表
准备好源流程(触发源)与目标流程(被写入目标)
为了保证后续代码的通用性与可维护性,强烈建议维护一张映射表。

2. ESB 动作流构建
整个动作流的核心逻辑主要由“流程触发”与“自定义逻辑计算”组成。
流程逻辑图

核心自定义函数
在此处使用 解析JSON/XML文本 节点,配置自定义函数 buildMappingResult:
JavaScript
function buildMappingResult(flowDataStr, mappingStr, sourceKeyCol, targetKeyCol, specialTypeCol) {
var flowData = JSON.parse(flowDataStr);
var mapping = JSON.parse(mappingStr);
var result = [];
for (var i = 0; i < mapping.length; i++) {
var mapItem = mapping[i];
var sourceId = mapItem[sourceKeyCol];
var targetId = mapItem[targetKeyCol];
var specialType = mapItem[specialTypeCol];
if (!sourceId || !targetId) continue;
// 逻辑处理
if (flowData[sourceId] !== undefined) {
var mainRow = { "targetId": targetId, "targetValue": flowData[sourceId] };
if (specialType !== undefined) mainRow["specialType"] = specialType;
result.push(mainRow);
} else {
// 明细表处理
for (var key in flowData) {
if (flowData.hasOwnProperty(key)) {
var fieldData = flowData[key];
if (Object.prototype.toString.call(fieldData) === '[object Array]') {
for (var j = 0; j < fieldData.length; j++) {
var detailItem = fieldData[j];
if (Object.prototype.toString.call(detailItem) === '[object Object]' && detailItem[sourceId] !== undefined) {
var detailRow = { "targetId": targetId, "targetValue": detailItem[sourceId] };
if (specialType !== undefined) detailRow["specialType"] = specialType;
if (detailItem["dataIndex"] !== undefined) detailRow["dataIndex"] = detailItem["dataIndex"];
result.push(detailRow);
}
}
}
}
}
}
}
return JSON.stringify(result);
}3. 创建流程实例:核心参数解析
在“创建流程实例”节点中,传参的配置是重中之重。
关键点提示
- fieldId 使用原则: 如果是明细字段 ID,仅需传
dataIndex,无需传subFormId。 - 文件上传: 使用
uploadType: loadUrl,配合GENERATEFILEDOWNURL函数转换下载链接。 - 附件权限: 若涉及附件字段,
needCopy参数务必设置为true。
formData 传参对照表
| 字段 | 逻辑说明 |
|---|---|
| dataDetails | 放置【解析 JSON/XML 文本】的数据解析结果 |
| fieldId | 依据值 (dataDetails):targetId |
| dataIndex | 依据值 (dataDetails):dataIndex |
| content | 依据值 (dataDetails):targetValue |
| dataOptions | 特殊类型字段赋值:IF(NOTEMPTY(specialType), targetValue, null) |
| optionId | 多选下拉框:IF((specialType=1), dataOptions依据值本身, null) |

接口报文结构参考
点击查看 JSON 结构模板
JSON
{
"access_token": "",
"workflowId": "",
"isnextflow": "",
"dataDetails": [
{
"fieldId": "",
"dataKey": "",
"dataIndex": "",
"content": "",
"subFormId": "",
"matchByName": "",
"dataOptions": [
{
"optionId": "",
"fileByte": "",
"content": "",
"uploadParam": {
"uploadType": "",
"base64Url": "",
"loadUrl": ""
}
}
],
"needCopy": ""
}
],
"formData": {},
"userid": ""
}
如果有更好的方案,欢迎评论区留言
[泛微 Ecology10] E10使用ESB动作流&连接器使用doCreateRequest创建流程接口 by https://oneszhang.com/archives/202.html