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

          Posted on 2005-12-16 16:49 蝦米老 閱讀(1206) 評論(0)  編輯  收藏 所屬分類: flow學習
          示例:
          在某一公司中,部門員工要休假的話需要部門主管的批準。如果休假天數大于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"
              "<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>

          posts - 5, comments - 3, trackbacks - 0, articles - 0

          Copyright © 蝦米老

          主站蜘蛛池模板: 黄骅市| 贺州市| 民乐县| 海门市| 汨罗市| 建阳市| 集贤县| 苏尼特右旗| 霍邱县| 土默特左旗| 湖南省| 甘谷县| 千阳县| 托克托县| 巨野县| 德庆县| 湘潭市| 巢湖市| 肇东市| 邯郸县| 大渡口区| 南阳市| 鄄城县| 时尚| 康马县| 博爱县| 司法| 霍山县| 吴忠市| 普陀区| 桐梓县| 泰顺县| 红原县| 西青区| 顺昌县| 南通市| 厦门市| 莲花县| 江阴市| 兖州市| 四川省|