Virtualiųjų lentelių įgalinimas, kad būtų palaikomi "Dataverse" įvykiai

Galite leisti virtualiems objektams dalyvauti asinchroniniuose "Dataverse Event Framework" srauto įvykiuose ir "PowerAutomate Dataverse" jungtyje Kai eilutė įtraukiama, modifikuojama arba panaikinama . Ši galimybė įgalinama kaip "Dataverse" verslo įvykių dalis. Daugiau informacijos: "Microsoft Dataverse" verslo įvykiai

Be šiame straipsnyje aprašytos konfigūracijos dauguma virtualių objektų nedalyvauja įvykių sistemos sraute kaip kiti objektai. Kadangi virtualūs objektai nedalyvauja įvykių sraute, negalite užregistruoti priedų veiksmų pagal įvykusius kūrimo, naujinimo ir naikinimo (CUD) įvykius, ir nors šių objektų CUD įvykiai rodomi "Power Automate Dataverse" jungtyje, žmonėms bandant įrašyti juos naudojantį srautą pateikiama klaida.

Taip yra todėl, kad virtualūs objektai atspindi duomenis, saugomus išoriniame šaltinyje. "Dataverse" turi prieigą prie to duomenų šaltinio kaip klientas, tačiau kitos sistemos gali bet kada atnaujinti tuos duomenis nepereidamos per "Dataverse" įvykių sistemą.

Yra du veiksmai, kaip tai įjungti:

  1. Duomenų konfigūravimas lentelėje, pavadintoje Virtualaus objekto metaduomenys. Kai šios lentelės duomenys sukonfigūruoti taip, kad juos įgalintų, naujų API rinkinys suteikia išorinei sistemai galimybę pranešti "Dataverse", kai įvyksta CUD įvykiai.

    Kai yra virtualiojo objekto metaduomenų eilutė, susieta su EntityMetadata. Virtualios lentelės metadataid , toliau nurodyti trys parametrai gali valdyti, ar išorinis šaltinis gali pranešti apie virtualią lentelę.

    Įgalinus atskirai naudojant virtualaus objekto metaduomenis IsOnExternalCreatedEnabledIsOnExternalDeletedEnabledir IsOnExternalUpdatedEnabled logikos ypatybes, išorinės tarnybos gali iškviesti šiuos susietus veiksmus.

    Veiksmas / pranešimas Apibūdinimas
    OnExternalCreated Yra duomenų apie įrašą, kuris buvo sukurtas išorinėje sistemoje, rodomoje kaip virtuali lentelė "Dataverse".
    OnExternalUpdated Yra duomenų apie įrašą, kuris buvo atnaujintas išorinėje sistemoje, rodomoje kaip virtuali lentelė "Dataverse".
    OnExternalDeleted Yra duomenų apie įrašą, kuris buvo panaikintas išorinėje sistemoje, rodomoje kaip virtuali lentelė "Dataverse".
  2. Išorinė sistema, valdanti duomenis, turi siųsti autentifikuotą HTTP užklausą "Dataverse" naudodama API, turinčias duomenis virtualiojo objekto metaduomenyse. Autentifikuotas tarnybos pagrindinis abonementas paprastai atlieka šį iškvietimą. Daugiau informacijos apie S2S: serverio su serveriu žiniatinklio programų kūrimas naudojant serverių (S2S) autentifikavimo funkciją

    Tačiau bet kuri programa arba vartotojas, galintis atlikti iškvietimą į "Dataverse", gali išsiųsti http užklausą, reikalingą pranešti "Dataverse" apie įvykį.

Pastaba.

Virtualūs objektai, naudojantys "OData" teikėją ir nereliacinius datos šaltinius, gali leisti tam tikrų papildinių veiksmų registracijas, pvz., tik įvykiuose, nesusijusiuose su operacija. Tačiau šių įvykių negalima naudoti su "Power Automate Dataverse" jungtimi. Šis elgesys nesikeičia. Tačiau norint patikimiau pranešti apie įvykius, rekomenduojamas šioje temoje aprašytas metodas.

Kaip įjungti virtualių lentelių pranešimų API

Pranešimų API galite įjungti rankiniu būdu sukonfigūruodami jas kūrėjo portale (make.powerapps.com/) arba naudodami kodą.

Įgalinimas rankiniu būdu naudojant kūrėjo portalą

Tarkime, kad turime asmens virtualią lentelę su šiomis savybėmis, ypatybė Vardas yra new_People.

Virtualios lentelės new_people ypatybės.

  1. "Power Apps" (make.powerapps.com) sprendime pasirinkite +Naujas , tada pasirinkite Virtualaus objekto metaduomenys.

    Įtraukite naujus virtualentitymetaduomenis į savo sprendimą.

    Atidaroma ši forma:

    virtualentitymetadata forma.

  2. Užpildykite formą, nustatydami plėtinio objekto ID reikšmę į virtualios lentelės pavadinimą. Neprivalote įgalinti visų trijų pranešimų. Galite nustatyti vieną ar kelis iš jų ir grįžti, kad vėliau įjungtumėte likusius.

Įjungę šiuos pranešimus, galite stebėti ir patvirtinti, kas buvo pridėta, atlikdami veiksmus, nurodytus Virtualios lentelės palaikymui sukurtų pranešimų peržiūra.

Valdomų ypatybių nustatymas naudojant kūrėjo portalą

Jei nenorite, kad valdomąjį sprendimą įdiegę žmonės keistų virtualiojo objekto metaduomenų veikimo būdą, turėtumėte nustatyti valdomąją ypatybę, kad to neleistumėte atlikdami toliau nurodytus veiksmus.

  1. Sprendime pasirinkite Virtualaus objekto metaduomenys ir daugtaškį (...), tada pasirinkite Valdomos ypatybės.

    Eikite į Valdomos ypatybės.

  2. Srityje Valdomos ypatybės panaikinkite žymėjimą Leisti tinkinimus ir paspauskite Atlikta.

    Panaikinkite žymėjimą Leisti tinkinimus.

    Šis parametras nieko nedarys, kol virtualiojo objekto metaduomenų įrašas nebus įtrauktas į valdomąjį sprendimą.

Įgalinti naudojant kodą

Galbūt norėsite automatizuoti virtualių objektų metaduomenų kūrimą savo virtualiems objektams.

Lentelėje VirtualEntityMetadata yra šie stulpeliai, kuriuos galite nustatyti:

Schemos pavadinimas
Loginis pavadinimas
Rodomas vardas Rūšis Apibūdinimas
ExtensionOfRecordId
extensionofrecordid
Virtualus objektas Peržvalga Virtualaus objekto, kuriam skirti šie parametrai, pavadinimas.
IsCustomizable
iscustomiable
Ar tinkinama ManagedProperty Valdo, ar virtualaus objekto metaduomenis galima keisti arba panaikinti, kai jie įtraukiami į valdomąjį sprendimą.
IsOnExternalCreatedEnabled
isonexternalcreatedenabled
Įgalinti išorinį pranešimo kūrimą Bulio logikos Įgalina pranešimą siųsti informaciją apie naujus įrašus, sukurtus išoriniame duomenų šaltinyje.
IsOnExternalDeletedEnabled
isonexternaldeletedenabled
Įgalinti išorinį naikinimo pranešimą Bulio logikos Įgalina pranešimą siųsti informaciją apie panaikintus įrašus išoriniame duomenų šaltinyje.
IsOnExternalUpdatedEnabled
isonexternalupdatedenabled
Įgalinti išorinio naujinimo pranešimą Bulio logikos Įgalina pranešimą siųsti informaciją apie atnaujintus išorinio duomenų šaltinio įrašus.
Name
name
Vardas, pavadinimas String Nustatymų pavadinimas.
VirtualEntityMetadataId
virtualentitymetadataid
VirtualEntityMetadata Unikalus identifikatorius Unikalus objekto egzempliorių identifikatorius

Kuriant tokio tipo sprendimo komponentus, rekomenduojame nustatyti valdomąją ypatybę falseIsCustomizable, nebent norite, kad valdomąjį sprendimą įdiegę žmonės galėtų keisti šiuos parametrus.

Taip pat rekomenduojame įtraukti virtualiojo objekto metaduomenų** įrašą į konkretų sprendimą, kai jį kuriate. Abiejuose toliau pateiktuose pavyzdžiuose pamatysite, kaip perduodama Solution.UniqueName užklausa, kuria sukuriamas įrašas.

Žiniatinklio API naudojimas

Kai naudojate žiniatinklio API, pirmoji užduotis yra gauti MetadataId virtualią lentelę. Toliau pateiktame pavyzdyje pateikiama virtualaus objekto, MetadataId pavadinto new_people.

Prašymą:

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]

Atsakas:

HTTP/1.1 200 OK

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

Tada sukurkite virtualaus objekto metaduomenų įrašą, susiedami jį su objekto tipu, Entity naudodami MetadataId nuskaitytą pirmame veiksme.

Atkreipkite dėmesį į reikšmės Solution.UniqueName antraštės naudojimąMSCRM.SolutionUniqueName. Tai įtraukia virtualaus objekto metaduomenų įrašą į sprendimą, kai jis kuriamas. Daugiau informacijos: HTTP antraštės

Prašymą:

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)"
}

Atsakas:

HTTP/1.1 204 No Content

SDK naudojimas .NET

Nepriklausomai nuo to, ar naudojate ankstyvąjį, ar vėlyvąjį susietąjį tipą, pirmoji užduotis yra nuskaityti lentelės duomenis MetadataId , kurie abiem atvejais nuskaitomi vienodai. Šiuo atveju virtualiai lentelei, pavadintai new_people naudojant CrmServiceClient. Arba ServiceClient galima naudoti klasę.

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;

Ankstyvųjų surištų tipų naudojimas

Naudodami ankstyvuosius susietuosius tipus galite naudoti VirtualEntityMetadata klasę, sugeneruotą naudojant "Power Platform CLI pac modelbuilder" kūrimo komandą. Daugiau informacijos: Vėlyvasis ir ankstyvasis susietasis programavimas naudojant .NET skirtą SDK

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

Vėlyvųjų tipų naudojimas

Yra du būdai, kaip sukurti virtualaus objekto metaduomenų egzempliorių naudojant vėlyvuosius susietus tipus, arba jie yra lygiaverčiai:

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;

Arba:

  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}
      }            
  };

Įrašo kūrimas

Kurdami įrašą naudokite klasę CreateRequest , o ne metodą IOrganizationService.Create, kad galėtumėte įtraukti pasirinktinį parametrą SolutionUniqueName , kuris įtraukia įrašą į sprendimą, kai jį kuriate. Daugiau informacijos: Pasirinktinių parametrų perdavimas su užklausa

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

service.Execute(createRequest);

Peržiūrėti pranešimus, sukurtus virtualiai lentelei palaikyti

Paprastas būdas patikrinti, ar įjungti pranešimai egzistuoja, yra išnagrinėti žiniatinklio API $metadata tarnybos dokumentą.

Tai galite padaryti savo naršyklėje. Naudodami organizacijos URL naršyklėje įveskite:

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

Tai didelis XML dokumentas, tačiau galite ieškoti 'OnExternalCreated' ir rasti veiksmo apibrėžimą, šiuo atveju virtualią new_people lentelę.

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

Matote, kad tai yra OData veiksmas, susietas new_people su entityset. Rasite panašius veiksmus ir OnExternalDeletedOnExternalUpdated:

<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>

Peržiūrėkite pranešimus naudodami įskiepio registracijos įrankį

Kai užregistruojate papildinio veiksmą naudodami papildinio registracijos įrankį, rasite šiuos pranešimus.

Registruojamas new_people objekto pranešimo OnExternalCreated priedo veiksmas.

Pranešimų naudojimas norint pranešti "Dataverse" apie pakeitimus

Norėdami pranešti "Dataverse" apie pakeitimus, turite paskambinti į atitinkamą API. Galite naudoti "Dataverse" žiniatinklio API arba .NET SDK.

Prieš naudodami šiuos pranešimus, galite naudoti procedūrą, aprašytą Virtualiai lentelei palaikyti sukurtų pranešimų peržiūra , kad patvirtintumėte, kad jie egzistuoja.

Žiniatinklio API naudojimas

Kadangi šios API yra OData veiksmai, susieti su lentelių rinkiniu, galite vadovautis čia dokumentuotu modeliu: Žiniatinklio API veiksmų> naudojimas Susieti veiksmai> Veiksmai, susieti su lentelių rinkiniu. Toliau pateikiami keli pavyzdžiai, rodantys virtualios lentelės new_people naudojimą.

Jei ID reikšmė yra žinoma skambinančiajai sistemai, ji visada turi būti įtraukta. Objekto egzemplioriuje, perduotame naudojant tikslinį parametrą, turi būti nustatyta atitinkama @odata.type anotacijos ypatybė, kad būtų apibrėžtas objekto tipas. Jei tai neįtraukta, pateikiama klaida.

Šie skambučiai visada turėtų grįžti 204: No Content.

OnExternalCreated

Atliekant šį veiksmą, reikšmės turi apimti visas ypatybes, nustatytas kuriant įrašą.

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

Atliekant šį veiksmą turėtų būti įtrauktos tik tos ypatybės, kurios pasikeitė.

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

Šiam veiksmui reikalingas tik unikalus įrašo identifikatorius.

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"
        }
}

.NET skirto SDK naudojimas

Kai naudojate .NET skirtą SDK, galite naudoti ankstyvojo arba vėlyvojo susiejimo tipus. Daugiau informacijos: Vėlyvasis ir ankstyvasis susietasis programavimas naudojant .NET skirtą SDK

Ankstyvieji tipai

Šiame pavyzdyje naudojamas CrmServiceClient su anksti susietais tipais, tačiau ServiceClient taip pat gali būti naudojamas.

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
};

Pavėluotai surišti tipai

Šiame pavyzdyje naudojamas CrmServiceClient su pavėluotais susietais tipais, tačiau ServiceClient taip pat gali būti naudojamas.

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);

Taip pat žr.

Renginio struktūra
Microsoft Dataverse Verslo renginiai
Darbo su virtualiomis lentelėmis (objektais) pradžia