หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
เมื่อคุณใช้การดำเนินการใน Power Apps คุณจะพบค่าส่งคืนแบบไดนามิกหรือค่าอินพุตสำหรับการดำเนินการบางอย่าง ก่อนหน้านี้ Power Apps ละเว้นฟิลด์ป้อนข้อมูลแบบไดนามิกและไม่ปรากฏในนิพจน์ Power Fx ตอนนี้คุณทำงานโดยตรงกับฟิลด์เหล่านี้ ก่อนหน้านี้ เมื่อชนิดการส่งคืนเป็นแบบไดนามิก Power Apps จะส่งคืนค่าแบบบูลีน ตอนนี้ฟังก์ชันจะคืนค่าไดนามิกแทน
หมายเหตุ
หากนิพจน์ Power Fx ของคุณใช้ค่าส่งคืนแบบบูลีนจากฟังก์ชันเหล่านี้ ให้เขียนสูตรใหม่และแปลงค่าไดนามิกไปเป็นแบบบูลีนอย่างชัดเจน ฟังก์ชันบางอย่าง เช่น 'IfError' ยังไม่รองรับค่าไดนามิกทั้งหมด หากนิพจน์ของคุณใช้ฟังก์ชันใดฟังก์ชันหนึ่งเหล่านี้ ให้ดูหมายเหตุที่ส่วนท้ายของบทความนี้สำหรับวิธีแก้ปัญหา
การส่งผ่านค่าไดนามิกเป็นพารามิเตอร์
การดำเนินการบางอย่างจำเป็นต้องใช้ค่าไดนามิกเป็นพารามิเตอร์ ถ้าคุณมีเรกคอร์ด Power Fx ให้แปลงเป็นค่าไดนามิกเพื่อส่งต่อไปยังการดำเนินการ
ในตัวอย่างต่อไปนี้ การดำเนินการผสานในตารางบัญชีของ Dataverse ต้องมีอาร์กิวเมนต์แบบไดนามิกหลายอาร์กิวเมนต์ ในการเตรียม ให้กำหนดตัวแปรสามตัวเพื่อเก็บ TargetObject, SubordinateObject และ UpdateContextObject เริ่มต้นด้วยการกำหนดสตริงข้อความ Microsoft.Dynamics.CRM.account ให้กับตัวแปร ซึ่งคุณนำมาใช้ใหม่ได้ตลอดทั้งตัวอย่าง
Set (OdataType, “Microsoft.Dynamics.CRM.account”);
จากนั้นกำหนด TargetObject เป็นเรกคอร์ด Power Fx ที่มีคุณสมบัติชื่อ accountid และ @odata.type ในทำนองเดียวกัน กำหนดเรกคอร์ด Power Fx ให้กับออบเจ็กต์ Subordinate และ UpdateContext
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 });
จากนั้น สร้างตัวแปรอีกสามตัวเพื่อจัดเก็บเรกคอร์ดแบบไดนามิกหลังการแปลง: TargetDynamicValue, SubordinateDynamicValue และ UpdateContextDynamicValue ในการแปลง ให้ใช้ฟังก์ชัน ParseJSON(JSON()) กับตัวแปรดั้งเดิม การดำเนินการนี้จะแปลงเรกคอร์ด Power Fx เป็นค่าไดนามิก
Set (TargetDynamicValue, ParseJSON(JSON(TargetObject)));
Set (SubordinateDynamicValue, ParseJSON(JSON(SubordinateObject)));
Set (UpdateContextDynamicValue, ParseJSON(JSON(UpdateContextObject)));
สุดท้ายเรียกการดำเนินการผสานและส่งผ่านพารามิเตอร์ที่จำเป็นสำหรับทั้งประเภทไดนามิกและเฉพาะ:
Environment.Merge({Target: TargetDynamicValue, Subordinate: SubordinateDynamicValue, UpdateContent: UpdateContextDynamicValue, PerformParentingChecks: false });
การใช้ค่าไดนามิกที่ส่งกลับผ่านการดำเนินการ
หากตัวเชื่อมต่อตามการดำเนินการส่งคืนออบเจ็กต์ คุณสามารถเข้าถึงคุณสมบัติของออบเจ็กต์ได้โดยตรง แม้ว่าจะไม่มีชนิดก็ตาม แต่ถ้าคุณต้องการใช้คุณสมบัติสำหรับบางสิ่งที่เฉพาะเจาะจงใน Power Apps เช่น การติดฉลาก ให้แปลงข้อมูลก่อน
ในตัวอย่างนี้ ฟังก์ชัน httpRequest จะส่งคืนค่าไดนามิกที่แปลงเป็นแบบบูลีนอยู่แล้ว
Set (response, Office365Groups.HttpRequest("/v1.0/me", "GET", ""));
หนึ่งในคุณสมบัติในคำตอบคือ displayName ซึ่งสามารถเข้าถึงได้และส่งด้วยนิพจน์ Power Fx ดังต่อไปนี้:
Text(response.displayName)
ส่งไปยังออบเจ็กต์ ข้อความ เพื่อใช้ในตัวควบคุม label ของ Power Apps
การทำงานกับฟิลด์ไดนามิก
การตอบสนองการดำเนินการจะบันทึกเอาต์พุตแบบไดนามิก และคุณสามารถใช้วิธีการที่อธิบายไว้ข้างต้นเพื่อเข้าถึงคุณสมบัติเหล่านี้ คุณยังสามารถทำงานกับฟิลด์ป้อนข้อมูลแบบไดนามิกได้อีกด้วย
พิจารณาการดำเนินการ GetMessageDetails ใน Microsoft Teams ซึ่งมีพารามิเตอร์ body ที่เป็นอินพุตแบบไดนามิก ก่อนหน้านี้ คุณไม่สามารถดูหรือระบุพารามิเตอร์นี้ได้ ด้วยการอัปเดตล่าสุด ให้ตั้งค่าตัวแปรที่ชื่อ body ด้วยโครงสร้างเรกคอร์ด Power Fx ที่เหมาะสม
Set ( body, ParseJSON(JSON( {recipient: { groupID: “7f733b36-7c7f-4f4c-9699-0a7b7a2b3897”, channelID: “19: 085d522328fb4a439220641006f7f25@thread.tacv2”}})));
จากนั้น เราสามารถเรียกใช้การดำเนินการ GetMessageDetails และกำหนดการตอบกลับไปยังตัวแปร teamsResponse ได้
Set (teamsResponse, MicrosoftTeams.GetMessageDetails ( 1661365068558, “channel”, body ));
การแปลงสูตรที่เคยส่งคืนค่าแบบบูลีนให้ส่งกลับค่าไดนามิก
Power Fx ใช้ค่าไดนามิกในจำนวนจำกัด ดังนั้นการแปลงที่ชัดเจนอาจจำเป็นสำหรับสูตรของคุณ โดยเฉพาะอย่างยิ่ง หากสูตรของคุณขึ้นอยู่กับการตอบแบบบูลีน คุณต้องแปลง หากคุณต้องการทราบว่ามีข้อผิดพลาดอยู่หรือไม่ คุณสามารถใช้ฟังก์ชัน IsError:
If(
IsError(Office365Outlook.CalendarDeleteItemV2("Calendar", 1)),
Notify("An Outlook appointment could not be found or could not be deleted")
)
เมื่อต้องการเข้าถึงข้อมูลข้อผิดพลาดที่มีเฉพาะผ่าน IfError คุณต้องแปลงค่าไดนามิกเป็นชนิดเฉพาะโดยใช้ฟังก์ชันการแปลง เช่น แบบบูลีน ข้อความ หรือค่า ฟังก์ชันเหล่านี้จะสร้างข้อผิดพลาดหากมีการกำหนดไว้ ตัวอย่างต่อไปนี้แสดงให้เห็นถึงจุดนี้:
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)
) ) )