随着对iMatrix平台的进一步认识,下面是对环节属性中的事件处理的进一步研究,给大家分享下,
环节的办理前、办理后事件处理。
1 提交前:
iMatrix平台的提交前执行url:用于交互完成任务,比如下一环节的办理人需要当前环节的办理人选择确定,选完办理人后调用交互完成任务的api completeInteractiveWorkflowTask完成任务。
执行方法:设置任务完成前需要执行的处理类,在该类中可以对业务数据做处理等。处理类需要实现的接口为com.norteksoft.wf.engine.client.BeforeTaskSubmit。“spring bean的名称“表示设置对应处理类在spring容器中的bean名。当办理前接口返回true时,则任务正常办理;返回false时,任务将不能够正常完成,同时办理任务返回结果MESSAGE,其消息内容为设置的”执行失败后提示信息“(表示提示当前办理人的信息)。
代码解析如下:
TaskService.java中的complete方法是完成任务的最终实现方法,提交时关于事件的处理代码如下:
private CompleteTaskTipType complete(WorkflowTask task, TaskProcessingResult operation,TaskSetting setting){
… … … …
//办理前是否需要指定办理人。如果设置了提交前执行url,则以下代码返回值为枚举类CompleteTaskTipType .RETURN_URL,同时将设置的url放在该枚举的content变量中。
result = getBeforeTaskSubmitUrl(task,operation,setting);
… … … …
//办理前执行事件处理
result = beforSubmit(task,operation);
… … … …
}
红色字体代码段为:获得执行的bean名称、获得spring容器中的bean、执行该bean中的方法。
private CompleteTaskTipType beforSubmit(WorkflowTask task, TaskProcessingResult operation){
… … … …
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){
return CompleteTaskTipType.MESSAGE.setContent(DefinitionXmlParse.getBeforeTaskSubmitResultMessage(wi.getProcessDefinitionId(), task.getName()));
}
}
return null;
}
2 提交后:
设置任务完成时需要执行的处理类 ,在该类中可以对业务数据做处理等。处理类需要实现的接口为com.norteksoft.wf.engine.client.AfterTaskCompleted。“spring bean的名称“表示设置对应处理类在spring容器中的bean名。
代码解析如下:
private CompleteTaskTipType complete(WorkflowTask task, TaskProcessingResult operation,TaskSetting setting){
… … … …
result=executionCompanyTask(task, operation,setting);
… … … …
}
private CompleteTaskTipType executionCompanyTask(WorkflowTask task, TaskProcessingResult operation,TaskSetting setting){
… … … …
completeTaskTipType = completeWfTask(instance,task, parentExecutionId);
… … … …
}
Private CompleteTaskTipType completeWfTask(WorkflowInstance instance,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)){
AfterTaskCompleted bean = (AfterTaskCompleted) ContextUtils.getBean(beanName);
if(bean==null){log.debug("任务完成后执行bean时,bean不能为null");throw new RuntimeException("任务完成后执行bean时,bean不能为null");}
bean.execute(instance.getDataId(), task.getTaskProcessingResult());
}
}