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



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


  • 相关阅读:
    Linux内核参数信息(Oracle相关)
    Android和java平台 DES加密解密互通程序及其不能互通的原因
    [置顶] ※数据结构※→☆线性表结构(queue)☆============循环队列 顺序存储结构(queue circular sequence)(十)
    理解 Thread.Sleep 函数
    引导加载程序:GRUB
    xvfb 初步探究
    [置顶] 中国象棋程序的设计与实现(原始版)(包含源码)
    Ext图表的精彩
    JSTL解析——004——core标签库03
    Servlet API中文版
  • 原文地址:https://www.cnblogs.com/bluejoe/p/5115897.html
Copyright © 2011-2022 走看看