news 2026/5/14 21:16:46

Activiti7工作流(七)个人任务

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Activiti7工作流(七)个人任务

文章目录

    • 1、分配任务负责人
      • 1.1、固定分配
      • 2.2、动态分配--表达式分配
        • 2.2.1、UEL 表达式
        • 2.2.2、编写代码配置负责人
        • 2.2.3、注意事项
      • 2.3、动态分配--监听器分配
    • 2、查询任务
      • 2.1、查询任务负责人的待办任务
      • 2.2、关联 businessKey
    • 3、办理任务

1、分配任务负责人

1.1、固定分配

在进行业务流程建模时指定固定的任务负责人, 如图:

并在 properties 视图中,填写 Assignee 项为任务负责人。实际工作中,固定分配任务负责人用的很少,只当作了解。

2.2、动态分配–表达式分配

由于固定分配方式,任务只管一步一步执行任务,执行到每一个任务将按照 bpmn 的配置去分配任务负责人。

2.2.1、UEL 表达式

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

  1. UEL-value 定义

如图:

assignee 这个变量是 activiti 的一个流程变量,

或者使用这种方式定义:

如图:

user 也是 activiti 的一个流程变量, user.assignee 表示通过调用 user 的 getter 方法获取值。

  1. UEL-method 方式
    如图:


userBean 是 spring 容器中的一个 bean,表示调用该 bean 的 getUserId()方法。

  1. UEL-method 与 UEL-value 结合

再比如:

${ldapService.findManagerForEmployee(emp)}

ldapService 是 spring 容器的一个 bean,findManagerForEmployee 是该 bean 的一个方法,emp 是 activiti

流程变量, emp 作为参数传到 ldapService.findManagerForEmployee 方法中。

  1. 其它

表达式支持解析基础类型、 bean、 list、 array 和 map,也可作为条件判断。

如下:

${order.price>100&&order.price<250}
2.2.2、编写代码配置负责人
  1. 定义任务分配流程变量

如图:

  1. 设置流程变量

在启动流程实例时设置流程变量,如下:

/** * 设置流程负责人 */@TestpublicvoidassigneeUEL(){// 获取流程引擎ProcessEngineprocessEngine=ProcessEngines.getDefaultProcessEngine();// 获取 RuntimeServiceRuntimeServiceruntimeService=processEngine.getRuntimeService();// 设置assignee的取值,用户可以在界面上设置流程的执行Map<String,Object>assigneeMap=newHashMap<>();assigneeMap.put("assignee0","张三");assigneeMap.put("assignee1","李经理");assigneeMap.put("assignee2","王总经理");assigneeMap.put("assignee3","赵财务");// 启动流程实例,同时还要设置流程定义的assignee的值runtimeService.startProcessInstanceByKey("myEvection1",assigneeMap);// 输出System.out.println(processEngine.getName());}

执行成功后,可以在act_ru_variable表中看到刚才map中的数据

2.2.3、注意事项

由于使用了表达式分配,必须保证在任务执行过程表达式执行成功,比如:

某个任务使用了表达式${order.price > 100 && order.price < 250},当执行该任务时必须保证 order 在

流程变量中存在,否则 activiti 异常。

2.3、动态分配–监听器分配

可以使用监听器来完成很多Activiti流程的业务。

使用监听器的方式来指定负责人,在流程设计时就不需要指定assignee。

任务监听器是发生对应的任务相关事件时执行自定义 java 逻辑 或表达式。

任务相当事件包括:

Event的选项包含:

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

定义任务监听类,且类必须实现 org.activiti.engine.delegate.TaskListener 接口

publicclassMyTaskListenerimplementsTaskListener{@Overridepublicvoidnotify(DelegateTaskdelegateTask){if(delegateTask.getName().equals("创建出差申请")&&delegateTask.getEventName().equals("create")){//这里指定任务负责人delegateTask.setAssignee("张三");}}}

DelegateTask对象的内容如下:

注意事项

使用监听器分配方式,按照监听事件去执行监听类的 notify 方法,方法如果不能正常执行也会影响

任务的执行。

2、查询任务

2.1、查询任务负责人的待办任务

代码如下:

// 查询当前个人待执行的任务@TestpublicvoidfindPersonalTaskList(){ProcessEngineprocessEngine=ProcessEngines.getDefaultProcessEngine();// 流程定义keyStringprocessDefinitionKey="myEvection1";// 任务负责人Stringassignee="张三";// 获取TaskServiceTaskServicetaskService=processEngine.getTaskService();List<Task>taskList=taskService.createTaskQuery().processDefinitionKey(processDefinitionKey).includeProcessVariables().taskAssignee(assignee).list();for(Tasktask:taskList){System.out.println("----------------------------");System.out.println("流程实例id: "+task.getProcessInstanceId());System.out.println("任务id: "+task.getId());System.out.println("任务负责人: "+task.getAssignee());System.out.println("任务名称: "+task.getName());}}

2.2、关联 businessKey

  • 需求:

在 activiti 实际应用时,查询待办任务可能要显示出业务系统的一些相关信息。

比如:查询待审批出差任务列表需要将出差单的日期、 出差天数等信息显示出来。

出差天数等信息在业务系统中存在,而并没有在 activiti 数据库中存在,所以是无法通过 activiti 的 api 查询到出差天数等信息。

  • 实现:

在查询待办任务时,通过 businessKey(业务标识 )关联查询业务系统的出差单表,查询出出差天数等信息。

//在查询待办任务时,通过 businessKey(业务标识 )关联查询业务系统的出差单表,查询出出差天数等信息。/** * 查询个人待办任务 关联businesskey */@TestpublicvoidfindProcessinstance(){ProcessEngineprocessEngine=ProcessEngines.getDefaultProcessEngine();RuntimeServiceruntimeService=processEngine.getRuntimeService();TaskServicetaskService=processEngine.getTaskService();// 查询张三的个人的待办任务 查询结果是一个 任务对象Tasktask=taskService.createTaskQuery().processDefinitionKey("myEvection1").taskAssignee("张三").singleResult();// 通过个人task任务对象 查询流程实例idStringprocessInstanceId=task.getProcessInstanceId();// 通过流程实例id 查询流程实例对象ProcessInstanceprocessInstance=runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();// 通过流程实例对象,查询关联的bussinesskeyStringbusinessKey=processInstance.getBusinessKey();System.out.println("businessKey=="+businessKey);}

3、办理任务

注意:在实际应用中,完成任务前需要校验任务的负责人是否具有该任务的办理权限

/** * 完成任务,判断当前用户是否有权限 */@TestpublicvoidcompletTask2(){//任务idStringtaskId="42502";// 任务负责人Stringassingee="jack";//获取processEngineProcessEngineprocessEngine=ProcessEngines.getDefaultProcessEngine();// 创建TaskServiceTaskServicetaskService=processEngine.getTaskService();// 完成任务前,需要校验该负责人可以完成当前任务// 校验方法:// 根据任务id和任务负责人查询当前任务,如果查到该用户有权限,就完成Tasktask=taskService.createTaskQuery().taskId(taskId).taskAssignee(assingee).singleResult();if(task!=null){taskService.complete(taskId);System.out.println("完成任务");}}


“人的一生会经历很多痛苦,但回头想想,都是传奇”。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 6:59:22

Langchain-Chatchat问答系统灰度期间服务限流策略

Langchain-Chatchat问答系统灰度期间服务限流策略 在企业逐步将大模型技术引入内部知识管理系统的当下&#xff0c;一个现实问题始终萦绕在架构师心头&#xff1a;如何在不牺牲数据安全的前提下&#xff0c;让AI服务稳定可用&#xff1f;尤其是当Langchain-Chatchat这类本地化R…

作者头像 李华
网站建设 2026/5/14 9:33:45

Langchain-Chatchat能否支持文档版本历史管理?

Langchain-Chatchat能否支持文档版本历史管理&#xff1f; 在企业知识系统日益智能化的今天&#xff0c;一个看似简单却至关重要的问题浮出水面&#xff1a;当一份政策文件、技术手册或合同文本被反复修改更新时&#xff0c;我们能否回溯它的“前世今生”&#xff1f;特别是在使…

作者头像 李华
网站建设 2026/5/14 21:14:12

(9-1)智能编程助手(IDA Pro+VS Code+MCP):背景介绍+系统配置

在本章介绍的项目中&#xff0c;实现了一款专为IDA Pro逆向工程工具设计的MCP&#xff08;Model Context Protocol&#xff09;服务器&#xff0c;通过JSON-RPC协议实现IDA Pro与外部工具&#xff08;如VS Code、Cline、Roo Code 等&#xff09;的无缝集成&#xff0c;支持自动…

作者头像 李华
网站建设 2026/5/10 19:39:09

Langchain-Chatchat文档解析任务并行执行优化

Langchain-Chatchat 文档解析任务并行执行优化 在企业级智能问答系统日益普及的今天&#xff0c;一个核心挑战逐渐浮现&#xff1a;如何高效处理用户上传的大批量、多格式私有文档&#xff1f;尤其是在构建基于本地知识库的检索增强生成&#xff08;RAG&#xff09;系统时&…

作者头像 李华
网站建设 2026/5/3 12:59:32

教授专栏191 |齐晔: 全球气候行动何去何从?

今年11月初&#xff0c;当近六万名气候活动家和195个国家和地区的谈判代表涌入巴西贝伦市时&#xff0c;他们对贝伦大会的期待远远超过了对这座陌生、偏远且略带神秘的亚马孙城市的好奇。他们期望第30届联合国气候变化框架公约缔约方会议&#xff08;UNFCCC COP30&#xff09;成…

作者头像 李华
网站建设 2026/5/14 18:59:25

如何作为数据科学家使用 ChatGPT

原文&#xff1a;如何作为数据科学家使用 ChatGPT 整个世界都听说过 ChatGPT&#xff0c;但根据最近的一条新闻 研究&#xff0c;只有 2%的人每天使用它。 我每天作为数据科学家用它做很多事情。它确实在某些方面提高了我的生产力 2 倍。 在这篇文章中&#xff0c;我想解释我…

作者头像 李华