كيفية إصلاح INVALID_FIELD في عمليات نشر Salesforce

يشير استعلام SOQL أو صيغة أو أتمتة إلى اسم API لحقل غير موجود على ذلك الكائن في المؤسسة الهدف.

يظهر أثناء: تجميع Apex أو تنفيذ SOQL، غالبًا داخل تشغيل الاختبارات

المعنى

يعني INVALID_FIELD أن Salesforce لم يتمكن من العثور على اسم الحقل المستخدم في استعلام SOQL أو صيغة أو أتمتة على الكائن الذي تم الاستعلام عنه، في المؤسسة التي يعمل فيها النشر أو الاختبار. على عكس MISSING_FIELD الذي يخص عروض القوائم والتقارير تحديدًا، يظهر INVALID_FIELD غالبًا داخل اختبارات Apex أو استعلامات SOQL أو حقول الصيغ في وقت التجميع أو التنفيذ.

بما أن Apex يُجمَّع مقابل المخطط الفعلي للمؤسسة وقت النشر، فإن استعلامًا يشير إلى حقل لم يصل بعد يُفشل تجميع الفئة بأكملها، وليس طريقة الاختبار الواحدة فقط، وهذا سبب توقف هذا الخطأ لعدد أكبر بكثير من الاختبارات من ذلك الذي يحتاج الحقل فعليًا.

التشخيص

الأسباب الشائعة

اختبار Apex يستعلم عن حقل لم يُنشر بعد
يحدد عبارة SOQL في فئة اختبار حقلًا يُشحن في عملية نشر لاحقة أو حزمة تابعة.
تمت إعادة تسمية الحقل بعد كتابة الكود
تغيّر اسم API الخاص بالحقل، لكن كود Apex أو صيغة أو Flow لا يزال يشير إلى الاسم القديم.
الحقل يخص كائنًا مختلفًا
يُنفَّذ الاستعلام على الكائن الخطأ، لذا فإن حقلًا موجودًا في مكان آخر من المؤسسة غير موجود على الكائن الذي يتم الاستعلام عنه فعليًا.

الحل

  1. انشر الحقل قبل الكود الذي يستعلم عنه
    رتّب نشر الحقل قبل أي كود Apex أو Flow يشير إليه في استعلام SOQL.
  2. حدّث كل مرجع بعد إعادة التسمية
    ابحث في Apex وFlow وحقول الصيغ عن اسم API القديم واستبدله بالاسم الحالي.
    grep -rln "Legacy_Score__c" force-app/main/default/
  3. تأكد أن الحقل موجود على الكائن الذي يتم الاستعلام عنه
    تحقق من كائن الحقل في Setup مقابل الكائن في جملة SOQL FROM أو سياق الصيغة.
من واقع الاستخدام

إزاي Serpent بتمنع ده

يحدد Serpent AI نطاق المهمة بناءً على كل ما تلمسه، بما في ذلك الحقول التي يستعلم عنها اختبار Apex أو Flow، بحيث يُشحن الحقل الذي يعتمد عليه اختبار ضمن نفس المهمة بدلًا من مهمة لاحقة. راجع مكتبة أخطاء نشر Salesforce.

الـ metadata والبيانات في مسار نشر واحد داخل Serpent

الوقاية

اجمع الحقل الجديد مع أول كود يستعلم عنه
اشحن البيانات الوصفية لحقل مخصص ضمن نفس عملية النشر التي تحتوي على أول استعلام SOQL أو trigger يشير إليه، وليس أبدًا في إصدار لاحق منفصل.
تعامل مع إعادة تسمية حقل كبحث وتحديث على كامل قاعدة الكود، لا كتعديل في Setup
ابحث في كل فئة Apex وFlow وصيغة عن اسم API القديم قبل إعادة التسمية، وحدّثها جميعًا ضمن نفس التغيير.
جمّع الكود مقابل المؤسسة الهدف الفعلية قبل الإصدار
شغّل عملية نشر من نوع check-only مقابل المخطط الحالي للمؤسسة الهدف الحقيقية بحيث يفشل الحقل المفقود أو المعاد تسميته في CI، لا في نافذة نشر الإنتاج.
أسئلة شائعة

INVALID_FIELD، تمت الإجابة

هل INVALID_FIELD هو نفسه MISSING_FIELD؟
هما مرتبطان لكن غير متطابقين. يخص MISSING_FIELD عروض القوائم والتقارير والتخطيطات تحديدًا؛ بينما يظهر INVALID_FIELD في SOQL وApex والصيغ، لذا يعني الإصلاح عادةً تغييرًا في الكود أو الاستعلام لا في مرجع بيانات وصفية.
هل ينطبق هذا فقط على الحقول المخصصة، أم يمكن للحقول القياسية أن تسببه أيضًا؟
يمكن للحقول القياسية أن تسببه أيضًا، وغالبًا عندما يكون الحقل مقيدًا بإصدار أو ترخيص معين (مثل حقل Person Accounts) ولا يتضمنه إصدار المؤسسة الهدف.
لماذا يعمل نفس الاستعلام في Developer Console لكنه يفشل في فئة اختبار؟
يعمل Developer Console مباشرة مقابل المؤسسة التي سجّلت الدخول إليها، بمخططها الحالي. أما فئة الاختبار المنشورة على مؤسسة هدف مختلفة فتعمل مقابل مخطط تلك المؤسسة، الذي قد لا يحتوي على نفس الحقل بعد.

ابدأ مجانًا. بلا بطاقة ائتمان، بلا تثبيت، بلا التزام.

الإعداد في أقل من 15 دقيقة. لا حاجة لتوظيف DevOps.

هل تريد معرفة كيف يمكنكم الشحن أسرع قبل البدء؟ لنتحدث

بدون التزام.