0 引言
工作流管理技术是一种正在快速发展的技术,正在被越来越多的企业所应用。企业的日常活动中,约有70%是属于流程类活动,如订单出货流程、生产流程、企业内各类申请表单、公文签审、信息传递与签收、公司各类支出与收付等。由于在Internet上开展电子商务的廉价与方便性,促进了企业之间的交流,扩大了企业视野,在这种环境下,工作流管理系统就暴露出了很多不足之处:缺乏柔性,不能及时响应变化和相互之间缺乏互操作等,这些显然不能满足现代企业业务流程管理的要求。
面向服务体系结构(Service-Oriented Architecture,SOA)的出现,为解决上述难题提供了契机。SOA是为解决在Internet环境下业务集成的需要,通过连接能完成特定任务的独立功能实体实现的一种软件架构。把SOA加入到工作流系统中,可以很好地解决现有工作流管理系统的柔性缺乏、不能及时响应变化和相互之间互操作性差等缺点,极大地提高了工作流系统的应用范围,促进工作流管理系统的发展。因此,研究并实现基于SOA的工作流管理系统具有重要的现实意义和广阔的应用前景。文中设计开发的工作流管理系统应用于某电力公司设备管理系统,实际应用表明,设计的工作流管理系统改善了电力公司的内外部流程,提高了工作效率,达到了预期的效果。
1 基于SOA的工作流系统设计
1.1 工作流系统结构设计
设计的工作流系统结构如图1所示。
图1 工作流系统结构示意图
其中,流程定义存储服务负责提供保存流程定义文件的服务;流程实例存储服务保存流程实例状态数据;工作流引擎服务负责从流程定义存储服务处获得流程定义,解释后执行,并通过流程实例存储服务保存流程实例数据,通过调用其它服务完成流程活动,与其它引擎服务协作可进行流程迁移或并行执行,用户则通过用户界面与工作流引擎进行交互。
在基于SOA的工作流管理系统中,工作流的使用不再限于它的位置,任务由服务完成。只要为服务定义标准接口,它们就能被任何依据标准的应用访问到。由于一个流程不再限制于工作流引擎的位置,流程能够在任何地方设计、存储和执行。用户能够选择分布在网络环境中的任何可获得的工作流引擎服务来开始执行一个流程。在执行过程中,可以在不同引擎服务间迁移来达到负载平衡,降低不同应用和引擎服务间的通信费用,易于从错误中恢复,甚至一个流程同时在多个引擎服务上执行,以获得更高的效率。可见,基于SOA的工作流管理系统具有分布、高效、容错、负载平衡等优点,非常适应复杂信息环境的需求。
1.2 系统模块及接口设计
整个工作流系统由建模工具、客户端、模型分析、工作流引擎、SOA服务管理模块组成。建模工具用来进行工作流过程建模。模型建立后使用模型分析工具对模型进行完整性、约束、时间可行等方面的检查,检查后在数据库中建立对应记录。工作流引擎将数据库中的记录实例化。客户可以使用状态查询某个实例的状态,并可以控制或修改相应的流程。客户使用浏览器作为客户端,通过工作流引擎提供的功能完成对应的功能。SOA服务管理可细分为Web服务管理和Web服务注册。Web服务管理主要是将已有的Web服务组合,形成从工作流活动到Web服务的对应关系,供客户使用。Web服务注册主要是对Web服务进行注册,并由Web服务管理模块进行管理。
工作流联盟(Workflow Management Coalition,WFMC)给出了5类接口,结合本系统的需要,将其5类接口细化为6类接口,如图2所示。
图2 接口示意图
(1)接口1:工作流服务和工作流建模工具。
(2)接口2:工作流服务和客户应用之间的接口,客户端使用浏览器,而客户应用使用Web服务技术,所以,可以使用Java提供的标准接口。
(3)接口3:工作流引擎和直接调用的应用程序之间的接口,即Web服务与工作流引擎之间的接口。
(4)接口4:工作流管理系统之间的互操作接口,细化为对数据库操作的事务。各模块并不直接调用,使用对数据库的事务技术来进行互操作。
(5)接口5:工作流服务和工作流管理工具之间的接口,细化为状态查询与数据库的实时读操作。
(6)接口6:单个Web服务与Web服务管理系统之间的接口。
其中,接口1为在不同物理或电子介质之间传递过程定义的信息提供了交互的形式和API调用;接口2定义了通信建立、工作流定义操作等功能;接口3激活应用程序的API函数应覆盖的几个方面的功能;接口4通过提供大量完成工作流执行服务之间需要的API来实现工作流引擎互操作,例如,2个工作流执行服务之间的直接调用或者通过网关函数;接口5主要实现对工作流的管理和监视;接口6实现工作流活动自身的管理,实现业务重组之类的功能。
2 SOA服务与工作流的整合
企业内部所有应用功能都是以Web服务的方式提供的,方便用户需求改变时的业务重组。同时,工作流引擎在进行调度的时候,采用(Simple Object Access Protocol,SOAP)协议来实现工作流引擎和Web服务之间的交互。在Web服务与工作流之间交互时通过Web服务管理器,做到逻辑上的独立性。为此,发布Web服务时使用标准的Web服务描述语言(WSDL),同时,采用SOAP代理来实现SOAP消息的生成和传送。整合的整个系统架构如图3所示。
图3 SOA与工作流整合系统架构示意图
系统的工作原理及流程可以从3个方面来描述:
首先是服务定义阶段,在该阶段,根据功能需求分析对应Web服务,使用WSDL来定义。WSDL和SOAP一起构成了Web服务的核心结构单元。WSDL基于XML格式,用来描述Web服务。它描述了Web服务可以执行的操作以及Web服务可以发送或接收的消息格式。WSDL文档可以看成是客户端和服务器之间的一个协约。使用WSDL工具可以自动处理这个过程,几乎不用手工编写代码就能够让应用程序整合新的服务。因此,WSDL是Web服务体系结构的基础,因为它提供了一个通用语言,用来描述服务和整合这些服务的平台。由于WSDL文件能够导入其它的WSDL文件,因此,总有可能发生名字冲突的时候。所以,最后注册的WSDL文件需要在它们的
其次是流程定制阶段,在工作流定制的过程中可使用流程定制工具,它提供了友好、简单的图形化界面,以支持拖放的方式实现工作流定制。一个流程是由许多的活动组成,每个活动表示一个要执行的功能,该功能的执行者就叫做参与者。一个参与者有2个可能的选项:Web服务和角色。如果是Web服务,用户选择企业WSDL数据库中的某一Web服务;如果是角色,仅仅需要指定角色的名字。或者同时指定服务与角色。一个典型的Participant元素的定义如下:
最后是流程执行阶段,当执行到某个活动需要请求Web服务时,工作流引擎发送服务请求信息,如Web服务的名字,给Web服务管理器,管理器通过读取并解析在流程数据库中存储的工作流描述文档(WSDL),可以得到包括Web服务名称、操作名称、操作所需的入口参数等信息。将这些信息传给SOAP代理,由SOAP代理执行SOAP调用。
3 基于SOA的工作流管理系统EleFlow的实现
3.1 工作流引擎设计
工作流引擎作为工作流管理系统的核心部分,提供对系统有决定作用的根据角色、分工和条件的不同决定信息传递路由、内容等级等核心解决方案。如果一个工作流系统缺乏功能强大的引擎,势必变得容易出错。在前面设计的基础上,对系统工作流引擎与系统的具体实现进行了设计。该引擎可以划分为几个模块,这些模块涵盖了引擎的使用、配置、流程定义、查询和运行时等方面内容,通过这些模块可以对整个系统进行调度和资源协调。其中,包括对工作流引擎核心模块、工作流引擎配置模块、工作流引擎定义模块、工作流引擎异常处理模块、工作流引擎的数据库结构进行了设计。
WorkflowModule模块是引擎的核心,用户与工作流系统的大部分交互内容都在这部分模块内实现,它定义了最常用的接口、类和异常。Workflow接口是一个最基本的接口,通过与它交互,用户几乎可以完全使用EleFlow的功能,包括工作流调度和查询、工作流定义管理和设置工作流配置信息等。ConfigModule模块是工作流引擎配置模块,与EleFlow的配置相关,定义了一个类DefaultConfiguration,这个类实现了Configuration接口。LoaderModule模块是工作流引擎定义模块,与工作流定义密切相关,包含了与工作流定义中对应元素的实现类,如果在工作流引擎运行时需要了解指定的动作、步骤的状态、名字等信息时,这些元素的描述会起到很大作用。ExceptionModule模块负责处理工作流引擎的异常。工作流的错误包含两种错误:一是流程错误,如活动的执行者不存在,活动的应用程序定义错误等;二是系统的错误,如网络不通,数据库系统异常。对于工作流引擎控制器来说,前类异常属于无法处理的错误,只能通知错误的存在;后者是工作流引擎控制器可以处理的错误,工作流引擎控制器可以进行容错处理,例如:在数据库恢复后自动重新建立连接。执行机对可能出现的错误进行编码,并附有对应的描述信息。工作流引擎所使用的数据表主要是用来存储引擎调用时所需的数据,包括当前步骤数据和历史步骤数据。
3.2 系统与外部应用交互的实现
在EleFlow中,函数function是用来定义(引用)并执行外部的商业逻辑和服务,实现EleFlow与外部具体的应用之间交互。当系统有额外的需求和功能,例如处理“角色”、“任务分配”、“提交任务”等诸如此类的操作,就扩展function接口。
所有的function实现类都必须实现这个FunctionProvider接口中execute方法,而且能够处理的信息也全部来自这个方法中的3个参数:
(1)transientVars:最为核心的参数,记录非常重要的一些对象,比如WorkflowContext,WorkflowEntry,输入参数等。
(2)args:存储了流程定义里的参数,如00l。
(3)ps:PropertySet对象,记录了流程实例所需要保存的数据,可以理解成EleFlow所描述的流程相关数据。
3.3 系统的访问控制实现
工作流管理系统对安全性要求较高,为了达到要求,必须做到充分的安全控制。访问控制的目的是保护信息资源不被未授权用户浏览或修改,从而实现数据的保密性和完整性。因此,访问控制技术对解决工作流系统安全问题起着非常重要的作用。为了实现这一目标,工作流系统访问控制机制应当能够满足两方面的需求:一是用户选择,即能够在一个活动实例被激活后选择合适的用户来完成;二是实现活动实例与用户权限的同步,当一个用户试图完成工作列表中的某项工作时,能够判断该用户是否为合法用户,为合法用户分配必要的权限,并在工作完成后收回分配的权限。
3.4 实际应用
下面是基于以上方法设计的某电力公司设备管理系统,具体设计与实现如下。
3.4.1 任务数据录入
数据录入界面如图4所示。
图4 设备申请录入界面
该页面主要录入设备申请的相关信息,后台程序操作如下:
(1)创建一个Workflow对象。
BasicWorkflow workflow=new BasicWorkflow("caller");
(2)准备工作流相关参数。
Map args=new HashMap();
args.put("owner",caller);
(3)实例化一个工作流。
long id=workflow.initialize("applyequipment",0,args);
(4)处理业务数据(spring实现)。
(5)工作流状态改变。
workflow.doAction(id,001,args);
3.4.2 获取工作流列表
设备审批过程应根据登录用户的角色不同而显示不同的数据,如图5所示。
图5 流程审批界面
当部门管理用产登录的时候无法看到设备管理用户的数据。
在后台程序中,通过WorkflowExpressionQuery进行符合条件的查询,代码如下(片段):
(1)符合当前条件的步骤。
(2)属于哪个工作流流程(本系统有两处用到工作流,还有设备报修流程,所以有两个流程配置文件,需要区分当前工作流实例属于哪个流程)。
(3)实例是否存在。
(4)进行复合查询,上述条件为and关系。
4 结语
设计实现了基于SOA的工作流管理系统,并在长春某电力公司设备管理中得到了成功应用。结果表明,该系统的应用基本消除了企业的“信息孤岛”,提高了工作效率,为企业全面信息化打下良好的技术基础。
核心关注:拓步ERP系统平台是覆盖了众多的业务领域、行业应用,蕴涵了丰富的ERP管理思想,集成了ERP软件业务管理理念,功能涉及供应链、成本、制造、CRM、HR等众多业务领域的管理,全面涵盖了企业关注ERP管理系统的核心领域,是众多中小企业信息化建设首选的ERP管理软件信赖品牌。
转载请注明出处:拓步ERP资讯网http://www.toberp.com/
本文标题:基于SOA的工作流管理系统设计