Dataverse olaylarını desteklemek için Sanal Tabloları etkinleştirme

Sanal varlıkların eşzamansız Dataverse Olay Çerçevesi işlem hattı olaylarına ve PowerAutomate Dataverse bağlayıcısının Bir satır eklendiğinde, değiştirildiğinde veya silindiğinde tetikleyicisine katılmasına izin verebilirsiniz. Bu özellik Dataverse iş olaylarının bir parçası olarak etkinleştirilir. Daha fazla bilgi: Microsoft Dataverse iş olayları

Bu makalede açıklanan yapılandırma olmadan, sanal varlıkların çoğu diğer varlıklar gibi Event Framework işlem hattına katılmaz. Sanal varlıklar olay işlem hattına katılmadığından, oluşan Oluşturma, Güncelleştirme ve Silme (CUD) olaylarına karşı eklenti adımlarını kaydedemezsiniz ve Power Automate Dataverse bağlayıcısında bu varlıklar için CUD olayları görünse de, kullanıcılar bunları kullanan bir akışı kaydetmeye çalıştığında bir hata oluşur.

Bunun nedeni, sanal varlıkların dış kaynakta depolanan verileri temsil etmesidir. Dataverse'in bu veri kaynağına bir istemci olarak erişimi vardır, ancak diğer sistemler dataverse olay çerçevesinden geçmeden herhangi bir zamanda bu verileri güncelleştirebilir.

Bunu etkinleştirmek için iki adım vardır:

  1. Sanal Varlık Meta Verileri adlı bir tabloda verileri yapılandırma. Bu tablodaki veriler bunları etkinleştirecek şekilde yapılandırıldığında, bir dizi yeni API dış sistemin CUD olayları gerçekleştiğinde Dataverse'e bildirim göndermesi için araçlar sağlar.

    EntityMetadata.Metadataid ile ilişkilendirilmiş bir Sanal Varlık Meta Veri satırı bir Sanal tablo ile ilgili olduğunda, aşağıdaki üç ayar bir dış kaynağın sanal tablonuzu bilgilendirip bilgilendiremeyeceğini belirleyebilir.

    Sanal Varlık Meta Verileri IsOnExternalCreatedEnabled, IsOnExternalDeletedEnabledve IsOnExternalUpdatedEnabled boole özellikleri kullanılarak tek tek etkinleştirildiğinde, aşağıdaki ilişkili Eylemler dış hizmetler tarafından çağrılabilir hale gelir.

    Eylem/İleti Description
    OnExternalCreated Dataverse'de sanal tablo olarak kullanıma sunulan bir dış sistemde oluşturulmuş bir kayıtla ilgili verileri içerir.
    OnExternalUpdated Dataverse'de sanal tablo olarak kullanıma sunulan bir dış sistemde güncelleştirilmiş bir kayıtla ilgili verileri içerir.
    OnExternalDeleted Dataverse'de sanal tablo olarak kullanıma sunulan bir dış sistemde silinmiş bir kayıtla ilgili verileri içerir.
  2. Verileri denetleyen dış sistem, Sanal Varlık Meta Verilerinde veri içeren API'leri kullanarak Dataverse'e kimliği doğrulanmış bir HTTP isteği göndermelidir. Kimliği doğrulanmış bir hizmet sorumlusu hesabı genellikle bu çağrıyı gerçekleştirir. Daha fazla bilgi: Sunucudan sunucuya (S2S) kimlik doğrulamasını kullanarak web uygulamaları oluşturma

    Ancak Dataverse'e çağrı yapabilen herhangi bir uygulama veya kullanıcı, Olayın gerçekleştiğini Dataverse'e bildirmek için gereken http isteğini gönderebilir.

Uyarı

OData Sağlayıcısı ve ilişkisel olmayan tarih kaynaklarını kullanan sanal varlıklar, örneğin yalnızca işlem dışındaki olaylarda belirli eklenti adımı kayıtlarına izin verebilir. Ancak bu olaylar Power Automate Dataverse bağlayıcısı ile kullanılamaz. Bu davranışta bir değişiklik yoktur. Ancak daha güvenilir bir olay bildirimi için bu konuda açıklanan yaklaşım önerilir.

Sanal tablolar için bildirim API'lerini etkinleştirme

Bildirim API'lerini oluşturma portalında (make.powerapps.com/) el ile yapılandırarak veya kod kullanarak etkinleştirebilirsiniz.

Oluşturma portalını kullanarak el ile etkinleştirme

Bu özelliklere sahip bir Kişi Sanal Tablomuz olduğunu varsayalım, Name özelliği şeklindedir new_People.

new_people sanal tablosunun özellikleri.

  1. Power Apps'te (make.powerapps.com) çözümünüzde +Yeni'yi ve ardından Sanal Varlık Meta Verileri'ni seçin.

    Çözümünüze yeni bir virtualentitymetadata ekleyin.

    Bu, aşağıdaki formu açar:

    virtualentitymetadata formu.

  2. Uzantı Varlık Kimliği değerini sanal tablonuzun adına ayarlayarak formu doldurun. Üç iletiyi de etkinleştirmeniz gerekmez. Bunlardan birini veya daha fazlasını ayarlayabilir ve geri kalanları daha sonra etkinleştirmek için geri dönebilirsiniz.

Bu iletileri etkinleştirdiğinizde, Sanal tablonuzu desteklemek için oluşturulan iletileri görüntüleme bölümünde yer alan adımları kullanarak nelerin eklendiğini gözlemleyebilir ve onaylayabilirsiniz.

Oluşturucu portalını kullanarak yönetilen özellikleri ayarlama

Yönetilen çözümünüzü yükleyen kişilerin Sanal Varlık Meta Verileri davranışlarını değiştirmesini istemiyorsanız, yönetilen özelliği aşağıdaki adımları kullanarak engelleyecek şekilde ayarlamanız gerekir.

  1. Çözümünüzde Sanal Varlık Meta Verileri'ni seçin, üç noktayı (...) ve ardından Yönetilen Özellikler'i seçin.

    Yönetilen Özellikler'e gidin.

  2. Yönetilen Özellikler bölmesinde Özelleştirmelere İzin Ver'in seçimini kaldırın ve Bitti'ye basın.

    Özelleştirmelere İzin Ver'in seçimini kaldırın.

    Bu ayar, Sanal Varlık Meta Verileri kaydı yönetilen bir çözüme dahil edilene kadar hiçbir şey yapmaz.

Kodla etkinleştirme

Sanal varlıklarınız için Sanal Varlık Meta Verileri oluşturmayı otomatikleştirmek isteyebilirsiniz.

VirtualEntityMetadata Tabloda ayarlayabileceğiniz aşağıdaki sütunlar bulunur:

Şema Adı
Mantıksal Ad
Kolay Ad Türü Description
ExtensionOfRecordId
extensionofrecordid
Sanal Varlık Arama Bu ayarların ilgili olduğu sanal varlığın adı.
IsCustomizable
iscustomiable
Özelleştirilebilir ManagedProperty Yönetilen bir çözüme dahil edildiğinde sanal varlık meta verilerinin değiştirilip değiştirilemeyeceğini veya silinebileceğini denetler.
IsOnExternalCreatedEnabled
isonexternalcreatedenabled
Dış mesaj oluşturmayı etkinleştir Boolean Bir iletinin dış veri kaynağında oluşturulan yeni kayıtlar hakkında bilgi göndermesini sağlar.
IsOnExternalDeletedEnabled
isonexternaldeletedenabled
Dış silme iletisini etkinleştirme Boolean Bir iletinin dış veri kaynağındaki silinen kayıtlar hakkında bilgi göndermesini sağlar.
IsOnExternalUpdatedEnabled
isonexternalupdatedenabled
Dış güncelleştirme iletisini etkinleştirme Boolean Bir iletinin dış veri kaynağındaki güncelleştirilmiş kayıtlar hakkında bilgi göndermesini sağlar.
Name
name
İsim String Ayarların adı.
VirtualEntityMetadataId
virtualentitymetadataid
VirtualEntityMetadata Uniqueidentifier Varlık kurulumlarının benzersiz tanıtıcısı

Bu tür çözüm bileşenleri oluştururken, yönetilen çözümünüzü yükleyen kişilerin bu ayarları değiştirebilmesine izin vermek istemediğiniz sürece IsCustomizable yönetilen özelliğini olarak false ayarlamanızı öneririz.

Ayrıca, sanal varlık meta verileri** kaydını oluşturduğunuzda belirli bir çözüme eklemenizi öneririz. Aşağıdaki her iki örnekte de, kayıt oluşturan istekle Solution.UniqueName nasıl geçirildiğini göreceksiniz.

Web API'lerini kullanma

Web API'sini kullandığınızda, ilk görev sanal tablonun değerini almaktır MetadataId . Aşağıdaki örnek, new_people adlı bir sanal varlık için MetadataId döndürür.

İstek:

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]

Yanıt:

HTTP/1.1 200 OK

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

Daha sonra, ilk adımda alınan MetadataId'yi kullanarak sanal varlık meta verisi kaydını Entity varlık türüyle ilişkilendirerek oluşturun.

MSCRM.SolutionUniqueName başlığının Solution.UniqueName değerine ayarlandığına dikkat edin. Bu, sanal varlık meta veri kaydını oluşturulduktan sonra çözüme ekler. Daha fazla bilgi: HTTP üst bilgileri

İstek:

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

Yanıt:

HTTP/1.1 204 No Content

.NET için SDK kullanma

Erken veya geç bağlı türleri kullanmanızdan bağımsız olarak, ilk görev tablonun MetadataId değerini almaktır; bu, her iki durumda da aynı şekilde alınır. Bu örnekte, new_people adlı sanal tablo için CrmServiceClient kullanılıyor. Alternatif olarak, ServiceClient sınıfı kullanılabilir.

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;

Erken bağlanan türleri kullanma

Erken tanımlı türlerle, VirtualEntityMetadata Power Platform CLI pac modelbuilder build command kullanılarak oluşturulan sınıfı kullanabilirsiniz. Daha fazla bilgi: .NET için SDK kullanılarak geç bağlama ve erken bağlama programlama

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

Geç bağlı türleri kullanma

Geç bağlı türleri kullanarak sanal varlık meta veri örneğini oluşturmanın iki yolu vardır, ve her ikisi de eşdeğerdir.

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;

Veya:

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

Kayıt oluşturma

Kaydı oluştururken, IOrganizationService.Create yöntemi yerine CreateRequest Sınıfını kullanın, böylece kaydı oluştururken çözümünüze ekleyen isteğe bağlı parametreyi ekleyebilirsinizSolutionUniqueName. Daha fazla bilgi: İsteğe bağlı parametreleri istekle geçirme

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

service.Execute(createRequest);

Sanal tablonuzu desteklemek için oluşturulan iletileri görüntüleme

Etkinleştirdiğiniz iletilerin mevcut olduğunu doğrulamanın kolay bir yolu, Web API $metadata hizmet belgesini incelemektir.

Bunu tarayıcınızda yapabilirsiniz. Kuruluşunuzun Url'sini kullanarak tarayıcınıza aşağıdakileri yazın:

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

Bu büyük bir XML belgesidir, ancak sanal tablo için 'OnExternalCreated' araması yapabilir ve eylemin new_people tanımını bulabilirsiniz.

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

Bunun varlık kümesine new_people bağlı bir OData Eylemi olduğunu görebilirsiniz. Benzer eylemleri OnExternalDeleted ve OnExternalUpdated için bulacaksınız:

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

Eklenti kayıt aracını kullanarak iletileri görüntüleme

Eklenti kayıt aracını kullanarak bir eklenti adımını kaydettiğinizde, bu iletileri bulursunuz.

new_people varlığı için OnExternalCreated iletisine eklenti adımı kaydetme.

Dataverse'e değişiklikleri bildirmek için iletileri kullanma

Değişiklikleri Dataverse'e bildirmek için uygun API'yi çağırmanız gerekir. Dataverse Web API'sini veya .NET için SDK'sını kullanabilirsiniz.

Bu iletileri kullanmadan önce, sanal tablonuzu desteklemek için oluşturulan iletileri görüntüleme bölümünde açıklanan yordamı kullanarak var olduklarını onaylamak isteyebilirsiniz.

Web API'sini kullanma

Bu API'ler, bir tablo koleksiyonuna bağlı OData eylemleri olduğundan, burada belgelenen deseni izleyebilirsiniz: Web API eylemlerini kullanma> Tablo koleksiyonuna bağlı eylemler> Tablo koleksiyonuna bağlı eylemler. Aşağıda, sanal tablonun kullanımını gösteren bazı örnekler verilmiştir new_people .

Kimlik değeri çağrı sistemi tarafından biliniyorsa, her zaman dahil edilmelidir. Hedef Parametre kullanılarak geçirilen varlık örneği, varlık türünü tanımlamak için uygun @odata.type ek açıklama özelliğine sahip olmalıdır. Bu dahil değilse bir hata döndürülür.

Bu çağrılar 204: No Content'yi her zaman döndürmelidir.

OnExternalCreated

Bu eylem için değerler, kayıt oluşturulduğunda ayarlanan tüm özellikleri içermelidir.

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

Bu eylem için yalnızca değiştirilen özellikler dahil edilmelidir.

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

Bu eylem için yalnızca kaydın benzersiz tanımlayıcısı gereklidir.

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 için SDK kullanma

.NET için SDK'yı kullanırken erken veya geç bağlama türlerini kullanabilirsiniz. Daha fazla bilgi: .NET için SDK kullanılarak geç bağlama ve erken bağlama programlama

Erken bağlanan türler

Bu örnek, erken bağlı türlerle CrmServiceClient'ı kullanır, ancak ServiceClient kullanılabilir.

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

Geç bağlı türler

Bu örnek, geç bağlı türlerle CrmServiceClient'ı kullanır, ancak ServiceClient kullanılabilir.

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

Ayrıca Bkz.

Olay çerçevesi
Microsoft Dataverse İş etkinlikleri
Sanal tabloları (varlıklar) kullanmaya başlama