Làm việc với các đối tượng động và chưa được phân loại

Khi xử lý các hành động trong Power Apps, có thể gặp phải các giá trị trả về hoặc giá trị đầu vào không có kiểu cho một số hành động. Trước đây, Power Apps sẽ bỏ qua các trường nhập liệu động hoặc không được gõ và chúng sẽ không hiển thị trong biểu thức PowerFX nhưng hiện tại, bạn có thể làm việc trực tiếp với các trường này. Trước đây, khi kiểu trả về không được gán kiểu, Power Apps sẽ trả về giá trị Boolean. Bây giờ, nó trả về đối tượng chưa được phân loại.

Lưu ý

Giả sử biểu thức Power Fx của bạn dựa vào giá trị trả về Boolean từ các hàm này. Trong trường hợp đó, bạn sẽ phải viết lại công thức và chuyển đổi rõ ràng đối tượng chưa được phân loại thành Boolean. Một số hàm, chẳng hạn như 'IfError', vẫn chưa hỗ trợ đầy đủ các đối tượng không có kiểu. Nếu biểu thức của bạn có chứa hàm như vậy, hãy tham khảo ghi chú ở cuối bài viết này để biết giải pháp thay thế.

Truyền vào các đối tượng không được gõ dưới dạng tham số

Một số hành động nhất định đòi hỏi phải có đối tượng chưa được phân loại làm giá trị tham số. Nếu bạn có Power Fx bản ghi, bạn có thể chuyển đổi nó thành đối tượng chưa được phân loại, làm cho nó phù hợp để truyền vào hành động.

Trong ví dụ bên dưới, hành động hợp nhất có sẵn trên bảng Dataverse Tài khoản yêu cầu một số đối số không có kiểu. Để chuẩn bị, chúng ta sẽ định nghĩa ba biến để chứa TargetObject, SubordinateObject và UpdateContextObject. Chúng ta sẽ bắt đầu bằng cách gán chuỗi văn bản Microsoft.Dynamics.CRM.account cho một biến, biến này sẽ được sử dụng lại trong suốt ví dụ.

Set (OdataType, “Microsoft.Dynamics.CRM.account”);

Sau đó TargetObject được gán một bản ghi có các thuộc tính là tên, id tài khoản và Power Fx . @odata.type Tương tự như vậy, chúng tôi cũng gán các bản ghi cho các đối tượng Subordinate và UpdateContext. Power Fx

Set (TargetObject, {name: "Test 2", accountid: "145dc2ba-85a2-ed11-aado-0022482d76a5", '@odata.type': OdataType});
Set (SubordinateObject, {name: FirstRecord.’Account name’, accountid: FirstRecord.Account, ‘@odata.type’ : OdataType });
Set (UpdateContextObject, {telephone1: FirstRecord.’Main Phone’, address1_city: FirstRecord.’Address 1 : City’, ‘@odata.type’ : OdataType }); 

Tiếp theo, chúng ta sẽ tạo thêm ba biến để lưu trữ các bản ghi chưa được gõ sau khi chuyển đổi: TargetUntypedObject, SubordinateUntypedObject và UpdateContextUntypedObject. Để thực hiện chuyển đổi, chúng ta sẽ sử dụng hàm ParseJSON(JSON()) trên các biến ban đầu. Hành động này sẽ chuyển đổi các bản ghi thành các đối tượng không có kiểu. Power Fx

Set (TargetUntypedObject, ParseJSON(JSON(TargetObject)));
Set (SubordinateUntypedObject, ParseJSON(JSON(SubordinateObject)));
Set (UpdateContextUntypedObject, ParseJSON(JSON(UpdateContextObject)));

Cuối cùng, chúng ta gọi hành động hợp nhất bằng cách truyền vào các tham số cần thiết, bao gồm cả tham số không có kiểu và có kiểu:

Environment.Merge({Target: TargetUntypedObject, Subordinate: SubordinateUntypedObject, UpdateContent: UpdateContextUntypedObject, PerformParentingChecks: false  });

Sử dụng đối tượng chưa được phân loại được trả về thông qua một hành động

Nếu một trình kết nối dựa trên Hành động trả về một đối tượng, thì có thể truy cập trực tiếp vào các thuộc tính của đối tượng đó, bất kể chúng có được gán loại hay không. Tuy nhiên, nếu bạn định sử dụng một thuộc tính cho một mục đích cụ thể trong Power Apps, chẳng hạn như để gắn nhãn, trước tiên bạn cần phải ép kiểu cho thuộc tính đó.

Trong ví dụ sau, hàm httpRequest trả về đối tượng chưa được phân loại trước đó đã được ép kiểu thành Boolean.

Set (response, Office365Groups.HttpRequest("/v1.0/me", "GET", ""));

Một trong những thuộc tính trong phản hồi là displayName. Nó có thể được truy cập và chuyển đổi bằng biểu thức như sau: Power Fx

Text(response.displayName)

Chuyển đổi sang đối tượng Văn bản để sử dụng trong điều khiển nhãn Power Apps .

Làm việc với các trường động

Phản hồi hành động hiện nắm bắt đầu ra động và bạn có thể sử dụng phương pháp được mô tả ở trên để truy cập các thuộc tính này. Ngoài ra, bạn cũng có thể làm việc với các trường nhập liệu động.

Hãy xem xét hành động 'GetMessageDetails' trong Microsoft Teams có tham số thân đầu vào động. Trước đây, không thể xem hoặc chỉ định tham số này. Với bản cập nhật gần đây, bạn có thể thiết lập một biến có tên là 'body' với cấu trúc bản ghi phù hợp. Power Fx

Set ( body, ParseJSON(JSON( {recipient: { groupID: “7f733b36-7c7f-4f4c-9699-0a7b7a2b3897”, channelID: “19: 085d522328fb4a439220641006f7f25@thread.tacv2”}}));

Sau đó, chúng ta có thể gọi hành động GetMessageDetails và gán phản hồi cho biến teamsResponse.

Set (teamsResponse, MicrosoftTeams.GetMessageDetails ( 1661365068558, “channel”, body ));

Chuyển đổi các công thức trả về các đối tượng không có kiểu trước đó trả về Boolean.

Power Fx sử dụng một số lượng giới hạn các đối tượng không có kiểu nên có thể cần chuyển đổi rõ ràng cho công thức của bạn. Đặc biệt, nếu công thức của bạn phụ thuộc vào Boolean phản hồi thì bạn sẽ cần phải chuyển đổi. Nếu bạn chỉ cần biết lỗi có tồn tại hay không, bạn có thể sử dụng hàm IsError:

If(
  IsError(Office365Outlook.CalendarDeleteItemV2("Calendar", 1)),
  Notify("An Outlook appointment could not be found or could not be deleted")
)

Để truy cập thông tin lỗi chỉ có thông qua IfError, bạn phải chuyển đổi đối tượng chưa được phân loại thành kiểu hợp lệ bằng cách sử dụng hàm chuyển đổi như Boolean, Text hoặc Value. Các hàm này sẽ tạo ra lỗi nếu chúng được cung cấp một lỗi. Ví dụ sau đây minh họa điều này:

With({result: Office365Outlook.CalendarDeleteItemV2("Calendar", 1)},
If( IsError(result),
  IfError(
    Boolean(result),  // any conversion function would do, such as Text, Value, …
    Notify("An Outlook appointment could not be found or could not be deleted: " & FirstError.Message)
) ) )