Comment corriger INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST dans les déploiements Salesforce

Un enregistrement est sauvegardé avec une valeur de liste de sélection (picklist), ou sans valeur, absente du jeu de valeurs restreint du champ dans l'org cible.

Se produit pendant : le DML à l'exécution, lors des chargements de données, des intégrations et de la configuration des tests Apex

Ce que cela signifie

INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST se déclenche lorsqu'un champ picklist est configuré pour restreindre les valeurs à celles définies, et qu'un enregistrement tente de sauvegarder une valeur hors de cette liste, ou qu'une picklist restreinte requise est laissée vide. La valeur peut être parfaitement valide dans l'org source ; le problème est que le jeu de valeurs de l'org cible ne correspond pas.

Restreindre une picklist est une option activable par champ ; une picklist non restreinte accepte silencieusement n'importe quelle chaîne, y compris des fautes de frappe, tandis qu'une picklist restreinte applique strictement le jeu de valeurs défini, ce qui explique précisément pourquoi cette erreur tend à apparaître dès qu'une restriction de champ est activée pour la première fois.

Diagnostic

Causes courantes

Le jeu de valeurs diffère entre l'org source et l'org cible
Les valeurs actives de la picklist ont été modifiées dans les métadonnées de champ d'une org, mais le changement n'a jamais été déployé vers l'autre.
Le type d'enregistrement n'inclut pas la valeur
La correspondance des valeurs de picklist d'un type d'enregistrement exclut une valeur que la picklist globale autorise par ailleurs.
Le chargement de données envoie une valeur désactivée
Une valeur a été désactivée sur la picklist, mais des données entrantes ou une intégration API l'envoient encore.

La solution

  1. Déployez le jeu de valeurs de la picklist avec le champ
    Incluez la liste complète des valeurs actives, ainsi que toute correspondance de valeurs de type d'enregistrement, dans le même déploiement que le changement de champ ou de type d'enregistrement.
  2. Ajoutez la valeur manquante à la picklist de l'org cible
    Si la valeur devrait aussi y être valide, ajoutez-la au jeu de valeurs de la picklist avant de retenter le déploiement.
  3. Mappez ou nettoyez les données avant le chargement
    Mettez à jour les données entrantes pour utiliser une valeur active et mappée plutôt qu'une valeur que la picklist de l'org cible n'accepte plus.
En pratique

Comment Serpent évite cela

Serpent synchronise les jeux de valeurs de picklist et les correspondances de types d'enregistrement avec les sandboxes qu'il gère, de sorte qu'une picklist restreinte reste alignée sur chaque org au lieu de dériver silencieusement. Consultez 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

Versionnez ensemble les jeux de valeurs de picklist et les correspondances de type d'enregistrement
Suivez le jeu de valeurs du champ et le mapping de processus métier ou de valeurs de chaque type d'enregistrement comme une seule unité dans le contrôle de version, pas comme des modifications ad hoc distinctes dans Setup.
Ne désactivez jamais une valeur de picklist sans vérifier d'abord les intégrations actives
Recherchez toute référence à une valeur dans les mappings d'intégration et la logique des flows avant de la désactiver, afin qu'un système en aval ne continue pas à envoyer une valeur que l'org n'accepte plus.
Validez les valeurs de picklist entrantes par rapport à une table de correspondance avant le chargement
Vérifiez chaque valeur de picklist entrante par rapport au jeu de valeurs actif de l'org cible pendant la transformation du chargement de données, plutôt que de découvrir l'incohérence au moment de l'insertion.
Questions fréquentes

INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST, expliqué

Pourquoi le même chargement de données fonctionne-t-il dans une sandbox mais échoue-t-il dans une autre ?
Les deux orgs ont presque certainement des valeurs actives ou des correspondances de type d'enregistrement différentes sur la picklist. Comparez le jeu de valeurs du champ et les affectations de type d'enregistrement entre les deux orgs.
Puis-je désactiver la restriction plutôt que de corriger les valeurs ?
Oui, décocher « Restreindre la picklist aux valeurs définies dans le jeu de valeurs » supprime entièrement la contrainte, mais cela supprime aussi la garantie de qualité des données que le champ était censé imposer, donc traitez-le comme un dernier recours.
Une valeur de picklist désactivée s'affiche-t-elle encore sur les enregistrements existants qui la portent déjà ?
Oui. Désactiver une valeur ne la retire pas des enregistrements qui la portent déjà ; cela bloque seulement les nouvelles sauvegardes d'utiliser cette valeur désormais, ce qui explique pourquoi les anciens enregistrements et les nouvelles sauvegardes peuvent se comporter différemment.

Démarrez gratuitement. Pas de carte bancaire, pas d'installation, pas d'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.