Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Serviços de DevOps do Azure | Azure DevOps Server | Azure DevOps Server 2022
Use extensões para personalizar o formulário do item de trabalho, adicionando grupos, páginas, ações de menu, observadores ou controlos personalizados.
Sugestão
Se você estiver iniciando uma nova extensão do Azure DevOps, experimente essas coleções de exemplo mantidas primeiro — elas funcionam com compilações 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 inicial compacto que demonstra padrões de extensão comuns: https://github.com/microsoft/azure-devops-extension-sample
- Exemplos de extensão do Azure DevOps (coleções herdadas e guia de contribuições) — instale para inspecionar alvos da interface do utilizador 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 (procure exemplos de DevOps do Azure) — exemplos selecionados e atualizados na documentação 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 e as versões de API do manifesto de extensão com os documentos atuais. Para referência e APIs, consulte:
- Adicionar um grupo
- Adicionar uma página (separador)
- Adicionar uma ação de menu
- Adicionar um controle personalizado
- Ouça os acontecimentos
- 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.
Sugestão
Para as mais recentes orientações de desenvolvimento de extensões, incluindo tema e migração do VSS. SDK, consulte o portal para programadores do Azure DevOps Extension SDK.
Adicionar um grupo
Para adicionar um grupo à página principal, adicione uma contribuição ao seu manifesto de extensão com o tipo ms.vss-work-web.work-item-form-group direcionado 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 é o 100%. |
Exemplo de JavaScript
Este exemplo regista um fornecedor que responde a eventos do formulário de item de trabalho. Utiliza o WorkItemFormService para ler os valores do campo quando o item de trabalho carrega.
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 do argumento |
|---|---|---|---|
onFieldChanged |
Demitido após um campo ter mudado. Se a alteração de campo aplicou regras que atualizaram outros campos, todas essas alterações fazem parte de um único evento. | ID | A ID do item de trabalho |
changedFields |
Matriz 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 na exibição de triagem. | ID | A ID do item de trabalho |
onReset |
Acionado depois de o utilizador anular as alterações no item de trabalho. | ID | A ID do item de trabalho |
onRefreshed |
Disparado depois que o usuário atualiza manualmente o item de trabalho. | 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 assim que a caixa de diálogo for fechada, esse tipo de contribuição será descarregado. Para obter mais informações, consulte Escutar eventos. |
ID | A ID do item de trabalho |
onUnloaded |
Disparado antes que o utilizador feche a caixa de diálogo ou antes que o utilizador passe para outro item de trabalho na exibição de triagem. | ID | A ID do item de trabalho |
Adicionar uma página
Uma nova página é renderizada como um separador 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, inclua uma contribuição no manifesto da sua extensão, tendo o tipo ms.vss-work-web.work-item-form-page como alvo 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 do separador. |
uri |
URI para a página HTML carregada no IFrame. |
Exemplo de JavaScript
Consulte o exemplo de JavaScript na seção de 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 do argumento |
|---|---|---|---|
onFieldChanged |
Demitido após um campo ter mudado. Se a alteração de campo aplicou regras que atualizaram outros campos, todas essas alterações fazem parte de um único evento. | ID | A ID do item de trabalho |
changedFields |
Matriz 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 na exibição de triagem. | ID | A ID do item de trabalho |
onReset |
Acionado depois de o utilizador anular as alterações no item de trabalho. | ID | A ID do item de trabalho |
onRefreshed |
Disparado depois que o usuário atualiza manualmente o item de trabalho. | 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 assim que a caixa de diálogo for fechada, esse tipo de contribuição será descarregado. Para obter mais informações, consulte Escutar eventos. |
ID | A ID do item de trabalho |
onUnloaded |
Disparado antes que o utilizador feche a caixa de diálogo ou antes que o utilizador passe para outro item de trabalho na exibição de triagem. | ID | A ID do item de trabalho |
Configurar contribuições
No Azure DevOps Services, as extensões de grupo aparecem por defeito no final da segunda coluna, e as contribuições de página aparecem como o último separador. As contribuições de controlo não são mostradas por defeito – os utilizadores têm de as adicionar manualmente ao formulário. No Azure DevOps Server, consulte Configurar extensões de formulários 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 reticências 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 item está sendo pairado. |
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. As URLs relativas são resolvidas usando baseUrio . |
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 resto dos itens. |
registeredObjectId |
(Opcional) Nome do manipulador de ações de menu registrado. O padrão é o ID da contribuição. |
Ouvir os eventos
Os observadores ouvem eventos de item de trabalho sem qualquer interface de utilizador no formulário. Use observadores para ouvir o evento onSaved, uma vez que os observadores existem fora do formulário e não são eliminados 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 ouvindo eventos. |
eventos
| Evento | Descrição do evento | Argumento | Descrição do argumento |
|---|---|---|---|
onFieldChanged |
Demitido após um campo ter mudado. Se a alteração de campo aplicou regras que atualizaram outros campos, todas essas alterações fazem parte de um único evento. | ID | A ID do item de trabalho |
changedFields |
Matriz 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 na exibição de triagem. | ID | A ID do item de trabalho |
onReset |
Acionado depois de o utilizador anular as alterações no item de trabalho. | ID | A ID do item de trabalho |
onRefreshed |
Disparado depois que o usuário atualiza manualmente o item de trabalho. | 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 assim que a caixa de diálogo for fechada, esse tipo de contribuição será descarregado. Para obter mais informações, consulte Escutar eventos. |
ID | A ID do item de trabalho |
onUnloaded |
Disparado antes que o utilizador feche a caixa de diálogo ou antes que o utilizador passe para outro item de trabalho na exibição de triagem. | ID | A ID do item de trabalho |
Exemplo de JavaScript
O exemplo seguinte regista 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 vs. fornecedor de ações
Usar ms.vss-web.action-provider ao carregar dinamicamente itens do menu usando getMenuItems no handler do menu. Usa ms.vss-web.action quando os teus itens do menu estiverem estáticos e definidos no manifesto.
Padrões obsoletos
Os seguintes padrões já não são suportados:
-
require("VSS/Events/Document")- não suportado com o New Boards Hub -
SDK.jsscript tag comusePlatformScripts: true- use o pacoteazure-devops-extension-sdknpm ao invés