
Andrew Hanna

Andrew Hanna

Reponse courte : bien alimenter une sandbox Salesforce, ce sont trois travaux, pas un. Extrayez une tranche de production consciente des relations plutot qu'un nombre d'enregistrements, chargez-la des parents vers les enfants avec des identifiants externes stables pour que le meme jeu puisse etre recharge, et anonymisez de facon deterministe pour que les donnees se comportent encore comme de vraies donnees. Versionnez ensuite la definition du jeu a cote de vos metadonnees, car ce qui tue un jeu de donnees n'est pas le premier chargement, c'est le changement de schema trois sprints plus tard.
Le seeding consiste a copier un sous-ensemble d'enregistrements de production vers un environnement inferieur, afin que l'org dispose de donnees realistes pour developper et tester, les valeurs sensibles etant masquees avant leur arrivee. C'est un probleme de donnees, pas de metadonnees : un refresh de sandbox apporte la configuration et vous laisse, le plus souvent, une org vide ou inexploitable.
Celles qui ne copient pas les donnees pour vous. D'apres la documentation Salesforce sur les licences et limites de stockage : Developer (200 Mo) et Developer Pro (1 Go) ne copient que les metadonnees et se rafraichissent chaque jour, ce sont celles que vous alimentez. Partial Copy (5 Go, tous les 5 jours) apporte un echantillon choisi par un modele 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 demarrent toujours vides : le seeding y est obligatoire.
L'echec classique consiste a selectionner par volume : 500 Accounts, 500 Contacts, en esperant qu'ils soient relies. Ils ne le sont pas, et les testeurs recreent toute la semaine les enregistrements promis.
Selectionnez plutot par graphe, en partant d'un petit ensemble d'enregistrements racines :
Quelques centaines d'enregistrements bien relies valent mieux que cent mille enregistrements isoles, sauf pour les tests de charge.
Ordre de dependance strict, les parents avant les enfants, et chaque objet cle sur quelque chose de stable.
upsert dessus. Le chargement devient idempotent : relance-le et il met
a jour au lieu de dupliquer.
Account.ParentId, et les paires qui se pointent mutuellement, ne
peuvent pas etre 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 a un test tombe sur des donnees absurdes. Adaptez la technique au champ :
Salesforce propose Anonymize for Salesforce, et Gearset, Odaseva et Flosum vendent des outils de seeding avec masquage integre. Quel que soit l'outil, le jeu de regles doit etre valide une fois, par ecrit, par le responsable de la protection des donnees.
C'est la partie que presque personne ne traite, et c'est pourquoi la plupart des jeux meurent en un trimestre. Une definition de seeding est une photo figee de votre schema : listes de champs, valeurs de picklist, champs obligatoires, regles de validation. Livrez un nouveau champ obligatoire et tous les chargements suivants echouent.
Traitez le jeu de donnees comme du code source :
Dans Serpent, une operation de donnees est une action de pipeline a part entiere plutot qu'une corvee manuelle, ce qui permet au chargement de vivre dans le meme pipeline que le deploiement qu'il soutient.
Alignez enfin la cadence sur vos releases : chaque iteration pour les sandboxes de developpement, chaque campagne de tests pour la recette, toujours apres un refresh. Comme le chargement est idempotent et versionne, c'est une execution de pipeline et non un projet. D'autres guides DevOps Salesforce.
Quel volume de donnees une sandbox alimentee doit-elle contenir ?
De quoi couvrir chaque record type, parcours et cas limite, en general quelques centaines d'enregistrements relies. 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-meme l'ordre de chargement, le remappage des identifiants et le masquage, et vous les refaites a la main a chaque refresh.
Un refresh de sandbox conserve-t-il les donnees chargees ?
Non. Un refresh remplace la sandbox : tout ce que vous aviez charge disparait. Prevoyez le rechargement comme etape standard apres refresh.
Sans engagement.