เข้าใจ DELEGATEION : ทำไมข้อมูลบางส่วนจาก SHAREPOINT LIST ถึงไม่แสดงใน GALLERY ของ POWER APPS?
Delegation คือหลักการสำคัญที่ช่วยให้แอปพลิเคชัน Power Apps สามารถทำงานกับข้อมูลจำนวนมากจากแหล่งข้อมูลภายนอก เช่น SharePoint List ได้อย่างมีประสิทธิภาพ โดยให้ระบบ ส่งคำสั่ง เช่นฟังก์ชัน Filter ไปดำเนินการที่แหล่งข้อมูลโดยตรงแทนที่จะดึงข้อมูลทั้งหมดเข้ามาในแอปแล้วค่อยประมวลผลใน Power Apps ซึ่งช่วยลดภาระในการประมวลผลของแอปและเพิ่มความเร็วในการโหลดข้อมูล
ปัญหาที่พบบ่อยเกี่ยวกับ Delegation เมื่อพัฒนาแอปพลิเคชันด้วย Power Apps ที่เชื่อมต่อกับ SharePoint List เรามักพบคำถาม เช่น :
- ทำไมข้อมูลบางส่วนถึงไม่แสดงใน Gallery?
- การตั้งค่า Data Row Limit ส่งผลต่อการแสดงข้อมูลจริงหรือไม่?
เพื่อความเข้าใจที่ชัดเจน เราจะพาคุณไปดูตัวอย่างการใช้งานฟังก์ชันที่รองรับและไม่รองรับ Delegation ใน Power Apps รวมถึงเข้าใจเรื่องการตั้งค่า Data Row Limit ว่ามีผลกับการแสดงผลข้อมูลอย่างไร
เริ่มต้นที่การสำรวจรายละเอียด Data source ที่ต้องการนำเข้า Power Apps
สำหรับบทความนี้ Data source คือ SharePoint List ชื่อ netflix_titles มีจำนวนทั้งหมด 6,099 Items
โครงสร้างข้อมูลของ Netflix_titles
เพิ่มคอลัมน์ ID จาก Show/Hide Column เพื่อเห็นลำดับของ Items
จะเห็นว่าถ้าเรียงลำดับ ID จากมากไปน้อยลำดับล่าสุดของ ID คือ 6099 ซึ่งเท่ากับจำนวน Items ทั้งหมด
ลำดับถัดมานำข้อมูลจาก netflix_titles ไปแสดงที่ Gallery ของ Power Apps (Canvas)
แนะนำให้สร้าง Canvas App โดย Create ด้วยวิธี Start from Blank app แล้วค่อย Add Data โดยวิธีการดังรูป
ตามรูปจะเห็นว่าสามารถนำเข้าข้อมูลเข้ามาใน app ได้สำเร็จ
ลำดับถัดมา Insert Gallery และนำข้อมูลจาก netflix_titles มาแสดงที่ Gallery ให้เรียบร้อย
โดยตัวอย่างนี้ได้เพิ่ม
- Control Text Input ชื่อ txtSearch
- Text Label เพื่อ Count Item ที่แสดงใน Gallery
- เพิ่มคอลัมน์ของ Gallery ให้เป็น 3 คอลัมน์ โดยกำหนดที่ Property Wrap Count
สำหรับบทความนี้จะทำงานกับข้อมูลดังต่อไปนี้
- ตัวอย่างข้อมูลจากคอลัมน์ ID ได้แก่ 1,2,3,….,6099
เป็นข้อมูลที่ SharePoint List สร้างให้อัตโนมัติ - ตัวอย่างข้อมูลจากคอลัมน์ show_id ได้แก่ s1,s2,s3,…s6099
** ตัวเลขหลัง S ไม่จำเป็นต้องตรงกับลำดับของ ID - ตัวอย่างข้อมูลจากคอลัมน์ type ได้แก่ Movie,TV Show
ข้อมูลที่แสดง Gallery แม้ไม่ผ่าน function ใดๆ อยู่ 6099 items
ลองดูข้อมูลการตั้งค่า Data row limit จากรูปจะเห็นว่าตั้งค่าอยู่ที่ 500 row
แต่ข้อมูลที่แสดง Gallery แม้ไม่ผ่าน function ใดๆ อยู่ 6099 items
แสดงว่า SharePoint List เป็น Data Source ที่รองรับการ Delegation
ทำให้การตั้งค่า Data row limit ที่ 500 items นั้นไม่มีผลใดๆ แต่หากผ่านฟังก์ชันที่ไม่รองรับ delegation การกำหนด data row limit จึงจะมีผล
ซึ่งอยู่ในตัวอย่างการใช้ฟังก์ชัน Search ของบทความนี้
ตัวอย่างฟังก์ชันที่รองรับ Delegation
- กรองข้อมูล type ด้วยฟังก์ชัน Filter
จะเห็นว่าเมื่อใส่ movie ที่ txtSearch จะกรองรายการเฉพาะ movie เท่านั้น ซึ่งการ Filter ดังกล่าวจะ Filter ที่ SharePoint List แล้วนำข้อมูลจาก SharePoint List มาแสดงที่ Gallery ของ App เป็นจำนวนทั้งหมด 3984 รายการ
ตัวอย่างฟังก์ชันที่ไม่รองรับ Delegation
- ค้นข้อมูล type หรือ show_id ด้วยฟังก์ชัน Search
จะเห็นว่าเมื่อไม่ได้ค้นหาข้อมูลที่แสดงทั้งหมดอยู่ที่ 500 Items ซึ่งตรงกับ Data row limit ที่กำหนดค่าไว้ นอกจากนี้ยังเห็นเครื่องหมายตกใจสีเหลือง ซึ่งเป็นสัญลักษณ์ของ Delegation warning นั่นเอง
เมื่อเปลี่ยน Data row limit เป็น 2000 ซึ่งเป็นค่ามากที่สุดที่กำหนดได้ จะเห็นว่า จำนวน items ที่แสดงใน Gallery จะเปลี่ยนเป็น 2000 items จากข้อมูลทั้งหมดใน SharePoint List 6099 items
หากค้นหาข้อมูลจะพบว่าเป็นการค้นหาข้อมูลจาก 2000 รายการที่อยู่ใน app นี้แล้ว ไม่ใช่การค้นหาข้อมูลจาก SharePoint List เนื่องจากฟังก์ชัน Search นั้นไม่ได้รองรับ Delegation ซึ่งทำให้ข้อมูลที่ค้นหาได้มีโอกาสผิดพลาด
การทำงานของฟังก์ชัน Search นั้น จะค้นหาข้อมูลที่ตัวอักษรนั้นๆ อยู่ตรงไหนของคำก็ได้ โดยค้นหาในคอลัมน์ที่ระบุไว้ในฟังก์ชัน โดยฟังก์ชันนั้นค้นหาจากคอลัมน์ type และ show_id
ยกตัวอย่างเช่น ค้นหาด้วย s50 จะเห็นว่าเจอข้อมูล s50 , s500 , s501 เป็นต้น แต่ไม่เจอข้อมูล s5000 เนื่องจากเป็นการค้นจากข้อมูลจาก 2000 รายการที่อยู่ใน Gallery ซึ่งไม่ใช่การค้นหาข้อมูลจากข้อมูลทั้งหมดที่อยู่ใน SharePoint List
จากการนำเข้า Data source ที่มาจาก SharePoint List ซึ่งเป็น Data source ที่รองรับการ delegation เข้ามาแสดงผลใน gallery ของ Power Apps นั้น สรุปได้ดังนี้
- หากไม่ผ่านฟังก์ชันใดเลย Items = netflix_titles
- Gallery จะแสดงข้อมูลทั้งหมดจาก SharePoint List 6099 items
- หากใช้ฟังก์ชันที่รองรับการ delegation เช่นฟังก์ชัน Filter
- นั่นหมายถึงจะมีการ Filter ที่ SharePoint List ก่อน ได้ข้อมูลจำนวนเท่าใดจะนำมาแสดงทั้งหมดที่ Gallery ของ Power Apps โดยที่ไม่เกี่ยวกับการกำหนดค่าที่ Data row limit
- หากใช้ฟังก์ชันที่ไม่รองรับการ delegation เช่นฟังก์ชัน Search
- นั่นหมายถึงว่า Power Apps จะนำเข้าข้อมูลตามจำนวนที่กำหนดใน data row limit ก่อน เมื่อมีการค้นหาข้อมูลจะค้นหาจากข้อมูลที่อยู่ใน App เช่น data row limit กำหนด 2000 รายการ การค้นหาจะค้นหาจาก 2000 รายการที่อยู่ใน App แต่ไม่ได้ค้นหาข้อมูลจากข้อมูลทั้งหมดใน SharePoint List ซึ่งทำให้ผลลัพธ์ของข้อมูลเมื่อใช้ฟังก์ชัน Search ไม่ถูกต้อง
ส่วนฟังก์ชันใดที่รองรับการ Delegation ใน SharePoint List นั้นสามารถศึกษาเพิ่มเติมได้ที่ https://learn.microsoft.com/en-us/connectors/sharepointonline/#power-apps-delegable-functions-and-operations-for-sharepoint
แนะนำหลักสูตร Microsoft Power Apps (Canvas App) Workshop
สนใจสมัครอบรม/ดูรายละเอียดหลักสูตร:
https://training.m365.co.th/training-course/power-apps/power-apps-canvas-app/
สนใจสอบถามรายละเอียดเพิ่มเติม
Tel: 021198405
Line: @M365th
Email: Sales@m365.co.th