規則の評価方法
1 つのフィールドに複数の規則を適用すると、規則がどのように評価されるかを理解できます。規則の評価方法は完全に確定的ではありません。このセクションでは、<WHEN*>、<DEFAULT>、および <COPY> の各規則を使用するときに予期される動作とやり取りについて説明します。
以下の手順は、Team Foundation Server と、作業項目フォームのユーザーが行うやり取りを、適切な順序で示します。ユーザーが実行する手順は、1、8、および 13 のみです。
ユーザーは、Visual Studio のユーザー インターフェイスを使用して、新しい作業項目の作成や既存の作業項目の編集を行います。
フィールドの既定値を補完します。すべてのフィールドに対し、<WHEN*> 規則の範囲外の <DEFAULT> 規則がある場合は適用します。
フィールド値をコピーします。すべてのフィールドに対し、<WHEN*> 句の範囲外の <COPY> 規則がある場合は適用します。
一致する <WHEN> 規則があるすべてのフィールドに対し、その中の <DEFAULT> 規則と <COPY> 規則を順に適用します。
一致する <WHENNOT> 規則があるすべてのフィールドに対し、その中の <DEFAULT> 規則と <COPY> 規則を順に適用します。
[!メモ]
Team Foundation Server は常に <WHEN> 規則を <WHENNOT> 規則より前に処理します。
手順 1 以降に値が変更され、かつ <WHENCHANGED> 規則があるすべてのフィールドに対し、その中の <DEFAULT> 規則と <COPY> 規則を順に適用します。
ユーザーが編集を開始できるようにします。
ユーザーがフィールド値を変更し、そのフィールド以外にフォーカスを移動します。
そのフィールドに対する <WHEN> 規則があり、新しい値に一致する場合は、その規則を発生させます。
そのフィールドに対する <WHENNOT> 規則があり、新しい値に一致する場合は、その規則を発生させます。
そのフィールドに対する <WHENCHANGED> 規則があり、新しい値に一致する場合は、その規則を発生させます。
ユーザーが編集できる状態に戻します。
ユーザーがデータベースに変更内容を保存します。
すべてのフィールドについて、そのフィールドに対して直接定義されているか、または <WHEN> 規則か <WHENNOT> 規則の下で間接的に定義されている、<SERVERDEFAULT> の操作を実行します。
キーストロークの処理
ユーザーがグラフィカル ユーザー インターフェイスを使用して作業項目フォームを変更するときには、フィールドに対してキーストロークが入力されるたびに新しい値が設定されます。したがって、<WHEN*> 規則の必要条件が満たされるたびに、予測不可能なタイミングで <WHEN*> 規則が発生します。
次の XML の例では、Status フィールドに「Approved Again」と入力すると、SubStatus は空になります。ユーザーが "Approved" の "e" の文字を入力したとたんに、<WHEN*> 規則が発生するためです。最終的に意図していた値は "Approve" でないにもかかわらずです。したがって、条件付きの規則を使用するときには、よく考える必要があります。
<FIELD refname="MyCorp.SubStatus" />
<WHEN field="MyCorp.Status" value="Approve" >
<EMPTY />
</WHEN>
</FIELD>