Brugerdefinerede virtuelle tabeldataprovidere

Ved hjælp af Microsoft Dataverse Data SDK kan .NET udviklere oprette brugerdefinerede udbydere af virtuelle tabeldata for at hjælpe med at integrere eksterne datakildetyper, der ikke understøttes af en eksisterende dataprovider. Hver dataprovider består af et sæt dataverse-plug-ins, der kan genbruges, og som implementerer de understøttede CRUD-handlinger. For hver virtuel tabel, også kaldet et virtuelt objekt, kan udviklere oprette plug-ins og registrere dem, der repræsenterer hver af handlingerne Opret, Opdater, Hent, HentMultiple og Slet . Dette afsnit indeholder grundlæggende oplysninger om dataprovidere og metoder til udvikling af brugerdefinerede udbydere, herunder eksempelkode.

Notat

I stedet for at oprette en brugerdefineret datakildeudbyder kan du overveje at tilpasse datakilden til en eksisterende dataprovider. Hvis du f.eks. opretter en OData v4-grænseflade til din eksterne datakilde, kan du få direkte adgang til den ved hjælp af den angivne standard OData v4-dataprovider, som understøtter CRUD-handlinger. Mekanismen til tilføjelse af denne REST-grænseflade varierer med den underliggende datatjenesteteknologi. Du kan f.eks. se WCF Data Services 4.5. OData har bred branchesupport med en lang række dedikerede værktøjer og kompatible teknologier.

Forudsætninger

Brugerdefinerede dataprovidere kræver betydelige udviklingsressourcer for at oprette og vedligeholde. Du skal have grundlæggende viden om følgende områder:

Assemblyen Microsoft.Xrm.Sdk.Data.dll er tilgængelig som en NuGet-pakke: Microsoft.CrmSdk.Data

Kategorier af udbydere

Du kan oprette to generelle kategorier af dataprovidere ved hjælp af SDK-assemblies for virtuelle tabeldata: generiske eller målrettede. I følgende tabel beskrives disse tilgange og svarer til den model for dataproviderudvikling, der passer bedst til hver tilgang.

Kategori Udviklingsmodel Beskrivelse
Generisk Udbyder af "bare metal" Disse providere oversætter fleksibelt FetchXML-forespørgselsudtryk til den tilknyttede anmodning til den eksterne datakilde og returnerer derefter de resulterende poster. Du kan genbruge en sådan provider til alle forekomster af denne datakildetype. Denne fremgangsmåde er den mest generelle, men er mere kompliceret at udvikle. Hvis skemaet for datakilden ændres, skal du kun tilknytte de berørte virtuelle tabeller igen.
Målrettet LINQ-provider for kendt skema En sådan provider oversætter snævert forespørgsler til det tilknyttede LINQ-kald til en kendt, eksisterende datakildeforekomst. Datakilden skal være en LINQ-provider som beskrevet i artiklen Aktivering af en datakilde til LINQ-forespørgsel. Denne fremgangsmåde er begrænset til en bestemt datakildeforekomst, men kræver meget mindre kodning. Hvis skemaet for datakilden ændres, skal du opdatere og genopbygge dataprovideren.

OData v4-standarddataprovideren og Azure Cosmos DB-dataprovideren er eksempler på generiske udbydere.

Trin til at bruge en brugerdefineret dataprovider

Hvis du vil oprette en løsning til en virtuel tabeldataprovider, som du kan importere til dine Dataverse-programmer, skal du udføre følgende trin:

  1. Udvikl plug-in-DLL'en til den brugerdefinerede dataprovider eller sættet af DLL-filer.
  2. Registrer den brugerdefinerede dataprovider med din Dataverse-tjeneste ved hjælp af PLUG-in Registration Tool (PRT).
  3. Opret en dataproviderløsning.
  4. Tilpas datakildetabellen, så den afspejler din datatype eller specifikke forekomst.
  5. Eksportér løsningen for den brugerdefinerede dataprovider.

Du kan få flere oplysninger under Eksempel: Brugerdefineret virtuel tabelprovider med CRUD-handlinger.

udvikling af plug-ins

Da virtuelle tabeller understøtter CRUD-handlinger, skal du skrive dataprovideren som en plug-in, som du registrerer i hændelserne Create, Update, Retrieve, RetrieveMultiple og Delete . Hver hændelse indeholder oplysninger i udførelseskonteksten, der beskriver den type data, der skal returneres.

Hændelse Udførelseskontekst
Hente Beskriver, hvilken tabel der skal hentes, samt de kolonner og eventuelle relaterede tabeller, der skal medtages.
Hent flere Indeholder et QueryExpression objekt, der definerer forespørgslen. Strukturen indeholder en QueryExpressionVisitor-klasse , der er designet til at undersøge forskellige dele af forespørgselsudtrykstræet.

For begge hændelser skal du:

  1. Konvertér de respektive oplysninger i udførelseskonteksten til en forespørgsel, der fungerer for din eksterne datakilde.
  2. Hent dataene fra det eksterne system.
  3. Konvertér dataene til en Entityfor HentMultiple, ellers skal du konvertere dem til en EntityCollection. Dataverse returnerer dette resultat til den bruger, der udfører forespørgslen.

Klasserne Microsoft.Xrm.Sdk.Data i navneområdet indeholder en struktur, der kan hjælpe med at knytte dataverse-forespørgselsoplysningerne fra udførelseskonteksten til en forespørgsel i det format, der passer til din eksterne datakilde. Denne struktur hjælper dig med at konvertere de data, der returneres, til de relevante Entity typer EntityCollection , der forventes af Dataverse-platformen.

Undtagelser fra dataprovider

Hvis din kode ikke kan opnå det forventede resultat, skal du udløse den relevante fejl. Navneområdet Microsoft.Xrm.Sdk.Data.Exceptions indeholder følgende undtagelsesklasser, der er afledt af SdkExceptionBase, som du kan bruge til dette formål:

Undtagelsesklasse Beskrivelse
AuthenticationException Der opstod en fejl under sikkerhedsgodkendelse til den eksterne datakildetjeneste. HTTP-status 401 modtaget fra den eksterne datatjeneste. Opstår typisk, fordi den aktuelle bruger ikke har de korrekte rettigheder, eller at forbindelsesoplysningerne i den tilknyttede EntityDataSource er forkerte.
EndpointException Konfigurationen af slutpunktet i datakildetabellen er ugyldig, eller slutpunktet findes ikke.
GenericDataAccessException En generel dataadgangsfejl, der bruges, når fejlen ikke knyttes til en mere specifik undtagelse.
InvalidMetadataException
InvalidQueryException Den angivne forespørgsel er ugyldig. Den indeholder f.eks. en ugyldig delsætningskombination eller en sammenligningsoperator, der ikke understøttes.
ObjectNotFoundException Den angivne post i den eksterne datakilde findes ikke.
TimeoutException Den eksterne handling blev ikke fuldført inden for den tilladte tid. f.eks. resultatet af en HTTP-status 408 fra den eksterne datatjeneste.

Registrering af plug-in

I modsætning til en almindelig plug-in skal du bruge Plug-in Registration Tool (PRT) til at registrere assemblyen og plug-ins for hver hændelse. Registrer ikke bestemte trin. Din plug-in kører i fase 30, som er den primære transaktionsfase for den handling, der ikke er tilgængelig for almindelige plug-in-trin. I stedet for at registrere trin skal du konfigurere din dataprovider ved hjælp af følgende tabel.

Tabel Beskrivelse
EntityDataProvider Definerer de plug-ins, der skal bruges til hver hændelse, og det logiske navn på datakilden.

Når du konfigurerer definitionerne for den virtuelle tabel, skal du registrere dine plug-ins ved hjælp af pullanmodningen og angive de korrekte konfigurationsdata i tabellen EntityDataProvider . Den virtuelle tabel begynder at svare på anmodninger.

Du kan få flere oplysninger under Oprettelse af dataprovider og tilføjelse af plug-ins til udbyderen.

Fejlfinding af plug-ins

En brugerdefineret virtuel tabeludbyder er en type plug-in. Brug oplysningerne i disse artikler til at foretage fejlfinding af plug-ins for udbydere af brugerdefinerede virtuelle tabeller: Fejlfinding af plug-ins og selvstudium: Fejlfinding af en plug-in.

Se også

Introduktion til virtuelle tabeller
API-overvejelser i forbindelse med virtuelle tabeller
Eksempel: Plug-in til generisk virtuel tabeldataprovider