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());
    }
}

请尽量让自己的答案能够对别人有帮助

1个答案

默认排序 按投票排序