`

activiti5.21中调用活动(callactivity),在多实例(multi-instance)情况下,子流程无法返回值到主流程

 
阅读更多

原文地址:http://blog.csdn.net/xxhhbb1538/article/details/53116793

 

在业务场景中,如果需要调用其他流程,我们可以使用callactivity,通过activiti:in,我们可以将主流程的参数传递给子流程,通过activiti:out可以将子流程执行结束后的参数返回给主流程,在单实例情况下,是没有问题的。

但是,当我们调用的子流程数量是不定的,且每个子流程都不一样时,我们可以通过设置调用活动为multi-instance,将子流程运行时动态传递给工作流引擎,如下:

 

[html] view plain copy
 
  1. <callActivity id="call" name="子流程调用" calledElement="${subprocess}">  
  2. <extensionElements>  
  3. <activiti:in source="businessId" target="businessId"/>  
  4. <activiti:in source="businessTable" target="businessTable"/>  
  5. <activiti:out source="cancelled" target="cancelled"/>  
  6. </extensionElements>  
  7. <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="${subprocesslist}" activiti:elementVariable="subprocess">  
  8. <completionCondition>${cancelled=='1'}</completionCondition>  
  9. </multiInstanceLoopCharacteristics>  
  10. </callActivity>  

这种情况下,activiti:in依然可以传递参数给子流程,但是activiti:out无法返回子流程的值给主流程,
org.activiti.engine.impl.bpmn.behavior.CallActivityBehavior中,单实例情形中,流程完成前会将子流程的变量传递给父流程
[java] view plain copy
 
  1. public void completing(DelegateExecution execution, DelegateExecution subProcessInstance) throws Exception {  
  2.   // only data.  no control flow available on this execution.  
  3.   
  4.   // copy process variables  
  5.   for (AbstractDataAssociation dataOutputAssociation : dataOutputAssociations) {  
  6.     Object value = null;  
  7.     if (dataOutputAssociation.getSourceExpression()!=null) {  
  8.       value = dataOutputAssociation.getSourceExpression().getValue(subProcessInstance);  
  9.     }  
  10.     else {  
  11.       value = subProcessInstance.getVariable(dataOutputAssociation.getSource());  
  12.     }  
  13.       
  14.     execution.setVariable(dataOutputAssociation.getTarget(), value);  
  15.   }  
  16. }  
org.activiti.engine.impl.bpmn.behavior.MultiInstanceActivityBehavior中,多实例情形中,流程完成前直接忽略了子流程变量的处理,所以activiti:out中得不到值
[java] view plain copy
 
  1. // required for supporting external subprocesses  
  2. public void completing(DelegateExecution execution, DelegateExecution subProcessInstance) throws Exception {  
  3. }  

解决方案:
MultiInstanceActivityBehavior类复制一份到项目中,补充comleting方法:
调用CallActivityBehavior的completing方法,完成变量的传递。

下载MultiInstanceActivityBehavior类

 

分享到:
评论

相关推荐

    activiti5.21中文手册

    手册首先会介绍 Activiti 的基本概念,如流程定义(Process Definition)、流程实例(Process Instance)、任务(Task)以及活动(Activity)。流程定义是用 BPMN 2.0 标准语言编写的,它定义了工作流程的结构。流程...

    activiti中文手册5.21

    3. **流程实例(Process Instance)**:每个流程定义在运行时都会产生一个或多个流程实例,它们代表了流程的实际执行过程。 4. **任务(Task)**:流程实例中的每个节点称为任务,任务可以分配给不同的参与者执行。...

    Activiti V5.21 用户手册 中文版_Activiti5.21介绍_activiti5.21_ActivitiV5.1

    Activiti 是一个开源的工作流和业务自动化引擎,它在企业级应用中被广泛使用,用于流程管理和业务流程自动化。此文档集重点介绍的是Activiti V5.21版本,这是一个稳定且功能丰富的版本,提供了许多关键特性以支持...

    MultiInstanceActivityBehavior

    activiti5.21中调用活动(callactivity),在多实例(multi-instance)情况下,子流程无法返回值到主流程,流程完成前直接忽略了子流程变量的处理,所以activiti:out中得不到值 解决方案:将...

    activiti-5.21 + Activiti5.20.0整合spring4.15示例

    Activiti 是一个开源的工作流和业务流程管理(BPM)平台,它被广泛用于企业级应用中以自动化业务流程。本示例展示了如何将 Activiti 5.21 版本与 Spring 框架4.15版本进行集成,以实现灵活、可扩展的流程控制。 在...

    activiti5.21ssm演示

    在这个"Activiti5.21 SSM演示"中,我们将探讨如何在Spring、Spring MVC(SSM)框架下集成并使用Activiti进行流程设计与执行。 首先,让我们了解一下SSM框架。Spring是Java企业级应用中的核心框架,提供了依赖注入和...

    activiti-5.21(除war包部分)

    标题中的 "activiti-5.21(除war包部分)" 指的是 Activiti 的5.21.0版本,但不包含 `war` 包。`war` 文件通常是Java Web应用程序的归档文件,用于在Java应用服务器上部署Web应用。由于文件大小限制,war包被单独提供...

    Activiti多实例任务实现会签

    4. 会签(Parallel Multi-instance):在多实例任务中,会签通常指的是并行多实例,即所有参与者同时进行审批,无需等待前一个人完成。所有实例完成后,任务才结束。 5. 配置多实例任务:在Activiti的工作流定义XML...

    Activiti-5.21数据库表结构详解(共25张表)

    Activiti-5.21数据库表结构详解(共25张表) 工作流的应用越来越广泛,而activiti是公认的现阶段最好的工作流框架之一,详细了解activiti的库表结构有助于您更好的掌握学习工作流框架,共享本资源以供广大编程从业人员...

    activiti-engine-5.21.0-API文档-中文版.zip

    赠送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 + moduler+spring mvc 实例项目搭建

    Activiti 是一个开源的工作流引擎,它主要用于自动化业务流程,特别是在企业级应用中。这个实例项目是基于Activiti 5.21版本构建的,它结合了moduler模块化管理和Spring MVC框架,提供了完整的Web应用解决方案。让...

    activiti5.21用户手册

    在5.21版本中,这个引擎提供了一套完整的工具集,适合小型工作流应用,同时也为大型企业级应用提供了灵活性和稳定性。本手册将深入介绍如何利用Activiti进行工作流程的设计、部署和管理。 首先,我们要了解什么是...

    Activiti-5.21库表结构

    ### Activiti-5.21库表结构解析 #### 概述 Activiti是一个开源的工作流引擎,基于Java语言开发,支持BPMN 2.0标准。它提供了灵活、可扩展的工作流管理机制,被广泛应用于企业级应用中进行业务流程管理。Activiti-...

    Activiti V5.21 用户手册 中文版 pdf.pdf

    - **使用Activiti服务**:详述如何部署流程、启动流程实例、完成任务、暂停和激活流程。 - **查询API**:API的使用以查询流程相关信息。 - **变量**:在Activiti中变量的使用。 - **表达式**:表达式引擎的配置和...

    activiti5.21整合modeler 非maven

    在本场景中,我们关注的是如何将 Activiti 5.21 版本的 Modeler 集成到非 Maven 项目中,以及如何进行流程创建、发布和资源下载。以下是关于这一主题的详细知识讲解。 首先,让我们了解 Activiti Modeler。Activiti...

    RuoYi-activitiRuoYi-activitiRuoYi-activiti

    3. 任务处理:用户接收到任务通知后,可以在RuoYi-Activiti的任务列表中处理任务,提交表单数据并流转到下一个环节。 4. 监控与分析:利用RuoYi-Activiti的监控功能,可以查看流程实例的执行轨迹,分析流程瓶颈,...

    Activiti5.21依赖库

    【标题】"Activiti5.21依赖库" 涉及到的IT知识点主要集中在企业级工作流引擎Activiti的使用以及与之相关的库文件。这些库文件是Activiti5.21版本正常运行所必需的,它们提供了各种功能支持,包括脚本语言处理、用户...

    activiti-json-converter-5.21.0-API文档-中英对照版.zip

    赠送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-...

Global site tag (gtag.js) - Google Analytics