• 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将被执行.



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


  • 相关阅读:
    Java学习:Scanner类
    Java学习:Object类
    js 方法
    ToDictionary
    goto
    删除多列同时重复数据
    linq中使用case when
    sql 学习笔记
    VS2012发布网站详细步骤
    由于权限不足而无法读取配置文件出现的HTTP 500.19解决办法
  • 原文地址:https://www.cnblogs.com/bluejoe/p/5115897.html
Copyright © 2020-2023  润新知