LuBen Park

早起的鸟儿有虫吃,那早起的虫儿呢? ------- 程序员修炼之道

导航

NetBPM工作流的一个示例-请假审批

 
  

NetBPM工作流的一个示例:请假审批

Made by LuBen:2007年8月12日


目录

请假流程描述

流程定义之processdefinition.xml

流程定义之webinterface.xml

流程定义之动态委托类

后记


流程定义包源码下载(注:par包就是zip格式压缩包)。原文地址:http://www.cnblogs.com/LuBen/archive/2007/08/11/852010.html(转载请保留)

请假流程描述

流程图:

 

假设:公司有两级领导,一级为主管(Chief),一级为老板(Boss),我们这里只是一个模拟,当然现实生活中情况比这个更加复杂;-)

描述:

  1. 在某公司中,部门员工休假需要主管(Chief)的批准。
  2. 如果休假天数大于10天,则 在部门主管同意后,还必须老板(Boss)批准。
  3. 如果是部门主管请假则直接提交老板批准。
  4. 在休假被批准之前,申请人可以撤销休假申请。
  5. 申请批准后,对休假天数进行修改(也可以是其他业务数据处理)。 每次休假申请结束之后,不管通过未通过或是否取消,都必须记录下来。
  6. 流程结束时,系统要把请假的结果信息Email给申请人。
  7. 对于大于10天的申请,如果部门主管已批准同意而上级主管还未批准,这时申请人撤销申请后,系统应发Email通知部门主管申请已撤销。

流程定义之processdefinition.xml

processdefinition.xml


流程定义之webinterface.xml

webinterface.xml

流程定义之动态委托类

        委托类包含在lib文件夹下的程序集中。因为委托类数目众多,这里仅贴出几个典型的委托类, 其源码工程若需要请看这里
 1. NetBpm.Example.LeaveOfAbsence.AutoSetAttributionsAction:该委托类设计为一个通用委托类,这里用来设置表识属性,如流程经过用户取消请假路径,则把RunTrace属性设置为requestercancel,供WhichWayDicision作判断用。
AutoSetAttributesAction

 2. NetBpm.Example.LeaveOfAbsence.AnyOneJoin: 该委托主要用来设置激活父flow机制,这里是只要任何一条路径到达了join,则激活父flow,流程往下流。
AnyOneJoin

 3. NetBpm.Example.LeaveOfAbsence.WhichWayDecision:该委托根据流程实际流过路径,根据标识属性RunTrace等进行走哪条边的抉择,如注释。

WhichWayDecision

后记

    本文仅仅是一个示例,给大家提供一个运用nPdl定义NetBPM流程的参考,如果要把该流程投入现实中使用显然还需要做很多优化。该示例更多的是给大家展示流程定义中action可以定义多个, decision出来的transition可以到达同一条目的节点但名字却不一样等等. 示例中委托类的耦合性太高, 很多地方并不需要那样做, 如一个decision里面进行了2个判断: 判断是否大于10天, 判断是否审批同意, 这个完全可以拆分为两个独立的decision来做. 委托类设计成为高度可重用的, 耦合性低的通用类, 才是我们的目标.

    待写:NetBPM实现会签;NetBPM Q&A(不断更新)

posted on 2007-08-12 11:46  LuBen  阅读(13726)  评论(36编辑  收藏  举报