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

http://blog.csdn.net/songzheng_741/article/details/17289633

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

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


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

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

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public class Log implements JavaDelegate {  
  2.   
  3.     public void execute(DelegateExecution execution) throws Exception {  
  4.         System.err.println("如果我出现了,就说明我没被忽略");  
  5.           
  6.     }  
  7.       
  8. }  

控制流向的代码如下
[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. System.out.println("直接跳过ServiceTask的流程开始..................");  
  2.   
  3. RepositoryService repositoryService = activitiRule.getRepositoryService();  
  4.   
  5. ProcessDefinition processDefinition =   
  6.         repositoryService.createProcessDefinitionQuery().deploymentId("1").singleResult();  
  7.   
  8. ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService)  
  9.         .getDeployedProcessDefinition(processDefinition.getId());  
  10.   
  11. List<ActivityImpl> activities = processDefinitionEntity.getActivities();  
  12.   
  13. ActivityImpl start = null;  
  14. ActivityImpl task = null;  
  15. ActivityImpl end = null;  
  16.   
  17.   
  18. for (ActivityImpl activity : activities) {  
  19.     if (activity.getId().equals("startevent1")) {  
  20.         start = activity;  
  21.     }  
  22.     if (activity.getId().equals("usertask1")) {  
  23.         task = activity;  
  24.     }  
  25.     if (activity.getId().equals("endevent1")) {  
  26.         end = activity;  
  27.     }  
  28. }  
  29. //清除原先的路径  
  30. List<PvmTransition> cacheTran = start.getOutgoingTransitions();  
  31. start.getOutgoingTransitions().clear();  
  32. //创建新路径  
  33. TransitionImpl tran = start.createOutgoingTransition();  
  34. tran.setDestination(end);  
  35.   
  36. RuntimeService runtimeService = activitiRule.getRuntimeService();  
  37. runtimeService.startProcessInstanceById(processDefinitionEntity.getProcessDefinition().getId());  
  38.   
  39. //恢复原来路径  
  40. start.getOutgoingTransitions().clear();  
  41. for (PvmTransition transition : cacheTran) {  
  42.     start.createOutgoingTransition().setDestination((ActivityImpl) transition.getDestination());  
  43. }  
这样ServiceTask将被跳过不会自动执行

当注释掉

start.getOutgoingTransitions().clear();

serviceTask将被执行.



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


原文地址:https://www.cnblogs.com/bluejoe/p/5115897.html