Oharra
Baimena behar duzu orria atzitzeko. Direktorioetan saioa has dezakezu edo haiek alda ditzakezu.
Baimena behar duzu orria atzitzeko. Direktorioak alda ditzakezu.
Azure DevOps Services
La navegación vertical aporta cambios que afectan a algunas extensiones. Estos resultados incluyen compatibilidad con iconos de extensión junto con cambios en el contexto del equipo.
Sugerencia
Para obtener las instrucciones de desarrollo de extensiones más recientes, incluidas las temáticas y la migración desde VSS. SDK, consulte el portal para desarrolladores del SDK de extensión de Azure DevOps.
Contexto del equipo
En la navegación horizontal tradicional, los usuarios pueden ir a un proyecto o equipo seleccionando entre un selector que se encuentra en la parte superior izquierda del encabezado de página. Este selector presentó una lista de equipos recientes y una manera de buscar todos los equipos. En la nueva navegación vertical, un usuario solo puede navegar a un proyecto (y no a un equipo). Este cambio se realizó para simplificar la experiencia general. Sin embargo, introdujo un desafío para las extensiones web que dependen de la capacidad de los usuarios para cambiar de equipo mediante el selector de equipos tradicional en el encabezado de página.
SDK.getWebContext() es una API del lado cliente proporcionada por el SDK que proporciona información sobre la organización actual, el proyecto y el equipo en el que está funcionando el usuario:
{
"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"
}
}
No se recomienda confiar en SDK.getWebContext().team. En su lugar, siga las instrucciones siguientes, en función de la categoría en la que se encuentra la extensión.
Extensiones de concentrador compatibles con el equipo
Si la extensión necesita proporcionar a los usuarios una manera de seleccionar un equipo, puede usar la API REST de Teams para obtener una lista de equipos para el proyecto actual. En el ejemplo siguiente se muestra cómo llamar a esta API desde la extensión.
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);
}
);
}
Para obtener un ejemplo de una extensión que proporciona un control de selector de equipo, consulte Calendario de equipo.
Extensiones de panel y pivote
La extensión puede comprobar el objeto de configuración pasado a la contribución. Este objeto tiene propiedades diferentes en función del tipo de contribución y donde se hospeda la contribución. En el ejemplo se muestra cómo se lee el equipo desde la configuración y se cambia para leer el equipo desde webContext para admitir tanto la nueva navegación vertical como la navegación horizontal anterior en versiones locales instaladas.
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
}
}
Extensiones de acción
La extensión puede comprobar el objeto actionContext pasado a la devolución de llamada invocada cuando un usuario selecciona el elemento de menú contribuido. El ejemplo muestra cómo se lee el equipo desde el 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}`);
}
}
};
}());
Icono del concentrador
Opcionalmente, puede configurar un archivo (como un .png o .jpg) como el icono para su hub. Este icono aparece junto al centro en la barra de navegación vertical. Debe empaquetarse con la extensión.
Nota:
Estos iconos no aparecen en la navegación horizontal.
Complete los pasos siguientes para configurar un icono para el hub.
Establezca la
iconAssetpropiedad de la contribución del hub al identificador completamente calificado del activo, que sigue el patrón:{publisher-id}.{extension-id}/{asset-path}.Agregue una entrada para este recurso en la propiedad de contribución
includesData.Empaquete el recurso con su extensión incluyéndolo en la propiedad
filesen la raíz del archivo de manifiesto.
Ejemplo 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
}
]
}
Ejemplo 2:
Cuando se aplican temas como claro frente a oscuro, puede especificar los iconos en el manifiesto de extensión como se indica a continuación.
{
"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"
}
}
}