Del via


Aktiver virtuelle tabeller for å støtte dataverse hendelser

Du kan tillate virtuelle enheter å delta i hendelser i Dataverse sitt asynkrone hendelserammeverk og i PowerAutomate Dataverse-kobler Når en rad legges til, endres eller slettes-utløseren. Denne funksjonen er aktivert som en del av dataverse forretningshendelser. Mer informasjon: Microsoft Dataverse business events

Uten konfigurasjonen som er beskrevet i denne artikkelen, deltar de fleste virtuelle enheter ikke i Event Framework-datasamlebåndet som andre enheter. Siden virtuelle enheter ikke deltar i hendelsesforløpet, kan du ikke registrere plugin-modultrinn mot opprettings-, oppdaterings- og slettingshendelser (CUD) som forekommer, og selv om CUD-hendelser vises for disse enhetene i Power Automate Dataverse-koblingen, oppstår det en feil når folk prøver å lagre en flyt som bruker dem.

Dette er fordi virtuelle enheter representerer data som er lagret i en ekstern kilde. Datavers har tilgang til denne datakilden som en klient, men andre systemer kan oppdatere disse dataene når som helst uten å sende gjennom datavershendelsesrammeverket.

Det finnes to trinn for å aktivere dette:

  1. Konfigurere data i en tabell kalt Metadata for virtuell enhet. Når data i denne tabellen er konfigurert til å aktivere dem, gir et sett med nye API-er muligheten for det eksterne systemet til å varsle dataverse når CUD-hendelser forekommer.

    Når det er en rad for metadata for virtuell enhet som er knyttet til EntityMetadata. Metadataid for en virtuell tabell kan følgende tre innstillinger kontrollere om en ekstern kilde kan varsle den virtuelle tabellen.

    Når individuelt aktivert ved hjelp av egenskapene Metadata for virtuell enhet IsOnExternalCreatedEnabled, IsOnExternalDeletedEnabledog IsOnExternalUpdatedEnabled boolske egenskaper, blir følgende bundne handlinger tilgjengelige for å bli kalt av eksterne tjenester.

    Handling/melding Beskrivelse
    OnExternalCreated Inneholder data om en post som ble opprettet i et eksternt system som vises som en virtuell tabell i Dataverse.
    OnExternalUpdated Inneholder data om en post som ble oppdatert i et eksternt system som vises som en virtuell tabell i Dataverse.
    OnExternalDeleted Inneholder data om en post som ble slettet i et eksternt system som vises som en virtuell tabell i Dataverse.
  2. Det eksterne systemet som styrer dataene, må sende en godkjent HTTP-forespørsel til Dataverse ved hjelp av API-ene som har data i metadata for virtuell enhet. En godkjent tjenestekontohaver utfører vanligvis dette kallet. Mer informasjon: Bygge webprogrammer ved hjelp av server-til-server (S2S)-godkjenning

    Men alle programmer eller brukere som kan utføre et kall til Dataverse, kan sende http-forespørselen som kreves for å varsle Dataverse om at hendelsen oppstod.

Note

Virtuelle enheter som bruker OData-leverandøren og ikke-relasjonelle datokilder, kan tillate bestemte registreringer av plugin-moduler, for eksempel bare på hendelser utenfor transaksjonen. Men disse hendelsene er ikke tilgjengelige for bruk med Power Automate Dataverse-koblingen. Det er ingen endring i denne virkemåten. Men for mer pålitelig hendelsesvarsling anbefales fremgangsmåten som er beskrevet i dette emnet.

Slik aktiverer du varslings-API-er for virtuelle tabeller

Du kan aktivere varslings-API-er ved å konfigurere dem manuelt i oppretterportalen (make.powerapps.com/) eller bruke kode.

Aktiver manuelt ved hjelp av oppretterportalen

La oss si at vi har en virtuell persontabell med disse egenskapene. Name-egenskapen er new_People.

Egenskapene for den virtuelle tabellen new_people.

  1. Velg +Ny i løsningen i Power Apps (make.powerapps.com), og velg deretter metadata for virtuell enhet.

    Legg til en ny virtualentitymetadata i løsningen.

    Dette åpner følgende skjema:

    virtualentitymetadata-skjema.

  2. Fyll ut skjemaet, og angi enhets-ID-verdien for utvidelse til navnet på den virtuelle tabellen. Du er ikke nødvendig for å aktivere alle tre meldingene. Du kan angi én eller flere av dem og komme tilbake for å aktivere resten senere.

Når du har aktivert disse meldingene, kan du observere og bekrefte hva som ble lagt til ved hjelp av trinnene i Vis meldingene som er opprettet for å støtte den virtuelle tabellen.

Angi forvaltede egenskaper ved hjelp av oppretterportalen

Hvis du ikke vil at personer som installerer den administrerte løsningen, skal endre virkemåten for metadata for virtuell enhet, bør du angi den forvaltede egenskapen for å hindre at den bruker følgende fremgangsmåte.

  1. Velg metadataene for virtuell enhet i løsningen, og velg ellipsen (...), og velg deretter Forvaltede egenskaper.

    Gå til forvaltede egenskaper.

  2. Fjern merket for Tillat tilpassinger i ruten Forvaltede egenskaper, og trykk ferdig.

    Fjern merket for Tillat tilpasninger.

    Denne innstillingen gjør ingenting før metadataposten for virtuell enhet er inkludert i en administrert løsning.

Aktiver med kode

Det kan være lurt å automatisere opprettingen av metadata for virtuell enhet for de virtuelle enhetene dine.

Tabellen VirtualEntityMetadata har følgende kolonner som du kan angi:

Navn på skjema
Logisk navn
Visningsnavn Type Beskrivelse
ExtensionOfRecordId
extensionofrecordid
Virtuell enhet Lookup Navnet på den virtuelle enheten som disse innstillingene er for.
IsCustomizable
iscustomiable
Kan tilpasses ManagedProperty Kontrollerer om metadataene for den virtuelle enheten kan endres eller slettes når de inkluderes i en administrert løsning.
IsOnExternalCreatedEnabled
isonexternalcreatedenabled
Aktiver ekstern opprettingsmelding boolsk Aktiverer en melding for å sende informasjon om nye poster som er opprettet i den eksterne datakilden.
IsOnExternalDeletedEnabled
isonexternaldeletedenabled
Aktiver ekstern slettemelding boolsk Aktiverer en melding om å sende informasjon om slettede poster i den eksterne datakilden.
IsOnExternalUpdatedEnabled
isonexternalupdatedenabled
Aktiver ekstern oppdateringsmelding boolsk Aktiverer en melding for å sende informasjon om oppdaterte poster i den eksterne datakilden.
Name
name
Navn Streng Navnet på innstillingene.
VirtualEntityMetadataId
virtualentitymetadataid
VirtualEntityMetadata Uniqueidentifier Unik identifikator for enhetsforekomster

Når du oppretter disse typene løsningskomponenter, anbefaler vi at du angir at den forvaltede egenskapen IsCustomizable skal være false med mindre du vil tillate at personer som installerer den administrerte løsningen, kan endre disse innstillingene.

Vi anbefaler også at du legger til virtual entity Metadata**-posten i en bestemt løsning når du oppretter den. I begge eksemplene nedenfor ser du hvordan det Solution.UniqueName sendes med forespørselen som oppretter posten.

Bruker Web-API

Når du bruker web-API-en, er den første oppgaven å hente den MetadataId virtuelle tabellen. Følgende eksempel returnerer MetadataId for en virtuell enhet med navnet new_people.

Anmodning:

GET [Organization Uri]/api/data/v9.1/EntityDefinitions(LogicalName='new_people')?$select=MetadataId HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
Authorization: Bearer [REDACTED]

Svar:

HTTP/1.1 200 OK

{
    "@odata.context": "[Organization Uri]/api/data/v9.1/$metadata#EntityDefinitions(MetadataId)/$entity",
    "MetadataId": "b198e6f3-3dd6-4c0b-9570-702f0c10d577"
}

Deretter oppretter du metadataposten for den virtuelle enheten mens du knytter den Entity til enhetstypen ved hjelp av den MetadataId som ble hentet i det første trinnet.

Legg merke til bruken av toppteksten MSCRM.SolutionUniqueName som er satt til Solution.UniqueName verdien. Dette legger til metadataposten for den virtuelle enheten i løsningen etter hvert som den opprettes. Mer informasjon: HTTP-overskrifter

Anmodning:

POST [Organization Uri]/api/data/v9.1/virtualentitymetadatas HTTP/1.1
MSCRM.SolutionUniqueName: YourSolutionUniqueName
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
Authorization: Bearer [REDACTED]
Content-Type: application/json; charset=utf-8

{
  "@odata.type": "Microsoft.Dynamics.CRM.virtualentitymetadata",
  "name": "Person Virtual Metadata",
  "iscustomizable": {
    "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty",
    "Value": false,
    "CanBeChanged": false
  },
  "isonexternalcreatedenabled": true,
  "isonexternaldeletedenabled": true,
  "isonexternalupdatedenabled": true,
  "extensionofrecordid@odata.bind": "entities(b198e6f3-3dd6-4c0b-9570-702f0c10d577)"
}

Svar:

HTTP/1.1 204 No Content

Bruke SDK for .NET

Uansett om du bruker tidlige eller sene bundne typer, er den første oppgaven å hente MetadataId tabellen, som hentes på samme måte for begge tilfellene. I dette tilfellet for en virtuell tabell med navnet new_peopleCrmServiceClient. ServiceClient Klassen kan også brukes.

var service = new CrmServiceClient(conn);
// var service = new ServiceClient(conn);

var retrieveEntityRequest = new RetrieveEntityRequest
{
    LogicalName = "new_people",
    EntityFilters = EntityFilters.Entity
};

var retrieveEntityResponse = (RetrieveEntityResponse)service.Execute(retrieveEntityRequest);

var entityId = retrieveEntityResponse.EntityMetadata.MetadataId;

Bruk av tidlig bundne typer

Med tidlige typer kan du bruke VirtualEntityMetadata klassen som genereres ved hjelp av kommandoen Power Platform CLI pac modelbuilder build. Mer informasjon: Sen-bundet og tidlig bundet programmering ved hjelp av SDK for .NET

var virtualEntityMetadata = new VirtualEntityMetadata
{
    Name = "Person Virtual Metadata",
    ExtensionOfRecordId = new EntityReference("entity", entityId.Value),
    IsCustomizable = new BooleanManagedProperty(false),
    IsOnExternalCreatedEnabled = true,
    IsOnExternalDeletedEnabled = true,
    IsOnExternalUpdatedEnabled = true,
};

Bruke senbundet typer

Det finnes to måter å opprette en instans av metadataforekomsten for den virtuelle enheten ved bruk av senbundet typer; enten alternativ er tilsvarende:

var virtualEntityMetadata = new Entity("virtualentitymetadata");
virtualEntityMetadata["name"] = "Person Virtual Metadata";
virtualEntityMetadata["extensionofrecordid"] = new EntityReference("entity", entityId.Value);
virtualEntityMetadata["iscustomizable"] = new BooleanManagedProperty(false);
virtualEntityMetadata["isonexternalcreatedenabled"] = true;
virtualEntityMetadata["isonexternaldeletedenabled"] = true;
virtualEntityMetadata["isonexternalupdatedenabled"] = true;

Eller:

  var virtualEntityMetadata = new Entity("virtualentitymetadata") { 
      Attributes = new AttributeCollection {
          { "name","Person Virtual Metadata" },
          { "extensionofrecordid", new EntityReference("entity", entityId.Value)},
          { "iscustomizable",new BooleanManagedProperty(false)},
          { "isonexternalcreatedenabled",true },
          { "isonexternaldeletedenabled",true },
          { "isonexternalupdatedenabled",true}
      }            
  };

Opprettelse av oppføringen

Når du oppretter posten, bruker du CreateRequest-klassen i stedet for IOrganizationService.Create-metoden , slik at du kan inkludere den SolutionUniqueName valgfrie parameteren som legger til posten i løsningen når du oppretter den. Mer informasjon: Sende valgfrie parametere med en forespørsel

var createRequest = new CreateRequest
{
    Target = virtualEntityMetadata
};
createRequest["SolutionUniqueName"] = "YourSolutionUniqueName";

service.Execute(createRequest);

Vise meldingene som er opprettet for å støtte den virtuelle tabellen

En enkel måte å bekrefte at meldingene du aktiverte finnes på, er å undersøke web-API-$metadata tjenestedokumentet.

Du kan gjøre dette i nettleseren. Bruk nettadressen for organisasjonen til å skrive inn følgende i nettleseren:

[Organization Uri]/api/data/v9.2/$metadata

Dette er et stort XML-dokument, men du kan søke etter ogOnExternalCreated finne definisjonen av handlingen, i dette tilfellet for den new_people virtuelle tabellen.

<Action Name="OnExternalCreated" IsBound="true">
 <Parameter Name="entityset" Type="Collection(mscrm.new_people)" Nullable="false"/>
 <Parameter Name="Target" Type="mscrm.crmbaseentity" Nullable="false"/>
</Action>

Du kan se at dette er en OData-handling som er bundet til new_people enhetssettet. Du finner lignende handlinger for OnExternalDeleted, og OnExternalUpdated:

<Action Name="OnExternalDeleted" IsBound="true">
 <Parameter Name="entityset" Type="Collection(mscrm.new_people)" Nullable="false"/>
<Parameter Name="Target" Type="mscrm.crmbaseentity" Nullable="false"/>
</Action>
<Action Name="OnExternalUpdated" IsBound="true">
 <Parameter Name="entityset" Type="Collection(mscrm.new_people)" Nullable="false"/>
 <Parameter Name="Target" Type="mscrm.crmbaseentity" Nullable="false"/>
</Action>

Vise meldingene ved hjelp av registreringsverktøyet for programtillegg

Når du registrerer et plugin-modultrinn ved hjelp av registreringsverktøyet for programtillegg, finner du disse meldingene.

Registrerer et plugin-trinn på OnExternalCreated-meldingen for new_people-enheten.

Bruke meldingene til å varsle dataverse om endringer

Hvis du vil varsle dataverse om endringer, må du kalle riktig API. Du kan bruke Dataverse Web API eller SDK for .NET.

Før du bruker disse meldingene, kan det være lurt å bruke fremgangsmåten som beskrives i Vis meldingene som er opprettet for å støtte den virtuelle tabellen , for å bekrefte at de finnes.

Bruke web-API-en

Fordi disse API-ene er OData-handlinger som er bundet til en tabellsamling, kan du følge mønsteret som er dokumentert her: Bruk web-API-handlinger> Bundet> handlinger bundet til en tabellsamling. Nedenfor finner du noen eksempler som viser bruken av den new_people virtuelle tabellen.

Hvis ID-verdien er kjent av anropssystemet, bør den alltid inkluderes. Enhetsforekomsten som sendes ved hjelp av målparameteren, må ha riktig merknadsegenskap @odata.type angitt for å definere enhetstypen. Hvis dette ikke er inkludert, returneres en feil.

Disse anropene skal alltid returneres 204: No Content.

OnExternalCreated

For denne handlingen skal verdiene inneholde alle egenskapene som ble angitt da posten ble opprettet.

POST [Organization Uri]/api/data/v9.1/new_peoples/Microsoft.Dynamics.CRM.OnExternalCreated HTTP/1.1
Authorization: Bearer [REDACTED]
Content-Type: application/json
 
{
    "Target": {
        "@odata.type": "Microsoft.Dynamics.CRM.new_people",
        "new_name": "John",
        "new_age": 23,
        "new_lastname": "Doe",
        "new_peopleid": "f6f5896b-bf08-455c-9bd3-526760cb3685"
    }
}

OnExternalUpdated

For denne handlingen skal bare de egenskapene som er endret inkluderes.

POST [Organization Uri]/api/data/v9.1/new_peoples/Microsoft.Dynamics.CRM.OnExternalUpdated HTTP/1.1
Authorization: Bearer [REDACTED]
Content-Type: application/json
 
{
    "Target": {
        "@odata.type": "Microsoft.Dynamics.CRM.new_people",
        "new_age": 24,
        "new_peopleid": "f6f5896b-bf08-455c-9bd3-526760cb3685"
        }
}

OnExternalDeleted

For denne handlingen er bare den unike identifikatoren for posten nødvendig.

POST [Organization Uri]/api/data/v9.1/new_peoples/Microsoft.Dynamics.CRM.OnExternalDeleted HTTP/1.1
Authorization: Bearer [REDACTED]
Content-Type: application/json
{
    "Target": {
        "@odata.type": "Microsoft.Dynamics.CRM.new_people",
        "new_peopleid": "f6f5896b-bf08-455c-9bd3-526760cb3685"
        }
}

Bruken av SDK for .NET

Når du bruker SDK for .NET, kan du bruke enten tidlige eller sene bindingstyper. Mer informasjon: Sen-bundet og tidlig bundet programmering ved hjelp av SDK for .NET

Tidlig bundne typer

Dette eksemplet bruker CrmServiceClient med tidlige typer, men ServiceClient kan også brukes.

var service = new CrmServiceClient(conn);
// var service = new ServiceClient(conn);

//OnExternalCreated
var createPerson = new new_people
{
    new_peopleId = new Guid("f6f5896b-bf08-455c-9bd3-526760cb3685"),
    new_name = "John",
    new_Age = 23,
    new_LastName = "Doe"
};


var createRequest = new OnExternalCreatedRequest
{
    Target = createPerson
};

service.Execute(createRequest);

//OnExternalUpdated
var updatePerson = new new_people
{
    new_peopleId = new Guid("f6f5896b-bf08-455c-9bd3-526760cb3685"),
    new_Age = 24
};


var updateRequest = new OnExternalUpdatedRequest
{
    Target = updatePerson
};

service.Execute(updateRequest);

//OnExternalDeleted
var deletePerson = new new_people
{
    new_peopleId = new Guid("f6f5896b-bf08-455c-9bd3-526760cb3685")
};


var deleteRequest = new OnExternalDeletedRequest
{
    Target = deletePerson
};

Senbundet typer

Dette eksemplet bruker CrmServiceClient med sene typer, men ServiceClient kan også brukes.

var service = new CrmServiceClient(conn);
// var service = new ServiceClient(conn);

  //OnExternalCreated
  Entity createPerson = new Entity("new_people");
  createPerson["new_peopleid"] = new Guid("f6f5896b-bf08-455c-9bd3-526760cb3685");
  createPerson["new_name"] = "John";
  createPerson["new_age"] = 23;
  createPerson["new_lastname"] = "Doe";

  
  var orgCreateRequest = new OrganizationRequest("OnExternalCreated");
  orgCreateRequest["Target"] = createPerson;

  service.Execute(orgCreateRequest);

  //OnExternalUpdated
  Entity updatePerson = new Entity("new_people");
  updatePerson["new_peopleid"] = new Guid("f6f5896b-bf08-455c-9bd3-526760cb3685");
  updatePerson["new_age"] = 24;

  
  var orgUpdateRequest = new OrganizationRequest("OnExternalUpdated");
  orgUpdateRequest["Target"] = updatePerson;

  service.Execute(orgUpdateRequest);

  //OnExternalDeleted
  Entity deletePerson = new Entity("new_people");
  deletePerson["new_peopleid"] = new Guid("f6f5896b-bf08-455c-9bd3-526760cb3685");

  
  var orgDeleteRequest = new OrganizationRequest("OnExternalDeleted");
  orgDeleteRequest["Target"] = deletePerson;

  service.Execute(orgDeleteRequest);

Se også

Hendelsesrammeverk
Microsoft Dataverse-forretningshendelser
Komme i gang med virtuelle tabeller (enheter)