dram.me

在jBPM脚本任务中获取全局流程实例信息

在jBPM的脚本任务(Script Task)中,可以通过kcontext获取当前任务以及所属流程实例的信息,但没有直接的接口获取全局其他流程的信息。

在查看了KieContextKieRuntimeRuntimeManagerRuntimeEngine等文档,以及搜索部分KIE的代码后,发现可以基于AuditService实现,以下为代码片段:

org.kie.api.runtime.manager.RuntimeManager manager = (org.kie.api.runtime.manager.RuntimeManager) kcontext.getKieRuntime().getEnvironment().get(org.kie.api.runtime.EnvironmentName.RUNTIME_MANAGER);

org.kie.api.runtime.manager.RuntimeEngine runtime = manager.getRuntimeEngine(org.kie.internal.runtime.manager.context.ProcessInstanceIdContext.get(kcontext.getProcessInstance().getId()));

for (org.kie.api.runtime.manager.audit.ProcessInstanceLog p : runtime.getAuditService().findProcessInstances()) {
	System.out.println(p.getProcessName());
}

另外,无法使用ProcessRuntime.getProcessInstances的原因在于,在使用持久化后,不一定所有流程信息都已载入(部分留存在数据库中),详见文档说明。