Activiti7 常用 Api
大约 3 分钟
Activiti7 常用 Api
提示
记录一下常用的 Api 使用
一、流程定义相关 Api
以下 Api 跟流程定义相关
根据流程定义 Key查询流程
public ProcessDefinition selectProcessDefinitionByKey(String definitionKey) {
List<ProcessDefinition> processDefinitions = repositoryService.createProcessDefinitionQuery()
.processDefinitionKey(definitionKey)
.orderByProcessDefinitionVersion()
.desc()
.list();
ProcessDefinition processDefinition = null;
if (processDefinitions.size() > 0) {
processDefinition = processDefinitions.get(0);
}
return processDefinition;
}
Api 说明:
- 根据部署版本倒序排序,获取所有流程部署信息,取最新的数据
根据部署 Id 查询流程
public ProcessDefinition selectProcessDefinitionByDeploymentId(String deploymentId) {
return repositoryService.createProcessDefinitionQuery()
.deploymentId(deploymentId)
.singleResult();
}
获取流程 XML 文件
public InputStream getResourceAsStream(String deploymentId, String resourceName) {
return repositoryService.getResourceAsStream(deploymentId, resourceName);
}
参数说明: 参数都从流程定义中获取 processDefinition
- deploymentId - 流程部署 ID
- resourceName - 资源名称
获取当前流程的流程图(高亮显示)
public InputStream getProcessImage(String processDefinitionId,
List<String> highLightedActivities,
List<String> highLightedFlows) {
BpmnModel model = repositoryService.getBpmnModel(processDefinitionId);
ProcessDiagramGenerator generator = new DefaultProcessDiagramGenerator();
//generateDiagram(流程模型,需要高亮的节点,需要高亮的线条,后面三个参数都表示是字体)
InputStream inputStream = generator.generateDiagram(model, highLightedActivities, highLightedFlows, "宋体", "宋体", "宋体");
return inputStream;
}
参数说明:
- highLightedActivities - 需要高亮的节点列表,存节点 ID
- highLightedFlows - 需要高亮的连线,存连线 ID
如果流程中有中文,需要传入能识别中文的字体,例如:宋体
获取流程中的所有节点信息
public void findUserTaskNode() {
// 获取流程信息,获取方法查看上面👆提得到的 Api
ProcessDefinition processDefinition = selectProcessDefinitionByKey("XXXKey");
BpmnModel model = repositoryService.getBpmnModel(processDefinition.getId());
if (model != null) {
// 获取所有节点信息
Collection<FlowElement> flowElements = model.getMainProcess().getFlowElements();
// 查找指定 UserTask 类型的节点
for (FlowElement e : flowElements) {
// 判断节点类型
if (e instanceof UserTask) {
// 审批人
String sp1 = ((UserTask) e).getAssignee();
// 候选人
List<String> sp2 = ((UserTask) e).getCandidateUsers();
}
}
}
}
Api 说明:
- 可以获取节点的 ID、名称、负责人、候选人等信息
二、流程实例相关 Api
以下 Api 跟流程实例相关
获取流程实例
public ProcessInstance getProcessInstanceById(String processInstanceId) {
return runtimeService.createProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();
}
删除流程实例
/**
* 删除部署的流程实例
*
* @param instanceId 流程实例ID
* @param deleteReason 删除原因,可为空
*/
public void deleteProcIns(String instanceId, String deleteReason) {
runtimeService.deleteProcessInstance(instanceId, deleteReason);
}
根据流程实例获取目前活动节点
public List<String> getActiveActivityIds(String processInstanceId) {
return runtimeService.getActiveActivityIds(processInstanceId);
}
获取历史流程实例
public HistoricProcessInstance getHistoricProcessInstanceById(String processInstanceId) {
return historyService
.createHistoricProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();
}
获取历史批注信息
public String getTaskComments(String taskId) {
List<Comment> taskComments = taskService.getTaskComments(taskId);
if (taskComments == null) {
return "暂无批注";
}
return taskComments.stream()
.map(Comment::getFullMessage)
.collect(Collectors.joining(";"));
}
获取流程实例的历史任务
public List<HistoricActivityInstance> selectHistoryTaskList(String instanceId) {
return historyService.createHistoricActivityInstanceQuery()
.processInstanceId(instanceId)
.activityType("userTask")
.finished()
.orderByHistoricActivityInstanceStartTime()
.desc()
.list();
}
参数说明:
- instanceId - 流程实例 ID
- activityType - 节点类型
- finished - 已完成
- 根据创建时间排序
三、查询任务相关 Api
以下 API 跟 Task 任务有关
根据流程实例 ID 查询当前 Task
public List<Task> getTaskByInstanceId(String instanceId) {
return taskService.createTaskQuery().processInstanceId(instanceId).List();
}
Task 添加候选人
public void addCandidateUser(String taskId, String candidateUser) {
taskService.addCandidateUser(taskId, candidateUser);
}
查询候选人待办任务
public List<Task> selectTodoTaskList(String definitionKey, String candidateUser) {
return taskService.createTaskQuery()
.processDefinitionKey(definitionKey)
.taskCandidateUser(candidateUser)
.orderByTaskCreateTime()
.desc()
.listPage();
}
参数说明:
- definitionKey - 流程定义 Key
- candidateUser - 候选人
- 根据 task 创建时间排序
根据 TaskId 获取 Task
public Task getTaskByTaskId(String taskId) {
return taskService.createTaskQuery().taskId(taskId).singleResult();
}
领取任务以及完成任务添加批注
public void claimAndComplateTask(Task task, String userId, boolean auditStatusBoolean, String commentStr) {
String taskId = task.getId();
// 如果候选任务没有进行领取就直接完成的话,那么在历史记录中就不会记录是哪个用户执行了这个任务.
taskService.claim(taskId, userId);
// 添加批注
taskService.addComment(taskId, task.getProcessInstanceId(), commentStr);
// 添加流程变量
taskService.setVariable(taskId, task.getTaskDefinitionKey(), auditStatusBoolean);
// 完成任务
taskService.complete(taskId);
}
Task 添加流程变量
public void setVariable(String taskId, String variableName, Object variableValue) {
taskService.setVariable(taskId, variableName, variableValue);
}
查询用户已办任务列表
public List<HistoricTaskInstance> selectDoneTaskList(String definitionKey, String userId) {
return historyService
.createHistoricTaskInstanceQuery()
.processDefinitionKey(definitionKey)
.taskAssignee(userId)
.finished()
.orderByHistoricTaskInstanceEndTime()
.desc()
.list();
}
参数说明:
- definitionKey - 流程定义 Key
- userId - 哪个用户的已办
- finished - 状态已完成
- 根据完成时间排序