コントラクトとコンテキスト

コントラクトの考え方は、プロセス起案とヒューマンタスク実行の2つのレベルが使用可能です。コントラクトは入力項目と制約条件から成ります。入力項目はプロセスまたはヒューマンタスクに提供しなければならないいくつかの情報です。制約条件は入力の値が正しいかチェックするために入力項目に適用されます。

サンプルプロセスの「休暇申請プロセス」では、次のコントラクトが宣言されています:

  • 入力項目:
    • 開始日
    • 終了日
    • 休暇の取得日数
  • 制約条件:
    • 終了日は開始日の後にある
    • 開始日は申請当日を含む将来の日である

なぜコントラクトを定義する必要があるのか、入力項目は何に使用されるのか?
コントラクトを指定する
コンテキスト

なぜコントラクトを定義する必要があるのか、入力項目は何に使用されるのか?

コントラクトは、プロセスの開始時に必要ないくつかの情報を指定します。この情報がプロセスに無いとそのプロセスのロジックを実行できません。そしてプロセスのインスタンスを開始しようにも役立ちません。つまり、所定の入力データが提供されないまま、プロセスのインスタンスを開始しようとした場合、システムはそのプロセスの開始を拒否します。ヒューマンタスクについても同様です。所定の入力データが提供されないまま、そのタスクを実行しようとした場合、システムはそのタスクの実行を拒否します。コントラクトは外部からの不正な介入をプロテクトします。検証後、その入力項目はビジネスデータやプロセスデータの初期化、またはコネクタへのデータ受け渡しに使用されます。

コントラクトを指定する

Bonita BPM Studio でプールを選択しプロセス起案のコンタクトを作成、またはヒューマンタスクを選択しタスクのコンタクトを作成します。[詳細] パネル -> [実行] タブ -> [コンタクト] ペインに進みます。[入力] タブで期待された各入力項目とその項目のデータ型を宣言します。入力項目を手作業で宣言する方法と [データから追加] のオプションを使用しビジネス変数から宣言する方法の2つのオプションがあります。データから追加のオプションで既定のビジネス変数を基に入力項目を定義する場合は、あなたの定義作業時間を節約し、ビジネス変数を初期化(または更新)することがその入力項目の優先的な狙いになります。[制約] タブで各入力項目の値の妥当性をチェックする式を宣言します。制約条件は、名前、式、エラーメッセージを持ちます。エラーメッセージは制約条件が一致しない場合に記録が取られます。必ず、プロセスの開始またはタスクの実行の指示で、なぜシステムが拒否したのかプロセス利用者の理解を助ける意味のある名前とメッセージを提供します。

休暇申請プロセスのサンプルでは、入力コントラクトと制約条件は次のようになっているはずです:

contractDoc

 

ConstraintsDoc

コントラクト違反の場合のスタックトレース例:

“USERNAME=walter.bates | org.bonitasoft.engine.core.process.instance.api.exceptions.SContractViolationException: Error while validating constraints: [終了日は開始日の前にできません]”

サポートされる入力項目のデータ型:

  1. Boolean: true または false の受諾値
  2. complex:  {キー : 値} の対応関係でデータを階層的な構造で定義したデータ型 (例: 子の属性に firstname と lastname を持つ user を命名した入力項目の場合)
  3. date: 次のパターンなどで表現できる日付: yyyy-MM-dd or yyyy-MM-ddTHH:mm:ss or yyyy-MM-ddTHH:mm:ssZ or yyyy-MM-ddTHH:mm:ss.SSSz (ISO_8601)
  4. decimal: 小数点以下を含む実数値 (例: 5.128)
  5. file: ドキュメント
  6. integer: 整数値 (例: 4)
  7. text: 文字列

入力項目がリスト(配列)である場合は「複数」をチェックします。(例えば、整数の配列)

制約条件

制約条件はBoolean型を返すGroovy式です。その値が false の場合は制約条件と一致しないことを意味し、その入力値はコントラクトに充填されません。システムは起案またはタスクの実行を行いません。

注意: 制約条件は入力コントラクトに制限され、外部システム(コネクタやデータベース)を参照できません。

コントラクトはいつ検証されるのか?

いずれにせよ、コントラクトはプロセスやヒューマンタスクに情報を送信するための手段に使用され、システムはそのコントラクトを検証します。コントラクトが条件に見合わない場合は、例外と見なされプロセスやヒューマンタスクは未着手になります。情報はJava API コール、REST API コール、Bonita BPM フォーム、またはサードパーティのフォームを含む外部システムによって送信されます。

ベストプラクティス: フォームを作成する前に先行してコントラクトを定義します。このアプローチは、自動生成されたフォームが情報の送信とコントラクトにあなたが定義した検証を確実の履行するので、開発フェーズの時間を節約できます。 コントラクトが定義された後、詳細パネル右上の鉛筆アイコンを使用してUI デザイナーに進むことができます。UI デザイナーは各入力コントラクトごとに利用者が期待値を提供可能にする適切なウィジェットを使用しフォームを生成します。

コンテキスト

フォーム内にタスクやプロセス インスタンスのコンテキスト情報を表示するには、 コンテキストを通じてパブリックに参照可能なビジネスデータとドキュメントを利用できます。コンテキストの考え方はプロセス インスタンスとヒューマンタスクの2つのレベルで利用可能です。コンテキストはプロセス インスタンスの実行中に操作されるビジネスデータとドキュメントの参照リストです。 現在、ヒューマンタスクとプロセスインスタンスのコンテキストは同じものです。定義したすべてのビジネスデータとドキュメントはパブリックです。
制限: 現在のところ、ビジネスデータとドキュメントのいずれか一方をパブリックにするカスタマイズ方法はありません。