Dataverse Helper
Estensione VS Code per lo sviluppo su Microsoft Dataverse / Dynamics 365: esplora i metadati,
genera il codice, registra plugin e step, pubblica web resource e flussi — senza uscire dall'editor
e senza CLI esterne (niente pac, niente spkl, niente Plugin Registration Tool).
Interfaccia in italiano.
Cosa puoi fare
- Quattro modalità di connessione, scelte per ambiente (come la schermata "New connection" di XrmToolBox):
- Browser di sistema (OAuth / MFA): Authorization Code + PKCE, MFA gestita nel browser.
- Utente e password: come il Connection Wizard di XrmToolBox. Prova prima utente e password;
se il tenant chiede l'MFA o una Conditional Access, passa da solo all'Account Windows (WAM) con
lo stesso utente e da lì l'ambiente resta su WAM. Non per account federati (ADFS).
- Account Windows (WAM): broker di Windows tramite gli account Microsoft di VS Code; passa
l'identità del dispositivo. È la modalità per i tenant con Conditional Access che richiede un
dispositivo conforme o registrato, dove il login nel browser fallisce con "dispositivo non
conforme". Al primo accesso VS Code chiede il consenso e la scelta dell'account, poi è silenzioso.
- Client ID / Secret: app registration registrata come application user, nessun login utente.
- Il tenant si ricava dall'ambiente, quindi funzionano anche gli utenti guest e i cloud sovrani.
Token e segreti restano cifrati in VS Code e vengono riusati alle sessioni successive.
- Browser dei metadati nella activity bar: ambiente → entità → campi, con cache locale,
ricerca per nome o logical name, filtro per solution e toggle delle tabelle di sistema.
- Selezione a checkbox di entità e campi, persistita per ambiente: è l'input di tutti i generatori.
- Metadata Explorer: chiavi alternate, relazioni 1:N / N:1 / N:N, privilegi e attributi di un'entità.
Progetti C# (plugin e custom workflow activity)
- Scaffolding di progetti tipizzati
net462 con classi base, error handling, tracing,
strong-name key e manifest di registrazione.
- Solution Visual Studio (
.sln) multi-progetto: ogni progetto è un assembly separato.
- Wizard plugin: entità, messaggio, stage, mode, filtering attributes, pre/post-image con i campi.
- Wizard custom workflow activity: parametri
InArgument/OutArgument tipizzati con
ReferenceTarget per i lookup.
- Editor grafico di plugin, step e immagini: dropdown vincolati, checkbox sui campi reali
dell'entità, validazione dei vincoli Dataverse. Nessun JSON da scrivere a mano.
- Build & Deploy via Web API: build Debug o Release, diff di cosa verrà creato o aggiornato,
conferma, poi registrazione idempotente di assembly, tipi, step e immagini.
- Deregistrazione di assembly esistenti, con step e immagini in cascata.
- Solution Dataverse unmanaged: scegli o crea solution e publisher; i componenti registrati
ci vengono aggiunti automaticamente a ogni deploy.
Generazione di codice
- Datamodel early-bound dalle entità selezionate: classi
partial : Entity, costanti Fields,
enum per gli OptionSet (inclusi i MultiSelect) e target dei lookup.
- Datamodel JavaScript per le web resource, in un unico file: logical name, entity set, campi,
nomi Web API dei lookup (
_x_value) e valori degli OptionSet, con @typedef JSDoc per
l'autocompletamento e forEntity("account"). È già collegato a tutto il progetto:
- script e pagine: web resource globale
edu_/datamodel.js (namespace Edu.Model). Gli script la
hanno come dipendenza in Dataverse, che la carica con loro senza aggiungerla alle librerie
della form; le pagine la includono con un <script>;
- SPA: modulo ES
src/dataverse/model.js, importato da App.jsx.
- Unit test xUnit con harness mock leggero (nessuna dipendenza esterna) e coverage via coverlet:
un test per ogni step registrato nel manifest.
Azure Function e webhook
- Scaffold Azure Function .NET 10 isolated con trigger HTTP, Service Bus o Timer,
ServiceClient
già in DI e configurazione pronta. La connessione a Dataverse si sceglie in fase di creazione:
managed identity (nessun segreto, token via DefaultAzureCredential) oppure connection string
con client secret.
- Registrazione webhook as-code:
serviceendpoint + step che lo invoca, creati via Web API e
aggiunti alla solution attiva.
Web resource
Scaffold di tre tipi, tutti in JavaScript. Il nome in Dataverse segue il percorso nel
progetto (account/account.js → edu_/account/account.js):
- script di form, uno per entità nella sua cartella (namespace
Edu.Account con onLoad /
onSave / onChange); Aggiungi script entità ne aggiunge altri allo stesso progetto;
- pagina HTML con il suo JS e CSS in una cartella;
- SPA React (JSX + Vite):
edu_/<nome>/index.html, app.js, styles.css, con una utility per
la Web API (retrieveMultiple, FetchXML, CRUD, whoAmI).
Script e pagine si caricano così come sono, niente npm né build.
Deploy con publish automatico e aggiunta alla solution; se il manifest ha build (la SPA, o i
progetti TypeScript/Vite delle versioni precedenti) la build parte prima.
Confronto locale ↔ server con smart-match per nome.
Browser delle web resource dell'ambiente: alberatura con ricerca e filtro per solution;
scarica, modifica e ricarica anche risorse non create da te.
Power Automate
- Esporta un flusso in un file
.flow.json versionabile, modificalo e rideployalo;
attiva, disattiva ed elimina i flussi dall'editor.
Analytics
- Log unificati di plugin, custom workflow activity ed esecuzioni workflow, con ricerca,
filtri per campo (tipo, messaggio, entità, correlation id, durata minima), intervallo temporale,
toggle "solo eccezioni" e dettaglio completo di exception, stack trace e blocco di tracing.
Requisiti
- VS Code 1.90 o superiore.
- Utente Dataverse con privilegi di personalizzazione (per registrare plugin e componenti).
- Per la parte C#: .NET SDK (
dotnet nel PATH) e sn.exe per la strong-name key
(l'assembly da registrare in Dataverse deve essere firmato).
Per iniziare
- Apri la vista Dataverse nella activity bar e usa Connetti ad ambiente: inserisci l'URL
(es.
https://contoso.crm.dynamics.com), scegli la modalità di autenticazione e completa il login.
- Naviga le entità e spunta quelle e i campi che ti servono.
- Dalla vista Azioni: crea il progetto, genera plugin o datamodel, configura la solution Dataverse
e lancia Build & Deploy.
Tutti i comandi sono raggiungibili anche dalla Command Palette con il prefisso Dataverse:.
Impostazioni
| Impostazione |
Default |
Descrizione |
dataverseHelper.clientId |
public client di Power Platform CLI |
Application (client) ID per il login con browser e WAM |
dataverseHelper.tenant |
organizations |
Con organizations si usa il tenant dell'ambiente; altrimenti GUID o dominio del tenant da forzare |
dataverseHelper.apiVersion |
9.2 |
Versione della Dataverse Web API |
dataverseHelper.analyticsTop |
300 |
Numero massimo di righe caricate in Analytics |
Se il login WAM fallisce per il redirect URI, usa un'app registration del tenant con i redirect URI
ms-appx-web://Microsoft.AAD.BrokerPlugin/<client-id> (WAM) e http://localhost (browser), poi
impostala in dataverseHelper.clientId. WAM richiede che l'impostazione di VS Code
microsoft-authentication.implementation non sia msal-no-broker.
Note sul deploy degli assembly
L'identità di un plugin assembly in Dataverse è nome + public key token, non la versione:
ridistribuendo con lo stesso nome e la stessa .snk l'aggiornamento è in-place e gli step registrati
restano agganciati. Non cambiare la chiave né il nome dell'assembly tra le versioni.
Licenza
MIT.
| |