Condividi tramite


Estendere il modulo dell'elemento di lavoro

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

Usare le estensioni per personalizzare il modulo dell'elemento di lavoro aggiungendo gruppi, pagine, azioni di menu, osservatori o controlli personalizzati.

Suggerimento

Se si avvia una nuova estensione Di Azure DevOps, provare prima queste raccolte di esempi mantenute, che funzionano con le build di prodotto correnti e coprono scenari moderni, ad esempio aggiungendo schede nelle pagine delle richieste pull.

Se un campione non funziona nella tua organizzazione, installalo in un'organizzazione personale o di test e confronta gli ID di destinazione e le versioni API del manifesto dell'estensione con la documentazione corrente. Per riferimento e API, vedi:

Per il codice sorgente completo, vedere l'esempio dell'interfaccia utente negli esempi di estensione Azure DevOps in GitHub.

Suggerimento

Per le linee guida più recenti per lo sviluppo di estensioni, incluse la tematizzazione e la migrazione da VSS.SDK, vedere il portale per sviluppatori di Azure DevOps Extension SDK.

Aggiungi un gruppo

Screenshot che mostra l'elemento della barra degli strumenti nel modulo dell'elemento di lavoro.

Per aggiungere un gruppo alla pagina principale, aggiungi un contributo al manifesto dell'estensione con il tipo ms.vss-work-web.work-item-form-group e destinazione 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
       }
   }
]

Proprietà

Proprietà Descrizione
name Testo visualizzato nel gruppo.
uri URI alla pagina HTML caricata nell'IFrame.
height (Facoltativo) Altezza del gruppo. Il valore predefinito è 100%.

Esempio in JavaScript

In questo esempio viene registrato un provider che risponde agli eventi del modulo dell'elemento di lavoro. Usa il WorkItemFormService per leggere i valori dei campi quando viene caricato l'elemento di lavoro.

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));
            }
        };
    });
});

Eventi

Evento Descrizione dell'evento Argomento Descrizione dell'argomento
onFieldChanged Attivato dopo la modifica di un campo. Se la modifica del campo ha eseguito regole che hanno aggiornato altri campi, tutte queste modifiche fanno parte di un singolo evento. Documento d'identità ID dell'elemento di lavoro
changedFields Matrice con il nome di riferimento di tutti i campi modificati. Documento d'identità ID dell'elemento di lavoro
onLoaded Generato dopo che i dati vengono caricati nel formulario del task, quando l'utente apre un task o naviga verso un altro task nella visualizzazione di triage. Documento d'identità ID dell'elemento di lavoro
onReset Generato dopo che l'utente annulla le modifiche apportate all'elemento di lavoro. Documento d'identità ID dell'elemento di lavoro
onRefreshed Generato dopo che l'utente aggiorna manualmente l'elemento di lavoro. Documento d'identità ID dell'elemento di lavoro
onSaved Attivato dopo il salvataggio di un elemento di lavoro. Per gli elementi di lavoro in una finestra di dialogo, è necessario specificare come destinazione il tipo ms.vss-work-web.work-item-notifications per assicurarsi che l'evento venga generato poiché una volta chiusa la finestra di dialogo, questo tipo di contributo viene scaricato. Per altre informazioni, vedere Listen for events .For more information, see Listen for events. Documento d'identità ID dell'elemento di lavoro
onUnloaded Generato prima che l'utente chiuda la finestra di dialogo o prima che l'utente passi a un altro elemento di lavoro nella visualizzazione di valutazione. Documento d'identità ID dell'elemento di lavoro

Aggiungi una pagina

Viene eseguito il rendering di una nuova pagina come scheda nel modulo dell'elemento di lavoro. Le nuove pagine vengono visualizzate accanto alla scheda Dettagli .

Screenshot che mostra la nuova pagina come scheda nel modulo dell'elemento di lavoro.

Per aggiungere una pagina al modulo dell'elemento di lavoro, aggiungere un contributo al manifesto dell'estensione di tipo ms.vss-work-web.work-item-form destinato a ms.vss-work-web.work-item-form-page:

"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"
        } 
    }
]

Proprietà

Proprietà Descrizione
name Testo visualizzato nella pagina della scheda.
uri URI alla pagina HTML caricata nell'IFrame.

Esempio in JavaScript

Vedere l'esempio JavaScript nella sezione del gruppo di moduli. Il nome dell'oggetto registrato deve corrispondere all'oggetto id del contributo.

Eventi

Evento Descrizione dell'evento Argomento Descrizione dell'argomento
onFieldChanged Attivato dopo la modifica di un campo. Se la modifica del campo ha eseguito regole che hanno aggiornato altri campi, tutte queste modifiche fanno parte di un singolo evento. Documento d'identità ID dell'elemento di lavoro
changedFields Matrice con il nome di riferimento di tutti i campi modificati. Documento d'identità ID dell'elemento di lavoro
onLoaded Generato dopo che i dati vengono caricati nel formulario del task, quando l'utente apre un task o naviga verso un altro task nella visualizzazione di triage. Documento d'identità ID dell'elemento di lavoro
onReset Generato dopo che l'utente annulla le modifiche apportate all'elemento di lavoro. Documento d'identità ID dell'elemento di lavoro
onRefreshed Generato dopo che l'utente aggiorna manualmente l'elemento di lavoro. Documento d'identità ID dell'elemento di lavoro
onSaved Attivato dopo il salvataggio di un elemento di lavoro. Per gli elementi di lavoro in una finestra di dialogo, è necessario specificare come destinazione il tipo ms.vss-work-web.work-item-notifications per assicurarsi che l'evento venga generato poiché una volta chiusa la finestra di dialogo, questo tipo di contributo viene scaricato. Per altre informazioni, vedere Listen for events .For more information, see Listen for events. Documento d'identità ID dell'elemento di lavoro
onUnloaded Generato prima che l'utente chiuda la finestra di dialogo o prima che l'utente passi a un altro elemento di lavoro nella visualizzazione di valutazione. Documento d'identità ID dell'elemento di lavoro

Configurare i contributi

In Azure DevOps Services le estensioni di gruppo vengono visualizzate alla fine della seconda colonna per impostazione predefinita e i contributi di pagina vengono visualizzati come ultima scheda. I contributi di controllo non vengono visualizzati per impostazione predefinita. Gli utenti devono aggiungerli manualmente al modulo. In Azure DevOps Server, vedere Configurare le estensioni dei moduli degli elementi di lavoro per visualizzare , nascondere o spostare i contributi.

Azione aggiungi menu

Screenshot che mostra come aggiungere un elemento alla barra degli strumenti dell'elemento di lavoro.

Per aggiungere un elemento alla barra degli strumenti dell'elemento di lavoro, aggiungere questo contributo al manifesto dell'estensione. L'elemento viene visualizzato nel menu a discesa con i puntini di sospensione verticale (...).

"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"  
      }  
   }
]

Proprietà

Proprietà Descrizione
text Testo visualizzato sull'elemento della barra degli strumenti.
title Testo della descrizione comando visualizzato nella voce di menu.
toolbarText Testo visualizzato quando si passa il puntatore del mouse sull'elemento.
uri URI di una pagina che registra il gestore dell'azione della barra degli strumenti.
icon URL di un'icona visualizzata nella voce di menu. Gli URL relativi vengono risolti usando baseUri.
group Determina la posizione in cui viene visualizzata la voce di menu, correlata ad altri. Gli elementi della barra degli strumenti con lo stesso nome di gruppo vengono raggruppati e separati dal resto degli elementi tramite un separatore.
registeredObjectId (Facoltativo) Nome del gestore dell'azione del menu registrato. Il valore predefinito è l'ID del contributo.

Ascoltare gli eventi

Gli osservatori ascoltano gli eventi degli elementi di lavoro senza alcuna interfaccia utente nel form. Usare gli osservatori per ascoltare l'evento onSaved, poiché gli osservatori vivono all'esterno del modulo e non vengono eliminati definitivamente quando il dialogo del modulo viene chiuso.

"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"
       }
   }
]

Proprietà

Proprietà Descrizione
uri URI di una pagina che ospita script che ascoltano eventi.

Eventi

Evento Descrizione dell'evento Argomento Descrizione dell'argomento
onFieldChanged Attivato dopo la modifica di un campo. Se la modifica del campo ha eseguito regole che hanno aggiornato altri campi, tutte queste modifiche fanno parte di un singolo evento. Documento d'identità ID dell'elemento di lavoro
changedFields Matrice con il nome di riferimento di tutti i campi modificati. Documento d'identità ID dell'elemento di lavoro
onLoaded Generato dopo che i dati vengono caricati nel formulario del task, quando l'utente apre un task o naviga verso un altro task nella visualizzazione di triage. Documento d'identità ID dell'elemento di lavoro
onReset Generato dopo che l'utente annulla le modifiche apportate all'elemento di lavoro. Documento d'identità ID dell'elemento di lavoro
onRefreshed Generato dopo che l'utente aggiorna manualmente l'elemento di lavoro. Documento d'identità ID dell'elemento di lavoro
onSaved Attivato dopo il salvataggio di un elemento di lavoro. Per gli elementi di lavoro in una finestra di dialogo, è necessario specificare come destinazione il tipo ms.vss-work-web.work-item-notifications per assicurarsi che l'evento venga generato poiché una volta chiusa la finestra di dialogo, questo tipo di contributo viene scaricato. Per altre informazioni, vedere Listen for events .For more information, see Listen for events. Documento d'identità ID dell'elemento di lavoro
onUnloaded Generato prima che l'utente chiuda la finestra di dialogo o prima che l'utente passi a un altro elemento di lavoro nella visualizzazione di valutazione. Documento d'identità ID dell'elemento di lavoro

Esempio in JavaScript

L'esempio seguente registra un osservatore usando l'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
            }
        };
    });
});

Note sulla compatibilità

Azione vs fornitore di azioni

Usare ms.vss-web.action-provider quando si caricano dinamicamente le voci di menu usando getMenuItems nel gestore di menu. Usare ms.vss-web.action quando le voci di menu sono statiche e definite nel manifesto.

Modelli deprecati

I modelli seguenti non sono più supportati:

  • require("VSS/Events/Document") - non supportato con il nuovo hub delle Board
  • SDK.js tag script con usePlatformScripts: true : usare invece il pacchetto azure-devops-extension-sdk npm