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

معرّف السجل الممرَّر إلى عملية بحث أو DML مشوّه، أو بطول خاطئ، أو ينتمي إلى الكائن الخطأ.

يظهر أثناء: DML وقت التشغيل وتعيين البحث، وليس عند نشر البيانات الوصفية

المعنى

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

يحمل كل معرّف سجل في Salesforce بادئة مفتاح من ثلاثة أحرف تحدد كائنه، مثل 001 للحساب (Account) و003 لجهة الاتصال (Contact)، وهكذا، لذا يعود هذا الخطأ غالبًا إلى معرّف من الكائن الخطأ يُسنَد إلى حقل بحث يتوقع كائنًا آخر.

التشخيص

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

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

الحل

  1. استخدم دائمًا المعرّف المكوّن من 18 حرفًا
    اعتمد المعرّف المكوّن من 18 حرفًا غير الحساس لحالة الأحرف كمعيار في الكود، ولا تُضمِّن أبدًا معرّفًا من 15 حرفًا بشكل ثابت.
  2. ابحث بدلاً من ذلك باستخدام معرّف خارجي
    استبدل معرّفات السجلات الثابتة باستعلام على معرّف خارجي مستقر أو حقل فريد، بحيث يُحلّ المرجع بشكل صحيح في كل مؤسسة.
  3. تحقق من تطابق نوع الكائن
    تحقق من بادئة المفتاح المكوّنة من ثلاثة أحرف للمعرّف مقارنةً بالكائن الذي يتوقعه الحقل قبل تمريره.
    Id anyId = '001XXXXXXXXXXXXXXX';
    String prefix = String.valueOf(anyId).left(3);
    System.debug(Schema.getGlobalDescribe().values());
من واقع الاستخدام

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

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

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

الوقاية

اجعل نوع متغيرات معرّف السجل Id وليس String
استخدم نوع Id في Apex بدلاً من String لأي شيء يحمل معرّف سجل، بحيث تفشل القيمة المشوّهة أو ذات الطول الخاطئ عند التعيين، لا في عمق استدعاء DML.
لا تنسخ معرّفات السجلات من رابط المتصفح إلى الكود أبدًا
استعلم عن السجل باستخدام حقل مستقر بدلاً من لصق معرّف لاحظته في رابط، لأنه من السهل اقتطاعه أو كتابته بشكل خاطئ.
تحقق من نوع الكائن عند التعيين لحقول البحث الديناميكية
عندما يتم تحديد الكائن الهدف لحقل بحث بشكل ديناميكي، تحقق من بادئة مفتاح المعرّف الوارد مقارنةً بالكائن المتوقع قبل التعيين.
أسئلة شائعة

INVALID_ID_FIELD، بالتفصيل

كيف أميّز بين معرّف مكوّن من 18 حرفًا ومعرّف من 15 حرفًا؟
ينتهي المعرّف المكوّن من 18 حرفًا دائمًا بثلاثة أحرف إضافية غير حساسة لحالة الأحرف بعد الـ15 الأصلية. إذا كان طول المعرّف 15 حرفًا بالضبط، فتعامل معه على أنه غير آمن لتضمينه بشكل ثابت.
هل بادئات المفاتيح متطابقة في كل مؤسسة Salesforce؟
بادئات الكائنات القياسية مثل 001 للحساب (Account) ثابتة عبر المؤسسات، لكن بادئات الكائنات المخصصة تُخصَّص لكل مؤسسة عند إنشاء الكائن وتختلف بين البيئات.
هل تلتقط Id.valid() في Apex كل حالة يغطيها هذا الخطأ؟
تتحقق من أن السلسلة صحيحة الشكل نحويًا كمعرّف، لكنها لا تؤكد أن السجل موجود فعلاً أو ينتمي إلى الكائن الصحيح؛ ما زال كلا التحققين مطلوبًا.

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

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

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

بدون التزام.