当
面对一个完整的工作流系统时,你可能会被它众多的功能所困惑:流程流转模式、时间服务、组织适配、表单权限等等。但是如果我们转换一种思路,首先从用户使
用的角度来进行分析,工作流系统的组成就会变得异常清晰。实际在现实开发中,整个系统也是由用户的业务需求一步步迭代而来。
<!---->一、
从用户的角度分析工作流系统的组成
<!---->
这里的用户分为两类:一类是应用系统开发人员(以后简称开发人员),一类是应用系统的最终用户(以后简称最终用户)。对于最终用户而言,工作流系统往往是不能直接使用的,它需要由
IT
部门的开发人员嵌入到应用系统中。开发人员才是工作流系统的直接使用者,这造成了问题:工作流系统更多关注于开发人员的需求,例如如何快速开发、如何更好的嵌入业务逻辑等等,而最终用户的需求被或多或少的忽略了。
<!----><!---->
<!---->
这里从最终用户的角度进行分析。
<!---->1、
<!---->面向开发人员的流程设计器
最
终用户通过流程设计器对业务流程进行描述,实际是一个流程建模的过程。理论上,业务分析师完成这个业务流程建模的过程,并且业务分析师往往被假定为非技术
人员。对于业务分析而言,流程建模通常是抽象的,一定程度上是模糊的,建模的目的在于通过图形的形式向其他人解释一个业务的过程,图形只是一种方式,采用
它只是它更易于理解和易于沟通,实际类似于
DSL
。实际上企业的规章制度、文字描述的执行流程都是对业务流程具体的描述方式。
对于工作流而言,这个建模所产生的流程是需要被引擎执行的。这就要求流程中每一个节点的定义都是要有明确含义的,它需要被计算机明确而准确的解释。同时,出于集成业务系统的需要,流程模型定义往往带有很多额外的属性。
所以现实中的流程设计器往往属性配置繁多。导致最终用户在打开设计器后根本无从修改和建模,他需要关注很多与业务无关的配置,无意中的修改往往产生流程无法运行的后果。
<!---->2、
<!---->工作项列表
即
任务列表。工作流系统通过工作项列表进行人工任务的分配。最终用户通过该列表签收、处理每天的工作,工作以工作项的形式展现。对于工作项,用户有着多种业
务操作:签收、完成提交、收回、回退等等。对于分配给他人的工作项,也存在着多种业务操作:催办、提醒、时间限定等等。
<!---->3、
<!---->流程追踪
用户在处理工作项时,对该工作在流程中所处的位置进行查看,了解当前流程的状态和执行情况。一般情况下,流程追踪以图形化的方式展现。用户通过不同的图标和标示来区分流程中各个节点的状态和参与者信息。
<!---->4、
<!---->流程实例管理
包括流程实例、节点实例、工作项实例的管理。改变状态,包括了挂起、重新启动、终止、跳转等等。主要目的在于对流程人为执行错误进行人工干预以及对流程信息的监控。
<!---->二、
系统架构
<!---->
从用户的角度分析完工作流系统的组成,这里从开发人员的角度分析工作流系统的架构。系统架构里的每一部分是如何与用户使用的部分进行对应,以及每一部分在实现时需要注意的事项。
<!---->1、
<!---->整体构成
如图,各模块分层组织,位于上层的模块依赖于底层的模块。正如你所看到的,流程定义模型位于整个工作流系统的最低层,因为它是整个工作流系统的基础。
<!----><!---->
<!---->
流程定义模型:定义对流程进行描述的所有对象。因为对流程进行描述的本质就是利用这些模型进行建模,所以这些模型对象的实现直接决定着工作流系统对流程的描述能力。
组
织结构适配器:工作流系统在与业务系统进行集成时,需要进行组织适配,通过这一过程将业务系统里的组织机构导入到工作流系统里。具体实现时,工作流系统需
要建立起自己的组织机构模型(包含在流程定义模型里),要适应多种业务系统,往往需要建立多套模型,根据具体情况进行切换。有多种方式完成这个适配,最简
单的方式是利用
SQL
配置读取数据进行语义转换。
流程设计器:供用户使用的可视化图形工具。每种图形都对应着一种流程定义模型。具体的实现有
Swing
、
SWT
,但是基于
AJAX
的
WEB
设计器无疑会提供更好的可用性。
流程执行引擎:将流程定义模型解释为流程实例模型。利用这些流程实例模型完成流程的调度和执行。在工作流系统里,执行引擎是整个系统的核心。实现时不仅需要考虑各种流程调度的实现,还要考虑执行的效率、缓存、日志等等。
工作项引擎:解析参与者定义模型和工作项定义模型,生成相应的工作项。对用户对工作项的操作作出响应。
WEB
应用:工作流系统的
WEB
展现。包括了工作项列表、流程追踪以及流程实例管理的操作和显示。
流程仿真:对建立好的流程模型进行运行仿真,模拟流程模型的执行过程。目的在于发现流程建模过程中的疏漏,发现由此导致的流程不能运行。
时间服务:提供对整个流程实例执行时间和任务执行时间的控制,根据规则触发相应的时间事件,例如任务超时、任务预警等等。根据规则自动触发启动新的流程实例。
业务集成:提供工作流系统与业务系统的契合方式。典型的实现包括通过注册事件监听器和提供接口抽象类调用业务系统代码、提供
API
给业务系统调用、工作项驱动业务表单和脚本引擎执行业务逻辑脚本等等。特定于工作项驱动业务表单,为方便开发,绝大多数的工作流厂商都提供了电子表单的实现。
<!---->2、
<!---->基于事件的流程执行引擎
流程执行引擎的主要职责就是负责流程的调度和执行。
首先需要将流程定义模型解释为流程实例模型,在定义模型和实例模型之间建立起对应关系。一个简单的对应关系如下图所示:
<!----><!---->
<!---->
执行引擎将流程定义模型的属性读取到相应的实例模型里,由实例模型完成流程的调度和执行。当然,上图只是一个简单的描述,实际情况要复杂的多,特别是节点定义(
ActivityDefinition
),根据实际应用,往往存在着多种类型,典型的有开始节点(
StartDefinition
)、任务节点(
TaskDefinition
)、自动节点(
AutoDefinition
)、分裂节点(
SplitDefinition
)、汇聚节点(
JoinDefinition
)、结束节点(
EndDefinition
)
等等。这些节点的实例根据类型的不同执行不同的逻辑。其中,分裂节点实例和汇聚节点实例负责流程的调度,它们决定流程的流向,通常情况下,它们会调用一个
脚本引擎执行一段脚本来决定流程的流向,同时,也会提供对外暴露的接口,由业务系统实现,接口返回的结果决定流程的流向。任务节点实例和自动节点实例则负
责流程的执行,为保证流程执行引擎职责的清晰以及对外围设施的松耦合,它们只是发布相关的事件,通过事件发布
/
订阅机制来触发具体的逻辑执行。
<!----><!---->
<!---->
典型的事件有流程启动事件、流程结束事件、进入节点事件、离开节点事件、时间事件等。例如,任务节点实例的进入节点事件将会触发工作项引擎生成工作项(
Workitem
),并触发时间服务器开始计时。
<!---->3、
<!---->基于充血模型的工作项引擎
对最终用户而言,大部分的业务操作都集中在对工作项的操作上。常见的包括工作项的提交、收回、委派、追加和退回。这些操作从系统设计的角度不仅涉及到工作项(
Workitem
)对象内部状态的变化,而且影响到流程执行引擎的调度以及相关的其他工作项对象状态。
工作项引擎的职责包括两部分。第一,监听任务节点实例的进入事件,生成工作项实例。第二,处理上面提到的各种工作项操作。
<!----><!---->
<!---->
实现时,工作项生成器根据任务参与者的执行模式典型的分为四种情况:
竞争参与,
当有多个参与者参与该任务时,产生竞争,谁先开始这项工作,就由谁负责完成该工作。此时,工作项生成器生成多个工作项实例,在某个工作项完成时会终止其余工作项。
顺序参与,
多个参与者按照指定的顺序完成该工作。
A完成之后由
B完成,
B完成之后再交给
C完成。此时,工作项生成器生成多个工作项实例,根据顺序依次激活各个工作项。
共同参与,
多个参与者同时对工作进行处理。此时,工作项生成器生成多个工作项实例并全部激活。
智能决策,
存在多个参与者的情况下,
工作项生成器
能够根据一定的指标(由数据分析,例如人员的处理效率,工作负载等等)和规则来决定该节点的参与者并为其生成相应工作项。这里涉及到算法。
对于工作流系统而言,各种流程实例对象都是充血模型。特定于各种工作项操作的处理,此时的工作项对象亦设计为充血模型,将业务逻辑封装到领域模型里,简化领域模型之间的交互,省去频繁的
get/set
。由领域模型再委派到具体的处理类里。
Client->(Business Facade)->Domain Model->service->Data Access(DAO)
<!---->4、
<!---->工作项驱动业务表单的业务集成方式
最终用户对任务的处理,必然由工作项对应着某一业务表单。用户在工作项列表里选择自己需要办理的工作项,由工作项导航到业务表单。
特定于
WEB
系统,业务表单的导航由
url
完成。在流程定义模型设计时,将
url
设置入节点属性,生成工作项时将此
url
保存在工作项对象属性里。点击工作项详细信息时即打开该
url
,完成到业务表单的导航。业务表单页面通常需要引入处理工作项逻辑的父页面或者导入定制的
js
库,这些父页面或
js
库由工作流产品提供。这样,对于业务表单编写,工作流逻辑是透明的。
分享到:
相关推荐
对于业务流程管理而言,我想说的是:BPM向左,工作流向右,都不靠谱,或者说它们实际所能描述的流程和这里的业务流程根本就风牛马不相及,不是一个概念,唯一的相同点是只不过都叫流程而已。一、什么是业务流程业务...
Java源码:业务流程管理(BPM)与工作流系统Activiti是企业级软件开发中的重要组成部分,尤其在实现高效、灵活的业务自动化方面扮演着关键角色。Activiti是一款开源的工作流引擎,它基于模型驱动的架构(MDA),旨在...
在IT领域,BPM常常与工作流系统相结合,来自动化和规范化业务流程。 Activiti 是一个开源的工作流和业务规则管理系统,它是基于模型驱动的,采用Java语言开发,与Spring框架高度集成。Activiti设计灵活,适合各种...
### 浅析业务流程管理(BPM)与工作流的区别 #### 概述 在数字化转型的浪潮下,企业越来越依赖信息系统提升效率与竞争力。ERP(企业资源规划)、CRM(客户关系管理)、SRM(供应链管理)等系统已成为企业信息化的...
本文将深入探讨基于.NET Core的微服务权限系统与工作流系统的设计与实现,以MsSystem-BPM-ServiceAndWebApps项目为例,解析其关键知识点,帮助开发者更好地理解和应用此类系统。 首先,让我们了解微服务架构。...
Activiti 是一个开源的工作流和业务流程管理(BPM)系统,主要由 Alfresco 公司发起,并在 Apache 2.0 许可下发布。它以 Java 语言编写,适用于构建灵活、可扩展的企业级流程应用。这个压缩包包含了 Activiti 的一个...
HF BPM(工作流平台) V1.01源码 项目概述: HF工作流是基于微软.NET技术研发的工作流系统,它不依赖于任何工作流框架;我们根据多年的项目经验,结合国内各大工作流产品的特点从实际应用出发,不仅考虑到从零搭建业务...
### 工作流引擎BPM系统概要设计 #### 概要说明 本文档作为驰骋信息技术有限公司(以下简称“驰骋公司”)针对浙商银行项目的技术文档,旨在全面介绍其自主研发的工作流引擎BPM系统——驰骋工作流引擎CCBPM的设计...
工作流(Workflow)和业务流程管理(Business Process Management, BPM)是现代企业信息化建设中不可或缺的部分,它们旨在优化企业的业务流程,提高效率并确保合规性。"流程的永恒之道"一书深入探讨了这两个领域的...
一个神奇的自研工作流JsonFlow,前后端非常简单的纯Json交互(格式简单),支持任意拖拉拽生成流程图,非常...本系统同时支持在线工作与任务交接,弥补了传统BPM工作流需单独处理的不足,方便公司人员流动后的工作交接
总结来说,BPM超越了传统工作流系统,它不仅提供了统一的流程描述和协调机制,还关注整体流程架构的构建、流程的持续改进以及与企业战略的紧密联系。对于面临信息孤岛困境的企业,引入BPM可以帮助解决工作瓶颈,提高...
最后,"jbpm数据库表说明.doc"聚焦于BPM系统中使用的特定技术——jbpm,这是一个开源的工作流引擎,用于执行和管理业务流程。这份文档很可能是对jbpm所使用的数据库表结构和字段的详细解释,包括它们的用途、关联...
JAVA源码业务流程管理(BPM)和工作流系统Activiti
### 基于SOA的业务流程管理(BPM)和工作流(WF) #### 一、引言 随着信息技术的发展,企业的业务流程管理(BPM)和工作流(WF)已经成为提高组织效率和响应市场变化速度的重要工具。在面向服务的体系结构(SOA)...
java资源业务流程管理(BPM)和工作流系统 Activiti提取方式是百度网盘分享地址
【标题】基于Java的实例源码-业务流程管理(BPM)和工作流系统 Activiti.zip 这个压缩包文件提供了一套基于Java的业务流程管理(Business Process Management, BPM)和工作流系统的实例源码,主要关注的是Activiti...
Eclipse工作流插件是开发人员在Eclipse集成开发环境中进行业务流程管理(BPM)和工作流应用程序设计的重要工具。本指南将深入探讨如何利用Eclipse与jBPM 4.4版本相结合,实现高效的工作流应用开发。 首先,我们要...
Java业务流程管理(BPM)和工作流系统是企业级应用程序开发的重要组成部分,它们帮助企业自动化、管理和优化复杂的业务流程。Activiti是一个开源的BPM平台,由Alfresco Software公司发起,它基于Model Driven ...
### 基于SOA的业务流程管理(BPM)与工作流(WF) #### 一、引言 随着信息技术的发展,企业管理方式也在不断进化。基于服务导向架构(Service-Oriented Architecture, SOA)的业务流程管理(Business Process ...