Freigeben über


Formular für Arbeitselemente erweitern

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

Verwenden Sie Erweiterungen, um das Arbeitsaufgabenformular anzupassen, indem Sie Gruppen, Seiten, Menüaktionen, Beobachter oder benutzerdefinierte Steuerelemente hinzufügen.

Tipp

Wenn Sie eine neue Azure DevOps-Erweiterung starten, probieren Sie diese verwalteten Beispielsammlungen zuerst aus – sie arbeiten mit aktuellen Produktbuilds und behandeln moderne Szenarien (z. B. Hinzufügen von Registerkarten auf Pullanforderungsseiten).

Wenn ein Beispiel in Ihrer Organisation nicht funktioniert, installieren Sie es in einer persönlichen oder Testorganisation und vergleichen Sie die Ziel-IDs und API-Versionen des Erweiterungsmanifests mit den aktuellen Dokumenten. Weitere Informationen und APIs finden Sie unter:

Den vollständigen Quellcode finden Sie im Beispiel für die Benutzeroberfläche in den Azure DevOps-Erweiterungsbeispielen auf GitHub.

Tipp

Für die neuesten Anleitungen zur Erweiterungsentwicklung, einschließlich Themengestaltung und Migration von VSS.SDK, besuchen Sie das Entwicklerportal des Azure DevOps Extension SDK.

Eine Gruppe hinzufügen

Screenshot, der das Symbolleistenelement im Arbeitselementformular zeigt.

Um der Hauptseite eine Gruppe hinzuzufügen, fügen Sie dem Erweiterungsmanifest einen Beitrag mit Typ ms.vss-work-web.work-item-form-group, der auf ms.vss-work-web.work-item-form abzielt, hinzu.

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

Eigenschaften

Eigenschaften Beschreibung
name Text, der in der Gruppe angezeigt wird.
uri URI der IM IFrame geladenen HTML-Seite.
height (Optional) Höhe der Gruppe. Der Standardwert ist 100%.

JavaScript-Beispiel

In diesem Beispiel wird ein Anbieter registriert, der auf Arbeitsaufgabenformularereignisse reagiert. Es verwendet WorkItemFormService, um Feldwerte zu lesen, wenn das Arbeitselement geladen wird.

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

Ereignisse

Ereignis Ereignisbeschreibung Streitpunkt Argumentbeschreibung
onFieldChanged Wird ausgelöst, nachdem ein Feld geändert wurde. Wenn bei der Feldänderung Regeln ausgeführt wurden, die andere Felder aktualisiert haben, sind alle diese Änderungen Teil eines einzigen Ereignisses. Kennung Die ID der Arbeitsaufgabe
changedFields Array mit dem Verweisnamen aller geänderten Felder. Kennung Die ID der Arbeitsaufgabe
onLoaded Wird ausgelöst, nachdem die Daten in das Arbeitsaufgabenformular geladen wurden, wenn der Benutzer eine Arbeitsaufgabe öffnet oder wenn der Benutzer zu einer anderen Arbeitsaufgabe in der Selektierungsansicht navigiert. Kennung Die ID der Arbeitsaufgabe
onReset Wird ausgelöst, nachdem der Benutzer die Änderungen an der Arbeitsaufgabe rückgängig gemacht hat. Kennung Die ID der Arbeitsaufgabe
onRefreshed Wird ausgelöst, nachdem der Benutzer die Arbeitsaufgabe manuell aktualisiert hat. Kennung Die ID der Arbeitsaufgabe
onSaved Wird ausgelöst, nachdem ein Arbeitselement gespeichert wurde. Für Arbeitsaufgaben in einem Dialogfeld sollten Sie den ms.vss-work-web.work-item-notifications Typ als Ziel festlegen, um sicherzustellen, dass das Ereignis ausgelöst wird, da dieser Beitragstyp nach dem Schließen des Dialogfelds entladen wird. Weitere Informationen finden Sie unter "Auf Ereignisse lauschen". Kennung Die ID der Arbeitsaufgabe
onUnloaded Wird ausgelöst, bevor der Benutzer das Dialogfeld schließt oder bevor der Benutzer zu einer anderen Arbeitsaufgabe in der Triageansicht wechselt. Kennung Die ID der Arbeitsaufgabe

Seite hinzufügen

Eine neue Seite wird als Registerkarte im Arbeitsaufgabenformular gerendert. Neue Seiten werden neben der Registerkarte Details angezeigt.

Screenshot, der die neue Seite als Registerkarte im Arbeitsaufgabenformular anzeigt.

Um dem Arbeitsaufgabenformular eine Seite hinzuzufügen, fügen Sie Ihrem Erweiterungsmanifest einen Beitrag mit dem Typ ms.vss-work-web.work-item-form-page für ms.vss-work-web.work-item-form zielgerichtet hinzu.

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

Eigenschaften

Eigenschaften Beschreibung
name Text, der auf der Registerkarte angezeigt wird.
uri URI der IM IFrame geladenen HTML-Seite.

JavaScript-Beispiel

Sehen Sie sich das JavaScript-Beispiel im Abschnitt "Formulargruppe" an. Der Name des registrierten Objekts sollte mit dem id Beitrag übereinstimmen.

Ereignisse

Ereignis Ereignisbeschreibung Streitpunkt Argumentbeschreibung
onFieldChanged Wird ausgelöst, nachdem ein Feld geändert wurde. Wenn bei der Feldänderung Regeln ausgeführt wurden, die andere Felder aktualisiert haben, sind alle diese Änderungen Teil eines einzigen Ereignisses. Kennung Die ID der Arbeitsaufgabe
changedFields Array mit dem Verweisnamen aller geänderten Felder. Kennung Die ID der Arbeitsaufgabe
onLoaded Wird ausgelöst, nachdem die Daten in das Arbeitsaufgabenformular geladen wurden, wenn der Benutzer eine Arbeitsaufgabe öffnet oder wenn der Benutzer zu einer anderen Arbeitsaufgabe in der Selektierungsansicht navigiert. Kennung Die ID der Arbeitsaufgabe
onReset Wird ausgelöst, nachdem der Benutzer die Änderungen an der Arbeitsaufgabe rückgängig gemacht hat. Kennung Die ID der Arbeitsaufgabe
onRefreshed Wird ausgelöst, nachdem der Benutzer die Arbeitsaufgabe manuell aktualisiert hat. Kennung Die ID der Arbeitsaufgabe
onSaved Wird nach dem Speichern eines Arbeitselements ausgelöst. Für Arbeitsaufgaben in einem Dialogfeld sollten Sie den ms.vss-work-web.work-item-notifications Typ anvisieren, um sicherzustellen, dass das Ereignis ausgelöst wird, da dieser Beitragstyp nach Schließen des Dialogfelds entladen wird. Weitere Informationen finden Sie unter "Auf Ereignisse lauschen". Kennung Die ID der Arbeitsaufgabe
onUnloaded Wird ausgelöst, bevor der Benutzer das Dialogfeld schließt oder bevor der Benutzer zu einer anderen Arbeitsaufgabe in der Triageansicht wechselt. Kennung Die ID der Arbeitsaufgabe

Konfigurieren von Beiträgen

In Azure DevOps Services werden Gruppenerweiterungen standardmäßig am Ende der zweiten Spalte angezeigt, und Seitenbeiträge werden als letzte Registerkarte angezeigt. Steuerelementbeiträge werden nicht standardmäßig angezeigt – Benutzer müssen sie dem Formular manuell hinzufügen. Informationen zu Azure DevOps Server finden Sie unter Konfigurieren von Formularerweiterungen für Arbeitsaufgaben zum Anzeigen, Ausblenden oder Verschieben von Beiträgen.

Menüaktion hinzufügen

Screenshot, der zeigt, wie Sie der Symbolleiste für Arbeitsaufgaben ein Element hinzufügen.

Wenn Sie der Symbolleiste für Arbeitsaufgaben ein Element hinzufügen möchten, fügen Sie diesen Beitrag zu Ihrem Erweiterungsmanifest hinzu. Das Element wird im Dropdownmenü mit den vertikalen Auslassungspunkten (...) angezeigt.

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

Eigenschaften

Eigenschaften Beschreibung
text Text, der im Symbolleistenelement angezeigt wird.
title QuickInfo-Text, der im Menüelement angezeigt wird.
toolbarText Text, der beim Überfahren des Elements angezeigt wird.
uri URI zu einer Seite, die den Symbolleistenaktionshandler registriert.
icon URL zu einem Symbol, das im Menüelement angezeigt wird. Relative URLs werden mit baseUriaufgelöst.
group Bestimmt die Position des Menüpunkts im Verhältnis zu anderen. Symbolleistenelemente mit demselben Gruppennamen werden gruppiert und durch ein Trennzeichen von den restlichen Elementen geteilt.
registeredObjectId (Optional) Name des registrierten Menüaktionshandlers. Der Standardwert ist die Beitrags-ID.

Auf Ereignisse lauschen

Beobachter überwachen Arbeitsaufgabenereignisse ohne UI auf der Oberfläche. Verwenden Sie Beobachter, um auf das onSaved Ereignis zu hören, da Beobachter sich außerhalb des Formulars befinden und nicht zerstört werden, wenn der Formulardialog geschlossen wird.

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

Eigenschaften

Eigenschaften Beschreibung
uri URI zu einer Seite, auf der die Skripte, die auf Ereignisse hören, gehostet werden.

Ereignisse

Ereignis Ereignisbeschreibung Streitpunkt Argumentbeschreibung
onFieldChanged Wird ausgelöst, nachdem ein Feld geändert wurde. Wenn bei der Feldänderung Regeln ausgeführt wurden, die andere Felder aktualisiert haben, sind alle diese Änderungen Teil eines einzigen Ereignisses. Kennung Die ID der Arbeitsaufgabe
changedFields Array mit dem Verweisnamen aller geänderten Felder. Kennung Die ID der Arbeitsaufgabe
onLoaded Wird ausgelöst, nachdem die Daten in das Arbeitsaufgabenformular geladen wurden, wenn der Benutzer eine Arbeitsaufgabe öffnet oder wenn der Benutzer zu einer anderen Arbeitsaufgabe in der Selektierungsansicht navigiert. Kennung Die ID der Arbeitsaufgabe
onReset Wird ausgelöst, nachdem der Benutzer die Änderungen an der Arbeitsaufgabe rückgängig gemacht hat. Kennung Die ID der Arbeitsaufgabe
onRefreshed Wird ausgelöst, nachdem der Benutzer die Arbeitsaufgabe manuell aktualisiert hat. Kennung Die ID der Arbeitsaufgabe
onSaved Wird nach dem Speichern eines Arbeitselements ausgelöst. Für Arbeitsaufgaben in einem Dialogfeld sollten Sie den ms.vss-work-web.work-item-notifications Typ anvisieren, um sicherzustellen, dass das Ereignis ausgelöst wird, da dieser Beitragstyp nach Schließen des Dialogfelds entladen wird. Weitere Informationen finden Sie unter "Auf Ereignisse lauschen". Kennung Die ID der Arbeitsaufgabe
onUnloaded Wird ausgelöst, bevor der Benutzer das Dialogfeld schließt oder bevor der Benutzer zu einer anderen Arbeitsaufgabe in der Triageansicht wechselt. Kennung Die ID der Arbeitsaufgabe

JavaScript-Beispiel

Im folgenden Beispiel wird ein Beobachter mithilfe des modernen SDK registriert:

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

Kompatibilitätshinweise

Aktion im Vergleich zum Aktionsanbieter

Verwenden Sie ms.vss-web.action-provider, wenn Menüelemente dynamisch mithilfe von getMenuItems auf dem Menühandler geladen werden. Verwenden Sie ms.vss-web.action, wenn Ihre Menüelemente statisch sind und im Manifest definiert werden.

Veraltete Muster

Die folgenden Muster werden nicht mehr unterstützt:

  • require("VSS/Events/Document") - nicht unterstützt mit dem New Boards Hub
  • SDK.jsScript-Tag mit usePlatformScripts: true - verwenden Sie stattdessen das npm-Paket azure-devops-extension-sdk