BPMN2.0学习——(5)BPMN2.0流程任务(用户任务的监听器配置)

这里我用用户任务的监听器来配置对应的候选人与候选组。

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、测试输出结果

输出结果如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青山孤客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值