
Andrew Hanna

Andrew Hanna

Kort antwoord: een sandbox goed seeden is drie klussen, geen een. Trek een relatiebewuste doorsnede uit productie in plaats van een aantal records, laad die van ouder naar kind met stabiele external ID's zodat dezelfde set opnieuw geladen kan worden, en anonimiseer deterministisch zodat de data zich nog steeds als echte data gedraagt. Zet de seed-definitie daarna in versiebeheer naast je metadata, want wat seed-sets doodt is niet de eerste load, maar de schemawijziging drie sprints later.
Sandbox seeding is het kopieren van een deelverzameling productierecords naar een lagere omgeving, zodat de org realistische data heeft om op te ontwikkelen en te testen, met gevoelige waarden gemaskeerd voordat ze landen. Het is een dataprobleem, geen metadataprobleem: een sandbox refresh brengt de configuratie mee en laat je in de meeste gevallen achter met een lege of onbruikbare org.
Alleen die geen data voor je kopieren. Volgens de Salesforce-documentatie over sandboxlicenties en opslaglimieten: Developer (200 MB) en Developer Pro (1 GB) kopieren alleen metadata en zijn dagelijks te verversen, dus die seed je. Partial Copy (5 GB, elke 5 dagen) brengt een sample via een sandboxtemplate en de gaten vul je zelf. Full (zo groot als productie, elke 29 dagen) brengt alles mee, en juist daarom telt maskeren daar zwaarder. Scratch orgs beginnen altijd leeg, dus daar is seeden verplicht.
De klassieke fout is selecteren op volume: pak 500 Accounts, pak 500 Contacts, hoop dat ze aan elkaar hangen. Dat doen ze niet, en testers bouwen vervolgens een week lang de records die ze beloofd kregen.
Selecteer in plaats daarvan op graaf, vanuit een kleine set rootrecords:
Een paar honderd goed verbonden records verslaan honderdduizend losse records voor elk doel behalve performancetesten.
Strikte afhankelijkheidsvolgorde, ouders voor kinderen, en elk object gesleuteld op iets stabiels.
upsert daarop. Nu is de load idempotent: draai
hem twee keer en je werkt bij in plaats van dupliceert.
Account.ParentId, en paren die naar elkaar wijzen, kun je niet in een
insert oplossen. Laad de records met de lookup leeg en draai daarna een tweede pass
die alleen de lookup zet.
Maskeren dat ruis oplevert is net zo slecht als niet maskeren, want niemand vertrouwt een test die op onzin faalde. Kies de techniek per veld:
Salesforce levert Anonymize for Salesforce, en Gearset, Odaseva en Flosum verkopen seeding-tooling met maskeren erin. Wat je ook gebruikt: de maskeerregels moeten een keer schriftelijk worden goedgekeurd door wie verantwoordelijk is voor gegevensbescherming.
Dit stuk behandelt bijna niemand, en het is precies waarom de meeste seed-sets binnen een kwartaal dood zijn. Een seed-definitie is een vaste foto van je schema: veldlijsten, picklistwaarden, verplichte velden, validatieregels. Zet een nieuw verplicht veld live en elke load daarna faalt.
Behandel de seed-set als broncode, niet als een opgeslagen configuratie in iemands tool:
In Serpent is een data-operatie een volwaardige pipeline-actie in plaats van handwerk, waardoor de seed-run in dezelfde pipeline past als de deployment die hij ondersteunt.
Koppel het ritme tot slot aan je releases: elke iteratie voor ontwikkelsandboxen, elke testronde voor UAT, altijd na een refresh. Omdat de load idempotent is en in versiebeheer staat, is dat een pipeline-run in plaats van een project. Meer Salesforce DevOps-gidsen.
Hoeveel data moet een geseede sandbox bevatten?
Genoeg om elk record type, pad en randgeval te dekken, meestal een paar honderd verbonden records. Volume telt alleen bij load tests.
Kan ik niet gewoon Data Loader gebruiken?
Voor een kleine set wel. Laadvolgorde, ID-hermapping en maskeren doe je dan zelf, en je herhaalt alle drie met de hand na elke refresh.
Blijft mijn geseede data staan na een sandbox refresh?
Nee. Een refresh vervangt de sandbox, dus alles wat je geseed had is weg. Plan de seed als vaste stap na elke refresh.
Vrijblijvend.