JBPM中会签的实现

 

会签描述:多个人对同一环节进行审核,只要有一个不通过,则打回给提交人。

设计原理:在任务节点,根据会签人员个数生成任务实例,

 

流程图:

 

 

Processdefinition.xml

<?xml version="1.0" encoding="UTF-8"?>

 

<process-definition  xmlns=""  name="countersign">

    <start-state name="start-state">

       <transition to="user"></transition>

    </start-state>

    <task-node name="countersign" create-tasks="false" signal="first-wait">

       <task name="eachcounter"></task>

       <event type="node-enter">

           <action class="com.action.CountersignHandler"></action>

       </event>

       <transition to="join1" name="N">

           <action class="com.action.CounterDecisionHandler"></action>

       </transition>

       <transition to="join1" name="Y"></transition>

    </task-node>

    <task-node name="user">

       <task></task>

       <transition to="countersign" name="submit"></transition>

    </task-node>

    <join name="join1">

       <transition to="decision"></transition>

    </join>

    <decision name="decision" expression="#{decision}">

       <transition to="end" name="Y"></transition>

       <transition to="user" name="N"></transition>

    </decision>

    <end-state name="end"></end-state>

</process-definition>

 

 

CountersignHandler

 

package com.action;

 

import java.util.ArrayList;

import java.util.Collection;

import java.util.Iterator;

import java.util.List;

import org.jbpm.graph.def.ActionHandler;

import org.jbpm.graph.exe.ExecutionContext;

import org.jbpm.graph.exe.Token;

import org.jbpm.graph.node.TaskNode;

import org.jbpm.taskmgmt.def.Task;

import org.jbpm.taskmgmt.exe.TaskMgmtInstance;

 

public class CountersignHandler implements ActionHandler{

    /**

     *为每一位用户生成任务实例

     */

    @Override

    public void execute(ExecutionContext executionContext) throws Exception {

       // TODO Auto-generated method stub

      

      

       //phase 1: 生成用户,可以从数据库读,也可以从流程变量中读。

       //String []actors={"a","b","c"};

       Collection actors=new ArrayList();

       actors.add("a");

       actors.add("b");

       actors.add("c");

      

       //设定流程变量,

      

       executionContext.getContextInstance().setVariable("decision", "Y");

      

       //phase 2:根据用户的个数,创建子token

       Token token=executionContext.getToken();

      

       List forkedTokens = new ArrayList();//token

       Iterator actorIter = actors.iterator();

       while(actorIter.hasNext()){

你可能感兴趣的:(xml,jbpm)