零全零美(www.zzgwt.com)
生活中的很多事情,并不像If...Else那么简单!
posts - 96,comments - 52,trackbacks - 0
        在阅读本文之前,建议先阅读一下《JBPM源码解读之:Fork》以了解Fork中Script的配置方法及处理方式:
        按照Fork对Script的规范Script必须包含一个具有write权限的变量,而且该变量必须实现java.util.Collection接口。

<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="urn:jbpm.org:jpdl-3.2" name="multiChoice">
    
<start-state name="start">
        
<transition name="" to="a"></transition>
    
</start-state>
    
    
<task-node name="a">
        
<event type="node-enter">
            
<script>System.out.println("---enter node a--");</script>
        
</event>
        
<transition name="" to="multichoice"></transition>
    
</task-node>
    
<fork name="multichoice">
        
<script>
            
<variable name="transitionNames" access="write"></variable>
            
<expression>
                transitionNames = new ArrayList(); 
                if ( scenario == 1 ){ 
                    transitionNames.add( "to b" );
                 } else if ( scenario ==2 ) { 
                     transitionNames.add( "to c" ); 
                 } else if (scenario >= 3 ) {
                     transitionNames.add( "to b" );
                    transitionNames.add( "to c" );
                }
            
</expression>
        
</script>
        
<event type="node-enter">
            
<script>System.out.println("---enter node fork--");</script>
        
</event>
        
<transition name="to b" to="b"></transition>
        
<transition name="to c" to="c"></transition>
    
</fork>
    
<task-node name="b">
        
<event type="node-enter">
            
<script>System.out.println("---enter node b--");</script>
        
</event>
        
<transition name="" to="syncmerge"></transition>
    
</task-node>
    
<task-node name="c">
        
<event type="node-enter">
            
<script>System.out.println("---enter node c--");</script>
        
</event>
        
<transition name="" to="syncmerge"></transition>
    
</task-node>
    
<join name="syncmerge">
        
<event type="node-enter">
            
<script>
                System.out.println("---enter node syncmerge--");
            
</script>
        
</event>
        
<transition name="" to="end"></transition>
    
</join>
    
<end-state name="end">
        
<event type="node-enter">
            
<script>
                System.out.println("---enter node end--");
            
</script>
        
</event>
    
</end-state>
</process-definition>


        附上单元测试代码:

import junit.framework.TestCase;

import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class TestFork extends TestCase {

    
private ProcessDefinition processDefinition;
    
    @Before
    
public void setUp() throws Exception {
        String xmlPath 
= "jbpmTest/fork/jpdl/fork.xml";
        processDefinition 
= ProcessDefinition.parseXmlResource(xmlPath);
    }


    @After
    
public void tearDown() throws Exception {
    }


    @Test
    
public void test() {
        ProcessInstance processInstance 
= new ProcessInstance(processDefinition);
//        processInstance.getContextInstance().setVariable("scenario", new Integer(1));
//        processInstance.getContextInstance().setVariable("scenario", new Integer(2));
        processInstance.getContextInstance().setVariable("scenario"new Integer(3));
        processInstance.signal();
    }

    
}

posted on 2008-11-05 17:05 零全零美 阅读(1891) 评论(4)  编辑  收藏 所属分类: jbpm

FeedBack:
# re: JBPM实践之:使用Fork中的Script实现多路路由选择[未登录]
2009-07-14 10:36 | zhang
你好。我的运行报错。好像是这个地方。
<script>
<variable name="transitionNames" access="write"></variable>
<expression>
transitionNames=new ArrayList();
if(scenario==1){
transitionNames.add("to b" );
}else if ( scenario ==2 ) {
transitionNames.add( "to c" );
}else if (scenario >= 3) {
transitionNames.add( "to b" );
transitionNames.add("to c" );
}
</expression>
</script>

错误提示:
10:33:04,453 [main] WARN Script : exception during evaluation of script expression
Sourced file: inline evaluation of: ``transitionNames=new ArrayList(); if(scenario==1){ transitionNames.add("to b" ); . . . '' : illegal use of undefined variable, class, or 'void' literal : at Line: 1 : in file: inline evaluation of: ``transitionNames=new ArrayList(); if(scenario==1){ transitionNames.add("to b" ); . . . '' : ) {   回复  更多评论
  
# re: JBPM实践之:使用Fork中的Script实现多路路由选择
2009-08-03 14:32 | tomc
要怎么解决?  回复  更多评论
  
# re: JBPM实践之:使用Fork中的Script实现多路路由选择
2009-08-17 21:42 | 阿斯顿
我也遇到了和楼上一样的问题,请问该如何解决呢?等待中。。。  回复  更多评论
  
# re: JBPM实践之:使用Fork中的Script实现多路路由选择
2011-02-23 14:38 | 郑院生
我的也是这个问题 不过我的是因为出了个小错 解释把 access=“write” 写成了acess=“write”,修改以后就没事了 民可以再仔细检查一下自己的源码,仅供参考  回复  更多评论
  

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


网站导航: