论坛首页 Java版

JBPM工作流管理实例

浏览 198 次
该帖已经被评为隐藏帖
作者 正文
最后更新时间:2007-09-09 关键字: bpm, java, jbpm ,workflow ,工作流, j2ee

 

一个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="Request Leave">

 <swim lane name="requester">

  <description>申请者</description>

 </swim lane>

 <swim lane name="chief">

  <description>部门主管</description>

  <delegation class="kellerdu.jbpm.delegation.ChiefSwimlane"/>

 </swim lane>

 <swim lane name="boss">

  <description>上级主管</description>

  <delegation class="kellerdu.jbpm.delegation.BossSwimlane"/>

 </swim lane>

 <start-state name="request" swim lane="requester">

  <transition to="Begin Request"/>

 </start-state>

 <fork name="Begin Request">

  <transition to="Requester Cancel"/>

  <transition to="Is Chief"/>

 </fork>

 <decision name="Is Chief">

  <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 swim lane="requester"/>

  <transition name="cancel" to="Decided">

   <action>

    <!-- 将请假的状态改变为取消”-->

    <delegation class="kellerdu.jbpm.action.RequestCancel"/>

   </action>

  </transition>

 </state>

 <state name="Chief Approve">

  <assignment swim lane="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 swim lane="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="not Need" 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”:设定发给用户EMail的信息。

    3撤销”-"cancel"-设定发给用户EMail的信息。如果主管批准,要发给主管消息说明已经撤销。

    </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">

  <!-- 发送EMail消息给申请者,记录请假日志 -->

  <delegation class="kellerdu.jbpm.action.ProcessEndAction"/>

 </action>

</process-definition>

 

   
论坛首页 Java版

跳转论坛:
JavaEye推荐