论坛首页 Java企业应用论坛

对iMatrix平台流程引擎事件处理之环节事件处理的进一步见解

浏览 2351 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-07-30   最后修改:2013-07-30



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

 

  • 大小: 83.3 KB
  • 大小: 16.9 KB
   发表时间:2013-07-30  
流程里面嵌入的事件处理函数或者脚本的处理结果和计算参数要从前面的节点过来,请问这个情况,是否考虑过呢?
0 请登录后投票
   发表时间:2013-07-31  
comsci 写道
流程里面嵌入的事件处理函数或者脚本的处理结果和计算参数要从前面的节点过来,请问这个情况,是否考虑过呢?

能说的具体点吗?没看懂什么意思
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics