共用方式為


指派以條件為基礎的值和規則

您可以使用 WHENWHENNOTWHENCHANGEDWHENNOTCHANGED 項目來定義依條件執行的規則。 這些規則用來定義當定義的子句為 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

<WHEN field="fieldReferenceName" value="value">
    <ALLOWEDVALUES> . . . </ALLOWEDVALUES>
    <ALLOWEXISTINGVALUE> . . . <ALLOWEXISTINGVALUE>
    <CANNOTLOSEVALUE> . . . </CANNOTLOSEVALUE>
    <COPY> . . . </COPY>
    <DEFAULT> . . . </DEFAULT>
    <EMPTY> . . . </EMPTY>
    <FROZEN> . . . </FROZEN>
    <MATCH> . . . </MATCH>
    <NOTSAMEAS> . . . </NOTSAMEAS>
    <PROHIBITEDVALUES> . . . </PROHIBITEDVALUES>
    <READONLY> . . . </READONLY>
    <REQUIRED> . . . </REQUIRED>
    <SERVERDEFAULT> . . . </SERVERDEFAULT>        
    <SUGGESTEDVALUES> . . . </SUGGESTEDVALUES>
    <VALIDUSER> . . . </VALIDUSER>
</WHEN>

當其他欄位擁有特定值時,指定要套用到目前欄位的一個或多個規則。 父項目定義了目前的欄位。

當指定的欄位有指定的值時,這個項目中的規則就會套用至目前的欄位。

WHENNOT

<WHENNOT field="fieldReferenceName" value="value">
    <ALLOWEDVALUES> . . . </ALLOWEDVALUES>
    <ALLOWEXISTINGVALUE> . . . <ALLOWEXISTINGVALUE>
    <CANNOTLOSEVALUE> . . . </CANNOTLOSEVALUE>
    <COPY> . . . </COPY>
    <DEFAULT> . . . </DEFAULT>
    <EMPTY> . . . </EMPTY>
    <FROZEN> . . . </FROZEN>
    <MATCH> . . . </MATCH>
    <NOTSAMEAS> . . . </NOTSAMEAS>
    <PROHIBITEDVALUES> . . . </PROHIBITEDVALUES>
    <READONLY> . . . </READONLY>
    <REQUIRED> . . . </REQUIRED>
    <SERVERDEFAULT> . . . </SERVERDEFAULT>        
    <SUGGESTEDVALUES> . . . </SUGGESTEDVALUES>
    <VALIDUSER> . . . </VALIDUSER>
</WHENNOT>

指定在什麼條件下要將一個或多個規則套用到目前的欄位。 當另一個欄位的值變更時,這些規則會套用到目前的欄位。 父項目定義了目前的欄位。

當指定的欄位未包含指定的值時,這個項目中的規則就會套用至目前的欄位。

WHENCHANGED

<WHENCHANGED field="fieldReferenceName" >
    <ALLOWEDVALUES> . . . </ALLOWEDVALUES>
    <ALLOWEXISTINGVALUE> . . . <ALLOWEXISTINGVALUE>
    <CANNOTLOSEVALUE> . . . </CANNOTLOSEVALUE>
    <COPY> . . . </COPY>
    <DEFAULT> . . . </DEFAULT>
    <EMPTY> . . . </EMPTY>
    <FROZEN> . . . </FROZEN>
    <MATCH> . . . </MATCH>
    <NOTSAMEAS> . . . </NOTSAMEAS>
    <PROHIBITEDVALUES> . . . </PROHIBITEDVALUES>
    <READONLY> . . . </READONLY>
    <REQUIRED> . . . </REQUIRED>
    <SERVERDEFAULT> . . . </SERVERDEFAULT>        
    <SUGGESTEDVALUES> . . . </SUGGESTEDVALUES>
    <VALIDUSER> . . . </VALIDUSER>      
</WHENCHANGED>

指定在什麼條件下要將一個或多個規則套用到目前的欄位。 當另一個欄位的值因為對工作項目的修訂而變更時,這些規則會套用至目前的欄位。 父項目定義了目前的欄位。

WHENNOTCHANGED

<WHENNOTCHANGED field="fieldReferenceName">
    <ALLOWEDVALUES> . . . </ALLOWEDVALUES>
    <ALLOWEXISTINGVALUE> . . . <ALLOWEXISTINGVALUE>
    <CANNOTLOSEVALUE> . . . </CANNOTLOSEVALUE>
    <COPY> . . . </COPY>
    <DEFAULT> . . . </DEFAULT>
    <EMPTY> . . . </EMPTY>
    <FROZEN> . . . </FROZEN>
    <MATCH> . . . </MATCH>
    <NOTSAMEAS> . . . </NOTSAMEAS>
    <PROHIBITEDVALUES> . . . </PROHIBITEDVALUES>
    <READONLY> . . . </READONLY>
    <REQUIRED> . . . </REQUIRED>
    <SERVERDEFAULT> . . . </SERVERDEFAULT>        
    <SUGGESTEDVALUES> . . . </SUGGESTEDVALUES>
    <VALIDUSER> . . . </VALIDUSER>
</WHENNOTCHANGED>

指定在什麼條件下要將一個或多個規則套用到目前的欄位。 當另一個欄位的值未因為對工作項目的修訂而變更時,這些規則會套用至目前的欄位。 父項目定義了目前的欄位。

下表描述當透過 WHENWHENNOTWHENCHANGEDWHENNOTCHANGED 項目指定的條件式子句為 true 時,每個選擇性條件式規則如何套用至父欄位。 如需詳細資訊,請參閱設定工作項目欄位的條件

元素

描述

ALLOWEDVALUES

父欄位必須具有指定的值清單中的值。

ALLOWEXISTINGVALUE

允許父欄位的現有值,即使它違反了其他規則。 如果父欄位的值已變更,這個項目就不適用。

CANNOTLOSEVALUE

使用者可以將父欄位的值變更為 NULL,但是不能變更為其他任何值。

COPY

第三個欄位的值會自動複製到父欄位。 您可以在 COPY 項目中指定第三個欄位。

DEFAULT

這個項目指定父欄位的預設值。

EMPTY

父欄位不得包含值。

FROZEN

父欄位已凍結。 當欄位凍結時,您可以將其值變更為 NULL,但不能變更為其他任何值。

MATCH

父欄位的值必須符合指定的模式。

NOTSAMEAS

父欄位的值不可符合第三個欄位的值。 您可以在 NOTSAMEAS 項目中指定第三個欄位。

PROHIBITEDVALUES

父欄位不可包含列舉清單中的任何值。

READONLY

父欄位是唯讀的。

REQUIRED

父欄位不得包含非 NULL 值。

SERVERDEFAULT

父欄位從指定的伺服器元件取得其值。 有效的伺服器元件為 clockcurrentuser,前者是工作項目更新的時間,而後者則是更新工作項目之使用者的識別。

SUGGESTEDVALUES

列舉清單包含父欄位的建議值。

VALIDUSER

只有指定的使用者才可以修改父欄位。

回到頁首

定義相依必要欄位

您可以指定當另一個欄位包含特定值時,才需要欄位。 在下列範例中,當客戶回報 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>

請參閱

概念

所有 FIELD XML 項目參考

其他資源

設定工作項目欄位的條件

使用欄位規則