Comment corriger FIELD_INTEGRITY_EXCEPTION dans les déploiements Salesforce

Une valeur en cours d'enregistrement ne correspond pas à ce que le champ attend, le plus souvent une valeur de liste de sélection absente de l'org cible.

Se manifeste lors de : DML à l'exécution, le plus souvent lors de l'exécution de tests Apex ou d'un chargement de données

Ce que cela signifie

FIELD_INTEGRITY_EXCEPTION signifie qu'une valeur a échoué au contrôle d'intégrité propre à la plateforme pour un champ, généralement une valeur de liste de sélection non définie dans l'org cible, ou une valeur qui viole une liste de sélection restreinte ou une contrainte de type. Les valeurs de liste de sélection sont des métadonnées propres à chaque org, elles doivent donc être déployées et synchronisées comme tout autre composant.

L'API Metadata déploie les changements de valeurs de liste de sélection des objets standards dans le cadre des métadonnées de l'objet, donc une incohérence ici remonte presque toujours à une modification de valeur de liste de sélection effectuée dans Setup d'une org mais jamais versionnée ni déployée de façon correspondante.

Diagnostic

Causes courantes

Valeur de liste de sélection absente de l'org cible
Un test Apex ou un enregistrement utilise une valeur de liste de sélection ajoutée dans l'org source mais jamais déployée dans l'ensemble de valeurs de l'org cible.
La liste de sélection restreinte rejette la valeur
Le champ est configuré en liste de sélection restreinte, et la valeur enregistrée ne figure pas dans la liste approuvée de l'org.
Incohérence de type de champ après un changement de schéma
Le type d'un champ a changé, par exemple de texte à nombre, et d'anciennes données de test ou formules supposent toujours l'ancien type.

La solution

  1. Déployer d'abord les valeurs de liste de sélection
    Incluez l'ensemble de valeurs global ou la modification de valeur de liste de sélection au niveau du champ dans le même déploiement que tout ce qui l'utilise.
    <valueSet>
      <valueSetDefinition>
        <sorted>false</sorted>
        <value><fullName>Renewal_Pending</fullName><default>false</default></value>
      </valueSetDefinition>
    </valueSet>
  2. Garder les listes de sélection restreintes synchronisées
    Auditez les valeurs des listes de sélection restreintes entre environnements pour que les orgs source et cible autorisent le même ensemble.
  3. Mettre à jour les données de test dépendantes
    Après un changement de type de champ, mettez à jour les données de test Apex ou les champs de formule qui supposaient l'ancien type.
En pratique

Comment Serpent évite cela

Le diff d'environnement de Serpent AI montre exactement quelles valeurs de liste de sélection existent dans une org et pas dans l'autre, avant même qu'un déploiement ne s'exécute. 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

Versionner les ensembles de valeurs de liste de sélection comme toute autre métadonnée
Récupérez et validez les changements de GlobalValueSet et de métadonnées de champ via le même workflow de contrôle de source qu'Apex, plutôt que de modifier les valeurs ponctuellement dans Setup.
Regrouper une valeur de liste de sélection avec le code ou le test qui l'utilise en premier
Livrez la nouvelle valeur dans le même déploiement que la classe, le trigger ou le test qui la référence, afin que les deux n'arrivent jamais dans le mauvais ordre.
Examiner l'impact en aval des changements de liste de sélection restreinte
Avant de restreindre davantage une liste de sélection, recherchez le code Apex, les Flows et les intégrations qui écrivent des valeurs que la restriction rejetterait désormais.
Questions fréquentes

FIELD_INTEGRITY_EXCEPTION, expliqué

Comment savoir quelle valeur de liste de sélection manque ?
Le texte de l'erreur nomme généralement directement le champ et la valeur fautive. Comparez l'ensemble de valeurs de ce champ entre l'org source et l'org cible pour confirmer l'écart.
Cela se déclenche-t-il parfois sur un champ hors liste de sélection ?
Oui, plus rarement. Cela peut aussi se produire lors d'incohérences de type après une conversion de champ, ou pour d'autres contraintes de valeur au niveau de la plateforme en dehors des listes de sélection spécifiquement.
Les mappages de valeurs de liste de sélection par type d'enregistrement se déploient-ils automatiquement avec la valeur ?
Pas toujours. Ajouter une valeur à un ensemble de valeurs global ne la rend pas automatiquement disponible sur chaque type d'enregistrement ; les métadonnées de mappage de valeurs du type d'enregistrement nécessitent souvent leur propre mise à jour explicite.

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.