<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 閱讀(6225) 評論(0)  編輯  收藏 所屬分類: jbpm實例
    主站蜘蛛池模板: 亚洲日产乱码一二三区别 | 亚洲精品无码高潮喷水在线| 在线a亚洲老鸭窝天堂av高清| 99热这里有免费国产精品| 久久精品亚洲日本佐佐木明希| 日韩在线视频播放免费视频完整版| 全免费a级毛片免费**视频| 亚洲精品av无码喷奶水糖心| 在线免费观看毛片网站| 久久精品国产亚洲5555| 免费看黄福利app导航看一下黄色录像 | 手机看片国产免费永久| 国产亚洲3p无码一区二区| a级午夜毛片免费一区二区| 亚洲日产无码中文字幕| 美女视频黄a视频全免费网站色窝| 毛片免费视频播放| 国产91色综合久久免费| 亚洲第一精品电影网| 在线免费观看伊人三级电影| 国产亚洲人成网站观看| 日本免费大黄在线观看| 亚洲综合色7777情网站777| 热99re久久精品精品免费| 男男gvh肉在线观看免费| 亚洲精品A在线观看| 日本人成在线视频免费播放| gogo全球高清大胆亚洲| 伊人久久大香线蕉免费视频| 亚洲精品在线观看视频| 西西大胆无码视频免费| 亚洲日本在线播放| 免费观看的a级毛片的网站| 一级做a爰片久久免费| 久久精品国产亚洲av影院| 成人免费网站在线观看| 四虎成人精品国产永久免费无码| 亚洲av色福利天堂| 爱丫爱丫影院在线观看免费| 亚洲一卡2卡4卡5卡6卡在线99| 国产又大又粗又硬又长免费|