كيفية إصلاح UNABLE_TO_LOCK_ROW في عمليات نشر Salesforce
سجل تحتاج عملية النشر إلى تحديثه مقفل بواسطة معاملة أخرى تعمل في نفس الوقت.
يظهر أثناء: DML وقت التشغيل، وهو تعارض توقيت وليس مشكلة ميتاداتا أو بياناتالمعنى
يعني UNABLE_TO_LOCK_ROW أن Salesforce لم تتمكن من الحصول على قفل على سجل لأن معاملة أخرى، مثل مهمة دفعية أو تدفق مجدول أو اختبار Apex متزامن، كانت تحدّثه بالفعل. هذه مشكلة توقيت، وليست مشكلة ميتاداتا: عملية النشر أو اختباراتها صحيحة، لكنها تصادمت مع شيء آخر يعمل في المؤسسة.
يشيع هذا بشكل خاص مع علاقات master-detail، لأن تحديث أي سجل فرعي يحصل على قفل على السجل الأصل لإعادة حساب roll-up summary، لذا فإن عمليتي إدخال فرعيتين تتسابقان لتحديث نفس السجل الأصل في وقت واحد ستتنافسان على ذلك القفل.
الأسباب الشائعة
الحل
- أعد محاولة النشرأقفال السطور مؤقتة. غالبًا ما تنجح إعادة تشغيل نفس عملية النشر بمجرد انتهاء المعاملة المنافسة.
- انشر خلال فترة نشاط منخفضجدول عمليات نشر الإنتاج خارج ساعات العمل أو أوقف مؤقتًا المهام المجدولة المتعارضة أولًا.
- تجنّب التنافس على سجل مشترك في الاختباراتأعد هيكلة اختبارات Apex بحيث لا تحدّث جميعها نفس سجل الإعدادات singleton ضمن نفس المعاملة.
for (Account parent : [SELECT Id FROM Account WHERE Id IN :parentIds FOR UPDATE]) { // lock parents explicitly and predictably before child DML }
إزاي Serpent بتمنع ده
يجدول Serpent AI عمليات النشر لتجنب المهام المتعارضة المعروفة، فيظهر السطر المقفل كإعادة محاولة بنقرة واحدة على نفس المهمة بدلًا من فشل الإصدار. اطّلع على مكتبة أخطاء نشر Salesforce.

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