我必须使用我的项目服务公开Activiti API过程。有没有办法在Activiti流程定义中获取任务而不创建流程实例?
我的要求是为下:
我想知道在Activiti的流程定义任务,使用Java的详细信息,运行过程,即之前。在创建Activiti ProcessInstance之前。有什么办法可以做到这一点?
我已经浏览了Activiti API的Java文档和用户指南,但很多时候都找不到方法。
任何帮助将不胜感激,谢谢。
我必须使用我的项目服务公开Activiti API过程。有没有办法在Activiti流程定义中获取任务而不创建流程实例?
我的要求是为下:
我想知道在Activiti的流程定义任务,使用Java的详细信息,运行过程,即之前。在创建Activiti ProcessInstance之前。有什么办法可以做到这一点?
我已经浏览了Activiti API的Java文档和用户指南,但很多时候都找不到方法。
任何帮助将不胜感激,谢谢。
您可以使用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))
}
访问有关工作流信息(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
}
}
}
非常感谢。这工作。我还有一个与之相关的问题,有没有办法从BpmnModel更新/删除这个过程? – OutOfMind
我从来没有使用它,但DynamicBpmnService似乎是一个很好的开始点,如果您需要操纵流程定义。但是,它没有文档,因此您必须通过源代码来了解如何使用它。 –
感谢@Philippe,还有一件事,如果我添加一个进程到BpmnModel,有没有办法只部署那个进程而不是整个BpmnModel?当一个BpmnModel中有多个进程时,它们是单独的进程还是子进程? – OutOfMind