当前位置: 首页 > news >正文

工作流入门(基础概念篇)

摘自: http://news.csdn.net/n/20070820/107693.html

1、 工作流管理系统基本概念

近两年随着电子商务环境不断演进(例如阿里巴巴的B2B电子商务平台),从原来支持企业内部单系统的业务流程、到企业内部应用、服务的集成,再进一步向企业与合作伙伴之间业务交互,工作流正扮演着越来越重要的角色。

到底什么是工作流呢,笔者拿一个图来说明,如下图所示:

<shapetype coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f" id="_x0000_t75"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype>1 工作流管理系统结构图

1是工作流管理系统的一个基本组成结构,由流程建模工具、外部应用接口、任务管理工具、流程监控工具、组织建模工具、界面定义工具(电子表单工具)和内部核心引擎组成。

2、 工作流相关规范

Ø WFMC工作流管理联盟

工作流管理联盟在1993 年成立之后,颁布了一系列工作流管理系统相关标准和技术规范,包括工作流术语表[4]、工作流参考模型[5]、工作流管理系统各部分间协作的五个接口规格[6-9]、工作流产品的互操作性标准[10]等。其中接口一早期的标准为WPDLWorkflow Process Definition Language),后来这一接口的规范变更为XPDLXML Process Definition Language)。XPDL是至今工作流领域最为重要的一个标准,目前大多数工作流引擎是依据该标准设计开发的。

Ø BPMI业务流程管理促进会

BPMIBusiness Process Management Initiative,业务流程管理促进会)一直在积极推动BPM的标准化。它的目标是使各种类型以及不同行业的公司都可以跨越Internet、透过防火墙开发与操作涉及多个业务伙伴和应用的业务流程,通过建立流程设计、部署、执行、管理和优化的相关标准来促进BPM的发展。BPMI.org制定了许多开放标准,如业务流程建模语言(BPMLBusiness Process Modeling Language[12]、业务流程查询语言(BPQLBusiness Process Query Language)、业务流程建模标注(BPMNBusiness Process Modeling Notation[13]等。BPMIWfMC在<chsdate year="2002" month="6" day="26" islunardate="False" isrocdate="False" w:st="on"><span lang="EN-US" style="font-size: 12pt;">2002</span><span style="font-size: 12pt; font-family: 宋体;">年</span><span lang="EN-US" style="font-size: 12pt;">6</span><span style="font-size: 12pt; font-family: 宋体;">月</span><span lang="EN-US" style="font-size: 12pt;">26</span><span style="font-size: 12pt; font-family: 宋体;">日</span></chsdate>宣布将合作制定业务流程和工作流标准,即采用BPML来描述工作流过程,同时采用XPDL所定义的工作流模型。

Ø BPEL业务流程执行语言

<chsdate year="2002" month="8" day="9" islunardate="False" isrocdate="False" w:st="on"><span lang="EN-US" style="font-size: 12pt; line-height: 150%;">2002</span><font face="Arial"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体;">年</span><span lang="EN-US" style="font-size: 12pt; line-height: 150%;">8</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体;">月</span><span lang="EN-US" style="font-size: 12pt; line-height: 150%;">9</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体;">日</span></font></chsdate>,Microsoft BEA IBM SAP & Siebel联合提交发布了BPEL规范。 20034BPEL规范提交给了OASISOrganization for the Advancement of Structured Information Standards,结构化信息标准促进组织)更名为WSBPELWeb Services Business Process Execution Language)规范[16] Sun Microsystems和甲骨文公司也相继加入了OASIS组织。此规范描述如何处理输入的消息,它不是一个关于业务流程规格化定义的规范。简单的说,可以将它看作XML形式的编程语言,提供将WSDL-Services组合成控制流的能力。此规范实际上BPM的规范,关于WorkflowBPM的区别笔者会在后续的文章中讲到。

除了上述三个主要的规范以外还有,OMGWSCIWSFL等规范,在此就不在赘述。

3、 工作流参考模型及解析

2 WFMC工作流参考模型

2是工作流管理联盟提出的工作流管理系统参考模型,包括5个接口和1个核心引擎,其中各个接口的具体含义如下:

Ø 接口1:工作流定义接口,为用户提供一种可视化的,可以对实际业务进行建模的工具,并生成业务过程的可被计算机处理的形式化描述。此接口的规范有WPDLXPDLBPELBPM定义规范)大多数的工作流产品都实现了此接口。

Ø 接口2:工作流客户应用接口,它给用户提供一种手段,以处理流程运行过程中需要人工干预的任务(实际上就是工作项workitem)。工作流管理系统负责维护这个工作项列表。

Ø 接口3:工作流调用应用接口,工作流引擎调用外部业务应用的规范,例如在流程执行的过程中去调用业务系统提供的接口处理业务数据等。此接口各个工作流产品实现的不尽相同,它和具体的工作流产品的实现语言和架构相关,例如本公司工作流产品就可以支持对javabean的调用,对webservice的调用(通过webservice技术可以调用任何异构的,不同语言实现的业务应用),对xml bean的事件调用,对spring bean的调用等。

Ø 接口4:工作流引擎协作接口,是不同的工作流引擎之间进行协作的接口规范,此接口WFMC定义的不是很详细,不同厂商的工作流引擎直接进行协作也存在大量的困难,因此实现此接口规范的工作流引擎产品也极少。

Ø 接口5:管理监控接口,其功能是对工作流管理系统中所有实例的状态进行监控与管理,如组织机构管理、实例监控管理、统计分析管理、资源控制等。

工作流引擎:它是工作流管理系统的核心,工作流引擎对使用工作流模型描述的过程进行初始化、调度和监控过程中每个活动的执行,在需要人工介入的场合完成计算机应用软件与操作人员的交互。另外它的另外一个重要的功能是完成与应用软件及操作人员的交互。

4、 工作流引擎内部对象

3 工作流引擎实例关系图

3是工作流引擎的内部实例对象关系图,一个流程实例(InstProcess)由一个流程实例变量(InstProcessVariable)、1…*个活动实例(InstActivity)、1…*个转移实例(InstTransition)组成,而一个活动实例包括一个活动实例变量(InstActivityVariable)和1…*个工作项实例(Workitem)组成。

5、 工作流之控制模式

工作流控制模式是由[W.M.P. van der Aalst]A.H.M. ter HofstedeBartosz KiepuszewskiA. P. Barros等人于2000年提出的一个概念。他们一共总结了21种工作流模式。包括:顺序(sequence)、并行分裂(Parallel Split))、同步(Synchronization)、排它选择(Exclusive Choice 、简单合并(Simple Merge 、多路选择(Multiple Choice)、多路合并(Multiple Merge)、路径鉴别器(Discriminator)、M中选N合并(N-out-of-M Join)、同步合并(Synchronising Join)、任意循环(Arbitrary Cycles)、绝对终止(Implicit Termination)、多实例(设计时已知实例数目)、多实例(运行时才知实例数目)、多实例(无预知)、多实例(要求同步的多实例)、延期选择(Deferred Choice)、交叉路由(Interleaved Routing)、里程碑(Milestone)、取消任务(Cancel Activity)、取消流程(Cancel Case)。以上就是著名的工作流21种模式。详细的参考资料参见:http://www.workflowpatterns.com/patterns/control/index.php

6、 工作流之资源模式

工作流资源包括参与实体资源、外部应用资源

参与者实体模式,包括直接分配(Direct Allocation)、基于角色/组分配(Role-Based/Group-Based Allocation)、基于岗位分配(Position-Based Allocation)、延期分配/动态分配(Deferred Allocation/Dynamic Allocation)、基于规则分配(Rule-Based Allocation)、基于能力的分配(Capability-Based Allocation)、基于组织关系分配(Organisational Allocation)、基于历史分配(History-Based Allocation)、轮转法分配(Round Robin Allocation)、竞争分配(Competitive Allocation)、委派(Delegation)、跳跃(Skip)、重做(Redo

直接分配模式:在工作流设计期,直接为某个活动节点指定具体的用户为参与者;

基于角色/组分配模式:在工作流设计期,直接为某个活动节点指定某个角色或组为参与者;

基于岗位分配模式:在工作流设计期,为某个活动分配一个具体的岗位;

延期/动态分配模式:在运行期动态的分配某个参与实体给某个活动节点;

基于规则的分配模式:在设计期或运行期,根据某个具体的规则来决定某个活动节点的参与者,此规则可以由规则引擎(例如DRools)来运算,也可以由xpath来查询,或者有某个具体的运算逻辑(在活动节点调用业务应用,例如javabean来实现);

基于能力的分配模式:要求某个活动的参与者实体必须具备特定的条件;

基于组织关系分配:基于当前参与者的职位以及与其它组织资源的关系(例如请假流程中,程序员请假会自动路由给项目经理,项目经理请假会路由给部门经理,然后依次给根据行政关系自动分配参与者);

基于历史分配模式:当前活动节点的参与者为前续某个已经执行过的活动节点的参与者,此模式在电子政务的审批流程中经常会用到,例如某个工作项由秘书办理后发给领导,然后又从领导处返回个秘书;

轮转法分配模式:在运行期按照轮转法进行分配,轮转法大家应该在负载均衡的解决方案中经常看到;

竞争分配模式:活动节点的参与者有多个人,多个人共同竞争此活动,某个人竟得此活动后,其他的参与者不能再竞争;

另外还有委派、跳跃、重做等模式,上面给出了最常用的参与者模式。

对于资源模式参见:http://www.workflowpatterns.com/patterns/resource/index.php

通过上面45的分析,我们可以给出工作流流程的概念:工作流流程就是由多个活动节点(Activity) 通过工作流控制模式(例如顺序、并行分裂、排它选择、多路选择、多路合并等)连接起来形成一个有序且连续的流程。而引擎为每个活动节点按照各种参与者实体 模式(例如直接分配,基于角色、组、岗位的分配,基于组织关系的分配模式等)分配具体的参与者。为了使读者能对流程一个直观的认识,笔者给出一个典型的流 程图,如下所示:

相关文章:

  • AspectJ 简介
  • 三亚之行
  • redis 学习笔记梳理
  • JavaScripte最经典和权威的教程(对象介绍)
  • 自定义注解的简单用法
  • FreeBSD-STABLE 居然是开发用的分支,我一直搞错了好多年...!
  • Spring Data JPA 在 SpringBoot 应用中的简单实践
  • 心与心的交流
  • SimpleDateFormat 线程不安全案例
  • BPEL和JAVA(一篇不错的BPEL入门)
  • 关于 BlockingQueue 的一些认识及资料汇总
  • 欣闻我班上的学生林健在Image Cup比赛中取得好成绩
  • C#.NET常用函数大全
  • Java基本类型简介
  • 动态调用 WebService
  • 【css3】浏览器内核及其兼容性
  • java 多线程基础, 我觉得还是有必要看看的
  • Java程序员幽默爆笑锦集
  • Java的Interrupt与线程中断
  • JS+CSS实现数字滚动
  • python3 使用 asyncio 代替线程
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 基于 Babel 的 npm 包最小化设置
  • 讲清楚之javascript作用域
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 在Unity中实现一个简单的消息管理器
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #pragma pack(1)
  • #预处理和函数的对比以及条件编译
  • (30)数组元素和与数字和的绝对差
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二十三)Flask之高频面试点
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (九)信息融合方式简介
  • (力扣题库)跳跃游戏II(c++)
  • (十) 初识 Docker file
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET 使用 XPath 来读写 XML 文件
  • .NET 依赖注入和配置系统
  • .NET6 命令行启动及发布单个Exe文件
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .net分布式压力测试工具(Beetle.DT)
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @ModelAttribute 注解
  • @Query中countQuery的介绍
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略
  • [ACTF2020 新生赛]Upload 1
  • [Android学习笔记]ScrollView的使用
  • [Avalon] Avalon中的Conditional Formatting.
  • [C语言]编译和链接