Activiti7-5-个人任务

1.分配任务负责人

1.1 固定分配

	简而言之,就是在进行业务流程建模的时候指定固定的任务负责人

在这里插入图片描述
其中Assignee就是任务负责人


1.2 UEL表达式分配

	Activiti使用UEL表达式,UEL是javaEE6规范的一部分,UEL(Unified Expression Language) 即统一表达式语言
	,activiti支持两个UEL表达式:UEL-value和UEL-method

1.2.1 UEL-value 方式:

在这里插入图片描述
就是一个${} 的这种方式,部门经理审批这个流程的处理人 是在程序之中动态分配的
在这里插入图片描述
user也是activiti的一个流程变量,user.assignee标识通过调用user的getter方法获取值,这其实类似javaee种的el表达式,相信学过javaee的朋友都不陌生。

1.2.2 UEL-method方式:

在这里插入图片描述
holidayBean是spring容器中的一个bean,标识调用该bean的getHolidayId()方法

1.2.3示例

1.首先前提:环境准备
2.复制一份资源文件bpmn和png文件:holiday2.bpmn、holiday2.png
3.在复制的资源文件流程图中通过UEL表达式设置好参数key
在这里插入图片描述
图中0 1 2的意思是UEL表达式中的key 分别是 assignee0、assignee1、assignee2

4.然后启动前面的流程部署,将这个复制的流程进行部署

public static void main(String[] args){
        //main方法用于测试
        //1.创建ProcessEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //2.得到RepositoryService实例
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //3.进行部署
        Deployment deployment = repositoryService.createDeployment()
                .addClasspathResource("diagram/holiday2.bpmn") //添加bpmn资源
                .addClasspathResource("diagram/holiday2.png")
                .name("请假申请流程")
                .deploy();
        //4.输出部署信息
        System.out.println(deployment.getName());
        System.out.println(deployment.getId());
    }

5.启动流程实例,动态设置assignee

 public static void main(String[] args){
        //1.获得引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        //2.获得RunTimeSerice
        RuntimeService runtimeService = processEngine.getRuntimeService();

        //3.设置assignee的取值,用户可以在界面设置流程执行人
        Map<String,Object> map = new HashMap<String, Object>();
        //map中的key就是UEL表达式中的key
        map.put("assignee0","zhangsan");
        map.put("assignee1","lisi");
        map.put("assignee2","wangwu");

        //4.启动流程实例,同时还要设置流程定义的assignee的值
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holiday2", map);

        //5.输出
        System.out.println(processInstance.getName());
    }

结果应该是个null,但没报错就是好事。
接下来检查一下库里面的act_ru_identitylink这张表,应该会有一条处于zhangsan的记录,那就证明UEL表达式成功了。

1.3 监听器分配

任务监听器是发生对应的任务相关事件时执行自定义Java逻辑或表达式
任务事件包括:
在这里插入图片描述

事件触发时机
Create任务创建后触发
Assignment任务分配后触发
Delete任务完成后触发
All所有事件发生都触发

接下来为了测试重新创建一份资源文件 holiday3.bpmn和holiday3.png
在这里插入图片描述
在绘制流程图的时候可以看到
在这里插入图片描述
event默认就是create,type指定一个class,当监听器触发工作,要去调用一个类,第三个选项就是解决问题的类,选择即可,当然也是有要求的,作为监听器的类,该类要实现TaskListener接口,并实现notify方法,分配任务执行人。具体参考下面示例

public class AssigneeByListener implements TaskListener {
    public void notify(DelegateTask delegateTask) {
    	System.out.println("触发了测试监听器");
        delegateTask.setAssignee("zhangsan");
    }
}

注意这个类要在流程图的listener里面指定好噢!
然后部署,这个其实调以前的类换一下参数即可,但我还是贴了出来

 public static void main(String[] args){
        //main方法用于测试
        //1.创建ProcessEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //2.得到RepositoryService实例
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //3.进行部署
        Deployment deployment = repositoryService.createDeployment()
                .addClasspathResource("diagram/holiday3.bpmn") //添加bpmn资源
                .addClasspathResource("diagram/holiday3.png")
                .name("请假申请流程")
                .deploy();
        //4.输出部署信息
        System.out.println(deployment.getName());
        System.out.println(deployment.getId());
    }

然后启动流程实例即可这样启动的时候就会触发监听器,从而执行方法设置处理人

public static void main(String[] args){
        //1.获得引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //2.得到runtimeService
        RuntimeService runtimeService = processEngine.getRuntimeService();
        //3.准备启动流程实例,同时指定业务标识businessKey,其本身就是请假单id
        ProcessInstance instance = runtimeService.startProcessInstanceByKey("holiday3", "1001");
        System.out.println(instance.getBusinessKey());
    }

运行之后,在控制台能看到输出即成功
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值