`
iuottp
  • 浏览: 171521 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

工作流参与者和工作项模式分析

阅读更多

工作流参与者和工作项模式分析 收藏

原文地址:http://www.blogjava.net/RongHao/archive/2007/10/30/157009.html

对 于当前的工作流应用来说,人工节点无疑扮演着一个非常重要的角色。因为无论是传统的协同办公系统还是越来越多的企业应用,都需要有人参与到具体的流程中 来。这篇文章着重分析工作流应用中人工节点所涉及到的参与者模式以及与此关联的工作项模式,最后会提供部分的解决方案作为参考。

先简单说说什么是人工节点。

人 工节点的概念是与自动节点相对的。顾名思义,人工节点就是需要有人参与的节点,在实际流程中,它体现在产生由人完成的工作项以及由人决定一些决策变量,这 些决策变量会对流程的运行产生影响(例如分支的选择等等)。自动节点则是由工作流引擎自己调用完成,不需要人的参与,通常是执行定制的业务操作。相比较而 言,人工节点更多的应用在管理流程里,而自动节点更多的则是应用在企业业务流程里。

人工节点的职责有三个:第一是决定该节点的参与者;第二是根据参与者生成需要人来处理的工作项;最后是当工作项被参与者处理完毕时,它将继续触发流程的流转。参与者处理工作项时可以处理相应的业务和设置流程决策变量。

下面我们就按照这三个职责分别对人工节点所涉及到的参与者模式和工作项模式进行分析。

<!--[if !supportLists]-->1、  <!--[endif]-->决定参与者模式

换句话说就是决定该节点的参与者,这里有两种模式:引擎自动获取和最终用户指定。
 

1 1 引擎自动获取

所谓引擎自动获取就是由引擎在运行期计算实际的节点参与者,不需要最终用户的参与。这个计算基于流程定义时对该节点参与者的定义。

<!--[if !supportLists]-->(1)    <!--[endif]-->直接指定人员、部门或角色

这 种情况最简单,也最直接,用户定义节点时直接在组织用户树里选定人员、部门或角色,然后在运行期根据定义执行与或者是或的运算。大多数的工作流引擎都支持 这种模式。但很明显它也存在着很大的局限性,它是静态的,一旦流程定义完毕参与者也就跟着固定下来,运行期的任何变化都不会对参与者造成影响,一个很简单 的需求,请假流程,节点的参与者需要是当前申请者的部门领导,因为申请者在定义期是不确定的,所以根本无法指定节点的参与者,所以这种模式远远满足不了用 户稍微复杂一点的需求。

<!--[if !supportLists]-->(2)    <!--[endif]-->调用用户定制的计算参与者代码

这 种情况通常是由引擎提供一个接口或是父类,用户需要实现或是继承这个接口或父类,然后实现相应的方法。这个方法通常会传递进一个执行上下文的参数,用户代 码通过这个上下文可以访问到当前流程实例的信息,例如当前节点状态,工作流变量等等,然后用户可以根据实际业务和当前流程实例信息进行逻辑计算,最后返回 一个参与者的 ID 集合。对于上一个模式里提到的计算当前申请者部门领导的例子,这个模式实现起来非常简单,首先获得当前申请者 ID ,然后在根据这个 ID 找出该申请者部门再找出该部门领导即可。

实际流程运行到该节点就会调用用户自己定制的计算参与者的代码,方法返回的参与者 ID 即作为该节点的实际参与者。

这种模式对于工作流引擎的实现而言最为简单,因为它把最大的复杂性都抛给了用户,由用户代码来计算实际的参与者。实际上很多开源的工作流引擎采用的都是这种方式,例如 JBPM 。 但是这种方式给用户带来最大灵活性的同时也带来了复杂和烦琐。特别是当面对一个数量巨大的流程需求时,为每一个流程的每一个人工节点都定义一个参与者计算 类是让人头疼的。再加上现在强调业务的敏捷,业务里的改变要迅速反馈到流程的定义里,让最终用户来编写或修改这个参与者计算类不现实也不可能。补充一下, 这也是用户在考虑采用开源的工作流引擎还是商业工作流引擎时需要着重考虑的一个方面。

<!--[if !supportLists]-->(3)    <!--[endif]-->指定前续节点的参与者

实际上是用户在节点定义时指定参与者为前续某个节点的参与者,当流程运行到该节点,引擎会自动获取所指定的前续节点的参与者作为该节点的实际参与者。

这个模式实现起来并不困难,大多数商业工作流引擎都对该模式进行了支持。它能够满足用户的部分特定需求。

<!--[if !supportLists]-->(4)    <!--[endif]-->更为复杂的情况

用户的需求永远是复杂的,引擎所要做得就是尽量降低这种复杂性,流程的变化要能够迅速跟上业务的变化。考虑下面两种稍微复杂一点但是又很常见的需求。需求一:参与者为当前申请者的部门领导且职位为副总;需求二:参与者需要是测试部的所有女同事。这两种需求模式 1 3 都不能满足, 2 可以,但是正如提到的那样,模式 2 可能会非常的烦琐,不能适应业务的敏捷。其实这里的复杂性主要体现在: 1 、这里的参与者可能是运行期决定的; 2 、参与者的限制条件可能非常多,而这些条件不是简单的部门、角色或职位所能描述的。

对于一般的工作流引擎而言,它们都会选择模式 2 的实现,让用户自己实现逻辑。实际在后面的部分解决方案里,我们会看到更为好一点的实现方式。

 

1.2 最终用户指定

   运 行期由最终用户来决定节点的参与者。这也是中国国情所独有的特色。这种模式最为常见的就是用户提交工作项时的提交页面,用户在该页面上选定下一节点(多数 分支用户选定时)和下一节点的参与者。这种模式本身并不困难,问题在于在提交页面需要给用户提供一个参与者的选择范围,让用户进行选择。而关于这个选择范 围,则又回到前面所提到的引擎自动获取的模式,这个范围同样是需要引擎计算的。于是又回到了刚刚讨论过的四种模式。

 

2 、参与者执行模式

   现在,已经获得了节点的参与者。引擎下一步将会根据这个参与者生成工作项,注意,这里的参与者可能是一个人,也可能会是一个人员范围(即多个人)。于是就产生了参与者的执行模式,也可以理解为工作项的生成模式。

2.1 竞争参与

当有多个参与者参与这个节点时就会产生竞争参与这个模式。同样一个工作, A 可以完成, B 也可以完成,于是就产生竞争,谁先开始这项工作,就由谁负责完成该工作。

2.2 顺序参与

   多个参与者按照指定的顺序完成该工作项。 A 完成之后由 B 完成, B 完成之后再交给 C 完成。

2.3 同时参与

   多个参与者同时对工作进行处理,所有参与者均完成后,流程继续向后流转。这个模式其实比较复杂,因为这里同时涉及到一个完成规则:是所有参与者均完成工作项后流程流转,还是有其他规则?例如完成 2 个工作项即可流转,完成 80% 的工作项即可流转。稍候会讨论到。

2.4 负载均衡

   这也是一个常见的需求。这项工作 A B 都可以完成,但是 A 目前有 10 个待办工作项, B 只有 2 个待办工作项。于是用户期望该工作交由 B 来完成。这里需要实现一个简单的负载均衡。其实这种情况只是智能决策的一种最简单的情况,所谓智能决策是指系统能够根据一定的指标(由数据分析,例如人员的处理效率,工作负载等等)和规则来决定该节点的参与者。

<!--[if !supportLists]-->3、 <!--[endif]-->工作项完成模式

这 个模式在参与者执行模式为同时参与时有效。在说到这个模式之前,先简单说说工作项可能存在的几种特殊状态,这些状态包括挂起、人工终止和委派。挂起就是工 作项暂时停止执行,挂起会影响到流程的流转,会导致流程的挂起。人工终止则是人工手动改变该工作项的状态,使该工作项终止执行,这个人通常会是管理员。人 工终止也会对流程流转产生影响,当除去该工作项之外的所有工作项都完成时,人工终止该工作项会触发流程的流转。委派就是将该工作项委派给他人完成,同时该 工作项也就结束了。人工终止和委派是工作项结束的特殊状态。
 

3.1 全部完成

当所有工作项都结束时触发节点的结束和流程的流转。

3.2 完成规定的个数

节点定义时指定工作项必须完成的个数,当完成的工作项达到这个指定的个数时触发节点的结束和流程的流转。  

3.3 完成规定的百分比

节点定义时指定工作项必须完成的百分比,当完成的工作项占所有工作项的比例达到这个指定的百分比时触发节点的结束和流程的流转。
 

其实这里很明显的可以看出不管是所谓的参与者执行模式还是工作项完成模式不过都是一定的规则,既然是一定的规则那必然就限定了应用的灵活性,用户能否自定义规则?根据业务灵活地修改规则?规则引擎 +DSL 应该是一个不错的选择。

分享到:
评论

相关推荐

    工作流引擎技术

    5. **工作流参与者**:参与者是执行活动的资源,通过工作项列表接收和处理任务。 6. **工作项**:工作项代表过程实例中待处理的任务,是活动实例的表现形式。 7. **工作项列表**:工作项列表是参与者与工作流引擎...

    工作流资料+DEMO源代码

    而“工作流资料”可能包含理论介绍、案例分析、设计原则等内容,可以帮助我们更全面地理解和应用工作流。通过结合源码和文档,我们可以深化对工作流的理解,提升开发和实施工作流系统的技能。 总的来说,这个资源包...

    工作流和DevExpress

    6. **监控和报表**:通过内置的报表和监控工具,管理者可以实时查看工作流的状态,分析流程效率,优化业务流程。 使用DevExpress工作流组件的优势在于,它简化了工作流系统的开发和维护,同时提供了强大的定制能力...

    工作流回退模式设计分析

    工作流回退模式的复杂程度各不相同,涵盖了参与者的重新选择、回退条件判断等多个方面。以下是几种常见的回退模式: 1. **串行模式** - **特点**:在这种模式下,后续节点可以回退到其前续任意一个人工节点。一旦...

    工作流回退模式分析.docx

    工作流回退模式是流程管理中的一个重要概念,它允许参与者在发现任务处理错误或不应由自己处理时,将任务退回给之前的执行者。这一机制确保了流程的正确性和灵活性,帮助纠正错误,防止流程停滞不前。以下是关于工作...

    workflow 工作流参考模式

    - **运行时期活动交互**:涉及到工作流中各个参与者之间的互动,如任务分配、状态更新等。 - **分配与系统接口**:指工作流系统与其他外部系统的连接和交互能力。 ##### 2.2 工作流的发展历程 工作流技术的发展...

    工作流模型分析.pdf

    ### 工作流模型分析 #### 一、工作流概述 **1.1 什么是工作流技术** 工作流技术是一种支持业务过程中任务自动化处理的技术体系。它通过定义、执行和管理工作流来协调业务过程中的各个步骤,使得这些步骤能够按照...

    完整工作流系统源码

    需求分析是任何项目开发的起点,对于工作流系统来说,这可能涉及到理解业务流程、识别关键参与者、定义角色权限、确定审批规则以及梳理工作流中的各个状态和转换条件。在这一阶段,需要详细列出所有功能需求,如任务...

    基于关系数据库的工作流系统设计与实现

    2. **工作流实例数据**:记录每个工作流实例的状态、当前活动、参与者、任务参数等信息。 3. **事务管理**:利用数据库的事务处理机制来保证数据的一致性。 4. **查询与报告**:提供对工作流数据的查询和统计功能,...

    EOS工作流开发指南V5.3

    - **概念**: 工作流是一种规范化的步骤序列,在这些步骤中,文档、信息或任务在参与者之间被传递。每个步骤通常涉及特定的任务完成或决策制定。 - **应用范围**: - **企业内部管理**: 包括但不限于人力资源管理、...

    工作流管理系统

    在工作流系统中,它扮演了数据存储的角色,保存了工作流实例、状态、参与者等关键信息,同时提供强大的查询和事务处理能力,确保数据的一致性和完整性。 4. **工作流**:工作流是指一系列有序的任务,这些任务可以...

    精益供应链的工作流建模与分析

    - **需求分析**:首先,需要明确供应链中的具体业务流程,包括各个节点的任务、参与者及其之间的依赖关系。 - **初步设计**:根据需求分析结果,利用CPN的基本元素(位置、变迁、着色标记等)构建初始模型。 - **...

    java实现工作流完整报告

    - 相关技术和方法:详细介绍工作流、MVC开发模式、JSP等技术的应用。 - 系统需求分析:分析系统的功能需求和性能要求。 - 系统总体设计:整体架构设计,包括层次结构和组件设计。 - 详细设计和编码:具体模块...

    工作流系统异常处理实现方法

    考虑到人员在工作流系统中的严格角色和权限定义,单靠部分参与者可能无法完成一个异常处理过程,所以除了异常的自动传播机制外,如何在系统的组织层次上实现异常处理过程的协调合作也是非常重要的。 #### 5. 结合...

    工作流参考手册范本.doc

    EOS Workflow是一款典型的工作流管理系统,其核心在于五个主要对象:流程定义、活动定义、流程实例、活动实例和工作项。这些对象在工作流的开发、执行和管理中起到至关重要的作用。 1. **流程定义**:这是业务流程...

    工作流模型分析工作流模型分析

    在分析工作流模型时,我们需要关注多个方面,包括流程的起点、激活方式、运转模式以及流程的组合和嵌套。 1. **流程的起点模型**: - **单起点(Single Start Node)**是最常见的模型,只有一个起点开始流程,所有...

    java工作流

    - **流程定义**:描述工作流的静态结构,包括活动(任务)、转换(连接任务的路径)和参与者(执行任务的角色)。 - **流程实例**:根据流程定义创建的动态运行实体,每个实例代表一次具体的流程执行。 - **任务*...

Global site tag (gtag.js) - Google Analytics