原文地址:http://blog.csdn.net/xxhhbb1538/article/details/53116793
在业务场景中,如果需要调用其他流程,我们可以使用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中,单实例情形中,流程完成前会将子流程的变量传递给父流程
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类
相关推荐
我们不翻译,我们只是搬运工.贡献给activiti入门的新手查询 我们不翻译,我们只是搬运工.贡献给activiti入门的新手查询 调整下载积分
Activiti-5.21库表结构
activiti5.21中调用活动(callactivity),在多实例(multi-instance)情况下,子流程无法返回值到主流程,流程完成前直接忽略了子流程变量的处理,所以activiti:out中得不到值 解决方案:将...
Activiti V5.21 用户手册 中文版
activiti-5.21 + Activiti5.20.0整合spring4.15示例
赠送jar包:activiti-engine-5.21.0.jar; 赠送原API文档:activiti-engine-5.21.0-javadoc.jar; 赠送源代码:activiti-engine-5.21.0-sources.jar; 赠送Maven依赖信息文件:activiti-engine-5.21.0.pom; 包含...
activiti-5.21.0.zip(由于上传大小限制,分为两个包,此部分为不包含war的内容,war包在另外下载资源)
Activiti-5.21数据库表结构详解(共25张表) 工作流的应用越来越广泛,而activiti是公认的现阶段最好的工作流框架之一,详细了解activiti的库表结构有助于您更好的掌握学习工作流框架,共享本资源以供广大编程从业人员...
赠送jar包:activiti-json-converter-5.21.0.jar; 赠送原API文档:activiti-json-converter-5.21.0-javadoc.jar; 赠送源代码:activiti-json-converter-5.21.0-sources.jar; 赠送Maven依赖信息文件:activiti-...
Activiti 5.21 + moduler+spring mvc 基础环境搭建,可直接运行。包含Junit 测试,有建议或者意见可回复探讨,另请文明使用,谢谢!
activiti5.21的modeler整合到项目中,提供全程源码,创建model 发布流程、下载xml和png图片 跑不通不收分!
解压后,用浏览器打开"Activiti 用户手册.htm",图片和样式齐全
Java web 集成Activiti 5.21实现工作流在线设计,包含集成步骤文档,以及相关所需配置文件、jar包..................................................................
这个是Activiti开发的请假流程实例,可以作为用Activiti开发工作流的参考;项目采用spring+hibernate+strus2+activity开发,可以运行;数据库采用oracle,其中 QingJia 和 QingJiaHis 是自己的业务表,分别表示 请假...
RuoYi-activitiRuoYi-activitiRuoYi-activiti
Activiti_V5.21_用户手册_中文版. Table of Contents 1. 简介 1.1. 协议 1.2. 下载 1.3. 源码 1.4. 必要的软件 1.4.1. JDK 6+ 1.4.2. Eclipse Indigo 和 Juno 1.5. 反馈问题 1.6. 实验性...
activiti5.21.0中文帮助手册,快速的开发工作流程,对于小型工作流很实用
activiti 演示