sevencolor  
日历
<2025年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789
统计
  • 随笔 - 0
  • 文章 - 4
  • 评论 - 1
  • 引用 - 0

导航

留言簿

文章档案

搜索

  •  

最新评论

 
 又有客户提出自由流需求,真晕,自由流不就等于没流程吗?还是劝他定个流程吧,上系统了不就是规范公司的流程吗?呵呵

       虽然客户赞同我们的说法,不过私下来还是讨论尝试了对自由流的控制.最早的一个想法是建立几个孤立的没有联系的节点.让客户选择下一步要去的节点,(相当于选择转向).程序根据选择,创建这个节点上的任务.客户操作完任务,程序在负责关上这个任务.

        这样是可以达到效果的.不过就是太不 'jbpm' 了.因为把流程的流转环境被去掉了.所以又想了个'jbpm'点的方法.要想从一个节点到另一个节点.必然要有'转向'连接两个节点.自由流不能在流程没跑起来前知道每个节点的下 一步到哪.只能在运行过程中知道,那我们就当知道的时候在创建两个节点间的转向呗.看看下面的测试代码

 

Java代码 复制代码
  1. package org.jbpm.tutorial.action;   
  2.   
  3. import junit.framework.TestCase;   
  4.   
  5. import org.jbpm.graph.def.ProcessDefinition;   
  6. import org.jbpm.graph.def.Transition;   
  7. import org.jbpm.graph.exe.ProcessInstance;   
  8.   
  9. public class FreeProcessTest extends TestCase {   
  10.       public void testTransitionAction() {   
  11.         ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(   
  12.           "<process-definition>" +   
  13.           "  <start-state>" +   
  14.           "    <transition to='a' />" +   
  15.           "  </start-state>" +   
  16.           "  <state name='a'>" +   
  17.           "  </state>" +   
  18.           "  <state name='b'>" +   
  19.           "    <transition to='c'/>" +   
  20.           "  </state>" +   
  21.           "  <state name='c'>" +   
  22.           "  </state>" +   
  23.           "  <end-state name='end' />" +   
  24.           "</process-definition>"  
  25.         );   
  26.            
  27.         // 创建流程实例   
  28.         ProcessInstance processInstance =    
  29.           new ProcessInstance(processDefinition);   
  30.                   
  31.         // 流转一步到节点a   
  32.         processInstance.signal();   
  33.         assertSame(processDefinition.getNode("a"),    
  34.                 processInstance.getRootToken().getNode());   
  35.            
  36.         //假定客户要从a到c,动态创建a到c的转向   
  37.         Transition leavingTransition=new Transition("a to c");//构建一个a到c的转向   
  38.     //指定该转向的目的节点是c   
  39.         leavingTransition.setTo(processInstance.getProcessDefinition().getNode("c"));   
  40.     //为当前节点添加这个转向.   
  41.         processInstance.getRootToken().getNode().addLeavingTransition(leavingTransition);   
  42.     //调用这个转向流转流程   
  43.         processInstance.signal("a to c");   
  44.     //删除这个临时创建的转向   
  45.         processInstance.getRootToken().getNode().removeLeavingTransition(leavingTransition);   
  46.            
  47.         //测试是否到达c节点了   
  48.         assertSame(processDefinition.getNode("c"),    
  49.                 processInstance.getRootToken().getNode());   
  50.            
  51. //      假定客户要从c到b,动态创建c到b的转向   
  52.         leavingTransition=new Transition("c to b");   
  53.         leavingTransition.setTo(processInstance.getProcessDefinition().getNode("b"));   
  54.         processInstance.getRootToken().getNode().addLeavingTransition(leavingTransition);   
  55.         processInstance.signal("c to b");   
  56.         processInstance.getRootToken().getNode().removeLeavingTransition(leavingTransition);   
  57.            
  58.         assertSame(processDefinition.getNode("b"),    
  59.                 processInstance.getRootToken().getNode());   
  60.            
  61. //      假定客户要从b到c,不用动态创建,已经定义了   
  62.         processInstance.signal();   
  63.         assertSame(processDefinition.getNode("c"),    
  64.                 processInstance.getRootToken().getNode());   
  65.            
  66. //      假定客户要从c到end,动态创建c到end的转向   
  67.         leavingTransition=new Transition("c to end");   
  68.         leavingTransition.setTo(processInstance.getProcessDefinition().getNode("end"));   
  69.         processInstance.getRootToken().getNode().addLeavingTransition(leavingTransition);   
  70.         processInstance.signal("c to end");   
  71.         processInstance.getRootToken().getNode().removeLeavingTransition(leavingTransition);   
  72.   
  73.         assertSame(processDefinition.getNode("end"),    
  74.                    processInstance.getRootToken().getNode());   
  75.            
  76.           
  77.       }   
  78.   
  79. }   
  80.   
  81. 测试通过!这个够'jbpm'了吧.  
posted on 2009-02-20 14:37 蓝七彩 阅读(103) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
 
 
Copyright © 蓝七彩 Powered by: 博客园 模板提供:沪江博客