كيفية إصلاح CANNOT_UPDATE_CONVERTED_LEAD في عمليات نشر Salesforce
يحاول كود Apex أو API تحديث Lead بعد تحويله بالفعل، فيمنع Salesforce عملية الكتابة.
يظهر أثناء: عمليات DML وقت التشغيل، غالبًا داخل trigger أو batch job أو اختبار Apexالمعنى
يظهر CANNOT_UPDATE_CONVERTED_LEAD عندما يحاول كود Apex أو استدعاء API تحديث سجل Lead تم تحويله بالفعل. بمجرد التحويل، يصبح الـ Lead للقراءة فقط باستثناء مجموعة صغيرة من الحقول التي لا يزال Salesforce يسمح بها، لذا يُرفض أي تحديث آخر بدلًا من تجاهله بصمت.
إنه خطأ وقت تشغيل وليس خطأ وقت نشر: يتم نشر الـ trigger أو الـ batch job نفسه بنجاح، ولا يظهر الفشل إلا عند تنفيذ الكود فعليًا على سجل محوّل، وغالبًا ما يحدث ذلك داخل اختبارات Apex التي يتطلبها نشر الإنتاج.
الأسباب الشائعة
الحل
- استبعد السجلات ذات IsConverted = true قبل تحديث الـ Leadsأضف IsConverted = false إلى أي استعلام أو جملة WHERE التي تُشغّل تحديثًا مجمّعًا للـ Leads.
List<Lead> leads = [ SELECT Id, Status FROM Lead WHERE IsConverted = false AND Id IN :leadIds ]; update leads; - أضف تحققات IsConverted إلى منطق الـ triggerاحمِ معالجات trigger الخاصة بالـ Lead بحيث يتم تخطي السجلات المحوّلة بدلًا من تمريرها إلى منطق التحديث.
- حدّث السجل الناتج بدلًا من ذلكبمجرد تحويل الـ Lead، حدّث الـ Contact أو الـ Account أو الـ Opportunity الذي أنشأه بدلًا من الـ Lead الأصلي.
إزاي Serpent بتمنع ده
نظرًا لأن Serpent يشغّل مجموعة اختبارات Apex الكاملة على كل مهمة قبل أن تصبح مؤهلة للدمج، فإن الـ trigger الذي لا يستبعد الـ Leads المحوّلة يفشل كفشل اختبار على الفرع الذي أدخله، وليس عند إصدار الإنتاج. راجع مكتبة أخطاء نشر Salesforce.

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