Provider di dati personalizzati di tabelle virtuali

Usando Microsoft Dataverse Data SDK, .NET gli sviluppatori possono creare provider di dati di tabelle virtuali personalizzati per integrare tipi di origine dati esterni non supportati da un provider di dati esistente. Ogni provider di dati è costituito da un set riutilizzabile di plug-in Dataverse che implementano le operazioni CRUD supportate. Per ogni tabella virtuale, nota anche come entità virtuale, gli sviluppatori possono creare plug-in e registrarli che rappresentano ognuna delle operazioni Create, Update, Retrieve, RetrieveMultiple ed Delete . In questa sezione vengono fornite informazioni fondamentali sui provider di dati e sugli approcci allo sviluppo di provider personalizzati, incluso il codice di esempio.

Annotazioni

Anziché creare un provider di origini dati personalizzato, è consigliabile adattare l'origine dati a un provider di dati esistente. Ad esempio, se si crea un'interfaccia OData v4 all'origine dati esterna, è possibile accedervi direttamente usando il provider di dati OData v4 standard fornito, che supporta le operazioni CRUD. Il meccanismo per l'aggiunta di questa interfaccia REST varia a seconda della tecnologia del servizio dati sottostante. Ad esempio, vedere WCF Data Services 4.5. OData offre un ampio supporto per il settore, con un'ampia gamma di strumenti dedicati e tecnologie compatibili.

Prerequisiti

I provider di dati personalizzati richiedono risorse di sviluppo sostanziali per creare e gestire. Devi avere una conoscenza fondamentale delle aree seguenti:

L'assembly Microsoft.Xrm.Sdk.Data.dll è disponibile come pacchetto NuGet: Microsoft.CrmSdk.Data

Categorie di provider

È possibile creare due categorie generali di provider di dati usando gli assembly dell'SDK per i dati della tabella virtuale: generico o di destinazione. La tabella seguente descrive questi approcci e li corrisponde al modello di sviluppo del provider di dati più adatto per ogni approccio.

Categoria Modello di sviluppo Descrizione
Elemento generico Provider "Bare metal" Questi provider convertono in modo flessibile le espressioni di query FetchXML nella richiesta associata all'origine dati esterna e quindi restituiscono i record risultanti. È possibile riutilizzare tale provider per tutte le istanze di questo tipo di origine dati. Questo approccio è il più generale, ma è più complicato da sviluppare. Se lo schema dell'origine dati cambia, è sufficiente eseguire il mapping delle tabelle virtuali interessate.
Rivolto a Provider LINQ per lo schema noto Tale provider converte in modo ristretto le query nella chiamata LINQ associata a un'istanza di origine dati nota esistente. L'origine dati deve essere un provider LINQ, come descritto nell'articolo Abilitazione di un'origine dati per l'esecuzione di query LINQ. Questo approccio è limitato a un'istanza specifica dell'origine dati, ma richiede molto meno codice. Se lo schema dell'origine dati cambia, è necessario aggiornare e ricompilare il provider di dati.

Il provider di dati OData v4 standard e il provider di dati di Azure Cosmos DB sono esempi di provider generici.

Procedura per utilizzare un provider di dati personalizzato

Per creare una soluzione del provider di dati di tabella virtuale che è possibile importare nelle applicazioni Dataverse, completare la procedura seguente:

  1. Sviluppare la DLL o il set di DLL del provider di dati personalizzato.
  2. Registra il provider di dati personalizzato nel servizio Dataverse utilizzando lo strumento di registrazione dei plug-in (PRT).
  3. Crea una soluzione del provider di dati.
  4. Personalizzare la tabella dell'origine dati in modo da riflettere il tipo di dati o un'istanza specifica.
  5. Esporta la soluzione del provider di dati personalizzata.

Per altre informazioni, vedere Esempio: Provider di tabelle virtuali personalizzato con operazioni CRUD.

Sviluppo di plug-in

Poiché le tabelle virtuali supportano operazioni CRUD, scrivere il provider di dati come plug-in registrato negli eventi Create, Update, Retrieve, RetrieveMultiple e Delete . Ogni evento include informazioni nel contesto di esecuzione che descrive il tipo di dati da restituire.

Event Contesto di esecuzione
Recuperare Descrive la tabella da recuperare, nonché le colonne e le tabelle correlate da includere.
RetrieveMultiple Contiene un QueryExpression oggetto che definisce la query. Il framework contiene una classe QueryExpressionVisitor progettata per esaminare parti diverse dell'albero delle espressioni di query.

Per entrambi gli eventi, è necessario:

  1. Converti le informazioni pertinenti presenti nel contesto di esecuzione in una query compatibile con la tua origine dati esterna.
  2. Recupera i dati dal sistema esterno.
  3. Per Recupera, convertire i dati in un Entityoggetto ; in caso contrario, per RetrieveMultiple, convertirli in un oggetto EntityCollection. Dataverse restituisce questo risultato all'utente che esegue la query.

Le classi nel namespace Microsoft.Xrm.Sdk.Data forniscono un framework per agevolare il mapping delle informazioni sulle query di Dataverse dall'ambito di esecuzione in una query nel formato appropriato per l'origine dati esterna. Questo framework consente di convertire i dati restituiti nei tipi appropriati Entity o EntityCollection previsti dalla piattaforma Dataverse.

Eccezioni del provider di dati

Se il codice non riesce a ottenere il risultato previsto, generare l'errore appropriato. Lo Microsoft.Xrm.Sdk.Data.Exceptions spazio dei nomi contiene le classi di eccezione seguenti, derivate da SdkExceptionBase, che è possibile usare a questo scopo:

Classe di eccezione Descrizione
AuthenticationException Si è verificato un errore durante l'autenticazione di sicurezza al servizio origine dati esterno; ad esempio, lo stato HTTP 401 ricevuto dal servizio dati esterno. In genere si verifica perché l'utente corrente non dispone di privilegi appropriati o le informazioni di connessione nell'EntityDataSource associato non sono corrette.
EndpointException La configurazione dell'endpoint nella tabella dell'origine dati non è valida o l'endpoint non esiste.
GenericDataAccessException Errore generale di accesso ai dati, utilizzato quando l'errore non corrisponde a un'eccezione più specifica.
InvalidMetadataException
InvalidQueryException La query specificata non è valida; contiene, ad esempio, una combinazione di clausole non valida o un operatore di confronto non supportato.
ObjectNotFoundException Il record specificato nell'origine dati esterna non esiste.
TimeoutException L'operazione esterna non è stata completata entro il tempo consentito; Ad esempio, il risultato di uno stato HTTP 408 dal servizio dati esterno.

Registrazione Plug-in

Diversamente da un normale plug-in, utilizzare il Plug-in Registration Tool (PRT) per registrare l'assembly e i plug-in per ciascun evento. Non registrare passaggi specifici. Il plug-in viene eseguito nella fase 30, la fase principale della transazione principale per l'operazione che non è disponibile per i normali passaggi del plug-in. Anziché registrare i passaggi, configurare il provider di dati usando la tabella seguente.

Tabella Descrizione
EntityDataProvider Definisce i plug-in da usare per ogni evento e il nome logico dell'origine dati.

Quando configuri le definizioni per la tua tabella virtuale, registra i tuoi plug-in usando PRT e imposta i dati di configurazione corretti nella tabella EntityDataProvider. La tabella virtuale inizia a rispondere alle richieste.

Per altre informazioni, vedere Creazione del provider di dati e aggiunta di plug-in al provider.

Debug di plug-in

Un provider di tabelle virtuali personalizzato è un tipo di plug-in. Usare le informazioni contenute in questi articoli per eseguire il debug di plug-in per provider di tabelle virtuali personalizzati: Plug-in di debug e Esercitazione: Eseguire il debug di un plug-in.

Vedere anche

Introduzione alle tabelle virtuali
Considerazioni sulle API delle tabelle virtuali
Esempio: Plug-in generico del provider di dati per tabelle virtuali