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 und Dienste importieren: import * as SDK from "azure-devops-extension-sdk" |
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>
<script src="node_modules/azure-devops-extension-sdk/lib/SDK.js"></script>
</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>
<script type="module">
import * as SDK from "azure-devops-extension-sdk";
SDK.init();
const registrationForm = (function() {
const callbacks = [];
function inputChanged() {
// Execute registered callbacks
for(let i = 0; i < callbacks.length; i++) {
callbacks[i](isValid());
}
}
function isValid() {
// Check whether form is valid or not
return !!(name.value) && !!(dateOfBirth.value) && !!(email.value);
}
function getFormData() {
// Get form values
return {
name: name.value,
dateOfBirth: dateOfBirth.value,
email: email.value
};
}
const name = document.getElementById("inpName");
const dateOfBirth = document.getElementById("inpDob");
const email = document.getElementById("inpEmail");
name.addEventListener("change", inputChanged);
dateOfBirth.addEventListener("change", inputChanged);
email.addEventListener("change", inputChanged);
return {
isFormValid: function() {
return isValid();
},
getFormData: function() {
return getFormData();
},
attachFormChanged: function(cb) {
callbacks.push(cb);
}
};
})();
// Register form object to be used across this extension
SDK.register("registration-form", registrationForm);
</script>
</body>
</html>
Dialogfeld anzeigen
Um das Dialogfeld anzuzeigen (z. B. wenn ein Benutzer eine Aktion auf einer Symbolleiste oder einem Menü auswählt), rufen Sie die openDialog Funktion in einer Instanz des Dialogdiensts auf:
import * as SDK from "azure-devops-extension-sdk";
SDK.getService(SDK.CommonServiceIds.Dialog).then((dialogService) => {
const extensionCtx = SDK.getExtensionContext();
// Build absolute contribution ID for dialogContent
const contributionId = `${extensionCtx.publisherId}.${extensionCtx.extensionId}.registration-form`;
// Show dialog
const dialogOptions = {
title: "My Dialog",
width: 800,
height: 600
};
dialogService.openDialog(contributionId, dialogOptions);
});
Erweiterte Dialogfeldfunktionen
Eine Funktion kann aufgerufen werden, wenn die Schaltfläche OK ausgewählt ist. Sie geben diese Funktion an, indem Sie getDialogResult in den Optionen festlegen, die Sie beim Anzeigen des Dialogfelds bereitstellen.
Wenn ein Aufruf von getDialogResult einen Wert ungleich NULL zurückgibt, wird dieser Wert an die von okCallback angegebene Funktion (auch in den Optionen) übergeben, und das Dialogfeld wird geschlossen.
In diesem Beispiel wird der attachFormChanged Rückruf aufgerufen, wenn sich Eingaben im Formular ändern. Basierend darauf, ob das Formular gültig ist oder nicht, ist die Schaltfläche "OK" aktiviert oder deaktiviert.
import * as SDK from "azure-devops-extension-sdk";
SDK.getService(SDK.CommonServiceIds.Dialog).then((dialogService) => {
let registrationForm;
const extensionCtx = SDK.getExtensionContext();
const contributionId = `${extensionCtx.publisherId}.${extensionCtx.extensionId}.registration-form`;
const dialogOptions = {
title: "Registration Form",
width: 800,
height: 600,
getDialogResult: () => {
// Get the result from registrationForm object
return registrationForm ? registrationForm.getFormData() : null;
},
okCallback: (result) => {
// Log the result to the console
console.log(JSON.stringify(result));
}
};
dialogService.openDialog(contributionId, dialogOptions).then((dialog) => {
// Get registrationForm instance which is registered in registration-form.html
dialog.getContributionInstance("registration-form").then((registrationFormInstance) => {
// Keep a reference of registration form instance (to be used previously in dialog options)
registrationForm = registrationFormInstance;
// Subscribe to form input changes and update the Ok enabled state
registrationForm.attachFormChanged((isValid) => {
dialog.updateOkButton(isValid);
});
// Set the initial ok enabled state
registrationForm.isFormValid().then((isValid) => {
dialog.updateOkButton(isValid);
});
});
});
});
Steuern der Schaltfläche "OK"
Zunächst ist die Schaltfläche OK deaktiviert. Sie können diese Schaltfläche jedoch aktivieren/deaktivieren, indem Sie die updateOkButton -Methode im Dialogfeld aufrufen:
dialogService.openDialog(contributionId, dialogOptions).then((dialog) => {
// Set true/false to enable/disable ok button
dialog.updateOkButton(true);
});
Übergeben von Werten an das Dialogfeld
Beim Öffnen des Host-Dialogs können Anfangswerte an Dialoginhalte übergeben werden.
{
"id": "registration-form",
"type": "ms.vss-web.control",
"description": "The content displayed in the dialog",
"targets": [],
"properties": {
"uri": "registration-form.html?id={{myId}}"
}
}
Wenn das Dialogfeld geöffnet wird, müssen die folgenden Optionen angegeben werden, um folgendes zu übergeben myId:
const dialogOptions = {
title: "My Dialog Title",
width: 800,
height: 600,
urlReplacementObject: { myId: new Date().getTime() }
};
Dialogfeldschaltflächen anpassen
Die okText Attribute und cancelText können verwendet werden, um alternative Titel für die Schaltflächen OK und Abbrechen anzugeben:
const dialogOptions = {
title: "My Dialog Title",
width: 800,
height: 600,
okText: "Yes",
cancelText: "No"
};
Um keine Schaltflächen im Dialogfeld anzuzeigen, können Sie das buttons Attribut auf []festlegen:
const dialogOptions = {
title: "My Dialog Title",
width: 800,
height: 600,
buttons: []
};
Verwandte Ressourcen
Wenn Sie eine Frage haben oder nach weiteren Informationen suchen, sollten Sie zu einem der folgenden Bereiche wechseln: