开始之前
使用BPM流程模型之前,需要发布流程模型到运行时。
WS-AppServer应用包含执行活动必要的业务逻辑。通常,这些应用内逻辑做为业务处理周期一部分来执行。
在另一方面,在运行时,也可以通过WS-AppServer应用来触发流程模型。下面的过程描述了这个过程。
- 创建业务流程模型并发布到租户中;
- 在Java类的扩展类,添加触发业务流程模型的代码(在下面的例子中将看到的代码片段);
- 再次生成Java代码(Java Code)和Web Service接口(Web Service Interface),并发布到租户中。
应用配置必要的逻辑来触发业务流程模型。
例子
例如有一个销售应用程序,涉及到国家、区域和地方的数据。在应用中,对于每次增加新的区域,需要嵌入逻辑代码来触发业务处理通知消息。程序将发送一封电子邮件给所有的利益相关者。
下面的内容描述这个逻辑如何集成到应用代码中。
注意
假设在应用中,已经有个叫“Region”的类。
系统中也有已经发布的业务流程模型,名称为“SendMail_vcmdemo10.bpm”,这个程序将发送电子邮件到指定的用户。
在Region扩展类中,扩展下面代码:
public class Regionextends
RegionBase
{
public Region()
{
this((BusObjectConfig)null);
}
public Region(BusObjectConfig config)
{
super(config);
}
@Override
public void onAfterCommit(AfterCommitObjectEvent event) {
super.onAfterCommit(event);
int messageXml = 0;
try {
messageXml = BSF.getXMLDocument().parseString(
"<InputMessage>" +
"<RegionID>"+getRegionID()+"</RegionID>"+
"<RegionDescription>"+getRegionDescription()+"</RegionDescription>"+
"</InputMessage>");
} catch (UnsupportedEncodingException e) {
throw new BsfRuntimeException(e);
} catch (XMLException e) {
throw new BsfRuntimeException(e);
}
//If inserting a Region, then notify all employees through a flow
if (event.triggeredBy(StdTriggers.INSERT_OBJECT)){
int result =
WSUtil.executeProcess|WSUtil.executeProcess(
ProcessType.DEFINITION,
"3.Business Process Models/Test/SendMail_vcmdemo10.bpm",
"Northwind Application",
null,
null,
null,
messageXml,
true,
true);
System.out.println("result = "+Node.writeToString(result,
true));
//No need to delete messageXml node this is taken care by WSUtil.executeProcess() implementation
}
}
}
|
在运行时,此代码将确保当一个区域对象提交到数据库时,程序将按预先定义的信息内容发送一个邮件给接收者。
这样,就是通过WS-AppServer触发业务流程模型。
译者思考
在一些事务管理中,异步问题可以参照设计:假如在流程环节送出下一步操作时,在Webservice上增加触发器,启动后台自动执行流程,将自行完成业务、事务相关工作。例如流程上的文档操作(保存数据到MongoDB中),就可以参照此模式设计。
译者水平有限,欢迎反馈讨论。