示例:
在某一公司中,部門(mén)員工要休假的話(huà)需要部門(mén)主管的批準(zhǔn)。如果休假天數(shù)大于10天的話(huà),在部門(mén)主管的同意后,還必須上級(jí)主管批準(zhǔn)。如果是部門(mén)主管要休假只要上級(jí)主管批準(zhǔn)即可。在休假被批準(zhǔn)之前,申請(qǐng)人可以撤銷(xiāo)休假申請(qǐng)。
每個(gè)員工還有多少天休假必須管理起來(lái),在員工提交休假申請(qǐng)時(shí)要檢查申請(qǐng)?zhí)鞌?shù)是否超過(guò)可用天數(shù)。申請(qǐng)批準(zhǔn)后,要在可用天數(shù)里減去申請(qǐng)?zhí)鞌?shù)。每次休假申請(qǐng)結(jié)束之后,不管通過(guò)未通過(guò)或是否取消,都必須記錄下來(lái)。主管在批復(fù)申請(qǐng)之后,系統(tǒng)要將批復(fù)結(jié)果Email給申請(qǐng)人。對(duì)于大于10天的申請(qǐng),如果部門(mén)主管已批準(zhǔn)同意而上級(jí)主管還未批準(zhǔn),這時(shí)申請(qǐng)人撤銷(xiāo)申請(qǐng)后,系統(tǒng)應(yīng)發(fā)Email通知部門(mén)主管申請(qǐng)已撤銷(xiāo)。?
??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>申請(qǐng)者</description>
?
</swimlane>
?
<swimlane?name="chief">
??
<description>部門(mén)主管</description>
??
<delegation?class="kellerdu.jbpm.delegation.ChiefSwimlane"/>
?
</swimlane>
?
<swimlane?name="boss">
??
<description>上級(jí)主管</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>
????
<!--?將請(qǐng)假的狀態(tài)改變?yōu)椤叭∠?/span>-->
????
<delegation?class="kellerdu.jbpm.action.RequestCancel"/>
???
</action>
??
</transition>
?
</state>
?
<state?name="ChiefApprove">
??
<assignment?swimlane="chief"/>
??
<transition?name="approve"?to="NeedBossApprove">
???
<action>
????
<!--?將請(qǐng)假的狀態(tài)改變?yōu)椤爸鞴芘鷾?zhǔn)”-->
????
<delegation?class="kellerdu.jbpm.action.ChiefApprove"/>
???
</action>
??
</transition>
??
<transition?name="disapprove"?to="Decided">
???
<action>
????
<!--?將請(qǐng)假的狀態(tài)改變?yōu)椤爸鞴芊駴Q”-->
????
<delegation?class="kellerdu.jbpm.action.ChiefDisapprove"/>
???
</action>
??
</transition>
?
</state>
?
<state?name="BossApprove">
??
<assignment?swimlane="boss"/>
??
<transition?name="approve"?to="Decided">
???
<action>
????
<!--?將請(qǐng)假的狀態(tài)改變?yōu)椤袄习迮鷾?zhǔn)”-->
????
<delegation?class="kellerdu.jbpm.action.BossApprove"/>
???
</action>
??
</transition>
??
<transition?name="disapprove"?to="Decided">
???
<action>
????
<!--?將請(qǐng)假的狀態(tài)改變?yōu)椤袄习宸駴Q”-->
????
<delegation?class="kellerdu.jbpm.action.BossDisapprove"/>
???
</action>
??
</transition>
?
</state>
?
<decision?name="NeedBossApprove">
??
<!--?請(qǐng)假天數(shù)大于10天的要老板批準(zhǔn)??-->
??
<delegation?class="kellerdu.jbpm.delegation.NeedBossApproveDecision"/>
??
<transition?name="need"?to="BossApprove"/>
??
<transition?name="notNeed"?to="Decided"/>
?
</decision>
?
<join?name="Decided">
??
<description>有一個(gè)先到達(dá)即進(jìn)行父Token</description>
??
<delegation?class="kellerdu.jbpm.delegation.DecidedJoin"/>
??
<transition?to="DoSomething"/>
?
</join>
?
<decision?name="DoSomething">
??
<description>
????根據(jù)請(qǐng)求的狀態(tài)決定。
????(
1)“主管或者老板批準(zhǔn)”-‘a(chǎn)pprove’:修改員工休假的總天數(shù),設(shè)定發(fā)給用戶(hù)E-Mail的信息。
????(
2)“主管或者老板否決”-“disapprove”:設(shè)定發(fā)給用戶(hù)E-Mail的信息。
????(
3)“撤銷(xiāo)”-"cancel"-設(shè)定發(fā)給用戶(hù)E-Mail的信息。如果主管批準(zhǔn),要發(fā)給主管消息說(shuō)明已經(jīng)撤銷(xiāo)。
????
</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">
??
<!--?發(fā)送E-Mail消息給申請(qǐng)者,記錄請(qǐng)假日志?-->
??
<delegation?class="kellerdu.jbpm.action.ProcessEndAction"/>
?
</action>
</process-definition>

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=242438