零全零美(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 零全零美 閱讀(1924) 評論(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”,修改以后就沒事了 民可以再仔細檢查一下自己的源碼,僅供參考  回復  更多評論
            
          主站蜘蛛池模板: 从化市| 西乌珠穆沁旗| 利津县| 郁南县| 沂源县| 潼南县| 嘉祥县| 萍乡市| 驻马店市| 龙州县| 自贡市| 金溪县| 出国| 揭阳市| 乐平市| 祁连县| 广宁县| 门源| 漠河县| 麟游县| 丘北县| 临西县| 水富县| 岢岚县| 河源市| 阿克| 黎川县| 遂溪县| 聂荣县| 德惠市| 镇平县| 周口市| 佛山市| 枣庄市| 石狮市| 长垣县| 景德镇市| 乌苏市| 梁平县| 新绛县| 介休市|