Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
規則可用來設定或限制工作項目欄位的值指派。 有兩種主要類型的規則、自動產生的規則和針對流程或專案定義的自訂規則。 自動產生的規則可將應該以標準方式運作的區域新增自訂規則的需求降到最低。
您可以定義自訂規則以支援您的商務使用案例。 視欄位的資料類型而定,您可以設定各種限制規定哪些資料可以輸入該欄位。 您可以指定挑選清單 (下拉式功能表) 的值、設定預設值、清除項目,或限制變更。 透過條件式規則,您可以根據不同欄位的值之間的相依性,將規則套用至欄位。 您也可以限制可修改欄位的人員,或將規則的範圍設為僅套用至群組。
請閱讀本文以瞭解下列內容:
- 系統如何套用自動產生的規則
- 對於在系統欄位上定義自訂規則的限制
- 您可以套用的不同自訂規則類型
- 如何評估規則
- 針對繼承程式所定義的規則與內部部署 XML 進程之間的差異
- 為何您應該將您定義的自定義規則數目降到最低
在定義自定義規則之前,請閱讀 設定和自定義 Azure Boards ,以深入瞭解如何自定義 Azure Boards 以符合您的業務需求。
提示
將您為 WIT 定義的規則數目降到最低。 雖然您可以為 WIT 建立多個規則,但當使用者新增和修改工作項目時,新增規則可能會對效能造成負面影響。 當使用者儲存工作項目時,系統會驗證與其工作項目類型欄位相關聯的所有規則。 在某些情況下,規則驗證運算式太複雜,SQL 無法評估。
自動產生的規則
自動產生的規則可將應該以標準方式運作的區域新增自訂規則的需求降到最低。
狀態轉換規則
繼承的進程會針對每個新增至工作流程的自定義工作項目類型和自定義狀態動態產生一組任意對任意狀態轉換規則。 從任何狀態轉換到任何狀態都是有效的。
針對內部部署的 XML 進程,您必須在工作項目類型定義的 WORKFLOW
區段中指定有效的過渡。
狀態轉換和由/日期欄位規則
[由/日期] 字段會對應至 [建立者/日期]、[啟動者/日期]、[解決者/日期] 和 [關閉者/日期]。
針對繼承的進程,當您將工作專案從某個狀態轉換為另一個狀態時,會自動設定或清除這些字段。 [變更依據/日期] 字段不會包含在內,因為它們會隨著每個工作專案儲存而更新,而且與狀態轉換無關。
管理這些欄位的預設規則和行為包括:
- 已關閉 狀態始終包含在 已完成 狀態類別中。
- [已完成] 狀態類別無法設定,且與一個和只有一個狀態相關聯。
- 對於敏捷式和 CMMI 流程而言,該狀態一律為 Closed,而對於 Scrum 和基本流程而言,該狀態一律為 Done。
- 這些規則的自動產生會受到地區設定的影響,因為規則條件包含經過在地語系化處理的州名稱。 系統會針對不同的地區設定產生不同的規則。
- 這些欄位的自動產生規則只會針對包含這些欄位的工作項目類型指定。 工作項目類型可能不包含其中一或多個字段。
- 當工作專案類型具有自定義狀態,或工作專案類型是自定義工作項目類型時,需要這些規則。
- 這些規則僅適用於繼承的進程;它們永遠不會針對裝載的 XML 或內部部署 XML 進程產生。
工作流程狀態與狀態類別相關聯,以支援面板上的工作流程。 如需詳細資訊,請參閱 待辦事項和 Boards 中的工作流程狀態和狀態類別的使用方式。
狀態變更日期欄位規則
在技術層面上,這些規則比完結依據/關閉日期的規則簡單很多,因為它們不依賴於任何特定狀態。 對於任何工作項目類型,相同的規則一律會運作。 它們必須自動產生,因為某些 OOB 工作專案類型不包含 [狀態變更日期] 字段,因此當使用者將此字段新增至自定義工作項目類型時,也必須自動產生這些規則。 這裡也適用於 [關閉者/ 關閉日期] 規則的相同原則。
自訂規則
所有自訂規則都是選擇性的。 針對繼承的進程,您可以指定由條件加動作所組成的規則。 針對內部部署 XML 程式,您可以指定欄位或工作流程內的規則。
這兩個進程之間沒有一對一對應。 在某些情況下,XML 元素規則是在繼承進程的 [編輯字段] 對話框中定義,而不是做為規則。 繼承的行程中不支援其他 XML 元素,例如FROZEN
、MATCH
、NOTSAMEAS
。
請注意以下要點:
- 規則始終會被強制執行,不僅在您與窗體互動時,而且在透過其他工具介面操作時也是如此。 例如,將欄位設定為唯讀不僅會套用至工作項目表單上的規則,也會透過 API 和 Excel Azure DevOps Server 外掛來套用。
- 繼承的流程條目會指定條件和動作,以完成整體規則。 XML 元素不會區分這些元素。
- 欄位規則不支援指派兩個其他欄位的總和或執行其他數學計算的值。 不過,您可以透過 TFS 匯總工具 (Web 服務) Marketplace 擴充功能,找到符合您需求的解決方案。 請參閱工作和其他欄位的匯總。
- 您可能會發現其他使用 Marketplace 擴充套件將自訂規則應用於欄位的解決方案,例如 工作項目表單控制項庫擴充套件。
規則組合
對於繼承的進程,每個規則都包含兩個部分:條件和動作。 條件會定義必須符合才能套用規則的情況。 動作會定義要執行的作業。 針對大部分的規則,您可以為每個規則指定最多兩個條件和10個動作。 所有自定義規則都需要符合所有條件才能執行。
例如,您可以根據指派給狀態的值和另一個字段,建立必要的欄位。 例如:
(Condition) When a work item State is
積極
(Condition) And when the value of
值區域 = 業務
(Action) Then make required
故事點數
注意
目前,狀態轉換規則只支援一個條件。 如果您要根據狀態套用規則,請參閱 將規則套用至工作流程狀態。
下表摘要說明所選條件中可用的動作。
條件
支援的動作
設定欄位值或將其設為必填或唯讀
根據狀態限制轉換
隱藏欄位或根據狀態和使用者或群組成員資格,將字段設為唯讀或必要
根據某些條件和使用者或群組成員資格,設定欄位屬性或限制狀態轉換
如果定義太多規則,會發生什麼事
每個項目都會定義單一 SQL 運算式,以在建立或更新工作專案時驗證工作專案。 此表達式會隨著您為項目定義之所有工作項目類型所指定的規則數目而成長。 針對欄位指定的每個行為限定符都會增加子表達式的數目。 巢狀規則、僅適用於轉換或以其他欄位值為條件的規則,會導致將更多條件新增至 IF
語句。 一旦表達式達到特定大小或複雜度,SQL 就無法再評估它併產生錯誤。 拿掉某些 WIT 或排除某些規則,可以解決錯誤。
您可以指定挑選清單 (下拉式功能表) 的值、設定預設值、清除項目,或限制變更。 透過條件式規則,您可以根據不同欄位的值之間的相依性,將規則套用至欄位。 您也可以限制可修改欄位的人員,或將規則的範圍設為僅套用至群組。
工作項目規則並不是單一集合。 規則實際上是從不同的數據源動態產生和合併。 合併邏輯是簡單的規則,合併相同的規則,但不會修剪衝突的規則。
略過規則
一般而言,當使用者修改工作專案時,規則引擎會驗證所有工作專案。 不過,為了支援某些案例,被指派 工作專案更新略過規則 專案層級權限的使用者,可以儲存工作專案而不需要評估規則。
規則可以透過兩種方式之一略過。 第一個是透過工作專案 - 更新 REST API,並將參數bypassRules
設定為 true
。 第二個是透過客戶端物件模型,使用 bypassrules 模式初始化 (以 WorkItemStore
初始化 WorkItemStoreFlags.BypassRules
)。
系統欄位和自定義規則
系統欄位具有系統.名稱 參考名稱,例如 System.Title 和 System.State。
下列系統欄位必須具有值:區域標識碼、變更日期、建立日期、建立日期、建立者、狀態和原因。
規則引擎會將設定條件或動作限制為系統欄位,但如下所示:
- 您可以將 [狀態] 和 [原因] 字段設為唯讀。
- 您可以將大部分規則套用至 [標題]、 [指派給]、 [描述] 和 [ 變更者] 字段。
如果您在繼承程式之規則使用者介面的下拉功能表中看不到列出的欄位,這就是原因。 例如,如果您嘗試根據條件讓 區域路徑 (System.AreaPath) 只讀,則 [區域路徑 ] 字段無法供選取使用。 即使您能夠指定系統欄位,規則引擎仍可能會限制您儲存規則。
預設和複製規則
默認和複製規則會修改工作專案欄位的值。 它們會定義運行時間行為和條件約束,例如指定預設值、清除欄位、要求定義欄位等等。
您可以根據目前使用者的群組成員資格來限制這些規則的應用,如使用者或群組成員資格規則限制中所述。
大部分的規則動作都可以在選擇任何條件時套用。
繼承的進程動作
說明
Copy the value from...
指定另一個字段,其中包含要複製到目前欄位的值。
Clear the value of...
清除字段中包含的所有值。
Use the current time to set the value of ...
根據目前用戶的時間設定,為欄位設置時間。
條件約束規則
條件約束規則會限制變更欄位的值。 他們會定義工作專案的有效狀態。 每個條件約束都會在單一欄位上運作。 條件約束會在工作專案儲存的伺服器上進行評估,如果違反任何條件約束,則會拒絕儲存作業。
您可以根據目前使用者的群組成員資格來限制這些規則的應用,如使用者或群組成員資格規則限制中所述。
大部分的規則動作可以應用於選取的任何條件。
繼承的進程動作
說明
Hide the field...
只有在選取群組成員資格條件時才能使用。
指定不顯示工作項目表單上的欄位,基本上移除目前用戶變更欄位值的能力。
Make read-only
防止欄位被任何修改。 您可能想要在特定條件下套用此規則。 例如,關閉工作項目之後,您想要讓欄位成為唯讀欄位,以保留資料以供報告之用。
若要指定欄位預設值是唯讀的,請在 [編輯欄位] 對話框的 [選項 ] 索引標籤中指定 。
Make required
需要使用者指定欄位的值。 用戶必須先將值指派給所有必要的欄位,才能儲存工作專案。
若要指定欄位預設值,請在 [編輯欄位] 對話框的 [選項 ] 索引標籤中指定 。
挑選清單
選擇清單會定義使用者可以或無法為 String 或 Integer 字段選擇的值。 在挑選清單中定義的值會出現在工作專案表單和查詢編輯器上。
對於繼承的程式,挑選清單是透過 [編輯] 欄位對話框來定義。
編輯欄位對話框
說明
挑選清單欄位的定義 索引標籤
定義欄位允許的值清單。 允許的值是可在工作專案表單和查詢產生器之欄位清單中選取的值。 您必須從其中一個值中選取。
在 [選項] 索引標籤中勾選 允許使用者輸入自己的值 複選框,以允許使用者指定自己的條目。
定義欄位的建議值清單。 建議的值是可用於在工作專案表單和查詢產生器之欄位清單中選取的值。 您可以在清單中的其他值中輸入其他值。
條件式欄位值或變更
條件式規則會根據欄位的值指定動作,該值等於或不等於特定值,或變更為或未對特定欄位的值進行變更。 一般而言,條件式規則優先於無條件規則。 當多個條件式規則評估為 true 時,執行順序為:When、WhenNot、WhenChanged、WhenNotChanged。
您可以為每個欄位指定多個條件式規則。 不過,您只能對於每個條件規則指定單一驅動欄位。
遺傳疾病
說明
The value of ... (equals)
[何時]
指定當另一個字段具有特定值時,要套用至目前字段的一或多個規則。
A change was made to the value of ...
[當更改時]
當特定欄位的值變更時,將一或多個規則套用至目前的欄位。
** The value of ... (not equals)
[非時]
當另一個字段沒有特定值時,將一或多個規則套用至目前的欄位。
No change was made to the value of ...
[未更改時]
當特定欄位的值未變更時,將一或多個規則套用至目前的欄位。
繼承的動作
說明
Clear the value of ...
Copy the value from ...
Make read-only ...
Make required ...
Set the value of ...
Use the current time to set the value of ...
Use the current user to set the value of ...
指定要在特定欄位採取的動作。
使用者或群組成員資格規則限制
您可以根據目前使用者的成員資格來限制規則的應用程式。 我們建議您將規則範圍設定為 Azure DevOps 安全組,而不是單一使用者,不過您可以指定後者。 若要將規則範圍設定為多個群組,您必須建立包含您想要使用的群組集的父 Azure DevOps 群組。
程序實作
提示
若要避免可能發生的規則評估問題,請指定 Azure DevOps 安全組,而不是Microsoft Entra ID 或 Active Directory 安全組。 如需詳細資訊,請參閱 默認規則和規則引擎。
如下表所示,若要根據目前使用者的成員資格來限制規則,您可以為繼承流程指定兩個條件之一。 這些規則適用於 Azure DevOps 2020 和更新版本。
適用於
規則
条件
Current user is a member of group ...
Current user is not member of group ...
動作
Hide the field ...
Make read-only ...
Make required ...
Restrict the transition to state ...
使用令牌參考使用者或群組
身分識別或人員選擇器字段可以接受參考使用者和群組的值。 當您將規則限制為群組時,表示群組的網域或範圍。 針對某些值,您可以使用令牌。
代幣的範例包括以下內容:
- [ProjectName],例如 [Fabrikam]、[FabrikamFiber]、[MyProject]
- [OrganizationName],例如 [fabrikam], [myorganization]
- [CollectionName],像是 [fabrikam] 或 [myorganization]
若要瞭解專案或組織可用的範圍,請移至 >] 或 [組織設定許可權>>群組] 頁面,您可以視需要篩選清單。 例如,下圖顯示的是依據 Azure DevOps 篩選列表的前四個項目。 如需詳細資訊,請參閱 變更專案層級許可權 或 變更專案集合層級許可權。
若要深入了解預設安全組,請參閱 許可權和群組
規則評估
根據修改工作專案者的使用者或群組成員資格來指定條件的規則,會用兩種方式之一進行評估。 評估規則時,應用程式必須藉由檢查該使用者是否為指定群組的成員,來判斷規則是否套用至目前使用者。
- 從入口網站、REST API 或 azure boards 命令修改工作專案時,會提出對 Microsoft Entra ID 或 Active Directory 的要求。 這項作業不會發生任何問題。
- 使用 WIT 用戶端物件模型從 Visual Studio、Excel 或其他自定義工具修改工作專案時,評估成員資格的要求是以用戶端快取為基礎。 用戶端快取並不知道 Active Directory 群組。
注意
使用 GIT 之專案的 Visual Studio 2019 Team Explorer 已重新撰寫成使用 REST API。
若要避免使用者從各種用戶端更新工作項目時發生問題,請指定 Azure DevOps 安全組,而不是 Active Directory 群組。 您可以輕鬆地建立 Azure DevOps 安全組,以對應至 Active Directory 群組。 若要瞭解如何,請參閱 新增或移除使用者或群組、管理安全組。
注意
WIT 用戶端 OM 已被取代。 自 2020 年 1 月 1 日起,不再支援針對 Azure DevOps Services 和 Azure DevOps Server 2020 的操作。
評估規則的順序
規則通常會在列出規則的順序中處理。 不過,評估所有規則的完整順序並不完全具決定性。
本節描述當您套用條件式、複製和默認規則時的預期行為和互動。
下列步驟以正確的順序顯示 Azure DevOps 所執行的互動,以及工作項目表單使用者的操作。 使用者只會執行步驟 1、8 和 13。
從 Azure DevOps 用戶端,例如入口網站或 Visual Studio Team Explorer,使用者會建立新的工作專案或編輯現有的工作專案。
填入欄位預設值。 針對所有欄位,套用指派給不屬於條件子句之欄位的任何預設值。
複製或設定域值。 針對所有欄位,套用任何規則來複製值,或設定不屬於條件子句之字段的值。
針對所有符合當時條件的規則的欄位,套用規則來設定或複製欄位值。
對於符合「不符合條件時的規則」的所有欄位,請套用規則來設定或複製欄位值。
系統一律會先處理 When 規則,再處理 When Not 規則。
對於自步驟 1 之後已變更其值的所有欄位,且包含 [變更 時] 規則,請套用規則來設定或複製域值。
允許用戶開始編輯。
用戶變更域值,然後從欄位移動焦點。
處理符合新值之欄位的任何 When 規則。
處理符合新值之欄位的任何 When Not 規則。
處理符合新值的欄位的任何變更時規則。
恢復使用者的編輯功能。
用戶會將變更儲存至數據存放區。
針對所有欄位,套用在條件式規則下直接或間接為字段定義的任何
Use the current time to set the value of ...
動作。