私は Oracle BPMN (Fusion ミドルウェア) を使用し、JDeveloper を使用して BPMN プロセスを作成し、プロセスを実行するためのフロー図を表示するカスタム ページの Java コードを記述しています。発生している問題は、BPMN ダイアグラムが特定のトリガー イベント (明らかに非同期のイベント ポイント) に到達するまで表示/更新されないことです。そのため、多くの場合、BPMN プロセスが完了するまでダイアグラムはクエリに表示されません。通常、ユーザー入力タスクはありません。これは非同期イベントとみなされ、ダイアグラムが表示されます。
私たちのチームはそれについてオラクルと話し、彼らの解決策は、BPMN がサービスを呼び出す非同期要求/応答 (つまり 2 つのアクション) を呼び出すように、すべての BPMN 呼び出し (主にサービス呼び出し) を非同期 BPEL ラッパーでラップすることでした。これを実行しても機能しますが、すべてのアクションをラップする必要があるため、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 Fusion コントロール パネルに表示されるため、少なくとも潜在的に利用可能である必要があります。しかし、その画像を取得しようとすると、null 画像になります。
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();
HERE --> の部分を参照してください。ここで、インスタンスを有効にする必要があります。
他の人が成功裏に使用した良い代替手段 (設定、構成など) がある場合は、ぜひ聞きたいです。私は奇妙な回避策にはまったく興味がありません (すでに BPEL ラッパーに含まれています)。BPMN プロセス フローをシンプルに保つことができるソリューションを探しています。ありがとう。