다음을 통해 공유


작업 항목 폼 확장

Azure DevOps 서비스 | Azure DevOps Server | Azure DevOps Server 2022

확장을 사용하여 그룹, 페이지, 메뉴 작업, 관찰자 또는 사용자 지정 컨트롤을 추가하여 작업 항목 양식을 사용자 지정합니다.

팁 (조언)

새 Azure DevOps 확장을 시작하는 경우 먼저 유지 관리되는 샘플 컬렉션을 시도합니다. 이러한 컬렉션은 현재 제품 빌드에서 작동하고 최신 시나리오(예: 끌어오기 요청 페이지에 탭 추가)를 다룹니다.

조직에서 샘플이 작동하지 않는 경우 개인 또는 테스트 조직에 설치하고 확장 매니페스트의 대상 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 사용