详解工作流架构与实现

开发 架构
本文详细介绍了工作流系统以及集成平台上实现工作流系统的交互操作和实现模式。文中出现的概念和方案能帮助您更好地理解典型工作流平台中存在的组件。

工作流系统以及人力 — 业务流程交互的一些***代表性的模式分为两个主要组件。***个组件是工作流系统以及在集成平台上实现这些系统时它们之间的交互。第二个组件是工作流交互设计模式以及使用工作流系统之间的交互实现这些模式的方式。本论述将详细介绍这些流程。

如果不考虑人力交互 (该要素与过程自动化和集成的很多方面语义相关),那么业务流程的完全自动化实际上是无法实现的。 人力交互存在于一些最常见的业务流程中, 如订单审批和人力资源管理。这些人力交互包含从简单的任务分配流程到非常复杂的业务流程通知和任务再分配等各种形式。

不同供应商的多种受欢迎的集成服务器中均提供了工作流框架。 我们将从概念上探讨一些在工作流平台以及这些平台之间的交互中存在的主要组件。 我们还将介绍一些最常见的工作流设计模式以及使用上述组件实现这些模式的方式。

工作流系统必须支持人与系统之间的通信。 要实现这一支持, 每个工作流系统都必须提供基本的功能, 如任务分配、 标识管理、 通知、 跟踪以及与业务流程管理 (BPM) 系统的互操作(参见图 1)。


图一

工作流架构的四个主要组件为: 任务管理服务、 跟踪服务、 通知服务和标识服务。 在深入探讨这些服务之前, 需要了解一下任务在工作流系统中的作用。

任务是业务流程和人之间的主要通信单元。 通常, 任务被分配给需要执行某个相关操作的用户。 例如, 一位可能需要批准购买某些货物的请求的主管。 通常, 用户必须执行按照语义进行组合的一系列任务。 也就是说,主管可能将每天需要购买的所有货物组合到一个名为 “今天的批准项” 的组中。 这些组称为任务列表。

任务状态

在工作流系统的生存期内, 任务列表中的任务不断地从一种状态切换到另一种状态。 例如, 主管的任务首先进入 “未决” 状态; 在主管接受该任务后,状态更改为 “认领” 。 ***, 当主管批准该请求后, 任务进入最终状态“完成” 。 状态用于从概念上描述任务生存期。 一些最常见的状态是 “未决” 、“认领” 、 “完成” 和 “失败” 。 在 “未决” 状态下, 任务已被创建; 在 “认领” 状态下, 用户认领任务并接收任务输入数据; 在 “完成” 状态下, 用户已经完成任务并提供了任务的输出数据; 在 “失败” 状态下, 用户已经完成任务, 并且提供了错误消息。

任务通常与时间范围相关联: 到期、 升级、 委派和续订。 在我们的示例中,如果主管没有在指定的时间段内处理批准任务, 则该任务可能到期。 这一到期任务随后可以升级到另一个操作或分配流程中。 主管还可以决定将任务委派给另一个人(例如,经理)以代替他或她执行任务。 经理也可以决定是否让另一位经理参与进来,以便收集其他意见。如果第二位经理没有在给定的时间范围内处理此任务,则该任务将被续订,以便在另一时间段内执行。

在其他方案中, 各项任务在语义上彼此相关。 对于问题 “下一个任务是什么?”的回答并不总是无足轻重。在某些情况下,必须在运行时确定答案。任务可以按顺序组合在一个业务流程实例中,以便用户了解在完成当前任务后要执行的下一个任务。

在我们的示例中,主管需要依次批准20个请求才能完成该业务流程。主管每次完成一项批准之后,引擎都应该能够标识下一个任务。“任务链”代表一种元数据驱动方法,该方法用来描述业务流程范围内的一组任务之间的关系。任务链可以按照语义组合任务,以帮助用户实现某些功能,如顺序执行和失败管理。

依赖于特定业务流程的任务称为内联任务。完全独立于特定业务流程的任务是独立任务。内联任务通常可以访问与业务流程相关的数据,并且存储在本地的、业务流程元素(如变量或消息)中。相比之下,独立任务通过定义良好的接口与业务流程进行交互,完全不依赖于流程数据本身。#p#

工作流服务

处理局部任务的架构组件是任务管理服务。在典型方案中,任务管理服务接收任务创建请求, 与标识服务进行交互以选择有资格执行此任务的所有人员,将任务添加到与所选用户相关联的工作列表(待完成工作)中,并分配特定的时间线和策略。最终,一个用户通过认领该任务来决定对其进行处理。然后,该用户可以处理该任务或请求更多的数据。

工作流系统的一个关键方面是能够解析允许执行任务的用户集。此用户解析流程可以基于与标识管理平台之间的交互。在我们的示例中,工作流服务需要标识哪些用户能够批准请求,在此情况下是主管。 要完成此标识, 工作流平台必须对照传统上存储在用户目录中的一组用户和角色来解析“主管” 概念。

在人与流程之间可以建立多种类型的关系。最常见的关系之一就是人与流程进行交互的方式(人力角色)。可以将组织中的人组合到在语义上与某个业务活动相关的角色中,如流程管理员或任务所有者。另一种常见的关系是流程如何标识要与哪些人交互(人员链接和查询)。在业务流程中,某些用户组从业务观点来看是相关的。人员链接用于表示参与流程执行的不同组人员。针对组织目录进行的查询用于确定与人员链接相关联的个人,而且被绑定到人员链接。在我们的示例中,普通的人力角色 — 财务经理可以由人员链接主管限定, 后者被绑定到以下查询:“选择部门领导,其中部门名称为财务”。

身份服务负责与用户相关的功能,如身份验证、授权或人员解析。用户信息通常存储在组织目录(例如,Active Directory 目录服务、LDAP 目录或关系数据库)中。身份服务的工作可以独立于组织目录。根据适配器模式,可以通过提供程序提取目录访问,该提供程序能够执行查询来获取目录中的信息。此方法可以从用户的存储区中提取工作流功能。

在我们的示例中,假设经理想要重建请求 — 批准工作流的执行,以检查是否存在短缺。 跟踪服务可以跟踪与任务和任务链相关的状态更改。此服务应该提供所需功能的基础,以重建任务历史记录更改和执行任务分析。

在创建请求 — 批准任务时,我们还需要一种能够通过电子邮件通知主管的服务。通知服务处理向与任务的状态更改相关的用户发送通知的机制。

这里讨论的四个运行时服务提供了工作流系统所需的一些最常见功能的良好概览。通过将这些服务组合起来,可处理一些最常见的工作流方案。现在,让我们来探讨一些常见的工作流模式。

任务分配模式

面向工作流的流程在业界已经存在了一些年。获得的知识可以作为改进的基础,以构建工作流系统。模式在不同的级别(如任务批准、任务创建和任务状态管理)抽象工作流系统。 在此,我们不打算定义工作流模式的分类。相反,我们将从以前定义的架构的角度介绍工作流系统中的一些常见模式。

我们将从考察“单用户工作流”示例开始。可以将任务分配给一个用户,并且只有一个用户可以处理该任务。例如,一名雇员通过雇员门户提交了休假请求。该门户启动了一个业务流程,该流程包括一个使用简单工作流建模的用户任务。该任务被分配给此雇员的经理。 当经理批准或拒绝休假请求时,将经理的决定通过电子邮件通知该雇员。

对于此解决方案,通过四个交互将工作流组件组合起来。该任务是使用与任务管理服务交互的客户端应用程序配置的;该任务的生存期或任务状态得到了配置。作为业务流程的一部分,使用任务管理服务将任务分配到用户组。用户之一认领该任务,任务管理服务应用正确的策略以防止其他用户处理同一个任务。业务流程使用任务管理服务获取任务的状态更新。

现在,让我们来考虑一个顺序工作流示例。顺序工作流代表一个方案,在该方案中,任务必须由一组用户按顺序批准。例如,当购买订单批准系统使用业务流程处理购买订单时, 属于“主管”组的一名雇员要对购买订单进行初步评估。在初始用户批准购买订单之后,由该用户的经理批准它。在经理批准后,该购买订单被转发至计帐和运输部门。该解决方案包含四个交互。与任务管理服务进行交互,以配置任务和设置合适的策略。定义应该处理任务的用户的顺序。启动与任务管理服务交互的任务。***个用户将认领该任务以开始处理它, 处理完成后, 任务管理服务会将该任务传送到该组中的下一个用户。

平行工作流模式代表如下方案:一个任务必须由不同的用户同时批准。每一个审批者都可以独立于其他人添加备注和附件。例如,招聘流程用于招聘新雇员。每个面试人员都需要投票以支持或反对应聘者。如果有75% 的投票表示支持,则会雇用该应聘者;否则,该应聘者将会落选。此流程使用平行工作流建模,其中每个面试人员都可以独立于其他面试人员进行投票。实现该解决方案需要五个交互。与任务管理服务进行交互,以配置任务和设置合适的策略。定义应该处理任务的用户的顺序。启动与任务管理服务交互的任务。任务管理服务将该任务传送给所有用户。 任务管理服务只有在所有用户都完成任务的处理时才能完成该任务。#p#

使用策略进行任务分配

现在,让我们讨论一下如何使用任务分配的策略,按照该策略,需要遵循特定的规则向用户分配任务。例如,心脏搭桥手术过程被分配给所分手术数量最少的外科医生。此解决方案的实现通过五个交互将工作流组件组合起来。与任务管理服务进行交互,以配置任务和设置合适的策略。作为任务定义的一部分配置分配策略 — 例如,从有空的用户中选择所分配的任务数量最少的一个。 作为业务流程的一部分, 使用任务管理服务将任务分配到用户组。启动与任务管理服务交互的任务。 任务管理服务将针对可以处理该任务的潜在用户执行任务策略,然后依次完成下列操作:选择符合策略条件的用户; 将任务分配给该用户。

在 “使用升级的单用户工作流” 示例中, 可以将任务分配给多个用户, 但是只有一个用户可以处理该任务。如果该任务到期,则该用户的经理必须处理该任务。例如,技术支持服务请求流程使用户可以提交技术支持服务请求票证。 如果收到票证的人没有在指定的时间段内处理该票证,则该票证自动升级给此人的经理。如果在预定义时间段内没有任何人处理该票证,则该票证被自动升级三次,直到它到达公司的CEO那里。如果CEO也没有进行处理, 则该票证到期。

对于此解决方案的实现,通过五个交互将工作流组件组合起来。任务是使用客户端应用程序配置的,这些应用程序与任务管理服务交互;在此步骤中配置了属性,如任务的生存期、 升级策略或任务状态。作为业务流程的一部分, 使用任务管理服务将任务分配到用户组。 一个用户认领该任务,任务管理服务应用正确的策略以防止其他用户执行同一个任务。 如果任务到期,则任务管理服务会应用升级策略,将任务升级到正确的用户。如果该任务再次到期, 则任务管理服务会将其取消。

在“使用委派的单用户工作流”示例中,声称要处理任务的用户可以将该任务重新分配给其他用户。例如,在离开之前,会计主任将他或她的所有未完成的任务交给助理会计。 对于此解决方案的实现,通过四个交互将工作流组件组合起来。任务是使用客户端应用程序配置的,这些应用程序与任务管理服务交互;配置了属性,如任务的生存期、升级策略或任务状态。作为业务流程的一部分, 使用任务管理服务将任务分配到用户组。 一个用户认领该任务,任务管理服务应用正确的策略以防止其他用户执行同一个任务。使用适当的客户端应用程序,用户可以检查能够处理该任务的可能人员的列表。用户将该任务重新分配给上述人员之一, 并重新调整该任务的属性。

对于“任务链模式”示例,一个任务需要根据另一个任务的完成状态而启动。例如,在急救协调流程中,当前面的工作项目完成时,立即开始下一个工作项目。要实现此解决方案, 可以通过四个交互将工作流组件组合起来。任务是使用客户端应用程序配置的,这些应用程序与任务管理服务交互;属性(如任务的生存期或状态)得到了配置。配置了任务链元数据, 指示第二个任务将由***个任务的完成触发。通过任务管理服务启动任务链,从而使***个任务启动。 当***个任务完成时,任务管理服务将使用任务链中的元数据启动第二个任务。

业务流程集成

可以组合使用任务管理、身份管理、跟踪、通知等服务和客户端应用程序来设计工作流解决方案。我们已经探讨了工作流架构中存在的一些最常见的组件以及它们在一系列交互中的实现。可以使用一组人力交互模式对一些最复杂的人力 — 系统交互进行建模,而这些人力交互模式又是使用工作流组件实现的。工作流架构的这些基本组件和模式代表了业务流程集成领域中的关键方面,而且,它们在实现后能够创建强大的工作流解决方案。

【编辑推荐】

  1. J2EE工作流管理系统jBPM详解(一)
  2. J2EE工作流管理系统jBPM详解(二)
  3. 解析UML工作流管理系统
责任编辑:佚名 来源: MSDN
相关推荐

2020-08-06 08:16:26

Kubernetes架构开源

2020-08-06 08:26:22

Kubernetes架构开发

2023-01-04 08:02:16

工作流架构设计

2009-11-18 09:14:49

Visual Stud

2022-10-26 08:00:43

Activiti工作流BPM

2021-10-14 11:34:05

技术工作流引擎

2009-04-15 11:00:31

Workflow工作流角色

2021-03-12 06:44:09

Argo Workfl开源项目

2023-08-02 18:48:23

Flowable工作流引擎

2010-01-14 09:35:10

WF4.0

2013-04-23 10:28:08

IBeamMDAAWF

2022-07-07 08:38:15

Springflowable引擎

2009-07-31 17:34:40

ASP.NET工作流

2015-03-13 15:58:11

Adobe

2010-01-04 17:42:50

SilverLight

2012-07-23 10:36:46

工作流

2016-03-03 15:11:42

Spark Strea工作流调度器

2023-06-12 08:01:57

Camunda工作流引擎

2011-12-14 09:58:58

JavajBPM

2023-07-05 09:48:44

Activiti部署
点赞
收藏

51CTO技术栈公众号