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
Modale Dialogfelder bieten eine leistungsstarke Möglichkeit, fokussierte Benutzeroberflächen in Azure DevOps-Erweiterungen zu erstellen. Mit dem Dialogdienst können Sie ein modales Dialogfeld präsentieren, das die Benutzerinteraktion mit der gesamten Azure DevOps-Schnittstelle blockiert, bis das Dialogfeld geschlossen wird. Diese Aktion stellt sicher, dass Benutzer wichtige Aufgaben ausführen oder erforderliche Informationen bereitstellen.
Verwenden Sie modale Dialogfelder in Ihren Erweiterungen, um:
- Sammeln von Benutzereingaben über Formulare
- Anzeigen von Bestätigungsmeldungen für kritische Aktionen
- Detaillierte Informationen anzeigen, die die Aufmerksamkeit des Benutzers erfordern
- Führen Sie Die Benutzer durch mehrstufige Prozesse
Von Bedeutung
Wenn Sie modale Dialogfelder erstellen, blockieren sie die Interaktion mit der gesamten Azure DevOps-Seite, nicht nur Ihrer Erweiterung. Dieser Ansatz bietet eine echte modale Oberfläche, aber Sie sollten es überlegt verwenden, um zu vermeiden, dass der Benutzerworkflow gestört wird.
Voraussetzungen
| Kategorie | Anforderung | Einzelheiten |
|---|---|---|
| Erweiterungseinrichtung | Projekt zur Arbeitserweiterung | Eine gültige vss-extension.json Manifestdatei |
| Marketplace-Registrierung | Erweiterung, die bei Visual Studio Marketplace für Tests und Bereitstellung registriert ist | |
| Entwicklungswissen | Grundlegendes zur Entwicklung von Azure DevOps-Erweiterungen | |
| Entwicklungsumgebung | Node.js und npm | Node.js Version 14 oder höher mit installierter npm |
| Code-Editor | Visual Studio Code oder andere empfohlene IDE | |
| Azure DevOps-Zugriff | Zugriff auf eine Azure DevOps-Organisation zum Testen | |
| Erforderliche Pakete | Erweiterungs-SDK | Installieren: npm install azure-devops-extension-sdk |
| Erweiterungs-API | Installieren: npm install azure-devops-extension-api |
|
| Erweiterungsberechtigungen | Reservierungsumfang des Manifests | Fügen Sie entsprechende Bereiche in vss-extension.json, z. B.: "vso.work", "vso.project" |
| SDK-Importe | Erforderliche Module | Sdk importieren: import * as SDK from "azure-devops-extension-sdk" und Dienste: import { CommonServiceIds, IHostPageLayoutService } from "azure-devops-extension-api" |
Inhalt des Dialogfelds
Deklarieren Sie zunächst einen Beitrag vom Typ ms.vss-web.control in Ihrem Erweiterungsmanifest. Dieser Beitrag stellt den Inhalt dar, der im Dialogfeld angezeigt wird.
{
"id": "registration-form",
"type": "ms.vss-web.control",
"description": "The content to be displayed in the dialog",
"targets": [],
"properties": {
"uri": "registration-form.html"
}
}
Die uri -Eigenschaft verweist auf eine Seite, die im Inhaltsbereich des Dialogfelds gerendert wird:
<!DOCTYPE html>
<html>
<head></head>
<body>
<h2 id="header">Register now</h2>
<p>
<label>Name:</label>
<input id="inpName" />
</p>
<p>
<label>Date of birth:</label>
<input id="inpDob" />
</p>
<p>
<label>Email address:</label>
<input id="inpEmail" />
</p>
<div id="root"></div>
<script type="text/javascript" src="registration-form.js" charset="utf-8"></script>
</body>
</html>
Die entsprechende JavaScript-Datei (registration-form.js) initialisiert das SDK, ruft alle vom Host übergebenen Konfigurationen ab und ruft nach Bedarf auf SDK.notifyLoadSucceeded() :
import * as SDK from "azure-devops-extension-sdk";
SDK.init();
SDK.ready().then(() => {
// Retrieve configuration passed through the dialog options
const config = SDK.getConfiguration();
console.log("Dialog configuration:", config);
SDK.notifyLoadSucceeded();
});
Hinweis
Bündeln Sie Ihr JavaScript mit einem Tool wie webpack, damit die import-Anweisung zur Laufzeit korrekt aufgelöst wird. Die HTML-Seite verweist auf die gebündelte Ausgabedatei (z. B registration-form.js. ).
Dialogfeld anzeigen
Um das Dialogfeld anzuzeigen (z. B. wenn ein Benutzer eine Aktion auf einer Symbolleiste oder einem Menü auswählt), rufen Sie die openCustomDialog Methode auf der IHostPageLayoutService:
import * as SDK from "azure-devops-extension-sdk";
import { CommonServiceIds, IHostPageLayoutService } from "azure-devops-extension-api";
const dialogService = await SDK.getService<IHostPageLayoutService>(CommonServiceIds.HostPageLayoutService);
const extensionCtx = SDK.getExtensionContext();
// Build absolute contribution ID for dialog content
const contributionId = `${extensionCtx.publisherId}.${extensionCtx.extensionId}.registration-form`;
// Show dialog
dialogService.openCustomDialog(contributionId, {
title: "My Dialog",
configuration: {
// Pass initial data to the dialog content
message: "Please fill out the registration form."
},
onClose: (result) => {
if (result !== undefined) {
console.log("Dialog result:", result);
}
}
});
Dialogergebnisse verarbeiten
Der onClose Callback in den Dialogoptionen erhält das Ergebnis, wenn der Dialog beendet wird. Verwenden Sie die configuration Option, um anfängliche Daten an den Dialoginhalt zu übergeben.
In diesem Beispiel öffnet die Hostseite ein benutzerdefiniertes Dialogfeld und behandelt das Ergebnis, wenn das Dialogfeld geschlossen wird:
import * as SDK from "azure-devops-extension-sdk";
import { CommonServiceIds, IHostPageLayoutService } from "azure-devops-extension-api";
const dialogService = await SDK.getService<IHostPageLayoutService>(CommonServiceIds.HostPageLayoutService);
const extensionCtx = SDK.getExtensionContext();
const contributionId = `${extensionCtx.publisherId}.${extensionCtx.extensionId}.registration-form`;
dialogService.openCustomDialog(contributionId, {
title: "Registration Form",
configuration: {
defaultName: "Contoso User"
},
onClose: (result) => {
if (result !== undefined) {
// User completed the dialog
console.log("Registration data:", JSON.stringify(result));
} else {
// User dismissed the dialog without completing
console.log("Dialog was dismissed.");
}
}
});
Verwenden Sie SDK.getConfiguration() auf der Dialoginhaltsseite, um die vom Host übergebenen Daten abzurufen. Die Inhaltsseite des Dialogs kann nicht direkt mit dem Host kommunizieren, außer über das onClose Ergebnis:
import * as SDK from "azure-devops-extension-sdk";
SDK.init();
SDK.ready().then(() => {
const config = SDK.getConfiguration();
// Use configuration values passed from the host
if (config.defaultName) {
document.getElementById("inpName").value = config.defaultName;
}
SDK.notifyLoadSucceeded();
});
Anzeigen eines Meldungsdialogfelds
Verwenden Sie openMessageDialog für einfache Bestätigungsdialogfelder mit den Schaltflächen "OK" und "Abbrechen" anstelle eines benutzerdefinierten Dialogfelds:
import * as SDK from "azure-devops-extension-sdk";
import { CommonServiceIds, IHostPageLayoutService } from "azure-devops-extension-api";
const dialogService = await SDK.getService<IHostPageLayoutService>(CommonServiceIds.HostPageLayoutService);
dialogService.openMessageDialog("Are you sure you want to proceed?", {
title: "Confirm Action",
showCancel: true,
onClose: (result) => {
// result is true if OK was selected, false if Cancel
if (result) {
console.log("User confirmed.");
} else {
console.log("User canceled.");
}
}
});
Übergeben von Werten an das Dialogfeld
Übergeben Sie die Anfangswerte an Dialoginhalte, indem Sie die configuration Option verwenden. Die Dialoginhaltsseite ruft diese Werte mit SDK.getConfiguration().
// Host page: pass configuration when opening the dialog
dialogService.openCustomDialog(contributionId, {
title: "My Dialog Title",
configuration: {
itemId: 42,
timestamp: new Date().getTime()
},
onClose: (result) => {
if (result !== undefined) {
console.log("Dialog result:", result);
}
}
});
// Dialog content page: retrieve configuration
import * as SDK from "azure-devops-extension-sdk";
SDK.init();
SDK.ready().then(() => {
const config = SDK.getConfiguration();
console.log("Item ID:", config.itemId);
console.log("Timestamp:", config.timestamp);
SDK.notifyLoadSucceeded();
});
Dialogfeldschaltflächen anpassen
Für Meldungsdialogfelder geben die Eigenschaften okText und cancelText alternative Titel für die Schaltflächen „OK“ und „Abbrechen“ an.
dialogService.openMessageDialog("Do you want to save changes?", {
title: "Save Changes",
showCancel: true,
okText: "Yes",
cancelText: "No",
onClose: (result) => {
if (result) {
console.log("User selected Yes.");
}
}
});
Light Dismiss aktivieren
Legen Sie lightDismiss für benutzerdefinierte Dialogfelder auf true fest, sodass ein Klick außerhalb des Dialogfelds es schließt.
dialogService.openCustomDialog(contributionId, {
title: "My Dialog Title",
lightDismiss: true,
onClose: (result) => {
console.log("Dialog closed.");
}
});
Hinweis
"Die Funktion 'Light Dismiss' ist standardmäßig aktiviert (true)." Setzen Sie es auf false, damit der Benutzer das Dialogfeld explizit schließen muss.
Verwandte Ressourcen
Wenn Sie eine Frage haben oder nach weiteren Informationen suchen, sollten Sie zu einem der folgenden Bereiche wechseln: