指派以條件為基礎的值和規則
您可以使用 WHEN、WHENNOT、WHENCHANGED 和 WHENNOTCHANGED 項目來定義依條件執行的規則。 這些規則用來定義當定義的子句為 True 時要執行哪些項目。 您可以根據指派給特定欄位的值,或使用者是否修改特定欄位,來定義條件。 例如,您可以建立相依選擇清單,以提供詳細的安全性或自訂行為。
欄位條件是列在 FIELD (定義) 項目或 FIELD (工作流程) 項目內的額外項目。 如需這些項目的詳細資訊,請參閱 FIELD (定義) 項目和 FIELD (工作流程) 項目。
下列程式碼是 WHEN 子句的簡單範例:
<FIELD . . . >
<WHEN field="referenceName" value="yyy">
</FIELD>
這個子句是表示只要欄位 refname 具有 "yyy" 的值,這個 FIELD 項目中可以是任何內容。 field 必須是有效的欄位參考名稱。 如需詳細資訊,請參閱工作項目追蹤物件的命名慣例。
注意事項 |
---|
值的屬性是沒有區分大小寫,因此,如果欄位參考名稱是 "YYY",相符項目就包括值 "yyy" 和 "YYY"。 |
本主題內容
條件式項目的語法結構
定義相依必要欄位
定義條件式挑選清單
定義使用者變更另一個欄位時系統會處理的欄位 (WHENCHANGED)
定義使用者未修改欄位時會設定的欄位值 (WHENNOTCHANGED)
條件式項目的語法結構
下表描述可指定為 FIELD (定義) 項目或 FIELD (工作流程) 項目之子項目的條件式規則。 這些項目接受下列一個或多個屬性:
field:描述欄位的字串。 它必須包含 1 到 255 個字元。
value:當指定的欄位有此值時,WHEN 和 WHENNOT 項目中的規則就會套用至目前的欄位。
元素 |
語法 |
描述 |
---|---|---|
WHEN |
|
當其他欄位擁有特定值時,指定要套用到目前欄位的一個或多個規則。 父項目定義了目前的欄位。 當指定的欄位有指定的值時,這個項目中的規則就會套用至目前的欄位。 |
WHENNOT |
|
指定在什麼條件下要將一個或多個規則套用到目前的欄位。 當另一個欄位的值變更時,這些規則會套用到目前的欄位。 父項目定義了目前的欄位。 當指定的欄位未包含指定的值時,這個項目中的規則就會套用至目前的欄位。 |
WHENCHANGED |
|
指定在什麼條件下要將一個或多個規則套用到目前的欄位。 當另一個欄位的值因為對工作項目的修訂而變更時,這些規則會套用至目前的欄位。 父項目定義了目前的欄位。 |
WHENNOTCHANGED |
|
指定在什麼條件下要將一個或多個規則套用到目前的欄位。 當另一個欄位的值未因為對工作項目的修訂而變更時,這些規則會套用至目前的欄位。 父項目定義了目前的欄位。 |
下表描述當透過 WHEN、WHENNOT、WHENCHANGED 或 WHENNOTCHANGED 項目指定的條件式子句為 true 時,每個選擇性條件式規則如何套用至父欄位。 如需詳細資訊,請參閱設定工作項目欄位的條件。
元素 |
描述 |
---|---|
父欄位必須具有指定的值清單中的值。 |
|
允許父欄位的現有值,即使它違反了其他規則。 如果父欄位的值已變更,這個項目就不適用。 |
|
使用者可以將父欄位的值變更為 NULL,但是不能變更為其他任何值。 |
|
第三個欄位的值會自動複製到父欄位。 您可以在 COPY 項目中指定第三個欄位。 |
|
這個項目指定父欄位的預設值。 |
|
父欄位不得包含值。 |
|
父欄位已凍結。 當欄位凍結時,您可以將其值變更為 NULL,但不能變更為其他任何值。 |
|
父欄位的值必須符合指定的模式。 |
|
父欄位的值不可符合第三個欄位的值。 您可以在 NOTSAMEAS 項目中指定第三個欄位。 |
|
父欄位不可包含列舉清單中的任何值。 |
|
父欄位是唯讀的。 |
|
父欄位不得包含非 NULL 值。 |
|
父欄位從指定的伺服器元件取得其值。 有效的伺服器元件為 clock 和 currentuser,前者是工作項目更新的時間,而後者則是更新工作項目之使用者的識別。 |
|
列舉清單包含父欄位的建議值。 |
|
只有指定的使用者才可以修改父欄位。 |
回到頁首
定義相依必要欄位
您可以指定當另一個欄位包含特定值時,才需要欄位。 在下列範例中,當客戶回報 Bug 時,必須指定客戶嚴重性。 如果客戶沒有報告 Bug,就不需要輸入客戶嚴重性。
<FIELD refname="MyCorp.Severity" name="Customer Severity" type="String">
<ALLOWEDVALUES>
<LISTITEM value="Blocking" />
<LISTITEM value="Major" />
<LISTITEM value="Minor" />
</ALLOWEDVALUES>
<WHEN field="MyCorp.CustomerReported" value="true">
<REQUIRED />
</WHEN>
</FIELD>
定義條件式挑選清單
下列範例示範條件式挑選清單,依 ProblemCharacteristic 欄位的值是否設為 Documentation 而定,Problem Type 欄位的允許值會受到限制。
<FIELD refname="MyCorp.ProblemType" name="Problem Type" type="String">
<WHEN field="MyCorp.ProblemCharacteristic" value="Documentation">
<ALLOWEDVALUES>
<LISTITEM value="Spelling Error" />
<LISTITEM value="Bad Format" />
<LISTITEM value="Missing Info" />
</ALLOWEDVALUES>
</WHEN>
</FIELD>
定義使用者變更另一個欄位時系統會處理的欄位 (WHENCHANGED)
在下列範例中,當使用者變更 MyCorp.State 欄位的值時,MyCorp.StateDate 欄位會設為如伺服器時鐘所示的目前日期與時間。
<FIELD refname="MyCorp.StateDate" name="Date Of Last State Change" type="DateTime">
<WHENCHANGED field="MyCorp.State">
<COPY from="clock" />
</WHENCHANGED>
</FIELD>
在下列範例中,當使用者變更 MyCorp.State 欄位的值時,MyCorp.Status 欄位的值會被清除。
<!-- Clear the status field whenever someone changes the state -->
<FIELD refname="MyCorp.Status" name="Status" type="String">
<WHENCHANGED field="MyCorp.State">
<COPY from="value" value="">
</WHENCHANGED>
</FIELD>
定義使用者未修改欄位時會設定的欄位值 (WHENNOTCHANGED)
在下列範例中,當使用者未變更 MyCorp.State 欄位的值時,MyCorp.StateDate 欄位會變成唯讀。
<FIELD refname="MyCorp.StateDate" name="Date Of Last State Change" type="DateTime">
<!-- Make the StateDate field read-only when the State field is not changed -->
<WHENNOTCHANGED field="MyCorp.State">
<READONLY />
</WHENNOTCHANGED>
</FIELD>