Notă
Accesul la această pagină necesită autorizare. Puteți încerca să vă conectați sau să modificați directoarele.
Accesul la această pagină necesită autorizare. Puteți încerca să modificați directoarele.
Puteți permite entităților virtuale să participe la evenimentele asincrone Dataverse Event Framework și în conectorul PowerAutomate Dataverse Când un rând este adăugat, modificat sau șters declanșator. Această capacitate este activată ca parte a evenimentelor de afaceri Dataverse. Informații suplimentare: Evenimente de business Microsoft Dataverse
Fără configurația descrisă în acest articol, majoritatea entităților virtuale nu participă la conducta Event Framework ca alte entități. Deoarece entitățile virtuale nu participă la canalul de evenimente, nu puteți înregistra pași de plug-in pentru evenimentele de creare, actualizare și ștergere (CUD) care apar și, deși evenimentele CUD apar pentru aceste entități în conectorul Power Automate Dataverse, se afișează o eroare atunci când oamenii încearcă să salveze un flux care le utilizează.
Acest lucru se datorează faptului că entitățile virtuale reprezintă date stocate într-o sursă externă. Dataverse are acces la acea sursă de date ca client, dar alte sisteme pot actualiza datele respective în orice moment fără a trece prin cadrul de evenimente Dataverse.
Există doi pași pentru a activa acest lucru:
Configurarea datelor într-un tabel numit Metadate de entitate virtuală. Când datele din acest tabel sunt configurate pentru a le activa, un set de API-uri noi oferă mijloacele pentru ca sistemul extern să notifice Dataverse atunci când apar evenimente CUD.
Când există un rând de metadate de entitate virtuală asociat cu EntityMetadata. Metadataid pentru un tabel virtual, următoarele trei setări pot controla dacă o sursă externă vă poate notifica tabelul virtual.
Când sunt activate individual utilizând metadatele
IsOnExternalCreatedEnabledentității virtuale ,IsOnExternalDeletedEnabledșiIsOnExternalUpdatedEnabledproprietățile booleene, următoarele acțiuni legate devin disponibile pentru a fi apelate de servicii externe.Acțiune/Mesaj Descriere OnExternalCreatedConține date despre o înregistrare care a fost creată într-un sistem extern expus ca tabel virtual în Dataverse. OnExternalUpdatedConține date despre o înregistrare care a fost actualizată într-un sistem extern expus ca tabel virtual în Dataverse. OnExternalDeletedConține date despre o înregistrare care a fost ștearsă într-un sistem extern expus ca tabel virtual în Dataverse. Sistemul extern care controlează datele trebuie să trimită o solicitare HTTP autentificată către Dataverse utilizând API-urile care au date în metadate de entitate virtuală. Un cont principal de serviciu autentificat efectuează de obicei acest apel. Informații suplimentare: Construirea aplicațiilor web utilizând autentificarea de la server la server (S2S)
Dar orice aplicație sau utilizator care poate efectua un apel la Dataverse poate trimite solicitarea http necesară pentru a notifica Dataverse că a avut loc evenimentul.
Notă
Entitățile virtuale care utilizează furnizorul OData și sursele de date nerelaționale pot permite anumite înregistrări de pași de plug-in, de exemplu numai pentru evenimente din afara tranzacției. Dar aceste evenimente nu sunt disponibile pentru utilizare cu conectorul Power Automate Dataverse. Nu există nicio schimbare în acest comportament. Dar pentru o notificare mai fiabilă a evenimentelor, se recomandă abordarea descrisă în acest subiect.
Cum se activează API-urile de notificare pentru tabelele virtuale
Puteți activa API-urile de notificare configurându-le manual în portalul creatorului (make.powerapps.com/) sau utilizând cod.
Activați manual folosind portalul creatorului
Să presupunem că avem un tabel virtual Person cu aceste proprietăți, proprietatea Name este new_People.
În Power Apps (make.powerapps.com), în soluția dvs., selectați +Nou, apoi selectați Metadate entitate virtuală.
Se deschide următorul formular:
Completați formularul, setând valoarea ID entitate extensie la numele tabelului virtual. Nu trebuie să activați toate cele trei mesaje. Puteți seta unul sau mai multe dintre ele și reveni pentru a activa restul mai târziu.
După ce ați activat aceste mesaje, puteți observa și confirma ceea ce a fost adăugat folosind pașii din Vizualizați mesajele create pentru a vă susține tabelul virtual.
Setarea proprietăților gestionate utilizând portalul maker
Dacă nu doriți ca persoanele care instalează soluția gestionată să modifice comportamentele metadatelor entității virtuale, ar trebui să setați proprietatea gestionată pentru a o împiedica utilizând pașii următori.
În soluția dvs., selectați Metadatele entității virtuale și selectați punctele de suspensie (...) și apoi selectați Proprietăți gestionate.
În panoul Proprietăți gestionate, deselectați Permiteți particularizări și apăsați Terminat.
Această setare nu va face nimic până când înregistrarea metadatelor entității virtuale nu este inclusă într-o soluție gestionată.
Activați cu cod
Poate doriți să automatizați crearea de metadate de entitate virtuală pentru entitățile virtuale.
Tabelul VirtualEntityMetadata are următoarele coloane pe care le puteți seta:
| Nume schemă Nume logic |
Nume afișat | Tip | Descriere |
|---|---|---|---|
ExtensionOfRecordIdextensionofrecordid |
Entitate virtuală | Căutare | Numele entității virtuale pentru care sunt aceste setări. |
IsCustomizableiscustomiable |
Este personalizabil | Proprietate gestionată | Controlează dacă metadatele entității virtuale pot fi modificate sau șterse atunci când sunt incluse într-o soluție gestionată. |
IsOnExternalCreatedEnabledisonexternalcreatedenabled |
Activați mesajul de creare externă | Boolean | Activează un mesaj pentru a trimite informații despre înregistrările noi create în sursa de date externă. |
IsOnExternalDeletedEnabledisonexternaldeletedenabled |
Activați mesajul de ștergere extern | Boolean | Activează un mesaj pentru a trimite informații despre înregistrările șterse din sursa de date externă. |
IsOnExternalUpdatedEnabledisonexternalupdatedenabled |
Activați mesajul de actualizare externă | Boolean | Activează un mesaj pentru a trimite informații despre înregistrările actualizate din sursa de date externă. |
Namename |
Nume | Șir | Numele setărilor. |
VirtualEntityMetadataIdvirtualentitymetadataid |
Metadate VirtualEntity | Identificator unic | Identificator unic pentru instanțele de entitate |
Când creați aceste tipuri de componente ale soluției, vă recomandăm să setați proprietatea gestionată IsCustomizable la este false , cu excepția cazului în care doriți să permiteți persoanelor care instalează soluția gestionată să poată modifica aceste setări.
De asemenea, vă recomandăm să adăugați înregistrarea Metadate entitate virtuală** la o anumită soluție atunci când o creați. În ambele exemple de mai jos, veți vedea cum se transmite cu Solution.UniqueName solicitarea care creează înregistrarea.
Utilizarea API-ului web
Când utilizați API-ul Web, prima sarcină este să obțineți tabelul MetadataId virtual. Următorul exemplu returnează pentru o entitate MetadataId virtuală numită new_people.
Cerere:
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]
răspuns :
HTTP/1.1 200 OK
{
"@odata.context": "[Organization Uri]/api/data/v9.1/$metadata#EntityDefinitions(MetadataId)/$entity",
"MetadataId": "b198e6f3-3dd6-4c0b-9570-702f0c10d577"
}
Apoi, creați înregistrarea de metadate a entității virtuale în timp ce o asociați la tipul Entity de entitate folosind recuperat MetadataId în primul pas.
Rețineți utilizarea antetului MSCRM.SolutionUniqueName setat la Solution.UniqueName valoare. Aceasta adaugă înregistrarea de metadate a entității virtuale la soluție pe măsură ce este creată. Informații suplimentare: Anteturi HTTP
Cerere:
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)"
}
răspuns :
HTTP/1.1 204 No Content
Utilizarea SDK-ului pentru .NET
Indiferent dacă utilizați tipuri legate timpuriu sau târziu, prima sarcină este să preluați MetadataId tabelul, care este preluat în același mod pentru ambele cazuri. În acest caz, pentru un tabel virtual numit new_peoplefolosind CrmServiceClient. Alternativ, poate fi folosită clasa ServiceClient .
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;
Utilizarea tipurilor cu legături timpurii
Cu tipurile legate timpuriu, puteți utiliza clasa VirtualEntityMetadata generată utilizând comanda Power Platform CLI pac modelbuilder build. Informații suplimentare: Programare legată târziu și legată devreme utilizând SDK-ul pentru .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,
};
Utilizarea tipurilor cu legături târzii
Există două moduri de a instanța de metadate a entității virtuale folosind tipuri legate târziu, oricare este echivalentă:
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;
Sau:
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}
}
};
Crearea înregistrării
Când creați înregistrarea, utilizați clasa CreateRequest mai degrabă decât metoda IOrganizationService.Create, astfel încât să puteți include parametrul opțional SolutionUniqueName care adaugă înregistrarea la soluție atunci când o creați. Informații suplimentare: Transmiterea parametrilor opționali cu o solicitare
var createRequest = new CreateRequest
{
Target = virtualEntityMetadata
};
createRequest["SolutionUniqueName"] = "YourSolutionUniqueName";
service.Execute(createRequest);
Vizualizați mesajele create pentru a vă susține masa virtuală
O modalitate ușoară de a verifica dacă există mesajele pe care le-ați activat este să examinați API-ul Web $metadata documentul de serviciu.
Puteți face acest lucru în browserul dvs. Folosind adresa URL pentru organizația dvs., tastați următoarele în browser:
[Organization Uri]/api/data/v9.2/$metadata
Acesta este un document XML mare, dar puteți căuta 'OnExternalCreated' și puteți găsi definiția acțiunii, în acest caz pentru tabelul new_people virtual.
<Action Name="OnExternalCreated" IsBound="true">
<Parameter Name="entityset" Type="Collection(mscrm.new_people)" Nullable="false"/>
<Parameter Name="Target" Type="mscrm.crmbaseentity" Nullable="false"/>
</Action>
Puteți vedea că aceasta este o acțiune OData legată de setul new_people de entități.
Veți găsi acțiuni similare OnExternalUpdatedpentru OnExternalDeletedși :
<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>
Vizualizarea mesajelor folosind instrumentul de înregistrare a plug-in-ului
Când înregistrați un pas de plug-in folosind instrumentul de înregistrare a plug-in-ului, veți găsi aceste mesaje.
Utilizați mesajele pentru a notifica Dataverse despre modificări
Pentru a notifica Dataverse cu privire la modificări, trebuie să apelați API-ul corespunzător. Puteți utiliza fie API-ul web Dataverse, fie SDK-ul pentru .NET.
Înainte de a utiliza aceste mesaje, vă recomandăm să utilizați procedura descrisă în Vizualizarea mesajelor create pentru a accepta tabelul virtual pentru a confirma că există.
Utilizarea API-ului web
Deoarece aceste API-uri sunt acțiuni OData legate de o colecție de tabele, puteți urma modelul documentat aici: Utilizați acțiuni> API web Acțiuni> legate Acțiuni legate la o colecție de tabele. Următoarele sunt câteva exemple care arată utilizarea tabelului new_people virtual.
Dacă valoarea ID este cunoscută de sistemul apelant, aceasta ar trebui să fie întotdeauna inclusă.
Instanța de entitate transmisă utilizând parametrul țintă trebuie să aibă setată proprietatea de adnotare corespunzătoare @odata.type pentru a defini tipul de entitate. Dacă acest lucru nu este inclus, se returnează o eroare.
Aceste apeluri ar trebui să revină 204: No Contentîntotdeauna .
OnExternalCreated
Pentru această acțiune, valorile trebuie să includă toate proprietățile setate atunci când a fost creată înregistrarea.
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
Pentru această acțiune, ar trebui incluse doar acele proprietăți care s-au modificat.
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
Pentru această acțiune, este necesar doar identificatorul unic pentru înregistrare.
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"
}
}
Utilizarea SDK-ului pentru .NET
Când utilizați SDK-ul pentru .NET, puteți utiliza tipuri de legare timpurie sau târzie. Informații suplimentare: Programare legată târziu și legată devreme utilizând SDK-ul pentru .NET
Tipuri cu legături timpurii
Acest exemplu utilizează CrmServiceClient cu tipuri legate timpuriu, deși ServiceClient ar putea fi utilizat și el.
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
};
Tipuri cu legături târzii
Acest exemplu utilizează CrmServiceClient cu tipuri legate târziu, deși ServiceClient ar putea fi utilizat și el.
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);
Vedeți și
Cadrul evenimentului
Evenimente de afaceri Microsoft Dataverse
Introducere în tabele virtuale (entități)