activiti实现根据参数传过来的集合走不同的子流程
activiti实现根据参数传过来的集合走不同的子流程
骑着乌龟赛跑 发表于1年前
activiti实现根据参数传过来的集合走不同的子流程
  • 发表于 1年前
  • 阅读 65
  • 收藏 1
  • 点赞 0
  • 评论 0

移动开发云端新模式探索实践 >>>   

背景:

     在实现医疗项目的质控流程时,当在第一个节点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
博文 22
码字总数 10836
×
骑着乌龟赛跑
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: