Бөлісу құралы:


Руководство по вертикальной навигации

Azure DevOps Services

Вертикальная навигация приводит к изменениям, влияющим на некоторые расширения. Эти результаты включают поддержку значков расширений вместе с изменениями контекста команды.

Совет

Ознакомьтесь с нашей новой документацией по разработке расширений с помощью пакета SDK для расширений Azure DevOps.

Контекст команды

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

SDK.getWebContext() — это клиентский API, предоставляемый пакетом SDK, предоставляющий сведения о текущей организации, проекте и команде, в которую работает пользователь:

{
    "account": {
        "name": "Fabrikam",
        "id": "50e49b94-4bb6-40e7-8c85-a6d756d8a4d8"
    },
    "project": {
        "name": "Fabrikam Dev",
        "id": "049b1af2-fc87-4e50-95e4-151357f04b7f"
    },
    "team": {
        "name": "Ops Team",
        "id": "9b3a6b80-fe95-4c8c-8aa1-1e5d535d7af1"
    }
}

Мы не рекомендуем полагаться на SDK.getWebContext().team. Вместо этого следуйте приведенным ниже рекомендациям, исходя из категории, в соответствии с категорией, подпадаемой для расширения.

Расширения центра, которые осведомлены о команде

Если расширение должно предоставить пользователям способ выбора команды, вы можете использовать REST API Teams для получения списка команд для текущего проекта. В следующем примере показано, как вызвать этот API из расширения.

import { getClient } from "azure-devops-extension-api";
import { CoreRestClient } from "azure-devops-extension-api/Core";
import * as SDK from "azure-devops-extension-sdk";

private async getTeams() {
    const client = getClient(CoreRestClient);
    
    client.getTeams(SDK.getWebContext().project.id).then(
        function(teams) {
            console.log(teams);
        }
    );
}

Пример расширения, предоставляющего элемент управления выбором команды, см. в разделе "Календарь группы".

Расширения сводных и панелей, которые находятся в центрах, поддерживающих команды, таких как невыполненные работы и панель мониторинга

Расширение может проверить объект конфигурации, переданный вашему вкладу. Этот объект имеет различные свойства в зависимости от типа вклада и размещения вклада. В примере показана команда чтения из конфигурации и возврат к команде чтения из webContext для поддержки новой вертикальной навигации и более старой горизонтальной навигации в локальных выпусках.

function getCurrentTeam() {
  let webContext = SDK.getWebContext();
  let configuration = SDK.getConfiguration();

  if ("team" in configuration) {
    return configuration.team;
  } else if ("team" in webContext) {
    return webContext.team;
  } else {
    return null; // should only happen if not in a project context
  }
}

Расширения действий, которые находятся в центрах командной поддержки, таких как невыполненные операции и панель мониторинга

Расширение может проверить объект actionContext , переданный обратному вызову, который вызывается, когда пользователь выбирает элемент меню. В примере показана команда чтения из actionContext.

var menuContributionHandler = (function () {
        "use strict";
        return {
            // This is a callback that gets invoked when a user selects the newly contributed menu item
            // The actionContext parameter contains team information.
            execute: function (actionContext) {
                if("team" in actionContext) {
                    alert(`Team. Id is ${actionContext.team.id}, Name is ${actionContext.team.name}`);
                }
            }
        };
    }());

Значок концентратора

При необходимости можно задать ресурс (например, .png или .jpg) в качестве значка для центра. Этот значок отображается рядом с концентратором в вертикальной панели навигации. Его необходимо упаковить с расширением.

Примечание.

Эти значки не отображаются в горизонтальной навигации.

Выполните следующие действия, чтобы задать значок для центра.

  1. iconAsset Задайте свойство вклада концентратора в полный идентификатор ресурса, который следует шаблону. {publisher-id}.{extension-id}/{asset-path}

  2. Добавьте запись для этого ресурса в свойстве includesData вклада.

  3. Упаковайте ресурс с расширением, перечислив его в свойстве files в корне манифеста.

Пример 1.

{
  "id": "my-extension",
  "publisherId": "my-publisher",
  ...
  "contributions": [
        {
            "id": "example-hub",
            "type": "ms.vss-web.hub",
            "targets": [
                "ms.vss-code-web.code-hub-group"
            ],
            "properties": {
                "name": "My Hub",
                "iconAsset": "my-publisher.my-extension/images/fabrikam-logo.png",
                "includesData": {
                    "assets": [
                        "my-publisher.my-extension/images/fabrikam-logo.png"
                    ]
                }
            }
       }
  ],
 "files": [
     {
         "path": "images/fabrikam-logo.png",
         "addressable": true
     }
 ]
}

Пример 2:

При применении тем, таких как свет и темное, можно указать значки в манифесте расширения следующим образом.


{
    "id": "hub",
    "type": "ms.vss-web.hub",
    "targets": [
        "ms.vss-work-web.work-hub-group"
    ],
    "properties": {
        "name": "Hub",
        "description": "Something",
        "uri": "pages/Hub.html",
        "icon": {
            "light": "img/hub-light.png",
            "dark": "img/hub-dark.png"
        }
    }
}