Menggunakan objek tidak bertipe dan dinamis

Saat menangani tindakan dalam Power Apps, dimungkinkan untuk menemukan nilai pengembalian yang tidak diketik atau nilai input untuk beberapa tindakan. Sebelumnya, Power Apps akan mengabaikan bidang input yang tidak diketik atau dinamis, dan mereka tidak akan terlihat dalam ekspresi PowerFX tetapi sekarang, Anda dapat bekerja secara langsung dengan bidang ini. Sebelumnya, ketika tipe pengembalian tidak diketik, Power Apps akan mengembalikan nilai Boolean. Sekarang, ia mengembalikan objek yang tidak diketik sebagai gantinya.

Catatan

Misalkan ekspresi Anda Power Fx bergantung pada nilai pengembalian Boolean dari fungsi-fungsi ini. Dalam hal ini, Anda harus menulis ulang rumus dan secara eksplisit melemparkan objek yang tidak diketik ke Boolean. Fungsi tertentu, seperti 'IfError,' belum sepenuhnya mendukung objek yang belum diketik. Jika ekspresi Anda berisi fungsi seperti itu, lihat catatan di akhir artikel ini untuk solusi.

Meneruskan objek yang tidak diketik sebagai parameter

Tindakan tertentu memerlukan objek yang tidak diketik sebagai nilai parameter. Jika Anda memiliki Power Fx catatan, Anda dapat mengonversinya menjadi objek yang tidak diketik, sehingga cocok untuk diteruskan ke tindakan.

Dalam contoh di bawah ini, tindakan penggabungan yang tersedia di tabel Akun Dataverse memerlukan beberapa argumen yang tidak diketik. Untuk mempersiapkan, kita akan mendefinisikan tiga variabel untuk menahan TargetObject, SubordinateObject, dan UpdateContextObject. Kita akan mulai dengan menetapkan string teks Microsoft.Dynamics.CRM.account ke variabel, yang akan digunakan kembali di seluruh contoh.

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

Kemudian TargetObject diberi Power Fx catatan dengan properti name, accountid, dan @odata.type. Kami juga menetapkan Power Fx catatan ke objek Subordinate dan UpdateContext juga.

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

Selanjutnya, kita akan membuat tiga variabel lagi untuk menyimpan catatan yang tidak diketik setelah konversi: TargetUntypedObject, SubordinateUntypedObject, dan UpdateContextUntypedObject. Untuk melakukan konversi, kita akan menggunakan fungsi ParseJSON(JSON()) pada variabel asli. Tindakan ini akan mengubah rekaman menjadi objek yang Power Fx tidak diketik.

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

Terakhir, kami memanggil tindakan penggabungan dengan meneruskan parameter yang diperlukan, termasuk untuk yang tidak diketik dan diketik:

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

Menggunakan objek yang tidak diketik yang dikembalikan melalui tindakan

Jika konektor berbasis Tindakan mengembalikan objek, propertinya dapat diakses secara langsung, terlepas dari apakah objek tersebut telah diberi jenis atau tidak. Namun, jika Anda berniat menggunakan properti untuk tujuan Power Apps tertentu, seperti untuk pelabelan, Anda harus melemparkannya terlebih dahulu.

Dalam contoh berikut, fungsi httpRequest mengembalikan objek yang tidak diketik yang sebelumnya telah ditransmisikan sebagai Boolean.

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

Salah satu properti dalam respons adalah displayName. Itu dapat diakses, dan dilemparkan, dengan Power Fx ekspresi seperti berikut:

Text(response.displayName)

Transmisikan ke objek Teks untuk menggunakannya dalam Power Apps kontrol label.

Bekerja dengan bidang Dinamis

Respons tindakan sekarang menangkap output dinamis, dan Anda dapat menggunakan metode yang dijelaskan di atas untuk mengakses properti ini. Selain itu, bekerja dengan bidang input dinamis juga dimungkinkan.

Pertimbangkan tindakan 'GetMessageDetails' yang Microsoft Teams memiliki parameter isi input dinamis. Sebelumnya, parameter ini tidak dapat dilihat atau ditentukan. Dengan pembaruan terbaru, Anda dapat mengatur variabel yang disebut 'body' dengan struktur catatan yang sesuai Power Fx .

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

Kemudian, kita dapat memanggil tindakan GetMessageDetails dan menetapkan respons ke variabel teamsResponse.

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

Mengonversi rumus yang mengembalikan objek yang tidak diketik yang sebelumnya mengembalikan Boolean.

Power Fx mengambil sejumlah objek yang tidak diketik sehingga konversi eksplisit mungkin diperlukan untuk rumus Anda. Secara khusus, jika rumus Anda bergantung pada respons Boolean maka Anda perlu mengonversi. Jika Anda hanya perlu mengetahui apakah ada kesalahan, Anda dapat menggunakan fungsi IsError:

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

Untuk mengakses informasi kesalahan yang tersedia secara eksklusif melalui IfError, Anda harus mengubah objek yang tidak diketik menjadi jenis yang valid menggunakan fungsi konversi seperti Boolean, Teks, atau Nilai. Fungsi-fungsi ini akan menghasilkan kesalahan jika diberikan. Contoh berikut, menggambarkan hal ini:

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