Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Use extensões para personalizar o formulário de item de trabalho adicionando grupos, páginas, ações de menu, observadores ou controles personalizados.
Dica
Se você estiver iniciando uma nova extensão do Azure DevOps, experimente essas coleções de exemplo mantidas primeiro— elas funcionam com builds de produtos atuais e abrangem cenários modernos (por exemplo, adicionando guias em páginas de solicitação pull).
- Exemplo de extensão do Azure DevOps (GitHub)— um exemplo de inicialização compacta que demonstra padrões de extensão comuns: https://github.com/microsoft/azure-devops-extension-sample
- Exemplos de extensão do Azure DevOps (coleção legada e guia de contribuições) – instale para inspecionar os alvos da UI ou exiba a origem: https://marketplace.visualstudio.com/items/ms-samples.samples-contributions-guide e https://github.com/Microsoft/vso-extension-samples/tree/master/contributions-guide
- Exemplos do Microsoft Learn (navegar por amostras do Azure DevOps) — amostras atualizadas e selecionadas em documentos da Microsoft: /samples/browse/?terms=azure%20devops%20extension
Se um exemplo não funcionar em sua organização, instale-o em uma organização pessoal ou de teste e compare as IDs de destino do manifesto de extensão e as versões da API com as documentações atuais. Para referência e APIs, consulte:
- Adicionar um grupo
- Adicionar uma página (guia)
- Adicionar uma ação de menu
- Adicionar um controle personalizado
- Escutar eventos
- Configurar contribuições
Para obter o código-fonte completo, consulte o exemplo de interface do usuário nos exemplos de extensão do Azure DevOps no GitHub.
Dica
Para obter as diretrizes mais recentes de desenvolvimento de extensão, incluindo temas e migração do VSS. SDK, consulte o portal do desenvolvedor do SDK de Extensão do Azure DevOps.
Adicionar um grupo
Para adicionar um grupo à página principal, adicione uma contribuição ao manifesto de extensão com o tipo ms.vss-work-web.work-item-form-group direcionado para 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
}
}
]
Propriedades
| Propriedade | Descrição |
|---|---|
name |
Texto que aparece no grupo. |
uri |
URI para a página HTML carregada no IFrame. |
height |
(Opcional) Altura do grupo. O padrão é 100%. |
Exemplo de JavaScript
Este exemplo registra um provedor que responde a eventos de formulário de item de trabalho. Ele usa o WorkItemFormService para ler os valores de campo quando o item de trabalho é carregado.
import { IWorkItemFormService, WorkItemTrackingServiceIds } from "azure-devops-extension-api/WorkItemTracking";
import * as SDK from "azure-devops-extension-sdk";
async function getWorkItemFormService(): Promise<IWorkItemFormService> {
return await SDK.getService<IWorkItemFormService>(WorkItemTrackingServiceIds.WorkItemFormService);
}
SDK.init();
SDK.ready().then(() => {
SDK.register(SDK.getContributionId(), () => {
return {
// Called when the active work item is modified
onFieldChanged: (args) => {
console.log("onFieldChanged", JSON.stringify(args));
},
// Called when a new work item is being loaded in the UI
onLoaded: async (args) => {
const service = await getWorkItemFormService();
const values = await service.getFieldValues([
"System.Id", "System.Title", "System.State", "System.CreatedDate"
]);
console.log("onLoaded", JSON.stringify(values));
},
// Called when the active work item is being unloaded in the UI
onUnloaded: (args) => {
console.log("onUnloaded", JSON.stringify(args));
},
// Called after the work item has been saved
onSaved: (args) => {
console.log("onSaved", JSON.stringify(args));
},
// Called when the work item is reset to its unmodified state (undo)
onReset: (args) => {
console.log("onReset", JSON.stringify(args));
},
// Called when the work item has been refreshed from the server
onRefreshed: (args) => {
console.log("onRefreshed", JSON.stringify(args));
}
};
});
});
Eventos
| Evento | Descrição do evento | Argumento | Descrição de argumento |
|---|---|---|---|
onFieldChanged |
Disparado após a mudança de um campo. Se a alteração de campo executou regras que atualizaram outros campos, todas essas alterações são parte de um único evento. | ID | A ID do item de trabalho |
changedFields |
Array com o nome de referência de todos os campos alterados. | ID | A ID do item de trabalho |
onLoaded |
Disparado depois que os dados são carregados no formulário de item de trabalho, quando o usuário abre um item de trabalho ou quando o usuário navega para outro item de trabalho no modo de exibição de triagem. | ID | A ID do item de trabalho |
onReset |
Disparado depois que o usuário reverte as alterações no item de trabalho. | ID | A ID do item de trabalho |
onRefreshed |
Disparado depois que o usuário atualiza o item de trabalho manualmente. | ID | A ID do item de trabalho |
onSaved |
Disparado depois que um item de trabalho é salvo. Para itens de trabalho em uma caixa de diálogo, você deve direcionar o ms.vss-work-web.work-item-notifications tipo para garantir que o evento seja acionado, pois depois que a caixa de diálogo é fechada, esse tipo de contribuição é descarregado. Para obter mais informações, consulte Escutar eventos. |
ID | A ID do item de trabalho |
onUnloaded |
Disparado antes que o usuário feche a caixa de diálogo ou antes que o usuário se mova para outro item de trabalho no modo de exibição de triagem. | ID | A ID do item de trabalho |
Adicionar uma página
Uma nova página é exibida como uma aba no formulário do item de trabalho. Novas páginas aparecem ao lado da guia Detalhes .
Para adicionar uma página ao formulário do item de trabalho, adicione uma contribuição ao manifesto de extensão com o tipo ms.vss-work-web.work-item-form-page destinando-se a 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"
}
}
]
Propriedades
| Propriedade | Descrição |
|---|---|
name |
Texto que aparece na página da guia. |
uri |
URI para a página HTML carregada no IFrame. |
Exemplo de JavaScript
Consulte o exemplo de JavaScript na seção do grupo de formulários. O nome do objeto registrado deve corresponder ao id da contribuição.
Eventos
| Evento | Descrição do evento | Argumento | Descrição de argumento |
|---|---|---|---|
onFieldChanged |
Disparado após a mudança de um campo. Se a alteração de campo executou regras que atualizaram outros campos, todas essas alterações são parte de um único evento. | ID | A ID do item de trabalho |
changedFields |
Array com o nome de referência de todos os campos alterados. | ID | A ID do item de trabalho |
onLoaded |
Disparado depois que os dados são carregados no formulário de item de trabalho, quando o usuário abre um item de trabalho ou quando o usuário navega para outro item de trabalho no modo de exibição de triagem. | ID | A ID do item de trabalho |
onReset |
Disparado depois que o usuário reverte as alterações no item de trabalho. | ID | A ID do item de trabalho |
onRefreshed |
Disparado depois que o usuário atualiza o item de trabalho manualmente. | ID | A ID do item de trabalho |
onSaved |
Disparado depois que um item de trabalho é salvo. Para itens de trabalho em uma caixa de diálogo, você deve direcionar o ms.vss-work-web.work-item-notifications tipo para garantir que o evento seja acionado, pois depois que a caixa de diálogo é fechada, esse tipo de contribuição é descarregado. Para obter mais informações, consulte Escutar eventos. |
ID | A ID do item de trabalho |
onUnloaded |
Disparado antes que o usuário feche a caixa de diálogo ou antes que o usuário se mova para outro item de trabalho no modo de exibição de triagem. | ID | A ID do item de trabalho |
Configurar contribuições
No Azure DevOps Services, as extensões de grupo aparecem no final da segunda coluna por padrão e as contribuições de página aparecem como a última guia. As contribuições de controle não são mostradas por padrão – os usuários devem adicioná-las manualmente ao formulário. No Servidor do Azure DevOps, consulte Configurar extensões de formulário de item de trabalho para mostrar, ocultar ou mover contribuições.
Adicionar ação de menu
Para adicionar um item à barra de ferramentas do item de trabalho, adicione essa contribuição ao manifesto da extensão. O item aparece no menu suspenso de três pontos verticais (...).
"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"
}
}
]
Propriedades
| Propriedade | Descrição |
|---|---|
text |
Texto que aparece no item da barra de ferramentas. |
title |
Texto de dica de ferramenta que aparece no item de menu. |
toolbarText |
Texto que aparece quando o cursor passa sobre o item. |
uri |
URI para uma página que registra o manipulador de ações da barra de ferramentas. |
icon |
URL para um ícone que aparece no item de menu. URLs relativos são resolvidos usando baseUri. |
group |
Determina onde o item de menu aparece, relacionado a outros. Os itens da barra de ferramentas com o mesmo nome de grupo são agrupados e divididos por um separador do restante dos itens. |
registeredObjectId |
(Opcional) Nome do manipulador de ação de menu registrado. Define-se como padrão o ID de contribuição. |
Ouça os eventos
Observadores ouvem eventos de item de trabalho sem nenhuma interface do usuário no formulário. Use observadores para escutar o evento onSaved, já que os observadores vivem fora do formulário e não são destruídos quando a caixa de diálogo do formulário é fechada.
"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"
}
}
]
Propriedades
| Propriedade | Descrição |
|---|---|
uri |
URI para uma página que hospeda os scripts que escutam eventos. |
Eventos
| Evento | Descrição do evento | Argumento | Descrição de argumento |
|---|---|---|---|
onFieldChanged |
Disparado após um campo ter sido alterado. Se a alteração de campo executou regras que atualizaram outros campos, todas essas alterações fazem parte de um único evento. | ID | A ID do item de trabalho |
changedFields |
Array com o nome de referência de todos os campos alterados. | ID | A ID do item de trabalho |
onLoaded |
Disparado depois que os dados são carregados no formulário de item de trabalho, quando o usuário abre um item de trabalho ou quando o usuário navega para outro item de trabalho no modo de exibição de triagem. | ID | A ID do item de trabalho |
onReset |
Disparado depois que o usuário desfaz as alterações no item de trabalho. | ID | A ID do item de trabalho |
onRefreshed |
Disparado depois que o usuário atualiza o item de trabalho manualmente. | ID | A ID do item de trabalho |
onSaved |
Disparado depois que um item de trabalho é salvo. Para itens de trabalho em uma caixa de diálogo, você deve direcionar o tipo ms.vss-work-web.work-item-notifications para garantir que o evento seja acionado, já que, ao fechar a caixa de diálogo, esse tipo de contribuição é descarregado. Para obter mais informações, consulte Escutar eventos. |
ID | A ID do item de trabalho |
onUnloaded |
Disparado antes que o usuário feche a caixa de diálogo ou antes que o usuário se mova para outro item de trabalho no modo de exibição de triagem. | ID | A ID do item de trabalho |
Exemplo de JavaScript
O exemplo a seguir registra um observador usando o SDK moderno:
import * as SDK from "azure-devops-extension-sdk";
SDK.init();
SDK.ready().then(() => {
SDK.register(SDK.getContributionId(), () => {
return {
onFieldChanged: (args) => {
// Handle field changes
},
onLoaded: (args) => {
// Handle work item loaded
},
onUnloaded: (args) => {
// Handle work item unloaded
},
onSaved: (args) => {
// Handle work item saved
},
onReset: (args) => {
// Handle work item reset (undo)
},
onRefreshed: (args) => {
// Handle work item refreshed
}
};
});
});
Notas de compatibilidade
Ação versus provedor de ação
Use ms.vss-web.action-provider ao carregar dinamicamente itens de menu usando getMenuItems no manipulador de menu. Use ms.vss-web.action quando os itens de menu estiverem estáticos e definidos no manifesto.
Padrões preteridos
Não há mais suporte para os seguintes padrões:
-
require("VSS/Events/Document")– não é compatível com o Hub de Novos Quadros -
SDK.jstag de script comusePlatformScripts: true- use o pacote npmazure-devops-extension-sdkem seu lugar