• iMatrix平臺流程引擎事件處理之業務補償分析

    0
    Java 工作流引擎 XML C/C++ Go 1103 次瀏覽
    前面已經介紹了表單字段權限的原理,下面再看看iMatrix平臺是怎樣處理事件的?
    業務補償.png

    流程屬性中的業務補償:
    自己認為業務補償也是屬于事件的。
    1 xml中的配置
    <process … … ……>
    … … … …
    <extend>
    … … … …
    <expiation-setting>
         <set-type>http</set-type>
         <delete-instance>
    /expense-report/delete-instance-expiation.htm
    </delete-instance>
         <cancel-instance>
    /expense-report/cancel-instance-expiation.htm
    </cancel-instance>
         <task-jump>/expense-report/task-jump-expiation.htm</task-jump>
         <pause-instance/>
         <continue-instance/>
         <goback-task/>
       </expiation-setting>
    </extend>
    … … … …
    </process>
    任務退回配置的是spring bean名稱,該bean需要實現的接口為com.norteksoft.wf.engine.client.ReturnTaskInterface。當在流程監控中刪除、取消、暫停、繼續實例時,做法基本一致,如下:
    首先獲得xml中配置的請求方式和請求的url;當請求方式是HTTP方式時,使用httpclient請求url;當請求方式是RESTful方式時,使用的是JerseyClient請求的。
    WebUtil.java中的兩種請求方式實現如下:
    /**
         * 普通的http請求
         * @param url
         */
        public static void getHttpConnection(String url,Long companyId,LongentityId,String systemCode){
           String resultUrl=SystemUrls.getBusinessPath(systemCode);
           if(PropUtils.isBasicSystem(resultUrl)){
               resultUrl = SystemUrls.getSystemUrl("imatrix");
           }
           log.info(" == systemurl : ["+resultUrl+"] == ");
           resultUrl = resultUrl + url+"?companyId="+companyId+"&entityId="+entityId;
           log.info(" == restleturl : ["+resultUrl+"] == ");
           HttpGet httpget = new HttpGet(resultUrl);
           HttpClient httpclient = new DefaultHttpClient();
           ResponseHandler<String> responseHandler = newBasicResponseHandler();
           try {
               httpclient.execute(httpget, responseHandler);
           } catch (ClientProtocolException e) {
               e.printStackTrace();
           } catch (IOException e) {
               e.printStackTrace();
           }
           httpclient.getConnectionManager().shutdown();
        }

    /**
         * RESTful請求
         * @param url
         * @param companyId
         */
        public static void restful(String url,Long companyId,Long entityId,StringsystemCode){
           ClientConfig config = new DefaultClientConfig();
           Client client = Client.create(config);
           String resultUrl = SystemUrls.getSystemUrl(systemCode);
           if(PropUtils.isBasicSystem(resultUrl)){
               resultUrl = SystemUrls.getSystemUrl("imatrix");
           }
           log.info(" == systemurl : ["+resultUrl+"] == ");
           resultUrl = resultUrl + url;
           log.info(" == restleturl : ["+resultUrl+"] == ");
           WebResource service = client.resource(resultUrl);
           ClientResponse cr = service
           .entity("companyId="+companyId+"&entityId="+entityId, MEDIA_TYPE)
           .accept(MEDIA_TYPE)
           .post(ClientResponse.class);
           if(cr != nulllog.info("=========== RESTful execute result : ["+cr.getEntity(String.class)+"]=========== ");
        }

    相似問題

    相關經驗

    相關資訊

    相關文檔

  • sesese色