Comment corriger NUMBER_OUTSIDE_VALID_RANGE dans les déploiements Salesforce

La valeur d'un champ numérique sur un enregistrement en cours d'enregistrement dépasse le nombre de chiffres ou de décimales défini pour ce champ.

Se manifeste lors de : DML à l'exécution, lors de chargements de données, de tests Apex, et de l'évaluation de formules ou de rollups

Ce que cela signifie

NUMBER_OUTSIDE_VALID_RANGE se déclenche lorsqu'une valeur écrite dans un champ Number ou Currency comporte plus de chiffres, ou plus de décimales, que ce que permettent la précision et l'échelle du champ. Salesforce définit ces limites sur le champ lui-même, donc toute valeur hors de ces limites est rejetée à l'enregistrement, quelle que soit son origine.

La précision et l'échelle sont définies à la création du champ et sont notoirement difficiles à élargir ensuite sans un dossier support dans certaines éditions, donc cette erreur pointe souvent vers une définition de champ sous-dimensionnée pour les données qu'elle doit désormais contenir, pas seulement une valeur erronée ponctuelle.

Diagnostic

Causes courantes

Les données migrées ont plus de précision que le champ ne l'autorise
Les données source ont plus de décimales que l'échelle du champ de destination, souvent en provenance d'un système au formatage numérique plus souple.
Le résultat d'une formule ou d'un rollup dépasse la limite de chiffres du champ
Une valeur calculée dépasse le nombre maximal de chiffres pour lequel le champ de destination a été défini.
La conversion de devise a introduit une précision décimale supplémentaire
La conversion multi-devises produit une valeur avec plus de décimales que l'échelle définie du champ après arrondi.

La solution

  1. Arrondir ou tronquer les valeurs avant le chargement
    Ajustez l'étape de migration ou de transformation pour correspondre exactement à la précision et à l'échelle du champ de destination avant l'insertion.
    Decimal rounded = rawValue.setScale(2, System.RoundingMode.HALF_UP);
  2. Élargir le champ si la précision supplémentaire est légitime
    Augmentez le nombre de décimales ou de chiffres du champ dans Setup si l'activité a réellement besoin de ce niveau de détail.
  3. Vérifier les résultats de formule par rapport à la définition du champ
    Confirmez qu'aucune formule ou rollup alimentant le champ ne peut produire une valeur dépassant ses limites numériques.
En pratique

Comment Serpent évite cela

Les scratch orgs mutualisées de Serpent partagent les mêmes définitions de champ que la branche testée, donc un script de migration produisant des valeurs hors plage échoue rapidement dans un environnement isolé plutôt que lors d'un chargement sandbox partagé. Voir la bibliothèque des erreurs de déploiement Salesforce.

Métadonnées et données dans un seul flux de déploiement dans Serpent

Prévention

Dimensionner les champs numériques et monétaires pour la plus grande valeur réaliste dès la conception
Estimez dès la conception la magnitude et la précision maximales réelles dont un champ a besoin, car élargir la précision et l'échelle plus tard est perturbateur sur certaines configurations de champ.
Arrondir explicitement à chaque chemin d'écriture vers un champ à échelle définie
Appliquez setScale() au point d'affectation dans Apex et dans les transformations ETL, plutôt que de compter sur la plateforme pour arrondir silencieusement à votre place.
Profiler les plages de données source avant une migration
Vérifiez le minimum, le maximum et la précision décimale des données source réelles par rapport à la définition du champ de destination avant d'exécuter un chargement en masse.
Questions fréquentes

NUMBER_OUTSIDE_VALID_RANGE, expliqué

Cela ne concerne-t-il que les champs Currency ?
Non. Cela s'applique à tout champ Number ou Currency ; le déclencheur est la définition de précision et d'échelle du champ, pas le type de champ spécifiquement.
Puis-je élargir la précision d'un champ Number sans perdre les données existantes ?
Généralement oui, augmenter la précision ou l'échelle est en général sûr pour les enregistrements existants, mais confirmez toujours d'abord dans un sandbox car certaines configurations de champ et de très grands jeux de données existants peuvent se comporter différemment.
Salesforce arrondit-il silencieusement dans certains cas au lieu de rejeter ?
Non. Contrairement à certaines bases de données qui tronquent silencieusement, Salesforce rejette toujours une valeur qui dépasse la précision et l'échelle définies du champ plutôt que de l'arrondir à votre place.

Démarrez gratuitement. Pas de carte bancaire, pas d'installation, aucun engagement.

Configuration en moins de 15 minutes. Aucun recrutement DevOps nécessaire.

Curieux de livrer plus vite avant de vous lancer ? Parlons-en

Sans engagement.