开始之前
使用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中),就可以参照此模式设计。
译者水平有限,欢迎反馈讨论。