Comment corriger STRING_TOO_LONG dans les déploiements Salesforce

Une valeur écrite dans un champ texte, liste de sélection ou e-mail dépasse la longueur maximale définie pour ce champ.

Se manifeste lors de : DML à l'exécution, lors de chargements de données, de tests Apex, et de logique de construction de chaîne dans Flow ou Apex

Ce que cela signifie

STRING_TOO_LONG signifie qu'une insertion ou mise à jour d'enregistrement tente d'écrire plus de caractères dans un champ que ses métadonnées ne l'autorisent. Les champs texte standards, les listes de sélection et les champs e-mail ont tous une longueur maximale définie, et Salesforce l'applique strictement : la troncature n'est jamais silencieuse.

Les champs Text standards plafonnent à 255 caractères maximum ; tout ce qui est plus long nécessite plutôt un champ Long Text Area ou Rich Text, ce qui explique pourquoi cette erreur est souvent le signe qu'un champ était simplement du mauvais type pour le contenu qu'on lui demande désormais de contenir.

Diagnostic

Causes courantes

Données migrées depuis un système aux limites plus souples
Les données source, souvent issues d'un CRM legacy ou d'un tableur, ont des valeurs plus longues que la longueur configurée du champ cible.
La longueur du champ a été réduite après l'existence de données
La longueur maximale d'un champ a été réduite dans un déploiement ultérieur, et les données existantes ou entrantes ne rentrent plus.
Valeurs concaténées dans Apex ou Flow
Une formule, un Flow ou un trigger Apex construit une chaîne en assemblant plusieurs champs, et le résultat combiné dépasse la limite du champ cible.

La solution

  1. Augmenter la longueur du champ si le cas d'usage le justifie
    Augmentez la longueur maximale du champ dans les métadonnées si les valeurs plus longues sont légitimes et que le type de champ le permet.
  2. Valider au point de saisie
    Ajoutez une protection Flow ou Apex qui tronque ou rejette les valeurs surdimensionnées avant qu'elles n'atteignent l'opération DML.
    String safeValue = rawValue.length() > 255
        ? rawValue.left(255)
        : rawValue;
  3. Auditer les données migrées par rapport au schéma cible
    Comparez les longueurs des données source aux limites des champs cibles avant une migration, pas après l'échec du chargement.
En pratique

Comment Serpent évite cela

Les pipelines CI de Serpent exécutent une validation de longueur de champ avant qu'un chargement de données n'atteigne une org partagée, de sorte qu'une valeur surdimensionnée échoue rapidement dans une étape du pipeline plutôt qu'en plein déploiement. 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

Choisir Long Text Area plutôt que Text pour tout champ susceptible de grandir
Optez par défaut pour une long text area plutôt qu'un champ Text de 255 caractères pour les champs de texte libre au contenu futur incertain, car élargir plus tard est plus perturbateur que de commencer plus large.
Limiter les chaînes concaténées à la limite du champ de destination, pas de la source
Tronquez explicitement dans Apex ou Flow chaque fois qu'une formule assemble plusieurs champs en un seul, en utilisant la longueur réelle du champ de destination comme borne.
Profiler les longueurs des champs source avant chaque migration
Exécutez un contrôle MAX(LENGTH(column)) sur les données source pour chaque champ texte migré, et comparez-le à la longueur maximale du champ de destination avant le chargement.
Questions fréquentes

STRING_TOO_LONG, expliqué

STRING_TOO_LONG s'applique-t-il aussi aux champs rich text et long text area ?
Les long text area et rich text ont leurs propres limites bien plus élevées et leur propre erreur, TEXT_AREA_LENGTH_EXCEEDED. STRING_TOO_LONG couvre les champs texte standards, liste de sélection et e-mail.
Quelle est la longueur maximale pour un champ Text standard ?
255 caractères est le plafond pour un champ Text personnalisé standard ; tout ce qui est plus long nécessite de basculer le champ vers Long Text Area ou un type similaire conçu pour un contenu plus important.
Salesforce compte-t-il différemment les caractères multi-octets pour cette limite ?
Non. La limite de caractères est basée sur le nombre de caractères, pas d'octets, donc les caractères Unicode multi-octets (comme de nombreuses écritures non latines) comptent de la même manière que les caractères ASCII à un octet pour la limite.

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.