2016-11-21 3 views
1

Camunda BPM DelegateListenersおよびTaskListeners通知メソッド内のprocessInstanceの割り当て済みおよび未割り当てのUserTaskの数を取得する必要があります。Camundaリスナー内の割り当て済みおよび未割り当てのUserTaskの数を取得します。

タスククエリから値を取得するのは問題ありませんが、トランザクションスコープのみが含まれています。リスナー通知メソッドの内部でもこれらの値を取得する機会はありますか?また、キャッシュされたスコープについても同様です。私は既にタスククエリをキャッシュスコープと組み合わせようとしました(TaskListenerの "assignment"イベントでassignedTaskCountをインクリメントするなど)が、トランザクションとキャッシュスコープを同期させるのは難しいです。

おそらく、プロセスのActivityInstanceを介して可能な解決策があります(他の理由でhereを実行したような) - しかし、私は、もし、どうやって見つけられなかったのでしょうか。私が知ることは非常に役に立つでしょう。

現時点では、プロセス変数を使用して、割り当てられたタスクセットとプロセスイベントで更新される割り当てられていないタスクを格納しています。

PS:私は、コミットCamunda状態のためトランザクションスコープ用語を使用し、2 Camunda間の状態のためキャッシュされた範囲用語は、コミットします。これが適切な用語であるかどうかはわかりませんが、どこか読んでいると思います。

+0

参照しているクラスがわからない場合は、BPMPlatform.getProcessEngine()を呼び出してプロセスエンジンを取得し、クエリを実行してください。 – webjockey

+0

@webjockeyはい、私はDelegateTask 'または' DelegateExecution'インスタンスを利用できます。しかし、私が言ったように、クエリーは、最後のCamundaコミット(私が_cached_ stateと呼んでいるもの)の後の "状態"を結果に含まないので、完全な答えを返すわけではありません。 – FrVaBe

+0

デリゲートを呼び出すサービスタスクでasyncBeforeを使用して、トランザクションをコミットします。サービスタスクは、非同期継続の助けを借りて実行されます。ドキュメントを参照してください。https://docs.camunda.org/manual/7.5/user-guide/process-engine/transactions-in-processes/#asynchronous-continuations – Zelldon

答えて

1

Camundaはトランザクション境界間でバッチ更新を行います。プロセスの終了時にコミットを更新することを決定することさえできます。アクティビティの前後にはプロパティがあります。これらを試して、トランザクションがすぐにコミットされるかどうかを確認してください。

+0

私はむしろ私の目標に達するためにトランザクションの振る舞いを変えたくないでしょう。しかし、それは他の状況の解決策かもしれません。したがって+1。 – FrVaBe

関連する問題