Povolení virtuálních tabulek pro podporu událostí Dataverse

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:

  1. 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, IsOnExternalDeletedEnabled a IsOnExternalUpdatedEnabled logickými vlastnostmi, budou následující vázané akce moci být vyvolány externími službami.

    Akce nebo zpráva Description
    OnExternalCreated Obsahuje data o záznamu, který byl vytvořen v externím systému vystavený jako virtuální tabulka v Dataverse.
    OnExternalUpdated Obsahuje data o záznamu, který byl aktualizován v externím systému vystavený jako virtuální tabulka v Dataverse.
    OnExternalDeleted Obsahuje data o záznamu, který byl odstraněn v externím systému vystavený jako virtuální tabulka v Dataverse.
  2. 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.

Vlastnosti virtuální tabulky new_people.

  1. V Power Apps (make.powerapps.com) v rámci řešení vyberte +Nový a pak vyberte Metadata virtuálních entit.

    Přidejte do svého řešení novou virtualentitymetadata.

    Otevře se následující formulář:

    Formulář virtualentitymetadata.

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

  1. V řešení vyberte Metadata virtuální entity a vyberte tlačítko se třemi tečkami (...) a pak vyberte Spravované vlastnosti.

    Přejděte do spravovaných vlastností.

  2. V podokně Spravované vlastnosti zrušte výběr Povolit vlastní nastavení a stiskněte Hotovo.

    Zrušte zaškrtnutí možnosti Povolit vlastní přizpůsobení.

    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
ExtensionOfRecordId
extensionofrecordid
Virtuální entita Vyhledání Název virtuální entity, pro kterou jsou tato nastavení určená.
IsCustomizable
iscustomiable
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í.
IsOnExternalCreatedEnabled
isonexternalcreatedenabled
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.
IsOnExternalDeletedEnabled
isonexternaldeletedenabled
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.
IsOnExternalUpdatedEnabled
isonexternalupdatedenabled
Povolení zprávy o externí aktualizaci logický Umožňuje zprávě odesílat informace o aktualizovaných záznamech v externím zdroji dat.
Name
name
Název String Název nastavení.
VirtualEntityMetadataId
virtualentitymetadataid
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.

Registrace kroku modulu plug-in ve zprávě OnExternalCreated pro entitu new_people

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)