แชร์ผ่าน


ทำงานกับออบเจ็กต์ที่ไม่ได้ระบุชนิดและไดนามิก

เมื่อจัดการกับการดำเนินการใน Power Apps เป็นไปได้ที่จะพบค่าส่งคืนที่ไม่ได้ระบุชนิดหรือค่าอินพุตสำหรับการดำเนินการบางอย่าง ก่อนหน้า Power Apps จะละเว้นฟิลด์อินพุตที่ไม่ได้ระบุชนิดหรือไดนามิก และจะมองไม่เห็นในนิพจน์ PowerFX แต่ตอนนี้ คุณสามารถทำงานกับฟิลด์เหล่านี้ได้โดยตรง ก่อนหน้า เมื่อชนิดการส่งคืนเป็นชนิดที่ไม่ได้ระบุชนิด 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 }); 

ต่อไป เราจะสร้างตัวแปรอีกสามตัวเพื่อเก็บเรกคอร์ดที่ไม่ได้ระบุชนิดหลังจากการแปลง: TargetUntypedObject, SubordinateUntypedObject และ UpdateContextUntypedObject หากต้องการทำการแปลง เราจะใช้ฟังก์ชัน ParseJSON(JSON()) กับตัวแปรดั้งเดิม การดำเนินการนี้จะเปลี่ยนเรกคอร์ด Power Fx ให้เป็นออบเจ็กต์ที่ไม่ได้ระบุชนิด

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

สุดท้าย เราเรียกการดำเนินการผสานโดยการส่งพารามิเตอร์ที่จำเป็น รวมทั้งแบบที่ไม่ได้ระบุชนิดและแบบระบุชนิด:

Environment.Merge({Target: TargetUntypedObject, Subordinate: SubordinateUntypedObject, UpdateContent: UpdateContextUntypedObject, 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' ด้วยโครงสร้างเรกคอร์ด 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)
) ) )