Anpassade dataprovidrar för virtuella tabeller

Med hjälp av Microsoft Dataverse Data SDK kan .NET utvecklare skapa anpassade dataproviders för virtuella tabeller för att integrera externa datakälltyper som inte stöds av en befintlig dataprovider. Varje dataprovider består av en återanvändbar uppsättning Dataverse-tillägg som implementerar de CRUD-operationer som stöds. För varje virtuell tabell, även kallad virtuell entitet, kan utvecklare skapa plugin-program och registrera dem som representerar var och en av åtgärderna Create, Update, Retrieve, RetrieveMultiple och Delete . Det här avsnittet innehåller grundläggande information om dataleverantörer och metoder för att utveckla anpassade leverantörer, inklusive exempelkod.

Anmärkning

I stället för att skapa en anpassad datakällasprovider bör du överväga att anpassa datakällan till en befintlig dataprovider. Om du till exempel skapar ett OData v4-gränssnitt till din externa datakälla kan du komma åt det direkt med hjälp av den angivna standard-OData v4-Data Provider, som stöder CRUD-åtgärder. Mekanismen för att lägga till det här REST-gränssnittet varierar med den underliggande datatjänsttekniken. Se till exempel WCF Data Services 4.5. OData har brett branschstöd med ett brett utbud av dedikerade verktyg och kompatibla tekniker.

Förutsättningar

Anpassade dataleverantörer kräver betydande utvecklingsresurser för att skapa och underhålla. Du måste ha grundläggande kunskaper om följande områden:

Sammansättningen Microsoft.Xrm.Sdk.Data.dll är tillgänglig som ett NuGet-paket: Microsoft.CrmSdk.Data

Kategorier av leverantörer

Du kan skapa två allmänna kategorier av dataprovidrar med hjälp av SDK:erna för virtuella tabelldata: generiska eller riktade. I följande tabell beskrivs dessa metoder och matchar dem med den dataleverantörsutvecklingsmodell som passar bäst för varje metod.

Kategori Utvecklingsmodell Beskrivning
Allmän ”Bare metal”-leverantör Dessa leverantörer översätter flexibelt FetchXML-frågeuttryck till den associerade begäran till den externa datakällan och returnerar sedan de resulterande posterna. Du kan återanvända en sådan leverantör för samtliga instanser av den här datakälltypen. Den här metoden är den mest allmänna men är mer komplicerad att utveckla. Om schemat för datakällan ändras behöver du bara mappa om de berörda virtuella tabellerna.
Riktad LINQ-leverantör för känt schema En sådan leverantör översätter endast frågor till det LINQ-anrop som är kopplat till en känd, befintlig datakällinstans. Datakällan måste vara en LINQ-provider enligt beskrivningen i artikeln Aktivera en datakälla för LINQ-frågor. Den här metoden är begränsad till en specifik instans av datakällan, men kräver mycket mindre kodning. Om schemat för datakällan ändras måste du uppdatera och återskapa dataprovidern.

Standard-OData v4-dataprovidern och Azure Cosmos DB-dataprovidern är exempel på generiska leverantörer.

Steg för att använda en anpassad dataleverantör

Utför följande steg för att skapa en lösning för dataprovider för virtuella tabeller som du kan importera till dina Dataverse-program:

  1. Utveckla insticksmoduls-DLL-filen för den anpassade dataleverantören eller en uppsättning DLL-filer.
  2. Registrera den anpassade dataprovidern med din Dataverse-tjänst med hjälp av plugin-registreringsverktyget (PRT).
  3. Skapa en dataleverantörslösning.
  4. Anpassa datakällans tabell så att den återspeglar din datatyp eller specifika instans.
  5. Exportera lösningen för anpassad dataleverantör.

Mer information finns i Exempel: Anpassad virtuell tabellprovider med CRUD-åtgärder.

Utveckling av plugin-program

Eftersom virtuella tabeller stöder CRUD-åtgärder skriver du dataprovidern som ett plugin-program som du registrerar i händelserna Skapa, Uppdatera, Hämta, RetrieveMultiple och Ta bort . Varje händelse innehåller information i körningskontexten som beskriver vilken typ av data som ska returneras.

Event Körningskontext
Hämta Beskriver vilken tabell som ska hämtas samt vilka kolumner och eventuella relaterade tabeller som ska inkluderas.
RetrieveMultiple Innehåller ett QueryExpression objekt som definierar frågan. Ramverket innehåller en QueryExpressionVisitor-klass som är utformad för att inspektera olika delar av frågeuttrycksträdet.

För båda händelserna måste du:

  1. Omvandla den relevanta informationen i körningskontexten till en fråga som fungerar för din externa datakälla.
  2. Hämta data från det externa systemet.
  3. För Hämta konverterar du data till en Entity; i annat fall, för HämtaFlera, konverterar du dem till en EntityCollection. Dataverse returnerar det här resultatet till användaren som kör frågan.

Klasserna i Microsoft.Xrm.Sdk.Data namnområdet tillhandahåller ett ramverk som hjälper dig att mappa Dataverse-frågeinformationen från körningskontexten till en fråga i det format som är lämpligt för din externa datakälla. Det här ramverket hjälper dig att konvertera data som returneras till lämpliga Entity eller EntityCollection typer som förväntas av Dataverse-plattformen.

Undantag för dataleverantör

Om koden inte kan ge det förväntade resultatet utlöser du det lämpliga felet. Namnområdet Microsoft.Xrm.Sdk.Data.Exceptions innehåller följande undantagsklasser, härledda från SdkExceptionBase, som du kan använda för detta ändamål:

Undantagsklass Beskrivning
AuthenticationException Ett fel uppstod under säkerhetsautentiseringen till den externa datakällans tjänst. till exempel HTTP-status 401 som tagits emot från den externa datatjänsten. Det beror vanligtvis på att den aktuella användaren inte har rätt behörigheter eller att anslutningsinformationen i den associerade EntityDataSource är felaktig.
EndpointException Slutpunktskonfigurationen i datakällans tabell är ogiltig eller så finns slutpunkten inte.
GenericDataAccessException Ett allmänt dataåtkomstfel som används när felet inte mappas till ett mer specifikt undantag.
InvalidMetadataException
InvalidQueryException Den angivna frågan är ogiltig. Den innehåller till exempel en ogiltig satskombination eller jämförelseoperator som inte stöds.
ObjectNotFoundException Den angivna posten i den externa datakällan finns inte.
TimeoutException Den externa åtgärden slutfördes inte inom den tillåtna tiden. Till exempel resultatet av http-status 408 från den externa datatjänsten.

Plugin-registrering

Till skillnad från ett vanligt plugin-program använder du Plugin-registreringsverktyget (PRT) för att registrera sammansättningen och plugin-programmen för varje händelse. Registrera inte specifika steg. Plugin-programmet körs i steg 30, den viktigaste transaktionsfasen för åtgärden som inte är tillgänglig för vanliga plugin-steg. I stället för att registrera steg konfigurerar du dataprovidern med hjälp av följande tabell.

Tabell Beskrivning
EntityDataProvider (på engelska) Definierar de plugin-program som ska användas för varje händelse och datakällans logiska namn.

När du konfigurerar definitionerna för den virtuella tabellen registrerar du dina plugin-program med hjälp av PRT och anger rätt konfigurationsdata i tabellen EntityDataProvider . Den virtuella tabellen börjar svara på begäranden.

Mer information finns i Skapa dataprovider och lägga till plugin-program till providern.

Felsökning av plugin-program

En anpassad virtuell tabellprovider är en typ av plugin-program. Använd informationen i dessa artiklar för att felsöka plugin-program för anpassade leverantörer av virtuella tabeller: Felsöka plugin-program och Självstudie: Felsöka ett plugin-program.

Se även

Kom i gång med virtuell tabell
API-överväganden för virtuella tabeller
Exempel: Generisk dataprovider-plug-in för virtuell tabell