zoukankan      html  css  js  c++  java
  • 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将被执行.



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


  • 相关阅读:
    Nodejs中的流
    Openstack Havana的两个排错过程
    Mongoose入门
    Promise
    CSS3中的动画
    MySql学习笔记(一)--安装配置
    应用Dubbo框架打造仿猫眼项目(二) 影片模块开发
    应用Dubbo框架打造仿猫眼项目(一) 用户模块开发
    4种事务的隔离级别
    JAVA面试题解惑系列(一)——类的初始化顺序
  • 原文地址:https://www.cnblogs.com/bluejoe/p/5115897.html
Copyright © 2011-2022 走看看