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

最近在研究一个轻量级的工作流引擎Activiti,就遇到了子流程中无法标记其并发节点的问题,经过几天的研究,想到了一个简单易懂的方法,总结如下,希望对你们能有所帮助,有写的不对的地方,还希望大家多提宝贵意见。
第一步:子流程处理。在子流程的并发节点之前添加一个自动完成的隐藏节点。
流程图实例
第二步:隐藏节点(上图的子流程标记节点)处理。将与子流程绑定的执行id(ExecutionId)存入当前节点的Variables。
在activiti中的工作原理中,对于一个流程来说,和其绑定是实例id;但是当遇到多个子流程时,它自动分配不同的执行id与每一个子流程相对应;与此同时,子流程中节点(除并发节点外)的执行id都和所在子流程的执行id保持一致。当遇到并发节点时,它又会自动分配出不同的执行id和每一个并发节点绑定,所以在并发节点上做处理时是找不到它所在子流程的执行id,这样就不能区分当前执行的并发节点是哪个子流程中的节点。故有以下做法,将隐藏节点中的流程标记传入其后面的并发节点中。

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值