Partilhar via


Estender o formulário de item de trabalho

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

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:

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

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

Captura de ecrã que mostra a nova página como uma aba no formulário de tarefa.

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

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 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.js script tag com usePlatformScripts: true - use o pacote azure-devops-extension-sdk npm ao invés