Bật Bảng ảo để hỗ trợ các sự kiện Dataverse

Bạn có thể cho phép các thực thể ảo tham gia vào các sự kiện quy trình Dataverse Event Framework không đồng bộ và trong trình kết nối PowerAutomate Dataverse Khi một hàng được thêm, trình kích hoạt sửa đổi hoặc xóa . Khả năng này được bật như một phần của sự kiện kinh doanh Dataverse. Thông tin thêm: Sự kiện kinh doanh Microsoft Dataverse

Nếu không có cấu hình được mô tả trong bài viết này, hầu hết các thực thể ảo không tham gia vào quy trình Khung sự kiện như các thực thể khác. Vì các thực thể ảo không tham gia vào quy trình sự kiện, bạn không thể đăng ký các bước bổ trợ đối với các sự kiện Tạo, Cập nhật và Xóa (CUD) xảy ra và mặc dù các sự kiện CUD xuất hiện cho các thực thể này trong trình kết nối Power Automate Dataverse, nhưng lỗi sẽ xảy ra khi mọi người cố gắng lưu dòng sử dụng chúng.

Điều này là do các thực thể ảo đại diện cho dữ liệu được lưu trữ trong nguồn bên ngoài. Dataverse có quyền truy cập vào nguồn dữ liệu đó với tư cách là máy khách, nhưng các hệ thống khác có thể cập nhật dữ liệu đó bất kỳ lúc nào mà không cần thông qua khung sự kiện Dataverse.

Có hai bước để kích hoạt tính năng này:

  1. Đặt cấu hình dữ liệu trong bảng có tên là Siêu dữ liệu thực thể ảo. Khi dữ liệu trong bảng này được định cấu hình để kích hoạt chúng, một tập hợp các API mới cung cấp phương tiện cho hệ thống bên ngoài thông báo cho Dataverse khi các sự kiện CUD xảy ra.

    Khi có hàng Siêu dữ liệu thực thể ảo được liên kết với Siêu dữ liệu thực thể. Metadataid đối với bảng ảo, ba cài đặt sau đây có thể kiểm soát liệu nguồn bên ngoài có thể thông báo cho bảng ảo của bạn hay không.

    Khi được kích hoạt riêng lẻ bằng cách sử dụng Siêu dữ liệu IsOnExternalCreatedEnabledthực thể ảo và IsOnExternalDeletedEnabledIsOnExternalUpdatedEnabled thuộc tính boolean, các Hành động liên kết sau đây sẽ có sẵn để được gọi bởi các dịch vụ bên ngoài.

    Hành động/Thông điệp Nội dung mô tả
    OnExternalCreated Chứa dữ liệu về bản ghi được tạo trong hệ thống bên ngoài được hiển thị dưới dạng bảng ảo trong Dataverse.
    OnExternalUpdated Chứa dữ liệu về bản ghi đã được cập nhật trong hệ thống bên ngoài được hiển thị dưới dạng bảng ảo trong Dataverse.
    OnExternalDeleted Chứa dữ liệu về bản ghi đã bị xóa trong hệ thống bên ngoài được hiển thị dưới dạng bảng ảo trong Dataverse.
  2. Hệ thống bên ngoài kiểm soát dữ liệu phải gửi yêu cầu HTTP đã xác thực đến Dataverse bằng cách sử dụng các API có dữ liệu trong Siêu dữ liệu Thực thể Ảo. Tài khoản dịch vụ chính được xác thực thường thực hiện lệnh gọi này. Thông tin khác: Xây dựng ứng dụng web bằng xác thực máy chủ đến máy chủ (S2S)

    Nhưng bất kỳ ứng dụng hoặc người dùng nào có thể thực hiện lệnh gọi đến Dataverse đều có thể gửi yêu cầu http cần thiết để thông báo cho Dataverse rằng sự kiện đã xảy ra.

Lưu ý

Các thực thể ảo sử dụng Nhà cung cấp OData và các nguồn ngày không liên quan có thể cho phép đăng ký một số bước plug-in nhất định, ví dụ như chỉ trên các sự kiện bên ngoài giao dịch. Nhưng những sự kiện này không có sẵn để sử dụng với trình kết nối Power Automate Dataverse. Không có thay đổi nào đối với hành vi này. Nhưng để thông báo sự kiện đáng tin cậy hơn, bạn nên sử dụng phương pháp được mô tả trong chủ đề này.

Cách bật API thông báo cho bảng ảo

Bạn có thể bật API thông báo bằng cách đặt cấu hình thủ công chúng trong cổng thông tin người tạo (make.powerapps.com/) hoặc sử dụng mã.

Bật thủ công bằng cổng thông tin người tạo

Giả sử chúng ta có một Bảng ảo Người với các thuộc tính này, thuộc tính Tên là new_People.

Các thuộc tính của bảng ảo new_people.

  1. Trong Power Apps (make.powerapps.com), trong giải pháp của bạn, hãy chọn +Mới rồi chọn Siêu dữ liệu thực thể ảo.

    Thêm siêu dữ liệu thực thể ảo mới vào giải pháp của bạn.

    Thao tác này sẽ mở ra biểu mẫu sau:

    virtualentitysiêu dữ liệu.

  2. Hoàn thành biểu mẫu, đặt giá trị Id thực thể mở rộng thành tên bảng ảo của bạn. Bạn không bắt buộc phải bật cả ba tin nhắn. Bạn có thể đặt một hoặc nhiều trong số chúng và quay lại để bật phần còn lại sau.

Khi bạn đã bật các thông báo này, bạn có thể quan sát và xác nhận những gì đã được thêm vào bằng cách sử dụng các bước trong Xem các thông báo được tạo để hỗ trợ bảng ảo của bạn.

Đặt thuộc tính được quản lý bằng cổng thông tin người tạo

Nếu bạn không muốn những người cài đặt giải pháp được quản lý của bạn thay đổi hành vi Siêu dữ liệu thực thể ảo, bạn nên đặt thuộc tính được quản lý để ngăn chặn bằng cách sử dụng các bước sau.

  1. Trong giải pháp của bạn, hãy chọn Siêu dữ liệu thực thể ảo và chọn dấu chấm lửng (...), sau đó chọn Thuộc tính được quản lý.

    Điều hướng đến Thuộc tính được quản lý.

  2. Trong ngăn Thuộc tính được quản lý, bỏ chọn Cho phép tùy chỉnh và nhấn Xong.

    Bỏ chọn Cho phép tùy chỉnh.

    Cài đặt này sẽ không làm bất cứ điều gì cho đến khi bản ghi Siêu dữ liệu thực thể ảo được đưa vào giải pháp được quản lý.

Bật bằng mã

Bạn có thể muốn tự động hóa việc tạo Siêu dữ liệu thực thể ảo cho các thực thể ảo của mình.

Bảng có VirtualEntityMetadata các cột sau mà bạn có thể đặt:

Tên lược đồ
Tên logic
Tên Hiển thị Loại Nội dung mô tả
ExtensionOfRecordId
extensionofrecordid
Thực thể ảo Tra cứu Tên của thực thể ảo mà các cài đặt này dành cho.
IsCustomizable
iscustomiable
Có thể tùy chỉnh Tài sản được quản lý Kiểm soát xem siêu dữ liệu thực thể ảo có thể được thay đổi hoặc xóa khi được đưa vào giải pháp được quản lý hay không.
IsOnExternalCreatedEnabled
isonexternalcreatedenabled
Bật tin nhắn tạo bên ngoài Boolean Cho phép thông báo gửi thông tin về các bản ghi mới được tạo trong nguồn dữ liệu bên ngoài.
IsOnExternalDeletedEnabled
isonexternaldeletedenabled
Bật thông báo xóa bên ngoài Boolean Cho phép thông báo gửi thông tin về các bản ghi đã xóa trong nguồn dữ liệu bên ngoài.
IsOnExternalUpdatedEnabled
isonexternalupdatedenabled
Bật thông báo cập nhật bên ngoài Boolean Cho phép thông báo gửi thông tin về các bản ghi được cập nhật trong nguồn dữ liệu bên ngoài.
Name
name
Tên String Tên của các tùy chọn cài đặt.
VirtualEntityMetadataId
virtualentitymetadataid
VirtualEntityMetadata Mã định danh duy nhất Mã định danh duy nhất cho các phiên bản thực thể

Khi tạo các loại thành phần giải pháp này, chúng tôi khuyên bạn nên đặt thuộc tính được quản lý IsCustomizable trừ false khi bạn muốn cho phép những người cài đặt giải pháp được quản lý của bạn có thể thay đổi các cài đặt này.

Chúng tôi cũng khuyên bạn nên thêm bản ghi Siêu dữ liệu thực thể ảo** vào một giải pháp cụ thể khi bạn tạo nó. Trong cả hai ví dụ bên dưới, bạn sẽ thấy cách chuyển yêu Solution.UniqueName cầu tạo bản ghi.

Sử dụng API Web

Khi bạn sử dụng API Web, nhiệm vụ đầu tiên là lấy bảng MetadataId ảo. Ví dụ sau đây trả về cho MetadataId một thực thể ảo có tên new_people.

Lời yêu cầu:

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]

Phản ứng:

HTTP/1.1 200 OK

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

Sau đó, tạo bản ghi siêu dữ liệu thực thể ảo trong khi liên kết bản ghi đó với Entity loại thực thể bằng cách sử dụng bản MetadataId ghi được truy xuất ở bước đầu tiên.

Lưu ý việc sử dụng MSCRM.SolutionUniqueName tiêu đề được đặt thành Solution.UniqueName giá trị. Thao tác này sẽ thêm bản ghi siêu dữ liệu thực thể ảo vào giải pháp khi nó được tạo. Thông tin thêm: Tiêu đề HTTP

Lời yêu cầu:

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

Phản ứng:

HTTP/1.1 204 No Content

Sử dụng SDK cho .NET

Bất kể bạn sử dụng các kiểu ràng buộc sớm hay muộn, nhiệm vụ đầu tiên là truy xuất bảng MetadataId được truy xuất theo cùng một cách cho cả hai trường hợp. Trong trường hợp này đối với một bảng ảo được đặt tên new_people bằng CrmServiceClient. Ngoài ra, bạn có thể sử dụng lớp này 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;

Sử dụng các loại ràng buộc sớm

Với các loại ràng buộc sớm, bạn có thể sử dụng lớp được VirtualEntityMetadata tạo bằng lệnh xây dựng mô hình Power Platform CLI pac. Thông tin thêm: Lập trình ràng buộc muộn và ràng buộc sớm bằng SDK cho .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,
};

Sử dụng các loại ràng buộc muộn

Có hai cách để khởi tạo phiên bản siêu dữ liệu thực thể ảo bằng cách sử dụng các loại ràng buộc muộn, một trong hai đều tương đương:

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;

Hoặc:

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

Tạo bản ghi

Khi tạo bản ghi, hãy sử dụng lớp CreateRequest thay vì phương thức IOrganizationService.Create để bạn có thể bao gồm SolutionUniqueName tham số tùy chọn để thêm bản ghi vào giải pháp của bạn khi bạn tạo bản ghi. Thông tin thêm: Chuyển các tham số tùy chọn với yêu cầu

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

service.Execute(createRequest);

Xem các thông báo được tạo để hỗ trợ bảng ảo của bạn

Một cách dễ dàng để xác minh rằng các thông báo bạn đã bật tồn tại là kiểm tra tài liệu dịch vụ $metadata API Web.

Bạn có thể thực hiện việc này trong trình duyệt của mình. Sử dụng Url cho tổ chức của bạn, nhập nội dung sau vào trình duyệt của bạn:

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

Đây là một tài liệu XML lớn, nhưng bạn có thể tìm kiếm 'OnExternalCreated' và tìm định nghĩa của hành động, trong trường hợp này là bảng new_people ảo.

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

Bạn có thể thấy rằng đây là một Hành động OData được liên kết với new_people tập hợp thực thể. Bạn sẽ tìm thấy các hành động tương tự cho OnExternalDeleted, và 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>

Xem tin nhắn bằng công cụ đăng ký plug-in

Khi đăng ký bước plug-in bằng công cụ đăng ký plug-in, bạn sẽ tìm thấy những thông báo này.

Đăng ký bước plugin trên thông báo OnExternalCreated cho thực thể new_people.

Sử dụng thông báo để thông báo cho Dataverse về các thay đổi

Để thông báo cho Dataverse về các thay đổi, bạn phải gọi API thích hợp. Bạn có thể sử dụng API Web Dataverse hoặc SDK cho .NET.

Trước khi sử dụng các thông báo này, bạn có thể muốn sử dụng quy trình mô tả trong Xem các thông báo được tạo để hỗ trợ bảng ảo của bạn để xác nhận rằng chúng tồn tại.

Sử dụng API Web

Vì các API này là các hành động OData được liên kết với một bộ sưu tập bảng, bạn có thể làm theo mẫu được ghi lại ở đây: Sử dụng các hành động> API Web Hành động liên kết Hành động> liên kết với một bộ sưu tập bảng. Sau đây là một số ví dụ cho thấy việc sử dụng new_people bảng ảo.

Nếu giá trị ID được hệ thống gọi biết thì giá trị đó phải luôn được đưa vào. Phiên bản thực thể được chuyển bằng Tham số mục tiêu phải có thuộc tính chú thích thích hợp @odata.type được đặt để xác định loại thực thể. Nếu không bao gồm thông tin này, lỗi sẽ được trả về.

Các lệnh gọi này phải luôn trả về 204: No Content.

OnExternalĐã tạo

Đối với hành động này, các giá trị phải bao gồm tất cả các thuộc tính được đặt khi bản ghi được tạo.

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

OnExternalCập nhật

Đối với hành động này, chỉ những thuộc tính đã thay đổi mới được đưa vào.

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

OnExternalĐã xóa

Đối với hành động này, chỉ cần mã định danh duy nhất cho bản ghi.

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

Sử dụng SDK cho .NET

Khi sử dụng SDK cho .NET, bạn có thể sử dụng các loại liên kết sớm hoặc muộn. Thông tin thêm: Lập trình ràng buộc muộn và ràng buộc sớm bằng SDK cho .NET

Các loại ràng buộc sớm

Ví dụ này sử dụng CrmServiceClient với các loại ràng buộc sớm, mặc dù ServiceClient cũng có thể được sử dụng.

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

Loại ràng buộc muộn

Ví dụ này sử dụng CrmServiceClient với các loại ràng buộc muộn, mặc dù ServiceClient cũng có thể được sử dụng.

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

Xem thêm

Khung sự kiện
Microsoft Dataverse sự kiện kinh doanh
Bắt đầu với bảng ảo (thực thể)