请假模块工作流分析(2)

来源:互联网 发布:php fpm error log 编辑:程序博客网 时间:2024/05/26 17:49

1. 基于关系结构的轻量级工作流

      所谓基于关系的工作流引擎指的是工作流引擎中的数据模型(即机构模型和信息模型)全部通过关系结构来表达;控制工作流引擎运作的各种程序逻辑 (即控制模型)也是通过常规关系数据库管理系统中所提供的存储过程、包以及DML数据操纵语句等机制来实现;同时,事务的并发控制也通过数据库系统所提供的机制来实现。
      从技术角度来说,使用关系结构来表达工作流引擎中的数据模型可以降低工作流引擎开发过程中的技术难度和工作量。具体表现在:(1)与工作流引擎相关的各种控制数据(包括业务活动的状态数据)可以存储在数据库系统中;(2)与此相关的数据的完整性可以由数据库管理系统来维护;(3)利用关系结构可以方便地定义工作流引擎中的各种数据格式和数据结构;(4)可以方便地利用数据库管理系统提供的各种DML语句来操纵工作流引擎所需的各种数据。
     从开发应用系统的角度来看,在同一数据库环境下为开发者提供一个基于关系结构的工作流引擎,并且如果这个工作流引擎所提供的功能可以方便地嵌入到应用的开发环境中,则可以降低开发应用的难度。这是因为:(1)应用系统对业务数据的管理通常会采用一个常规的关系数据库系统作为后台的支撑。基于关系结构的工作流引擎可以很容易的实现与业务数据的关联;(2)应用系统的开发者往往会采用一种他们所熟悉的并且适合此数据库系统的前端开发工具来开发具体应用,这些前端开发工具一个显著特征是开发功能强大,但一般不具备工作流机制。因此,采用基于关系结构的工作流引擎可以很容易与应用的开发环境做到无缝的集成。

      下面以请假业务管理需求为例进行分析



2. 工作流元模型分析

    参考请假业务的过程控制需求,在工作流建模中要综合考虑顺序路由、选择路由等多种路由关系:

    (1)顺序执行
    顺序(串行)结构是流程运行和控制的基础,其它如并行、分支(包括从主流程到子流程)等结构,都是对顺序结构的进一步控制和扩充。顺序结构是请假业务的主要过程结构。请假审批环节有着很强的顺序结构特点,只有前一部门(或人员)审核通过才能进入下一个环节审批。
   (2)选择路由
    在请假业务过程中存在选择路由的情况,这种选择是由不同过程条件所驱动的自动执行。以图所示的请假业务处理过程为例,根据请假的天数判断是否走哪条分支。
   (3)流程回退
    在请假业务的进行中不可避免地存在业务环节的反复。还是以请假业务处理过程为例,请假数据有问题上级部门会退回请假申请,你可以修改后在重新提交直到同意为止。
   因此,在工作流引擎控制模型的设计和实现中要考虑后续环节(任务)能够有选择地将流程回退到特定环节重新执行。

3. 工作流的过程元模型

      1、任务节点

            任务节点,或称人工活动节点,代表需要人工参与的任务,当过程的执行到达某任务节点时,系统将与当前节点相关的任务添加到参与者任务列表中,并进入等待状态。只有用户完成任务并触发过程执行,过程才得以继续。

           任务节点是请假业务的具体执行环节,由具有特定角色的部门员工参与,完成如业务数据编辑、资料审核等人工活动。任务节点将作为流程定义的一部分被保存到数据库中。

     2、逻辑节点
          逻辑节点包括标示过程起止逻辑的开始节点、结束节点,以及标示过程路由的与分支、与连接、或分支、或连接等过程逻辑节点(图中的黄色矩形框)。
         (1)开始节点(Start Node):开始节点是工作流模型的唯一入口,它无前驱节点,而且其后继节点必须是任务节点,而不能是过程逻辑节点。开始节点被记录在流程定义中,当启动流程,由引擎对流程定义实施实例化操作时,与开始节点连接的任务节点同时被实例化,并作为流程的首任务出现在对应角色用户的任务列表中。首任务的完成会激发引擎对其后续任务节点的实例化,以驱动流程的继续进行。
         (2)结束节点(EndNode):基于请假业务过程相对简单的特点,与其它工作流模型定义语言允许多个过程出口不同,为了简化过程的定义和控制,这里的结束节点是工作流模型的唯一出口,即一个流程只能有一个结束节点。结束节点无后继节点,而且其前驱节点必须是任务节点。当过程执行到结束节点时,则标志着整个流程的结束。
开始节点和结束节点将作为流程定义的一部分被保存到数据库中。
         (3)与分支(AndSplit)和与连接(AndJoin)节点:与分支和与连接的使用是为了方便定义和表达过程中的并行路由。与分支和与连接只能成对出现,也就是说,从一个与分支节点引出的所有并行分支最终要汇聚到一个对应的与连接节点。而且,与分支节点和与连接节点的前驱节点及后继节点只能是任务节点,不允许一个与分支节点紧跟一个与连接节点和一个与连接节点紧跟一个与分支节点等情形出现。
          (4)或分支(OrSplit)和或连接(OrJoin)节点:或分支和或连接的使用是为了方便定义和表达过程中的选择路由。同与分支和与连接节点一样,或分支和或连接节点也只能成对出现,而且,或分支节点的前驱和或连接节点的后继只能是任务节点。和并行路由不同,或分支节点和或连接节点可以直接相连,以起到“旁路”选择路由的作用。
        

0 0
原创粉丝点击