كيفية إصلاح INVALID_FIELD_FOR_INSERT_UPDATE في عمليات نشر Salesforce
تحاول عملية النشر الكتابة إلى حقل غير قابل للكتابة، مثل حقل صيغة أو حقل لا يملك المستخدم المنفّذ صلاحية تعديله.
يظهر أثناء: عملية DML وقت الترجمة أو وقت التشغيل، غالبًا داخل اختبار Apexالمعنى
يعني الخطأ INVALID_FIELD_FOR_INSERT_UPDATE أن عملية DML، غالبًا داخل اختبار Apex، حاولت تعيين قيمة لحقل لا يمكن الكتابة فيه مباشرة. يحدث هذا مع حقول الصيغ وحقول التجميع التراكمي والحقول النظامية، وأيضًا عندما يجعل أمان مستوى الحقل (Field-Level Security) الحقل للقراءة فقط بالنسبة للملف الشخصي الذي ينفّذ العملية.
بالنسبة للحقول غير القابلة للكتابة فعليًا مثل الصيغ، يكتشف Apex هذا وقت الترجمة إذا استُخدمت صياغة SObject الحرفية؛ أما قيود أمان مستوى الحقل فلا تظهر إلا وقت التشغيل، لأن نفس الكود قد ينجح مع ملف شخصي ويفشل مع آخر.
الأسباب الشائعة
الحل
- أزل الكتابة المباشرةاحذف سطر كود إعداد الاختبار الذي يعيّن قيمة للحقل الصيغة أو التجميع التراكمي أو الحقل النظامي.
- امنح صلاحية التعديل إذا كان يجب أن يكون الحقل قابلاً للكتابةحدّث أمان مستوى الحقل على الملف الشخصي أو مجموعة الأذونات المستخدمة للنشر إذا كان الحقل يُفترض فعلاً أن يكون قابلاً للتعديل.
- دقّق تغييرات نوع الحقلبعد تحويل أي حقل إلى صيغة، ابحث في قاعدة الكود عن عمليات كتابة DML مباشرة إليه وأزلها.
grep -rn "Amount_Rollup__c\s*=" force-app/main/default/classes/
إزاي Serpent بتمنع ده
يرصد Serpent AI تعارضات أمان مستوى الحقل بين البيئات أثناء مراجعة ما قبل التنفيذ، قبل أن تظهر كفشل وقت التشغيل. راجع مكتبة أخطاء نشر Salesforce.

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