posts - 26,  comments - 7,  trackbacks - 0

            作者:sunking

           

          在下面的例子里,我們將向您展示如何能給用戶分配任務。因為在jBPM工作流

          引擎和組織機構(gòu)模型之間是分離的,對計算參與者的表達語言將總是被限制的。

          因此,你必須指定一個任務處理的實現(xiàn),包括計算任務參與者。

           

          public void testTaskAssignment() {
            
          /*
          這個下面展示的業(yè)務是基于hello world業(yè)務之上。
          這個狀態(tài)節(jié)點將被任務節(jié)點取代。這個任務節(jié)點是一個在JPDL中的節(jié)點,它表現(xiàn)為一個等待狀態(tài)和在業(yè)務能繼續(xù)被執(zhí)行之前,生成的任務被完成。
          */
            ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
              "<process-definition name='the baby process'>" +
              "  <start-state>" +
              "    <transition name='baby cries' to='t' />" +
              "  </start-state>" +
              "  <task-node name='t'>" +
              "    <task name='change nappy'>" +
              "      <assignment class='org.jbpm.tutorial.taskmgmt.NappyAssignmentHandler' />" +
              "    </task>" +
              "    <transition to='end' />" +
              "  </task-node>" +
              "  <end-state name='end' />" +
              "</process-definition>"
            );
            
            
          //創(chuàng)建一個業(yè)務定義的執(zhí)行。
            ProcessInstance processInstance = 
                new ProcessInstance(processDefinition);
            Token token = processInstance.getRootToken();
            
            
          /*
          我們啟動業(yè)務執(zhí)行,離開在它缺省轉(zhuǎn)換的啟動狀態(tài)上。
          */
            token.signal();
            
          /*
          這個signal方法將阻止它繼續(xù),直到業(yè)務執(zhí)行進入一個等待狀態(tài)。在這個情況下,這是個任務節(jié)點。
          */
            assertSame(processDefinition.getNode("t"), token.getNode());
           
            
          /*
          當執(zhí)行到達任務節(jié)點,一個任務 ‘change nappy’被創(chuàng)建和
          NappyAssignmentHandler被調(diào)用確定任務被分配給誰。
          NappyAssignmentHandler將返回’papa’.
          */
           
           
          /*
          在真實的環(huán)境里,這個任務被在org.jbpm.db.TaskMgmtSession
          里面的方法從數(shù)據(jù)庫中取出。當我們不想包括例子里的持久化復雜性時,我
          們將取得第一個業(yè)務實例的任務例子。(在測試情節(jié)中我們只有一個實例)
          */
            TaskInstance taskInstance = (TaskInstance)  
                processInstance
                  .getTaskMgmtInstance()
                  .getTaskInstances()
                  .iterator().next();
           
            
          //現(xiàn)在我們檢查是否taskInstance確實被分配給’papa’.
            assertEquals("papa", taskInstance.getActorId() );
            
            
          //現(xiàn)在我們猜想’papa’已經(jīng)完成了職責,標記這個任務完成了。
            taskInstance.end();
            
          //當這些是最后要作的任務時,完成的任務觸發(fā)器將延續(xù)這個業(yè)務實例的執(zhí)行。
           
            
            assertSame(processDefinition.getNode("end"), token.getNode());
          }
          posted on 2007-09-23 16:29 jbpm 閱讀(1180) 評論(0)  編輯  收藏 所屬分類: jbpm實例
          主站蜘蛛池模板: 宝应县| 旺苍县| 山东省| 河曲县| 江孜县| 布尔津县| 延津县| 聊城市| 延吉市| 邮箱| 宁南县| 盱眙县| 清原| 汝城县| 凌海市| 内江市| 五大连池市| 海盐县| 视频| 嵊州市| 资中县| 丹凤县| 鄂托克旗| 中江县| 秦安县| 泰宁县| 仙桃市| 平乐县| 郁南县| 平塘县| 自贡市| 礼泉县| 临洮县| 昌平区| 环江| 阳江市| 通化市| 长阳| 老河口市| 怀远县| 南宫市|