Azure DevOps 서비스 | Azure DevOps Server | Azure DevOps Server 2022
확장을 사용하여 그룹, 페이지, 메뉴 작업, 관찰자 또는 사용자 지정 컨트롤을 추가하여 작업 항목 양식을 사용자 지정합니다.
팁 (조언)
새 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 샘플 찾아보기): /samples/browse/?terms=azure%20devops%20extension
조직에서 샘플이 작동하지 않는 경우 개인 또는 테스트 조직에 설치하고 확장 매니페스트의 대상 ID 및 API 버전을 현재 문서와 비교합니다. 참조 및 API는 다음을 참조하세요.
전체 소스 코드는 GitHub의 Azure DevOps 확장 샘플에서 UI 예제를 참조하세요.
팁 (조언)
VSS.SDK에서 테마 지정 및 마이그레이션이 포함된 최신 확장 개발 지침은 Azure DevOps 확장 SDK 개발자 포털을 참조하세요.
그룹 추가
기본 페이지에 그룹을 추가하려면 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
}
}
]
속성
| 재산 | 설명 |
|---|---|
name |
그룹에 표시되는 텍스트입니다. |
uri |
IFrame에 로드된 HTML 페이지에 대한 URI입니다. |
height |
(선택 사항) 그룹의 높이입니다. 기본값은 100%. |
JavaScript 샘플
다음은 작업 항목 양식 이벤트에 응답하는 공급자를 등록하는 예제입니다. 작업 항목이 로드될 때 WorkItemFormService를 사용하여 필드 값을 읽습니다.
import { IWorkItemFormService, WorkItemTrackingServiceIds } from "azure-devops-extension-api/WorkItemTracking";
import * as SDK from "azure-devops-extension-sdk";
async function getWorkItemFormService(): Promise<IWorkItemFormService> {
return await SDK.getService<IWorkItemFormService>(WorkItemTrackingServiceIds.WorkItemFormService);
}
SDK.init();
SDK.ready().then(() => {
SDK.register(SDK.getContributionId(), () => {
return {
// Called when the active work item is modified
onFieldChanged: (args) => {
console.log("onFieldChanged", JSON.stringify(args));
},
// Called when a new work item is being loaded in the UI
onLoaded: async (args) => {
const service = await getWorkItemFormService();
const values = await service.getFieldValues([
"System.Id", "System.Title", "System.State", "System.CreatedDate"
]);
console.log("onLoaded", JSON.stringify(values));
},
// Called when the active work item is being unloaded in the UI
onUnloaded: (args) => {
console.log("onUnloaded", JSON.stringify(args));
},
// Called after the work item has been saved
onSaved: (args) => {
console.log("onSaved", JSON.stringify(args));
},
// Called when the work item is reset to its unmodified state (undo)
onReset: (args) => {
console.log("onReset", JSON.stringify(args));
},
// Called when the work item has been refreshed from the server
onRefreshed: (args) => {
console.log("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"
}
}
]
속성
| 재산 | 설명 |
|---|---|
name |
탭 페이지에 표시되는 텍스트입니다. |
uri |
IFrame에 로드된 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"
}
}
]
속성
| 재산 | 설명 |
|---|---|
text |
도구 모음 항목에 표시되는 텍스트입니다. |
title |
메뉴 항목에 표시되는 도구 설명 텍스트입니다. |
toolbarText |
항목을 마우스로 가리킬 때 나타나는 텍스트입니다. |
uri |
도구 모음 작업 처리기를 등록하는 페이지에 대한 URI입니다. |
icon |
메뉴 항목에 표시되는 아이콘의 URL입니다. 상대 URL은 baseUri에 의해 해결됩니다. |
group |
다른 항목과 관련된 메뉴 항목이 표시되는 위치를 결정합니다. 그룹 이름이 같은 도구 모음 항목은 나머지 항목과 구분 기호로 그룹화되고 나뉩니다. |
registeredObjectId |
(선택 사항) 등록된 메뉴 작업 처리기의 이름입니다. 기본값은 기여 ID입니다. |
이벤트 수신 대기
관찰자는 양식에 UI 없이 작업 항목 이벤트를 수신 대기합니다. 관찰자는 양식 외부에 있으며 양식 대화 상자가 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"
}
}
]
속성
| 재산 | 설명 |
|---|---|
uri |
이벤트를 수신 대기하는 스크립트를 호스트하는 페이지에 대한 URI입니다. |
이벤트
| 이벤트 | 이벤트 설명 | 인수 | 인수 설명 |
|---|---|---|---|
onFieldChanged |
필드가 변경된 후 발생합니다. 필드 변경이 다른 필드를 업데이트하는 규칙을 실행한 경우 이러한 모든 변경 내용은 단일 이벤트의 일부입니다. | 아이디 | 작업 항목의 ID입니다. |
changedFields |
모든 변경된 필드의 참조 이름을 가진 배열입니다. | 아이디 | 작업 항목의 ID입니다. |
onLoaded |
데이터가 작업 항목 양식에 로드되거나, 사용자가 작업 항목을 열거나, 사용자가 심사 보기에서 다른 작업 항목으로 이동할 때 발생합니다. | 아이디 | 작업 항목의 ID입니다. |
onReset |
사용자가 작업 항목에 대한 변경 내용을 실행 취소한 후 발생합니다. | 아이디 | 작업 항목의 ID입니다. |
onRefreshed |
사용자가 작업 항목을 수동으로 새로 고친 후에 발생합니다. | 아이디 | 작업 항목의 ID입니다. |
onSaved |
작업 항목을 저장한 후 발생합니다. 대화 상자의 작업 항목의 경우 대화 상자가 ms.vss-work-web.work-item-notifications 닫히면 이 기여 유형이 언로드되므로 이벤트가 발생하도록 형식을 대상으로 지정해야 합니다. 자세한 내용은 이벤트 수신 대기를 참조 하세요. |
아이디 | 작업 항목의 ID입니다. |
onUnloaded |
사용자가 대화 상자를 닫기 전에 또는 사용자가 심사 보기의 다른 작업 항목으로 이동하기 전에 발생합니다. | 아이디 | 작업 항목의 ID입니다. |
JavaScript 샘플
다음 예제에서는 최신 SDK를 사용하여 관찰자를 등록합니다.
import * as SDK from "azure-devops-extension-sdk";
SDK.init();
SDK.ready().then(() => {
SDK.register(SDK.getContributionId(), () => {
return {
onFieldChanged: (args) => {
// Handle field changes
},
onLoaded: (args) => {
// Handle work item loaded
},
onUnloaded: (args) => {
// Handle work item unloaded
},
onSaved: (args) => {
// Handle work item saved
},
onReset: (args) => {
// Handle work item reset (undo)
},
onRefreshed: (args) => {
// Handle work item refreshed
}
};
});
});
호환성 정보
작업 대 작업 공급자
메뉴 처리기에서 getMenuItems을 사용하여 메뉴 항목을 동적으로 로드할 때 ms.vss-web.action-provider을 사용합니다. 메뉴 항목이 정적이고 매니페스트에 정의된 경우에 사용합니다 ms.vss-web.action .
사용되지 않는 패턴
다음 패턴은 더 이상 지원되지 않습니다.
-
require("VSS/Events/Document")- 새 보드 허브에서 지원되지 않음 -
SDK.js스크립트 태그 사용usePlatformScripts: true- 대신 npm 패키지azure-devops-extension-sdk사용