文档章节

activiti实现根据参数传过来的集合走不同的子流程

 骑着乌龟赛跑
发布于 2017/04/07 12:22
字数 492
阅读 120
收藏 1

背景:

     在实现医疗项目的质控流程时,当在第一个节点A的时候选择n个质控项(id分别为a,b,c,d),当完成节点A走到节点B的时候,B节点需要根据选择的不同的质控项(根据A节点选择的不同质控项)并行走不同的子流程。

实现:

    1.  画不同的子流程。

        eg: 

 

                               图1.  流程编号设置为:  publicSubProcess_a

           

                              图2. 流程编号设置为:  publicSubProcess_b

2. 自定义expression中可以使用bean, 增加字符串连接方法

public class ExpressionServiceImpl implements ExpressionService{
    @Override
    public String concat(Object... params) {
        StringBuilder sb = new StringBuilder();
        if(params != null){
            for(Object param : params){
                sb.append(param);
            }
        }
        return sb.toString();
    }
}

3. 配置bean,在spring-activiti.xml中配置bean

<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
      <property name="dataSource" ref="dataSource" />
      <property name="transactionManager" ref="transactionManager" />
      <property name="databaseSchemaUpdate" value="true" />
      <property name="jobExecutorActivate" value="true" />
      <property name="enableDatabaseEventLogging" value="true" />
      
<property name="activityFontName" value="宋体"/>
<property name="labelFontName" value="宋体"/>
<property name="annotationFontName" value="宋体"/>
<property name="formTypes" ref="activitiCustomFormTypes"></property>
      <property name="customFormTypes">
          <list>
              <bean class="org.activiti.explorer.form.UserFormType" />
              <bean class="org.activiti.explorer.form.ProcessDefinitionFormType" />
              <bean class="org.activiti.explorer.form.MonthFormType" />
          <!-- <bean class="com.xxx.activiti.formtype.FileFormType"/> -->
          </list>
      </property>
      <property name="postBpmnParseHandlers">
       <list>
          <bean class="com.xxx.activiti.handler.TaskListenerPostParseHandler" />
       </list>
      </property>
      <property name="beans">
          <map>
              <entry key="expr" value-ref="expr"></entry>
          </map>
      </property>
  </bean>

  <bean id="expr" class="com.xxx.activiti.service.impl.ExpressionServiceImpl"></bean>

4. 在节点A的时候需要设置选择的质控项集合。假设key为items

  代码如下:

taskService.setVariable(taskId, "items", Arrays.asList("b"));

5. 主流程配置。

                   图3. 主流程

 call public sub节点配置如下:

 

             图4. callActivity节点配置。Called element的值为: ${expr.concat("publicSubProcess_", items[loopCounter])},Collection处的items和Call element处的items需要保持一致。

6. 启动主流程,在a1几点设置集合变量items。完成a1,走到call public sub节点时,会去找对应的子流程,并启动。(子流程需要提前部署好,否则会报错)。

 

Tricks: 

    关于子流程提前部署问题。给子流程固定的流程编号的前缀,当子流程保存的时候,检查流程编号,只要带这个前缀,则部署。

© 著作权归作者所有

共有 人打赏支持
粉丝 1
博文 23
码字总数 10836
作品 0
浦东
私信 提问
Activiti工作流引擎初学教程

http://wenku.baidu.com/view/bb7364ad4693daef5ff73d32.html 1. 初识Activiti 1.1. 工作流与工作流引擎 工作流(workflow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起...

孟飞阳
2016/07/31
469
0
React事件机制 - 源码概览(上)

某次被问到 事件机制的问题,关于这一块我确实不怎么清楚,因为平时大部分工作都是用 ,对于 的熟悉程度只限于会用,具体实现逻辑还真没专门学习过,但是总不能就说自己不清楚吧,好在我了解...

清夜
10/28
0
0
activiti学习资料(架构描述)

Activiti学习资料 Activiti是业界很流行的java工作流引擎,关于Activiti与JBPM5的关系和如何选择不是本文要讨论的话题,相关内容可以baidu一下。Activiti从架构角度看是比较优秀的,是很面向...

文艺小青年
2017/07/06
0
0
《Activiti实战》摘抄&笔记3

Query API简介 Activiti的查询API: 1)标准查询 :在以Java对象的方式通过创建一个指定类型的Query对象(实现Query接口)后用链式编程的方式设置查询参数。弊端:不能支持复杂的查询,比如多张...

v1-alpha
2016/07/05
153
0
Activiti入门教程

初识Activiti 1.1. 工作流与工作流引擎 工作流(workflow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。它...

wangrikui
2015/09/09
6.7K
4

没有更多内容

加载失败,请刷新页面

加载更多

Apache防盗链配置,Directory访问控制,FilesMatch进行访问控制

防盗链配置 通过限制referer来实现防盗链的功能 配置前,使用curl -e 指定referer [root@test-a test-webroot]# curl -e "http://www.test.com/1.html" -x127.0.0.1:80 "www.test.com/1.jpg......

野雪球
17分钟前
1
0
RxJava threading

因为Rx针对异步系统设计,并且Rx也自然支持多线程,所以新的Rx开发人员有时会假设Rx默认是多线程的。在其他任何事情之前,重要的是澄清Rx默认是单线程的。 除非另有说明,否则每次调用onNex...

woshixin
17分钟前
0
0
Python的安装及文件类型、变量

一、为什么学习python 服务于大数据、人工智能、自动化运维。 简单易学 代码简洁 薪资高 近几年越来越火 二、Python的安装 linux 系统默认安装, CentOS7 默认安装了python2.7 安装ipython y...

枫叶云
25分钟前
0
0
JeeSite 4.x 树形结构的表设计和用法

有些同仁对于 JeeSite 4 中的树表设计不太了解,本应简单的方法就可实现,却写了很多复杂的语句和代码,所以有了这篇文章。 在 JeeSite 4 中的树表设计我还是相对满意的,这种设计比较容易理...

ThinkGem
31分钟前
19
0
0022-如何永久删除Kafka的Topic

1.问题描述 使用kafka-topics --delete命令删除topic时并没有真正的删除,而是把topic标记为:“marked for deletion”,导致重新创建相同名称的Topic时报错“already exists”。 2.问题复现...

Hadoop实操
34分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部