一般我们设计流程都需要考虑退回问题,这样,较多的转移路径被设计。
我们可以考虑一般简单行的回退问题:即在明确各个流程回退的路径下,我们可以设置动态路径。
如图:
使用了动态回退后
呵呵,相对简单一些。流程也好看一些。
现在分析一下思路:
1.需要设置退回的监听器,在流程运行的时候,自动创建退回的路径
2.封装退回任务的调用。
。
具体的设计:
1流程设计
在task节点下添加监听器,设置回退路径m_rollbackTo:
<on event="start">
<event-listener class="com.shangwang.workFlow.RollbackListener">
<field name="m_rollbackTo">
<string value="申请"/>
</field>
</event-listener>
</on>
2.完成监听器的退回路径创建:
/**
* 增加一条用户退回的路径
*/
public void notify(EventListenerExecution execution) throws Exception {
//获取流程定义对象
ProcessInstance processInstance = execution.getProcessInstance();
String processDefinitionId = processInstance.getProcessDefinitionId();
ProcessDefinitionImpl processDefinition = (ProcessDefinitionImpl) processEngine.getRepositoryService().createProcessDefinitionQuery().processDefinitionId(processDefinitionId).uniqueResult();
//获取退回目的地的活动定义对象
ActivityImpl toActivityImpl = processDefinition.findActivity(m_rollbackTo);
//退回活动目的地不存在,流程定义错误
if(null == toActivityImpl){
String ms = "in "+processDefinitionId+" no "+ m_rollbackTo;
throw new Exception(ms);
}
//获得当前活动的定义对象
ActivityImpl fromActivityImpl = ((ExecutionImpl)execution).getActivity();
//建立退回的转移路径
TransitionImpl transtion = fromActivityImpl.createOutgoingTransition();
String tranName = fromActivityImpl.getName() + "to " + m_rollbackTo;
transtion.setName(tranName);
transtion.setDestination(toActivityImpl);
//removeOutgoingTransition(transition);
}
需要注意的是RollbackListener是实现org.jbpm.api.listener.EventListener接口,实现notify()方法。
3.封装退回任务的调用,编写了一个TaskRollbackService的服务:
//获取流程引擎
private static final ProcessEngine processEngine = Configuration.getProcessEngine();
//获取任务服务
private static final TaskService taskService = processEngine.getTaskService();
public void completeTaskRollback(String taskId,String rollbackToActName){
Task task = taskService.getTask(taskId);
taskService.completeTask(task.getId(),task.getActivityName()+"to "+rollbackToActName);
}
调用的时候注意一下参数传递:taskId是流程ID,rollbackToActName是回退路径!
分享到:
相关推荐
jbpm4.4流程确定的情况下,有时候完成了一个步骤人数不确定,在任务发布的时候有领导确定参与完成的人员,动态设置参与人数
使用JBoss jBPM实现流程访问和执行的授权
jbpm教程、jbpm动态设置参与者、jbpm实例下载
jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍
通过查看JBPM的表,我们知道要实现流程监控功能就是把JBPM当中的JBPM_PROCESSDEFINITION(已发布的流程表),JBPM_PROCESSINSTANCE(流程实例表),JBPM_TASKINSTANCE(流程产生的任务实例表)这三张表串联起来就可以...
\jbpm简介\jbpm简介\jbpm简介\jbpm简介\jbpm简介
通过jbpm源码分析jbpm引擎内核工作原理
jbpm jbpm4.3.jar DDDDDDDD
jbpm 数据库jbpm 数据库jbpm 数据库jbpm 数据库jbpm 数据库
JBPM流程监控的实现过程
jbpm使用案例,非常不错,大家都来看看吧。
本文件从JBPM的原理、实现方法、实例等方面详细讲解了JBPM的原理,包括以下内容: 1、JBPM特色: 3 2、流程图的组成: 3 2.1流转 (TRANSITION) 3 2.2活动 (ACTIVITY) 3 3、所用到的表: 4 3.1资源库与运行时表结构:...
jBPM4的PVM实现解析
直市场解决方案(VMS)是NAVTEQ公司中的一个机构,负责为客户提供定制的解决方案,...在本文中,我将讨论如何使用JBoss中间件平台来构建这样的系统,尤其是使用JBoss ESB和jBPM(JBoss Business Process Management)。
jbpm应用开发指面(胡奇) jbpm4.3表结构和表字段说明 [jBPM开发指南].高杰.文字版 jBPM5_用户手册-中文版
jbpm4源码jbpm4源码jbpm4源码
jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库
JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS 希望对大家有帮助。
一个JBPM工作流例子,JBPM实现销售批复
JBPM是JBOSS公司的一个开源工作流产品,它功能强大,商业工作流所提供的功能它基本上都有。然而在JBPM中没有提供流程监控的功能的相关API,这点让很多使用JBPM做企业应用的开发人员颇为头疼。