【IT168 专稿】 本文中,作者将使用Websphere Business Modeler和Websphere Integration Developer协作,端到端地实现并部署一个简单的信用卡申请及进度查询的业务流程,以便于读者更好地了解如何使用Modeler和WID进行BPM的快速实现和部署。本文非常适合对Modeler和WID有一定了解,并想通过二者协作来缩短开发周期的读者。
首先,介绍一下相关背景知识。
多输入标准(Multiple Input Criteria)
如果一个流程具有多输入标准,那意味着该流程或许可以由多种输入启动。比如某流程具有2个输入标准,那可能出现两种情况。
情况一:两个输入标准都可以启动该流程。一个典型例子是某机票代理公司的机票预定流程,客户可以通过输入一个手机号开始一个预定流程,也可以通过一个账号/密码启动一个预定流程。
情况二:两个输入标准只有一个可以启动流程,另外一个可以配合或者监控被启动流程实例的运行。一个典型的例子就是某信用卡申请及进度查询流程,客户可以通过提交申请单开始一个流程实例,之后,该客户就可以通过申请号去查询流程实例的运行进度。
相关集(Correlation sets)
同一个流程在运行时可以启动多个实例,相关集可以唯一标识一个流程的实例。在上面所说的信用卡流程中,申请号就可以被封装成一个相关集,用以在运行时识别所需要访问的流程实例。在Modeler中可以在“属性视图”(Attributes View)中的“输入逻辑”(Input Logic)选项卡中找到设置相关集的地方。在WID中,选择一个Receive或者Pick,可以在“属性视图”中的“相关集”(Correlation)选项卡中看到相关信息。
输入标准及相关集在Modeler和WID间的映射关系
Modeler中的多输入标准WID导出时将映射成一个Pick或者多个Receive活动;同时,一些空的相关集将被生成。(这些相关集都是需要在WID中进一步实现的才能部署的,这也是为什么多输入标准的流程不能直接部署的主要原因之一。)
针对流程的具体设置,WID到处映射的处理原则是:
一, 如果Modeler流程没有设置输入标准的相关集属性(Correlation),每个输入标准将被映射成Pick元素中的一个OnMessage construct。
二,如果有一个或者多个输入标准设置了相关集属性(Correlation),并且“If no instance satisfy the condition”被设成“Create a new instance”(如图1),那么,每个输入标准将被映射成一个Receive活动,“Create a new process instance if one does not already exist”将是“Yes” (如图2),相关集的“Initiation”将是“Yes” (如图3)。



三,如果有一个或者多个输入标准设置了相关集属性(Correlation),并且“If no instance satisfy the condition”被设成“Treat as error”或者“Discard the input”,那么,每个输入标准将被映射成一个Receive活动,“Create a new process instance if one does not already exist”将是“No”,相关集的“Initiation”将是“No”。
下面我们将开始实现并部署这个信用卡申请及进度查询流程。
使用Modeler流程建模
数据项创建:整个模型只有一个数据项,如图:

流程创建: 如下图,该流程有两个输入标准,一个信用卡申请的输入标准,一个是进度查询的输入标准。上面的分支用于处理信用卡申请,有3个人工任务,4个Data Map。

1.信用卡申请流程开始,Data map将进度设置成“Apply Started”,并写入Repository。
2.客户信息校验,Data map将进度设置成“Verification Completed”,并写入Repository。
3.客户信用评估,Data map将进度设置成“Evaluation Completed”, 并写入Repository。
4.信用申请收尾工作,Data map将进度设置成“Apply Succeed”, 并写入Repository。
下面的分支用于进度查询:
5.活动“Send Apply Status to Client”将把申请进度打印出来。
6.在申请的进度还不是“Apply Succeed”之前,查询分支都将“返回”,用户可以再次查询。条件表达式如下图。

输入/输出标准设置:如图7、图8、图9所示。



设置活动“Send Apply Status to Client”的实现方式:
-〉选择活动“Send Apply Status to Client”,
-〉选择“Technical Attributes”视图,打开“Implementation”业
-〉在“实现方式(Implementation Type)”中选“Java”

导出PI文件导入WID
打开BPEL视图。其中1和2是由两个输入标准导出的Receive活动。

“Problems”视图里面有两个错误:

消除这两个错误:
1.消除错误1。
-〉选择靠上面的“CreditCardProcess”Receive活动
-〉选择“属性(Properties)”视图,选择“Correlation”选项卡
-〉为“Initiation”选择“Yes”
->保存

2.消除错误2。创建一个Correlation Property。
-〉点击“Correlation Properties”旁边的“+”
-〉对话框中,在“Name”中输入“ApplyID”,选择“string”为数据类型
-〉保存

3.添加4个“PropertyAlias”。




4.为相关集选择已创建的相关集属性(Correlation Property)。

5.我们需要稍微调整一下卡进度查询分支的顺序,即把Receive2移到和Back link相连,使得客户不至于只能查询一次。

6.消除新出现的错误。


7. 实现任务“SendApplyStatustoClient”:
打开Java Usages"SendApplyStatustoClientImpl",添加如下代码:
public java.lang.String InputCriterion(commonj.sdo.DataObject Input2, java.lang.String Input)
{ String status = Input2.getString("Status");
String applyid = Input;
System.out.println("***********************************************************");
System.out.println("*The status of the application with ID="+applyid+" is <<"+status+">>");
System.out.println("***********************************************************");
return status;
}
通过UTE部署
-〉切换到“Servers”视图
-〉右击“Websphere Process Server 62”,选择“Add and Remove Projects…”
-〉点击“Add All”
-〉点击“Finish”


通过BPC测试
1. 登陆bpc: https://localhost:9443/bpc/
2. 启动第一个信用卡申请流程
-〉点击“Process Template”
->选上“CreditCardProcess”,点击“Start Instance”
->填充表单,提交(注意:ApplyID为“8888”)


3. 启动第二个信用卡申请流程
-〉点击“Process Template”
-〉选上“CreditCardProcess”,点击“Start Instance”
-〉填充表单,提交(注意:ApplyID为“9999”)

4. 处理第一个申请请求(Client Verification)
-〉点击”My To-dos”,选择“Activated”时间较早的一个任务(也就是第一个申请请求)
-〉点击“Work On”
-〉点击“Complete”


5. 继续处理第一个申请请求(Evaluation client)
-〉点击”My To-dos”,选择“Evaluation client”任务
-〉点击“Work On”
-〉点击“Complete”

我们可以知道,到目前为止,第一个申请的状态是“Evaluation Completed”,第二个申请的状态是“Apply Started”
6. 查询第一个申请的状态
-〉点击“Started By Me”
-〉点击“apply1”
-〉打开“Waiting Operations”
-〉点击“QueryApplyStatus”
-〉填入申请ID“8888”
-〉点击“Submit”



-〉打开控制台(Console),我们将看到打印出来的信用卡申请状态

7. 查询第二个申请的状态
-〉点击“Started By Me”
-〉点击“apply1”
-〉打开“Waiting Operations”
-〉点击“QueryApplyStatus”
-〉填入申请ID“9999”

-〉打开控制台(Console),我们将看到打印出来的信用卡申请状态
