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



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


  • 相关阅读:
    php网摘收藏
    php优秀网摘
    jquery ajax thinkphp异步局部刷新完整流程
    easyui的accordion为动态生成,accordion的onSelect方法中又动态生成tree,为什么要第二次选择accordion,tree才生成出来
    php导出CSV文件时身份证号码显示为科学计数的解决方法
    php导出数据到excel,防止身份证等数字字符格式变成科学计数的方法
    JQuery实战教程即将面市
    在windows+apache环境下安装ioncube
    PHP长文章分页 实现手动分页代码 代码简单
    DEDE非内容页调用自定义字段使用方法
  • 原文地址:https://www.cnblogs.com/bluejoe/p/5115897.html
Copyright © 2011-2022 走看看