作者:
nogocn
在某一公司中,部門員工要休假的話需要部門主管的批準。如果休假天數大于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="Begin Request"/>
</start-state>
<fork name="Begin Request">
<transition to="Requester Cancel"/>
<transition to="IsChief"/>
</fork>
<decision name="IsChief">
<delegation class="kellerdu.jbpm.delegation.ChiefDecision"/>
<transition name="Boss Approve" to="Boss Approve"/>
<transition name="Chief Approve" to="Chief Approve"/>
</decision>
<state name="Requester Cancel">
<assignment swimlane="requester"/>
<transition name="cancel" to="Decided">
<action>
<!-- 將請假的狀態改變為“取消”-->
<delegation class="kellerdu.jbpm.action.RequestCancel"/>
</action>
</transition>
</state>
<state name="Chief Approve">
<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="Boss Approve">
<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="Boss Approve"/>
<transition name="notNeed" to="Decided"/>
</decision>
<join name="Decided">
<description>有一個先到達即進行父Token</description>
<delegation class="kellerdu.jbpm.delegation.DecidedJoin"/>
<transition to="Do Something"/>
</join>
<decision name="Do Something">
<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>
posted on 2007-09-11 13:47
jbpm 閱讀(2419)
評論(0) 編輯 收藏 所屬分類:
jbpm實例