環節的辦理前、辦理后事件處理。
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());
}
}
|