𝗬𝗼𝘂𝗿 𝗔𝗽𝗲𝘅 𝗠𝗶𝗴𝗵𝘁 𝗥𝗲𝘁𝘂𝗿𝗻 𝗙𝗲𝘄𝗲𝗿 𝗥𝗲𝗰𝗼𝗿𝗱𝘀 𝗶𝗻 𝗦𝘂𝗺𝗺𝗲𝗿 '𝟮𝟲
Salesforce Summer '26 (API v67.0) นำการเปลี่ยนแปลงครั้งใหญ่มาสู่ Apex ซึ่งการเปลี่ยนแปลงนี้อาจส่งผลต่อผลลัพธ์ของโค้ดของคุณโดยไม่มีการแจ้งข้อผิดพลาด (error) เกิดขึ้น
เป็นเวลาหลายปีที่ Apex ทำงานใน system mode โดยค่าเริ่มต้น ซึ่งหมายความว่า SOQL, SOSL และ DML จะเพิกเฉยต่อสิทธิ์การใช้งาน (user permissions) และกฎการแชร์ (sharing rules) ทำให้โค้ดของคุณอาจแสดงข้อมูลแก่ผู้ใช้ที่ไม่ควรเห็นข้อมูลนั้นได้
ใน API v67.0 ค่าเริ่มต้นจะเปลี่ยนไป โดยการดำเนินการกับฐานข้อมูล (Database operations) จะทำงานใน user mode แทน
สิ่งที่เปลี่ยนแปลงใน v67.0:
• SOQL, SOSL และ DML จะบังคับใช้ user permissions และ sharing rules โดยค่าเริ่มต้น • Class ที่ไม่มีการประกาศ sharing จะเปลี่ยนเป็น "with sharing" โดยค่าเริ่มต้น • "WITH SECURITY_ENFORCED" ถูกนำออกไปแล้ว คุณต้องใช้ "WITH USER_MODE" แทน • Triggers จะทำงานใน system mode เสมอ
การเปลี่ยนแปลงนี้ผูกติดกับ API version ของ class ของคุณ โดย class เก่าของคุณจะยังคงเหมือนเดิมจนกว่าคุณจะอัปเกรดเป็น 67.0 ซึ่งช่วยให้คุณสามารถควบคุมการย้ายระบบ (migration) ได้
ระวังปัญหาที่เกิดขึ้นโดยไม่แจ้งเตือน (silent issues) เหล่านี้:
- จำนวน Record ใน Query น้อยลง: Query อาจคืนค่าเพียง 40 แถวแทนที่จะเป็น 500 แถว เนื่องจากผู้ใช้ไม่มีสิทธิ์เข้าถึง ซึ่งจะทำให้ยอดรวมผิดพลาดและรายงานไม่ถูกต้อง
- ข้อผิดพลาดในการ Compile: "WITH SECURITY_ENFORCED" จะไม่สามารถ compile ได้ในเวอร์ชันใหม่
- ความล้มเหลวในการ Integration: ผู้ใช้ Integration อาจสูญเสียการเข้าถึงข้อมูลที่จำเป็นสำหรับงานอัตโนมัติ (automated jobs)
- การเปลี่ยนแปลงเรื่อง Sharing: Class ที่เคยอาศัยการไม่ประกาศ sharing จะถูกบังคับใช้ sharing ในตอนนี้
วิธีการ Migrate อย่างปลอดภัย:
- ตรวจสอบโค้ดของคุณ (Inventory): ค้นหา "WITH SECURITY_ENFORCED" และ class ที่ไม่มีการประกาศ sharing
- ทดสอบใน Sandbox: อัปเดต class ที่มีความเสี่ยงสูง เช่น controllers และ REST endpoints ก่อน
- ใช้ System.runAs(): อย่าเชื่อแค่ว่า Test ผ่าน ให้ทดสอบด้วยผู้ใช้ที่มีสิทธิ์จำกัดเพื่อตรวจสอบการมองเห็นข้อมูล (data visibility)
- ทำอย่างมีจุดประสงค์: ใช้ "SYSTEM_MODE" หรือ "without sharing" เฉพาะเมื่อมีเหตุผลที่เฉพาะเจาะจงเท่านั้น
การดำเนินการเปลี่ยนแปลงเหล่านี้ตั้งแต่ตอนนี้ จะช่วยป้องกันบั๊กเงียบ (silent bugs) ในระบบ Production ในภายหลัง
Optional learning community: https://t.me/GyaanSetuAi