다음을 통해 공유


작업 항목 폼 확장

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

확장을 통해 이루어진 기여를 통해 사용자에게 작업 항목 양식을 표시하는 방법을 사용자 지정하는 방법을 알아봅니다.

전체 원본은 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
       }
   }
]

속성

Property 설명
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)));
        }
    }
});

Events

Event 이벤트 설명 인수 인수 설명
onFieldChanged 필드가 변경된 후 발생합니다. 필드 변경이 다른 필드를 업데이트하는 규칙을 실행한 경우 이러한 모든 변경 내용은 단일 이벤트의 일부입니다. ID 작업 항목의 ID입니다.
changedFields 모든 변경된 필드의 참조 이름을 가진 배열입니다. ID 작업 항목의 ID입니다.
onLoaded 데이터가 작업 항목 양식에 로드되거나, 사용자가 작업 항목을 열거나, 사용자가 심사 보기에서 다른 작업 항목으로 이동할 때 발생합니다. ID 작업 항목의 ID입니다.
onReset 사용자가 작업 항목에 대한 변경 내용을 실행 취소한 후 발생합니다. ID 작업 항목의 ID입니다.
onRefreshed 사용자가 작업 항목을 수동으로 새로 고친 후 발생합니다. ID 작업 항목의 ID입니다.
onSaved 작업 항목을 저장한 후 발생합니다. 대화 상자의 작업 항목에 대해 "ms.vss-work-web.work-item-notifications" 유형을 대상으로 지정하여 대화 상자가 닫히면 이 기여 유형이 언로드되기 때문에 이벤트가 발생하도록 해야 합니다. 자세한 내용은 이벤트 수신 대기를 참조 하세요. ID 작업 항목의 ID입니다.
onUnloaded 사용자가 대화 상자를 닫기 전에 또는 사용자가 심사 보기의 다른 작업 항목으로 이동하기 전에 발생합니다. ID 작업 항목의 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"
        } 
    }
]

속성

Property 설명
name 탭 페이지에 표시되는 텍스트입니다.
uri 작업 항목 양식 및 해당 스크립트에 표시되는 html을 호스트하는 페이지에 대한 URI입니다.

JavaScript 샘플

양식 그룹 섹션에서 JavaScript 샘플을 참조하세요. 등록된 개체의 이름이 기여한 개체의 id 이름과 일치해야 합니다.

Events

Event 이벤트 설명 인수 인수 설명
onFieldChanged 필드가 변경된 후 발생합니다. 필드 변경이 다른 필드를 업데이트하는 규칙을 실행한 경우 이러한 모든 변경 내용은 단일 이벤트의 일부입니다. ID 작업 항목의 ID입니다.
changedFields 모든 변경된 필드의 참조 이름을 가진 배열입니다. ID 작업 항목의 ID입니다.
onLoaded 데이터가 작업 항목 양식에 로드되거나, 사용자가 작업 항목을 열거나, 사용자가 심사 보기에서 다른 작업 항목으로 이동할 때 발생합니다. ID 작업 항목의 ID입니다.
onReset 사용자가 작업 항목에 대한 변경 내용을 실행 취소한 후 발생합니다. ID 작업 항목의 ID입니다.
onRefreshed 사용자가 작업 항목을 수동으로 새로 고친 후 발생합니다. ID 작업 항목의 ID입니다.
onSaved 작업 항목을 저장한 후 발생합니다. 대화 상자의 작업 항목에 대해 "ms.vss-work-web.work-item-notifications" 유형을 대상으로 지정하여 대화 상자가 닫히면 이 기여 유형이 언로드되기 때문에 이벤트가 발생하도록 해야 합니다. 자세한 내용은 이벤트 수신 대기를 참조 하세요. ID 작업 항목의 ID입니다.
onUnloaded 사용자가 대화 상자를 닫기 전에 또는 사용자가 심사 보기의 다른 작업 항목으로 이동하기 전에 발생합니다. ID 작업 항목의 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"  
      }  
   }
]

속성

Property 설명
text 도구 모음 항목에 표시되는 텍스트입니다.
title 메뉴 항목에 표시되는 도구 설명 텍스트입니다.
toolbarText 항목을 마우스로 가리킬 때 나타나는 텍스트입니다.
uri 도구 모음 작업 처리기를 등록하는 페이지에 대한 URI입니다.
아이콘 메뉴 항목에 표시되는 아이콘의 URL입니다. 상대 URL은 baseUri를 사용하여 확인됩니다.
group 다른 항목과 관련된 메뉴 항목이 표시되는 위치를 결정합니다. 그룹 이름이 같은 도구 모음 항목은 나머지 항목과 구분 기호로 그룹화되고 나뉩니다.
registeredObjectId (선택 사항) 등록된 메뉴 작업 처리기의 이름입니다. 기본값은 기여 ID입니다.

이벤트 수신 대기

작업 항목 이벤트를 수신 대기하는 작업 항목에 관찰자를 추가하려면 확장 매니페스트에 이 기여를 추가합니다. 작업 항목 양식에는 관찰자에 대한 시각화가 없습니다. 이는 관찰자가 양식 외부에 있으며 양식이 닫히면 제거되지 않으므로 저장 이벤트에서 작업 항목 양식을 수신 대기하는 가장 좋은 방법입니다. 이는 저장 직후에 발생할 수 있습니다.

"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"
       }
   }
]

속성

Property 설명
uri 이벤트를 수신 대기하는 스크립트를 호스트하는 페이지에 대한 URI입니다.

Events

Event 이벤트 설명 인수 인수 설명
onFieldChanged 필드가 변경된 후 발생합니다. 필드 변경이 다른 필드를 업데이트하는 규칙을 실행한 경우 이러한 모든 변경 내용은 단일 이벤트의 일부입니다. ID 작업 항목의 ID입니다.
changedFields 모든 변경된 필드의 참조 이름을 가진 배열입니다. ID 작업 항목의 ID입니다.
onLoaded 데이터가 작업 항목 양식에 로드되거나, 사용자가 작업 항목을 열거나, 사용자가 심사 보기에서 다른 작업 항목으로 이동할 때 발생합니다. ID 작업 항목의 ID입니다.
onReset 사용자가 작업 항목에 대한 변경 내용을 실행 취소한 후 발생합니다. ID 작업 항목의 ID입니다.
onRefreshed 사용자가 작업 항목을 수동으로 새로 고친 후 발생합니다. ID 작업 항목의 ID입니다.
onSaved 작업 항목을 저장한 후 발생합니다. 대화 상자의 작업 항목에 대해 "ms.vss-work-web.work-item-notifications" 유형을 대상으로 지정하여 대화 상자가 닫히면 이 기여 유형이 언로드되기 때문에 이벤트가 발생하도록 해야 합니다. 자세한 내용은 이벤트 수신 대기를 참조 하세요. ID 작업 항목의 ID입니다.
onUnloaded 사용자가 대화 상자를 닫기 전에 또는 사용자가 심사 보기의 다른 작업 항목으로 이동하기 전에 발생합니다. ID 작업 항목의 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>    

새 보드 허브의 변경 내용

참고 항목

새 Boards Hub는 현재 미리 보기 상태이지만 모든 사용자가 사용할 수 있습니다. 새 보드 허브를 즉시 사용하도록 설정하고 내부 확장을 테스트하는 것이 좋습니다.

최신 SDK 사용

확장에서 최신 버전의 azure-devops-extension-sdk를 사용하고 있는지 확인합니다.

새 SDK를 사용하는 경우 REST API용 azure-devops-extension-api 패키지도 사용해야 합니다. 모든 스프린트에 모든 최신 기능이 포함되도록 메서드와 인터페이스를 업데이트합니다.

작업 또는 작업 공급자를 사용하는 경우

메뉴 처리기를 사용하여 getMenuItems 메뉴 항목을 동적으로 로드할 때 사용합니다ms.vss-web.action-provider. 메뉴 항목이 정적이고 매니페스트에 정의된 경우 사용하지 ms.vss-web.action-provider 않습니다. 대신 ms.vss-web.action 사용해야 합니다.

패키지 필요("VSS/이벤트/문서")는 더 이상 지원되지 않습니다.

require("VSS/Events/Document") 가져오기는 더 이상 새 보드 허브에서 지원되지 않습니다.