Comment corriger INVALID_ID_FIELD dans les déploiements Salesforce

Un ID d'enregistrement transmis à une recherche ou une opération DML est mal formé, a une longueur incorrecte, ou appartient au mauvais objet.

Se produit lors de : DML à l'exécution et assignation de recherche, pas lors du déploiement de métadonnées

Ce que cela signifie

INVALID_ID_FIELD signifie que l'ID reçu par Salesforce ne correspond à aucun enregistrement valide pour le champ auquel il a été transmis. C'est presque toujours un ID codé en dur ou mal manipulé : une longueur incorrecte, une casse incorrecte, ou un ID appartenant à un objet différent de celui attendu par le champ.

Chaque ID d'enregistrement Salesforce porte un préfixe de clé à trois caractères identifiant son objet, 001 pour Account, 003 pour Contact, et ainsi de suite, donc cette erreur remonte souvent à un ID du mauvais objet assigné à une recherche qui en attend un autre.

Diagnostic

Causes courantes

ID à 15 caractères au lieu de 18
Un ID d'enregistrement copié depuis une URL de navigateur est la version à 15 caractères sensible à la casse, et une erreur de casse ou une troncature l'a corrompu en cours de route.
ID spécifique à l'org réutilisé dans l'org cible
Un ID provenant de l'org source a été codé en dur dans les métadonnées ou le code de test, mais cet ID précis ne correspond à aucun enregistrement de l'org cible.
Mauvais type d'objet pour la recherche
Le préfixe de clé de l'ID appartient à un objet différent de celui attendu par le champ de recherche, par exemple un ID de Contact transmis à un champ Account.

La solution

  1. Toujours utiliser l'ID à 18 caractères
    Standardisez sur l'ID d'enregistrement à 18 caractères insensible à la casse dans le code, et ne codez jamais en dur une version à 15 caractères.
  2. Rechercher plutôt par un ID externe
    Remplacez les ID d'enregistrement codés en dur par une requête sur un ID externe stable ou un champ unique, afin que la référence se résolve correctement selon l'org.
  3. Vérifier que le type d'objet correspond
    Vérifiez le préfixe de clé à trois caractères de l'ID par rapport à l'objet attendu par le champ avant de le transmettre.
    Id anyId = '001XXXXXXXXXXXXXXX';
    String prefix = String.valueOf(anyId).left(3);
    System.debug(Schema.getGlobalDescribe().values());
En pratique

Comment Serpent évite cela

Serpent AI résout les références par clé métier plutôt que par ID d'enregistrement brut lors du déplacement des changements entre environnements, si bien que ce type d'erreur n'atteint jamais un déploiement. 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

Typer les variables d'ID d'enregistrement en Id, pas en String
Utilisez le type Apex Id plutôt que String pour tout ce qui contient un identifiant d'enregistrement, afin qu'une valeur mal formée ou de mauvaise longueur échoue dès l'assignation, pas au fond d'un appel DML.
Ne jamais copier des ID d'enregistrement depuis une URL de navigateur dans le code
Interrogez l'enregistrement via un champ stable plutôt que de coller un ID observé dans une URL, qui se tronque ou se saisit facilement de travers.
Valider le type d'objet au moment de l'assignation pour les recherches dynamiques
Lorsque l'objet cible d'un champ de recherche est déterminé dynamiquement, vérifiez le préfixe de clé de l'ID entrant par rapport à l'objet attendu avant l'assignation.
Questions fréquentes

INVALID_ID_FIELD, expliqué

Comment distinguer un ID à 18 caractères d'un ID à 15 caractères ?
L'ID à 18 caractères se termine toujours par trois caractères supplémentaires insensibles à la casse après les 15 d'origine. Si un ID compte exactement 15 caractères, considérez-le comme dangereux à coder en dur.
Les préfixes de clé sont-ils identiques dans chaque org Salesforce ?
Les préfixes d'objets standard comme 001 pour Account sont cohérents entre les orgs, mais les préfixes d'objets personnalisés sont attribués par org à la création de l'objet et diffèrent selon les environnements.
Id.valid() en Apex détecte-t-il tous les cas couverts par cette erreur ?
Elle vérifie que la chaîne a syntaxiquement la forme d'un ID valide, mais ne confirme pas que l'enregistrement existe réellement ou appartient au bon objet ; les deux vérifications restent nécessaires.

Démarrez gratuitement. Sans carte bancaire, sans installation, sans 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.