基于目录树的工作流引擎设计与实现

2016-04-05 20:11田雅轩
科技视界 2016年8期
关键词:工作流节点

田雅轩

【摘 要】目前,大多数工作流引擎流程复杂、环节较多,维护起来难度较大。并且在工作流发生变动的情况下,很容易影响到任务正常流转。为应对工作流引擎在使用过程中出现的加载效率低、灵活性小、流转受阻等问题,提出了基于目录树结构的工作流引擎设计。

【关键词】工作流;工作流引擎;目录树;节点

【Abstract】Most of the current workflow engine process complex, more links, it is difficult to maintain. And if changes in workflow, it is easy to affect the normal circulation of official document. For the problem of loading efficiency to deal with workflow engine used in the process of low, small, flexible transfer resistance, puts forward the design of workflow engine based on tree structure.

【Key words】Workflow; Workflow engine; The directory tree; Node

1 设计背景与目标

工作流引擎是根据角色、分工和条件的不同,提供对各应用系统有决定作用的信息传递路由解决方案[1]。目前,市场上的工作流引擎系统,流程事项的各环节和流转路径相对比较固定,当流程发生变化时,只能通过修改代码方式进行解决,因此,程序维护量比较大[2]。

工作流的变动不仅影响到程序的更改,同时,还会影响到占用该工作流的任务正常流转,造成任务流转受阻。虽然现在推出了很多工作流引擎的框架,例如,Shark和JBPM[3],可以在此基础上制定个性化工作流引擎,来满足我们对工作流灵活性和易维护性得要求[4],但是当工作流进行更改时,必须将正在使用该工作流的任务进行清理,任务必须走完流程或者被删除重新发布,否则无法修改工作流内容。因此,虽然解决了灵活性问题,但在工作流维护方面又增加了额外的工作量。为此,基于.Net平台,开发了一种较轻量级的工作流引擎,用于任务流转。

同时,为了保证在修改工作流的同时能够正确处理占用该工作流且未流转结束的任务。最终确定设计方案为:在更新或删除工作流时,如存在使用该工作流且未结束流转过程的任务,需要对任务的路由方向重新设置。

2 工作流引擎模型构建

本工作流引擎在架构上采用了目录树结构方式,审批环节和审批人作为树的叶子节点,若为审批组则该节点下需要关联审批组人员,则审批组内的审批人员作为叶子节点。

2.1 节点模型

2.1.1 审批环节名称

在审批环节名称设置方面,所有名称采用结构化处理,即环节名称全部从节点名称表中选取。

2.1.2 审批对象

审批人即审批对象是在任务流转至各环节时处理该文的经办人,每个审批环节均有不同审批人负责任务审核、批阅和签批。审批对象分为五类:审批个人、审批组、返回发文者、本部门负责人、总负责人。

1)审批个人

即选择指定的人员作为审批人,当任务流转至特定环节时,由此人负责任务的审批,其他人均看不到该文,也无法进行审批。

2)审批组

审批组可以选择一个部门,例如,测试组、研发组、项目组;也可以预先设置一个小组作为审批组,例如,部门领导组、工会小组、党员组。当任务流转至特定环节前,需要用户从该审批组中选择人员作为下一审批人。

3)返回发文者

任务在上一环审批结束后会自动返回至发文者进行处理。例如,当系统维护费的预算经中心领导审批后返回给发文者,发文者上传发票后继续下一流程审批。

4)本部门负责人

任务在发布后或上一审批结束后,自动流转至本部门领导进行审批,当本部门领导大于两位以上,则需要用户手工选择其中一位审批领导。

5)总负责人

任务在发布后或上一审批结束后,自动流转至总负责人进行审批,当总负责人大于两位以上,则需要用户手工选择其中一位审批领导。

2.2 工作流操作

工作流的操作包括工作流的建立、删除,以及更新工作流,工作的修改操作还包括了:删除节点、插入节点、更新节点内容。其中删除工作流、更新工作流(包括:删除节点、插入节点、更新节点内容),此类操作在执行时,需要判断当前操作的工作流是否被占用,如有任务使用此工作流并且该任务未流转结束,则该任务将被“挂起”,需要将该任务转向其他节点,进行下一步流转。

2.3 工作流接口设计

在工作流设置过程中,通过调用workflow_interface()接口选择节点类型并对工作流进行实例化。最终能够实现三种类型的工作流,第一个种是以个人为审批对象的工作流person_approveflow();第二种是以组为审批对象的工作流group_approveflow(),每次任务在流转到下一环节之前,需要从该组选择下一审批人,然后进行流转;第三种是个人审批与组审批相结合的工作流person_groupflow(),即有些环节需要从组中选择下一审批人,有些环节已固定审批人员,不用选择。

3 工作流引擎实现

3.1 工作流创建

在工作流构建的过程中,需要将用户的选项内容以及关联的表内容进行抓取,传输至工作流程表中,并生成目录树。具体事项如下:

1)通过public ActionResult Index()函数进行初始化;

2)通过递归方式:函数ActionResultCreate(DataTable table, LCSZ lcsz, string id),分别创建各子树,并进行实例化。

3.2 工作流调用

通过前序遍历树的递归方式调用工作流进行流转,并自左向右遍历树的每一个节点,currentnode 为当前节点,nextnode为下一节点,先访问第一个子树,直到访问至叶子节点,再访问该层的兄弟节点,再遍历另一个兄弟子树,直至遍历全部节点,即流程全部走完。

3.3 工作流修改/删除

工作流程内容一旦发生变化,例如,工作流被修改,包括:增加节点、删除节点、修改节点、删除工作流,都将触发check_trigger触发器。通过check_trigger扫描当前流转过程中的任务是否占用该工作流,如果有任务被占用,工作流引擎自动将任务置为“挂起”状态,需要将该任务进行重置,重置方案为:1)将任务退回至初始状态;2)转到其他工作流节点;3)转到本工作流未被删除/修改的节点,如果该工作流即将被删除,那么只能转移到其他工作流节点;最后更新或删除工作流。在程序执行的过程中,首先一旦出现TriggerAction.Delete和TriggerAction.Update操作,则执行triggContext.TriggerAction触发任务,即将其变为“挂起”状态,由修改者对任务重新设置。

4 工作流引擎性能测试

一般的工作流引擎是通过数据库调取流转路径的数据,而本设计则是直接访问已生成的目录树,来调取任务流转路由。记录了1个用户,10个用户、50个用户,100个用户并发调用两种工作流的平均执行时间,过程为从任务流转活动开始到结束。其中,1个用户时,使用一般工作流引擎平均执行时间为2.607s,基于目录树的工作流引擎平均执行时间为1.477s;10个用户时,平均执行时间分别为3.261s与1.763s;50个用户时,平均执行时间分别为3.715s与1.904s;100个用户时,平均执行时间分别为4.213s与2.024s。以上测试可以看出,对于执行同一类活动,使用本设计的工作流引擎比一般工作流引擎所用要少得多。且随着并发数量的增加,这一现象变得更加显著。

5 结束语

基于目录树的工作流引擎在建立工作流的过程中,操作简单,易于修改。在工作流调用过程中,通过性能测试得出平均执行时间为1.792秒,时间复杂度为O(n),执行效率较高。并针对现有工作流设置过程中存在修改后造成流转中任务路由错误或受阻的情况,设计了工作流修改与任务流转联动的机制,保证了占用所修改工作流的任务能够重新选择节点进行新的路由。由于该工作流的设计刚初步完成,在有些流转功能上还需要手工的参与,在实现全部自动化路由方面,需要进一步完善。

【参考文献】

[1]武凌.工作流知识管理系统工作流引擎的研究[J].计算机技术与发展,2010,20(8):112-115.Wu Ling. Study on workflow knowledge management system workflow engine. Computer technology and development. 2010,20(8):112-115.

[2]许悦珊.嵌入式工作流引擎的设计与应用[J].计算机时代,2009,199(1):20-24.Xu RuiShan. Design and application of embedded workflow engine. Computer Era. 2009,199(1):20-24.

[3]马亚锋,张玉扣.教研视野下主流开源工作流引擎对比分析[J].成才之路, 2014,413(1):60.Ma Yafeng, Zhang Yukou. Analysis of teaching from the perspective of mainstream open source workflow engine. The road to success,2014,413(1):60.

[4]冯天佑,梁立宇,李成华,等.基于Activiti工作流引擎技术的电力行业业务流程管理系统[J].信息通信,2013,130(8):57-58.Feng Tianyou, Liang Liyu, Li Chenghua et al. Business process management system for power industry Activiti based workflow technology. The information communication. 2013,130(8):57-58.

[责任编辑:王楠]

猜你喜欢
工作流节点
CM节点控制在船舶上的应用
Analysis of the characteristics of electronic equipment usage distance for common users
基于AutoCAD的门窗节点图快速构建
概念格的一种并行构造算法
结合概率路由的机会网络自私节点检测算法
基于工作流2.0的智慧教室设计与研究
工作流在电力生产管理信息系统中的设计和应用
抓住人才培养的关键节点