3.8. 制約

ビジネスプロセスには、コード制約とルール制約の 2 種類の制約があります。
  • コード制約は、この制約に到達すると直接評価される Boolean 式です。コード制約は Java または MVEL のどちらかで記述します。Java および MVEL の両制約はプロセス内で定義されているグローバル変数と変数に直接アクセスできます。
    以下に有効な Java コードの制約に関する例を示しています。ここでは、person がプロセス内の変数となります。
    return person.getAge() > 20;
    以下に有効な MVEL コードの制約に関する例を示しています。ここでは、person がプロセス内の変数となります。
    return person.age > 20;
  • ルール制約は通常の Drools ルール条件と同じです。Drools ルール言語の構文を使用して複雑な制約を表現します。これらのルールは、他のルールと同様、作業メモリ内のデータを参照することができます。また、グローバル変数へも直接参照可能です。以下に有効なルール制約の例を示しています。
    Person( age > 20 )
    これは、作業メモリで 21 歳以上の人がいるかテストします。
ルール制約は、プロセス内に定義された変数へ直接アクセスできません。しかし、プロセスインスタンスを作業メモリに追加して、お使いのルール制約内のプロセスインスタンスと合致させることで、ルール制約内の現在のプロセスインスタンスを参照することができます。ロジックが含まれており、これで WorkflowProcessInstance 型の processInstance 変数が作業メモリ内にある他のプロセスインスタンスではなく、現在のプロセスインスタンスのみと照合されるようにします。プロセスインスタンスをセッションに挿入する必要がある点に注意が必要です。プロセスインスタンスを更新する必要がある場合、Java コードか、プロセス内の on-entry、on-exit、明示的なアクションを使用してください。ルール制約の以下の例は、プロセスの name 変数に格納されている値と同じ名前を持つ人を検索します。
processInstance : WorkflowProcessInstance()
Person( name == ( processInstance.getVariable("name") ) )
# add more constraints here ...