Dayakan Jadual Maya untuk menyokong peristiwa Dataverse

Anda boleh membenarkan entiti Maya mengambil bahagian dalam acara saluran paip Rangka Kerja Peristiwa Dataverse tak segerak dan dalam penyambung PowerAutomate Dataverse Apabila pencetus baris ditambah, diubah suai atau dipadamkan . Keupayaan ini didayakan sebagai sebahagian daripada acara perniagaan Dataverse. Maklumat lanjut: Acara perniagaan Microsoft Dataverse

Tanpa konfigurasi yang diterangkan dalam artikel ini, kebanyakan entiti maya tidak mengambil bahagian dalam saluran paip Rangka Kerja Acara seperti entiti lain. Oleh kerana entiti maya tidak mengambil bahagian dalam saluran paip peristiwa, anda tidak boleh mendaftarkan langkah pemalam terhadap peristiwa Cipta, Kemas Kini dan Padam (CUD) yang berlaku dan walaupun peristiwa CUD muncul untuk entiti ini dalam penyambung Power Automate Dataverse, ralat dilemparkan apabila orang cuba menyimpan aliran yang menggunakannya.

Ini kerana entiti maya mewakili data yang disimpan dalam sumber luaran. Dataverse mempunyai akses kepada sumber data tersebut sebagai klien, tetapi sistem lain boleh mengemas kini data tersebut pada bila-bila masa tanpa melalui rangka kerja peristiwa Dataverse.

Terdapat dua langkah untuk mendayakan ini:

  1. Mengkonfigurasi data dalam jadual yang dipanggil Metadata Entiti Maya. Apabila data dalam jadual ini dikonfigurasikan untuk mendayakannya, satu set API baharu menyediakan cara untuk sistem luaran memberitahu Dataverse apabila peristiwa CUD berlaku.

    Apabila terdapat baris Metadata Entiti Maya yang dikaitkan dengan EntityMetadata. Metadataid untuk jadual maya, tiga tetapan berikut boleh mengawal sama ada sumber luaran boleh memberitahu jadual maya anda.

    Apabila didayakan secara individu menggunakan Metadata IsOnExternalCreatedEnabledEntiti Maya , IsOnExternalDeletedEnabled, dan IsOnExternalUpdatedEnabled sifat boolean, Tindakan terikat berikut tersedia untuk dipanggil oleh perkhidmatan luaran.

    Tindakan/Mesej Keterangan
    OnExternalCreated Mengandungi data tentang rekod yang dicipta dalam sistem luaran yang didedahkan sebagai jadual maya dalam Dataverse.
    OnExternalUpdated Mengandungi data tentang rekod yang telah dikemas kini dalam sistem luaran yang didedahkan sebagai jadual maya dalam Dataverse.
    OnExternalDeleted Mengandungi data tentang rekod yang telah dipadamkan dalam sistem luaran yang didedahkan sebagai jadual maya dalam Dataverse.
  2. Sistem luaran yang mengawal data mesti menghantar permintaan HTTP yang disahkan kepada Dataverse menggunakan API yang mempunyai data dalam Metadata Entiti Maya. Akaun prinsipal perkhidmatan yang disahkan biasanya melakukan panggilan ini. Maklumat lanjut: Bina aplikasi web menggunakan pengesahan pelayan kepada pelayan (S2S)

    Tetapi mana-mana aplikasi atau pengguna yang boleh melakukan panggilan ke Dataverse boleh menghantar permintaan http yang diperlukan untuk memberitahu Dataverse bahawa peristiwa itu berlaku.

Nota

Entiti maya yang menggunakan Pembekal OData dan sumber tarikh bukan hubungan mungkin membenarkan pendaftaran langkah pemalam tertentu, contohnya hanya pada peristiwa di luar transaksi. Tetapi peristiwa ini tidak tersedia untuk digunakan dengan penyambung Power Automate Dataverse. Tiada perubahan kepada tingkah laku ini. Tetapi untuk pemberitahuan peristiwa yang lebih dipercayai, pendekatan yang diterangkan dalam topik ini disyorkan.

Cara mendayakan API pemberitahuan untuk jadual maya

Anda boleh mendayakan API pemberitahuan dengan mengkonfigurasinya secara manual dalam portal pembuat (make.powerapps.com/) atau menggunakan kod.

Dayakan secara manual menggunakan portal pembuat

Katakan kita mempunyai Jadual Maya Orang dengan sifat ini, sifat Nama ialah new_People.

Sifat-sifat jadual maya new_people.

  1. Dalam Power Apps (make.powerapps.com), dalam penyelesaian anda, pilih +Baharu dan kemudian pilih Metadata Entiti Maya.

    Tambahkan metadata virtualentity baharu pada penyelesaian anda.

    Ini membuka borang berikut:

    borang metadata virtualentity.

  2. Lengkapkan borang, setkan nilai Id Entiti Sambungan kepada nama jadual maya anda. Anda tidak perlu mendayakan ketiga-tiga mesej. Anda boleh menetapkan satu atau lebih daripadanya dan kembali untuk mendayakan selebihnya kemudian.

Apabila anda telah mendayakan mesej ini, anda boleh memerhati dan mengesahkan perkara yang telah ditambah menggunakan langkah-langkah dalam Lihat mesej yang dicipta untuk menyokong jadual maya anda.

Tetapkan sifat terurus menggunakan portal pembuat

Jika anda tidak mahu orang yang memasang penyelesaian terurus anda mengubah tingkah laku Metadata Entiti Maya, anda harus mengesetkan sifat terurus untuk menghalangnya menggunakan langkah berikut.

  1. Dalam penyelesaian anda, pilih Metadata Entiti Maya dan pilih elipsis (...) dan kemudian pilih Sifat Terurus.

    Navigasi ke Sifat Terurus.

  2. Dalam anak tetingkap Sifat Terurus, nyahpilih Benarkan Penyesuaian dan tekan Selesai.

    Nyahpilih Benarkan Penyesuaian.

    Tetapan ini tidak akan melakukan apa-apa sehingga rekod Metadata Entiti Maya disertakan dalam penyelesaian terurus.

Dayakan dengan kod

Anda mungkin mahu mengautomasikan penciptaan Metadata Entiti Maya untuk entiti maya anda.

Jadual mempunyai VirtualEntityMetadata lajur berikut yang boleh anda tetapkan:

Nama Skema
Nama Logik
Paparkan Nama Jenis Keterangan
ExtensionOfRecordId
extensionofrecordid
Entiti Maya Cari Nama entiti maya yang untuknya tetapan ini.
IsCustomizable
iscustomiable
Adakah Boleh Disesuaikan Harta Terurus Mengawal sama ada metadata entiti maya boleh diubah atau dipadamkan apabila disertakan dalam penyelesaian terurus.
IsOnExternalCreatedEnabled
isonexternalcreatedenabled
Dayakan mesej cipta luaran Boolean Mendayakan mesej untuk menghantar maklumat tentang rekod baharu yang dicipta dalam sumber data luaran.
IsOnExternalDeletedEnabled
isonexternaldeletedenabled
Dayakan mesej pemadaman luaran Boolean Mendayakan mesej untuk menghantar maklumat tentang rekod yang dipadamkan dalam sumber data luaran.
IsOnExternalUpdatedEnabled
isonexternalupdatedenabled
Dayakan mesej kemas kini luaran Boolean Mendayakan mesej untuk menghantar maklumat tentang rekod yang dikemas kini dalam sumber data luaran.
Name
name
Nama String Nama tetapan.
VirtualEntityMetadataId
virtualentitymetadataid
VirtualEntityMetadata Pengecam unik Pengecam unik untuk tika entiti

Apabila mencipta jenis komponen penyelesaian ini, kami mengesyorkan agar anda mengesetkan sifat terurus IsCustomizable kepada melainkan false anda mahu membenarkan orang yang memasang penyelesaian terurus anda dapat mengubah seting ini.

Kami juga mengesyorkan agar anda menambah rekod Metadata Entiti Maya** pada penyelesaian tertentu apabila anda menciptanya. Dalam kedua-dua contoh di bawah, anda akan melihat cara dihantar Solution.UniqueName dengan permintaan yang mencipta rekod.

Menggunakan API Web

Apabila anda menggunakan API Web, tugas pertama ialah mendapatkan MetadataId jadual maya. Contoh berikut mengembalikan untuk MetadataId entiti maya bernama new_people.

Permintaan:

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]

Respons:

HTTP/1.1 200 OK

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

Kemudian, cipta rekod metadata entiti maya sambil mengaitkannya dengan Entity jenis entiti menggunakan yang MetadataId diambil dalam langkah pertama.

Perhatikan penggunaan MSCRM.SolutionUniqueName pengepala yang ditetapkan kepada Solution.UniqueName nilai. Ini menambah rekod metadata entiti maya pada penyelesaian semasa ia dicipta. Maklumat lanjut: Pengepala HTTP

Permintaan:

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

Respons:

HTTP/1.1 204 No Content

Menggunakan SDK untuk .NET

Tidak kira sama ada anda menggunakan jenis terikat awal atau lewat, tugas pertama ialah mendapatkan semula MetadataId jadual, yang diambil dengan cara yang sama untuk kedua-dua kes. Dalam kes ini untuk jadual maya yang dinamakan new_people menggunakan CrmServiceClient. Secara bergantian, kelas boleh ServiceClient digunakan.

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;

Menggunakan jenis terikat awal

Dengan jenis terikat awal, anda boleh menggunakan VirtualEntityMetadata kelas yang dijana menggunakan arahan binaan Power Platform CLI pac modelbuilder. Maklumat lanjut: Pengaturcaraan terikat lewat dan terikat awal menggunakan SDK untuk .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,
};

Menggunakan jenis terikat lewat

Terdapat dua cara untuk membuat contoh metadata entiti maya menggunakan jenis terikat lewat, sama ada setara:

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;

Atau:

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

Mencipta rekod

Apabila mencipta rekod, gunakan Kelas CreateRequest dan bukannya kaedah IOrganizationService.Create supaya anda boleh memasukkan SolutionUniqueName parameter pilihan yang menambah rekod pada penyelesaian anda apabila anda menciptanya. Maklumat lanjut: Menghantar parameter pilihan dengan permintaan

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

service.Execute(createRequest);

Lihat mesej yang dicipta untuk menyokong jadual maya anda

Cara mudah untuk mengesahkan bahawa mesej yang anda dayakan wujud ialah meneliti dokumen perkhidmatan $metadata API Web.

Anda boleh melakukan ini dalam penyemak imbas anda. Menggunakan Url untuk organisasi anda, taipkan yang berikut ke dalam penyemak imbas anda:

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

Ini adalah dokumen XML yang besar, tetapi anda boleh mencari 'OnExternalCreated' dan mencari definisi tindakan, dalam kes ini untuk new_people jadual maya.

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

Anda boleh melihat bahawa ini ialah Tindakan OData yang terikat pada new_people set entiti. Anda akan menemui tindakan yang serupa untuk OnExternalDeleted, dan 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>

Lihat mesej menggunakan alat pendaftaran pemalam

Apabila anda mendaftarkan langkah pemalam menggunakan alat pendaftaran pemalam, anda akan menemui mesej ini.

Mendaftarkan langkah pemalam pada mesej OnExternalCreated untuk entiti new_people.

Gunakan mesej untuk memberitahu Dataverse tentang perubahan

Untuk memberitahu Dataverse tentang perubahan, anda mesti memanggil API yang sesuai. Anda boleh menggunakan sama ada API Web Dataverse atau SDK untuk .NET.

Sebelum menggunakan mesej ini, anda mungkin mahu menggunakan prosedur yang diterangkan dalam Lihat mesej yang dicipta untuk menyokong jadual maya anda untuk mengesahkan bahawa ia wujud.

Menggunakan API Web

Oleh kerana API ini ialah tindakan OData yang terikat pada koleksi jadual, anda boleh mengikuti corak yang didokumentasikan di sini: Gunakan tindakan> API Web Tindakan terikat Tindakan> terikat pada koleksi jadual. Berikut ialah beberapa contoh yang menunjukkan penggunaan new_people jadual maya.

Jika nilai ID diketahui oleh sistem panggilan, ia harus sentiasa disertakan. Tika entiti yang diluluskan menggunakan Parameter Sasaran mesti mempunyai set sifat anotasi yang sesuai @odata.type untuk mentakrifkan jenis entiti. Jika ini tidak disertakan, ralat akan dikembalikan.

Panggilan ini harus sentiasa dikembalikan 204: No Content.

OnExternalCreated

Untuk tindakan ini, nilai hendaklah termasuk semua sifat yang ditetapkan apabila rekod dicipta.

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

PadaLuaranDikemaskini

Untuk tindakan ini, hanya sifat yang telah berubah harus dimasukkan.

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

PadaLuaranDipadamkan

Untuk tindakan ini, hanya pengecam unik untuk rekod diperlukan.

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

Menggunakan SDK untuk .NET

Apabila menggunakan SDK untuk .NET, anda boleh menggunakan sama ada jenis pengikatan awal atau lewat. Maklumat lanjut: Pengaturcaraan terikat lewat dan terikat awal menggunakan SDK untuk .NET

Jenis terikat awal

Contoh ini menggunakan CrmServiceClient dengan jenis terikat awal, walaupun ServiceClient juga boleh digunakan.

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

Jenis terikat lewat

Contoh ini menggunakan CrmServiceClient dengan jenis terikat lewat, walaupun ServiceClient juga boleh digunakan.

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

Lihat Juga

Rangka kerja acara
Acara perniagaan Microsoft Dataverse
Mulakan dengan jadual maya (entiti)