私たちは bpm でプロセスをモデル化し、Spring 環境で camunda エンジンを使用してその bpm を実行しています。あるシナリオでは、2 つのユーザー タスクの間にカスタム Java コードを実行したいと考えています。camunda のドキュメントの多くを読んだ私の結論は、Service-Task の概念が最適であるということです。
私は2つのことをしたいと思います.1つはサービスタスクで複数のプロセス変数を保存することであり、2つは動的に定義することです.どのプロセス変数がService-Taskのどの入力パラメータにマップされるかです.
私の知る限り、Camunda は Java コードとサービス タスクを統合する 2 つの方法を提供しています。
1.) JavaDelegate インターフェースを実装する Spring-Bean を宣言します。(このメソッドは、パラメーターとして DelegateExecution を取得します)。これにより、結果変数を好きなだけ保存できますが、プロセス変数 -> 入力変数のマッピングを定義するオプションがありません。
2.) camunda からアクセスできる汎用 Spring Bean を宣言し、システム タスクによって実行されるその Bean のメソッドを定義します。これにより、bpm-definition を介してプロセス変数 -> 入力変数のパターンを指定できますが、最大で 1 つの結果変数を格納できます。
それで、両方を達成する方法はありますか?
明確化
私の要件を明確にするために、システムタスクが不整合な状態 (データベースまたはプロセス変数) を検出する場合があります。次のユーザー タスクがエラーを修正する機会を得られるように、タスクがプロセス変数にエラー コード (プログラム「exit(1)」のエラー コードと同様) を格納するようにしたいと考えています。このエラーコードは、プロセス変数の固定された場所に保存されることもありますが、指定された場所に少なくとも 1 つの「実際の結果」を配置できるようにしたいと考えています。