一個JBPM工作流管理示例(一)

示例:
在某一公司中,部門員工要休假的話需要部門主管的批准。如果休假天數大於10天的話,在部門主管的同意後,還必須上級主管批准。如果是部門主管要休假只要上級主管批准即可。在休假被批准之前,申請人可以撤銷休假申請。
每個員工還有多少天休假必須管理起來,在員工提交休假申請時要檢查申請天數是否超過可用天數。申請批准後,要在可用天數裏減去申請天數。每次休假申請結束之後,不管通過未通過或是否取消,都必須記錄下來。主管在批覆申請之後,系統要將批覆結果Email給申請人。對於大於10天的申請,如果部門主管已批准同意而上級主管還未批准,這時申請人撤銷申請後,系統應發Email通知部門主管申請已撤銷。 
  processdefinition.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSPY v2004 rel. 3 U (http://www.xmlspy.com) by keller (zju) -->
<!DOCTYPE process-definition PUBLIC
    "-//jBpm/jBpm Mapping DTD 2.0//EN"
    "http://jbpm.org/dtd/processdefinition-2.0.dtd">
<process-definition  name="RequestLeave">
 <swimlane name="requester">
  <description>申請者</description>
 </swimlane>
 <swimlane name="chief">
  <description>部門主管</description>
  <delegation class="kellerdu.jbpm.delegation.ChiefSwimlane"/>
 </swimlane>
 <swimlane name="boss">
  <description>上級主管</description>
  <delegation class="kellerdu.jbpm.delegation.BossSwimlane"/>
 </swimlane>
 <start-state name="request" swimlane="requester">
  <transition to="BeginRequest"/>
 </start-state>
 <fork name="BeginRequest">
  <transition to="RequesterCancel"/>
  <transition to="IsChief"/>
 </fork>
 <decision name="IsChief">
  <delegation class="kellerdu.jbpm.delegation.ChiefDecision"/>
  <transition name="BossApprove"  to="BossApprove"/>
  <transition name="ChiefApprove"  to="ChiefApprove"/>
 </decision>
 <state name="RequesterCancel">
  <assignment swimlane="requester"/>
  <transition name="cancel" to="Decided">
   <action>
    <!-- 將請假的狀態改變爲“取消”-->
    <delegation class="kellerdu.jbpm.action.RequestCancel"/>
   </action>
  </transition>
 </state>
 <state name="ChiefApprove">
  <assignment swimlane="chief"/>
  <transition name="approve" to="NeedBossApprove">
   <action>
    <!-- 將請假的狀態改變爲“主管批准”-->
    <delegation class="kellerdu.jbpm.action.ChiefApprove"/>
   </action>
  </transition>
  <transition name="disapprove" to="Decided">
   <action>
    <!-- 將請假的狀態改變爲“主管否決”-->
    <delegation class="kellerdu.jbpm.action.ChiefDisapprove"/>
   </action>
  </transition>
 </state>
 <state name="BossApprove">
  <assignment swimlane="boss"/>
  <transition name="approve" to="Decided">
   <action>
    <!-- 將請假的狀態改變爲“老闆批准”-->
    <delegation class="kellerdu.jbpm.action.BossApprove"/>
   </action>
  </transition>
  <transition name="disapprove" to="Decided">
   <action>
    <!-- 將請假的狀態改變爲“老闆否決”-->
    <delegation class="kellerdu.jbpm.action.BossDisapprove"/>
   </action>
  </transition>
 </state>
 <decision name="NeedBossApprove">
  <!-- 請假天數大於10天的要老闆批准  -->
  <delegation class="kellerdu.jbpm.delegation.NeedBossApproveDecision"/>
  <transition name="need" to="BossApprove"/>
  <transition name="notNeed" to="Decided"/>
 </decision>
 <join name="Decided">
  <description>有一個先到達即進行父Token</description>
  <delegation class="kellerdu.jbpm.delegation.DecidedJoin"/>
  <transition to="DoSomething"/>
 </join>
 <decision name="DoSomething">
  <description>
    根據請求的狀態決定。
    (1)“主管或者老闆批准”-‘approve’:修改員工休假的總天數,設定發給用戶E-Mail的信息。
    (2)“主管或者老闆否決”-“disapprove”:設定發給用戶E-Mail的信息。
    (3)“撤銷”-"cancel"-設定發給用戶E-Mail的信息。如果主管批准,要發給主管消息說明已經撤銷。
    </description>
  <delegation class="kellerdu.jbpm.delegation.DoSomethingDecision"/>
  <transition name="disapprove" to="Finished">
   <action>
    <delegation class="kellerdu.jbpm.action.Disapprove"/>
   </action>
  </transition>
  <transition name="approve" to="Finished">
   <action>
    <delegation class="kellerdu.jbpm.action.Approve"/>
   </action>
  </transition>
  <transition name="cancel" to="Finished">
   <action>
    <delegation class="kellerdu.jbpm.action.Cancel"/>
   </action>
  </transition>
 </decision>
 <end-state name="Finished"/>
 <action event-type="process-end">
  <!-- 發送E-Mail消息給申請者,記錄請假日誌 -->
  <delegation class="kellerdu.jbpm.action.ProcessEndAction"/>
 </action>
</process-definition>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章