Azure DevOps 服務 |Azure DevOps Server |Azure DevOps Server 2022
本文說明如何使用延伸模組來自訂工作專案表單。 您可以將動作、觀察者、群組或頁面新增至 Azure DevOps 中的工作專案表單。
小提示
如果您要啟動新的 Azure DevOps 延伸模組,請先嘗試這些維護的範例集合,它們可與目前的產品組建搭配使用,並涵蓋新式案例 (例如,在提取要求頁面上新增索引標籤) 。
- Azure DevOps 延伸模組範例 (GitHub) — 示範常見延伸模組模式的精簡入門範例: https://github.com/microsoft/azure-devops-extension-sample
- Azure DevOps 延伸模組範例 (舊版集合和貢獻指南) — 安裝以檢查 UI 目標,或檢視來源: https://marketplace.visualstudio.com/items/ms-samples.samples-contributions-guide 和 https://github.com/Microsoft/vso-extension-samples/tree/master/contributions-guide
- Microsoft Learn 範例(瀏覽 Azure DevOps 範例)— Microsoft 文件中精選的最新範例:/samples/browse/?terms=azure%20devops%20extension
如果範例在您的組織中無法運作,請將它安裝到個人或測試組織中,並將擴充功能資訊清單的目標識別碼和 API 版本與現有的文件進行比較。如需參考和 API,請參見:
如需完整的原始程式碼,請參閱 GitHub 上的 Azure DevOps 擴充功能範例中的 UI 範例。
新增群組
若要將群組新增至主頁面,請將項目新增至擴充功能清單。 此貢獻的類型應該是ms.vss-work-web.work-item-form-group,而且它應該針對ms.vss-work-web.work-item-form貢獻。
"contributions": [
{
"id": "sample-work-item-form-group",
"type": "ms.vss-work-web.work-item-form-group",
"description": "Custom work item form group",
"targets": [
"ms.vss-work-web.work-item-form"
],
"properties": {
"name": "My Group",
"uri": "workItemGroup.html",
"height": 600
}
}
]
屬性
| 財產 or 地產 | 說明 |
|---|---|
name |
出現在群組上的文字。 |
uri |
裝載工作項目表單及其腳本上所顯示 HTML 的頁面 URI。 |
height |
(選擇性)定義群組的高度。 省略時,其為100%。 |
JavaScript 範例
此範例展示如何註冊一個當工作項目表單上發生可能影響您貢獻群組的事件時會被呼叫的物件。
import { IWorkItemFormService, WorkItemTrackingServiceIds } from "azure-devops-extension-api/WorkItemTracking";
import * as SDK from "azure-devops-extension-sdk";
// Get the WorkItemFormService. This service allows you to get/set fields/links on the 'active' work item (the work item
// that currently is displayed in the UI).
async function getWorkItemFormService()
{
const workItemFormService = await SDK.getService<IWorkItemFormService>(WorkItemTrackingServiceIds.WorkItemFormService);
return workItemFormService;
}
// Register a listener for the work item group contribution after initializing the SDK.
SDK.register(SDK.getContributionId(), function () {
return {
// Called when the active work item is modified
onFieldChanged: function(args) {
$(".events").append($("<div/>").text("onFieldChanged - " + JSON.stringify(args)));
},
// Called when a new work item is being loaded in the UI
onLoaded: function (args) {
getWorkItemFormService().then(function(service) {
// Get the current values for a few of the common fields
service.getFieldValues(["System.Id", "System.Title", "System.State", "System.CreatedDate"]).then(
function (value) {
$(".events").append($("<div/>").text("onLoaded - " + JSON.stringify(value)));
});
});
},
// Called when the active work item is being unloaded in the UI
onUnloaded: function (args) {
$(".events").empty();
$(".events").append($("<div/>").text("onUnloaded - " + JSON.stringify(args)));
},
// Called after the work item has been saved
onSaved: function (args) {
$(".events").append($("<div/>").text("onSaved - " + JSON.stringify(args)));
},
// Called when the work item is reset to its unmodified state (undo)
onReset: function (args) {
$(".events").append($("<div/>").text("onReset - " + JSON.stringify(args)));
},
// Called when the work item has been refreshed from the server
onRefreshed: function (args) {
$(".events").append($("<div/>").text("onRefreshed - " + JSON.stringify(args)));
}
}
});
事件
| 事件 | 事件描述 | 論點 | 引數描述 |
|---|---|---|---|
onFieldChanged |
在欄位變更之後觸發。 如果欄位變更時執行了更新其他欄位的規則,那麼所有這些變更都屬於單一事件的一部分。 | ID | 工作項目的標識碼 |
changedFields |
陣列,其中包含所有已變更欄位的參考名稱。 | ID | 工作項目的標識碼 |
onLoaded |
在工作項目表單中載入數據後,當使用者開啟工作項目或者在分級檢視中瀏覽至另一個工作項目時觸發。 | ID | 工作項目的標識碼 |
onReset |
當用戶還原對工作項目的變更後被觸發。 | ID | 工作項目的標識碼 |
onRefreshed |
使用者手動重新整理工作項目後觸發。 | ID | 工作項目的標識碼 |
onSaved |
儲存工作項目後觸發。 針對對話框中的工作專案,您應該針對ms.vss-work-web.work-item-notifications 類型進行目標設定,以確保在對話框關閉之前事件能夠觸發,因為一旦對話框關閉,該項目類型就會被卸載。 如需詳細資訊,請參閱 監聽事件。 |
ID | 工作項目的標識碼 |
onUnloaded |
在使用者關閉對話方塊之前觸發,或在使用者移至標註檢視中的另一個工作項目之前觸發。 | ID | 工作項目的標識碼 |
新增頁面
新的頁面會作為標籤呈現在工作項目表單上。 詳細 索引標籤旁會出現新的頁面。
若要將頁面新增至工作項目表單,請將貢獻新增至延伸模組指令清單。 此貢獻的類型應該是ms.vss-work-web.work-item-form-page,而且它應該針對ms.vss-work-web.work-item-form貢獻。
"contributions": [
{
"id": "sample-work-item-form-page",
"type": "ms.vss-work-web.work-item-form-page",
"description": "Custom work item form page",
"targets": [
"ms.vss-work-web.work-item-form"
],
"properties": {
"name": "My Page",
"uri": "workItemPage.html"
}
}
]
屬性
| 財產 or 地產 | 說明 |
|---|---|
| 名稱 | 出現在頁籤上的文字。 |
| 統一資源識別碼 (URI) | 裝載工作項目表單及其腳本上所顯示 HTML 的頁面 URI。 |
JavaScript 範例
請參閱窗體群組一節中的 JavaScript 範例。 已註冊物件的名稱應該與貢獻中的id相符。
事件
| 事件 | 事件描述 | 論點 | 引數描述 |
|---|---|---|---|
onFieldChanged |
在欄位變更之後觸發。 如果欄位變更時執行了更新其他欄位的規則,那麼所有這些變更都屬於單一事件的一部分。 | ID | 工作項目的標識碼 |
changedFields |
陣列,其中包含所有已變更欄位的參考名稱。 | ID | 工作項目的標識碼 |
onLoaded |
在工作項目表單中載入數據後,當使用者開啟工作項目或者在分級檢視中瀏覽至另一個工作項目時觸發。 | ID | 工作項目的標識碼 |
onReset |
當用戶還原對工作項目的變更後被觸發。 | ID | 工作項目的標識碼 |
onRefreshed |
使用者手動重新整理工作項目後觸發。 | ID | 工作項目的標識碼 |
onSaved |
儲存工作項目後觸發。 針對對話框中的工作專案,您應該針對ms.vss-work-web.work-item-notifications 類型進行目標設定,以確保在對話框關閉之前事件能夠觸發,因為一旦對話框關閉,該項目類型就會被卸載。 如需詳細資訊,請參閱 監聽事件。 |
ID | 工作項目的標識碼 |
onUnloaded |
在使用者關閉對話方塊之前觸發,或在使用者移至標註檢視中的另一個工作項目之前觸發。 | ID | 工作項目的標識碼 |
在工作項目表單中設定參與專案
根據預設,在 Azure DevOps Services 中,群組延伸模組會出現在窗體的第二個數據行結尾,而頁面貢獻會顯示在所有工作專案表單頁面之後做為索引卷標。根據預設,控件貢獻不會顯示在窗體中,因此用戶必須手動將它們新增至表單。 在 Azure DevOps Server 中,若要在工作專案表單中顯示/隱藏或移動控件、群組和頁面貢獻,請參閱 設定工作專案表單延伸模組。
新增選單操作
若要將專案新增至工作項目的工具列,請將此功能新增至擴充功能清單。 請選取工作項目表單中的垂直省略號,來查看選單下拉選項。
"contributions": [
{
"id": "sample-work-item-menu",
"type": "ms.vss-web.action",
"description": "Sample toolbar item which updates the title of a work item",
"targets": [
"ms.vss-work-web.work-item-context-menu"
],
"properties": {
"text": "Try me!",
"title": "Updates the title of the work item from the extension",
"toolbarText": "Try me!",
"icon": "images/show-properties.png",
"uri": "menu-workItemToolbarButton.html"
}
}
]
屬性
| 財產 or 地產 | 說明 |
|---|---|
text |
出現在工具列專案上的文字。 |
title |
出現在功能表項上的工具提示文字。 |
toolbarText |
當游標懸停於項目時出現的文字。 |
uri |
登錄工具列動作處理程式之頁面的 URI。 |
icon |
出現在功能表項上的圖示 URL。 相對 URL 會使用 baseUri解析。 |
group |
確定選單項目相對於其他項目的出現位置。 具有相同組名的工具列項目會被分組,並以分隔符號與其他項目分開。 |
registeredObjectId |
(選擇性)已註冊功能表動作處理程序的名稱。 預設為貢獻標識碼。 |
監聽事件
若要將觀察者新增至工作專案以接收工作專案事件,請將此貢獻新增至擴充功能清單。 工作項目表單上沒有觀察者的可視化。 這是在 onSaved 事件上接聽工作專案窗體的最佳方式,因為觀察者位於窗體外部,而且即使在儲存後窗體關閉時,也不會損毀。
"contributions": [
{
"id": "sample-work-item-form-observer",
"type": "ms.vss-work-web.work-item-notifications",
"description": "Gets events about the current work item form for the 'Try Me!' toolbar button",
"targets": [
"ms.vss-work-web.work-item-form"
],
"properties": {
"uri": "myformobserver.html"
}
}
]
屬性
| 財產 or 地產 | 說明 |
|---|---|
uri |
裝載接聽事件的腳本的頁面 URI。 |
事件
| 事件 | 事件描述 | 論點 | 引數描述 |
|---|---|---|---|
onFieldChanged |
在欄位變更之後觸發。 如果欄位變更時執行了更新其他欄位的規則,那麼所有這些變更都屬於單一事件的一部分。 | ID | 工作項目的標識碼 |
changedFields |
陣列,其中包含所有已變更欄位的參考名稱。 | ID | 工作項目的標識碼 |
onLoaded |
在工作項目表單中載入數據後,當使用者開啟工作項目或者在分級檢視中瀏覽至另一個工作項目時觸發。 | ID | 工作項目的標識碼 |
onReset |
當用戶還原對工作項目的變更後被觸發。 | ID | 工作項目的標識碼 |
onRefreshed |
使用者手動重新整理工作項目後觸發。 | ID | 工作項目的標識碼 |
onSaved |
儲存工作項目後觸發。 針對對話框中的工作專案,您應該針對ms.vss-work-web.work-item-notifications 類型進行目標設定,以確保在對話框關閉之前事件能夠觸發,因為一旦對話框關閉,該項目類型就會被卸載。 如需詳細資訊,請參閱 監聽事件。 |
ID | 工作項目的標識碼 |
onUnloaded |
在使用者關閉對話方塊之前觸發,或在使用者移至標註檢視中的另一個工作項目之前觸發。 | ID | 工作項目的標識碼 |
HTML/JavaScript 範例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Work item extension page sample</title>
</head>
<body>
<script src="sdk/scripts/SDK.js"></script>
<script>
SDK.init({
usePlatformScripts: true
});
SDK.ready(function () {
// Register a listener for the work item page contribution.
SDK.register(SDK.getContributionId(), function () {
return {
// Called when the active work item is modified
onFieldChanged: function(args) {
},
// Called when a new work item is being loaded in the UI
onLoaded: function (args) {
},
// Called when the active work item is being unloaded in the UI
onUnloaded: function (args) {
},
// Called after the work item has been saved
onSaved: function (args) {
},
// Called when the work item is reset to its unmodified state (undo)
onReset: function (args) {
},
// Called when the work item has been refreshed from the server
onRefreshed: function (args) {
}
}
});
});
</script>
</body>
</html>
新看板中心的變更
注意
預設會啟用 New Boards Hub 功能。 我們強烈建議您使用 New Boards Hub 測試您的內部延伸模組,以確保相容性。
使用最新的 SDK
請確定您的擴充功能使用的是最新版的 azure-devops-extension-sdk
使用新的 SDK 時,您也應該使用適用於 REST API 的 azure-devops-extension-api 套件。 我們會在每個開發衝刺期間更新方法和介面,確保它包含所有最新功能。
使用動作或動作提供者的時機
使用 ms.vss-web.action-provider 在選單處理程式上動態載入選單項目時使用 getMenuItems。 避免在您的選單項目已在清單檔中定義且為靜態時使用 ms.vss-web.action-provider 。 請改 ms.vss-web.action 用 。
不再支援套件require("VSS/Events/Document")
新版 Boards Hub 不再支援匯入 require("VSS/Events/Document")。