So beheben Sie NUMBER_OUTSIDE_VALID_RANGE in Salesforce-Deployments

Ein numerischer Feldwert auf einem zu speichernden Datensatz überschreitet die für dieses Feld definierten Stellen oder Dezimalstellen.

Tritt auf bei: DML zur Laufzeit, bei Datenladevorgängen, Apex-Tests und Formel- oder Rollup-Auswertung

Was das bedeutet

NUMBER_OUTSIDE_VALID_RANGE tritt auf, wenn ein in ein Number- oder Currency-Feld geschriebener Wert mehr Stellen oder mehr Dezimalstellen hat, als die Genauigkeit (Precision) und Skalierung (Scale) des Feldes zulassen. Salesforce definiert diese Grenzen am Feld selbst, sodass jeder Wert außerhalb davon beim Speichern abgelehnt wird, unabhängig davon, woher er stammt.

Precision und Scale werden bei der Felderstellung festgelegt und lassen sich später in manchen Editionen bekanntermaßen nur schwer ohne einen Support-Fall erweitern, sodass dieser Fehler oft auf eine Felddefinition hindeutet, die für die Daten, die sie nun aufnehmen muss, zu klein dimensioniert war, nicht nur auf einen einmalig fehlerhaften Wert.

Diagnose

Häufige Ursachen

Migrierte Daten haben mehr Genauigkeit, als das Feld zulässt
Quelldaten haben mehr Dezimalstellen als die Skalierung des Zielfeldes, oft aus einem System mit lockererer numerischer Formatierung.
Eine Formel- oder Rollup-Ausgabe überschreitet das Stellenlimit des Feldes
Ein berechneter Wert wächst über die maximale Anzahl an Stellen hinaus, für die das Zielfeld definiert wurde.
Die Währungsumrechnung führte zu zusätzlicher Dezimalgenauigkeit
Die Mehrwährungsumrechnung erzeugt nach der Rundung einen Wert mit mehr Dezimalstellen als der definierten Skalierung des Feldes.

Die Lösung

  1. Werte vor dem Laden runden oder kürzen
    Passen Sie den Migrations- oder Transformationsschritt so an, dass er vor dem Einfügen exakt der Precision und Scale des Zielfeldes entspricht.
    Decimal rounded = rawValue.setScale(2, System.RoundingMode.HALF_UP);
  2. Das Feld erweitern, wenn die zusätzliche Genauigkeit berechtigt ist
    Erhöhen Sie die Dezimalstellen oder die Stellenanzahl des Feldes in Setup, wenn das Geschäft dieses Detailniveau tatsächlich benötigt.
  3. Formelausgaben gegen die Felddefinition prüfen
    Stellen Sie sicher, dass keine Formel oder kein Rollup-Summary, das das Feld speist, einen Wert erzeugen kann, der dessen numerische Grenzen überschreitet.
In der Praxis

Wie Serpent das verhindert

Die gepoolten Scratch-Orgs von Serpent teilen dieselben Felddefinitionen wie der getestete Branch, sodass ein Migrationsskript, das Werte außerhalb des zulässigen Bereichs erzeugt, in einer isolierten Umgebung schnell fehlschlägt, statt während eines gemeinsam genutzten Sandbox-Ladevorgangs. Siehe die Bibliothek der Salesforce-Deployment-Fehler.

Metadaten und Daten in einem einzigen Deployment-Flow in Serpent

Prävention

Zahlen- und Währungsfelder von Anfang an für den größten realistischen Wert dimensionieren
Schätzen Sie die tatsächliche maximale Größenordnung und Genauigkeit, die ein Feld benötigt, bereits beim Entwurf ab, da eine spätere Erweiterung von Precision und Scale bei manchen Feldkonfigurationen störend ist.
An jedem Schreibpfad in ein skaliertes Feld explizit runden
Wenden Sie setScale() am Zuweisungspunkt in Apex und in ETL-Transformationen an, statt sich darauf zu verlassen, dass die Plattform stillschweigend für Sie rundet.
Wertebereiche der Quelldaten vor einer Migration profilieren
Prüfen Sie Minimum, Maximum und Dezimalgenauigkeit der tatsächlichen Quelldaten gegen die Definition des Zielfeldes, bevor Sie einen Massenladevorgang ausführen.
Häufige Fragen

NUMBER_OUTSIDE_VALID_RANGE, beantwortet

Betrifft das nur Currency-Felder?
Nein. Es betrifft jedes Number- oder Currency-Feld; auslösend ist die Precision- und Scale-Definition des Feldes, nicht speziell der Feldtyp.
Kann ich die Precision eines Number-Feldes erweitern, ohne bestehende Daten zu verlieren?
Meist ja, das Erhöhen von Precision oder Scale ist für bestehende Datensätze in der Regel sicher, aber bestätigen Sie dies immer zuerst in einer Sandbox, da sich manche Feldkonfigurationen und sehr große bestehende Datensätze anders verhalten können.
Rundet Salesforce in manchen Fällen stillschweigend statt abzulehnen?
Nein. Anders als manche Datenbanken, die stillschweigend kürzen, lehnt Salesforce immer einen Wert ab, der die definierte Precision und Scale des Feldes überschreitet, statt ihn für Sie zu runden.

Kostenlos starten. Keine Kreditkarte, keine Installation, keine Verpflichtung.

Einrichtung in unter 15 Minuten. Keine DevOps-Einstellung nötig.

Neugierig auf schnelleres Shipping, bevor Sie einsteigen? Sprechen wir

Unverbindlich.