如何在Kogito自定义任务中匹配多自定义对象的输入输出变量
解决多自定义对象输入输出的变量映射问题
1. 在BPMN自定义任务中明确输入输出的映射规则
在BPMN编辑器配置自定义任务时,需显式定义输入对象与对应输出变量的关联关系:
- 输入参数:给每个自定义对象输入添加关联标识,比如针对输入
userInfo,额外添加参数userInfo_outputVar并赋值为目标输出变量名processedUser;同理,输入orderInfo对应添加orderInfo_outputVar赋值为processedOrder。 - 输出参数:在自定义任务的输出配置中预留好对应变量位,后续由处理器填充值。
2. 在KogitoWorkItemHandler处理器中解析映射并赋值
重写executeWorkItem方法时,从WorkItem中读取输入参数,解析映射关系后将处理结果对应放入返回的Map:
@Override public void executeWorkItem(WorkItem workItem, WorkItemManager manager) { // 获取所有输入参数 Map<String, Object> parameters = workItem.getParameters(); // 提取输入对象与对应输出变量名 UserInfo userInfo = (UserInfo) parameters.get("userInfo"); String userOutputVar = (String) parameters.get("userInfo_outputVar"); OrderInfo orderInfo = (OrderInfo) parameters.get("orderInfo"); String orderOutputVar = (String) parameters.get("orderInfo_outputVar"); // 处理自定义对象 UserInfo processedUser = processUser(userInfo); OrderInfo processedOrder = processOrder(orderInfo); // 按指定输出变量名赋值 Map<String, Object> results = new HashMap<>(); results.put(userOutputVar, processedUser); results.put(orderOutputVar, processedOrder); // 完成任务并返回结果 manager.completeWorkItem(workItem.getId(), results); }
3. 利用BPMN自定义属性简化映射配置
若不想添加过多冗余参数,可借助BPMN元素的**扩展属性(Extension Elements)**存储映射关系:
- 在自定义任务的扩展属性中添加JSON格式的映射配置,比如:
{"userInfo": "processedUser", "orderInfo": "processedOrder"} - 在处理器中读取并解析该配置,批量处理输入输出:
// 获取自定义扩展属性 Map<String, Object> extensions = (Map<String, Object>) workItem.getParameters().get("extensions"); String mappingJson = (String) extensions.get("input-output-mappings"); Map<String, String> ioMappings = new ObjectMapper().readValue(mappingJson, new TypeReference<Map<String, String>>() {}); // 批量处理并赋值 Map<String, Object> results = new HashMap<>(); for (Map.Entry<String, String> entry : ioMappings.entrySet()) { Object inputObj = parameters.get(entry.getKey()); Object processedObj = processCustomObject(inputObj); // 按对象类型分支处理的通用方法 results.put(entry.getValue(), processedObj); }
4. 关键注意点
- 确保输入对象类型在处理器中能正确强转,或通过类型判断实现通用处理逻辑。
- 保证流程中所有输出变量名唯一,避免变量覆盖冲突。
- 调试时可打印
workItem.getParameters()的内容,确认映射信息是否正确传递。
内容的提问来源于stack exchange,提问作者codeforHarman
相关产品推荐
相关产品推荐

