
Tekunda Team

Andrew Hanna

Kurze Antwort: Eine Salesforce-Sandbox gut zu befüllen sind drei Aufgaben, nicht eine. Ziehen Sie einen beziehungsbewussten Ausschnitt aus der Produktion statt einer Datensatzzahl, laden Sie ihn von den Eltern zu den Kindern mit stabilen External IDs, damit derselbe Satz erneut geladen werden kann, und anonymisieren Sie deterministisch, damit sich die Daten weiterhin wie echte Daten verhalten. Danach versionieren Sie die Seed-Definition neben Ihren Metadaten, denn was Seed-Sätze umbringt, ist nicht der erste Ladelauf, sondern die Schemaänderung drei Sprints später.
Sandbox Seeding heißt, eine Teilmenge produktiver Datensätze in eine niedrigere Umgebung zu kopieren, damit die Org realistische Daten zum Entwickeln und Testen hat, wobei sensible Werte vor dem Laden maskiert werden. Das ist ein Datenproblem, kein Metadatenproblem: Ein Sandbox-Refresh bringt die Konfiguration und hinterlässt Ihnen in den meisten Fällen eine leere oder unbrauchbare Org.
Nur die, die keine Daten für Sie kopieren. Laut der Salesforce-Dokumentation zu Sandbox-Lizenzen und Speichergrenzen: Developer (200 MB) und Developer Pro (1 GB) kopieren nur Metadaten und lassen sich täglich aktualisieren, diese befüllen Sie. Partial Copy (5 GB, alle 5 Tage) bringt eine über eine Vorlage gewählte Stichprobe, die Lücken füllen Sie selbst. Full (so groß wie die Produktion, alle 29 Tage) bringt alles, und genau deshalb wiegt Maskierung dort schwerer. Scratch Orgs starten immer leer, dort ist Seeding Pflicht.
Der übliche Fehler ist die Auswahl nach Menge: 500 Accounts, 500 Contacts, und die Hoffnung, dass sie zusammenhängen. Tun sie nicht, und die Tester bauen eine Woche lang genau die Datensätze, die ihnen versprochen wurden.
Wählen Sie stattdessen nach Graph, ausgehend von einer kleinen Menge Wurzeldatensätze:
Ein paar hundert gut verbundene Datensätze schlagen hunderttausend unverbundene, außer beim Lasttest.
Strikte Abhängigkeitsreihenfolge, Eltern vor Kindern, und jedes Objekt auf etwas Stabilem verschlüsselt.
upsert darauf.
Damit ist der Ladelauf idempotent: zweimal ausgeführt aktualisiert er, statt zu
duplizieren.
Account.ParentId und Paare, die aufeinander zeigen, lassen sich nicht
in einem Insert auflösen. Laden Sie die Datensätze mit leerem Lookup und setzen
Sie das Lookup in einem zweiten Durchlauf.
Maskierung, die Rauschen erzeugt, ist so schlecht wie keine Maskierung, denn niemand vertraut einem Test, der an Unsinn gescheitert ist. Wählen Sie die Technik pro Feld:
Salesforce liefert Anonymize for Salesforce, und Gearset, Odaseva sowie Flosum verkaufen Seeding-Werkzeuge mit eingebauter Maskierung. Was Sie auch nutzen: Das Regelwerk muss einmal schriftlich von der für Datenschutz zuständigen Person freigegeben werden.
Das ist der Teil, den fast niemand behandelt, und der Grund, warum die meisten Seed-Sätze binnen eines Quartals tot sind. Eine Seed-Definition ist ein festgeschriebenes Abbild Ihres Schemas: Feldlisten, Picklist-Werte, Pflichtfelder, Validierungsregeln. Liefern Sie ein neues Pflichtfeld aus, und jeder folgende Ladelauf scheitert.
Behandeln Sie den Seed-Satz als Quellcode:
In Serpent ist eine Datenoperation eine vollwertige Pipeline-Aktion statt Handarbeit, wodurch der Seed-Lauf in derselben Pipeline liegt wie das Deployment, das er stützt.
Binden Sie den Takt schließlich an Ihre Releases: jede Iteration für Entwicklungssandboxes, jeder Testzyklus für UAT, immer nach einem Refresh. Weil der Ladelauf idempotent und versioniert ist, ist das ein Pipelinelauf und kein Projekt. Weitere Salesforce-DevOps-Leitfäden.
Wie viele Daten braucht eine befüllte Sandbox?
So viele, dass jeder Record Type, Pfad und Randfall abgedeckt ist, meist ein paar hundert verbundene Datensätze. Menge zählt nur beim Lasttest.
Reicht nicht einfach der Data Loader?
Für einen kleinen Satz ja. Ladereihenfolge, ID-Neuzuordnung und Maskierung verantworten Sie dann selbst, und Sie wiederholen alle drei nach jedem Refresh von Hand.
Bleiben meine befüllten Daten nach einem Refresh erhalten?
Nein. Ein Refresh ersetzt die Sandbox, alles Befüllte ist weg. Planen Sie den Seed-Lauf als festen Schritt nach dem Refresh ein.
Unverbindlich.