posts - 26,  comments - 7,  trackbacks - 0

          作者:tomkoo
          以下例子中 采用了jbpm console 的幾個實例用戶

          項目提交人 : ernie .

          主管審批 : bert

          會簽 : ernie , bert , grover

          老板審批 : grover

           

          正常流程: 項目金額 >= 500W RMB

          提交項目 --> 主管審批 --> 會簽 --> 老板審批 --> 審批通過(結束)

          正常流程: 項目金額 < 500W RMB

          提交項目 --> 主管審批 --> 會簽 --> 審批通過(結束)

          其中主管審批, 會簽, 老板審批 , 不通過, 全部退回給項目提交人修改.

          會簽中: 所有人全通過, 則通過. 任何一人不通過, 停止其他會簽任務.退回給提交人.

          流程定義如下:

          1. <?xml version="1.0" encoding="UTF-8"?>  
          2.   
          3. <process-definition xmlns="urn:jbpm.org:jpdl-3.1"  
          4.     name="tc_prj_approval">  
          5.   
          6.     <swimlane name="initiator" />  
          7.   
          8.     <!項目提交人 >  
          9.     <swimlane name="requester">  
          10.         <assignment expression="user(ernie)" />  
          11.     </swimlane>  
          12.   
          13.     <! 主管 >  
          14.     <swimlane name="chief">  
          15.         <assignment expression="user(bert)" />  
          16.     </swimlane>  
          17.   
          18.     <!老板 >  
          19.     <swimlane name="boss">  
          20.         <assignment expression="user(grover)" />  
          21.     </swimlane>  
          22.   
          23.     <!會簽人 >  
          24.     <swimlane name="cosinger">  
          25.         <assignment class="net.chenj.jbpm.sample.CosingerAssiHandler">  
          26.         </assignment>  
          27.     </swimlane>  
          28.     <start-state name="start">  
          29.         <task name="tc_prj_newprj" swimlane="initiator"></task>  
          30.         <transition name="to_submit" to="tc_prj_submit"></transition>  
          31.     </start-state>  
          32.     <task-node name="tc_prj_submit">  
          33.         <task name="tc_prj_submit"></task>  
          34.         <transition name="to_chiefapprove" to="tc_prj_chiefapprove"></transition>  
          35.     </task-node>  
          36.     <task-node name="tc_prj_chiefapprove">  
          37.         <task name="tc_prj_chiefapprove"></task>  
          38.         <transition name="approve" to="tc_prj_countersign"></transition>  
          39.         <transition name="disapprove" to="tc_prj_submit"></transition>  
          40.     </task-node>  
          41.     <task-node name="tc_prj_countersign" signal="last-wait"  
          42.         create-tasks="false">  
          43.         <task name="tc_prj_countersign">  
          44.             <event type="task-end">  
          45.                 <action  
          46.                     class="net.chenj.jbpm.sample.TaskEndCountersign">  
          47.                 </action>  
          48.             </event>  
          49.   
          50.         </task>  
          51.   
          52.         <event type="node-enter">  
          53.             <action name="createInstance"  
          54.                 class="net.chenj.jbpm.sample.CreateTaskInstanceCountersign">  
          55.             </action>  
          56.         </event>  
          57.   
          58.         <transition name="approve" to="amount_decision"></transition>  
          59.         <transition name="disapprove" to="tc_prj_submit"></transition>  
          60.     </task-node>  
          61.     <decision name="amount_decision">  
          62.         <transition name="to_bossapprove" to="tc_prj_bossapprove"></transition>  
          63.         <transition name="to_end" to="end1"></transition>  
          64.     </decision>  
          65.     <task-node name="tc_prj_bossapprove">  
          66.         <task name="tc_prj_bossapprove"></task>  
          67.         <transition name="approve" to="end1"></transition>  
          68.         <transition name="disapprove" to="tc_prj_submit">  
          69.             <condition>#{amount >= 500}</condition>  
          70.         </transition>  
          71.     </task-node>  
          72.     <end-state name="end1"></end-state>  
          73. </process-definition>  
          74.   

           

          會簽swimlane class

          1. package net.chenj.jbpm.sample;   
          2.   
          3. import org.jbpm.graph.exe.*;   
          4. import org.jbpm.taskmgmt.def.*;   
          5. import org.jbpm.taskmgmt.exe.Assignable;   
          6.   
          7. public class CosingerAssiHandler implements AssignmentHandler {   
          8.   
          9.     private static final long serialVersionUID = 1L;   
          10.   
          11.     public void assign(Assignable assignable, ExecutionContext executionContext) {   
          12.         // 從數據庫或者ldap 讀取會簽人設置   
          13.         String[] a = { "ernie""bert""grover" };   
          14.         assignable.setPooledActors(a);   
          15.     }   
          16.   
          17. }   
          18.   

          創建會簽任務實現類

           

           

          1. package net.chenj.jbpm.sample;   
          2.   
          3. import org.jbpm.graph.def.ActionHandler;   
          4. import org.jbpm.graph.exe.ExecutionContext;   
          5. import org.jbpm.graph.exe.Token;   
          6. import org.jbpm.graph.node.TaskNode;   
          7. import org.jbpm.taskmgmt.def.Task;   
          8. import org.jbpm.taskmgmt.exe.TaskMgmtInstance;   
          9.   
          10. public class CreateTaskInstanceCountersign implements ActionHandler {   
          11.   
          12.     private static final long serialVersionUID = 1L;   
          13.   
          14.     public void execute(ExecutionContext executionContext) throws Exception {   
          15.   
          16.         Token token = executionContext.getToken();   
          17.         TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();   
          18.         TaskNode taskNode = (TaskNode) executionContext.getNode();   
          19.         Task task = taskNode.getTask("tc_prj_countersign");   
          20.         // 從數據庫或者ldap 讀取會簽人設置創建任務實例   
          21.         tmi.createTaskInstance(task, token).setActorId("ernie");   
          22.         tmi.createTaskInstance(task, token).setActorId("bert");   
          23.         tmi.createTaskInstance(task, token).setActorId("grover");   
          24.   
          25.     }   
          26.   
          27. }   

           

          結束不通過時結束其他會簽任務實現

          1. package net.chenj.jbpm.sample;   
          2.   
          3. import java.util.Collection;   
          4. import java.util.Iterator;   
          5. import org.jbpm.graph.def.ActionHandler;   
          6. import org.jbpm.graph.exe.ExecutionContext;   
          7. import org.jbpm.taskmgmt.exe.TaskInstance;   
          8. import org.jbpm.taskmgmt.exe.TaskMgmtInstance;   
          9.   
          10. public class TaskEndCountersign implements ActionHandler {   
          11.   
          12.     private static final long serialVersionUID = 1L;   
          13.   
          14.     public void execute(ExecutionContext executionContext) throws Exception {   
          15.   
          16.        
          17.         boolean isDisapprove = Boolean.valueOf((String) executionContext   
          18.                 .getVariable("isDisapprove"));   
          19.         // 如果有一個任務實例拒絕通過則結束除當前任務實例外其他任務實例   
          20.         if (isDisapprove) {   
          21.             TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();   
          22.             TaskInstance ti = executionContext.getTaskInstance();   
          23.             final String actorId = ti.getActorId();   
          24.             Collection c = tmi.getSignallingTasks(executionContext);   
          25.             for (Iterator it = c.iterator(); it.hasNext();) {   
          26.                 TaskInstance task = (TaskInstance) it.next();   
          27.                 if (!(actorId.equals(task.getActorId())) && (!task.hasEnded())) {   
          28.                     task.end("disapprove");   
          29.                 }   
          30.             }   
          31.         }   
          32.   
          33.     }   
          34.   
          35. }   

           

           

          posted on 2007-10-15 17:34 jbpm 閱讀(6234) 評論(0)  編輯  收藏 所屬分類: jbpm實例
          主站蜘蛛池模板: 攀枝花市| 扬州市| 汉川市| 迁西县| 论坛| 乌海市| 玛曲县| 亚东县| 乌鲁木齐县| 霍林郭勒市| 二手房| 福鼎市| 平罗县| 阿拉善左旗| 南皮县| 湖北省| 新巴尔虎左旗| 禹城市| 安阳县| 毕节市| 西宁市| 噶尔县| 长岛县| 长乐市| 五莲县| 南召县| 诸暨市| 江阴市| 家居| 商河县| 广平县| 神农架林区| 都昌县| 宝坻区| 南宁市| 石河子市| 德保县| 眉山市| 南汇区| 旌德县| 苏州市|