ฟังก์ชัน AsType และ IsType
ใช้กับ: แอปพื้นที่ทำงาน แอปแบบจำลอง Power Pages Power Platform CLI
ตรวจสอบการอ้างอิงเรกคอร์ดสำหรับประเภทตารางเฉพาะ (IsType) และถือว่าการอ้างอิงเป็นชนิด (AsType)
หมายเหตุ
คำสั่ง PAC CLI pac power-fx ไม่รองรับ IsType
Description
ฟังก์ชัน AsType และ IsType สามารถใช้เพื่อแปลงการอ้างอิงเรกคอร์ด (ตัวอย่างเช่น การค้นหาแบบโพลีมอร์ฟิกใน Dataverse) และออบเจ็กต์ที่ไม่ได้ระบุชนิดเป็นออบเจ็กต์ที่ระบุชนิดซึ่งสามารถใช้ได้โดยตรง
การอ้างอิงเรกคอร์ด
อ่าน ทำความเข้าใจการอ้างอิงเรกคอร์ดและการค้นหา polymorphic สำหรับการแนะนำที่กว้างขึ้นและรายละเอียดเพิ่มเติม
ฟิลด์การค้นหามักจะอ้างอิงถึงเรกคอร์ดในตารางใดตารางหนึ่ง เนื่องจากชนิดของตารางมีการกำหนดไว้อย่างดี จึงสามารถเข้าถึงฟิลด์ของการค้นหาได้โดยใช้เครื่องหมายจุดอย่างง่าย ตัวอย่างเช่น First( Accounts ).'Primary Contact'.'Full Name' เริ่มจากตาราง บัญชีลูกค้าองค์กร ไปที่เรกคอร์ด ผู้ติดต่อหลัก ในตาราง ผู้ติดต่อ และแยกฟิลด์ ชื่อเต็ม
Microsoft Dataverse ยังสนับสนุนฟิลด์การค้นหาแบบ polymorphic ซึ่งสามารถอ้างถึงเรกคอร์ดจากชุดของตารางได้ดังในตัวอย่างเหล่านี้
ฟิลด์การค้นหา | สามารถอ้างอิงไปยัง |
---|---|
เจ้าของ | ผู้ใช้ หรือ Teams |
ลูกค้า | บัญชี หรือ ผู้ติดต่อ |
เกี่ยวกับ | บัญชีผู้ติดต่อบทความความรู้ ฯลฯ |
ในสูตรพื้นที่ทำงาน ให้ใช้การอ้างอิงเรกคอร์ดเพื่อทำงานกับการค้นหาแบบหลายรูปแบบ เนื่องจากการอ้างอิงเรกคอร์ดสามารถอ้างอิงถึงตารางต่างๆ จึงไม่ทราบแน่ชัดว่าฟิลด์ใดจะพร้อมใช้งานขณะรันไทม์เมื่อคุณเขียนสูตร เครื่องหมาย Record.Field ไม่สามารถใช้ได้ สูตรเหล่านั้นจะต้องปรับให้เข้ากับเรกคอร์โที่แอปพบเมื่อทำงาน
ฟังก์ชัน IsType จะทดสอบว่าการอ้างอิงฟังก์ชันอ้างอิงถึงชนิดตารางเฉพาะหรือไม่ ฟังก์ชันส่งคืน Boolean TRUE หรือ FALSE
ฟังก์ชัน AsType ถือว่าการอ้างอิงเรกคอร์ดเป็นชนิดตารางเฉพาะ หรือที่เรียกว่า การคัดเลือกตัวแสดง คุณสามารถใช้ผลลัพธ์ราวกับว่าเป็นเรกคอร์ดของตารางและใช้สัญกรณ์ Record.Field อีกครั้งเพื่อเข้าถึงฟิลด์ทั้งหมดของเรกคอร์ดนั้น ข้อผิดพลาดเกิดขึ้นหากการอ้างอิงไม่ได้เป็นประเภทที่เฉพาะเจาะจง
ใช้ฟังก์ชันเหล่านี้ร่วมกันเพื่อทดสอบชนิดตารางของเรกคอร์ดก่อน แล้วจึงถือว่าเป็นเรกคอร์ดชนิดนั้นเพื่อให้มีฟิลด์ต่างๆ
If( IsType( First( Accounts ).Owner, Users ),
AsType( First( Accounts ).Owner, Users ).'Full Name',
AsType( First( Accounts ).Owner, Teams ).'Team Name'
)
ฟังก์ชันเหล่านี้จำเป็นเฉพาะเมื่อคุณเข้าถึงฟิลด์ของการอ้างอิงเรกคอร์ด ตัวอย่างเช่น คุณสามารถใช้การอ้างอิงเรกคอร์ดในฟังก์ชัน Filter โดยไม่มี isType หรือ AsType:
Filter( Accounts, Owner = First( Users ) )
ในทำนองเดียวกัน คุณสามารถใช้การอ้างอิงเรกคอร์ดด้วยฟังก์ชัน Patch:
Patch( Accounts, First( Accounts ), { Owner: First( Teams ) } )
เมื่อใช้ในบริบทเรกคอร์ด เช่น ภายในตัวควบคุม Gallery หรือ Edit form อาจต้องใช้ ตัวดำเนินการแก้ความกำกวมส่วนกลาง เพื่ออ้างอิงชนิดตาราง ตัวอย่างเช่น สูตรนี้จะมีผลบังคับใช้กับแกลเลอรีที่แสดงรายการผู้ติดต่อที่ ชื่อบริษัท เป็นการค้นหา ลูกค้า:
If( IsType( ThisItem.'Company Name', Accounts ),
AsType( ThisItem.'Company Name', Accounts ).'Account Name',
AsType( ThisItem.'Company Name', Contacts ).'Full Name'
)
สำหรับทั้งสองฟังก์ชัน ให้ระบุชนิดโดยใช้ชื่อของแหล่งข้อมูลที่เชื่อมต่อกับตาราง เพื่อให้สูตรทำงานได้ คุณต้องเพิ่มแหล่งข้อมูลลงในแอปสำหรับประเภทใดๆ ที่คุณต้องการทดสอบหรือคำนวณ ตัวอย่างเช่น คุณต้องเพิ่มตาราง ผู้ใช้ เป็นแหล่งข้อมูล หากคุณต้องการใช้ IsType และ AsType ด้วยการค้นหาและเรกคอร์ด เจ้าของ จากตารางนั้น คุณสามารถเพิ่มได้เฉพาะแหล่งข้อมูลที่คุณใช้จริงในแอปของคุณเท่านั้น คุณไม่จำเป็นต้องเพิ่มตารางทั้งหมดที่การค้นหาสามารถอ้างอิงได้
หากเรกคอร์ดอ้างอิง ว่างเปล่าIsType ส่งคืน FALSE และ AsType ส่งคืน ว่างเปล่า ทุกฟิลด์เรกคอร์ด ว่างเปล่า จะเป็น ว่างเปล่า ด้วย
ออบเจ็กต์ที่ไม่ได้ระบุชนิด
สำคัญ
- การใช้ AsType และ IsType กับออบเจ็กต์ที่ไม่ได้ระบุชนิดเป็นคุณลักษณะการทดลอง
- คุณลักษณะทดลองไม่ได้มีไว้สำหรับการนำไปใช้งานจริงและอาจไม่สมบูรณ์ คุณลักษณะเหล่านี้สามารถใช้ได้ก่อนการเปิดตัวอย่างเป็นทางการเพื่อให้คุณสามารถเข้าใช้งานได้ก่อนเวลาและให้ข้อคิดเห็น ข้อมูลเพิ่มเติม: ทำความเข้าใจคุณลักษณะทดลอง แสดงตัวอย่าง และเลิกใช้แล้วในแอปพื้นที่ทำงาน
- ลักษณะการทำงานที่อธิบายในบทความนี้ใช้ได้เฉพาะเมื่อคุณเปิดคุณลักษณะทดลอง ชนิดที่ผู้ใช้กำหนด ใน การตั้งค่า > คุณลักษณะที่กำลังจะมา > การทดลอง (ปิดอยู่โดยค่าเริ่มต้น)
- ความคิดเห็นของคุณมีค่าสำหรับเรา บอกให้เราทราบว่าคุณคิดอย่างไรใน ฟอรัมชุมชนของคุณลักษณะทดลอง Power Apps
ออบเจ็กต์ที่ไม่ได้ระบุชนิดจาก Web API หรือฟังก์ชัน [ParseJSON] จะต้องแปลงเป็นออบเจ็กต์ที่ไม่ได้ระบุชนิดก่อนจึงจะสามารถใช้งานใน Power Fx ได้ ตัวเลือกในการทำเช่นนี้ ได้แก่ :
- กำหนดชนิดฟิลด์ในจุดที่ใช้โดยนัย ตัวอย่างเช่น ออบเจ็กต์จะถูกแปลงเป็นตัวเลขหากใช้กับตัวดำเนินการ
+
หากสามารถแปลงเป็นตัวเลขได้ ตัวเลือกนี้อาจมีการแปลงที่ไม่คาดคิดและไม่สามารถแปลงข้อมูลและตารางโดยรวมได้ - กำหนดชนิดข้อมูลแต่ละฟิลด์แยกกันอย่างชัดเจนด้วยฟังก์ชัน ทศนิยม, ข้อความ, วันที่เวลา, GUID และฟังก์ชันตัวอย่างชนิดอื่น ซึ่งเป็นส่วนที่มีผลกระทบมากที่สุดกับสูตรของคุณ เนื่องจากต้องทำกับแต่ละรายการแยกกัน
- กำหนดชนิด JSON อย่างชัดเจนด้วยอาร์กิวเมนต์ที่สองให้กับฟังก์ชัน ParseJSON นี่เป็นตัวเลือกง่าย ๆ ที่ไม่จำเป็นต้องใช้วัตถุที่ไม่ได้พิมพ์
- กำนดชนิดออบเจ็กต์ที่ไม่ได้ระบุชนิดอย่างชัดเจนโดยใช้ฟังก์ชัน AsType คุณยังสามารถทดสอบชนิดก่อนที่จะพยายามแปลงด้วยฟังก์ชัน IsType
ไวยากรณ์
AsType( RecordReference, TableType )
- RecordReference - จำเป็น การอ้างอิงเรกคอร์ด ซึ่งมักจะเป็นฟิลด์การค้นหาที่สามารถอ้างอิงถึงเรกคอร์ดในตารางใดก็ได้
- TableType - จำเป็น ตารางเฉพาะที่ควรส่งบันทึก
AsType( UntypedObject, TypeSpecification )
- UntypedObject - จำเป็น การอ้างอิงเรกคอร์ด ซึ่งมักจะเป็นฟิลด์การค้นหาที่สามารถอ้างอิงถึงเรกคอร์ดในตารางใดก็ได้
- TypeSpecification - จำเป็น ชื่อชนิดหรือข้อกำหนดเฉพาะของชนิดที่กำหนดด้วยฟังก์ชัน Type
IsType( RecordReference, TableType )
- RecordReference - จำเป็น การอ้างอิงเรกคอร์ด ซึ่งมักจะเป็นฟิลด์การค้นหาที่สามารถอ้างอิงถึงเรกคอร์ดในตารางใดก็ได้
- TableType - จำเป็น ตารางเฉพาะที่จะทดสอบ
IsType( UntypedObject, TypeSpecification )
- UntypedObject - จำเป็น การอ้างอิงเรกคอร์ด ซึ่งมักจะเป็นฟิลด์การค้นหาที่สามารถอ้างอิงถึงเรกคอร์ดในตารางใดก็ได้
- TypeSpecification - จำเป็น ชื่อชนิดหรือข้อกำหนดเฉพาะของชนิดที่กำหนดด้วยฟังก์ชัน Type
ตัวอย่าง
การอ้างอิงเรกคอร์ด
ทำความเข้าใจการอ้างอิงเรกคอร์ดและการค้นหา polymorphic มีตัวอย่างมากมาย
สร้างแอปพื้นที่ทำงานเปล่าสำหรับแท็บเล็ต
บนบานหน้าต่างด้านซ้าย เลือก ข้อมูล>เพิ่มข้อมูล แล้วเพิ่มตาราง บัญชีลูกค้าองค์กร และ ผู้ติดต่อ
ที่บานหน้าต่างด้านซ้าย เลือก + (แทรก) >เค้าโครง>แกลเลอรีแนวตั้งว่างเปล่า
เลือก เชื่อมต่อกับข้อมูล แล้วเลือก ผู้ติดต่อ เป็นแหล่งข้อมูล
ตั้งค่าเค้าโครงของแกลเลอรี่เป็น ชื่อและคำบรรยาย
ในบานหน้าต่าง ข้อมูล เปิดรายการ Title1 จากนั้นเลือก ชื่อเต็ม
เลือกตัวควบคุมป้ายชื่อ Subtitle1
ตั้งค่าคุณสมบัติ Text ของ Subtitle1 เป็นสูตรนี้:
If( IsBlank( ThisItem.'Company Name' ), "--", IsType( ThisItem.'Company Name', Accounts ), "Account: " & AsType( ThisItem.'Company Name', Accounts ).'Account Name', "Contact: " & AsType( ThisItem.'Company Name', Contacts ).'Full Name' )
คำบรรยายในแกลเลอรีแสดงค่าเหล่านี้:
- "-" ถ้าหาก 'ชื่อ บริษัท' เป็น ว่างเปล่า
- "บัญชี:" แล้วก็ฟิลด์ ชื่อบัญชี จากตาราง บัญชี ถ้าฟิลด์ ชื่อบริษัท หมายถึงบัญชี
- "ผู้ติดต่อ:" แล้วก็ฟิลด์ ชื่อเต็ม จากตาราง ผู้ติดต่อ ถ้าฟิลด์ ชื่อบริษัท หมายถึงผู้ติดต่อ
ผลลัพธ์ของคุณอาจแตกต่างกันเนื่องจากข้อมูลตัวอย่างอาจมีการแก้ไขเพื่อแสดงผลลัพธ์ประเภทอื่นๆ
ออบเจ็กต์ที่ไม่ได้ระบุชนิด
ตัวอย่างต่อไปนี้แสดงเรกคอร์ด JSON อย่างง่ายที่ตีความด้วยวิธีต่างๆ โดย ParseJSON, AsType และ IsType ใน Pac CLI Power Fx REPL
ในตัวอย่างแรกนี้ ไม่มีการให้ข้อมูลชนิดแก่ ParseJSON ดังนั้นจึงส่งคืนออบเจ็กต์ที่ไม่ได้ระบุชนิด
>> Set( rec, ParseJSON( "{""a"":1}" ) )
rec: <Untyped: Use Value, Text, Boolean, or other functions to establish the type>
ฟิลด์จะถูกแปลงเป็นตัวเลขโดยปริยายเมื่อใช้ในบริบทตัวเลข
>> 1 + rec.a
2
อีกทางหนึ่ง ตัวอย่างนี้จะแปลงเรกคอร์ดเป็นเรกคอร์ด Power Fx ที่มีการกำหนดชนิดอย่างชัดเจนโดยมีอาร์กิวเมนต์ที่สองเป็น ParseJSON
>> ParseJSON( "{""a"":1}", Type( {a: Number} ) )
{a:1}
และอีกทางเลือกหนึ่งคือตัวอย่างนี้จะแปลงเรกคอร์ดเป็นเรกคอร์ด Power Fx ที่มีการกำหนดชนิดอย่างชัดเจนโดยใช้ AsType
>> AsType( ParseJSON( "{""a"":1}" ), Type( {a: Number} ) )
{a:1}
สุดท้าย หากเราไม่แน่ใจ ตัวอย่างนี้จะทดสอบชนิดก่อนที่จะแปลงด้วยฟังก์ชัน IsType
>> IsType( ParseJSON( "{""a"":1}" ), Type( {a: Number} ) )
true