Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Le finestre di dialogo modali offrono un modo efficace per creare esperienze utente incentrate nelle estensioni di Azure DevOps. Il servizio di dialogo consente di presentare una finestra di dialogo modale che blocca l'interazione dell'utente con l'intera interfaccia di Azure DevOps fino a quando la finestra di dialogo non viene chiusa. Questa azione garantisce che gli utenti completino attività importanti o forniscano informazioni necessarie.
Usare finestre di dialogo modali nelle estensioni per:
- Raccogliere l'input dell'utente tramite moduli
- Visualizzare i messaggi di conferma per le azioni critiche
- Mostra informazioni dettagliate che richiedono l'attenzione dell'utente
- Guidare gli utenti attraverso processi in più passaggi
Importante
Quando si creano finestre di dialogo modali, bloccano l'interazione con l'intera pagina di Azure DevOps, non solo con l'estensione. Questo approccio offre un'esperienza modale reale, ma è consigliabile usarla in modo ponderato per evitare di interrompere il flusso di lavoro dell'utente.
Prerequisiti
| Categoria | Requisito | Dettagli |
|---|---|---|
| Configurazione dell'estensione | Progetto di estensione funzionante | Un file manifest valido vss-extension.json |
| Registrazione al Marketplace | Estensione registrata in Visual Studio Marketplace per test e distribuzione | |
| Conoscenza dello sviluppo | Informazioni sui principi fondamentali dello sviluppo di estensioni per Azure DevOps | |
| Ambiente di sviluppo | Node.js e npm | Node.js versione 14 o successiva con npm installato |
| Editor di codice | Visual Studio Code o altri IDE consigliati | |
| Accesso ad Azure DevOps | Accesso a un'organizzazione di Azure DevOps per i test | |
| Pacchetti obbligatori | SDK dell'estensione | Installare: npm install azure-devops-extension-sdk |
| API di estensione | Installare: npm install azure-devops-extension-api |
|
| Autorizzazioni di estensione | Ambiti del manifesto | Includere ambiti appropriati in vss-extension.json, ad esempio : "vso.work", "vso.project" |
| Importazioni dell'SDK | Moduli obbligatori | Importa SDK: import * as SDK from "azure-devops-extension-sdk" e servizi: import { CommonServiceIds, IHostPageLayoutService } from "azure-devops-extension-api" |
Contenuto della finestra di dialogo
Per iniziare, dichiarare un contributo di tipo ms.vss-web.control nel manifesto dell'estensione. Questo contributo rappresenta il contenuto visualizzato all'interno della finestra di dialogo.
{
"id": "registration-form",
"type": "ms.vss-web.control",
"description": "The content to be displayed in the dialog",
"targets": [],
"properties": {
"uri": "registration-form.html"
}
}
La uri proprietà fa riferimento a una pagina di cui viene eseguito il rendering all'interno dell'area del contenuto della finestra di dialogo:
<!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>
Il file JavaScript corrispondente (registration-form.js) inizializza l'SDK, recupera tutte le configurazioni passate dall'host e chiama SDK.notifyLoadSucceeded() quando è pronto:
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();
});
Annotazioni
Impacchetta il tuo JavaScript con uno strumento come webpack in modo che l'istruzione import venga risolta correttamente in fase di runtime. La pagina HTML fa riferimento al file di output in bundle , ad esempio registration-form.js.
Visualizzare la finestra di dialogo
Per visualizzare la finestra di dialogo, ad esempio quando un utente seleziona un'azione su una barra degli strumenti o un menu, chiamare il openCustomDialog metodo in 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);
}
}
});
Gestire i risultati della finestra di dialogo
Il onClose callback nelle opzioni della finestra di dialogo riceve il risultato quando la finestra di dialogo viene chiusa. Usare l'opzione configuration per passare i dati iniziali al contenuto della finestra di dialogo.
In questo esempio, la pagina host apre una finestra di dialogo personalizzata e gestisce il risultato quando la finestra di dialogo viene chiusa:
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.");
}
}
});
Nella pagina del contenuto della finestra di dialogo usare SDK.getConfiguration() per recuperare i dati passati dall'host. La pagina dei contenuti della finestra di dialogo non può comunicare direttamente con l'host, se non tramite il risultato onClose.
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();
});
Visualizzare una finestra di dialogo di messaggio
Per semplici finestre di dialogo di conferma con i pulsanti OK e Annulla, usare openMessageDialog invece di una finestra di dialogo personalizzata:
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.");
}
}
});
Passare valori alla finestra di dialogo
Passare i valori iniziali al contenuto della finestra di dialogo usando l'opzione configuration . La pagina del contenuto della finestra di dialogo recupera questi valori con 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();
});
Personalizzare i pulsanti della finestra di dialogo
Per le finestre di dialogo dei messaggi, le okText proprietà e cancelText specificano titoli alternativi per i pulsanti OK e Annulla:
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.");
}
}
});
Abilitare la chiusura della luce
Per le finestre di dialogo personalizzate, impostare lightDismiss su true in modo che selezionare all'esterno della finestra di dialogo la chiuda.
dialogService.openCustomDialog(contributionId, {
title: "My Dialog Title",
lightDismiss: true,
onClose: (result) => {
console.log("Dialog closed.");
}
});
Annotazioni
La chiusura della luce è abilitata per impostazione predefinita (true). Impostarlo su false per richiedere all'utente di chiudere in modo esplicito la finestra di dialogo.
" output is necessary.)
Se si ha una domanda o si stanno cercando altre informazioni, prendere in considerazione una delle aree seguenti: