activiti5.21中调用活动(callactivity),在多实例(multi-instance)情况下,子流程无法返回值到主流程
来源:互联网 发布:软件绿色化 编辑:程序博客网 时间:2024/05/23 10:33
在业务场景中,如果需要调用其他流程,我们可以使用callactivity,通过activiti:in,我们可以将主流程的参数传递给子流程,通过activiti:out可以将子流程执行结束后的参数返回给主流程,在单实例情况下,是没有问题的。
但是,当我们调用的子流程数量是不定的,且每个子流程都不一样时,我们可以通过设置调用活动为multi-instance,将子流程运行时动态传递给工作流引擎,如下:
<callActivity id="call" name="子流程调用" calledElement="${subprocess}"><extensionElements><activiti:in source="businessId" target="businessId"/><activiti:in source="businessTable" target="businessTable"/><activiti:out source="cancelled" target="cancelled"/></extensionElements><multiInstanceLoopCharacteristics isSequential="false" activiti:collection="${subprocesslist}" activiti:elementVariable="subprocess"><completionCondition>${cancelled=='1'}</completionCondition></multiInstanceLoopCharacteristics></callActivity>
这种情况下,activiti:in依然可以传递参数给子流程,但是activiti:out无法返回子流程的值给主流程,
org.activiti.engine.impl.bpmn.behavior.CallActivityBehavior中,单实例情形中,流程完成前会将子流程的变量传递给父流程 public void completing(DelegateExecution execution, DelegateExecution subProcessInstance) throws Exception { // only data. no control flow available on this execution. // copy process variables for (AbstractDataAssociation dataOutputAssociation : dataOutputAssociations) { Object value = null; if (dataOutputAssociation.getSourceExpression()!=null) { value = dataOutputAssociation.getSourceExpression().getValue(subProcessInstance); } else { value = subProcessInstance.getVariable(dataOutputAssociation.getSource()); } execution.setVariable(dataOutputAssociation.getTarget(), value); } }
org.activiti.engine.impl.bpmn.behavior.MultiInstanceActivityBehavior中,多实例情形中,流程完成前直接忽略了子流程变量的处理,所以activiti:out中得不到值public void completing(DelegateExecution execution, DelegateExecution subProcessInstance) throws Exception { // only data. no control flow available on this execution. // copy process variables for (AbstractDataAssociation dataOutputAssociation : dataOutputAssociations) { Object value = null; if (dataOutputAssociation.getSourceExpression()!=null) { value = dataOutputAssociation.getSourceExpression().getValue(subProcessInstance); } else { value = subProcessInstance.getVariable(dataOutputAssociation.getSource()); } execution.setVariable(dataOutputAssociation.getTarget(), value); } }
// required for supporting external subprocesses public void completing(DelegateExecution execution, DelegateExecution subProcessInstance) throws Exception { }
解决方案:
将MultiInstanceActivityBehavior类复制一份到项目中,补充comleting方法:
调用CallActivityBehavior的completing方法,完成变量的传递。
下载MultiInstanceActivityBehavior类
http://download.csdn.net/detail/xxhhbb1538/9680382
0 0
- activiti5.21中调用活动(callactivity),在多实例(multi-instance)情况下,子流程无法返回值到主流程
- activiti5 流程复用技术 callActivity
- tomcat CATALINA_BASE multi instance on windows 在window下启动多个tomcat实例
- 主流程中包含子流程
- 多示例学习(multi-instance learning)
- JBPM流程实例(PI)Process Instance
- R.NET用于Excel Add-In的多实例(multi-Instance)问题及解决方法(1)
- R.NET用于Excel Add-In的多实例(multi-Instance)问题及解决方法(2)
- 基于OpenCV的Sift特征匹配(在drawMatchesKnn函数无法调用的情况下)
- create instance 生成创建虚拟机从nova到调用libvirt流程(pycharm debug):
- c++,在windows下调用子进程,并获得子进程的返回值。
- 多示例学习(Multi Instance Learning)的概念
- 历史数据查询(流程实例、活动、任务、流程变量)
- jBPM-4.4:主流程(process)与子流程(sub-process)之间交换数据
- Activiti5.9 流程实例中同一个流程businessKey重复的问题
- Activiti5.9 流程实例中同一个流程businessKey重复的问题
- [学习小结]Activiti5 流程实例管理
- 关于datagridview中checkbox列在选中行的情况下无法操作值
- 内核1
- cocostudio1.6制作动画的在使用中的内存优化
- 关于word 07中页码不连续的问题
- Part 78 - MVC中不同的ActionResult 类型
- select2 使用教程(简)
- activiti5.21中调用活动(callactivity),在多实例(multi-instance)情况下,子流程无法返回值到主流程
- ARP协议
- 蓝桥杯 杨辉三角
- 那一世
- 没有喜欢的人是一种什么样的体验?
- 古风
- 古风2
- JS生成随机数
- Swift3.0 设置WKWebView cookies