แชร์ผ่าน


ฟังก์ชัน 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 ส่งคืน ว่างเปล่า ทุกฟิลด์เรกคอร์ด ว่างเปล่า จะเป็น ว่างเปล่า ด้วย

ออบเจ็กต์ที่ไม่ได้ระบุชนิด

สำคัญ

ออบเจ็กต์ที่ไม่ได้ระบุชนิดจาก Web API หรือฟังก์ชัน [ParseJSON] จะต้องแปลงเป็นออบเจ็กต์ที่ไม่ได้ระบุชนิดก่อนจึงจะสามารถใช้งานใน Power Fx ได้ ตัวเลือกในการทำเช่นนี้ ได้แก่ :

  1. กำหนดชนิดฟิลด์ในจุดที่ใช้โดยนัย ตัวอย่างเช่น ออบเจ็กต์จะถูกแปลงเป็นตัวเลขหากใช้กับตัวดำเนินการ + หากสามารถแปลงเป็นตัวเลขได้ ตัวเลือกนี้อาจมีการแปลงที่ไม่คาดคิดและไม่สามารถแปลงข้อมูลและตารางโดยรวมได้
  2. กำหนดชนิดข้อมูลแต่ละฟิลด์แยกกันอย่างชัดเจนด้วยฟังก์ชัน ทศนิยม, ข้อความ, วันที่เวลา, GUID และฟังก์ชันตัวอย่างชนิดอื่น ซึ่งเป็นส่วนที่มีผลกระทบมากที่สุดกับสูตรของคุณ เนื่องจากต้องทำกับแต่ละรายการแยกกัน
  3. กำหนดชนิด JSON อย่างชัดเจนด้วยอาร์กิวเมนต์ที่สองให้กับฟังก์ชัน ParseJSON นี่เป็นตัวเลือกง่าย ๆ ที่ไม่จำเป็นต้องใช้วัตถุที่ไม่ได้พิมพ์
  4. กำนดชนิดออบเจ็กต์ที่ไม่ได้ระบุชนิดอย่างชัดเจนโดยใช้ฟังก์ชัน 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 มีตัวอย่างมากมาย

  1. สร้างแอปพื้นที่ทำงานเปล่าสำหรับแท็บเล็ต

  2. บนบานหน้าต่างด้านซ้าย เลือก ข้อมูล>เพิ่มข้อมูล แล้วเพิ่มตาราง บัญชีลูกค้าองค์กร และ ผู้ติดต่อ

    แอปว่างที่มีแหล่งข้อมูลสองแห่ง: บัญชีลูกค้าองค์กรและผู้ติดต่อ

  3. ที่บานหน้าต่างด้านซ้าย เลือก + (แทรก) >เค้าโครง>แกลเลอรีแนวตั้งว่างเปล่า

    แทรกตัวควบคุมแกลเลอรีด้วยเค้าโครงว่างแนวตั้ง

  4. เลือก เชื่อมต่อกับข้อมูล แล้วเลือก ผู้ติดต่อ เป็นแหล่งข้อมูล

  5. ตั้งค่าเค้าโครงของแกลเลอรี่เป็น ชื่อและคำบรรยาย

    เปิดตัวเลือกโครงร่างจากบานหน้าต่างคุณสมบัติ

    ตั้งค่าเค้าโครงเป็นชื่อเรื่องและคำบรรยาย

  6. ในบานหน้าต่าง ข้อมูล เปิดรายการ Title1 จากนั้นเลือก ชื่อเต็ม

    ตั้งค่าชื่อเรื่อง

  7. เลือกตัวควบคุมป้ายชื่อ Subtitle1

    ตั้งค่าคำบรรยาย

  8. ตั้งค่าคุณสมบัติ 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