Comment corriger MALFORMED_ID dans les déploiements Salesforce

Une valeur transmise là où Salesforce attend un ID d'enregistrement n'est pas un ID valide du tout, pas simplement le mauvais.

Se produit lors de : DML et SOQL à l'exécution, dans les chargements de données, les intégrations et les tests Apex

Ce que cela signifie

MALFORMED_ID signifie que la valeur reçue par Salesforce n'est pas syntaxiquement un ID d'enregistrement valide : longueur incorrecte, caractères invalides, ou une valeur qui n'est pas du tout un ID. Cela diffère d'INVALID_ID_FIELD, où l'ID est bien formé mais pointe vers le mauvais enregistrement ou objet ; MALFORMED_ID signifie que la chaîne elle-même est cassée.

Un ID Salesforce valide compte toujours 15 ou 18 caractères alphanumériques commençant par un préfixe de clé d'objet à trois caractères ; tout ce qui est plus court, plus long, ou contient des caractères en dehors de [A-Za-z0-9] échoue à cette vérification avant même que Salesforce ne tente de le résoudre en enregistrement.

Diagnostic

Causes courantes

Une valeur vide ou null transmise comme ID
Le code ou les données de test transmettent une chaîne vide ou null là où un champ ID obligatoire attend une vraie valeur.
Un fichier CSV ou un chargement de données a tronqué un ID
Un fichier d'import de données a coupé des caractères lors de l'export, ou un tableur a mis en forme automatiquement la colonne d'ID et a corrompu la valeur.
Une chaîne qui n'est pas un ID assignée à un champ ID
La préparation des tests ou une constante codée en dur assigne un nom, un libellé ou un texte de substitution à une variable typée Id.

La solution

  1. Valider le format de l'ID avant utilisation
    Vérifiez que tout ID construit dynamiquement ou importé compte exactement 15 ou 18 caractères alphanumériques avant de le transmettre à un DML ou une recherche.
    Boolean looksLikeId = idValue != null
        && idValue.isAlphanumeric()
        && (idValue.length() == 15 || idValue.length() == 18);
  2. Réexporter les fichiers de chargement de données sans reformatage
    Exportez les CSV en texte brut et désactivez la mise en forme automatique du tableur qui peut altérer ou tronquer les colonnes d'ID.
  3. Ne jamais coder en dur des ID de substitution dans la préparation des tests
    Interrogez un véritable ID d'enregistrement dans la préparation des tests plutôt que d'assigner une chaîne littérale à une variable typée Id.
En pratique

Comment Serpent évite cela

Serpent AI résout les références par clé métier plutôt que par chaînes d'ID brutes lors du déplacement des changements entre environnements, si bien qu'un ID mal formé ou codé en dur n'atteint jamais le déploiement d'une org cible. 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

Forcer le formatage en texte brut de la colonne ID avant chaque export
Définissez explicitement le format de la colonne ID dans les outils de tableur avant d'exporter en CSV, afin que la mise en forme automatique n'altère jamais silencieusement la valeur.
Typer les variables contenant un ID en Id, jamais en String
Utilisez le type Apex Id partout où une variable contient un identifiant d'enregistrement, afin qu'une assignation invalide échoue immédiatement plutôt que de surgir plus tard comme une erreur DML à l'exécution.
Ajouter une vérification de format à chaque frontière d'intégration
Validez la forme de l'ID au point d'entrée des données externes dans Salesforce, une étape de middleware d'intégration ou une transformation de chargement de données, pas seulement dans Apex.
Questions fréquentes

MALFORMED_ID, expliqué

En quoi MALFORMED_ID diffère-t-il d'INVALID_ID_FIELD ?
MALFORMED_ID signifie que la valeur n'est pas du tout une chaîne d'ID valide. INVALID_ID_FIELD signifie que l'ID est bien formé mais pointe vers un enregistrement inexistant ou appartenant au mauvais objet.
La méthode Id.valid() d'Apex détecte-t-elle cela de manière fiable avant le DML ?
Oui, pour les vérifications de longueur et de jeu de caractères. Elle confirme que la chaîne a la forme d'un ID Salesforce valide, mais ne peut pas confirmer que l'enregistrement existe réellement ; c'est une vérification distincte.
Un simple espace en fin de chaîne peut-il provoquer MALFORMED_ID ?
Oui. Un ID copié-collé avec une espace ou un saut de ligne final échoue à la vérification alphanumérique, même si les caractères visibles de l'ID sont eux-mêmes corrects.

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.