工作流办理人筛选规则引擎的设计与实现

2019-10-08 09:01胡昌平王平卞德志
软件 2019年3期
关键词:工作流

胡昌平 王平 卞德志

摘  要: 针对工作流在复杂业务应用场景中按照业务条件动态分配人工节点办理人的需求,设计实现了一种工作流办理人筛选规则引擎,对现有工作流引擎提供的人员变量接口进行扩展,通过执行运行期定义的规则,动态设置办理人集合。该引擎分析了办理人筛选规则基本构成元素,定义了筛选规则对象模型,给出了规则解析运算的算法逻辑,并且提供了规则的可视化编辑设计界面,降低运营人员操作难度,达到快速灵活分配办理人的目的。该规则引擎已经结合开源Activiti工作流引擎在多个企业的实际应用并获取良好的应用成果。

关键词: 工作流;办理人筛选;规则引擎;Activiti

【Abstract】: Aiming at the requirement of dynamically allocates users for workflow manual activity according to business conditions in complex business application scenarios, a screening rule engine of workflow handlers is designed and implemented, which extends the handler variable interface provided by the existing workflow engine, and dynamically sets up handlers by executing the rules defined at run-time. The engine analyses the main elements of the handlers screening rules, defines the object model of the screening rules, gives the logic of the rule analysis operation, and provides the visual editing and design interface of the rules, reduces the operation difficulty of operators, and achieves the purpose of fast and flexible allocation of handlers. The rule engine has been successfully applied in many enterprises by embedded into the open source workflow engine of Activiti.

【Key words】: Workflow; Handler screening; Rule engine; Activiti

0  引言

人工處理节点是工作流系统中的一种重要活动节点类型,国内许多学者对流程引擎在不同领域的应用进行了研究[1-8],其中都涉及人工处理节点的使用。现有的工作流引擎,例如Activiti、JBPM等支持以角色分配、直接指定用户、XML配置、变量绑定和监听器方式指定办理人。虽然这些方式可以满足按照固定组织、角色、人员进行分配的需求,但是在一些复杂应用场景中,如果需要按照业务逻辑条件,动态分配不同的人员组合共同处理同一人工节点,依靠现有办理人设置方式就难以实现了,只能在工作流事件监听器接口中,以硬编码方式实现办理人分配逻辑,但是硬编码方式实现业务逻辑,缺乏灵活性,操作难度大,需要开发人员编码,这就给工作流系统运营实施工作带来一定挑战。

解决这个问题的思路是采用规则引擎在运行时动态解释业务规则,执行筛选逻辑,避免硬编码,例如文献[9]给出了一种分布式规则引擎的实现方案,文献[10]对智能化规则引擎的应用技术研究。但是通用化的规则引擎,要求运营人员掌握其规则语法,编写规则脚本,并且进行调试,难度较大。因此,本文在分析抽象工作流办理人筛选共性业务需求的基础上, 建立统一规范的筛选规则对象模型,定义规则对象序列化格式,构建筛选规则引擎,实现基于模型的筛选规则解析运算,动态分配办理人,同时基于模型设计实现了可视化规则编辑界面[11],降低运营人员操作难度,提高系统运维效率,达到快速灵活设置工作办理人的目的。

1  筛选规则分析

1.1  基本规则分析

1.2  规则逻辑模型

根据以上分析,可以建立以基本规则1)为基础的办理筛选规则逻辑模型,首先定义图1所示的过滤表达式。

过滤表达式以全体人员集合为输入,输出返回按照表达式进行处理后的人员集合。完整的筛选规则是对各条过滤表达式运算的结果进一步做交、并或差集运算,可以用表达式树的形式建立完整的过滤规则,如图2所示。

1.3  业务条件

过滤表达式中业务条件是由业务数据、组织数据、流程上下文数据等形成的布尔逻辑表达式,由业务逻辑解析引擎执行,用于判断是否需要对指定范围人员进行筛选。管理管可以先使用条件构造器编辑业务条件表达式保存到系统中,在创建筛选规则时选用。

1.4  人员范围

在过滤表达式中,可以为每条过滤表达式选择一项预设的人员范围,预设人员范围包括按照用户个人属性、角色、所属部门、关联业务数据和相关流程节点等划定的人员范围,也包括全体人员集合和空集。过滤表达式计算时,将根据业务条件是否满足直接返回指定范围的人员集合,或者返回从全体人员中排除指定人员范围后的剩余人员集合。创建筛选规则时,可选预设人员范围,以便构成过滤表达式。人员范围不限于组织机构、角色等常见的几种,也可以由应用系统的数据指定,例如在项目管理系统中,不同项目团队成员也是一种人员范围。

2  引擎设计

2.1  逻辑架构设计

筛选规则引擎由规则设计器、规则解析运算器两部分组成,规则设计器提供用户设计界面,生成规则文本。工作流系统通过引擎接口获取办理人集合,触发规则解析运算器加载规则文本,执行规则解析运算逻辑,整个引擎架构如图3所示。

2.2  规则对象模型

办理人筛选规则的静态对象结构模型采用组合设计模式设计,核心类与接口如图4所示。

IRule是一个完整的规则表达式,Calculate方法接收流程上下文参数执行规则计算,实现该接口的SetExpression类表示二元集合运算,Left和Right通过递归引用IRule,形成了参与集合运算的两个子表达式,SetOperator属性表示交并集运算符,对Left和Right关联的两个子表达式的结果集进行交集或并集运算。

FilterExpression是过滤表达式,同样实现了IRule接口,作为规则对象结构树中叶子节点,其属性包含了过滤表达式的所有元素。

IBizCondition接口表示业务条件表达式,静态结构与规则表达式类似,呈树形结构,BoolExpression作為二元逻辑运算表达式,可以对Left和Right关联的子条件式进行与或运算。ConditonExpression类表示数据对比条件,可以指定流程参数、业务数据、用户数据等与固定常量或其他参数数据进行比较。

人员范围过滤器与过滤表达式对象之间采用桥接模式设计,FilterExpression通过IScopeFilter接口调用人员过滤器的范围过滤方法,该接口将人员范围过滤方法的实现与FilterExpression分离,基于接口实现不同的人员范围过滤机制,同时提供了扩展机制,IScopeFilter实现类对象可以通过IOC框架注入过滤表达式对象中。

3  引擎实现

3.1  可视化规则设计器

可视化设计器包括业务条件设计界面和办理人过滤规则设计界面。业务条件设计界面可以使用业务数据条件表达式、SQL、代码和组合方式快速构建多条业务条件。业务条件设计界面如图5所示。

办理人过滤规则设计器为管理员提供了办理人筛选规则的配置编辑工具界面。设计器根据管理员输入,生成规则的客户端对象模型,进行序列化后保存到流程配置文件中。规则编辑器界面如图6所示。

3.2  规则表达式序列化

规则对象模型生成后需要将其序列化,以便保存到流程配置文件或者发送前端渲染设计器页面。

常用序列化方式有XML和Json方式,考虑到序列化采用Json格式具备易于读写,格式压缩后占带宽小等优点,客户端JavaScript可以简单的通过eval()函数进行Json数据的读取,同时也支持多种服务器端语言,便于服务器端的解析,因此采用Json序列化方式转化规则对象为文本保存到流程配置文件中。

3.3  规则运算

流程引擎触发筛选规则计算,规则组件首先加载规则JSON文本,反序列化成为IRuleExpression接口类型表示的规则对象,然后通过调用其Calculate方法,对规则对象树左右分支逐层向下遍历访问,直到计算出叶子节点过滤表达式的结果,再逐层向上做交并运算,最后得出规则过滤结果。遍历计算逻辑主要在SetExpression类和FilterExpression类的Calculate接口方法中实现,关键代码如下:

3.4  流程引擎挂载

筛选引擎可以通过Activiti工作流引擎提供的TaskService().setAssignee(taskId,userId)接口,在流程启动后挂载到工作流中执行。当执行到指定步骤时,流程引擎触发筛选规则引擎执行,获取到办理人,然后通过接口设置办理人执行流程。

4  结论

本文设计实现的工作流办理人筛选引擎,可以动态灵活设置工作流的办理规则,解决了硬编码复杂业务规则导致系统僵硬的问题, 满足了企业工作流应用中的复杂业务场景的需求,降低了工作流管理人员的操作复杂度,提升流程应用管理的效率,结合Activiti工作流引擎在多个实际企业应用项目中实际应用并取得了良好的效果。

参考文献

[1]巩思汉. 基于工作流的应急预案管理系统的设计与实现[J].软件, 2015, 36(11):89-91.

[2]曹月恬, 詹舒波. 基于工作流的计算机辅助电话访问系统[J]. 软件, 2016, 37 (02): 42-45.

[3]颜乐鸣. 基于工作流的软件测试过程模型研究[J]. 软件, 2018, 39(5): 160-165.

[4]杨朝霞. 基于RBAC的学生科研项目管理系统工作流模型分析与设计[J]. 软件, 2012, 33 (4): 13-15.

[5]崔欢欢, 黄伟, 舒江波. 基于规则引擎的自适应工资系统设计与实现[J]. 软件导刊, 2018, 17(6): 102-105.

[6]朱晓辉, 马晶, 王焱. 基于规则和工作流引擎的保险电子商务系统研究[J]. 现代电子技术, 2016, 39(19): 157-160, 164.

[7]刘恩海, 李甜, 陈媛媛. 跨部门的工作流引擎模式研究[J]. 计算机应用与软件, 2018, 35(6): 76-82.

[8]安婧. 基于工作流引擎的办公自动化管理系统的设计[J]. 微型电脑应用, 2018, 34(7): 19-21.

[9]朱思远, 张雷. 一种分布式规则引擎的实现方法[J]. 软件, 2015, 36(12): 158-161.

[10]赵志伟. 智能化规则引擎技术研究[J]. 软件, 2018, 39(8): 65-69.

[11]欧阳广津, 武彤. 基于JBPM的在线流程设计器的研究与应用[J]. 计算机技术与发展, 2018, 28(7): 29-33.

猜你喜欢
工作流
支持节点协同的工作流模型构建方法研究
基于工作流2.0的智慧教室设计与研究
工作流在电力生产管理信息系统中的设计和应用
基于J2EE的电子政务系统研究与应用
基于J2EE的电子政务系统研究与应用