jbpm4.4之待处理任务

2023-12-22 21:58
文章标签 任务 待处理 jbpm4.4

本文主要是介绍jbpm4.4之待处理任务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


jbpm4中已有获取待指定用户处理的任务的方法,如下:
[java] view plain copy
  1. processEngine.getTaskService().findPersonalTasks(用户ID); //获取个人任务  
  2. processEngine.getTaskService().findGroupTasks(用户ID);    //获取所在组任务  

      也可以自己写HQL通过hibernate来将个人任务和分组任务一起查询:

[sql] view plain copy
  1. select task from org.jbpm.pvm.internal.task.TaskImpl task left join task.participations  
  2.  pt where (task.assignee='用户ID' or ( task.assignee is null and pt.type = 'candidate'  
  3.  and ((pt.userId='用户ID'or (pt.groupId in ('分组1','分组2','分组3')))))  

其中用户ID和分组等参数可以通过?方式来传入。

      然而如果系统中有多种业务用到jbpm工作流的话(比如OA中有请假、出差、公文收发等),jbpm4自带的两个方法是获取到的是所有业务的任务,而无法获得每个任务对应的是哪个业务,当然也有偏门的方法,比如通过task中的getExecutionId来判断对应的哪个业务(可以看下附加信息)。

      这样任务对应的业务还是好获取到,系统中一般会将不同业务的任务设置成不同的模块,并且一般获取任务时还需要附带一些对应的业务信息,比如请假任务能看到请假人、请假天数等信息,这些信息在我们通过上面的方法中获取到的任务List中是获取不到的,我们得想办法将这些信息同任务一起展现出来。
      对于这个问题我之前用了一个很别扭的方法,就是先获取到待处理的任务,然后循环去查询每个任务对应的业务信息,最后把任务和业务信息封装在一起,存入List中返回,这样每一次要经过很多的查询,性能大大下降,如果要通过条件查询或者分页等需求就又很麻烦了。
      后来无意间又想到一个方法(知道用HQL查询任务的方法后),何不在这个HQL上再改一下,把业务的表也关联进来,那样不就一次查询就将任务和业务记录绑定起来了,这样通过业务信息进行条件查询、分页查询都很好解决了。
      另外在最近做的一个功能中接触到了优先级这个东东,用于在任务列表中按优先级排序,jbpm4的表中本来有PRIORITY_这个字段,但我没找到合适的方法给它设值,所以我就直接将优先级直接放入业务表中了,正好这个优先级的问题也解决了。
      由于我这项目本身用的框架没用hibernate,所以最终还是直接用SQL来获取待处理任务了,最终的SQL大致如下:

[sql] view plain copy
  1. select it.*,jt.DBID_ as task_id,jt.NAME_ as task_name from itsm_task it left join  
  2.  jbpm4_task jt on it.execution_id = jt.EXECUTION_ID_ left join jbpm4_participation  
  3.  jp on jt.DBID_ = jp.TASK_ where it.status<3 and (jt.ASSIGNEE_ = 'admin' or   
  4. (jt.ASSIGNEE_ is null and jp.TYPE_ = 'candidate' and ((jp.USERID_ = 'admin'or   
  5. (jp.GROUPID_ in('TECH_UNCERTAIN','UNCERTAIN_EMPLOYEE','TECH_EMPLOYEE','admin')))))   
  6.  group by jt.DBID_   


附:
executionService().startProcessInstanceByKey(流程KEY,业务KEY);
在启动流程时可以指定一个业务的KEY,比如:
executionService().startProcessInstanceByKey('INCIDENT','IN0001');
'INCIDENT'是流程定义的KEY,'IN0001'是业务的KEY,这样启动流程创建的Execution的ID则为'INCIDENT-IN0001',如果没有指定业务KEY,则jbpm会默认将Execution的主键(DBID_字段)作为业务KEY。

这篇关于jbpm4.4之待处理任务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/525614

相关文章

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

Linux之计划任务和调度命令at/cron详解

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux计划任务和调度命令at/cron一、计划任务二、命令{at}介绍三、命令语法及功能 :at

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

如何使用Python实现一个简单的window任务管理器

《如何使用Python实现一个简单的window任务管理器》这篇文章主要为大家详细介绍了如何使用Python实现一个简单的window任务管理器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 任务管理器效果图完整代码import tkinter as tkfrom tkinter i

Spring Boot 集成 Quartz 使用Cron 表达式实现定时任务

《SpringBoot集成Quartz使用Cron表达式实现定时任务》本文介绍了如何在SpringBoot项目中集成Quartz并使用Cron表达式进行任务调度,通过添加Quartz依赖、创... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启