1

我正在使用 Oracle BPMN(融合中间件),使用 JDeveloper 创建 BPMN 流程,并为自定义页面编写 Java 代码以显示正在运行的流程的流程图。遇到的问题是 BPMN 图在触发某些触发事件(显然是异步事件点)之前不会显示/更新。因此,在许多情况下,直到 BPMN 流程完成,图表才会出现在查询中。请注意,我们通常没有用户输入任务,这些任务符合异步事件的条件,也会导致图表随后显示。

我们的团队已经与 Oracle 讨论过,他们的解决方案是将每个 BPMN 调用(主要是服务调用)包装在异步 BPEL 包装器中,以便 BPMN 调用调用服务的异步请求/响应(因此作为两个操作)。这样做确实有效,但它为开发 BPMN 流程的工作增加了巨大的开销,因为每个操作都必须被包装。

所以我想知道是否有其他人已经探索或可能解决了这个问题。

我们正在做的一些代码片段(仅部分代码):

要获取正在运行的实例 ID:

List<Column> columns = new ArrayList<Column>();
columns.add(...); // repeated for all relevant fields
Ordering ...
Predicate ...
IInstanceQueryInput input = new IInstanceQueryInput();
List<IProcessInstance> instances = client.getInstanceQueryService().queryProcessInstances(context, columns, predicate, ordering, input);
// however, instances doesn't return the instance until the first async event, or until completion

之后 AuditProcessDiagrammer 用于获取流程图,DiagramEvents 用于更新/突出显示正在进行的流程。instanceId 确实显示在 Oracle 融合控制面板中,因此它必须至少可能可用。但是尝试为其获取图像会导致图像为空:

IProcessInstance pi = client.getInstanceQueryService().getProcessInstance(context, instance);
// HERE --> pi is null until the image is available (so the rest of this isn't run)
String compositeDn = pi.getSca().getCompositeDN();
String componentName = pi.getSca().getComponentName();
IProcessModelPackage package = client.getProcessModelService().getProcessModel(context, compositeDn, componentName);
ProcessDiagramInfo info = new ProcessDiagramInfo();
info.setModelPackage(package);
AuditProcessDiagrammer dg = new AuditProcessDiagrammer(info.getModelPackage().getProcessModel().getProcess());
List<IAuditInstance> audits = client.getInstanceQueryService().queryAuditInstanceByProcessId(context, instance);
List<IDiagramEvent> events = // function to get these
dg.highlight(events);
String base64image = dg.getImage();

请参阅此处 --> 部分。那就是我需要实例有效的地方。

如果有其他人成功使用的好的替代方案(设置、配置等),我很想听听。我真的对奇怪的解决方法不感兴趣(BPEL 包装器中已经有了)。我正在寻找一种允许 BPMN 流程保持简单的解决方案。谢谢。

4

0 回答 0