次の方法で共有


ビジネス ルールで同じ種類の複数のオブジェクトを分析する方法

多くのシナリオでは、さまざまな種類のビジネス ルールが作成されます。また、エンジンにアサートされる各インスタンスの種類が個別に分析され、ルールに従って処理されることが期待されます。 ただし、場合によっては、特定の種類の複数のインスタンスをルールで同時に分析することがあります。

たとえば、 FamilyMember クラスのインスタンスを使用するルールについて説明します。

IF FamilyMember.Role == Father  
AND FamilyMember.Role == Son  
AND FamilyMember.Surname == FamilyMember.Surname  
THEN FamilyMember.AddChild(FamilyMember)  

このルールは、Father である FamilyMember インスタンスと、Son である別のインスタンスを識別します。 インスタンスが姓で関連付けられている場合、 Son インスタンスは Father インスタンスの子のコレクションに追加されます。 各 FamilyMember インスタンスがルールで個別に分析された場合、このシナリオでは FamilyMember には 1 つのロール ( または 息子) しかないため、ルールは発生しません。

このため、複数のインスタンスがルールでまとめて分析されることをエンジンに示す必要があります。また、ルールの各インスタンスの ID を区別する手段が必要です。 インスタンス ID プロパティは、この機能を提供するために使用されます。 このフィールドは、ファクト エクスプローラーでファクトを選択する際のプロパティ ウィンドウで使用できます。 ファクトまたはメンバーをルールにドラッグする前に、フィールドの値を変更する必要があります。

インスタンス ID プロパティを使用すると、ルールが再構築されます。 FamilyMemberSon インスタンスを使用するこれらのルール引数では、[インスタンス ID] フィールドが既定値の 0 から 1 に変更されます。 インスタンス ID が 0 から変更され、ファクトまたはメンバーがルール エディターにドラッグされると、 クラスの後のルールにインスタンス ID の値が表示されます。

IF FamilyMember.Role == Father  
AND FamilyMember(1).Role== Son  
AND FamilyMember.Surname == FamilyMember(1).Surname  
THEN FamilyMember.AddChild(FamilyMember(1))  

次に、 Father インスタンスと Son インスタンスがエンジンにアサートされているとします。 エンジンは、インスタンスのさまざまな組み合わせに対して、ルールを評価します。 Father インスタンスと Son インスタンスの姓が同じである場合、Son インスタンスは意図したとおりに Father インスタンスに追加されます。

Note

インスタンス ID は、特定のルール評価のコンテキスト内でのみ使用されます。 インスタンス ID は、ポリシーの実行中にオブジェクトのインスタンスに添付されません。また、オブジェクトがアサートされる順番との関連性はありません。 各オブジェクト インスタンスは、この種類に対するすべてのルールの引数で評価されます。