Comment corriger DUPLICATE_VALUE dans les déploiements Salesforce

Un enregistrement ou un composant de métadonnées en cours de création possède déjà une valeur unique ou un Developer Name correspondant dans l'org cible.

Se produit lors de : les insertions DML à l'exécution comme la validation de déploiement de métadonnées

Ce que cela signifie

DUPLICATE_VALUE signifie que Salesforce a rejeté une insertion ou un nouveau composant de métadonnées parce que quelque chose à son sujet, une valeur de champ unique, un external ID, ou un Developer Name, existe déjà dans l'org cible. Salesforce impose l'unicité au niveau de la plateforme et ne va pas silencieusement écraser l'enregistrement ou le composant existant.

C'est une catégorie plus large que DUPLICATE_DEVELOPER_NAME ou DUPLICATE_EXTERNAL_ID ; ce sont les deux variantes spécifiques les plus courantes, mais ce code peut aussi se déclencher sur n'importe quel custom field avec l'attribut Unique activé.

Diagnostic

Causes courantes

Champ unique déjà rempli
Un champ marqué unique ou un external ID possède déjà une valeur correspondante dans l'org cible, provenant d'un chargement ou d'un déploiement antérieur.
Un travail parallèle a créé le même Developer Name
Deux développeurs ont créé indépendamment un composant, un custom field, un record type ou un permission set portant le même Developer Name dans des branches séparées.
Des règles de doublon bloquent les données de test
Une duplicate ou matching rule dans l'org cible signale les données de test Apex comme un doublon d'un enregistrement existant.

La solution

  1. Utilisez upsert plutôt qu'insert
    Utilisez upsert avec le bon champ external ID afin que les enregistrements existants soient mis à jour plutôt que recréés.
  2. Renommez le composant en conflit
    Attribuez au composant de métadonnées le plus récent un Developer Name unique et mettez à jour toutes les références qui y pointent.
  3. Vérifiez les règles de doublon dans le contexte des tests
    Confirmez que les duplicate et matching rules ne bloquent pas les formes d'enregistrement spécifiques que vos tests Apex insèrent.
En pratique

Comment Serpent évite cela

Serpent AI signale les Developer Names qui se chevauchent entre tâches concurrentes avant que l'une ou l'autre n'atteigne un déploiement, afin que la collision soit détectée dès le scoping. 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

Préférez upsert à insert dès qu'un external ID existe
Utilisez upsert comme modèle standard pour tout objet avec une clé externe stable, afin qu'une réexécution d'un chargement n'entre jamais en collision avec elle-même.
Contournez délibérément les règles de doublon dans la configuration de test, pas par accident
Définissez explicitement DMLOptions.DuplicateRuleHeader.allowSave dans les factories de données de test qui doivent insérer des enregistrements que les duplicate rules signaleraient autrement.
Convenez des conventions de nommage avant le début du travail parallèle sur les fonctionnalités
Fixez les préfixes de Developer Name par équipe ou fonctionnalité dès le lancement, pas après que la première collision atteigne un org partagé.
Questions fréquentes

DUPLICATE_VALUE, les réponses

Puis-je simplement supprimer l'enregistrement existant et redéployer ?
Seulement s'il est vraiment obsolète. Vérifiez d'abord ce qui en dépend, car supprimer le mauvais doublon peut casser d'autres métadonnées qui y font référence.
DUPLICATE_VALUE s'applique-t-il uniquement aux custom fields, ou aussi aux champs standard ?
Il s'applique aux deux. Les champs uniques standard, comme l'Email d'un Contact dans certaines configurations d'org, imposent la même contrainte qu'un custom field avec Unique coché.
DUPLICATE_VALUE est-il identique à un avertissement de règle de gestion des doublons Salesforce ?
Non. Les duplicate et matching rules dans Setup constituent un avertissement ou un blocage plus souple et configurable sur des enregistrements potentiellement en double ; DUPLICATE_VALUE est une contrainte d'unicité stricte au niveau de la plateforme que l'utilisateur ne peut pas contourner dans l'interface.

Commencez gratuitement. Sans carte bancaire, sans installation, sans engagement.

Configuration en moins de 15 minutes. Aucune embauche DevOps nécessaire.

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

Sans engagement.