1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Activiti中的关于子流程中的并发节点标记处理

Activiti中的关于子流程中的并发节点标记处理

时间:2020-07-18 20:16:01

相关推荐

Activiti中的关于子流程中的并发节点标记处理

最近在研究一个轻量级的工作流引擎Activiti,就遇到了子流程中无法标记其并发节点的问题,经过几天的研究,想到了一个简单易懂的方法,总结如下,希望对你们能有所帮助,有写的不对的地方,还希望大家多提宝贵意见。

第一步:子流程处理。在子流程的并发节点之前添加一个自动完成的隐藏节点。

第二步:隐藏节点(上图的子流程标记节点)处理。将与子流程绑定的执行id(ExecutionId)存入当前节点的Variables。

在activiti中的工作原理中,对于一个流程来说,和其绑定是实例id;但是当遇到多个子流程时,它自动分配不同的执行id与每一个子流程相对应;与此同时,子流程中节点(除并发节点外)的执行id都和所在子流程的执行id保持一致。当遇到并发节点时,它又会自动分配出不同的执行id和每一个并发节点绑定,所以在并发节点上做处理时是找不到它所在子流程的执行id,这样就不能区分当前执行的并发节点是哪个子流程中的节点。故有以下做法,将隐藏节点中的流程标记传入其后面的并发节点中。

/*** 隐藏节点监听器* /public class SubFlowHiddenTaskListener implements TaskListener {@Overridepublic void notify(DelegateTask delegateTask) {//获得当前子流程的执行idString executionIdString = delegateTask.getExecutionId();//存入VariabledelegateTask.setVariable("flowIndex", executionIdString); }}

第三步:并发节点处理。在并发节点中获取流程标记。

/*** 并发节点监听器* /public class SubFlowConcurrencyTaskListener implements TaskListener {@Overridepublic void notify(DelegateTask delegateTask) {//获得当前子流程的执行idMap<String, Object> map = delegateTask.getVariables();String flowIndex = (String) map.get("flowIndex");//其他操作······}}

这样就可以让每一个并发节点都有一个特定的归属了!!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。