有没有办法在Activiti流程定义中获取任务而无需创建流程实例?

时间:2016-02-29 09:12:41

标签: java activiti

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

我的要求如下

我希望在运行Process之前了解有关使用Java的Activiti Process Definition中的任务的详细信息,即。在创建Activiti ProcessInstance之前。有没有办法实现这个目标?

我已多次浏览Activiti API的Java文档和用户指南,但无法找到方法。

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

2 个答案:

答案 0 :(得分:4)

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

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

例如,这段代码应该会为您提供一个进程中的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))    
}

答案 1 :(得分:4)

要访问有关工作流程(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
        }
    }
}