Activti跳过中间节点的helloworld实例程序

此实例是一个最简单的在运行时人为动态改变流程运转的实例,意在为任意流、驳回等功能抛砖引玉.

定义一个最简单的流程,它只有一个“开始事件”、一个“ServiceTask”、一个“结束事件”.


我们现在的要实现的是直接跳过ServiceTask。

ServiceTask的实现类只是简单的在控制台输出一条语句.

public class Log implements JavaDelegate {

	public void execute(DelegateExecution execution) throws Exception {
		System.err.println("如果我出现了,就说明我没被忽略");
		
	}
	
}

控制流向的代码如下
		
		System.out.println("直接跳过ServiceTask的流程开始..................");
		
		RepositoryService repositoryService = activitiRule.getRepositoryService();
	
		ProcessDefinition processDefinition = 
				repositoryService.createProcessDefinitionQuery().deploymentId("1").singleResult();
		
		ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService)
				.getDeployedProcessDefinition(processDefinition.getId());
		
		List<ActivityImpl> activities = processDefinitionEntity.getActivities();
		
		ActivityImpl start = null;
		ActivityImpl task = null;
		ActivityImpl end = null;
		
		
		for (ActivityImpl activity : activities) {
			if (activity.getId().equals("startevent1")) {
				start = activity;
			}
			if (activity.getId().equals("usertask1")) {
				task = activity;
			}
			if (activity.getId().equals("endevent1")) {
				end = activity;
			}
		}
		//清除原先的路径
		List<PvmTransition> cacheTran = start.getOutgoingTransitions();
		start.getOutgoingTransitions().clear();
		//创建新路径
		TransitionImpl tran = start.createOutgoingTransition();
		tran.setDestination(end);
		
		RuntimeService runtimeService = activitiRule.getRuntimeService();
		runtimeService.startProcessInstanceById(processDefinitionEntity.getProcessDefinition().getId());
		
		//恢复原来路径
		start.getOutgoingTransitions().clear();
		for (PvmTransition transition : cacheTran) {
			start.createOutgoingTransition().setDestination((ActivityImpl) transition.getDestination());
		}
		
	
这样ServiceTask将被跳过不会自动执行

当注释掉

start.getOutgoingTransitions().clear();

serviceTask将被执行.



这种方法只会影响一个流程实例的流程定义的内存镜像,其他流程不会受到影响.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值