从WS-AppServer中触发BPM流程

时间:2021-09-23 19:40:56

开始之前
使用BPM流程模型之前,需要发布流程模型到运行时。

        WS-AppServer应用包含执行活动必要的业务逻辑。通常,这些应用内逻辑做为业务处理周期一部分来执行
        在另一方面,在运行时,也可以通过WS-AppServer应用来触发流程模型。下面的过程描述了这个过程。

  1. 创建业务流程模型并发布到租户中;
  2. 在Java类的扩展类,添加触发业务流程模型的代码(在下面的例子中将看到的代码片段);
  3. 再次生成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中),就可以参照此模式设计。

        从WS-AppServer中触发BPM流程

        译者水平有限,欢迎反馈讨论。