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
In diesem Artikel wird erläutert, wie Erweiterungen zum Anpassen des Arbeitselementformulars verwendet werden. Sie können eine Aktion, einen Beobachter, eine Gruppe oder eine Seite zum Arbeitsaufgabenformular in Azure DevOps 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 zur Hauptseite
- Hinzufügen einer Seite (Registerkarte)
- Hinzufügen einer Aktion zum Kontextmenü
- Hinzufügen eines benutzerdefinierten Steuerelements
- Auf Ereignisse im Formular lauschen
- Konfigurieren von Beiträgen im Arbeitsaufgabenformular
Den vollständigen Quellcode finden Sie im Beispiel für die Benutzeroberfläche in den Azure DevOps-Erweiterungsbeispielen auf GitHub.
Eine Gruppe hinzufügen
Um der Hauptseite eine Gruppe hinzuzufügen, fügen Sie ihrem Erweiterungsmanifest einen Beitrag hinzu. Die Art dieses Beitrags sollte sein ms.vss-work-web.work-item-form-group , und er sollte auf den ms.vss-work-web.work-item-form Beitrag abzielen.
"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 zu einer Seite, die den HTML-Code hostt, der im Arbeitsaufgabenformular und den zugehörigen Skripts angezeigt wird. |
height |
(Optional) Definiert die Höhe der Gruppe. Wenn sie weggelassen wird, beträgt sie 100 %. |
JavaScript-Beispiel
In diesem Beispiel wird gezeigt, wie ein Objekt registriert wird, das aufgerufen wird, wenn Ereignisse im Arbeitsaufgabenformular auftreten, die sich auf die beigetragene Gruppe auswirken können.
import { IWorkItemFormService, WorkItemTrackingServiceIds } from "azure-devops-extension-api/WorkItemTracking";
import * as SDK from "azure-devops-extension-sdk";
// Get the WorkItemFormService. This service allows you to get/set fields/links on the 'active' work item (the work item
// that currently is displayed in the UI).
async function getWorkItemFormService()
{
const workItemFormService = await SDK.getService<IWorkItemFormService>(WorkItemTrackingServiceIds.WorkItemFormService);
return workItemFormService;
}
// Register a listener for the work item group contribution after initializing the SDK.
SDK.register(SDK.getContributionId(), function () {
return {
// Called when the active work item is modified
onFieldChanged: function(args) {
$(".events").append($("<div/>").text("onFieldChanged - " + JSON.stringify(args)));
},
// Called when a new work item is being loaded in the UI
onLoaded: function (args) {
getWorkItemFormService().then(function(service) {
// Get the current values for a few of the common fields
service.getFieldValues(["System.Id", "System.Title", "System.State", "System.CreatedDate"]).then(
function (value) {
$(".events").append($("<div/>").text("onLoaded - " + JSON.stringify(value)));
});
});
},
// Called when the active work item is being unloaded in the UI
onUnloaded: function (args) {
$(".events").empty();
$(".events").append($("<div/>").text("onUnloaded - " + JSON.stringify(args)));
},
// Called after the work item has been saved
onSaved: function (args) {
$(".events").append($("<div/>").text("onSaved - " + JSON.stringify(args)));
},
// Called when the work item is reset to its unmodified state (undo)
onReset: function (args) {
$(".events").append($("<div/>").text("onReset - " + JSON.stringify(args)));
},
// Called when the work item has been refreshed from the server
onRefreshed: function (args) {
$(".events").append($("<div/>").text("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 machen kann. | 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 einer Arbeitsaufgabe ausgelöst. 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 hinzu. Die Art dieses Beitrags sollte sein ms.vss-work-web.work-item-form-page , und er sollte auf den ms.vss-work-web.work-item-form Beitrag abzielen.
"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 Registerkartenseite angezeigt wird. |
| URI | URI zu einer Seite, die den HTML-Code hostt, der im Arbeitsaufgabenformular und den zugehörigen Skripts angezeigt wird. |
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 machen kann. | 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 einer Arbeitsaufgabe ausgelöst. 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 |
Konfigurieren von Beiträgen im Arbeitsaufgabenformular
In Azure DevOps Services werden die Gruppenerweiterungen standardmäßig am Ende der zweiten Spalte des Formulars angezeigt, und Seitenbeiträge werden nach allen Formularseiten der Arbeitsaufgabe als Registerkarte angezeigt. Steuerelementbeiträge werden standardmäßig nicht im Formular angezeigt, sodass Benutzer sie dem Formular manuell hinzufügen müssen. Informationen zum Ein-/Ausblenden oder Verschieben des Steuerelements, der Gruppen- und Seitenbeiträge im Arbeitsaufgabenformular finden Sie unter "Konfigurieren von Formularerweiterungen für Arbeitsaufgaben" in Azure DevOps Server.
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. Wählen Sie die vertikalen Auslassungspunkte im Arbeitselementformular aus, um das Dropdownmenü anzuzeigen.
"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 Daraufzeigen 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, wo das Menüelement angezeigt wird, was mit anderen zusammenhängt. 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
Um der Arbeitsaufgabe einen Beobachter hinzuzufügen, der die Arbeitsaufgabenereignisse überwacht, fügen Sie diesen Beitrag zu Ihrem Erweiterungsmanifest hinzu. Es gibt keine Visualisierung für Beobachter im Arbeitsaufgabenformular. Dies ist die beste Möglichkeit, das Arbeitselementformular onSaved-Ereignis zu überwachen, da sich der Beobachter außerhalb des Formulars befindet und nicht zerstört wird, wenn das Formular geschlossen wird, was direkt nach dem Speichern passieren kann.
"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 Skripts gehostet werden, die Ereignisse überwachen. |
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 machen kann. | 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 einer Arbeitsaufgabe ausgelöst. 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 |
HTML/JavaScript-Beispiel
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Work item extension page sample</title>
</head>
<body>
<script src="sdk/scripts/SDK.js"></script>
<script>
SDK.init({
usePlatformScripts: true
});
SDK.ready(function () {
// Register a listener for the work item page contribution.
SDK.register(SDK.getContributionId(), function () {
return {
// Called when the active work item is modified
onFieldChanged: function(args) {
},
// Called when a new work item is being loaded in the UI
onLoaded: function (args) {
},
// Called when the active work item is being unloaded in the UI
onUnloaded: function (args) {
},
// Called after the work item has been saved
onSaved: function (args) {
},
// Called when the work item is reset to its unmodified state (undo)
onReset: function (args) {
},
// Called when the work item has been refreshed from the server
onRefreshed: function (args) {
}
}
});
});
</script>
</body>
</html>
Änderungen mit dem Hub für neue Boards
Hinweis
Das Feature „Neuer Boards-Hub“ ist standardmäßig aktiviert. Es wird dringend empfohlen, Ihre internen Erweiterungen mit dem New Boards Hub zu testen, um die Kompatibilität sicherzustellen.
Verwenden der neuesten SDKs
Stellen Sie sicher, dass Ihre Erweiterung die neueste Version von azure-devops-extension-sdk verwendet.
Wenn Sie das neue SDK verwenden, sollten Sie auch das Azure-devops-extension-api-Paket für REST-APIs verwenden. Wir aktualisieren die Methoden und Schnittstellen jedes Sprints, um sicherzustellen, dass es alle neuesten Features enthält.
Gründe für die Verwendung von Aktionen oder Aktionsanbietern
Wird ms.vss-web.action-provider beim dynamischen Laden von Menüelementen im getMenuItems Menühandler verwendet. Vermeiden Sie die Verwendung ms.vss-web.action-provider , wenn Ihre Menüelemente statisch und in Ihrem Manifest definiert sind. Stattdessen ms.vss-web.action sollte verwendet werden.
Paket require("VSS/Events/Document") wird nicht mehr unterstützt
Der Import von require("VSS/Events/Document")wird nicht mehr für den Neuen Boards-Hub unterstützt.