跳至主要內容

Activiti7 常用 Api

Zenghr大约 3 分钟Activiti7

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 - 状态已完成
  • 根据完成时间排序