这里我用用户任务的监听器来配置对应的候选人与候选组。
1、创建监听器类(MyTaskListener)
在 example 包中创建 MyTaskListener 监听器类:
监听类内容:
package com.jjf.activiti.example;
import com.google.common.collect.Lists;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyTaskListener implements TaskListener {
private static final Logger LOGGER = LoggerFactory.getLogger(MyTaskListener.class);
public void notify(DelegateTask delegateTask) {
String eventName = delegateTask.getEventName(); //获取event值
if(StringUtils.equals("create",eventName)){
LOGGER.info("config by listener");
//配置对应的UserTask信息
delegateTask.addCandidateUsers(Lists.newArrayList("user1","user2")); //配置对应的UserTask信息,添加候选用户
delegateTask.addCandidateGroup("group1");
delegateTask.setVariable("key1","value1");
delegateTask.setDueDate(DateTime.now().plusDays(3).toDate()); //设定截止日期为当前时间后推迟3天
}else if(StringUtils.equals("complete",eventName)){
LOGGER.info("task complete");
}
}
}
这里我配置了两个事件类型,一个是 create 另一个为 complete 。如果是创建则日志打印输出“config by listener”,并且添加user1、user2用户、group1用户组与参数,最后设定截止日期为当前时间后推迟3天。当eventName为complete类型则日志打印输出“task complete”。
2、配置流程定义文件(my-process-usertask2.bpmn20.xml)
首先在resource下创建 my-process-usertask2.bpmn20.xml 流程定义文件:
其中流程定义文件内容如下:
<process id="my-process">
<startEvent id="start"/>
<sequenceFlow id="flow1" sourceRef="start" targetRef="userTask" />
<userTask id="userTask" name="User Task">
<extensionElements>
<!-- 当这个UserTask创建的时候去设置一些他的属性 -->
<activiti:taskListener event="create" class="com.jjf.activiti.example.MyTaskListener"/>
<activiti:taskListener event="complete" class="com.jjf.activiti.example.MyTaskListener"/>
</extensionElements>
</userTask>
<sequenceFlow id="flow2" sourceRef="userTask" targetRef="end" />
<endEvent id="end"/>
</process>
这个配置文件中在 extensionElements 标签内添加了两个taskListener,第一个event类型为create,对应的类路径为我们第一步创建的 MyTaskListener 监听器类,第二个event类型为complete,class类路径也为 MyTaskListener 监听器类。
3、在测试类中定义测试方法(UserTaskTest)
我在上篇博文中定义的 UserTaskTest 类中添加用户任务监听器的测试方法:
@Test
@Deployment(resources = {"my-process-usertask2.bpmn20.xml"})
public void testUserTask2() {
activitiRule.getRuntimeService().startProcessInstanceByKey("my-process"); //启动my-process流程
TaskService taskService = activitiRule.getTaskService();
Task task = taskService.createTaskQuery().taskCandidateUser("user1").singleResult();
LOGGER.info("find by user1 task = {}" , task);
taskService.complete(task.getId()); //将这个流程结束掉才会输出MyTaskListener中的eventName=“complete”的日志信息
}
4、测试输出结果
输出结果如下: