Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Virtuálním entitám můžete povolit účast na asynchronních událostech Dataverse v kanálu Event Framework a také v konektoru PowerAutomate Dataverse s triggerem Při přidání, změně nebo odstranění řádku. Tato funkce je povolená jako součást obchodních událostí služby Dataverse. Další informace: Obchodní události Microsoft Dataverse
Bez konfigurace popsané v tomto článku se většina virtuálních entit neúčastní procesu Event Framework jako ostatní entity. Vzhledem k tomu, že se virtuální entity neúčastní kanálu událostí, nemůžete zaregistrovat kroky modulu plug-in u událostí vytvoření, aktualizace a odstranění (CUD), a přestože se události CUD zobrazují pro tyto entity v konektoru Power Automate Dataverse, při pokusu o uložení toku, který je používá, dojde k chybě.
Důvodem je to, že virtuální entity představují data uložená v externím zdroji. Služba Dataverse má přístup k ho zdroji dat jako klient, ale jiné systémy můžou tato data kdykoli aktualizovat bez průchodu architekturou událostí Dataverse.
Můžete to povolit dvěma kroky:
Konfigurace dat v tabulce s názvem Metadata virtuální entity Pokud jsou data v této tabulce nakonfigurovaná tak, aby je povolila, poskytuje sada nových rozhraní API prostředky pro externí systém, aby při výskytu událostí CUD informovala Dataverse.
Pokud je k entitě EntityMetadata.Metadataid pro virtuální tabulku přidružený řádek metadat virtuální entity, následující tři nastavení mohou určovat, zda externí zdroj může vaši virtuální tabulku upozornit.
Pokud je jednotlivě povoleno pomocí metadat virtuálních entit
IsOnExternalCreatedEnabled,IsOnExternalDeletedEnabledaIsOnExternalUpdatedEnabledlogickými vlastnostmi, budou následující vázané akce moci být vyvolány externími službami.Akce nebo zpráva Description OnExternalCreatedObsahuje data o záznamu, který byl vytvořen v externím systému vystavený jako virtuální tabulka v Dataverse. OnExternalUpdatedObsahuje data o záznamu, který byl aktualizován v externím systému vystavený jako virtuální tabulka v Dataverse. OnExternalDeletedObsahuje data o záznamu, který byl odstraněn v externím systému vystavený jako virtuální tabulka v Dataverse. Externí systém, který řídí data, musí odeslat ověřený požadavek HTTP do služby Dataverse pomocí rozhraní API, která obsahují data v metadatech virtuální entity. Ověřený obchodní vztah instančního objektu služby obvykle provádí toto volání. Další informace: Vytvoření webových aplikací pomocí ověřování mezi servery (S2S)
Každá aplikace nebo uživatel, který může provést volání dataverse, ale může odeslat požadavek HTTP potřebný k upozornění Dataverse, že k události došlo.
Poznámka:
Virtuální entity používající zprostředkovatele OData a nerelační zdroje dat mohou povolit určité registrace kroků modulu plug-in, například pouze u událostí mimo transakci. Tyto události ale nejsou k dispozici pro použití s konektorem Dataverse Power Automate. Toto chování se nijak nemění. Pro spolehlivější oznámení o událostech se ale doporučuje přístup popsaný v tomto tématu.
Jak povolit rozhraní API pro oznámení u virtuálních tabulek
Rozhraní API pro oznámení můžete povolit ruční konfigurací na portálu pro tvůrce (make.powerapps.com/) nebo pomocí kódu.
Povolit ručně pomocí portálu pro tvůrce
Řekněme, že máme virtuální tabulku osob s těmito vlastnostmi, vlastnost Name je new_People.
V Power Apps (make.powerapps.com) v rámci řešení vyberte +Nový a pak vyberte Metadata virtuálních entit.
Otevře se následující formulář:
Vyplňte formulář a nastavte hodnotu ID entity rozšíření na jméno vaší virtuální tabulky. Nemusíte povolovat všechny tři zprávy. Můžete nastavit jednu nebo více z nich a později se vrátit, abyste povolili zbytek.
Když tyto zprávy povolíte, můžete sledovat a potvrdit, co bylo přidáno, pomocí kroků v zobrazení vytvořených zpráv pro podporu virtuální tabulky.
Nastavení spravovaných vlastností pomocí portálu pro tvůrce
Pokud nechcete, aby lidé, kteří instalují vaše spravované řešení, změnili chování metadat virtuálních entit, měli byste spravovanou vlastnost nastavit tak, aby ji zabránili pomocí následujícího postupu.
V řešení vyberte Metadata virtuální entity a vyberte tlačítko se třemi tečkami (...) a pak vyberte Spravované vlastnosti.
V podokně Spravované vlastnosti zrušte výběr Povolit vlastní nastavení a stiskněte Hotovo.
Toto nastavení nic neudělá, dokud nebude záznam metadat virtuálních entit součástí spravovaného řešení.
Povolte pomocí kódu
Můžete chtít automatizovat vytváření metadat virtuálních entit pro virtuální entity.
Tabulka VirtualEntityMetadata obsahuje následující sloupce, které můžete nastavit:
| Název schématu Logický název |
Zobrazovaný název | Typ | Description |
|---|---|---|---|
ExtensionOfRecordIdextensionofrecordid |
Virtuální entita | Vyhledání | Název virtuální entity, pro kterou jsou tato nastavení určená. |
IsCustomizableiscustomiable |
Přizpůsobitelné | ManagedProperty | Určuje, jestli se metadata virtuální entity dají změnit nebo odstranit, když je součástí spravovaného řešení. |
IsOnExternalCreatedEnabledisonexternalcreatedenabled |
Povolit externí vytvoření zprávy | logický | Umožňuje zprávě odesílat informace o nových záznamech vytvořených v externím zdroji dat. |
IsOnExternalDeletedEnabledisonexternaldeletedenabled |
Povolit externí odstranění zpráv | logický | Umožňuje zprávě odesílat informace o odstraněných záznamech v externím zdroji dat. |
IsOnExternalUpdatedEnabledisonexternalupdatedenabled |
Povolení zprávy o externí aktualizaci | logický | Umožňuje zprávě odesílat informace o aktualizovaných záznamech v externím zdroji dat. |
Namename |
Název | String | Název nastavení. |
VirtualEntityMetadataIdvirtualentitymetadataid |
VirtualEntityMetadata | Uniqueidentifier | Jedinečný identifikátor instancí entity |
Při vytváření těchto typů součástí řešení doporučujeme nastavit spravovanou vlastnost false, pokud nechcete uživatelům, kteří instalují vaše spravované řešení, povolit, aby tato nastavení mohli změnit.
Doporučujeme také přidat záznam Metadata virtuálních entit** do konkrétního řešení při jeho vytváření. V obou příkladech níže uvidíte, jak se Solution.UniqueName předává s požadavkem, který vytvoří záznam.
Použití webového rozhraní API
Při použití webového rozhraní API je prvním úkolem získat MetadataId z virtuální tabulky. Následující příklad vrátí MetadataId pro virtuální entitu pojmenovanou new_people.
Prosba:
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]
Odpověď:
HTTP/1.1 200 OK
{
"@odata.context": "[Organization Uri]/api/data/v9.1/$metadata#EntityDefinitions(MetadataId)/$entity",
"MetadataId": "b198e6f3-3dd6-4c0b-9570-702f0c10d577"
}
Potom vytvořte záznam metadat virtuální entity a přidružte ho k Entity typu entity pomocí MetadataId načteného v prvním kroku.
Všimněte si použití hlavičky MSCRM.SolutionUniqueName nastavené na hodnotu Solution.UniqueName. Tím se do řešení při vytváření přidá záznam metadat virtuální entity. Další informace: Hlavičky HTTP
Prosba:
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)"
}
Odpověď:
HTTP/1.1 204 No Content
Použití sady SDK pro .NET
Bez ohledu na to, jestli použijete dřívější nebo pozdní vázané typy, je prvním úkolem načtení tabulky MetadataId, která se načte stejným způsobem pro oba případy. V tomto případě pro virtuální tabulku s názvem new_peopleCrmServiceClient. Alternativně lze použít třídu 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;
Použití typů s předčasným omezením
U typů s předčasným omezením můžete použít VirtualEntityMetadata třídu vygenerovanou pomocí příkazu Power Platform CLI pac modelbuilder build. Další informace: Opožděné a předčasné programování pomocí sady SDK pro .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,
};
Použití typů s pozdní vazbou
Existují dva způsoby, jak instanciovat instanci metadat virtuální entity pomocí typů s pozdní vazbou, obě jsou ekvivalentní.
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;
Nebo:
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}
}
};
Vytvoření záznamu
Při vytváření záznamu použijte CreateRequest Třída místo IOrganizationService.Create metoda , takže můžete zahrnout SolutionUniqueName volitelný parametr, který přidá záznam do vašeho řešení při jeho vytvoření. Další informace: Předání volitelných parametrů s požadavkem
var createRequest = new CreateRequest
{
Target = virtualEntityMetadata
};
createRequest["SolutionUniqueName"] = "YourSolutionUniqueName";
service.Execute(createRequest);
Zobrazení zpráv vytvořených pro podporu virtuální tabulky
Snadný způsob, jak ověřit, že existují zprávy, které jste povolili, je prozkoumat dokument služby Web API $metadata.
Můžete to udělat v prohlížeči. Pomocí adresy URL pro vaši organizaci zadejte do prohlížeče následující:
[Organization Uri]/api/data/v9.2/$metadata
Jedná se o velký dokument XML, ale můžete vyhledat "OnExternalCreated" a najít definici akce, v tomto případě pro new_people virtuální tabulku.
<Action Name="OnExternalCreated" IsBound="true">
<Parameter Name="entityset" Type="Collection(mscrm.new_people)" Nullable="false"/>
<Parameter Name="Target" Type="mscrm.crmbaseentity" Nullable="false"/>
</Action>
Vidíte, že se jedná o akci OData vázanou na new_people sadu entit.
Najdete podobné akce pro OnExternalDeleteda 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>
Zobrazit zprávy pomocí nástroje pro registraci plug-inů
Když zaregistrujete krok plug-in pomocí nástroje pro registraci doplňků, uvidíte tyto zprávy.
Upozorněte dataverse na změny pomocí zpráv.
Chcete-li informovat Dataverse o změnách, musíte použít příslušné rozhraní API. Můžete použít webové rozhraní API služby Dataverse nebo sadu SDK pro .NET.
Než tyto zprávy použijete, možná budete chtít použít postup popisovaný v Zobrazení vytvořených zpráv, které podporují vaši virtuální tabulku, abyste potvrdili, že existují.
Použití webového rozhraní API
Vzhledem k tomu, že tato rozhraní API jsou akce OData vázané na kolekci tabulek, můžete postupovat podle vzoru popsaného zde: Použití akcí webového rozhraní API> Akce vázané na kolekci> Akce vázané na kolekci tabulek. Následuje několik příkladů použití new_people virtuální tabulky.
Pokud je hodnota ID známá volajícím systémem, měla by být vždy zahrnuta.
Instance entity předaná pomocí cílového parametru musí mít odpovídající @odata.type vlastnost poznámek nastavenou k definování typu entity. Pokud tato možnost není zahrnutá, vrátí se chyba.
Tato volání by měla vždy vracet 204: No Content.
OnExternalCreated
Pro tuto akci by hodnoty měly zahrnovat všechny vlastnosti nastavené při vytvoření záznamu.
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
Pro tuto akci by měly být zahrnuty pouze ty vlastnosti, které se změnily.
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
Pro tuto akci je nutný pouze jedinečný identifikátor záznamu.
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"
}
}
Použití sady SDK pro .NET
Při použití sady SDK pro .NET můžete použít typy raných nebo pozdních vazeb. Další informace: Opožděné a předčasné programování pomocí sady SDK pro .NET
Typy s časnou vazbou
Tento příklad používá CrmServiceClient s pevně vázanými typy, ačkoliv lze také použít ServiceClient.
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
};
Typy s pozdní vazbou
Tento příklad používá CrmServiceClient s dynamicky vázanými typy, ačkoli lze použít i ServiceClient.
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);
Viz také
Architektura událostí
Obchodní události Microsoft Dataverse
Začínáme s virtuálními tabulkami (entitami)