Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
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:
- Skemaet for den eksterne datakilde og de tilknyttede teknikker til dataadgang. Denne domæneviden er specifik for den eksterne datakildetype.
- Dataverse-definitionsskema: Flere oplysninger: Arbejd med tabel- og kolonnedefinitioner ved hjælp af kode.
- Dataverse event framework: Flere oplysninger: Event Framework.
- Arkitektur og udvikling af dataverse-plug-ins: Flere oplysninger: Brug plug-ins til at udvide forretningsprocesser.
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:
- Udvikl plug-in-DLL'en til den brugerdefinerede dataprovider eller sættet af DLL-filer.
- Registrer den brugerdefinerede dataprovider med din Dataverse-tjeneste ved hjælp af PLUG-in Registration Tool (PRT).
- Opret en dataproviderløsning.
- Tilpas datakildetabellen, så den afspejler din datatype eller specifikke forekomst.
- 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:
- Konvertér de respektive oplysninger i udførelseskonteksten til en forespørgsel, der fungerer for din eksterne datakilde.
- Hent dataene fra det eksterne system.
- 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