從WS-AppServer中觸發BPM流程

肖永威發表於2015-04-12

開始之前
使用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中),就可以參照此模式設計。

        

        譯者水平有限,歡迎反饋討論。


相關文章