流程变量在服务任务出入参中的应用
功能介绍
为了提升流程的灵活性和集成能力,流程引擎支持在流程中定义服务任务,用于调用内部或外部的API接口。通过服务任务,您可以实现:
- 流程变量作为入参:将流程上下文中的变量传递给服务任务接口,实现数据无缝流转。
- 出参存入流程变量:将接口返回的结果存入新的流程变量,供后续节点(如用户任务、网关等)使用。
该能力可实现数据获取、加工处理、结果回写的全流程自动化执行,大幅减少人工干预,缩短业务链路响应周期,提升跨系统业务流程的自动化与标准化水平。
本文以调用“/services/rdm/common/api/Language/create”接口创建“Language”语言实例为例,完整演示服务任务从配置、发布到验证的全流程操作。
前提条件
- 已在应用运行态获取一个可调用的数据服务API。具体操作请参见全量数据服务。
示例接口路径:/services/rdm/common/api/Language/create,用于创建Language实例数据。
- 已登录流程引擎。
创建流程服务编排
流程服务编排是服务任务的调用载体,需要优先完成流程服务编排的创建与发布,才能被流程元模板的“服务任务”节点引用。
- 在左侧导航栏中,选择,进入“流程服务编排”页面。
- 单击“创建”,展开“创建服务”页面。
- 选择“手动创建”页签,参照如下参数说明完成配置后,单击“下一步”。
表1 基本信息配置信息 参数
参数说明
示例
服务名称
流程服务编排的名称。
ProcessServiceOrchestration_API_002_create
服务来源
服务的来源类型
XDM
- 在“配置信息”中,参照如下参数说明完成配置,确认无误后单击“保存并发布”。
表2 配置信息配置信息 参数
参数说明
示例
服务类型
服务的协议类型。
HTTP
服务地址
完整的调用URL。
格式:
{域名/IP:端口}/[运行服务文根]/接口路径https://dme.cn-north-4.huaweicloud.com/rdm_b38868cddaef455583c0115277b5c6c6_app/services/rdm/common/api/Language/create
方法类型
HTTP请求方法。
POST
Header参数
请求头配置。
- 参数名称:applicationId,参数值:${x-application-id}
- 参数名称:tenantId,参数值:${x-tenant-id}
Body参数
请求体配置。
- 参数类型:JSON
- Rest模板:{"params":${input}}
返参模板
响应结果提取规则。
${response.content}
“Rest模板”中的“${input}”为流程变量的占位符,将在服务任务中动态替换。
创建流程元模板
接下来,创建一个流程元模板,并在流程图中使用服务任务。
- 在左侧导航栏中,选择,进入“流程元模板”页面。
- 单击“创建”,展开“创建流程元模板”页面。
- 选择“手动创建”页签,参照如下参数说明完成配置后,单击“保存”。
表3 流程元模板基础信息 参数
参数说明
示例
英文名称
流程元模板的英文名称。
Language
中文名称
流程元模板的中文名称。
语言
- 流程元模板创建完成后,自动进入“流程编辑”页面,可基于业务需求可视化设计流程图。
- 从左侧“流程工具”栏依次拖入2个“用户任务”、1个“服务任务”和1个“结束事件”至画布,并使用连接工具依次连接画布中的各个组件。 图1 设计流程图
- 选中“用户任务”,在右侧工具信息设置面板的“常规”页签,将“中文名称”定义为“用户任务1”,单击“设置责任人”,指定审批人(如“User001”)。
- 选中另一个“用户任务”,在右侧工具信息设置面板的“常规”页签,将“中文名称”定义为“用户任务2”,单击“设置责任人”,指定审批人(如“User002”)。
- 选中“服务任务”,在右侧工具信息设置面板的“常规”页签,完成以下配置: 图2 设置服务任务
- 调用服务:选择“服务定义”,单击
,选择创建流程服务编排中已发布的流程服务编排(如“ProcessServiceOrchestration_API_002_create”)。 - 结果变量:输入“output”,用于接收接口返回的响应结果,作为后续节点可复用的流程变量。
- 调用服务:选择“服务定义”,单击
- 从左侧“流程工具”栏依次拖入2个“用户任务”、1个“服务任务”和1个“结束事件”至画布,并使用连接工具依次连接画布中的各个组件。
- 配置完成后,单击右上角的“保存”。
- 切换至“数据编辑”页面,单击“添加数据模型”,展开“添加数据模型”页面。
- 在条件筛选区域,“所属应用”选择“XDM”,“英文名称”输入“Language”,筛选出目标模型,勾选后单击“保存”,完成模型与流程的绑定。 图3 选择数据模型
- 切换至“UI编辑”页面,在“编辑态”导航树栏选中“提交任务”节点。随后从左侧“物料”插件面板的“组件”页签,将“表单”组件拖入画布的折叠面板中。 图4 添加表单组件
- 选中画布中的“表单”组件,在右侧“属性”面板的“模型选择”区域,单击“选择模型”,在弹窗中选择7添加的数据模型并确认。 图5 为表单组件绑定模型
- 配置完成后,单击右上角的“保存”。
- 在“编辑态”导航树栏选中“用户任务1”节点,切换至“用户任务1”页面。
- 在左侧“状态管理”插件面板的“页面状态”页签中,单击“添加变量”。
- 设置如下变量信息,单击“保存”。
表4 添加页面变量 参数
参数说明
示例
变量名
用户自定义,表示当前创建的页面变量的名称。
tableData
初始值
用户自定义。
""
- 参考8 - 9,为“用户任务1”节点添加“表单”组件并绑定“Language”模型。
- 选中画布中的“表单”组件,在右侧“属性”面板的“基础属性”区域,单击“绑定数据”右侧的
,在弹窗中选择13添加的页面变量“this.state.tableData”并确认。 - 在左侧“页面JS”插件面板中,输入如下代码,单击
。 function customUpdateProcessVariablesRequest(event) { // 更新流程变量 const { updateProcessVariables } = this.utils.lcCommonJS(); const { processInstanceId } = this.utils.lcUtils().useWorkflowQuery().workflowQuery.value; const params = { processInstanceId, input: this.state.tableData }; updateProcessVariables(params).then((res) => { console.log(res); }); } async function customSubmit(event) { // 自定义审批页面-提交&前置事件 const { createTaskList } = this.utils.lcCommonJS(); const { submitReviewHandler, updateGlobalStateHandler, reloadPage, submitValidHandler } = this.utils.lcUtils().useWorkflowBlock().useLcbReview(this.stores); try { await submitValidHandler(); } catch { return; } createTaskList(customUpdateProcessVariablesRequest). addTask(submitReviewHandler). addTask(updateGlobalStateHandler). addTask(reloadPage). startTask(); }
代码第5行的“input”字段需与创建流程服务编排时定义“Body参数”的“Rest模板”键名${input}保持一致。
- 在弹出的提示框中,单击“确认”。
- 选中画布底部空白区域,在右侧“属性”面板的“基础信息”区域,将“使用插槽”的“自定义操作区”设置为
。 图6 开启插槽
- 选中画布底部操作区的“提交”,在右侧“高级”面板中,将鼠标移动至“事件绑定”右侧的
,单击“onClick 鼠标单击时触发”。 图7 添加“onClick”事件
- 将鼠标移动至19添加的“onClick”右侧的
,单击“自定义JS”。 图8 自定义JS
- 在弹出的窗口中,选择“customSubmit”,单击“确定”。 图9 绑定“customSubmit”事件
- 配置完成后,单击右上角的“保存”。
- 在“编辑态”导航树栏选中“用户任务2”,切换至“用户任务2”页面。
- 在左侧“状态管理”插件面板的“页面状态”页签中,单击“添加变量”。
- 设置如下变量信息,单击“保存”。
表5 添加页面变量 参数
参数说明
示例
变量名
用户自定义,表示当前创建的页面变量的名称。
output
初始值
用户自定义。
""
- 在左侧“页面JS”插件面板中,输入如下代码,单击
。 function customGetProcessVariablesRequest(event) { const { getProcessVariables } = this.utils.lcCommonJS(); getProcessVariables().then((res) => { console.log(res); this.state.output = res.data.data.output; }); } - 在弹出的提示框中,单击“确认”。
- 从左侧“物料”插件面板的“组件”页签,依次将“按钮”、“文本展示”、“输入框”组件拖入画布的折叠面板中。 图10 添加组件
- 选中“文本展示”组件,在右侧“属性”面板的“基础信息”区域,将“文本内容”设置为“获取服务任务出参数据:”。 图11 设置文本内容
- 选中“按钮”组件,在右侧“属性”面板的“基础信息”区域,将“按钮名称”设置为“获取流程变量”。 图12 设置按钮名称
- 选中“按钮”组件,切换至右侧“高级”面板,将鼠标移动至“事件绑定”右侧的
,单击“onClick 鼠标单击时触发”。 - 将鼠标移动至31添加的“onClick”右侧的
,单击“自定义JS”,在弹窗中选择“customGetProcessVariablesRequest”并确认。 图13 绑定“customGetProcessVariablesRequest”事件
- 选中“输入框”组件,在右侧属性面板的“基础信息”区域,单击“默认值”右侧的
,在弹窗中选择25添加的页面变量“this.state.output”并确认。 图14 绑定“this.state.output”变量
- 配置完成后,单击右上角的“保存”。
发布流程元模板
- 单击左上角的“流程元模板”,返回流程元模板页面。
- 在目标流程元模板(如“Language”)所在行,单击
,检入流程元模板。 - 在目标流程元模板(如“Language”)所在行,单击
,发布流程元模板。 等待约2分钟,使发布生效。
发起流程实例
- 在流程元模板页面,在目标流程元模板(如“Language”)所在行,单击
,发起流程。 
- 在提交任务页面,填写如下信息,单击“提交”。 图15 填写提交信息
表6 提交任务的填写信息 参数
示例
语言名称
中文
系统版本
1
唯一编码
123456
用户任务1 审批人
User001
用户任务2 审批人
User002
审批流程任务
- 使用“User001”账号登录流程运行服务,进入页面。
- 在“我的待办”中,找到目标任务(即发起流程实例中提交的流程),单击其“任务名称”超链接,进入任务审批页面。
- “结论”选择“通过”,单击“提交”。
- 使用“User002”账号登录流程运行服务,进入页面。
- 在“我的待办”中,找到目标任务(即“User001”提交的流程),单击其“任务名称”超链接,进入任务审批页面。
- 单击“获取流程变量”,查看“输入框”正常显示服务任务返回的output内容。 图16 获取流程变量
- “结论”选择“通过”,单击“提交”。
验证变量与数据实例
- 进入页面,单击目标实例的“实例名称”超链接,进入该实例详情页面。
- 切换至“复杂流程”页签,在“变量”子页签中,查看input和output变量。
- input变量内容与用户任务1的提交数据一致。 图17 input变量值
- output变量内容与用户任务2的“输入框”展示内容一致。 图18 output变量值
- input变量内容与用户任务1的提交数据一致。
- 返回应用运行态,进入页面。
- “数据实体/关系实体”选择“Language”,确认数据实例已通过服务任务成功创建。 图19 “Language”数据实例