概述
第 2 部分介绍如何使用最常见的 WebSphere Lombardi
V7.1(以下简称 Lombardi)功能来建模示例流程。我们将介绍业务场景流程的基本建模,包含以下功能:
1.使用业务流程定义 (BPD) 进行流程建模
2.Integration 服务
3.Human 服务
4.Rule 服务
在示例流程中,购买者使用基于 Web 的用户界面 (Web UI) 提交一个购买订单,然后客户关系管理
(CRM) 系统自动向提供商发送一个通知。提供商可使用一个包含以下选项的 Web UI 确认订单:接受订单而不进行任何更改、接受订单并进行一定的更改或拒绝订单。
在接受订单的情形下,如果提供商提高商品单价,系统需要通知购买者重新确认更新的订单。购买者具有以下选择:
1.如果购买者接受更新的订单,系统会自动生成最终的购买订单。
2.如果购买者不接受更新的订单,系统会将相关通知发送给提供商,购买订单流程停止。
如果购买者不确认订单,系统会自动生成正式的购买订单。
创建业务流程
是一个活动集合,旨在生成针对某个特定目标的一种具体输出,它同时涉及到人类和系统交互。该流程不仅可包含一般
Integration 服务、活动、网关和 Rule 服务,还可以使用计时器、消息和异常事件。
当建模流程时,您会创建一个可重用的业务流程定义 (BPD)。BPD 支持您为最终用户定义流程工作流,在创建一个流程内的逻辑并与其他应用程序和数据源集成。
您可以按照以下步骤来从头创建示例流程应用程序,或者导入本文的 下载 部分中提供的现有的流程应用程序。
要创建示例流程应用程序,可完成以下步骤:
1.单击 Process Apps 选项卡,然后单击 Create New
Process App 并提供 Process App Name(例如 Purchase Order Process)、Acronym(例如
POP,缩写在您的 Lombardi 环境中必须是惟一的),以及一个可选的 Description(例如
This presents an example of a process for handling a
purchase order.)。
2.打开 Designer 并选择 Create Business Process
Definition (BPD)。
3.单击 Process App 选项卡并在 Process App 列表中选择
Purchase Order Process,以便在 Designer 中打开该流程。
4.在 Designer 中,选择 Processes => Create
New => Business Process Definition。
5.创建一个名为 Purchase Order Process 的 BPD。
6.接下来您需要创建通道。BPD 必须为每个系统或参与一个流程的用户组包含一个通道。通道是一个特定系统或用户组将执行的所有活动的容器。
可以向流程图中添加通道来持有将在流程执行期间发生的活动和事件。当创建一个新
BPD 时,它默认包含两个通道。可以拖动细节面板中通道图标的右边来创建两个新通道。可以为每个通道指定一个可选的名称和颜色,方法是选择该通道,在属性部分中指定名称和显示颜色。
在我们的示例中,主要流程中有 4 个通道:Buyer、Supplier、CRM
和 ERP。
7.现在您需要创建参与者组。这些组通常表示一个业务组织中的用户组或部门。在
Designer 视图中,单击 Processes 旁边的加号 (+),然后选择 Participant
Group 并输入参与者组名称。
在我们的示例中,有 4 个参与者组:Buyer、Supplier、CRM
和 ERP。
8.接下来,您将创建活动和一个决策网关。为此,将右侧面板中的 Activity
元素拖到流程图中一个合适的通道中,以创建活动。然后将 Decision Gateway 元素拖到流程图中,指定
Accept Order? 作为它的名称。如果订单的状态指定为 Accepted by supplier,那么决策网关将调用
Need Buyer's Reconfirm? 活动;否则,它将调用 Send Reject Notification
to Buyer 活动。
9.使用相同的流程,创建另外两个决策网关:Need Confirm?(使用
needBuyerConfirm 变量描述它的值)和 Buyer Accept?(使用订单的状态来描述它的值)。如果订单的状态指定为
Accepted by buyer,决策网关将调用 Generate Order 活动;否则,它将调用
Send Reject Notification to Supplier 活动。
10.对于您创建的每个 BPD,您需要声明变量来采集在您流程中各个步骤间传递的业务数据。为此,在
Variables 选项卡上,请单击 Add private 添加一个名为 Order 且类型为 Order
的私有变量,以及一个名为 needReconfirm 且类型为 Boolean 的私有变量。
您现在已创建示例流程应用程序。得到的业务流程如图 1 所示。
图 1. 购买订单流程
创建 Integration 服务
当您希望集成一个外部系统来完成任务时,可以构建一个 Integration
服务。例如,您可以构建这样一个 Integration 服务,它调用一个 Web 服务来执行某种业务逻辑。Integration
服务是惟一可包含 Web 服务集成和 Java? 集成组件的服务。
创建 Web 服务集成
在我们的示例中,我们使用一个 Web 服务集成来实现在流程中调用的通知功能。要创建此服务,执行以下步骤:
选择 Implementation => Integration
Service 并创建一个名为 SendNotification 的 Integration 服务。
在新 SendNotification Integration 服务的图表中,从右侧面板拖出
Web Service Integration 并将其重命名为 Send Notification by
Email,然后使用序列流将它链接到 Integration 服务图的开始和结束单元。
要发现 Web 服务,请在属性视图的 Implementation 选项卡上指定
Web 服务的 WSDL URI 并单击 Discover,如图 2 所示。
您可以从本文的 下载 部分获取 WSDL 和 XSD 文件,并基于这些
WSDL 和 XSD 文件开发自定义的 Web 服务。然后可以将这些 Web 服务部署在您的应用服务器上。
图 2. 发现 Web 服务
单击 Generate Types,然后接受默认选项以生成变量类型。这将生成如图
3 所示的变量类型。
图 3. Web 服务所提供的已生成的变量类型
选择 Send Notification by Email Web 服务集成,在属性视图中,从发现的操作列表中选择
Notify Supplier。
在 Variable 选项卡上,单击 Add Input 创建一个输入变量。将变量的名称指定为
inputOrder,并将 Variable Type 更改为 Order。
重复上一步,创建一个名为 outputResult 且类型为 String 的输出变量。
在 SendNotification Integration 服务的 Data
Mapping 属性中,将 inputOrder 映射到 order,将 outputResult 映射到
result。
创建 Java 集成
在我们的示例中,我们使用 Java 集成组件集成外部 Java 类,从而实现流程中所调用的价格计算和支付功能。
在创建该 Integration 服务之前,需要添加包含这些类的 JAR
文件,方法是在 Designer 视图中单击库的 Files 旁边的加号 (+) 并选择 Server
File。在 New File 对话框中,单击 Browse 并选择 下载 部分中提供的 payment.jar
文件。
创建一个 Integration 服务,然后将一个 Java 集成组件从面板拖到服务图,使用序列线将该组件连接到
Start 和 End 事件。
单击图中的 Java 集成组件,然后单击属性中的 Definition。单击
Java Class 下的 Select 并选择 JAR 文件和类,如图 4 所示。
图 4. Java 集成
创建 Human 服务
Human 服务是惟一可包含 coach 和用户交互的服务类型。当您希望
BPD 中的一个步骤创建可供流程参与者在 Web UI 中执行的交互式任务时,可以构建一个 Human
服务。当构建 Human 服务时,您会包含一些 Coach,它们是基于 Web 的表单,用于向用户提供流程相关数据和收集来自这些用户的输入。Coach
使您能够轻松添加标准的字段和控件,比如单选按钮、下拉菜单等。
按照以下步骤,创建一个名为 Submit Purchase Order
的 Human 服务:
打开 Purchase Order Process BPD,右键单击 Submit
Purchase Order 活动并从选项列表中选择 Activity Wizard。
在 Set Up Activity 对话框中,指定 Human Service
(Service with human interaction) 作为服务类型,创建一个名为 Submit
Purchase Order 的新服务,然后单击 Next。
在 Parameters 对话框中,选择现有的流程变量订单来用作新服务的输入和输出,然后单击
Finish。新服务创建后会自动附加到活动上。
新服务包含一个 Coach。单击 Coaches 选项卡,然后单击列出的 coach 组件以打开 Coach
Designer。
将 orderHead 和 orderDetail 变量拖入 coach
表单页面,如图 5 所示。
图 5. Submit Purchase
Order 的 Coach
一般而言, coach 经过了高度自定义,以在典型的 Lombardi
部署中呈现一种特定的外观。例如,您可能希望自定义 coach 来使用企业徽标和颜色。在许多情形下,可通过在
Designer 界面中配置可用的显示和可视性属性来满足自定义需求。在本系列的第 3 部分中,您将学习
coach 的高级功能。
创建 Rule 服务
当您想要一个条件来确定执行路径或基于其他变量的可能值进行变量分配时,可以使用
Rule 服务。例如,当某个条件计算结果为真时,将执行您提供作为操作的 JavaScript 表达式。Rule
服务的操作不能直接调用 Java 或 Web 服务集成。您可以从任何其他类型的服务调用 Rule 服务,Rule
服务也可以调用其他嵌套的服务。
在我们的场景中,如果提供商更改商品的数量或价格,Rule 服务将按照以下业务规则来验证订单更改:
如果增加的数量比率小于或等于 10%,并且更新的价格不高于原始价格,那么购买者无需重新确认。
如果增加的数量比率小于或等于 10%,但更新的价格高于原始价格,那么购买者需要重新确认。
否则,如果增加的数量比率大于 10%,那么购买者也需要重新确认。
因为一个订单中有多个订单项,所以 Rule 服务必须重复执行。为此,请选择
Need Buyer's Reconfirm? 活动并单击属性中的 Step。然后从 Behavior
下的 Loop Type 下拉列表中选择 Simple Loop 选项。然后在 Simple Looping
下,指定订单项的长度作为循环最大值,如图 6 所示。
图 6. 简单循环
执行以下步骤,创建一个名为 Need Buyer's Reconfirm?
的 Rule 服务:
打开 Purchase Order Process BPD,右键单击 Need
Buyer's Reconfirm? 活动并选择 Activity Wizard。
在 Activity Wizard 的 Set Up 对话框中,指定 Rule
Service (Rule based service without human interaction)
作为服务类型,并创建一个名为 NeedReconfirm? 的新服务,然后单击 Next。
在 Parameters 对话框中,指定现有的流程变量 needReconfirm
作为此新服务的输出,然后单击 Finish。新 Rule 服务创建后会自动附加到活动上。
创建一个名为 orderDetail 且变量类型为 OrderDetail
的输入变量。然后使用相同的小数类型创建两个私有变量,分别名为 updatedQuantityPercent
和 updatedUnitPricePercent。
在规则脚本活动之前添加一个服务脚本活动,使用 JavaScript 表达式实现此活动,如清单
1 所示。
清单 1. Rule 服务的初始化
if(tw.local.orderDetail.quantity == 0 ){ tw.local.updatedQuantityPercent = 1; }else{ tw.local.updatedQuantityPercent = (tw.local.orderDetail.updatedQuantity - tw.local.orderDetail.quantity)*1.00/tw.local.orderDetail.quantity; }
if(tw.local.orderDetail.unitPrice == 0 ){
tw.local.updatedUnitPricePercent = 1;
}else{
tw.local.updatedUnitPricePercent = (tw.local.orderDetail.updatedUnitPrice
-
tw.local.orderDetail.unitPrice)*1.00/tw.local.orderDetail.unitPrice;
} |
双击规则脚本,打开它以便对其进行编辑。请单击 Rule 选项卡,然后单击
Add a variable (column) to the rule 图标(左上侧的绿色加号)来添加变量
updatedQuantityPercent 和 updatedUnitPricePercent。
依据上一节中描述的业务规则指定每个单元的值。结果应该类似于图 7。
图 7. 规则脚本
最后,您需要指定 Need Buyer's Reconfirm? 活动与
Rule 服务之间的输入映射。在本示例中,输入的值为:tw.local.order.orderDetail[tw.system.step.counter]。
测试流程
Lombardi Authoring Environment Inspector
是迭代式流程开发方法的关键。使用 Inspector,开发人员可在 Process Center 服务器或远程运行时流程服务器上运行流程和服务。整个开发团队可使用
Inspector 来运行和测试流程。
要运行一个流程,然后在 Inspector 中管理该流程的正在运行和已完成的实例,可执行以下步骤:
打开 Purchase Order Process 并单击右上侧的 Run
Process 图标。当提示您是否希望更改 Inspector 界面时,请单击 Yes。
在 Process Instances 选项卡上,您可以看到所有当前活动和已完成的流程实例。要控制实例,可从列表中选择一个实例,然后单击您想要的工具栏选项。例如,要停止您之前启动的一个实例,可以单击该实例,然后单击相关图标来终止该实例。
单击新的或收到的任务,然后单击右上侧的 Run task 图标,如图 8
所示。在一些情形下,您可能需要选择一个用户帐户和密码,才能运行一项任务。这由活动的通道分配和路由来控制。
图 8. 运行 Submit Purchase
Order 任务
选择 Task:Submit Purchase Order 并单击 Runs
the selected task。在购买订单 BPD 中,Submit Purchase Order
任务的 coach 会在浏览器中打开,如图 9 所示。
填充字段并单击 OK 按钮。BPD 会继续下一个步骤。Inspector
通过在 BPD 图和树视图中将标志移动到下一步来显示进度。
图 9. Submit Purchase
Order coach 用户界面
结束语
本文介绍了如何使用 WebSphere Lombardi Edition
V7.1 的一些常用功能建模业务流程。这些常用功能包括 BPD、Integration 服务、Human
服务和 Rule 服务。在第 3 部分中,您将学习如何使用 WebSphere Lombardi Edition
V7.1 的高级功能来充实示例流程,添加更复杂的需求和用户交互。 |