Поделиться через


Расширение формы рабочего элемента

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

Узнайте, как настроить представление формы рабочего элемента пользователям с помощью вкладов, внесенных с помощью расширения.

См. пример пользовательского интерфейса в примерах расширений Azure DevOps на GitHub для полного источника.

Добавление группы

Элемент панели инструментов в форме рабочего элемента.

Чтобы добавить группу на главную страницу, добавьте вклад в манифест расширения. Тип этого вклада должен быть 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
       }
   }
]

Свойства

Свойство Description
name Текст, отображаемый в группе.
uri Универсальный код ресурса (URI) на странице с html-кодом, отображающимся в форме рабочего элемента и его скриптах.
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"
        } 
    }
]

Свойства

Свойство Описание
name Текст, отображаемый на странице вкладок.
uri Универсальный код ресурса (URI) на странице с html-кодом, отображающимся в форме рабочего элемента и его скриптах.

Пример на языке 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 Текст подсказки, отображаемый в элементе меню.
панель инструментов Текст, который отображается при наведении указателя мыши на элемент.
uri URI на странице, которая регистрирует обработчик действия панели инструментов.
значок URL-адрес значка, отображаемого в элементе меню. Относительные URL-адреса разрешаются с помощью baseUri.
group Определяет, где отображается элемент меню, связанный с другими пользователями. Элементы панели инструментов с тем же именем группы группируются и разделяются разделителем от остальных элементов.
registeredObjectId (Необязательно) Имя зарегистрированного обработчика действия меню. По умолчанию используется идентификатор вклада.

Прослушивание событий

Чтобы добавить наблюдателя к рабочему элементу, который прослушивает события рабочего элемента, добавьте этот вклад в манифест расширения. Нет визуализации для наблюдателей в форме рабочего элемента. Это лучший способ прослушивать форму рабочего элемента в событииSaved, так как наблюдатель живет вне формы и не уничтожается при закрытии формы, которая может произойти сразу после сохранения.

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

Свойства

Свойство Description
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

Примечание.

Новый центр Boards Hub в настоящее время находится в предварительной версии, но доступен для всех. Мы настоятельно рекомендуем немедленно включить центр New Boards Hub и протестировать внутренние расширения.

Использование последних пакетов SDK

Убедитесь, что расширение использует последнюю версию azure-devops-extension-sdk

При использовании нового пакета SDK также следует использовать пакет azure-devops-extension-api для REST API. Мы обновляем методы и интерфейсы каждого спринта, чтобы гарантировать, что он включает все последние функции.

Когда следует использовать действие или поставщик действий

Используется ms.vss-web.action-provider при динамической загрузке элементов меню с помощью getMenuItems обработчика меню. Избегайте использования ms.vss-web.action-provider , когда элементы меню являются статическими и определены в манифесте. Вместо этого ms.vss-web.action следует использовать.

Требование пакета("VSS/Events/Document") больше не поддерживается

require("VSS/Events/Document") импорт больше не поддерживается в Новом центре Boards Hub.