1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Activiti(新手)工作流对用户任务签收办理操作

Activiti(新手)工作流对用户任务签收办理操作

时间:2021-07-12 02:08:14

相关推荐

Activiti(新手)工作流对用户任务签收办理操作

首先是我们已经对Activiti流程的开启有了了解之后,在进行下文

流程中用到最多的就是用户任务了,包括谁办理,什么时候办理,办理结果是什么,办理历史等等

下文先介绍下用户任务的办理相关操作

用户任务分类:

分为4中状态:未签收/待办理、已签收/办理中、运行中/办理中、已完成/已办结

首先,我们要了解下 TaskService 这个服务的作用:

1、查询分配给用户或组的任务

2、创建独立运行任务。这些任务与流程实例无关。

3、手工设置任务的执行者,或者这些用户通过何种方式与任务关联。

4、认领并完成一个任务。认领意味着一个人期望成为任务的执行者, 即这个用户会完成这个任务。完成意味着“做这个任务要求的事情”。 通常来说会有很多种处理形式。

状态:

通过TaskService来获得任务

API简述

从类 org.activiti.engine.impl.ServiceImpl 继承的字段

所有已实现的接口:TaskService

TaskService taskService = processEngine.getTaskService();

//这边我定义了几个通用 变量

//String userId = "Ypp";

//String userGroup = new String["Ypp1","Ypp101"];

1、未签收/待办理

那么流程开启之后,如何能让下一个办理人取得待办任务呢?

通过下面几种的方法,将取得指定签收人/办理人的待办数据

//单人待签收/待办理

List<Task> tasks = taskService.createTaskQuery().taskCandidateUser(userId).list();

//用户组待签收/待办理

List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup(userGroup).list();

//进行签收操作,也就是将要接收办理这个任务

//这边可以使用循环,也可以通过其他方法,常用的是先加载一个任务待办列表到页面上,签收任务传递后台一个taskId

//task.getId() = taskId

taskService.claim(task.getId(), userId);//完成签收这个时候就任务Task的Assignee属性就有了值

//已经签收过的任务列表,某种意义上我理解为真正的办理人

List<Task> tasks = taskService.createTaskQuery().taskAssignee(userId).list();

2、办理

通过 1、未签收/待办理 中取得需要办理的任务Task之后

//调用 task.getId() = taskId 完成任务的办理,taskService服务自动流转到下一个办理节点

plete(task.getId());

//plete()方法 提供了重载,提供了3种方式供你选择

complete(String taskId)

complete(String taskId, Map<String,Object> variables)

complete(String taskId, Map<String,Object> variables, boolean localScope)

如果更深的了解如何流转的可以查看源码

---------------------------------------------------------------------------

插一下

任务并不一定要先签收再办理,可以直接到待办理中,而不是待签收中

可以把

taskService.claim(task.getId(), userId);方法

替换为

setAssignee(String taskId, String userId)

经过以上步骤,任务已经在 办理中状态了

3、已完成/已办结

任务的已完成(调用过complete方法)是指当前待办的任务状态,而非整个流程实例的完成状态

流程中数据使用到 historyService 服务

//查询指定用户发起的流程 (流程历史 用户发起 )

//finished 完成的流程

//unfinish 还在运行中的流程

List<HistoricActivityInstance> hais = 下面的3中方法

historyService.createHistoricProcessInstanceQuery().finished().startedBy(name).orderByProcessInstanceStartTime().desc().listPage(firstResult, maxResults);

//查询指定用户参与的流程信息 (流程历史 用户参与 )

List hpis = historyService.createHistoricProcessInstanceQuery().involvedUser(name).orderByProcessInstanceStartTime().desc().listPage(firstResult, maxResults);

//查询指定流程的任务流转路径 (流程历史 任务 流转 路经)

historyService.createHistoricTaskInstanceQuery().processInstanceId(processInstanceId).orderByHistoricTaskInstanceEndTime().asc().list();

//查看流程是否完整的运行完毕方法也有好几种

for (HistoricActivityInstance hai : hais) {

//如果下面的方法返回不是空,那就是已办结

hai.getEndTime()

}

//查看ACT_RU_TASK表

Long long = taskService.createTaskQuery().processInstanceId("processInstanceId").taskId("taskId").count();

//如果long为空,那么也是办结了

taskService.createTaskQuery()查询条件是可选的

可以是

taskService.createTaskQuery().processInstanceId("processInstanceId")

taskService.createTaskQuery().taskId("taskId")

或者其他更多条件

总结:

//流程在流转中对于当前办理人/组和签收人/组来说,都是可以进行动态调整变化的

//需要对程序进行特殊处理,添加监听或者其他方法

//得到用户组待签收

TaskService taskService = processEngine.getTaskService();

//单人待签收

//List<Task> tasks = taskService.createTaskQuery().taskCandidateUser(userId).list();

List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup(userGroup).list();

for (Task task : tasks) {

// 签收

taskService.claim(task.getId(), userId);

}

//得到用户待办

tasks = taskService.createTaskQuery().taskAssignee(userId).list();

for (Task task : tasks) {

//办理

plete(task.getId());

}

//顺便查看历史看看

HistoryService historyService = processEngine.getHistoryService();

HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(procId).singleResult();

对于更复杂的业务还在整理中,也有不足的地方,望大家共同进步。

文章是在Notepad++中编写的,格式上有差异谅解

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。