將規則套用至工作項目欄位
視欄位的資料類型而定,您可以設定各種限制規定哪些資料可以輸入該欄位。 您可以指定挑選清單 (下拉式功能表) 的值、設定預設值、清除項目,或限制變更。 透過條件式規則,您可以根據不同欄位的值之間的相依性,將規則套用至欄位。 您也可以限制可修改欄位的人員,或將規則的範圍設為僅套用至群組。
這些規則項目全部都可以在工作項目類型 (WIT) 定義的 FIELD 定義中定義,並受限於一些系統欄位的限制。 此外,除了 HELPTEXT 之外,您可以指定這些規則在工作流程轉換期間生效,或做為 FIELD (全域工作流程) 項目中的子項目。
您可以依照本主題所述的條件約束,對欄位定義任何規則組合。
說明文字:指定出現在欄位之工作項目表單中的工具提示文字。 挑選清單:指定包含允許值、建議值或禁用值的下拉式功能表或挑選清單。 |
指派值規則:定義執行階段行為和條件約束:
|
條件式規則:指定規則集套用至父欄位的時機。 根據使用者角色設定條件:根據正在建立或修改工作項目的人員來套用規則。 使用語彙基元指定群組:使用正確的語彙基元指定群組的網域或範圍。 |
哪些規則可套用至系統欄位? 如何避免人名欄位發生驗證錯誤? 有無任何方法可定義複選挑選清單? |
我該在何處套用欄位規則? 如何評估規則? 套用的順序為何? 表單中的按鍵輸入項目對規則評估有哪些影響? |
如何修改 [狀態] 和 [原因] 欄位? 如何讓欄位包含另外兩個欄位加總的值? 何時應使用全域工作流程定義欄位規則? |
欄位規則是您必須自訂工作項目追蹤的一個元件。 若要進一步了解,請參閱自訂工作追蹤物件以支援小組的流程。
如需修改欄位或將欄位規則加入 WIT 定義檔的相關資訊,請參閱 修改或加入欄位以支援查詢、報表和工作流程。
說明文字
您可以自訂使用者指向工作項目表單上的某個欄位時,所出現的說明文字或工具提示文字。 您可以為出現在不同 WIT 和不同 Team 專案中的相同欄位,自訂及當地語系化其說明文字。 說明文字限制在 255 個 Unicode 字元。
下列範例示範如何將說明文字指派給自訂 [Business Justification] 欄位:
<FIELD name=”Business Justification” refname="Fabrikam.BusinessJustification" type="String">
<HELPTEXT>Only required when you set the Urgencyfield to Need Immediately. </HELPTEXT>
</FIELD>
若要提供使用者超過 255 個字元限制的指引,請參閱 在工作項目表單上提供說明文字、超連結或 Web 內容。
注意事項 |
---|
HELPTEXT 的出現會增加儲存的資料大小並可能影響延展性。如果您支援單一 TFS 執行個體內有數百個 Team 專案,請保守使用 HELPTEXT 規則。 |
挑選清單規則
挑選清單規則定義使用者可以或不可以為字串欄位選擇的值。 在挑選清單中定義的值會出現在工作項目表單和查詢編輯器中。 您可以合併清單,以及展開或摺疊清單。 您也可以使用 for 和 not 屬性,根據正在修改工作項目的人員來套用或忽略這些規則。
規則 |
使用方式 |
---|---|
ALLOWEDVALUES |
限制使用者可以根據指定的值選擇的值。 |
ALLOWEXISTINGVALUE |
允許欄位保留現有的值,即使這個值已不存在於挑選清單中亦然。 當您變更挑選清單中的欄位值,或針對包含人名的挑選清單變更欄位值時,建議您包含這項規則。 |
GLOBALLIST |
指定全域清單的名稱,該清單包含針對 Team 專案或專案集合維護的值。 |
PROHIBITEDVALUES |
防止指派指定的值。 如果欄位包含禁止使用的值,則無法儲存工作項目。 |
SUGGESTEDVALUES |
定義使用者可從中選擇的值清單 (但不僅限用於選取)。 使用者可以指定這個清單以外的值。 |
如需使用挑選清單的範例,請參閱 定義挑選清單。
指派值規則
指派值規則定義執行階段行為和條件約束,例如指定預設值、清除欄位、要求定義欄位等。 您可以使用 for 和 not 屬性,根據正在修改工作項目的人員來套用或忽略這些規則。
清除、設定預設值、複製值或強制值符合某個模式
這些規則支援設定預設值、將值從一個欄位複製到另一個欄位,或強制欄位值符合指定的模式。
規則 |
使用方式 |
---|---|
COPY |
當使用者建立或修改工作項目時,將指定的值複製到欄位。 |
DEFAULT |
當使用者建立或修改工作項目時,為空白欄位指定值。 如果欄位已有值,則會忽略 DEFAULT 規則。 |
EMPTY |
當使用者儲存工作項目時,會清除欄位所包含的任何值,然後使欄位變成唯讀。 EMPTY 不應與 READONLY 一起使用。 EMPTY 主要是用於狀態轉換期間,以清除適用於項目轉換之目標狀態的欄位。 |
MATCH |
強制為字串欄位建立的項目符合字元或數字的指定模式。 |
SERVERDEFAULT |
當使用者儲存工作項目時,將目前的使用者名稱或伺服器時鐘值複製到欄位。 這些欄位通常會以唯讀狀態出現在表單上。 |
如需語法結構和範例,請參閱 定義預設值或將值複製到欄位。
必要、唯讀及限制指派給欄位的值
下列規則在指定或變更欄位值方面設有限制。
規則 |
使用方式 |
---|---|
CANNOTLOSEVALUE |
防止使用者在指定值之後清除欄位的值。 |
FROZEN |
防止使用者在欄位包含值之後變更欄位的值。 一旦使用者以該欄位的值儲存工作項目之後,就無法再修改這個值。 |
NOTSAMEAS |
防止將指派給其他欄位的同一個值,指派給某個欄位。 |
READONLY |
防止對欄位進行任何修改。 您可能想要在某些情況下套用這項規則。 例如關閉工作項目之後,您想要將欄位設為唯讀,以保留資料供報告之用。 請勿將 READONLY 與 EMPTY 項目一起使用,因為 EMPTY 也會使欄位變成唯讀。 如果結合這些項目,結果會不一致。 此外,您也可以使用 Control 項目的 ReadOnly 屬性,將工作項目中的欄位設為以唯讀狀態出現。 其他用戶端可以寫入這個欄位,但無法透過工作項目表單寫入。 |
REQUIRED |
使用者必須指定欄位值。 使用者必須指派值給所有必要欄位,才能儲存工作項目。 |
如需語法結構,請參閱 所有 FIELD XML 項目參考。
限制可建立或修改工作項目的人員
您可以藉由將 VALIDUSER 項目套用至人名欄位,來控制可建立或修改工作項目的人員。 當您指定這個項目時,您會指出哪些使用者或使用者群組可指派為欄位值。 您可以將這個項目設為支援選擇性 group 屬性,指派給該欄位的人員必須是您指定之群組的直接或間接成員。 根據預設,欄位中可指定 [Team Foundation Valid Users] 群組的所有成員。
VALIDUSER 項目只對字串欄位類型有效。 您可以分別指定 for 或 not 屬性的使用者或群組,以允許或限制這個規則是否適用於正在修改工作項目的使用者。
<VALIDUSER group="groupName" for="userName" not="userName" />
只有參考人名欄位時,才能使用 VALIDUSER 規則。 下列系統欄位是人名欄位的範例:
啟動者 (System.ActivatedBy)
指派給 (System.AssignedTo)
通過授權為 (System.AuthorizedAs)
變更者 (System.ChangedBy)
關閉者 (System.ClosedBy)
建立者 (System.CreatedBy)
除了系統欄位之外,您還可以建立自訂字串欄位,並以此做為人名欄位。 此外,您也可以同步處理人名欄位與 Active Directory (指定 syncnamechanges="true")。
工作項目欄位不會區分不同網域中的使用者識別。 因此,將 "Fabrikam\ctsoapo" 和 "Contoso\ctsoapo" 輸入使用 VALIDUSER 規則的欄位時,會將兩者視為相同的使用者。
條件式規則
條件式規則可讓您指定何時將規則集套用至父欄位。 您可以根據是否將指定的值指派 (或不指派) 給其他欄位,或者其他欄位變更 (或未變更) 的時間,進而設定條件。 您可以在條件式規則項目內包含挑選清單及指派值規則。
規則 |
使用方式 |
---|---|
WHEN |
將指定的值指派給其他欄位時,指定要套用至父欄位的規則。 |
WHENNOT |
未將指定的值指派給其他欄位時,指定要套用至父欄位的規則。 |
WHENCHANGED |
當指定的欄位值變更時,指定要套用至父欄位的規則。 |
WHENNOTCHANGED |
當指定的欄位值未變更時,指定要套用至父欄位的規則。 |
您可以為每個欄位指定多個條件式規則。 但是,您只能為每個條件式規則指定一個驅動欄位。 您無法巢狀化條件式規則。 如需語法結構和範例,請參閱 指派以條件為基礎的值和規則。
根據正在建立或修改工作項目的人員來套用或忽略規則
您可以使用 for 或 not 屬性,建立挑選清單或指派值規則以套用或不套用至使用者群組。 設定群組做為規則的範圍。 若要將規則的範圍設為多個群組,您必須建立父 TFS 群組,其中包含您要使用的一組群組。
將欄位設為僅限指定群組的必要欄位:
使用 for 將規則套用至群組。 下列範例要求 Junior Analysts 群組中的所有使用者必須完成 [Second Approver] 欄位。
<FIELD name="Second Approver"> <REQUIRED for="Example1\Junior Analysts"/> </FIELD>
限制可修改欄位的使用者群組:
使用 not 從規則中排除群組。 下列範例將 [Triage Description] 欄位定義為除了 Triage Committee 群組中的使用者之外,對於其他所有人均為唯讀。
<FIELD name="Triage Description"> <READONLY not="[Project]\Triage Committee" /> </FIELD>
將欄位設為部分使用者的必要欄位:
搭配使用 for 和 not,同時將規則套用至某些使用者及不套用至其他使用者。 下列範例將 [Severity] 定義為 Project Members 群組中使用者的必要欄位,但對於 Project Admins 群組中的使用者則非必要。
<FIELD name="Severity"> <REQUIRED for="[Project]\Project Members" not="[Global]\Project Admins"/> </FIELD>
由於 Deny 的優先順序高於 Allow,如果使用者同時屬於兩個群組,則會強制執行 "not" 陳述式,且欄位並非必要。
使用語彙基元參考群組
當您將規則限制在群組時,您必須指出群組的網域或範圍。 對於某些值,您可以使用語彙基元。
人名欄位可接受同時參考使用者和群組的值。 欄位屬性 for 和 not 則適用於群組。 當您指定這些項目的值時,可使用下列語彙基元。
將範圍設為 Team 專案 - [Project]:
[Project] 語彙基元可用來指定為 Team 專案定義的群組。 這會對應至小組、內建 TFS 群組 (例如 [Project]\Contributors 群組)、您在專案層級建立的自訂 TFS 群組,或您加入 TFS 群組的 Windows 群組。 例如:
小組:[Project]\Fabrikam Team
當您建立小組時,系統會建立包含指派給該小組之成員的 TFS 群組。
Team 專案群組:[Project]\Contributors
加入 Team 專案的 Windows 群組:[Project]\ Triage Committee
**提示:**您可以在 Team Web Access (TWA) 管理內容中開啟 [安全性] 頁面,來檢視有效群組的清單。
將範圍設為專案集合 - [集合名稱]:
[集合名稱] 可用來參考以集合為範圍的 TFS 群組,例如 Project Collection Administrators 群組或您加入集合的 Windows 群組。 例如:
<FIELD name="Title"> <READONLY for="[DefaultCollection]\Project Collection Valid Users"/> </FIELD>
將範圍設為伺服器執行個體 - [GLOBAL]:
[GLOBAL] 語彙基元可用來參考以伺服器為範圍的 TFS 群組,例如內建群組或您加入伺服器層級群組的 Windows 群組。 例如:
<FIELD name="Title"> <READONLY for="[Global]\Team Foundation Valid Users"/> </FIELD>
指定網域限定帳戶或群組:
網域限定帳戶名稱 (例如下列範例所示的名稱) 可用來參考網域使用者或群組。 請注意,某些規則只支援群組,而不支援參考網域使用者。
<LISTITEM value="FABRIKAM\Christie Church’s Direct Reports"/>
所有使用者和群組都必須由上述其中一個語彙基元限定。 例如,下列 XML 無效,因為它未使用有效的語彙基元限定指定的群組。
<FIELD name="Title">
<READONLY for="Dev Team"/>
</FIELD>
問與答
問:哪些規則可套用至系統欄位?
**答:**系統欄位具有 Sytem.名稱 參考名稱,例如 System.Title 和 System.State。 TFS 會限制這些欄位的自訂內容,但不包括下列執行個體:
HELPTEXT 規則可指派給所有欄位。
READONLY 規則可指派給 [狀態] 和 [原因] 欄位。
大多數規則可指派給 [標題]、[指派給]、[描述] 或 [變更者] 系統欄位。
問:如何避免人名欄位發生驗證錯誤?
**答:**若要避免成員離開小組、不再註冊為專案參與者時,可能發生的驗證錯誤,請將 ALLOWEXISTINGVALUE 項目加入 [指派給] 欄位。
<FIELD name="Assigned To" refname="System.AssignedTo" type="String" syncnamechanges="true" reportable="dimension">
<HELPTEXT>The user who is working on this work item</HELPTEXT>
<ALLOWEXISTINGVALUE />
<VALIDUSER />
<ALLOWEDVALUES expanditems="true" filteritems="excludegroups">
<LISTITEM value="Active" />
<LISTITEM value="[project]\Contributors" />
</ALLOWEDVALUES>
<DEFAULT from="field" field="System.CreatedBy" />
</FIELD>
問:是否有方法可定義複選挑選清單?
**答:**這項功能不受原生支援。不過,您可以調整下列 CodePlex 專案所提供的原始程式碼:TFS 工作項目追蹤的自訂控制項。
問:如何修改 [狀態] 和 [原因] 欄位?
答:[狀態] 和 [原因] 欄位在 WIT 定義的 WORKFLOW 區段中定義。 您可以指定在變更狀態、選取原因或特定轉換期間,將大多數欄位規則套用至欄位。 若要進一步了解,請參閱變更工作項目類型的工作流程。
問:我該在哪裡套用欄位規則?
**答:**當您要在整個工作項目存留期將某項規則套用至某個欄位時,請在 FIELD 定義中指定這項規則。 例如,如果某個欄位對於新的作用中 Bug 而言是必要欄位,在關閉 Bug 之前,這個欄位皆為必要欄位。
否則,請將規則指定為只在狀態變更期間才進行評估。 這些規則在 STATE、REASON 或 TRANSITION 項目下的 WORKFLOW 區段中定義。 所有規則 (HELPTEXT 除外) 都可以在 FIELD (工作流程) 項目中套用。
欄位規則會加總。 也就是說,您可以對同一個欄位指定四組規則,工作項目規則引擎會評估所有規則。
特定工作項目類型的規則在套用時,與工作項目在其狀態模型中的位置無關。 例如,<REQUIRED /> 規則會執行下列檢查:
"MyField Value" != NULL
特定狀態的範圍設為處於特定狀態的工作項目執行個體。 下列條件成立時,會強制執行特定狀態的規則:
State field value == "MyState" && "MyField Value" != NULL
您針對特定轉換指定之特定轉換的規則之範圍設為正在進行特定轉換的工作項目。 下列條件成立時,會強制執行這些規則:
State field value == "ToState" &&
"Previous State Before Edit/New" == "FromState"
&& "MyField Value" != NULL
您針對特定原因指定之特定原因的規則範圍設定為特定轉換的特定原因。 下列條件成立時,會處理這些規則:
Reason field == "MyReason" &&
State field value == "ToState" &&
"Previous State Before Edit/New" == "FromState" && "MyField Value" != NULL
下列範例限制只有在工作項目處於「作用中」狀態時,才能修改客戶嚴重性欄位。
<STATE name="Active">
<FIELDS>
<FIELD refname="MyCorp.Severity" >
<READONLY />
</FIELD>
</FIELDS>
</STATE>
問:如何評估規則?套用的順序為何?
**答:**通常會依列出規則的順序來處理規則。 不過,當您使用 WHEN*、DEFAULT 和 COPY 項目時,可能適用其他行為。
您可以大致了解將多項規則套用至欄位時的規則評估方式, 但並沒有一定的規則評估方式。 本節說明當您使用 WHEN*、DEFAULT 和 COPY 規則時的預期行為和互動。
下列步驟依正確順序顯示 TFS 執行的互動,以及工作項目表單的使用者互動。 只有步驟 1、8 和 13 由使用者執行。
使用者從 Team Foundation 用戶端 (例如 Visual Studio、Team Explorer、Team Web Access 或 Team Explorer Everywhere) 建立新的工作項目,或編輯現有的工作項目。
填入欄位預設值。 針對所有欄位,使用任何 WHEN* 規則以外的 DEFAULT 規則。
複製欄位值。 針對所有欄位,使用任何 WHEN* 子句以外的 COPY 規則。
針對符合 WHEN 規則的所有欄位,首先執行 DEFAULT,然後執行內部的 COPY 規則。
針對符合 WHENNOT 規則的所有欄位,首先執行 DEFAULT,然後執行內部的 COPY 規則。
TFS 一律會先處理 WHEN 規則,再處理 WHENNOT 規則。
針對在步驟 1 後已變更其值並包含 WHENCHANGED 規則的所有欄位,首先執行 DEFAULT,然後執行內部的 COPY 規則。
允許使用者開始編輯。
使用者變更欄位值,然後將焦點移出欄位。
引發該欄位符合新值的任何 WHEN 規則。
引發該欄位符合新值的任何 WHENNOT 規則。
引發該欄位符合新值的任何 WHENCHANGED 規則。
將編輯能力歸還給使用者。
使用者會將變更儲存至資料庫。
針對所有欄位,執行為欄位定義的 SERVERDEFAULT 作業 (直接或間接根據 WHEN 或 WHENNOT 規則)。
問:表單中的按鍵輸入項目如何影響規則評估?
**答:**系統會在每次使用者透過 UI 工作項目表單在欄位中輸入一個按鍵動作時,為欄位設定一個新值。 也就是說,符合規則的必要條件時,可能會意外發生條件式規則。
在下列 XML 範例中,當您在 [狀態] 欄位中輸入 "Approved Again" 時,會清空 SubStatus,因為一旦使用者輸入 Approved 中的字母 "e",即使預期的最終值不是 "Approve",也會發生 WHEN* 規則。 因此,當您使用條件式規則時,請謹慎考量。
<FIELD refname="MyCorp.SubStatus" />
<WHEN field="MyCorp.Status" value="Approve" >
<EMPTY />
</WHEN>
</FIELD>
問:如何使一個欄位包含另外兩個欄位加總的值?
**答:**這項功能目前不受原生支援。
問:何時可使用全域工作流程定義欄位規則?
**答:**只有在您負責維護多個 Team 專案中具有相同定義和規則的許多欄位時,才能使用全域工作流程。 使用全域工作流程類似於全域清單,可將必須更新欄位定義時所需的工作減至最少。 如需詳細資訊,請參閱自訂全域工作流程。