ฟังก์ชัน Patch

นําไปใช้กับ: แอป พื้นที่ทํางาน Copilot Studio Desktop โฟลว์ แอป แบบจําลอง Power Platform CLI ฟังก์ชัน Dataverse

ปรับเปลี่ยนหรือสร้าง เรกคอร์ด ใน แหล่งข้อมูล หรือผสานเรกคอร์ดภายนอกแหล่งข้อมูลจำนวนหนึ่งหรือมากกว่า

Patchใช้ฟังก์ชันเพื่อปรับเปลี่ยนระเบียนในสถานการณ์ที่ซับซ้อน เช่น เมื่อคุณทําการอัปเดตที่จําเป็นต้องมีการโต้ตอบของผู้ใช้หรือใช้ฟอร์มที่ครอบคลุมหลายหน้าจอ

การอัปเดตเรกคอร์ดในแหล่งข้อมูล ง่ายขึ้นสำหรับการเปลี่ยนแปลงง่ายๆ ให้ใช้ตัวควบคุม แก้ไขฟอร์ม แทน เมื่อคุณเพิ่มตัวควบคุม แก้ไขฟอร์ม คุณได้ให้ฟอร์มแก่ผู้ใช้เพื่อกรอกข้อมูล แล้วบันทึกการเปลี่ยนแปลงไปยังแหล่งข้อมูล สำหรับข้อมูลเพิ่มเติม ให้ดู ทำความเข้าใจฟอร์มข้อมูล

ดูวิดีโอนี้เพื่อเรียนรู้วิธีการใช้ Patch ฟังก์ชัน:

Overview

Patchใช้ฟังก์ชันเพื่อปรับเปลี่ยนระเบียนของแหล่งข้อมูลอย่างน้อยหนึ่งระเบียน อัปเดตค่าของ ฟิลด์ เฉพาะโดยไม่ส่งผลกระทบต่อคุณสมบัติอื่นๆ ตัวอย่างเช่น สูตรนี้จะเปลี่ยนหมายเลขโทรศัพท์ให้ลูกค้าที่มีชื่อว่า Contoso:

Patch( Customers, LookUp( Customers, Name = "Contoso" ), { Phone: "1-212-555-1234" } )

ใช้กับ Patch ฟังก์ชัน Defaults เพื่อสร้างระเบียน ใช้ลักษณะการทำงานนี้เพื่อสร้าง หน้าจอเดียว สำหรับทั้งการสร้างและการแก้ไขเรกคอร์ด ตัวอย่างเช่น สูตรนี้จะสร้างเรกคอร์ดสำหรับลูกค้าที่มีชื่อว่า Contoso:

Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )

Note

เมื่อคุณแพตช์คอลเลกชันโดยใช้เรกคอร์ดจากแหล่งข้อมูลที่มีค่าเริ่มต้น การดําเนินการแพตช์จะอัปเดตคอลเลกชันด้วยทั้งค่าแพตช์ที่ระบุและค่าเริ่มต้นจากแหล่งข้อมูล แหล่งข้อมูลของคําสั่งแพตช์และแหล่งข้อมูลของฟังก์ชันค่าเริ่มต้นต้องตรงกันเพื่อสร้างเรกคอร์ดใหม่

แม้ว่าคุณจะไม่ได้กําลังทํางานกับแหล่งข้อมูล คุณสามารถใช้ Patch เพื่อผสานระเบียนสองระเบียนหรือมากกว่าได้ ตัวอย่างเช่น สูตรนี้รวมเรกคอร์ดสองเรกคอร์ดเป็นเรกคอร์ดเดียว ที่ระบุทั้งหมายเลขโทรศัพท์และตำแหน่งที่ตั้งสำหรับ Contoso:

Patch( { Name: "Contoso", Phone: "1-212-555-1234" }, { Name: "Contoso", Location: "Midtown" } )

Description

ปรับเปลี่ยนหรือสร้างเรกคอร์ดในแหล่งข้อมูล

การใช้ฟังก์ชันนี้กับแหล่งข้อมูล ให้ระบุแหล่งข้อมูลแล้วจึงระบุเรกคอร์ดพื้นฐาน:

  • เมื่อต้องการปรับเปลี่ยนเรกคอร์ด เรกคอร์ดพื้นฐานต้องมาจากแหล่งข้อมูล คุณอาจได้รับเรกคอร์ดพื้นฐานผ่านคุณสมบัติ รายการ ของแกลเลอรี วางไว้ใน ตัวแปรบริบท หรือรับผ่านเส้นทางอื่น แต่คุณต้องสามารถติดตามเรกคอร์ดพื้นฐานกลับไปยังแหล่งข้อมูลได้ ข้อกําหนดนี้มีความสําคัญเนื่องจากเรกคอร์ดมีข้อมูลเพิ่มเติมที่ช่วยให้คุณค้นหาเรกคอร์ดอีกครั้งเพื่อปรับเปลี่ยน
  • การสร้างเรกคอร์ด ใช้ฟังก์ชัน Defaults เพื่อสร้างเรกคอร์ดพื้นฐานโดยใช้ค่าเริ่มต้น

จากนั้น ระบุเรกคอร์ดที่เปลี่ยนแปลงอย่างน้อยหนึ่งหรือมากกว่า ซึ่งแต่ละเรกคอร์ดจะประกอบด้วยค่าคุณสมบัติใหม่ที่แทนค่าคุณสมบัติในเรกคอร์ดฐาน เรกคอร์ดที่เปลี่ยนแปลงจะถูกประมวลผลตามลำดับจากจุดเริ่มต้นของรายการอาร์กิวเมนต์ไปยังจุดสิ้นสุด โดยมีค่าคุณสมบัติล่าสุดแทนที่ก่อนหน้า

ค่าที่ส่งกลับของ Patch คือระเบียนที่คุณปรับเปลี่ยนหรือสร้างขึ้น ถ้าคุณสร้างระเบียน ค่าที่ส่งกลับอาจรวมถึงคุณสมบัติที่แหล่งข้อมูลที่สร้างขึ้นโดยอัตโนมัติ อย่างไรก็ตาม ค่าส่งกลับไม่ได้ระบุค่าสำหรับฟิลด์ของตารางที่เกี่ยวข้อง

ตัวอย่างเช่น คุณใช้ Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name")); จากนั้น MyAccount.'Primary Contact'.'Full Name' คุณไม่สามารถใช้ชื่อเต็มในกรณีนี้ หากต้องการเข้าถึงฟิลด์ของตารางที่เกี่ยวข้อง ให้ใช้การค้นหาแยกต่างหาก เช่น:

LookUp(Accounts, Account = MyAccount.Account).'Primary Contact'.'Full Name'

เมื่อคุณอัปเดตแหล่งข้อมูล อาจเกิดปัญหาอย่างน้อยหนึ่งหรือมากกว่าขึ้นได้ ใช้ IfError และ IsError ด้วยค่าที่ส่งกลับจาก Patch เพื่อตรวจหาและตอบสนองต่อข้อผิดพลาด ตามที่ การจัดการข้อผิดพลาด อธิบายไว้ คุณยังสามารถใช้ฟังก์ชัน Errors เพื่อระบุและตรวจสอบปัญหา ตามที่ การทำงานกับแหล่งข้อมูล อธิบายไว้

ฟังก์ชันที่เกี่ยวข้องรวมถึงฟังก์ชัน Update ซึ่งคุณสามารถใช้เพื่อแทนที่ทั้งเรกคอร์ด และฟังก์ชัน Collect ซึ่งคุณสามารถใช้เพื่อสร้างเรกคอร์ดได้ ใช้ฟังก์ชัน UpdateIf เพื่อปรับเปลี่ยนคุณสมบัติเฉพาะเจาะจงของเรกคอร์ดหลายเรกคอร์ด โดยยึดตามเงื่อนไขได้

ปรับเปลี่ยนหรือสร้างชุดของเรกคอร์ดในแหล่งข้อมูล

คุณยังสามารถใช้ Patch เพื่อสร้างหรือแก้ไขหลายเรกคอร์ดด้วยการเรียกครั้งเดียว

แทนที่จะส่งระเบียนฐานเดียว ให้ระบุตารางของระเบียนฐานในอาร์กิวเมนต์ที่สอง จัดเตรียมเรกคอร์ดการเปลี่ยนแปลงในตารางด้วย โดยสอดคล้องกับเรกคอร์ดพื้นฐานแบบตัวต่อหนึ่ง จำนวนเรกคอร์ดในตารางที่เปลี่ยนแปลงแต่ละตารางจะต้องเหมือนกับจำนวนเรกคอร์ดในตารางพื้นฐาน

เมื่อคุณใช้ใน Patch ลักษณะนี้ ค่าที่ส่งกลับจะเป็นตารางที่มีแต่ละเรกคอร์ดที่สอดคล้องกับเรกคอร์ดฐานและการเปลี่ยนแปลงแบบหนึ่งต่อหนึ่ง

ผสานเรกคอร์ดภายนอกแหล่งข้อมูล

ระบุเรกคอร์ดอย่างน้อยสองเรกคอร์ดหรือมากกว่าที่คุณต้องการผสาน ฟังก์ชันจะประมวลผลเรกคอร์ดตามลําดับตั้งแต่จุดเริ่มต้นของรายการอาร์กิวเมนต์จนถึงจุดสิ้นสุด โดยค่าคุณสมบัติในภายหลังจะแทนที่ค่าก่อนหน้านี้

Patch แสดงระเบียนที่ผสานและไม่ปรับเปลี่ยนอาร์กิวเมนต์หรือระเบียนของระเบียนในแหล่งข้อมูลใด ๆ

Syntax

ปรับเปลี่ยนหรือสร้างเรกคอร์ดในแหล่งข้อมูล

Patch( DataSource, BaseRecord, ChangeRecord1 [, ChangeRecord2, ... ])

  • DataSource – จำเป็น แหล่งข้อมูลที่ประกอบด้วยเรกคอร์ดที่คุณต้องการปรับเปลี่ยน หรือจะประกอบด้วยเรกคอร์ดที่คุณต้องการจะสร้าง
  • BaseRecord – จำเป็น จำเป็นต้องมี สำหรับปรับเปลี่ยนหรือสร้างขึ้น ถ้าเรกคอร์ดมาจากแหล่งข้อมูล ฟังก์ชันจะค้นหาและปรับเปลี่ยนเรกคอร์ด ถ้าใช้ผลลัพธ์ของ ค่าเริ่มต้น ฟังก์ชันจะสร้างเรกคอร์ด แหล่งข้อมูลของคําสั่งโปรแกรมแก้ไขและแหล่งข้อมูลของฟังก์ชัน Defaults ต้องตรงกันเพื่อสร้างเรกคอร์ดใหม่
  • ChangeRecords – จำเป็น เรกคอร์ดอย่างน้อยหนึ่งหรือมากกว่าที่มีคุณสมบัติ เพื่อปรับเปลี่ยนใน BaseRecord ฟังก์ชันจะประมวลผลเรกคอร์ดการเปลี่ยนแปลงตามลําดับจากจุดเริ่มต้นของรายการอาร์กิวเมนต์จนถึงจุดสิ้นสุด โดยค่าคุณสมบัติในภายหลังจะแทนที่ค่าก่อนหน้านี้

ปรับเปลี่ยนหรือสร้างชุดของเรกคอร์ดในแหล่งข้อมูล

Patch( DataSource, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, ... ] )

  • DataSource – จำเป็น แหล่งข้อมูลที่ประกอบด้วยเรกคอร์ดที่คุณต้องการปรับเปลี่ยน หรือจะประกอบด้วยเรกคอร์ดที่คุณต้องการจะสร้าง
  • BaseRecordTable – จำเป็น ตารางของเรกคอร์ดสำหรับปรับเปลี่ยนหรือสร้างขึ้น ถ้าเรกคอร์ดมาจากแหล่งข้อมูล ฟังก์ชันจะค้นหาและปรับเปลี่ยนเรกคอร์ด ถ้าใช้ผลลัพธ์ของ ค่าเริ่มต้น ฟังก์ชันจะสร้างเรกคอร์ด แหล่งข้อมูลของคําสั่งโปรแกรมแก้ไขและแหล่งข้อมูลของฟังก์ชัน Defaults ต้องตรงกันเพื่อสร้างเรกคอร์ดใหม่
  • ChangeRecordTables – จำเป็น ตารางของเรกคอร์ดอย่างน้อยหนึ่งหรือมากกว่าที่ประกอบด้วยคุณสมบัติเพื่อปรับเปลี่ยนสำหรับเรกคอร์ดแต่ละเรกคอร์ดของ BaseRecordTable ฟังก์ชันจะประมวลผลเรกคอร์ดการเปลี่ยนแปลงตามลําดับจากจุดเริ่มต้นของรายการอาร์กิวเมนต์จนถึงจุดสิ้นสุด โดยค่าคุณสมบัติในภายหลังจะแทนที่ค่าก่อนหน้านี้

Merge records

Patch( Record1, Record2 [, ...] )

  • บันทึก - จำเป็น เรกคอร์ดอย่างน้อยสองเรกคอร์ดหรือมากกว่าที่คุณต้องการผสาน ฟังก์ชันจะประมวลผลเรกคอร์ดตามลําดับตั้งแต่จุดเริ่มต้นของรายการอาร์กิวเมนต์จนถึงจุดสิ้นสุด โดยค่าคุณสมบัติในภายหลังจะแทนที่ค่าก่อนหน้านี้

Examples

ปรับเปลี่ยนหรือสร้างเรกคอร์ด (ในแหล่งข้อมูล)

ในตัวอย่างเหล่านี้ คุณปรับเปลี่ยนหรือสร้างเรกคอร์ดในแหล่งข้อมูลที่ชื่อ IceCream แหล่งข้อมูลประกอบด้วยข้อมูลในตารางนี้และสร้างค่าในคอลัมน์รหัสโดยอัตโนมัติ:

สกรีนช็อตของตารางตัวอย่างแหล่งข้อมูล IceCream ที่แสดงรสชาติและปริมาณ

เมื่อต้องการสร้างแหล่งข้อมูลนี้ในเวอร์ชันในหน่วยความจํา เพื่อให้คุณสามารถลองใช้ตัวอย่างเหล่านี้ ให้ประเมินสูตรนี้:

ClearCollect( IceCream,
    { ID: 1, Flavor: "Chocolate", Quantity: 100 },
    { ID: 2, Flavor: "Vanilla", Quantity: 200 }
)
Formula Description Result
Patch( ไอศกรีม,
LookUp( IceCream, Flavor = "ช็อคโกแลต" ), { ปริมาณ: 400 } )
ปรับเปลี่ยนเรกคอร์ดในแหล่งข้อมูล IceCream:
  • คอลัมน์ ID ของเรกคอร์ดที่จะปรับเปลี่ยน ประกอบด้วยค่าของ 1 (ในเรกคอร์ด ช็อกโกแลต มี ID นั้น)
  • ค่าในคอลัมน์ ปริมาณ จะเปลี่ยนแปลงเป็น 400
{ ID: 1, รสชาติ: "ช็อกโกแลต", ปริมาณ: 400 }

รายการ ช็อคโกแลต ในแหล่งข้อมูล IceCream ถูกแก้ไข
Patch( ไอศกรีม, Defaults( ไอศกรีม ), { รสชาติ: "สตรอเบอรี่" } ) สร้างเรกคอร์ดในแหล่งข้อมูล IceCream:
  • คอลัมน์ ID ประกอบด้วยค่า 3 ซึ่งสร้างแหล่งข้อมูลโดยอัตโนมัติ
  • คอลัมน์ ปริมาณ ประกอบด้วย 0 ซึ่งเป็นค่าเริ่มต้นสำหรับคอลัมน์นั้นในแหล่งข้อมูล IceCream ตามที่ฟังก์ชัน Defaults ระบุไว้
  • คอลัมน์ รสชาติ ประกอบด้วยค่าของ สตรอเบอรี่
{ ID: 3, รสชาติ: "สตรอเบอรี่", ปริมาณ: 0 }

รายการ สตรอเบอร์รี่ ในแหล่งข้อมูล IceCream ถูกสร้างขึ้น

หลังจากประเมินสูตรก่อนหน้านี้แล้ว แหล่งข้อมูลจะลงท้ายด้วยค่าเหล่านี้:

สกรีนช็อตของแหล่งข้อมูล IceCream หลังจาก Patch ประเมินสูตรแล้ว

ผสานเรกคอร์ด (ภายนอกแหล่งข้อมูล)

Formula Description Result
Patch( { ชื่อ: "James", Score: 90 }, { Name: "Jim", Passed: true } ) ผสานเรกคอร์ดสองเรกคอร์ดภายนอกแหล่งข้อมูล:
  • ค่าในคอลัมน์ ชื่อ ของแต่ละเรกคอร์ดไม่ตรงกัน ผลลัพธ์จะประกอบด้วยค่า (Jim) ในเรกคอร์ดที่ใกล้กับด้านท้ายของรายการอาร์กิวเมนต์แทนค่า (James) ในเรกคอร์ดที่ใกล้กับจุดเริ่มต้น
  • เรกคอร์ดแรกประกอบด้วยคอลัมน์ (คะแนน) ที่ไม่มีอยู่ในเรกคอร์ดที่สอง ผลลัพธ์ประกอบด้วยคอลัมน์ที่มีค่า (90)
  • เรกคอร์ดที่สองประกอบด้วยคอลัมน์ (Passed) ที่ไม่มีอยู่ในเรกคอร์ดแรก ผลลัพธ์ที่ประกอบด้วยคอลัมน์นั้นที่มีค่า (จริง)
{ ชื่อ: "Jim", Score: 90, Passed: true }

ปรับเปลี่ยนหรือสร้างชุดของเรกคอร์ด (ในแหล่งข้อมูล)

เมื่อคุณใช้กับ Patch ตารางแทนเรกคอร์ดเดียว คุณสามารถสร้างหรือปรับเปลี่ยนหลายเรกคอร์ดในการเรียกครั้งเดียวได้ ค่าที่ส่งกลับคือตารางของระเบียนที่สอดคล้องกับตารางอินพุตแบบหนึ่งต่อหนึ่ง

ตัวอย่างนี้จะอัปเดต ปริมาณ สําหรับหลายรสชาติในแหล่งข้อมูล IceCream พร้อมกัน:

Patch(
    IceCream,
    Table(
        { ID: 1, Flavor: "Chocolate", Quantity: 150 },
        { ID: 2, Flavor: "Vanilla", Quantity: 200 }
    ),
    Table(
        { Quantity: 300 },
        { Quantity: 400 }
    )
)

ผลลัพธ์คือตารางที่มีเรกคอร์ดที่อัปเดต: { ID: 1, Flavor: "Chocolate", Quantity: 300 } และ{ ID: 2, Flavor: "Vanilla", Quantity: 400 }

ตัวอย่างนี้สร้างเรกคอร์ดใหม่หลายเรกคอร์ดโดยใช้ ค่าเริ่มต้น:

Patch(
    IceCream,
    Table( Defaults( IceCream ), Defaults( IceCream ) ),
    Table(
        { Flavor: "Mint", Quantity: 60 },
        { Flavor: "Peach", Quantity: 80 }
    )
)

Note

เมื่อคุณใช้กับ Patch ตาราง จํานวนระเบียนในแต่ละตารางการเปลี่ยนแปลงจะต้องตรงกับจํานวนระเบียนในตารางฐาน มิฉะนั้น จะเกิดข้อผิดพลาด

เมื่อต้องการตรวจหาข้อผิดพลาดเมื่อคุณปรับเปลี่ยนหลายระเบียน ให้ใช้ IfError IfError เป็นกลไกที่ต้องการและทํางานกับโฮสต์ Power Fx:

IfError(
    Patch(
        IceCream,
        baseRecords,
        changeRecords
    ),
    Notify( "Some records failed to update: " & FirstError.Message, NotificationType.Error )
)

Patch ด้วยชนิดคอลัมน์ Dataverse

ตัวอย่างต่อไปนี้ใช้กับแหล่งข้อมูล Microsoft Dataverse โดยเฉพาะ รูปร่างของเรกคอร์ดจะแตกต่างกันไปตามแหล่งข้อมูล (ตัวอย่างเช่น SharePoint และ SQL Server มีรูปแบบที่แตกต่างกัน)

คอลัมน์ตัวเลือก: เมื่อต้องการตั้งค่าคอลัมน์ ตัวเลือก ให้ใช้ค่า enum โดยตรง ตัวอย่างนี้ตั้งค่าคอลัมน์ตัวเลือก สถานะ บนตาราง บัญชี :

Patch(
    Accounts,
    LookUp( Accounts, 'Account Name' = "Contoso" ),
    { 'Status': 'Status (Accounts)'.Active }
)

คอลัมน์การค้นหา: เมื่อต้องการตั้งค่าคอลัมน์ การค้นหา ให้ระบุเรกคอร์ดที่มีคีย์หลักของตารางที่เกี่ยวข้อง ตัวอย่างนี้ตั้งค่าการค้นหา ผู้ติดต่อหลัก ในเรกคอร์ด ลูกค้าองค์กร :

Patch(
    Accounts,
    LookUp( Accounts, 'Account Name' = "Contoso" ),
    { 'Primary Contact': LookUp( Contacts, 'Full Name' = "John Smith" ) }
)

Note

ตัวอย่างชนิดคอลัมน์เหล่านี้เป็นแบบเฉพาะ Dataverse แหล่งข้อมูลอื่นๆ เช่น SharePoint หรือ SQL Server อาจต้องใช้รูปร่างระเบียนที่แตกต่างกันสําหรับชนิดคอลัมน์ที่คล้ายกัน โปรดดูเอกสารประกอบสําหรับแหล่งข้อมูลเฉพาะของคุณสําหรับรูปแบบที่ถูกต้อง

การมอบหมายในสูตรที่ใช้ Patch

Patchฟังก์ชันเองไม่อยู่ภายใต้การมอบหมาย เนื่องจากจะเขียนไปยังแหล่งข้อมูลแทนที่จะคิวรี อย่างไรก็ตาม คําเตือนการมอบสิทธิ์อาจปรากฏในสูตรที่ใช้Patchถ้าส่วนการเลือกเรกคอร์ดของสูตร (เช่น ตัวกรอง การค้นหา หรือ ForAll) เกี่ยวข้องกับคิวรีที่เกินขีดจํากัดการมอบหมายแหล่งข้อมูล

เมื่อคุณเห็นคําเตือนการมอบหมายในสูตรที่มี Patchให้ตรวจสอบว่าคําเตือนนําไปใช้กับฟังก์ชันการดึงข้อมูลแทนที่จะใช้กับ Patch ตัวมันเองหรือไม่ สําหรับข้อมูลเพิ่มเติมเกี่ยวกับการมอบสิทธิ์ โปรดดู ทําความเข้าใจการมอบสิทธิ์ในแอปพื้นที่ทํางาน

ข้อผิดพลาดทั่วไปเกี่ยวกับ Patch ฟังก์ชัน

เมื่อคุณใช้ Patch ฟังก์ชัน ข้อผิดพลาดอาจเกิดขึ้นเนื่องจากการเชื่อมต่อแหล่งข้อมูล สิทธิ์ หรือความขัดแย้งของข้อมูล ใช้ IfError และ IsError เพื่อตรวจหาข้อผิดพลาดและตอบสนองอย่างเหมาะสม

  • "ข้อผิดพลาดของเครือข่ายเมื่อใช้ Patch ฟังก์ชัน": ข้อผิดพลาดนี้โดยทั่วไปจะบ่งชี้ว่าแอปไม่สามารถเข้าถึงแหล่งข้อมูลได้ สาเหตุที่พบบ่อย ได้แก่ การเชื่อมต่ออินเทอร์เน็ตขาดหาย แหล่งข้อมูลไม่พร้อมใช้งานชั่วคราว หรือสิทธิ์ไม่เพียงพอสําหรับผู้ใช้ปัจจุบัน ตัด Patch การโทรใน IfError เพื่อส่งข้อความที่มีความหมายแก่ผู้ใช้

  • "มีข้อขัดแย้งกับการเปลี่ยนแปลงบนเซิร์ฟเวอร์": ข้อผิดพลาดนี้เกิดขึ้นเมื่อผู้ใช้หรือกระบวนการอื่นแก้ไขระเบียนเดียวกันระหว่างเวลาที่แอปอ่านระเบียนและเขียนการเปลี่ยนแปลง รีเฟรชแหล่งข้อมูลโดยเรียกใช้ฟังก์ชัน รีเฟรช และลองดําเนินการอีกครั้ง

  • ข้อผิดพลาดของสิทธิ์: ถ้าผู้ใช้ไม่มีสิทธิ์ในการสร้างหรือแก้ไขเรกคอร์ดในแหล่งข้อมูลPatch ใช้ IfError เพื่อตรวจจับข้อผิดพลาดที่เกี่ยวข้องกับสิทธิ์และแนะนําผู้ใช้

สําหรับรูปแบบการจัดการข้อผิดพลาดทั่วไป โปรดดู การจัดการข้อผิดพลาด

การใช้ As หรือ ThisRecord

ใช้คําสําคัญ As หรือ ThisRecord ในสูตรของคุณเพื่อหลีกเลี่ยงบริบทการประเมินที่คลุมเครือ

ในตัวอย่างต่อไปนี้ ให้พิจารณาข้อแรกLookupในข้อความIf (OrderID = A[@OrderID]) คาดว่าจะเปรียบเทียบ OrderId ใน Lookup ขอบเขตกับ OrderId การรวบรวม A ใน ForAll ขอบเขต ในกรณีนี้ คุณอาจต้องการแก้ไข A[@OrderId] เป็นพารามิเตอร์ภายในเครื่อง แต่มันคลุมเครือ

ปัจจุบัน Power Apps ตีความทั้งด้านซ้ายมือ OrderId และด้านขวามือ A[@OrderId] เป็นฟิลด์ในขอบเขต Lookup ดังนั้น Lookup จะพบแถวแรกเสมอ [dbo].[Orders1] เพราะเงื่อนไขเป็นจริงเสมอ (นั่นคือ แถว OrderId ใดๆ เท่ากับตัวมันเอง)

ClearCollect(
    A,
    Filter(
        '[dbo].[Orders1]',
        OrderId = 8888888
    )
);
ForAll(
    A,
    If(
        LookUp(
            '[dbo].[Orders1]',
            OrderId = A[@OrderId],
            "OK"
        ) = "OK",
        Patch(
            '[dbo].[Orders1]',
            LookUp(
                '[dbo].[Orders1]',
                OrderId = A[@OrderId]
            ),
            {
      OrderName: "val1"
       }
   ),
   Patch(
            '[dbo].[Orders1]',
            Defaults('[dbo].[Orders1]'),
            {
      OrderName: "val2"
       }
   )
    )
)

การใช้ As หรือ ThisRecord

เมื่อใดก็ตามที่เป็นไปได้ ให้ใช้โอเปอเรเตอร์ As หรือคีย์เวิร์ด ThisRecord เพื่อแก้ความกํากวมทางด้านซ้ายมือ ตาม ที่แนะนําสําหรับสถานการณ์สมมติก่อนหน้านี้

เมื่อสูตรของคุณใช้หลายขอบเขตกับ ForAll, Filterและ Lookup บนแหล่งข้อมูลหรือตารางเดียวกัน พารามิเตอร์ขอบเขตอาจชนกับเขตข้อมูลเดียวกันที่อื่น ดังนั้น ให้ใช้ตัวดําเนินการ As หรือ ThisRecord เพื่อแก้ไขชื่อเขตข้อมูลและหลีกเลี่ยงความคลุมเครือ

ตัวอย่างเช่น คุณสามารถใช้ตัวดําเนินการ As เพื่อแก้ความกํากวมในตัวอย่างต่อไปนี้

ClearCollect(
    A,
    Filter(
        '[dbo].[Orders1]',
        OrderId = 8888888
    )
);
ForAll(
    A,
    If(
        LookUp(
            '[dbo].[Orders1]' As B,
            B.OrderId = A[@OrderId],
            "OK"
        ) = "OK",
        Patch(
            '[dbo].[Orders1]',
            LookUp(
                '[dbo].[Orders1]' As C,
                C.OrderId = A[@OrderId]
            ),
            {
      OrderName: "val1"
       }
   ),
   Patch(
            '[dbo].[Orders1]',
            Defaults('[dbo].[Orders1]'),
            {
      OrderName: "val2"
       }
   )
    )
)

หรือ คุณสามารถใช้ ThisRecord เพื่อจุดประสงค์เดียวกัน

ClearCollect(
    A,
    Filter(
        '[dbo].[Orders1]',
        OrderId = 8888888
    )
);
ForAll(
    A,
    If(
        LookUp(
            '[dbo].[Orders1]',
            ThisRecord.OrderId = A[@OrderId],
            "OK"
        ) = "OK",
        Patch(
            '[dbo].[Orders1]',
            LookUp(
                '[dbo].[Orders1]',
                ThisRecord.OrderId = A[@OrderId]
            ),
            {
      OrderName: "val1"
       }
   ),
   Patch(
            '[dbo].[Orders1]',
            Defaults('[dbo].[Orders1]'),
            {
      OrderName: "val2"
       }
   )
    )
)

เมื่อต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการใช้ตัวดําเนินการ As และ ThisRecord ให้ดูบทความ ตัวดําเนินการ