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

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

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

Activti跳过中间节点的helloworld实例程序_第1张图片

我们现在的要实现的是直接跳过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将被执行.



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

你可能感兴趣的:(Activti跳过中间节点的helloworld实例程序)