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

يشير مكون تم نشره إلى سجل أو حقل آخر باستخدام ID أو اسم API غير موجود في المؤسسة المستهدفة.

تظهر أثناء: التحقق من نشر metadata وأيضًا DML وقت التشغيل على record IDs

المعنى

يعني INVALID_CROSS_REFERENCE_KEY أن Salesforce حاول حل مرجع داخل metadata الخاصة بك، ID لسجل، اسم API لحقل، page layout، تعيين permission set، ولم يجد تطابقًا في المؤسسة المستهدفة. قد يكون المرجع نفسه صالحًا تمامًا في المؤسسة التي جاء منها؛ المشكلة أن المؤسسة المستلمة للنشر لا تملك بعد مكونًا مطابقًا، أو لن تملكه أبدًا.

يظهر هذا في سياقين مختلفين: وقت النشر، عندما يحل Metadata API مرجع مكون، ووقت التشغيل، عندما يمرر Apex أو الـ API معرّف سجل لا يقابل أي سجل يستطيع المستخدم المُشغِّل رؤيته في تلك المؤسسة.

التشخيص

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

معرّف سجل مُدرج بشكل ثابت من مؤسسة أخرى
يخزّن flow أو approval process أو class من Apex معرّف سجل موجود فقط في sandbox المصدر، لذا لا تملك المؤسسة المستهدفة ما يطابقه.
تبعية تم نشرها خارج الترتيب الصحيح
لم يتم تضمين حقل أو نوع سجل أو layout يشير إليه المكون الجاري نشره في نفس الحزمة، أو لم يصل بعد إلى المؤسسة المستهدفة.
اسم API قديم أو معاد تسميته
تمت إعادة تسمية المكون أو تغيير اسم API الخاص به في مؤسسة واحدة، لكن المرجع الذي يشير إليه لم يُحدَّث أبدًا.

الحل

  1. استبدل المعرّفات الثابتة بعمليات بحث
    استبدل أي معرّف سجل ثابت مكوّن من 18 حرفًا باستعلام SOQL، أو Custom Metadata Type، أو Custom Setting، بحيث يُحل المرجع لكل مؤسسة على حدة.
    Id defaultRecordTypeId = Schema.SObjectType.Case
        .getRecordTypeInfosByDeveloperName()
        .get('Support_Request')
        .getRecordTypeId();
  2. اجمع سلسلة التبعيات الكاملة
    أدرج كل حقل ونوع سجل وlayout يعتمد عليه المكون في نفس عملية النشر، وانشر بترتيب التبعيات الصحيح.
  3. تحقق من تطابق اسم API تمامًا
    تأكد من أن اسم API للمكون المُشار إليه في المؤسسة المستهدفة مطابق تمامًا، بما في ذلك اللاحقة __c وبادئة الكائن.
من واقع الاستخدام

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

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

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

الوقاية

امنع معرّفات السجلات الثابتة في مراجعة الكود
تعامل مع أي ID حرفي من 15 أو 18 حرفًا في Apex أو Flow أو formula كعائق يمنع الموافقة على المراجعة؛ وحل المراجع بدلاً من ذلك باستخدام اسم API أو external ID أو Custom Metadata Type.
انشر بترتيب تبعيات صريح، لا أبجدي أو افتراضي
حدّد ترتيب نشر صريح للـ metadata المترابطة بدلاً من الاعتماد على الترتيب الافتراضي الذي تنتجه أدواتك مصادفة.
ابحث عن كل مرجع قبل إعادة تسمية اسم API
ابحث في Apex وFlow والـ formulas والـ layouts عن اسم API الحالي للمكون قبل إعادة تسميته، حتى لا يبقى أي مرجع قديم.
أسئلة شائعة

INVALID_CROSS_REFERENCE_KEY، بالإجابات

هل يعني INVALID_CROSS_REFERENCE_KEY أنني فقدت بيانات؟
لا. يعني أن عملية النشر توقفت قبل لمس المؤسسة المستهدفة، لأن مرجعًا داخل metadata لديك تعذّر حله هناك.
هل يمكن أن تتسبب إعدادات المشاركة في هذا الخطأ حتى عند وجود السجل؟
نعم. إذا لم يستطع المستخدم المُشغِّل رؤية سجل بسبب sharing rules أو org-wide defaults، يمكن لـ Salesforce أن يعامله على أنه غير قابل للحل تمامًا كما لو كان سجلاً مفقودًا بالفعل.
هل يحدث هذا مع الحقول القياسية، أم فقط الحقول المخصصة؟
يمكن أن يحدث مع كليهما. مرجع إلى حقل أو سجل قياسي لا يدعمه إصدار أو تهيئة المؤسسة المستهدفة يُحل بنفس طريقة المكون المخصص المفقود.

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

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

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

بدون التزام.