jbpm4中已有获取待指定用户处理的任务的方法,如下:
-
processEngine.getTaskService().findPersonalTasks(用户ID);
-
processEngine.getTaskService().findGroupTasks(用户ID);
也可以自己写HQL通过hibernate来将个人任务和分组任务一起查询:
-
select
task
from
org.jbpm.pvm.internal.task.TaskImpl task
left
join
task.participations
-
pt where
(task.assignee=
'用户ID'
or
( task.assignee
is
null
and
pt.type =
'candidate'
-
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大致如下:
-
select
it.*,jt.DBID_
as
task_id,jt.NAME_
as
task_name
from
itsm_task it
left
join
-
jbpm4_task jt on
it.execution_id = jt.EXECUTION_ID_
left
join
jbpm4_participation
-
jp on
jt.DBID_ = jp.TASK_
where
it.status<3
and
(jt.ASSIGNEE_ =
'admin'
or
-
(jt.ASSIGNEE_ is
null
and
jp.TYPE_ =
'candidate'
and
((jp.USERID_ =
'admin'
)
or
-
(jp.GROUPID_ in
(
'TECH_UNCERTAIN'
,
'UNCERTAIN_EMPLOYEE'
,
'TECH_EMPLOYEE'
,
'admin'
)))))
-
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是该框架的一个版本,它提供了强大的工作流服务,包括流程定义、流程实例管理、任务处理、事件处理以及规则集成等。在这个入门开发实例中,我们将探讨如何利用jBPM4.4进行业务流程的建模、部署和执行。 **一...
Task类则表示一个待处理的工作项,包含任务详情和相关操作。 4. **变量管理**:流程实例和任务中可以包含变量,用于存储和传递数据。VariableInstance接口提供了访问和修改这些变量的方法。 5. **事件处理**:JBPM...
2. **任务处理**:当流程到达某个任务节点时,系统会创建一个待办任务,用户可以通过接口完成任务,如同意或拒绝请假申请。 3. **流程跟踪**:使用jbpm提供的监控工具,可以查看流程实例的状态,包括当前所在节点、...
**jbpm4.4开发实例详解** jbPM(Java Business Process Management)是一个开源的工作流管理系统,专注于业务流程的建模、执行和监控。jbPM 4.4版本是该框架的一个重要里程碑,提供了丰富的功能和改进,使得开发者...
标题中的“JBPM4.4实现一种无需指定上一节点(previous activity)的流程驳回(回退)”是指在使用JBPM(Java Business Process Management)4.4版本时,设计了一个特殊的流程控制机制,允许用户在执行流程过程中进行回...
6. **我的任务列表**:在jbpm中,每个用户可能有多个待处理的任务。"我的任务列表"功能展示了当前登录用户所分配到的任务,用户可以据此进行任务处理,如审批、完成等操作。 7. **流程实例管理**:项目还可能包含...
查询结果可以包含所有待处理的任务,也可以进一步过滤,如根据任务状态或任务名称。一旦找到需要的任务,可以通过调用`TaskService`的`complete()`方法来完成任务,这将触发流程实例的下一步动作。 总的来说,JBPM...
jbpm4.4版本包含了对流程定义、任务分配、事件处理、异常处理等功能,使得开发者可以方便地构建和管理复杂的业务流程。 2. **工作流定义**:jbpm使用Business Process Execution Language for Java (BPEL)或jbpm...
**jBPM4.4请假流程JavaWeb完全版** jBPM(Java Business Process Management)是一个开源的工作流和业务流程管理框架,它允许开发者在Java应用程序中实现复杂的业务流程。jBPM4.4是该框架的一个较早版本,但仍然...
//*****candidate-groups="#{dev}" 采用JBPM用户组进行处理任务 //*****assignee="manager" 采用指定manager用户进行处理任务 经理审批"/> ,217,92,52" name="经理审批"> ,-8" name="批准" to="exclusive1"/> ...
在实际的源码中,"jbpm4.4_0400_completesample"可能是一个示例项目目录,其中包含了jbpm的工作流配置、S2SH的工程结构以及对应的数据库脚本。你可以在其中查看jbpm的配置文件(如jbpm.cfg.xml),学习如何配置工作...
- **TaskNode任务节点**:这类节点则使用该阶段处理的具体任务名称作为名字,如“审核文档”、“确认订单”等,避免使用状态名称,特别是在涉及初始状态(start-state)时,以防混淆。 #### 3. jBPM事件体系 jBPM...
流程沟通使得用户在处理任务时,可以通知相关人员并请求其提供意见。这种沟通不影响任务的正常执行。 1.1.9 泳道 在流程图中,泳道主要用于视觉区分,但Activiti中泳道并不影响流程执行,仅作为辅助理解流程的工具...
- **查询个人任务列表**:查看当前用户待办的任务列表。 - **办理任务**:完成特定的任务。 #### 七、Activiti框架的核心Service对象 Activiti提供了多个核心Service对象,用于操作不同的流程组件: - **...
1.4. Seam 和jBPM:待办事项列表(todo list)示例..................................................................................................... 32 1.4.1. 理解代码....................................