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