Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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).
- Azure DevOps-Erweiterungsbeispiel (GitHub) – ein kompaktes Startbeispiel, das allgemeine Erweiterungsmuster veranschaulicht: https://github.com/microsoft/azure-devops-extension-sample
- Azure DevOps-Erweiterungsbeispiele (Legacysammlungs- und Beitragsleitfaden) – Installieren, um UI-Ziele zu prüfen oder die Quelle anzuzeigen: https://marketplace.visualstudio.com/items/ms-samples.samples-contributions-guide und https://github.com/Microsoft/vso-extension-samples/tree/master/contributions-guide
- Microsoft Learn-Beispiele (Azure DevOps-Beispiele durchsuchen) – kuratierte, aktuelle Beispiele in Dokumenten von Microsoft: /samples/browse/?terms=azure%20devops%20extension
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:
- Hinzufügen einer Gruppe
- Hinzufügen einer Seite (Registerkarte)
- Hinzufügen einer Menüaktion
- Hinzufügen eines benutzerdefinierten Steuerelements
- Auf Ereignisse lauschen
- Konfigurieren von Beiträgen
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
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.
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
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 mitusePlatformScripts: true- verwenden Sie stattdessen das npm-Paketazure-devops-extension-sdk