قد يعيد Apex سجلات أقل في إصدار Summer '26
يجلب إصدار Salesforce Summer '26 (API v67.0) تغييراً جذرياً لـ Apex. يمكن لهذا التغيير أن يغير نتائج الكود الخاص بك دون إظهار أي خطأ.
لسنوات عديدة، كان Apex يعمل في "وضع النظام" (system mode) بشكل افتراضي. وهذا يعني أن SOQL و SOSL و DML كانت تتجاهل أذونات المستخدم وقواعد المشاركة (sharing rules). قد يعرض الكود الخاص بك بيانات لمستخدمين لا ينبغي لهم رؤيتها.
في الإصدار API v67.0، ينعكس الوضع الافتراضي؛ حيث تعمل عمليات قاعدة البيانات الآن في "وضع المستخدم" (user mode).
ما الذي سيتغير في الإصدار v67.0:
• تفرض SOQL و SOSL و DML أذونات المستخدم وقواعد المشاركة بشكل افتراضي. • الفئات (Classes) التي لا تحتوي على إعلان مشاركة (sharing declaration) ستعتمد الآن "with sharing" كوضع افتراضي. • تمت إزالة "WITH SECURITY_ENFORCED"، ويجب عليك استخدام "WITH USER_MODE" بدلاً منها. • تعمل الـ Triggers دائماً في وضع النظام (system mode).
يرتبط هذا التغيير بإصدار الـ API الخاص بالفئة (class) الخاصة بك. ستظل الفئات القديمة كما هي حتى تقوم بترقيتها إلى الإصدار 67.0، مما يتيح لك التحكم في عملية الانتقال.
احذر من هذه المشكلات الصامتة:
- سجلات أقل في الاستعلامات: قد يعيد الاستعلام 40 صفاً بدلاً من 500 لأن المستخدم يفتقر إلى صلاحية الوصول. يتسبب هذا في إجمالي غير صحيح وتقارير خاطئة.
- أخطاء التجميع (Compilation errors): ستفشل عملية التجميع لـ "WITH SECURITY_ENFORCED" في الإصدار الجديد.
- فشل التكامل (Integration failures): قد يفقد مستخدمو التكامل الوصول إلى البيانات التي يحتاجونها للوظائف المؤتمتة.
- تغييرات المشاركة: الفئات التي كانت تعتمد على عدم وجود إعلان مشاركة ستفرض الآن قواعد المشاركة.
كيفية الانتقال بأمان:
- جرد الكود الخاص بك: ابحث عن "WITH SECURITY_ENFORCED" والفئات التي تفتقر إلى إعلانات المشاركة.
- الاختبار في بيئة sandbox: قم بتحديث الفئات عالية المخاطر مثل الـ controllers ونقاط نهاية REST أولاً.
- استخدم
System.runAs(): لا تكتفِ بالثقة في الاختبارات الناجحة فقط؛ بل اختبر باستخدام مستخدمين ذوي صلاحيات محدودة للتحقق من رؤية البيانات. - كن مقصداً في قراراتك: استخدم "SYSTEM_MODE" أو "without sharing" فقط عندما يكون لديك سبب محدد.
إجراء هذه التغييرات الآن يمنع حدوث أخطاء صامتة في بيئة الإنتاج (production) لاحقاً.
مجتمع تعليمي اختياري: https://t.me/GyaanSetuAi