有关动态创建两节点之间转向的测试

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

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

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

 

package org.jbpm.tutorial.action;

import junit.framework.TestCase;

import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.def.Transition;
import org.jbpm.graph.exe.ProcessInstance;

public class FreeProcessTest extends TestCase {
      public void testTransitionAction() {
        ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
          "<process-definition>" +
          "  <start-state>" +
          "    <transition to='a' />" +
          "  </start-state>" +
          "  <state name='a'>" +
          "  </state>" +
          "  <state name='b'>" +
          "    <transition to='c'/>" +
          "  </state>" +
          "  <state name='c'>" +
          "  </state>" +
          "  <end-state name='end' />" +
          "</process-definition>"
        );
        
        // 创建流程实例
        ProcessInstance processInstance = 
          new ProcessInstance(processDefinition);
               
        // 流转一步到节点a
        processInstance.signal();
        assertSame(processDefinition.getNode("a"), 
                processInstance.getRootToken().getNode());
        
        //假定客户要从a到c,动态创建a到c的转向
        Transition leavingTransition=new Transition("a to c");//构建一个a到c的转向
	//指定该转向的目的节点是c
        leavingTransition.setTo(processInstance.getProcessDefinition().getNode("c"));
	//为当前节点添加这个转向.
        processInstance.getRootToken().getNode().addLeavingTransition(leavingTransition);
	//调用这个转向流转流程
        processInstance.signal("a to c");
	//删除这个临时创建的转向
        processInstance.getRootToken().getNode().removeLeavingTransition(leavingTransition);
        
        //测试是否到达c节点了
        assertSame(processDefinition.getNode("c"), 
                processInstance.getRootToken().getNode());
        
//      假定客户要从c到b,动态创建c到b的转向
        leavingTransition=new Transition("c to b");
        leavingTransition.setTo(processInstance.getProcessDefinition().getNode("b"));
        processInstance.getRootToken().getNode().addLeavingTransition(leavingTransition);
        processInstance.signal("c to b");
        processInstance.getRootToken().getNode().removeLeavingTransition(leavingTransition);
        
        assertSame(processDefinition.getNode("b"), 
                processInstance.getRootToken().getNode());
        
//      假定客户要从b到c,不用动态创建,已经定义了
        processInstance.signal();
        assertSame(processDefinition.getNode("c"), 
                processInstance.getRootToken().getNode());
        
//      假定客户要从c到end,动态创建c到end的转向
        leavingTransition=new Transition("c to end");
        leavingTransition.setTo(processInstance.getProcessDefinition().getNode("end"));
        processInstance.getRootToken().getNode().addLeavingTransition(leavingTransition);
        processInstance.signal("c to end");
        processInstance.getRootToken().getNode().removeLeavingTransition(leavingTransition);

        assertSame(processDefinition.getNode("end"), 
                   processInstance.getRootToken().getNode());
        
       
      }

}

测试通过!这个够'jbpm'了吧.
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值