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

قيمة حقل رقمي في سجل يتم حفظه تتجاوز عدد الخانات أو المنازل العشرية المحددة لذلك الحقل.

يظهر أثناء: عمليات DML وقت التشغيل، وفي تحميل البيانات، واختبارات Apex، وتقييم الصيغ أو التجميعات

المعنى

يظهر NUMBER_OUTSIDE_VALID_RANGE عندما تحتوي قيمة تُكتب في حقل من نوع Number أو Currency على خانات أكثر، أو منازل عشرية أكثر، مما تسمح به دقة الحقل ومقياسه. يحدد Salesforce هذه الحدود على الحقل نفسه، لذا تُرفض أي قيمة خارجها وقت الحفظ بغض النظر عن مصدرها.

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

التشخيص

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

البيانات المرحّلة تحمل دقة أكبر مما يسمح به الحقل
تحتوي بيانات المصدر على منازل عشرية أكثر من مقياس الحقل الوجهة، وغالبًا ما يأتي ذلك من نظام بتنسيق رقمي أقل صرامة.
ناتج صيغة أو تجميع يتجاوز حد الخانات الخاص بالحقل
تنمو قيمة محسوبة متجاوزة الحد الأقصى لعدد الخانات الذي عُرّف له الحقل الوجهة.
أدى تحويل العملة إلى دقة عشرية إضافية
ينتج تحويل العملات المتعددة قيمة بمنازل عشرية أكثر من المقياس المحدد للحقل بعد التقريب.

الحل

  1. قرّب أو اقطع القيم قبل التحميل
    عدّل خطوة الترحيل أو التحويل لتطابق الدقة والمقياس الدقيقين للحقل الوجهة قبل الإدراج.
    Decimal rounded = rawValue.setScale(2, System.RoundingMode.HALF_UP);
  2. وسّع الحقل إذا كانت الدقة الإضافية مبررة فعلًا
    زد عدد المنازل العشرية أو الخانات للحقل في Setup إذا كان العمل بحاجة فعلية لذلك المستوى من التفاصيل.
  3. تحقق من مخرجات الصيغة مقابل تعريف الحقل
    تأكد أن أي صيغة أو تجميع rollup يغذّي الحقل لا يمكن أن ينتج قيمة تتجاوز حدوده الرقمية.
من واقع الاستخدام

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

تشارك بيئات scratch orgs المجمّعة الخاصة بـ Serpent نفس تعريفات الحقول مع الفرع قيد الاختبار، لذا فإن سكريبت ترحيل ينتج قيمًا خارج النطاق يفشل بسرعة في بيئة معزولة بدلًا من أثناء تحميل sandbox مشترك. راجع مكتبة أخطاء نشر Salesforce.

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

الوقاية

حدّد حجم حقول الأرقام والعملات لأكبر قيمة واقعية منذ البداية
قدّر الحجم الأقصى الحقيقي والدقة التي يحتاجها الحقل عند التصميم، لأن توسيع الدقة والمقياس لاحقًا معطّل في بعض إعدادات الحقول.
قرّب بشكل صريح في كل مسار كتابة إلى حقل ذي مقياس محدد
طبّق setScale() عند نقطة الإسناد في Apex وفي تحويلات ETL، بدلًا من الاعتماد على قيام المنصة بالتقريب صامتًا نيابةً عنك.
حلّل نطاقات بيانات المصدر قبل الترحيل
تحقق من الحد الأدنى والأقصى والدقة العشرية لبيانات المصدر الفعلية مقابل تعريف الحقل الوجهة قبل تشغيل تحميل مجمّع.
أسئلة شائعة

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

هل يؤثر هذا فقط على حقول Currency؟
لا. ينطبق على أي حقل من نوع Number أو Currency؛ والسبب هو تعريف الدقة والمقياس للحقل، وليس نوع الحقل تحديدًا.
هل يمكنني توسيع دقة حقل Number دون فقدان البيانات الموجودة؟
غالبًا نعم، زيادة الدقة أو المقياس آمنة عمومًا للسجلات الموجودة، لكن تأكد دائمًا أولًا في sandbox لأن بعض إعدادات الحقول ومجموعات البيانات الكبيرة جدًا الموجودة قد تتصرف بشكل مختلف.
هل يقرّب Salesforce صامتًا بدلًا من الرفض في أي حالة؟
لا. على عكس بعض قواعد البيانات التي تختصر صامتًا، يرفض Salesforce دائمًا القيمة التي تتجاوز الدقة والمقياس المحددين للحقل بدلًا من تقريبها نيابةً عنك.

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

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

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

بدون التزام.