有没有办法在不创建流程实例的情况下获取Activiti流程定义中的任务?

Is there a way to get tasks in Activiti process definition without creating a process instance?

我必须使用我项目的服务公开 Activiti API 进程。

我的要求如下:

我想知道有关 Activiti 流程定义中任务的详细信息,使用 Java,在 运行 流程之前,即。在创建 Activiti ProcessInstance 之前。有什么办法可以实现吗?

我已经阅读了 Java 文档和 Activiti 的用户指南 API 很多次,但找不到方法。

任何帮助将不胜感激,谢谢。

您可以使用 RepositoryService 接口中提供的 getBpmnModel(processDefinitionId) 方法。

结果是一个 Pojo,您可以使用它来检查流程。初始的pojo代表模型,可以有多个Processes(但通常只有一个)。从给定的流程中,您可以使用 findFlowElementsOfType(Class 类型) 找到所有任务。

例如,此代码段应为您提供进程中的 UserTask 列表(未测试但应让您了解需要什么):

BpmnModel model = processEngine.getRepositoryService().getBpmnModel(someProcessId);
List<Process> processes = model.getProcesses();
List<UserTask> userTasks = new ArrayList<>();
for( Process p : processes ) {
     userTasks.addAll( p.findFlowElementsOfType(UserTask.class))    
}

要访问有关工作流 (bpmn) 定义的信息,您可以执行以下操作:

RepositoryService repositoryService = processEngine.getRepositoryService();
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
List<Process> processes = bpmnModel.getProcesses();
for (Process p : processes) {
    Collection<FlowElement> elements = p.getFlowElements();
    for (FlowElement element : elements) {
        if (element instanceof UserTask) {
            // do something
        } else if (element instanceof ServiceTask) {
            // do something
        } else if (element instanceof StartEvent) {
            // do something
        }
    }
}