繰返しフォームのリレーション・マッピング定義について
「リレーション・マッピング定義」フィールドを使用して、2つの繰返しフォーム(子と親)間のリレーションを定義する方法があります。リレーション定義を実装すると、他のフォーム・インスタンスからデータを取得するために使用される集計関数を使用してルールで実行されるスレッドの量が減少し、システム・パフォーマンスが向上します。
ノート:
このフィールドは、ルール・ターゲットが繰返しフォームにある場合にのみ使用できます。親子関係の可能性を確立するには、親の繰返しフォームおよび子繰返しフォームから少なくとも1つの変数(任意の質問)を宣言する必要があります。ルールが2つの繰返しフォームを参照せず、リレーション・マッピング定義が設定されている場合は、ルールの保存時にエラーがスローされます。
リレーション・マッピング定義を設定するには、次の点を考慮してください。
- ルール・ターゲット(子フォーム)と同じ繰返しフォームに存在するリレーション・アイテム(ルール可変として定義)を選択する必要があります。
- 関連マッピング定義として選択された項目には、関連する親表のインスタンス番号に対応する値が含まれている必要があります。適切な形式は整数です。
つまり、子フォームでは、各行が親表の特定の行に関連付けられている場合、子フォームでは、関連する親フォームのインスタンス番号または行番号を入力するフィールドが必要です。親フォームのインスタンス番号を含む子フォームのこのフィールドは、リレーション・マッピング定義に使用する必要があります。
- ルール式では、親表からデータを取得するために集計関数を使用する必要があります。
例: 変更日(form1)がリカバリ日(form2)以前である必要があるルールでは、form1のイベント番号を使用して、対応するリカバリ日をform2で検索します。
変数は次のとおりです。var advnum // event number - item in child table (rule traget form) which will be the relation item and contains the instance number of parent table var intdat // date of change in form 1 (child form)- item to be used in rule logic var recdat // date of recovery in form 2 - item from parent table to be used in rule logic, when updated it will trigger rule execution in child form
関連マッピング定義:Parent Form Instance Number <=> advnum
式:var aenum = advnum; var rfdata = getRFValues(aenum, ["recdat"] ); // aggregate function that retrieves 'recdat' variable from parent form where instance number equals the value entered in 'advnum'/'aenum' var recdt = rfdata.exists && rfdata.recdat ? rfdata.recdat : null; // null check and local variable value assignation if(recdt !== null && partialDateDiff(recdt,true,intdat,true,'Day') < 0) //evaluates if difference with given date is < 0 (if recdt happens before given date) { return false; //triggers query } else { return true; }
リレーション・マッピング定義の結果として、次のようになります。
- ユーザーが親フォームのルール変数アイテムを更新する場合:
- ルール実行ロジックは、関係項目のデータをロードし、評価および更新が必要なインスタンスのリストを子表に生成します。これらのインスタンスは、リレーション・アイテム値が、親表で更新されたfromインスタンスのインスタンス番号と同じであるインスタンスです。
- 子フォームの対応するインスタンスのみが評価および更新されます。
- ユーザーが子フォームのルール変数アイテムを更新した場合、ルールは現在のインスタンスでのみ実行されます。
- ルールに影響する他のフォームのルール変数アイテムをユーザーが更新した場合、ルールはマッピング定義なしで発生すると、すべてのターゲット・フォーム・インスタンスに対して実行されます。