2016-02-29 25 views
3

我必须使用我的项目服务公开Activiti API过程。有没有办法在Activiti流程定义中获取任务而不创建流程实例?

我的要求是为下

我想知道在Activiti的流程定义任务,使用Java的详细信息,运行过程,即之前。在创建Activiti ProcessInstance之前。有什么办法可以做到这一点?

我已经浏览了Activiti API的Java文档和用户指南,但很多时候都找不到方法。

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

回答

3

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

结果是一个Pojo,你可以用它来反省这个过程。最初的pojo代表模型,可以有多个进程(但通常只有一个)。从给定的Process中,您可以使用findFlowElementsOfType(Class类型)查找所有任务。

例如,该段应让你UserTasks列表中的过程(未经测试,但应该给你需要什么的想法):

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))  
} 
+0

非常感谢。这工作。我还有一个与之相关的问题,有没有办法从BpmnModel更新/删除这个过程? – OutOfMind

+0

我从来没有使用它,但DynamicBpmnService似乎是一个很好的开始点,如果您需要操纵流程定义。但是,它没有文档,因此您必须通过源代码来了解如何使用它。 –

+0

感谢@Philippe,还有一件事,如果我添加一个进程到BpmnModel,有没有办法只部署那个进程而不是整个BpmnModel?当一个BpmnModel中有多个进程时,它们是单独的进程还是子进程? – OutOfMind

3

访问有关工作流信息(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 
     } 
    } 
} 
相关问题