溫馨提示:您的每一次轉載,體現了我寫此文的意義!!!煩請您在轉載時注明出處http://www.aygfsteel.com/sxyx2008/謝謝合作!!!

          雪山飛鵠

          溫馨提示:您的每一次轉載,體現了我寫此文的意義!!!煩請您在轉載時注明出處http://www.aygfsteel.com/sxyx2008/謝謝合作!!!

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            215 Posts :: 1 Stories :: 674 Comments :: 0 Trackbacks
          流程定義文件
          <?xml version="1.0" encoding="UTF-8"?>

          <process-definition
            
          xmlns="urn:jbpm.org:jpdl-3.2"  name="forkjoin">
             
          <start-state name="開始">
                
          <transition name="to join" to="fork"></transition>
             
          </start-state>
             
          <fork name="fork">
                   
          <script>
                       
          <variable name="transitionNames" access="write"></variable>
                       
          <expression>
                           transitionNames=new ArrayList();
                           if(param>100){
                               transitionNames.add("to node1");
                               transitionNames.add("to node2");
                           }else{
                               transitionNames.add("to node3");
                               transitionNames.add("to node4");
                           }
                       
          </expression>
                   
          </script>
                
          <transition name="to node1" to="node1"></transition>
                
          <transition name="to node2" to="node2"></transition>
                
          <transition name="to node3" to="node3"></transition>
                
          <transition name="to node4" to="node4"></transition>
             
          </fork>
             
          <join name="join">
                
          <transition name="to 結束" to="結束"></transition>
             
          </join>
             
          <end-state name="結束"></end-state>
             
          <node name="node1">
                
          <transition name="to join" to="join"></transition>
                
          <event type="node-enter">
                    
          <script>
                        print("經過"+node.getName());
                    
          </script>
                
          </event>
             
          </node>
             
          <node name="node2">
                
          <transition name="to join" to="join"></transition>
                
          <event type="node-enter">
                    
          <script>
                        print("經過"+node.getName());
                    
          </script>
                
          </event>
             
          </node>
             
          <node name="node3">
                
          <transition name="to join" to="join"></transition>
                
          <event type="node-enter">
                    
          <script>
                        print("經過"+node.getName());
                    
          </script>
                
          </event>
             
          </node>
             
          <node name="node4">
                
          <transition name="to join" to="join"></transition>
                
          <event type="node-enter">
                    
          <script>
                        print("經過"+node.getName());
                    
          </script>
                
          </event>
             
          </node>
          </process-definition>

          工作機制:是通過在fork節點添加<script></script>標簽,在script內部設置
          <variable name="transitionNames" access="write"></variable>切記此處access屬性設置為write

          <expression>
                  transitionNames=new ArrayList();
                  if(param>100){
                   transitionNames.add("to node1");
                   transitionNames.add("to node2");
                  }else{
                   transitionNames.add("to node3");
                   transitionNames.add("to node4");
                  }
          </expression>
          上面在流程實例上下文中定義了一個變量param,當param大于100時,執行node1和node2節點
          測試一下:
          package com.jbpm;

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


          public class TestForkJoin {
              
              
          public static void main(String[] args) {
                  ProcessDefinition processDefinition
          =ProcessDefinition.parseXmlResource("forkjoin/processdefinition.xml");
                  ProcessInstance processInstance
          =new ProcessInstance(processDefinition);
                  processInstance.getContextInstance().setVariable(
          "param"200);
                  
          //processInstance.signal();
                  System.err.println("當前節點是:"+processInstance.getRootToken().getNode().getName());
                  processInstance.signal();
                  System.err.println(
          "當前節點是:"+processInstance.getRootToken().getNode().getName());
              }
          }
          運行結果
          當前節點是:開始
          11:44:07,703 [main] DEBUG GraphElement : event 'before-signal' on 'StartState(開始)' for 'Token(/)'
          11:44:07,703 [main] DEBUG GraphElement : event 'node-leave' on 'StartState(開始)' for 'Token(/)'
          11:44:07,718 [main] DEBUG GraphElement : event 'transition' on 'Transition(to join)' for 'Token(/)'
          11:44:07,718 [main] DEBUG GraphElement : event 'node-enter' on 'Fork(fork)' for 'Token(/)'
          11:44:07,719 [main] DEBUG Script : script input: {node=Fork(fork), param=200, token=Token(/), task=null, executionContext=ExecutionContext[Token(/)], taskInstance=null}
          11:44:07,814 [main] DEBUG Script : script output: {transitionNames=[to node1, to node2]}
          11:44:07,830 [main] DEBUG GraphElement : event 'node-leave' on 'Fork(fork)' for 'Token(/to node1)'
          11:44:07,830 [main] DEBUG GraphElement : event 'transition' on 'Transition(to node1)' for 'Token(/to node1)'
          11:44:07,830 [main] DEBUG GraphElement : event 'node-enter' on 'Node(node1)' for 'Token(/to node1)'
          11:44:07,830 [main] DEBUG GraphElement : executing action 'Script(10f6d3)'
          11:44:07,830 [main] DEBUG Token : token[0] is locked by token[0]
          11:44:07,830 [main] DEBUG Script : script input: {node=Node(node1), param=200, token=Token(/to node1), task=null, executionContext=ExecutionContext[Token(/to node1)], taskInstance=null}
          經過node1
          11:44:07,861 [main] DEBUG Script : script output: {}
          11:44:07,861 [main] DEBUG Token : token[0] is unlocked by token[0]
          11:44:07,861 [main] DEBUG GraphElement : event 'node-leave' on 'Node(node1)' for 'Token(/to node1)'
          11:44:07,861 [main] DEBUG GraphElement : event 'transition' on 'Transition(to join)' for 'Token(/to node1)'
          11:44:07,861 [main] DEBUG GraphElement : event 'node-enter' on 'Join(join)' for 'Token(/to node1)'
          11:44:07,861 [main] DEBUG Join : join will not yet reactivate parent: found concurrent token 'Token(/to node2)'
          11:44:07,861 [main] DEBUG GraphElement : event 'node-leave' on 'Fork(fork)' for 'Token(/to node2)'
          11:44:07,861 [main] DEBUG GraphElement : event 'transition' on 'Transition(to node2)' for 'Token(/to node2)'
          11:44:07,861 [main] DEBUG GraphElement : event 'node-enter' on 'Node(node2)' for 'Token(/to node2)'
          11:44:07,861 [main] DEBUG GraphElement : executing action 'Script(cfec48)'
          11:44:07,861 [main] DEBUG Token : token[0] is locked by token[0]
          11:44:07,861 [main] DEBUG Script : script input: {node=Node(node2), param=200, token=Token(/to node2), task=null, executionContext=ExecutionContext[Token(/to node2)], taskInstance=null}
          經過node2
          posted on 2011-06-16 11:45 雪山飛鵠 閱讀(1315) 評論(0)  編輯  收藏 所屬分類: jbpm4
          主站蜘蛛池模板: 镇平县| 彭泽县| 五寨县| 潼关县| 天柱县| 明星| 景洪市| 定陶县| 铜鼓县| 乡宁县| 小金县| 陇西县| 历史| 西峡县| 马尔康县| 灵台县| 景谷| 宁蒗| 桐柏县| 桦甸市| 诏安县| 鹿邑县| 万源市| 临沧市| 屯昌县| 宜丰县| 包头市| 阿瓦提县| 湟源县| 化州市| 安溪县| 曲麻莱县| 竹山县| 东丰县| 奉节县| 教育| 全州县| 永胜县| 正蓝旗| 肥东县| 晴隆县|