activiti的API查询网址:
https://www.activiti.org/javadocs/overview-summary.html
获取任务的办理人
List identityLinkList = activitiEngine.getTaskService().getIdentityLinksForTask(task.getId());
这个和正常查询task的区别
Task task=activitiEngine.getTaskService().createTaskQuery().processInstanceId(processInstanceId).active().singleResult();
List list= activitiEngine.getTaskService().createTaskQuery().active().list();
List lsit1=activitiEngine.getTaskService().createTaskQuery().taskId(taskId).list();
这个active是什么方法:仅选择活动(即未挂起)的任务
下面是源码的注释
/**
* Only selects tasks which are active (ie. not suspended)
*/
TaskQuery active();
//查询个人的所有的代办
activitiEngine.getTaskService().createTaskQuery().taskCandidateOrAssigned(userId)
.includeProcessVariables().active().orderByTaskCreateTime().desc().list();
不忘初心 19:01:36
大哥
不忘初心 19:02:02
这样不就能查出这个人的所有的代办任务吗?
// 用来设置启动流程的人员ID,引擎会自动把用户ID保存到activiti:initiator中identityService.setAuthenticatedUserId(userId);
taskService.createTaskQuery().taskCandidateOrAssigned(userId).list();
TaskListener 这个接口 和这个JavaDelegate 有啥区别啊。监听器不是分为流程监听器和任务监听器 JavaDelegate 这个接口是做什么的呢?
获取发布的流程的所有的任务节点
Process process = activitiEngine.getRepositoryService().getBpmnModel(processDefinitionId).getMainProcess();
List taskNodes = process
.findFlowElementsOfType(org.activiti.bpmn.model.Task.class);
查看发布流程的所有节点
BpmnModel model = activitiEngine.getRepositoryService().getBpmnModel(processDefinitionId);
if(model != null) {
Collection flowElements = model.getMainProcess().getFlowElements();
for(FlowElement e : flowElements) {
System.out.println("flowelement id:" + e.getId() + " name:" + e.getName() + " class:" + e.getClass().toString());
}
}
通过processInstanceId获取processDefinitionId
HistoricProcessInstance hi=activitiEngine.getHistoryService().createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
String processDefinitionId=hi.getProcessDefinitionId();
List list = Context.getProcessEngineConfiguration().getHistoryService()
.createHistoricTaskInstanceQuery().processInstanceId(procInstId).list();
List taskHis = Context.getProcessEngineConfiguration().getHistoryService()
.createHistoricTaskInstanceQuery().executionId(task.getExecutionId()).finished()
.orderByHistoricTaskInstanceEndTime().desc().list();
List taskHis2 = Context.getProcessEngineConfiguration().getHistoryService()
.createHistoricActivityInstanceQuery().executionId(task.getExecutionId()).finished()
.orderByHistoricActivityInstanceEndTime().desc().list();
Task Task2 = Context.getProcessEngineConfiguration().getTaskService().createTaskQuery().taskId(taskId)
.singleResult();
String processInstanceId2 = Context.getProcessEngineConfiguration().getTaskService().createTaskQuery()
.taskId(taskId).singleResult().getProcessInstanceId();
String executionId2 = Context.getProcessEngineConfiguration().getTaskService().createTaskQuery()
.taskId(taskId).singleResult().getExecutionId();
// 获取流程发布Id信息
String definitionId2 = Context.getProcessEngineConfiguration().getRuntimeService()
.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult()
.getProcessDefinitionId();
processDefinitionEntity = (ProcessDefinitionEntity) ((RepositoryServiceImpl) Context
.getProcessEngineConfiguration().getRepositoryService()).getDeployedProcessDefinition(definitionId);
List execution2 = Context.getProcessEngineConfiguration().getRuntimeService()
.createExecutionQuery().executionId(executionId).list();
String activitiId = execution.get(0).getActivityId();
@ for (HistoricProcessInstance histTask : historicProcessInstanceList) {
List list = processEngine.getHistoryService()
.createHistoricTaskInstanceQuery().taskAssignee(histTask.get).
蓝色的烟(51140145) 15:51:18
在这个下边怎么取这个历史
? 15:57:46
你是需要根据办理人查询呢 还是需要根据其他的进行查询, List list = processEngine.getHistoryService()
.createHistoricTaskInstanceQuery().taskAssignee(histTask.get).
时根据办理人 查询办理过的 Task
蓝色的烟(51140145) 16:00:20
是提交人
? 16:01:04
提交人不是办理人么
蓝色的烟(51140145) 16:02:48
不是办理人啊,就是他提交的单据,看看都是审批到哪里了
? 16:03:06
发起人啊
蓝色的烟(51140145) 16:03:40
List historicProcessInstanceList =
historyService.createHistoricProcessInstanceQuery().startedBy(userName)
.orderByProcessInstanceStartTime().desc().listPage((int)params.get("offset"), (int)params.get("limit"));
List startTaskVOS = new ArrayList<>();
for (HistoricProcessInstance histTask : historicProcessInstanceList) {
List list = processEngine.getHistoryService()
.createHistoricTaskInstanceQuery().processInstanceId(histTask.getProcessDefinitionId()).list();
蓝色的烟(51140145) 16:03:48
对,这个取出来全是空
蓝色的烟(51140145) 16:04:03
list 是空
? 16:04:37
按我理解 你们业务上每个单据应该都存储一个流程实例ID吧。使用流程实例id 查
蓝色的烟(51140145) 16:05:16
哪个
蓝色的烟(51140145) 16:05:18
histTask.getBusinessKey() == 7853930F259329F9E050007F01002619
histTask.getProcessDefinitionId() == project:14:370011
histTask.getProcessDefinitionKey() == project
histTask.getProcessDefinitionName() == 项目审批流程V3
蓝色的烟(51140145) 16:07:32
流程实例ID好像拿不到
List historicProcessInstanceList =
historyService.createHistoricProcessInstanceQuery().startedBy(userName)
.orderByProcessInstanceStartTime().desc().listPage((int)params.get("offset"), (int)params.get("limit"));
蓝色的烟(51140145) 14:54:59
这个方法可以取到当前登录人所提交的所有单据
List historicProcessInstanceList =
historyService.createHistoricProcessInstanceQuery().startedBy(userName)
.orderByProcessInstanceStartTime().desc().listPage((int)params.get("offset"), (int)params.get("limit"));
List startTaskVOS = new ArrayList<>();
for (HistoricProcessInstance histTask : historicProcessInstanceList) {
StartTaskVO startVO = new StartTaskVO(histTask);
startVO.setBusinessKey(histTask.getBusinessKey());
startVO.setProcDefName(histTask.getProcessDefinitionName());
startVO.setStartTime(histTask.getStartTime());
startVO.setEndTime(histTask.getEndTime());
UserDO user = userService.findByUserName(histTask.getStartUserId());
startVO.setApplyUser(user!=null?user.getName():histTask.getStartUserId());
startVO.setStatus("finish");
startTaskVOS.add(startVO);
}
return startTaskVOS;
安全感(515590808) 18:07:28
这个是查询待办任务的时候用的
安全感(515590808) 18:07:37
createTaskQuery().taskCandidateUser(userId)
.orderByTaskPriority().desc()
.orderByTaskCreateTime().asc()
.listPage(start, limit);
Phoenix(1241012434) 18:08:08
感觉listPage这个有bug
安全感(515590808) 18:08:25
候选用户 候选组 代理人 还有candidateorAssignee 按照顺序查找
hoss--龚楼(783286653) 18:09:35
有啥bug
hoss--龚楼(783286653) 18:10:16
我自己没用过listPage都是自己查询act表,用自己公司的page对象的
Phoenix(1241012434) 18:10:40
和limit offset
Phoenix(1241012434) 18:10:47
顺序感觉有点反了
Phoenix(1241012434) 18:10:54
可能没bug
Phoenix(1241012434) 18:10:58
我再试试
腔.调(291541567) 18:11:05
有bug的
安全感(515590808) 18:11:08
start limit 有啥问题 第一个从哪里开始 第二个获取的长度
安全感(515590808) 18:11:09
??
安全感(515590808) 18:11:25
啥bug说啊、
Phoenix(1241012434) 18:11:55
A6的
Phoenix(1241012434) 18:11:59
你自己试一下嘛
腔.调(291541567) 18:12:00
候选任务和已经认领了的和直接指定人的不能一起查出来
哪位大侠指点一下啊
深海荧光(1143715138) 11:40:10
@分享牛 老师麻烦帮忙看下,其实我的目的是把 调用子流程的流程实例中的businesskey和外部流程保持一致,这样我就可以用businesskey来查询所有的流程不管是外部还是内部的
**processEngine.getRuntimeService().updateBusinessKey 这个方法可以给流程实例更新businesskey**
删除流程 不级联删除流程实例
activitiEngine.getRepositoryService().deleteDeployment(deploymentId);
删除流程 设置是否级联删除流程实例
activitiEngine.getRepositoryService().deleteDeployment(deploymentId, true);
删除流程 级联删除流程实例
activitiEngine.getRepositoryService().deleteDeploymentCascade(deploymentId);
// Process process =
// ProcessDefinitionUtil.getProcess(task.getProcessDefinitionId());
// FlowNode currentNode = (FlowNode)
// process.getFlowElement(task.getTaskDefinitionKey());
// HistoryService historyService =
// Context.getProcessEngineConfiguration().getHistoryService();
// return getPrevTaskNode(task.getProcessInstanceId(), currentNode,
// process,
// historyService);
/*
* HistoricTaskInstance taskHis =
* Context.getProcessEngineConfiguration().getHistoryService()
* .createHistoricTaskInstanceQuery().executionId(task.getExecutionId())
* .finished()
* .orderByHistoricTaskInstanceEndTime().desc().list().get(0);
*/
// ExecutionEntity execution = (ExecutionEntity)
// activitiEngine.getRuntimeService().createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
// 并行网管下不合适
// Execution execution
// =activitiEngine.getRuntimeService().createExecutionQuery().executionId(executionId).singleResult();