كيفية إصلاح MIXED_DML_OPERATION في عمليات نشر Salesforce
يحاول Apex تعديل كائن setup، مثل User أو Group، وكائن غير setup في نفس المعاملة.
تظهر أثناء: وقت تشغيل Apex، غالبًا داخل تنفيذ الاختبارات المطلوب للنشرالمعنى
MIXED_DML_OPERATION هو exception في وقت تشغيل Apex: لا يسمح Salesforce بتنفيذ DML على كائن setup (User وGroup وGroupMember وما شابه) وكائن غير setup (Account وContact والكائنات المخصصة) ضمن نفس المعاملة. يظهر هذا غالبًا أثناء تنفيذ اختبارات Apex التي يتطلبها النشر إلى الإنتاج، ليتحول إلى فشل اختبار يمنع النشر.
يوجد هذا القيد لأن كائنات setup يمكنها تغيير الوصول على مستوى السجل والمشاركة، ولا يسمح Salesforce لمعاملة واحدة بتغيير من يستطيع رؤية البيانات وكتابة تلك البيانات في الوقت نفسه، وهذا هو سبب أن الإصلاح يتعلق دائمًا بحدود المعاملة، لا بمحتوى السجلات.
الأسباب الشائعة
الحل
- انقل DML الخاص بكائن setup إلى معاملة خاصة بهغلّف إدراج User أو Group داخل method مستقبلية (future)، أو اعزلها بطريقة أخرى، حتى يتم تثبيتها قبل تشغيل DML لكائن business.
@future private static void insertUserAsync(String jsonUser) { User u = (User) JSON.deserialize(jsonUser, User.class); insert u; } - استخدم Test.startTest() وTest.stopTest() لفصل المعاملةفي الاختبارات، ضع DML لكائن setup قبل Test.startTest() حتى يعمل ضمن حدود معاملته الخاصة قبل DML لكائن business.
- لا تجمع أبدًا بين إدراجات كائن setup وكائن business في سياق trigger واحدأعد هيكلة الأتمتة بحيث لا تشارك تغييرات كائن setup، مثل تزويد المستخدمين أو عضوية المجموعات، معاملة مع DML لسجلات business أبدًا.
إزاي Serpent بتمنع ده
يشغّل خط أنابيب CI الخاص بـ Serpent مجموعة اختبارات Apex الكاملة على كل مهمة قبل أن تصبح مؤهلة للدمج، بحيث يظهر فشل اختبار MIXED_DML_OPERATION على المهمة التي تسببت فيه، لا على إصدار إنتاج. راجع مكتبة أخطاء نشر Salesforce.

الوقاية
أخطاء ذات صلة
MIXED_DML_OPERATION، بالإجابات
ابدأ مجانًا. بدون بطاقة ائتمان، وبدون تثبيت، وبدون التزام.
يتم الإعداد في أقل من 15 دقيقة. دون الحاجة لتوظيف متخصص DevOps.
