
Andrew Hanna

Andrew Hanna

Kurze Antwort: Eine Salesforce-Sandbox gut zu befuellen 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-Saetze umbringt, ist nicht der erste Ladelauf, sondern die Schemaaenderung drei Sprints spaeter.
Sandbox Seeding heisst, eine Teilmenge produktiver Datensaetze 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 hinterlaesst Ihnen in den meisten Faellen eine leere oder unbrauchbare Org.
Nur die, die keine Daten fuer 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 taeglich aktualisieren, diese befuellen Sie. Partial Copy (5 GB, alle 5 Tage) bringt eine ueber eine Vorlage gewaehlte Stichprobe, die Luecken fuellen Sie selbst. Full (so gross 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 uebliche Fehler ist die Auswahl nach Menge: 500 Accounts, 500 Contacts, und die Hoffnung, dass sie zusammenhaengen. Tun sie nicht, und die Tester bauen eine Woche lang genau die Datensaetze, die ihnen versprochen wurden.
Waehlen Sie stattdessen nach Graph, ausgehend von einer kleinen Menge Wurzeldatensaetze:
Ein paar hundert gut verbundene Datensaetze schlagen hunderttausend unverbundene, ausser beim Lasttest.
Strikte Abhaengigkeitsreihenfolge, Eltern vor Kindern, und jedes Objekt auf etwas Stabilem verschluesselt.
upsert darauf.
Damit ist der Ladelauf idempotent: zweimal ausgefuehrt aktualisiert er, statt zu
duplizieren.
Account.ParentId und Paare, die aufeinander zeigen, lassen sich nicht
in einem Insert aufloesen. Laden Sie die Datensaetze 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. Waehlen 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 fuer Datenschutz zustaendigen Person freigegeben werden.
Das ist der Teil, den fast niemand behandelt, und der Grund, warum die meisten Seed-Saetze 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 stuetzt.
Binden Sie den Takt schliesslich an Ihre Releases: jede Iteration fuer Entwicklungssandboxes, jeder Testzyklus fuer UAT, immer nach einem Refresh. Weil der Ladelauf idempotent und versioniert ist, ist das ein Pipelinelauf und kein Projekt. Weitere Salesforce-DevOps-Leitfaeden.
Wie viele Daten braucht eine befuellte Sandbox?
So viele, dass jeder Record Type, Pfad und Randfall abgedeckt ist, meist ein paar hundert verbundene Datensaetze. Menge zaehlt nur beim Lasttest.
Reicht nicht einfach der Data Loader?
Fuer 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 befuellten Daten nach einem Refresh erhalten?
Nein. Ein Refresh ersetzt die Sandbox, alles Befuellte ist weg. Planen Sie den Seed-Lauf als festen Schritt nach dem Refresh ein.
Unverbindlich.