零全零美(www.zzgwt.com)
          生活中的很多事情,并不像If...Else那么簡單!
          posts - 96,comments - 52,trackbacks - 0
                  在閱讀本文之前,建議先閱讀一下《JBPM源碼解讀之:Fork》以了解Fork中Script的配置方法及處理方式:
                  按照Fork對(duì)Script的規(guī)范Script必須包含一個(gè)具有write權(quán)限的變量,而且該變量必須實(shí)現(xiàn)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>


                  附上單元測(cè)試代碼:

          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 零全零美 閱讀(1934) 評(píng)論(4)  編輯  收藏 所屬分類: jbpm

          FeedBack:
          # re: JBPM實(shí)踐之:使用Fork中的Script實(shí)現(xiàn)多路路由選擇[未登錄]
          2009-07-14 10:36 | zhang
          你好。我的運(yùn)行報(bào)錯(cuò)。好像是這個(gè)地方。
          <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>

          錯(cuò)誤提示:
          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" ); . . . '' : ) {   回復(fù)  更多評(píng)論
            
          # re: JBPM實(shí)踐之:使用Fork中的Script實(shí)現(xiàn)多路路由選擇
          2009-08-03 14:32 | tomc
          要怎么解決?  回復(fù)  更多評(píng)論
            
          # re: JBPM實(shí)踐之:使用Fork中的Script實(shí)現(xiàn)多路路由選擇
          2009-08-17 21:42 | 阿斯頓
          我也遇到了和樓上一樣的問題,請(qǐng)問該如何解決呢?等待中。。。  回復(fù)  更多評(píng)論
            
          # re: JBPM實(shí)踐之:使用Fork中的Script實(shí)現(xiàn)多路路由選擇
          2011-02-23 14:38 | 鄭院生
          我的也是這個(gè)問題 不過我的是因?yàn)槌隽藗€(gè)小錯(cuò) 解釋把 access=“write” 寫成了acess=“write”,修改以后就沒事了 民可以再仔細(xì)檢查一下自己的源碼,僅供參考  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 绍兴市| 九龙坡区| 四子王旗| 图们市| 镇平县| 蚌埠市| 汾阳市| 湘乡市| 大邑县| 美姑县| 启东市| 怀化市| 安龙县| 毕节市| 云龙县| 阿克陶县| 奉新县| 余干县| 南靖县| 甘南县| 九台市| 云霄县| 维西| 隆子县| 高青县| 兴海县| 景德镇市| 邮箱| 通城县| 石河子市| 梁山县| 贺兰县| 牡丹江市| 得荣县| 疏附县| 新巴尔虎左旗| 固阳县| 巴林右旗| 昭觉县| 云龙县| 措勤县|