JBPM4.4实现一种无需指定上一节点(previous activity)的流程驳回(回退)

本文介绍了一种JBPM4流程引擎中的通用驳回实现方法,通过动态创建Transition实现任务回退,无需指定具体节点名称,适用于单一回退路径场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文旨在讨论,这样一种驳回应用,“你从哪里来,就回到哪里去,我无需知道你从哪里来”

JBPM4的驳回通过动态生成Transition来实现,但是在生成这个Transition的时候是需要设置source(源)和destination(目标),也就是说如果要回退到原来的节点,你必须清楚的知道原来的节点的名字,将其设置为这个 Transition的“目标”即可。那么,能不能实现“你从哪里来,就回到哪里去”无需指定上一节点的名称的应用呢?请看:

 

/**
 * “驳回”任务命令
 * 该驳回命令优点在于无需指定上一步骤的节点名称(previous activity),只能用于那些只有一条返回路径的回退应用场景
 * @author ningjinlin
 *
 */
public class RegectTaskSingleBackWayCmd extends AbstractCommand<String>{

	private static final long serialVersionUID = 3407992369612709993L;

	private String taskId;
	
	public RegectTaskSingleBackWayCmd(String taskId) {
		super();
		this.taskId = taskId;
	}
	
	@Override
	public String execute(Environment env) throws Exception {
		TaskService taskService = env.get(TaskService.class);
		TaskImpl currentTask = (TaskImpl)taskService.getTask(taskId);
		ExecutionImpl exec = currentTask.getProcessInstance();
		//获取当前任务的活动节点
		ActivityImpl currentActivity = exec.getActivity();
		//获取该活动节点的IncomingTransition
		TransitionImpl incomingTransition = (TransitionImpl)currentActivity.getIncomingTransitions().get(0);
		//获取IncomingTransition的源活动节点
		ActivityImpl sourceActivity = incomingTransition.getSource();
		
		TransitionImpl backTransition = currentActivity.createOutgoingTransition();
		
		//当前活动节点为新的回退Transition的源,而原来的“源”活动节点变成了目标活动节点
		backTransition.setSource(currentActivity);
		backTransition.setDestination(sourceActivity);
		backTransition.setName("regect "+incomingTransition.getName());
		taskService.completeTask(taskId,backTransition.getName());
		return sourceActivity.getName();
	}

}

 

 

 在你的Service方法中调用proccessEngine.execute(new RegectTaskSingleBackWayCmd(taskId));
通过获取当前任务实例的Activity的IncomingTransition,从而获取到Source Activity,实现无需指定上一步骤的节点名称,来实现这种通用型驳回,带来的好处就是,你无需给所有那些需要驳回功能的步骤添加一个独特的回退方法,它们可以共用一个回退方法

 

 

 

长沙废品回收www.0731fphs.com

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值