posts - 26,  comments - 7,  trackbacks - 0

            作者:sunking

           

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

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

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

           

          public void testTaskAssignment() {
            
          /*
          這個下面展示的業務是基于hello world業務之上。
          這個狀態節點將被任務節點取代。這個任務節點是一個在JPDL中的節點,它表現為一個等待狀態和在業務能繼續被執行之前,生成的任務被完成。
          */
            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>"
            );
            
            
          //創建一個業務定義的執行。
            ProcessInstance processInstance = 
                new ProcessInstance(processDefinition);
            Token token = processInstance.getRootToken();
            
            
          /*
          我們啟動業務執行,離開在它缺省轉換的啟動狀態上。
          */
            token.signal();
            
          /*
          這個signal方法將阻止它繼續,直到業務執行進入一個等待狀態。在這個情況下,這是個任務節點。
          */
            assertSame(processDefinition.getNode("t"), token.getNode());
           
            
          /*
          當執行到達任務節點,一個任務 ‘change nappy’被創建和
          NappyAssignmentHandler被調用確定任務被分配給誰。
          NappyAssignmentHandler將返回’papa’.
          */
           
           
          /*
          在真實的環境里,這個任務被在org.jbpm.db.TaskMgmtSession
          里面的方法從數據庫中取出。當我們不想包括例子里的持久化復雜性時,我
          們將取得第一個業務實例的任務例子。(在測試情節中我們只有一個實例)
          */
            TaskInstance taskInstance = (TaskInstance)  
                processInstance
                  .getTaskMgmtInstance()
                  .getTaskInstances()
                  .iterator().next();
           
            
          //現在我們檢查是否taskInstance確實被分配給’papa’.
            assertEquals("papa", taskInstance.getActorId() );
            
            
          //現在我們猜想’papa’已經完成了職責,標記這個任務完成了。
            taskInstance.end();
            
          //當這些是最后要作的任務時,完成的任務觸發器將延續這個業務實例的執行。
           
            
            assertSame(processDefinition.getNode("end"), token.getNode());
          }
          posted on 2007-09-23 16:29 jbpm 閱讀(1191) 評論(0)  編輯  收藏 所屬分類: jbpm實例
          主站蜘蛛池模板: 房山区| 昌邑市| 阿克苏市| 宜兴市| 磐石市| 达孜县| 淮北市| 义马市| 武夷山市| 民权县| 舒城县| 通山县| 梁山县| 内乡县| 厦门市| 阿拉善盟| 胶南市| 铜陵市| 新晃| 县级市| 浙江省| 西乌珠穆沁旗| 永泰县| 耿马| 济宁市| 海原县| 和平县| 桦川县| 惠东县| 武安市| 缙云县| 竹山县| 青川县| 山西省| 扬中市| 武陟县| 丹棱县| 吉首市| 柳江县| 荔浦县| 镇平县|