垂直导航指南

Azure DevOps Services

垂直导航带来了影响某些扩展的更改。 这些结果包括对扩展图标的支持以及对团队上下文的更改。

提示

查看有关使用 Azure DevOps 扩展 SDK 进行扩展开发的最新文档。

团队上下文

在传统的水平导航中,用户可以通过从页面页眉左上角的选取器中进行选择来转到项目或团队。 此选取器显示最近团队的列表,以及浏览所有团队的方法。 在新的垂直导航中,用户只能导航到 (的项目,而不能导航到团队) 。 进行此更改是为了简化整体体验。 但是,它给依赖于用户使用页面标题中的传统团队选取器切换团队的能力的 Web 扩展带来了挑战。

SDK.getWebContext() 是 SDK 提供的客户端 API,提供有关用户正在操作的当前组织、项目和团队的信息:

{
    "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。 相反,请根据扩展所属的类别,遵循以下指南。

团队感知的中心扩展

如果扩展需要为用户提供选择团队的方法,可以使用 Teams REST API 获取当前项目的团队列表。 以下示例演示如何从扩展调用此 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. 在贡献属性中添加此资产的 includesata 条目。

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