Search code examples
salesforceapexsalesforce-lightning

how to delete all records excluding 0th record in array index


As per the code I don't want to delete 0th record and delete rest of the record. But it is deleting all the records!

Kindly assist where I am making the mistake.

Here is the code:

list<account> scope = [Select Id,(Select id,CreatedDate,ebMobile__FileType__c,ebMobile__Account__c from Files__r order by CreatedDate DESC) from account where id in ('0016D00000444','0016D000000ugO')]; 
        Set<Id>OldIds = new Set<Id>();
        Set<Id>newIds = new Set<Id>();
        Set<Id> rIds = new Set<Id>();
        Set<Id> rrIds = new Set<Id>();
        list<File__c> listmemb = new list<File__c>();
        List<File__c> listmemb3 = new List<File__c>();
        List<File__c> listmemb4 = new List<File__c>();
        for(Account Acc : scope)
        {
            for(File__c fi : Acc.ebMobile__Files__r)
            {
                listmemb = [select id,CreatedDate,ebMobile__FileType__c from File__c where id =: fi.id];
                if(fi.ebMobile__Account__c != Null)
                {
                    for(Integer i=0; i<listmemb.size(); i++)
                    {
                        if(fi.ebMobile__FileType__c == 'Signature' && i==0)
                        {
                            rIds.add(listmemb[0].id); // Exclude 0th record 
                        }
                        if(i>0 && listmemb[i].ebMobile__FileType__c == 'Signature' || i > 0 && listmemb[i].ebMobile__FileType__c != 'signature')
                        {
                            rrIds.add(listmemb[i].id); // Delete all record excluding 0th record
                        }
                        if(fi.ebMobile__FileType__c != 'Signature')
                        {
                            OldIds.add(fi.id);  
                        }
                    }
                }
            }
        }
        listmemb3 = [Select id,CreatedDate,ebMobile__FileType__c from File__c where id in : OldIds];
        listmemb4 = [Select id,CreatedDate,ebMobile__FileType__c from ebMobile__File__c where id in : rrIds];
        if(listmemb3.size() > 0 && listmemb4.size()>0)
        {
            delete listmemb3;
            delete listmemb4;
        }
    }

Solution

  • There are some many unnecessary checks and lists in the code

    Let us simplify the stuff:

    list scope = [Select Id,(Select id,CreatedDate,ebMobile__FileType__c,ebMobile__Account__c from Files__r order by CreatedDate DESC) from account where id in ('XXXXXXXXXXXXXXXX','XXXXXXXXXXXXXXXX')];//Always keep Ids encrypted while posting on public platform
    SetOldIds = new Set();
    SetnewIds = new Set();
    Set rIds = new Set();
    Set rrIds = new Set();
    list listmemb = new list();
    List listmemb3 = new List();
    List listmemb4 = new List();
    for(Account Acc : scope)
    {
        Integer i= 0; //This will be used to exclue the first element
        for(File__c fi : Acc.ebMobile__Files__r)
        {
            //listmemb = [select id,CreatedDate,ebMobile__FileType__c from File__c where id =: fi.id];//You don't need this as you already have fi
            //if(fi.ebMobile__Account__c != Null)We are getting fi from Acc so it won't be having ebMobile__Account__c as null, assuming it as lookup
            //{
                //for(Integer i=0; i {This is syntactically wrong
                    /* This whole section is not needed as rIds is not being used anywhere
                    if(fi.ebMobile__FileType__c == 'Signature' && i==0)
                    {
                        rIds.add(listmemb[0].id); // Exclude 0th record
                    }
                    */
                    //if(i>0 && listmemb[i].ebMobile__FileType__c == 'Signature' || i > 0 && listmemb[i].ebMobile__FileType__c != 'signature')
                    if( i > 0 ) //Just put the check you need
                    {
                        rrIds.add(listmemb[i].id); // Delete all record excluding 0th record
                    }
                    if(fi.ebMobile__FileType__c != 'Signature')
                    {
                        OldIds.add(fi.id);
                    }
                    i++;
                //}
            //}
        }
    }
    listmemb3 = [Select id,CreatedDate,ebMobile__FileType__c from File__c where id in : OldIds];
    listmemb4 = [Select id,CreatedDate,ebMobile__FileType__c from ebMobile__File__c where id in : rrIds];
    if(listmemb3.size() > 0 && listmemb4.size()>0)
    {
        delete listmemb3;
        delete listmemb4;
    }
    }
    

    Hope this helps.