1、十六 主子流程参数传递的实现在设计流程的时候,如果涉及到子流程,就会有主子流程间传递参数的过程。 例如,将主流程的执行人,传递给子流程,子流程根据主流程的执行人不同,会有不同的处理方式;又例如,采购流程中,卖方备货处理时,发现缺货时,需要启动缺货处理子流程。那么在缺货处理子流程发起时,需要将缺货产品的id号发送给子流程,子流程的业务模块,根据传递来的产品id号,处理缺货的过程。在eworkflow中是这样处理主子流程间的参数传递过程的。在流程设计器中,主流程链接子流程中,子流程的参数设置中,设置子流程的输入输出参数。设置输入输出参数的界面按照数据类型设置,设置参数的表达式。输入参数:当子流程实
2、例被创建时,输入参数的值也被生成。输出参数:当子流程实例运行结束时,输出参数的值被生成。参数的值:流程按流程的表达式分析器分析生成结果值,保存到流程实例参数表中。流程实例参数表结构:子流程的业务模块按要求读取输入参数。输出参数则在子流程结束时候,生成和主流程关联的参数值,生成过程和输入参数一样。主流程的业务模块或者前置后置函数中均可自定义代码获得输出参数的值。十七 任务管理在很多办公管理系统的流程中,关于任务的分配和管理很复杂,下面列几种常见的任务管理方式:1、竞争型任务将任务分配给一组具有相同权限的人处理,谁先选择处理就锁定为谁处理。 2、直接指派型将任务直接指派给具体的人处理。3、动态会签
3、型 根据预先设定好的任务执行人范围,生成他们的处理工单,必须都处理完成了,任务才能完成。也可以根据预先设置好的会签百分比来判断任务是否完成。4、平均分配型 将任务平均分配给任务的可执行人。任务的可执行人为一组用户,任务派发给当时在处理的工单数最少的用户。任务的实际分配方式可能有很多种,可以根据实际情况再扩展出符合自己需要的任务分配和管理方式。在eworkflow中,1、竞争型任务是这样管理的。在流程定义的时候,流程设计器中,先定义好任务的类型如下图:任务类型选择 竞争型,同时选择任务的参与人,即任务的可执行人。当流程运行时,流程到此节点时,会根据任务的可执行人范围,生成任务的待签收记录;当有用
4、户选择签收后,则锁定为此用户的待办任务,其他的用户则不能再签收或执行此任务了。当用户从待办任务中,选择执行此任务后,流程流转到其他节点后,此任务就执行完成,成为已办任务。2、直接指派型任务管理在流程设计器中先定义好任务的主要信息,任务的可执行人等。选择任务类型为 直接指派型 任务,如下图:在流程实例运行时,流程到此节点时,会根据任务定义的信息直接生成预设置的任务人的工单,当任务的可执行人登录后从待办任务中选择执行任务后,流程节点流转出此节点,任务就完成了。十八 工作流会签的相关实现在工作流系统中,单步会签,多部门会签,会签百分比,加签,减签等等这些是必备的功能。尤其在办公管理的审批流程中,经常
5、会用到这些。例如单步会签,在流程的某个环节需要多个人同时办理,不分先后次序的签署意见等。多部门会签,流程运行到某个环节需要多个部门的人同时办理,各部门不分先后次序的发表审批意见等。会签百分比,流程运行到某个环节需要多个人协助同时处理,但是只需要80的人处理过,就可以通过了。这个百分比就是会签百分比,在流程定义的时候可以设置其值。加签,当流程实例运行到一个具体的环节时候,需要临时增加处理人。增加的处理人是流程定义的时候未定义的。减签,与加签相反,某个流程实例运行时候,按流程定义的规则,例如需要5个人同时办理,但这个个例只需要4个人办理过就可以了,则可以减少一个处理人。在eworkflow中是这样
6、实现的。流程定义的时候,在需要产生会签的环节定义好任务主体信息,任务名称,任务类型(一般选择动态会签型),任务的执行人或参与人。可以是具体的人,或者角色或群组。当流程实例运行到此环节时,任务引擎就会按照定义的信息,创建任务信息,并按照任务的可执行人范围生成任务执行人的待办任务工单。当用户处理任务,完成工单后,任务即完成了。表结构:动态会签流程定义过程:会签步骤的动态会签定义过程,设置用户,角色群组,以及会签百分比加签、减签、会签百分比的实现当流程实例运行时,任务引擎根据定义的任务信息,生成具体执行人的任务工单,放入待办任务列表。当任务还未执行完成时,管理员或有相关权限的人可以根据具体的需求,加
7、减任务的执行人,生成新的可执行人的工单。当所有人都执行完成后,任务即完成了。当任务设置了会签百分比,任务引擎会按照百分比来判断任务是否完成,即完成了任务工单的人占总体的百分比等于会签百分比,则任务就完成了。十九 工作流系统的事务处理 工作流系统的每个流程实例,从创建到结束,都有一个较长的过程。流程实例的执行过程可能立即执行,也可能较长时间的等候处理。当处理过程中出现异常或者故障时候,流程需要回滚,并保持流程和业务的同步回滚,不至于业务和流程不同步,或流程本身的轨迹发生紊乱。因此需要在工作流系统中引入事务处理机制。事务的属性有四种Atomicity, Consistency, Isolation
8、, Durability,简称ACID。 Atomicity 原子 要么是所有的事务操作都成功完成,要么是所有的事务操作都没完成。 Consistency 一致 当事务开始和结束的时候,涉及事务的资源都必须处于合法的状态。事务不能违返完整性约束或业务规则。 Isolation 独立 事务内的操作独立于其他所有操作。事务外的操作都看不到处于中间状态的数据。 Durability 持久 事务一旦成功完成,影响就是持久的,且无法撤消。 工作流引擎在执行每个流程实例时,通常是将流程分成一个环节一个环节的执行,各环节通过提交动作来完成本环节,并使流程流转到下一环节,每 个环节的一次执行动作的过程就是一个
9、流程的短事务处理过程。一个工作流实例运行的生命周期由多个这样的短事务组成。多个流程的短事务保证了流程的长事务一 致性。无论是流程的短事务还是流程的长事务,都应该具有事务的那4种属性。在eworkflow工作流系统中,一个流程实例的生命周期中会包含多个短事务,由多个短事务保证流程的长事务。短事务采用了数据库的事务处理,在每个动作的提交之初,启动流程的事务,执行流程的动作提交,同时提交涉及的业务数据,待都提交完成后,提交数据库 的事务,将数据持久化入数据库。在动作执行的过程中,一旦有异常抛出,即回滚数据库事务,流程数据和业务数据均回滚到动作提交之初,达到事务的原子性一致 性。当流程的短事务人为的回
10、滚时,即执行自由流,回退流的时候,流程的长事务通常需要辅助“业务补偿类”来达到数据的一致性。二十 动态创建流程多分支节点在工作流系统的实际应用中,经常会有根据流程实例的运行,动态的生成N个分支的情况,且每个分支又是一序列流程化的操作,待每个分支运行完成后,再汇集到一起,继续原来的主流程。 例如,当一个单据填写完成后,提交给审核部门,需要根据每张单据的情况,决定提交给几个部门审核,并且每个部门的审核是一系列流程化的操作,操作完 成后,各个审核部门再汇集起来。这样就必须在流程实例运行时,根据预先定义好的单线流程,动态的生成多份分支,最后再汇集在一起,流转到主流程。流程图例:分支节点合并节点 之间的
11、操作是一个模板节点,当流程实际运行时,由前面的分配步骤,动态分配需要创建的分支个数。这之间的流程定义为创建分支的模板,每个分支的实际运行轨迹可以根据参数的不同而运行轨迹不尽相同。实现过程:每个业务流程在设计完成后,流程实际运行时,会根据设计的流程过程,每启动一个流程就创建出一个流程实例。流程实例id是唯一标识一条流程记录。业 务流程,通常是通过业务表流程实例id 和流程关联起来,当流程实例运行时,执行流程的动作,并填写相关的业务记录,导致流程的步骤转移,流程实例状态得到升迁,流程得到递进。但当流程需要动态创建分支,动态分支节点后定义各步骤动作等节点会动态的创建出n份,且这n份的节点信息是相同,有相同的节点id和节点名字,在流程引擎中,无法区分当前节点属于那条分支。因此引入动态节点实例ID,此ID能唯一标识每流程实例的每分支路由。当流程各分支节点运行时,各分支节点的流程运行轨迹应该是不尽相同,因此需要引入流程动态节点实例的参数(变量),通过对这些参数变量赋予不同值,来达到各分支路由的不同运行轨迹。动态分支节点实例表,和参数表结构;在流程运行时候,进入动态分支节点之前,需要执行动态分配步骤,来确定此流程实例需要动态创建几个分支。创建动态分支,设置参数表单