内容


用于业务流程管理的 Bonita,第 1 部分

配置一个简单的工作流

利用基于 Java 的开源工具建模和管理业务流程

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: 用于业务流程管理的 Bonita,第 1 部分

敬请期待该系列的后续内容。

此内容是该系列的一部分:用于业务流程管理的 Bonita,第 1 部分

敬请期待该系列的后续内容。

当人们按照某种协调的方式交互,实现一个普通的业务目标时,就会出现一个业务流程。工作从一个人流动到另一个人,个人执行他或她的任务或者业务角色。例如,考虑这样一个简单的工作流,查看顾客入住酒店的情况。前台接待员为来客预订房间。然后订房信息被发送给客房部和酒店的会计部。客房部确保为客人准备好房间,同时会计部会记录客人的费用。

业务流程的管理就是对工作流程的管理。业务流程管理(BPM)工具允许您以一种计算机系统能够理解并且能执行的方式来描述工作流。就的那套方法是使用某种编程语言编写代码。BPM 的方法是使用 BPM 软件,通过配置从管理上完成任务,甚至连一行代码也无需编写。Business Process Modeling Notation(BPMN)是一个标准,让您使用图表表现工作流的业务需求。首先,您使用 BPMN 工作流编辑器,制作业务流程的 BPMN 表示。然后您在 BPMN 工作流引擎上存放 BPMN 表示,工作的真正流程是在 BPMN 工作流引擎上处理的。

有些优秀的基于 Java 的开源 BPM 解决方案是可用的。在这个两部分的文章中,您将会了解这些方案之一 — Bonita Open Solution — 配置一个酒店入住业务流程的工作流。Bonita 包含图形 BPMN 编辑器和工作流引擎。

配置工作流的任务

配置一个工作流需要完成四项任务:

  1. 使用 BPMN 制作工作流。
  2. 设计工作流执行中的人员交互的表格。
  3. 指定工作流中使用的外部应用程序。您往往需要外部应用程序来满足您的工作流需求。
  4. 定义所有参与其中的员工(或者人员)的业务角色,指定谁来执行工作流中的哪个活动。业务角色决定了谁能够访问到哪个活动。决定所有这些是访问控制政策 的一部分。

在第 1 部分中,我将会使用 Bonita 制作订房工作流,说明第一个任务。在第 2 部分中,我将会展示如何设计工作流的两个表格,并说明它们如何使用常用于工作流的两个流行开源应用程序:PostgreSQL 数据库和 JasperReports 报告引擎。定义访问控制政策不在本文的讨论范围;在 参考资料 部分获取该主题的另一文章链接。

简单工作流的 BPMN 表示

为了向您介绍 BPMN,我将以酒店前台的订房流程为例。该流程需求最简单的结构就是客人到达前台,要求一间房间。前台的工作人员确认可入住的房间,如果房间可入住,就进行预订。(请注意,为了简单,我并没有考虑整个工作流,正如简介中所述,只是从酒店前台到客房部和会计部。)

该简单流程的 BPMN 表示(使用 Bonita 的工作流编辑器绘出的)如图 1 所示:

图 1. 使用 BPMN 表示一个预订酒店房间的简单工作流
使用 Bonita 中的 BPMN,预订酒店房间的简单工作流的图表
使用 Bonita 中的 BPMN,预订酒店房间的简单工作流的图表

图 1 中最左边的浅绿色圆形是开始 元素。它表示工作流的开始,正如 BPMN 所定义的。

在开始元素右边的箭头表示迁移。它可以是各种不同的迁移,之后您在本文也会了解到。这是一个简单的迁移,仅仅指向工作流的第一个活动

工作流的活动

图 1 中第一个迁移右边的是一个圆角的矩形。图 1 中包含了三个这样的矩形。它们表示能够自动完成或者由用户执行的工作流活动或者任务。最左边的矩形 — 名为 EnterRoomInformation — 包含一个人的符号,表示这是一个用户活动。在这个活动中,接待员使用一个表格来输入用户要求的房间类型信息。

中间的矩形名为 CheckRoomAvailablity。它的插头连线符号表示,这是一个动态活动,意味着它在后端完成。几个类型的自动活动能够按这一方式完成 — 例如,确认所要求的房间是否可入住的数据库操作。

第三个(最右边的)矩形,名为 BookRoom,既有人也有插头符号,这就意味着用户执行该活动的一部分,剩余部分由某些自动处理在后端完成。BookRoom 活动的人为部分是接待员提供订房信息。剩余的就是动态活动(保存订房信息的数据库事务)。

总体来说,第一个活动简单地收集所需房间的数据,第二个确认所需房间是否可入住。第三个动作完成订房剩下的工作。

简单且有条件的迁移

请注意,在 图 1 中简单迁移(箭头)从 EnterRoomInformation 活动指向 CheckRoomAvailability 活动。这个简单迁移意味着在接待员收集到客房查询信息后,下一步往往是检查所需类型的房间是否可入住。

下一个迁移 — 从 CheckRoomAvailability 活动到 BookRoom 活动 — 并非一个简单迁移。这取决于 CheckRoomAvailability 活动的输出 — 即所需房间是否可入住。如果可入住,工作人员可能会帮客人预订,因此就进行 BookRoom 活动。如果不可入住,工作人员可能会确认其他类型的房间是否可入住,因此控制就需要返回到 EnterRoomInformation 活动。

因此,在这里您需要做出决定,选择哪个分岔。无论您何时做出这个决定,执行路径都会分岔。这个分岔由一个内有十字的菱形表示(BPMN 术语中的 gate 或者 gateway)。您可以在 图 1 中看到 gate 元素用两个不同的可能执行方案连接 CheckRoomAvailability 活动的输出。

三条带箭头的线连接到 gate。每条线都表示一个迁移:

  • 第一条线是 gate 的输入,它是由 CheckRoomAvailability 活动产生的,并终止在 gate。这是一个简单的,非条件的迁移。
  • 第二个迁移时从 gate 到 EnterRoomInformation 活动。这个迁移表示当指定类型的房间不可入住时的情况。这是一个条件迁移。
  • 第三个迁移,从 gate — 另一个条件迁移 — 指向 BookRoom 活动,这时所需类型的房间是可入住的。

请注意,gate 元素是迁移交汇的点。每个进入 gate 或者离开 gate 的迁移都了解其自身属性(即,无论它是简单的或者条件的)。

现在您已经看到如何使用 BPMN 表示一个预定房间的简单流程。下一部分会介绍如何在 Bonita 中配置这个工作流。如果您想跟随本文的动手练习,现在就可以下载,安装并加载 Bonita(见 参考资料)。

在 Bonita 中配置简单的工作流

Bonita 的图表工具易于使用,允许从选项板拖放到名为白板 的编辑窗口。在组件放入到白板之后,您可以根据业务流程需求,逐个配置每个组件。

图 2 显示了 Bonita 的欢迎页面,它包含普通任务的快速链接,如创建一个新的流程或者打开当前已有流程:

图 2. Bonita 的欢迎页面
Bonita 欢迎页面的屏幕截图
Bonita 欢迎页面的屏幕截图

您可以单击 New 按钮来开始配置您的订房工作流。打开一个名为 MyProcessDiagram(版本 1.0)的新流程,如图3 所示:

图 3. 新流程
屏幕截图显示 Bonita 中新创建的流程
屏幕截图显示 Bonita 中新创建的流程

您可以在 图 3 中看到,Bonita 屏幕被水平分为两部分,每个部分又垂直进行划分。

左上部分包含一个 BPMN 元素的选项板,您可以使用它配置工作流。

右上部分是一个流程白板,您可以把 BPMN 元素从选项板拖放到其中。白板是个真实的流程设计视图。如 图 3 所示,Bonita 在创建新流程时自动添加三个 BPMN 元素:开始、迁移和名为 Step1 的活动。

左下部分是一个概览窗口,显示您创建的整个工作流的概览。该功能对快速跳至工作流的特殊部分十分有帮助,特别是当工作流定义很大,并且在无滚动条的情况下不能完全显示在白板中。

右下部分是详细窗口,用于您配置独立的 BPMN 元素。它显示了您在配置中设置的 BPMN 属性。因为当前没有选中任何 BPMN 元素,所以 图 3 中的详细窗口显示了工作流的属性。例如,您可以看到详细窗口有一个名为 Diagram 的选项卡,它包含一个 Name 字段,其值为 MyProcessDiagram。将 MyProcessDiagram 改为 RoomBookingDiagram,然后单击 Bonita 主工具栏上的 Save 按钮。

在 Bonita 中配置用户活动

单击 Step1 活动开始配置订房工作流。它的属性显示在详细窗口中,如图 4 所示:

图 4. Step1 活动的属性详细信息
Step1 活动的属性详细信息
Step1 活动的属性详细信息

当您单击 Step1 活动时,上下文选项板— BPMN 元素图标的一个小子集 — 显示在它周围,如图 5 所示:

图 5. Step1 活动显示它的上下文选项板
显示上下文选项板的 Step1 活动

上下文选项板使您方便地添加下一个活动或者迁移到您的工作流。在本文的练习中,您将会经常使用到上下文选项卡。

您可以从 图 4 中看到,详细窗口有多个选项卡,您可以使用它们来控制每个 BPMN 元素的行为 — 例如 Step1 活动 — 您拖放到 Bonita 的白板中的活动。这些选项卡提供了丰富的功能,覆盖了管理业务流程几乎所有可能的需求。在本文中,我并没有讲到所有 BPMN 功能。在这个简单的订房案例中,您只需要了解详细窗口的 General,Data,Connectors 和 Forms 选项卡。

图 4 所示,General 选项卡让您指定活动的名称,描述,类型和属性。在 Name 文本字段输入 EnterRoomInformation 作为活动的名称,替换 Step1。请注意,EnterRoomInformation 现在是活动的名称,显示在白板上。

Description 字段允许您提供关于 BPMN 元素的文档。在 Description 字段输入 Show a form to fetch the information about the room required by the customer

接着,您将指定该活动的类型。因为 EnterRoomInformation 活动需要填充一个数据输入表格来指定所订房间类型,所以这是一个由使用订房工作流应用程序的接待员执行的用户活动。Activity 类型字段是一个下拉列表。EnterRoomInformation 活动的类型可以是 Human,它是默认选择的。

因为 EnterRoomInformation 活动是一个用户活动,您需要为它开发一个数据输入表格。在第 2 部分中,您将会设计并实现该表格,然后使用详细窗口的 Forms 选项卡,将它添加到活动。也是在第 2 部分,您将会使用 Data 选项卡来定义变量,这些变量上包含有客人所需房间类型的数据。

将自动活动添加到工作流

接下来,您要添加一个迁移,还有一个名为 CheckRoomAvailability 的活动到工作流中。CheckRoomAvailability 活动接收到来自 EnterRoomInformation 表格的数据,查看酒店的数据库(这您将会在第 2 部分中配置),然后设置一个标志显示房间是否可入住。

单击 EnterRoomInformation 活动来激活它的上下文选项卡。把 step 元素图标(一个小框)从上下文选项的右上角拖出,然后把它放在 EnterRoomInformation 活动的后面。如图 6 所示,迁移和另一个 Step1 元素被添加到工作流:

图 6. 添加新的迁移和 Step1 元素到您的工作流
添加新的迁移和 Step1 元素到您的工作流
添加新的迁移和 Step1 元素到您的工作流

新创建的 Step1 元素的详细窗口显示了活动的名称,描述和类型字段。输入 CheckRoomAvailability 作为活动的名称。在 Description 字段中,输入 一个自动流程,查询数据库中所需类型的房间是否可用。从 Activity 类型的下拉列表中选择 Automatic。图 7 显示了您所配置的 CheckRoomAvailability 活动:

图 7. 配置 CheckRoomAvailability 活动
配置 CheckRoomAvailability 活动
配置 CheckRoomAvailability 活动

添加房间可入住标志到您的工作流

如果所需房间可入住,CheckRoomAvailability 活动就设置一个名为 isRequiredRoomTypeAvailable 的标志。工作流中的下一个迁移取决于 isRequiredRoomTypeAvailable 标志是设置或者不存在,所以您需要在 Bonita 中定义 isRequiredRoomTypeAvailable 标志作为一个变量。

Bonita 允许您为每个独立的活动和整个工作流定义变量。当只在特定活动中需要变量时,就定义一个活动级的变量。如果该变量的使用扩展到多个活动,您可以将变量定义为工作流级,这样任意元素都能访问它。

在订房工作流中,isRequiredRoomTypeAvailable 标志需要定义为工作流级的变量,因为多元素需要访问它。CheckRoomAvailability 活动设置了标志,然后下一个迁移会检查标志的状况。

要定义一个工作流级的变量,单击环绕整个工作流的矩形,如图 8 中强调的:

图 8.订房工作流的详细窗口
订房工作流的详细窗口
订房工作流的详细窗口

请注意,详细窗口现在显示了整个订房工作流的属性。

单击详细窗口的 Data 选项卡,然后单击 Add 按钮。打开一个 Add 新变量对话框,如图 9 所示:

图 9. 添加新变量到您的工作流
添加新变量到您的工作流
添加新变量到您的工作流

在 Name 文本字段输入 isRequiredRoomTypeAvailable。在 Description 字段,输入 A workflow-level flag to show whether the required type of room is available or not。从 Data 类型下拉列表中选择 Boolean,然后选择 false 作为标志的默认值。单击底部的 Finish 按钮。您可以看到 isRequiredRoomTypeAvailable 变量已经被添加到 Data 选项卡,如下图 10 所示:

图 10. 显示 isRequiredRoomTypeAvailable 变量被添加到文本框的 Data 选项卡
显示 isRequiredRoomTypeAvailable 变量被添加到文本框的 Data 选项卡
显示 isRequiredRoomTypeAvailable 变量被添加到文本框的 Data 选项卡

您刚刚定义了 CheckRoomAvailability 活动,带有名为 isRequiredRoomTypeAvailable 的工作流级标志。然而,您还没有配置真正的数据库和 SQL 语句,它们会读取房间可用信息,然后设置(或者重设)isRequiredRoomTypeAvailable 标志。我将会在第 2 部分中说明如何完成所有这些内容。现在,我正要说明如何配置下一个动态迁移,它需要根据房间是否可入住进行决策制定。

有决策制定的动态迁移

单击 CheckRoomAvailability 活动来激活它的上下文选项板。从上下文选项板中拖出带有加号的菱形,然后将它放在 CheckRoomAvailability 活动的右边,在此放置一个 gate 元素,如图 11 所示:

图 11. 在BPMN 流程中用于决策制定的 gate 元素
在 BPMN 流程中用于决策制定的 gate 元素
在 BPMN 流程中用于决策制定的 gate 元素

gate 元素有两个类型:

  • XOR gate :如果 gate 中有一个十字,它就用于将一条流分叉为多条。
  • AND gate :如果 gate 中有一个加号,它就用于会合两条流。

您从 简单的,有条件的迁移 部分了解到需要一个将一条流分为多条的 gate 。为了设置 gate 的正确类型,单击白板中的 gate 元素,然后在 General 选项卡中选择 XOR 作为 Gate 类型属性,如图 12 所示:

图 12. 选择 XOR gate 将一条流分为多条
选择 XOR  gate 将一条流分为多条
选择 XOR gate 将一条流分为多条

现在从上下文选项卡单击并将 step 元素图标拖到 gate 的右边。在 gate 的右边放置一个名为 Step1 的新活动。在详细窗口的 General 选项卡,将新活动的名称改为 BookRoom,类型改为 Human。现在 gate 就配置完了,这个流程如图 13 所示:

图 13. 将 BookRoom 活动放置在 gate 的旁边
将 BookRoom 活动放置在 gate 旁边
将 BookRoom 活动放置在 gate 旁边

Bonita 中的业务角色

BookRoom 元素的左上角是一个表示人为的符号,右上角是一个十字(两者在 图 13 中都可见)。十字说明您没有指定谁来实施这个活动。单击 Actors 选项卡,然后单击 Choose 按钮。打开一个 Assign actors 对话框,如图 14 所示:

图 14. Assign actors 对话框
Assign actors 对话框
Assign actors 对话框

Assign actors 对话框告诉您选择能执行 BookRoom 活动的人员组。Bonita 允许您根据工作流所需的业务角色 定义人员组。业务角色的讨论不在本文范围内。您可以简单地使用已经在 Bonita 中定义,名为 Initiator 的默认人员组。Initiator 组由创建工作流的任何人组成。

从文本框选择 Initiator,然后单击详细窗口底部的 Finish 按钮。Initiator 被添加到 Actors 选项卡的列表中,如图 15 所示:

图 15. 在 Actor 选项卡的列表中添加默认 Initiator 人员
在 Actor 选项卡的列表中添加默认 Initiator 人员
在 Actor 选项卡的列表中添加默认 Initiator 人员

BookRoom 活动还需要用户交互表格,该表格要求酒店前台职员输入用户信息。您将会在第 2 部分中设计工作流所需表格。也请注意,BookRoom 暂时是一个用户活动。在第 2 部分中,您将会配置该活动的自动部分。

添加迁移的条件

现在您在 gate 和 BookRoom 活动之间的迁移上添加一个房间可入住的条件。您需要在 BookRoom 活动只在所需类型房间可入住的情况下发生的条件下配置工作流。

单击 gate 与 BookRoom 活动之间的迁移元素。迁移元素的详细信息显示在详细窗口,如图 16 所示:

图 16. 显示迁移属性的详细窗口
显示迁移属性的详细窗口
显示迁移属性的详细窗口

迁移元素的详细信息只包含一个名为 General 的选项卡,如 图 16 所示。General 选项卡包含一个名为 Condition 的字段,指定了在何种条件下发生迁移。在 Condition 文本字段输入 isRequiredRoomTypeAvailable。请从 添加房间可用标志到工作流 回忆一下,您声明了 isRequiredRoomTypeAvailable 标志作为一个工作流级变量。如果房间可入住,CheckRoomAvailability 活动设置 isRequiredRoomTypeAvailable 标志为真。如果 isRequiredRoomTypeAvailable 活动为真(意味着标志被设置),这个条件就能使迁移转到 BookRoom 活动。

当您输入迁移的条件时,请注意一个小菱形出现在迁移元素的 gate 边。菱形表示迁移是有条件的。

正如您所猜想的,您还必须设置其他迁移的条件。在流程白板中单击 gate 元素激活它的上下文选项板。从上下文选项板底部拖出箭头(迁移图标)到 EnterRoomInformation 活动。这就描画了从 gate 到 EnterRoomInformation 活动的迁移元素,如图 17 所示:

图 17. 所需类型房间不可入住时,从 gate 到 EnterRoomInformation 活动的迁移
 所需类型房间不可入住时,从 gate 到 EnterRoomInformation 活动的迁移
所需类型房间不可入住时,从 gate 到 EnterRoomInformation 活动的迁移

现在,如 图 17 所示,简单地设置 isRequiredRoomTypeAvailable 作为该迁移的条件。工作会返回到 EnterRoomInformation 活动,如果所需类型的房间不可入住。

配置工作流的结束

工作流配置的最后一步是从 BookRoom 的上下文选项板中拖拽一个环形到右边,添加一个结束元素到工作流。事件选择选项板如图 18 所示:

图 18. 事件选择选项卡
事件选择选项卡,当您从上下文选项板中拖出环形图标时它会进行显示
事件选择选项卡,当您从上下文选项板中拖出环形图标时它会进行显示

事件选择选项板包含许多由 BPMN 定义的事件类型的符号。您只需要结束 元素(一个红色 circle,环绕在 图 18 中),您可以在事件选择选项板的右上角找到它。从事件选项板中选择结束元素。现在您的工作流中包含了一个结束元素,如图 19:

图 19. 有结束元素的订房工作流
有结束元素的订房工作流
有结束元素的订房工作流

您已经配置了订房工作流,除了它没有表格和数据库。单击 Bonita 主菜单的 Save 保存当前的工作。这将您的工作流信息保存在 RoomBookingDiagram.proc 文件中。RoomBookingDiagram.proc 文件也可用于 下载

结束语

类似预配置工作流和常用工作流类型的 ERP 功能是很有用的,但是也有一定的代价:这些功能都是特定于产品的。我发现教授 IT 专业人员如何使用特定于产品的功能来解决日常工作流问题是任何 ERP 项目中最难的部分。

因此,我认为 BPM 是未来的潮流。虽然标准化尚不完全,但也正在不断进行。我相信在几年之内,BPM 将会覆盖所有工作流的功能,通用或者非通用的,因此标准化的 BPM 培训将会成为 IT 课程的一部分,而特定于产品的 ERP 培训将逐渐消失。

本文中,您了解了一些 BPMN 的知识,以及如何使用它在 Bonita 中配置一个简单的工作流。在第 2 部分中,我将会讲到第 1 部分中未完成的部分 — 设计表格、使用变量、连接到 PostgreSQL 数据库、以及生成带 JasperReports 的报告 — 用于在实际中加载您的订房工作流。


下载资源


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Java technology, Open source
ArticleID=606060
ArticleTitle=用于业务流程管理的 Bonita,第 1 部分: 配置一个简单的工作流
publish-date=01042011