[SalesForce] best way to delete all records from any Dev org

We have managed package and to test this we have special Dev & QA org from sales force which higher data limits (one of them is 250 mb org).

To test various scenarios we need to create may different data set. We have build tool for this data generation.

But to re try verity of scenario we need to delete data data and insert again new set of data.

Deleting data is taking lot of manual effort. First export all data then call delete api with id. How can i delete all data with minimum manual effort.

Best Answer

It would be pretty straightforward to write a minimum viable batch to clear one table at a time for this scenario:

public class DeleteAllBatch implements Database.Batchable<SObject>
{
    final SObjectType deleteType;
    public DeleteAllBatch(SObjectType deleteType) { this.deleteType = deleteType; }

    public Database.QueryLocator start(Database.BatchableContext context)
    {
        return Database.getQueryLocator('SELECT Id FROM ' + deleteType);
    }
    public void execute(Database.BatchableContext context, List<SObject> scope)
    {
        Database.delete(scope, /*allOrNone*/ false);
    }
    public void finish(Database.BatchableContext context) { }
}

You could extend it to list out multiple types with some minor modifications.

public class DeleteAllBatch implements Database.Batchable<SObject>
{
    final SObjectType deleteType;
    final List<SObjectType> deleteTypes;
    public DeleteAllBatch(List<SObjectType> deleteTypes)
    {
        this.deleteType = deleteTypes.remove(0);
        this.deleteTypes = deleteTypes;
    }

    public Database.QueryLocator start(Database.BatchableContext context) { /*same*/ }
    public void execute(Database.BatchableContext context, List<SObject> scope) { /*same*/ }
    public void finish(Database.BatchableContext context)
    {
        if (!deleteTypes.isEmpty())
            Database.executeBatch(new DeleteAllBatch(deleteTypes));
    }
}
Related Topic