Compartilhar via


Estender o formulário do item de trabalho

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).

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:

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

Captura de tela que mostra o item da barra de ferramentas no formulário de item de trabalho.

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 .

Captura de tela que mostra a nova página como uma aba no formulário do item de trabalho.

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

Captura de tela que mostra como adicionar um item à barra de ferramentas do item de trabalho.

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.js tag de script com usePlatformScripts: true - use o pacote npm azure-devops-extension-sdk em seu lugar