Egendefinerte virtuelle tabelldataleverandører

Ved hjelp av Microsoft Dataverse Data SDK kan .NET utviklere opprette egendefinerte virtuelle tabelldataleverandører for å integrere eksterne datakildetyper som ikke støttes av en eksisterende dataleverandør. Hver dataleverandør består av et gjenbrukbart sett med dataverse plugin-moduler som implementerer de støttede CRUD-operasjonene. For hver virtuelle tabell, også kjent som en virtuell enhet, kan utviklere opprette plugin-moduler og registrere dem som representerer hver av operasjonene Opprett, Oppdater, Hent, HentMultiple og Slett . Denne delen gir grunnleggende informasjon om dataleverandører og tilnærminger til utvikling av egendefinerte leverandører, inkludert eksempelkode.

Note

I stedet for å opprette en egendefinert datakildeleverandør, bør du vurdere å tilpasse datakilden til en eksisterende dataleverandør. Hvis du for eksempel oppretter et OData v4-grensesnitt til den eksterne datakilden, kan du få direkte tilgang til det ved hjelp av den angitte standard OData v4-dataleverandør, som støtter CRUD-operasjoner. Mekanismen for å legge til dette REST-grensesnittet varierer med den underliggende datatjenesteteknologien. Se for eksempel WCF Data Services 4.5. OData har bred bransjestøtte, med et bredt spekter av dedikerte verktøy og kompatible teknologier.

Forutsetning

Egendefinerte dataleverandører krever betydelige utviklingsressurser for å opprette og vedlikeholde. Du må ha grunnleggende kunnskap om følgende områder:

Samlingen Microsoft.Xrm.Sdk.Data.dll er tilgjengelig som en NuGet-pakke: Microsoft.CrmSdk.Data

Kategorier av leverandører

Du kan opprette to generelle kategorier av dataleverandører ved hjelp av SDK-samlinger for virtuelle tabelldata: generisk eller målrettet. Tabellen nedenfor beskriver disse tilnærmingene og samsvarer med dem med utviklingsmodellen for dataleverandøren som passer best for hver fremgangsmåte.

Kategori Utviklingsmodell Beskrivelse
Generisk «Bare metal»-leverandør Disse leverandørene oversetter fleksibelt FetchXML-spørringsuttrykk til den tilknyttede forespørselen til den eksterne datakilden, og returnerer deretter de resulterende postene. Du kan bruke en slik leverandør på nytt for alle forekomster av denne datakildetypen. Denne tilnærmingen er den mest generelle, men er mer komplisert å utvikle. Hvis skjemaet for datakilden endres, trenger du bare å tilordne de berørte virtuelle tabellene på nytt.
Målrettet LINQ-leverandør for kjent skjema En slik leverandør oversetter spørringer til det tilknyttede LINQ-kallet til en kjent, eksisterende datakildeforekomst. Datakilden må være en LINQ-leverandør som beskrevet i artikkelen Aktivere en datakilde for LINQ-spørring. Denne tilnærmingen er begrenset til en bestemt datakildeforekomst, men krever mye mindre koding. Hvis skjemaet for datakilden endres, må du oppdatere og gjenoppbygge dataleverandøren.

Standard OData v4-dataleverandør og Azure Cosmos DB-dataleverandør er eksempler på generiske leverandører.

Fremgangsmåte for å bruke en egendefinert dataleverandør

Hvis du vil opprette en løsning for virtuell tabelldataleverandør som du kan importere til dataverse programmer, gjør du følgende:

  1. Utvikle tilleggs-DLL-en for den egendefinerte dataleverandøren eller et sett med DLL-er.
  2. Registrer den egendefinerte dataleverandøren med dataverstjenesten ved hjelp av plugin-modulregistreringsverktøyet (PRT).
  3. Opprett en dataleverandørløsning.
  4. Tilpass datakildetabellen slik at den gjenspeiler datatypen eller den bestemte forekomsten.
  5. Eksporter løsningen for den egendefinerte dataleverandøren.

Hvis du vil ha mer informasjon, kan du se Eksempel: Egendefinert virtuell tabellleverandør med CRUD-operasjoner.

Plugin-modulutvikling

Fordi virtuelle tabeller støtter CRUD-operasjoner, skriver du dataleverandøren som en plugin-modul som du registrerer på hendelsene Opprett, Oppdater, Hent, HentMultiple og Slett . Hver hendelse inneholder informasjon i utførelseskonteksten som beskriver typen data som skal returneres.

Hendelse Kjøringskontekst
Gjenfinne Beskriver hvilken tabell som skal hentes, i tillegg til kolonnene og eventuelle relaterte tabeller som skal inkluderes.
Hent flere Inneholder et QueryExpression objekt som definerer spørringen. Rammeverket inneholder en QueryExpressionVisitor-klasse som er utformet for å undersøke ulike deler av spørringsuttrykkstreet.

For begge hendelsene må du:

  1. Konverter den respektive informasjonen i utførelseskonteksten til en spørring som fungerer for den eksterne datakilden.
  2. Hent dataene fra det eksterne systemet.
  3. For Hent konverterer du dataene til en Entity– ellers konverterer du dem til en for EntityCollection. Datavers returnerer dette resultatet til brukeren som kjører spørringen.

Klassene i Microsoft.Xrm.Sdk.Data navneområdet gir et rammeverk for å hjelpe deg med å tilordne datavers spørringsinformasjon fra utførelseskonteksten til en spørring i formatet som passer for den eksterne datakilden. Dette rammeverket hjelper deg med å konvertere dataene som returneres til de riktige Entity eller EntityCollection typene som forventes av Dataverse-plattformen.

Unntak for dataleverandør

Hvis koden din ikke kan gi det forventede resultatet, utløser du den riktige feilen. Navneområdet Microsoft.Xrm.Sdk.Data.Exceptions inneholder følgende unntaksklasser, avledet fra SdkExceptionBase, som du kan bruke til dette formålet:

Unntaksklasse Beskrivelse
AuthenticationException Det oppstod en feil under sikkerhetsgodkjenning til den eksterne datakildetjenesten. FOR eksempel HTTP-status 401 mottatt fra den eksterne datatjenesten. Forekommer vanligvis fordi gjeldende bruker ikke har riktige rettigheter eller tilkoblingsinformasjonen i den tilknyttede EntityDataSource er feil.
EndpointException Endepunktkonfigurasjonen i datakildetabellen er ugyldig eller endepunktet finnes ikke.
GenericDataAccessException En generell datatilgangsfeil som brukes når feilen ikke tilordnes til et mer spesifikt unntak.
InvalidMetadataException
InvalidQueryException Den angitte spørringen er ugyldig. Den inneholder for eksempel en ugyldig setningskombinasjon eller sammenligningsoperator som ikke støttes.
ObjectNotFoundException Den angitte posten i den eksterne datakilden finnes ikke.
TimeoutException Den eksterne operasjonen ble ikke fullført innen det tillatte tidspunktet. Resultatet av en HTTP-status 408 fra den eksterne datatjenesten.

Programtilleggsregistrering

I motsetning til en vanlig plugin-modul, kan du bruke plugin-modulregistreringsverktøyet (PRT) til å registrere samlingen og plugin-modulene for hver hendelse. Ikke registrer bestemte trinn. Plugin-modulen kjører i trinn 30, hovedkjernetransaksjonsfasen for operasjonen som ikke er tilgjengelig for vanlige plugin-modultrinn. I stedet for å registrere trinn, konfigurerer du dataleverandøren ved hjelp av tabellen nedenfor.

Tabell Beskrivelse
EntityDataProvider Definerer plugin-modulene som skal brukes for hver hendelse og det logiske navnet på datakilden.

Når du konfigurerer definisjonene for den virtuelle tabellen, registrerer du plugin-modulene ved hjelp av PRT og angir de riktige konfigurasjonsdataene i EntityDataProvider-tabellen . Den virtuelle tabellen begynner å svare på forespørsler.

Hvis du vil ha mer informasjon, kan du se Opprette dataleverandør og legge til plugin-moduler til leverandøren.

Feilsøking av plugin-moduler

En egendefinert leverandør av virtuelle tabeller er en type plugin-modul. Bruk informasjonen i disse artiklene til å feilsøke plugin-moduler for egendefinerte virtuelle tabellleverandører: Feilsøking av plugin-moduler og opplæring: Feilsøke et programtillegg.

Se også

Kom i gang med virtuelle tabeller
API-vurderinger av virtuelle tabeller
Eksempel: Generell plugin-modul for virtuell tabelldataleverandør