activiti6.0 java類配置 使用監聽器實現 會簽功能


簡介: 使用activiti 監聽器 實現會簽功能

使用監聽器存儲會簽人員信息,在監聽器啟動時取出會簽人員信息 ,寫入流程變量之中,實現會簽功能。

 

1.用戶任務配置

 1    /**
 2      * 創建用戶任務節點
 3      * 多人審批(會簽)
 4      * sign  是否會簽
 5      * assignee 操作組人員id集合
 6      */
 7     public static UserTask createUsersTask(String id, String name, List<String> assignee,boolean sign){
 8         UserTask userTask = new UserTask();
 9         userTask.setName(name);
10         userTask.setId(id);
11         //會簽 使用監聽器完成
12         if(sign){
13             //編組會簽人員id
14             String assigneeList="";
15             for(String str:assignee){
16                 assigneeList+=str+",";
17             }
18             //去除最后一位逗號
19             assigneeList=assigneeList.substring(0,assigneeList.length()-1);
20 
21             //會簽配置
22             MultiInstanceLoopCharacteristics  multiInstanceLoopCharacteristics1 = new MultiInstanceLoopCharacteristics();
23             //會簽循環次數(等於操作組數量)
24             multiInstanceLoopCharacteristics1.setLoopCardinality(String.valueOf(assignee.size()));
25             //會簽通過條件(通過人數等於審批人數)
26             multiInstanceLoopCharacteristics1.setCompletionCondition("${nrOfActiveInstances == nrOfInstances}");
27             //會簽
28             multiInstanceLoopCharacteristics1.setSequential(false);
29             //審批人集合參數
30             multiInstanceLoopCharacteristics1.setInputDataItem("assigneeList");
31             //迭代集合
32             multiInstanceLoopCharacteristics1.setElementVariable("assignee");
33             //寫入參數
34             userTask.setLoopCharacteristics(multiInstanceLoopCharacteristics1);
35 
36            45 
46             //配置監聽器2
47             ArrayList<ActivitiListener> listener = new ArrayList<>();
48             ActivitiListener activitiListener = new ActivitiListener();
49             //開始執行
50             activitiListener.setEvent("start");
51             //執行方式
52             activitiListener.setImplementationType("class");
53             //實現類
54             activitiListener.setImplementation("com.windseeker.common.activiti.utils.MyTaskListener");
55             //監聽器參數
56             FieldExtension file2=new FieldExtension();
57             //會簽操作組
58             file2.setFieldName("assignee");
59             file2.setStringValue(assigneeList);
60             List<FieldExtension> list2=new ArrayList<>();
61             list2.add(file2);
62             //寫入參數
63             activitiListener.setFieldExtensions(list2);
64             listener.add(activitiListener);
65             userTask.setExecutionListeners(listener);
66 
67             //設置會簽操作組人員配置
68             userTask.setAssignee("${assignee}");
69         }else{
70             //非會簽 直接寫入操作組
71             userTask.setCandidateUsers(assignee);
72         }
73         return userTask;
74     }

 

2.監聽類配置

 1 /**
 2  * activiti 監聽器實現類 5  *
 6  */
 7 public class MyTaskListener implements ExecutionListener{
 8 
 9     /**
10      * 會簽操作組對象
11      */
12     private Expression assignee;
13 
14     public Expression getAssignee() {
15         return assignee;
16     }
17 
18     public void setAssignee(Expression assignee) {
19         this.assignee = assignee;
20     }
21 
57     /**
58      * 會簽功能實現方法
59      * @param delegateTask
60      */
61 
62     @Override
63     public void notify(DelegateExecution delegateTask) {
64         String eventName = delegateTask.getEventName();
65         if ("start".equals(eventName)) {
66             // 流程開始
67             System.out.println("start......");
68         } else if ("end".equals(eventName)) {
69             // 流程結束
70             System.out.println("end......");
71         } else if ("take".equals(eventName)) {
72             // 連線監聽器
73             System.out.println("take......");
74         }
75         // delegateTask 可以操作activiti引擎的一些東西
76 
77         //獲取會簽操作組信息
78         List<String> assigneeList1 = new ArrayList<>();
79         String[] result = assignee.getValue(delegateTask).toString().split(",");
80         for(int k=0;k<result.length;k++){
81             if(!result[k].equals("")){
82                 assigneeList1.add(result[k]);
83             }
84         }
85         //將會簽操作組信息寫入流程實例變量
86         delegateTask.setVariable("assigneeList",assigneeList1);
87 
88     }
93 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM