
Tekunda Team

Andrew Hanna

Réponse courte : bien alimenter une sandbox Salesforce, ce sont trois travaux, pas un. Extrayez une tranche de production consciente des relations plutôt qu'un nombre d'enregistrements, chargez-la des parents vers les enfants avec des identifiants externes stables pour que le même jeu puisse être rechargé, et anonymisez de façon déterministe pour que les données se comportent encore comme de vraies données. Versionnez ensuite la définition du jeu à côté de vos métadonnées, car ce qui tue un jeu de données n'est pas le premier chargement, c'est le changement de schéma trois sprints plus tard.
Le seeding consiste à copier un sous-ensemble d'enregistrements de production vers un environnement inférieur, afin que l'org dispose de données réalistes pour développer et tester, les valeurs sensibles étant masquées avant leur arrivée. C'est un problème de données, pas de métadonnées : un refresh de sandbox apporte la configuration et vous laisse, le plus souvent, une org vide ou inexploitable.
Celles qui ne copient pas les données pour vous. D'après la documentation Salesforce sur les licences et limites de stockage : Developer (200 Mo) et Developer Pro (1 Go) ne copient que les métadonnées et se rafraîchissent chaque jour, ce sont celles que vous alimentez. Partial Copy (5 Go, tous les 5 jours) apporte un échantillon choisi par un modèle et vous comblez les trous. Full (taille production, tous les 29 jours) apporte tout, et c'est pour cela que le masquage y compte davantage. Les scratch orgs démarrent toujours vides : le seeding y est obligatoire.
L'échec classique consiste à sélectionner par volume : 500 Accounts, 500 Contacts, en espérant qu'ils soient reliés. Ils ne le sont pas, et les testeurs recréent toute la semaine les enregistrements promis.
Sélectionnez plutôt par graphe, en partant d'un petit ensemble d'enregistrements racines :
Quelques centaines d'enregistrements bien reliés valent mieux que cent mille enregistrements isolés, sauf pour les tests de charge.
Ordre de dépendance strict, les parents avant les enfants, et chaque objet clé sur quelque chose de stable.
upsert dessus. Le chargement devient idempotent : relance-le et il met
à jour au lieu de dupliquer.
Account.ParentId, et les paires qui se pointent mutuellement, ne
peuvent pas être satisfaites en une insertion. Chargez les enregistrements avec le
lookup vide, puis lancez une seconde passe qui ne renseigne que ce lookup.
Un masquage qui produit du bruit vaut le non-masquage : personne ne fait confiance à un test tombé sur des données absurdes. Adaptez la technique au champ :
Salesforce propose Anonymize for Salesforce, et Gearset, Odaseva, Flosum et Serpent proposent des outils de seeding avec masquage intégré. Quel que soit l'outil, le jeu de règles doit être validé une fois, par écrit, par le responsable de la protection des données.
C'est la partie que presque personne ne traite, et c'est pourquoi la plupart des jeux meurent en un trimestre. Une définition de seeding est une photo figée de votre schéma : listes de champs, valeurs de picklist, champs obligatoires, règles de validation. Livrez un nouveau champ obligatoire et tous les chargements suivants échouent.
Traitez le jeu de données comme du code source :
Dans Serpent, une opération de données est une action de pipeline à part entière plutôt qu'une corvée manuelle, ce qui permet au chargement de vivre dans le même pipeline que le déploiement qu'il soutient. Serpent masque aussi les PII pendant la migration : activez l'option dans Migrate Data et le seed arrive masqué.
Alignez enfin la cadence sur vos releases : chaque itération pour les sandboxes de développement, chaque campagne de tests pour la recette, toujours après un refresh. Comme le chargement est idempotent et versionné, c'est une exécution de pipeline et non un projet. D'autres guides DevOps Salesforce.
Quel volume de données une sandbox alimentée doit-elle contenir ?
De quoi couvrir chaque record type, parcours et cas limite, en général quelques centaines d'enregistrements reliés. Le volume ne compte que pour les tests de charge.
Puis-je simplement utiliser Data Loader ?
Oui, pour un petit jeu. Vous prenez alors en charge vous-même l'ordre de chargement, le remappage des identifiants et le masquage, et vous les refaites à la main à chaque refresh.
Un refresh de sandbox conserve-t-il les données chargées ?
Non. Un refresh remplace la sandbox : tout ce que vous aviez chargé disparaît. Prévoyez le rechargement comme étape standard après refresh.
Sans engagement.