• iMatrix平臺流程引擎之環節事件處理

    0
    Java .NET C/C++ 流程引擎 ci 720 次瀏覽
    環節的辦理前、辦理后事件處理。
    1 提交前:
    提交前執行url:用于交互完成任務,比如下一環節的辦理人需要當前環節的辦理人選擇確定,選完辦理人后調用交互完成任務的api  completeInteractiveWorkflowTask完成任務。
    執行方法:設置任務完成前需要執行的處理類,在該類中可以對業務數據做處理等。處理類需要實現的接口為com.norteksoft.wf.engine.client.BeforeTaskSubmit。“spring bean的名稱“表示設置對應處理類在spring容器中的bean名。當辦理前接口返回true時,則任務正常辦理;返回false時,任務將不能夠正常完成,同時辦理任務返回結果MESSAGE,其消息內容為設置的”執行失敗后提示信息“(表示提示當前辦理人的信息)。
    代碼解析如下:
    TaskService.java中的complete方法是完成任務的最終實現方法,提交時關于事件的處理代碼如下:
    private CompleteTaskTipTypecomplete(WorkflowTask task, TaskProcessingResult operation,TaskSettingsetting){
    … … … …
    //辦理前是否需要指定辦理人。如果設置了提交前執行url,則以下代碼返回值為枚舉類CompleteTaskTipType .RETURN_URL,同時將設置的url放在該枚舉的content變量中。
    result = getBeforeTaskSubmitUrl(task,operation,setting);
    … … … …
    //辦理前執行事件處理
    result = beforSubmit(task,operation);
    … … … …
    }
    紅色字體代碼段為:獲得執行的bean名稱、獲得spring容器中的bean、執行該bean中的方法。
             privateCompleteTaskTipType beforSubmit(WorkflowTask task, TaskProcessingResultoperation){
    … … … …
    String beanName =DefinitionXmlParse.getBeforeTaskSubmitImpClassName(wi.getProcessDefinitionId(),task.getName());
    if(StringUtils.isNotEmpty(beanName)){
    BeforeTaskSubmit obj = (BeforeTaskSubmit) ContextUtils.getBean(beanName);
    if(obj==null){
    log.debug("執行任務提交前事件 時,bean不能為null");
    throw new RuntimeException("執行任務提交前事件 時,bean不能為null");
    }
    boolean result = obj.execute(wi.getDataId(),operation);
    if(!result){
              returnCompleteTaskTipType.MESSAGE.setContent(DefinitionXmlParse.getBeforeTaskSubmitResultMessage(wi.getProcessDefinitionId(),task.getName()));
                                }
                       }
                       return null;
             }
    2 提交后:
    設置任務完成時需要執行的處理類 ,在該類中可以對業務數據做處理等。處理類需要實現的接口為com.norteksoft.wf.engine.client.AfterTaskCompleted。“spring bean的名稱“表示設置對應處理類在spring容器中的bean名。
    代碼解析如下:
    private CompleteTaskTipType complete(WorkflowTasktask, TaskProcessingResult operation,TaskSetting setting){
    … … … …
    result=executionCompanyTask(task,operation,setting);
    … … … …
    }
    private CompleteTaskTipTypeexecutionCompanyTask(WorkflowTask task, TaskProcessingResult operation,TaskSettingsetting){
    … … … …
    completeTaskTipType = completeWfTask(instance,task,parentExecutionId);
    … … … …
    }
    Private  CompleteTaskTipType  completeWfTask(WorkflowInstanceinstance,WorkflowTask task, String parentExecutionId){
    … … … …
    completeTask(task);
    … … … …
    }
    private void completeTask(WorkflowTask task){
    .. … … …
    executeAfterTaskCompleted(task);
    }
    紅色字體代碼段為:獲得執行的bean名稱、獲得spring容器中的bean、執行該bean中的方法。
    private void executeAfterTaskCompleted(WorkflowTask task){
    … … … …
    String beanName = DefinitionXmlParse.getAfterTaskCompletedBean(
             instance.getProcessDefinitionId(),task.getName());
           if(!StringUtils.isEmpty(beanName)){
               AfterTaskCompletedbean = (AfterTaskCompleted) ContextUtils.getBean(beanName);
               if(bean==null){log.debug("任務完成后執行bean時,bean不能為null");throw new RuntimeException("任務完成后執行bean時,bean不能為null");}
               bean.execute(instance.getDataId(),task.getTaskProcessingResult());
        }
    }

    相似問題

    相關經驗

    相關資訊

    相關文檔

  • sesese色