แชร์ผ่าน


การทำงานกับค่าไดนามิก

เมื่อคุณใช้การดำเนินการใน 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)
) ) )