Salesforce partial copy sandboxes are expensive, but it’s possible to approximate one if you’re willing to spend a little time moving the data around yourself with a fantastic little tool called SandboxBerry, which you can get from here. Big thanks to Ian Finch for all his work on it!
Below are the steps I had to go through to get all my data imported. Please let me know if you have any suggestions that could make this easier or more effective!
- Make a new development sandbox and log into it
- Delete all outbound messages and workflows that relate to integrations with external systems
- Save a copy of /ExampleInstructionFiles/ExampleInstructionFile.xml, henceforth called InstructionFile.xml
- Decide which object types you want to migrate and add them as SbbObjects in InstructionFile.xml
- Deactivate validation rules, mandatory fields, lookup filters and autonumber fields for those objects (TODO: write a script to do this by exporting metadata, disabling them all programmatically, then re-importing the updated metadata). For future reference we had to:
- Deactivate validation rules on the following: Account, Contact, Charge, Product
- Remove lookup filters on: Account.Business_Consultant, Charge.Base_Product, Charge.Contact, Charge.Account
- Make the following fields no longer required: Charge.Account, Charge.Contact
- Remove the restriction from picklist values for Charge.Billing_year
- Deactivate the following in process builder: “Set fields on contact and parent account after lead conversion” and “Set dates for once-off charges"
- Deactivate the following workflow rules: Set charge account LOB field
- Change autonumber fields to text fields: Charge.Name
- If you’re using person accounts like we are (ugh), you’ll need to exclude the __pc fields as well as “MiddleName” and “Suffix”. In InstructionFile.xml, add an SbbFieldOptions section with an SbbFieldOption for each field as instructed in the wiki
- Run Sandboxberry, put in your details and click Start!
In general, I’d suggest doing a test run first on just a few records for each object, filtering by IDs like:
Account.where = Id= ‘001900000123456'
Object_Name__c.where = Account= ‘001900000123456'
Then run the import and ensure everything shows up as expected for that account.