JBPM 4.4 流程節點詳解

1.       流程定義節點

a)       <processname=”” xmlns=”” key=””, version=””>

b)       name

                        i.             流程定義的名稱;

c)        key

                        i.             流程關鍵字(鍵值);

                      ii.             如果默認不寫key值,就是name值;

                     iii.             在程序通過key值去啓動一個流程實例;

d)       version

                        i.             必須在數據庫中存入指定版本號;

                      ii.             如果版本之前已經存在,報錯;

                     iii.             不指定,數據庫完成自增;

e)       xmlns

                        i.             引入schema約束,編寫文件提示效果;

                      ii.             配置該文件會有提示;

                     iii.             解壓目錄src/jpdl-4.4.xsd;

2.        transition流轉節點:(指向線條)

a)       節點適用

                        i.             一個活動可以指定一個或多個transition節點;

                      ii.             start只能有一個transition流轉節點;

                     iii.             end沒有;

                    iv.             活動可以添加transition流轉,可以添加一個或多個

3.       transition流轉選擇;

a)       通過TaskService完成時指定

                        i.             完成任務時,指定任務流轉節點名稱;

                      ii.             適用於當前正在執行任務,

            taskService.complateTask(任務id, transition名字);

b)       示例

        

public voidtestTransitionByTaskService() {
       //獲取流程實例對學校
       ProcessInstanceprocessInstance =
                processEngine.getExecutionService()
                .startProcessInstanceByKey("transition");          
       //獲取任務對象
       Task task = processEngine.getTaskService()
                .createTaskQuery()
                .processInstanceId(processInstance.getId())
                .uniqueResult();
       System.out.println(task.getId());
       //下一步流程的transitionName
       String transitionName = "to 審覈【經理】";
       //控制下一步流轉
       //傳入當前任務的id,下一個節點的name                  processEngine.getTaskService()
                .completeTask(task.getId(), transitionName);
}


c)        通過ExecutionService指定

                        i.             用於狀態停留節點(state),無任務;

    

executionService.singalExecutionById(執行id, transition名字)
processEngine.getExecutionService().signalExecutionById("transition.10001",transitionName);

                      ii.             執行id獲取方法

1.        jbpm4_execution表的id字段;

2.        ProcessInstance#getId():執行流程獲取id

d)       示例

public voidtestTransitionTest() {
       //下一個流程執行節點name
       String transitionName = "to 審覈【經理】";           processEngine.getExecutionService()
         .signalExecutionById("transition.10001", transitionName);
}

4.       start

a)       開始節點

5.       end

a)       結束節點

b)       end-cancel

                        i.             取消結束;

c)        end-error

                        i.             異常結束節點

6.        task任務節點

a)       條件

                        i.             存在負責人,由指定的負責人進行任務的辦理;

                      ii.             Assignment--->assignee

b)       指定負責人的方式

                        i.             繪圖時指定(個人、#{變量名}

                      ii.             通過<task>中添加<assignment-handler class=””>指定類;

7.        task任務——指定個人

a)       繪圖時指定

        Assignment--->assignee---->個人名稱

b)       缺點

                        i.             與人就行耦合,人離職就不能使用了;

c)        通過變量指定

            Assignment--->assignee---->#{變量名}

d)       運行中,通過變量指定負責人

                        i.             定義Map變量;

                      ii.             通過executionServiceTaskService設置;

e)       示例

dKJRKeBYBAAA&bo=DgIXAAAAAAAFADg!

Map<String, Object> assigne = new HashMap<String, Object>();
assigne.put("userName", "張三"); 
processEngine.getExecutionService().startProcessInstanceByKey("task", assigne);


8.       task任務——指定類

a)       方式

                        i.             <task>中添加<assignment-handler class=””>指定類;

b)       

                        i.             實現接口AssignmentHandler

c)        重寫方法

                        i.             assign(assignable,openExecution)

d)       參數

                        i.             assignable:指定負責人的

1.        assignable.setAssignee(負責人)

                      ii.             openExecution:獲取變量的;

1.        .getVariable();

e)       好處

                        i.             可以有效控制任務的負責人;

                      ii.             可以添加邏輯;

f)        示例

public class AssignmentHandlerTest implements AssignmentHandler{
 
   @Override
   public void assign(Assignable assignable,
       OpenExecution openExecution) throws Exception {
       //通過獲取變量指定
//     String userName=(String)openExecution.getVariable("userName");
//     assignable.setAssignee(userName);               
       assignable.setAssignee("李四");
   }
}


9.       task任務——強制指定負責人

a)       用途

                        i.             當前任務已經有負責人了,強制更換負責人;

                      ii.             可以在任務完成之前的任何時候;

b)       方式

        taskService.assignTask(任務id,負責人)

c)        示例

        processEngine.getTaskService().assignTask("30010""王五");

10.   組任務candidate---多用戶(繪圖)

a)       用途

                       i.             存在一個任務,該任務由指定一組人來完成;

                     ii.             組內任何人都可以完成;

b)       方式

                       i.             繪圖時:Assignment----type---candidate-user

                     ii.             Assignment----expression---多個用戶之間“,”隔開;

                   iii.             小王,小麗,小六

                    iv.              dEQwjeJYRAAA&bo=KgI2AAAAAAAFAD0!

c)       jbpm4_participation

                       i.             多用戶數據被存在於jbpm4_participation中;

                     ii.             jbpm4_task表中當前任務沒有負責人;

d)       查詢組任務

                       i.             taskService.findGroupTasks(組中定義的用戶名之一)

dK8dh.JWRAAA&bo=KgKtAAAAAAAFAKY!

e)       拾取任務

        taskService.takeTask(任務id,任務負責人)

                       i.             任務被拾取後,其它人將不可再次查詢,拾取

                     ii.             組任務被拾取後,就變成個人任務了,不再是組任務;

f)        拾取任務後操作

                       i.             自己完成;

                     ii.             改變任務負責人

                   iii.             將任務歸還任務組;

g)       改變任務負責人

        taskService.assignTask(任務id,其它用戶);

h)       將任務歸還任務組

        taskService.assignTask(任務idnull);

i)         查詢個人任務

        findPersonalTask();

11.   組用戶——多用戶(assignment-handler)

a)       <task>節點,添加

        <assignment-handlerclass=””>

b)       組用戶類

                       i.             實現AssignmentHandler接口;

                     ii.             重寫方法assign(assignable, openExecution)

c)       添加組用戶

        assignable.addCandidate(用戶之一);

d)       實例

public class GroupTaskAssignmentHandler implements AssignmentHandler{
       @Override
       public void assign(Assignable assignable,
                      OpenExecution openExecution) throwsException {
                //指定組內候選人
                assignable.addCandidateUser("一毛");
                assignable.addCandidateUser("二毛");
                assignable.addCandidateUser("三毛");
       }
}


12.   組任務—已存在組添加用戶:

a)       添加方法

public void  testTaskGroupAssignPersonal() {
     String user = "四毛";
     //將任務指派給組內某個成員
           processEngine.getTaskService().addTaskParticipatingUser("80009",
                    user, Participation.CANDIDATE);
}

13.   state

a)       狀態節點

                        i.             自動完成的一些任務的節點;

                      ii.             同其它節點的執行;

14.   decision判斷節點:

a)       作用

                        i.             主要用於分支情況;

                      ii.             根據 自定義方式控制節點的流轉;

b)       handler class :

                        i.             指定判斷類;

                      ii.             實現接口:DecisionHandler

                     iii.             重寫方法decide()

                    iv.             參數openExcution

1.        用於獲得流程運行過程中的一些變量;

2.        .getVarable(“變量name”);

                      v.             返回值:

1.        下一個流程節點的“name

c)        實例

                        i.             DecisionHandler

public class DecisionHandlerTest implements DecisionHandler{
 
@Override
public Stringdecide(OpenExecution openExecution) {
         //獲取參數
         double money = (Double)openExecution.getVariable("money");
         if(money< 10000) {
                  return "to結束";
         } else{
                  return "to審批【總經理】";
         }
}
}


15.   fork/join分支、合併節點:

a)       作用:

                        i.             表示並行的、一定要執行的任務;

                      ii.             fork分支後,一定要用join將分支合併;

b)       整個任務必須所有的分支都執行完畢,方可完成;



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章