global class batchFileUpdate implements Database.Batchable<sObject>{
    global Database.QueryLocator start(Database.BatchableContext BC)
    {
        string reseller= 'RENEWAL_RESELLER';
        string distributor = 'RENEWAL_DISTRIBUTOR';
        String query = 'SELECT Id, ContentTitle__c,ContentDocumentID__c,Exception_body__c,Name  FROM Exception_Log__c WHERE Exception_body__c LIKE \'%' + reseller+ '%\' OR Exception_body__c LIKE \'%' + distributor+ '%\' ';
        return Database.getQueryLocator(query);
    }
    global void execute(Database.BatchableContext BC, List<Exception_Log__c> scope)
    { 
        List<ContentDocumentLink>contentLinktoInsert = new List<ContentDocumentLink>();
        system.debug('scope size'+scope.size());
        List<contentdocumentLINK>contentLinktoadd = new List<contentdocumentLINK>();
        set<string>uniqueidset = new set<string>();
        for(Exception_Log__c a : scope){
            uniqueidset.add(QuoteId);
        }
        system.debug('uniqueidset'+uniqueidset);
        List<Quote> ParentQuote = [select id,JUN_SAP_Quote_Number__c from Quote where JUN_SAP_Quote_Number__c IN:uniqueIdset];
        Map<string,id>SAPSFDCIdMap = new Map<string,id>();
        for(Quote Q:ParentQuote){
            SAPSFDCIdMap.put(q.JUN_SAP_Quote_Number__c,q.id);
        }
        system.debug('SAPSFDCIdMap'+SAPSFDCIdMap);
        for(Exception_Log__c a : scope){
            system.debug('Inside Forloop scope');
            String title = a.ContentTitle__c;
            system.debug('++Title++'+title);
            string[] splitTitle = title.split('_');
            system.debug('++Title++'+splitTitle[0]);
            string QuoteID = splitTitle[0];
            ContentDocumentLink contentlink=new ContentDocumentLink();
            contentlink.LinkedEntityId=SAPSFDCIdMap.get(QuoteID);
            contentlink.ShareType= 'V';
            contentlink.ContentDocumentId=a.ContentDocumentID__c;
            contentLinktoadd.add(contentlink);
        }
        system.debug('++contentLinktoadd++'+contentLinktoadd);
        try{
            Database.SaveResult[] updateResults = Database.insert(contentLinktoadd, false);
            //  insert scope;
        }
        catch(exception ex){
            system.debug('++exception++'+ex);
        }
    }  
    global void finish(Database.BatchableContext BC)
    {
        AsyncApexJob a = [Select Id, Status,ExtendedStatus,NumberOfErrors, 
        JobItemsProcessed,TotalJobItems, CreatedBy.Email    from AsyncApexJob where Id =:BC.getJobId()];
        Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
        String[] toAddresses = new String[] {'nchristopher@june.net'};
        mail.setToAddresses(toAddresses);
        mail.setSubject('Match Merge Batch ' + a.Status);
        mail.setPlainTextBody('records processed ' + a.TotalJobItems +
                              'with '+ a.NumberOfErrors + ' failures.');
        Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
    }
}

Также некоторые гуру могут помочь мне сделать этот код эффективным?

-2
Nirmal Christopher 17 Сен 2020 в 18:46

1 ответ

Лучший ответ

Вам не нужно все это.

    string reseller= 'RENEWAL_RESELLER';
    string distributor = 'RENEWAL_DISTRIBUTOR';
    String query = 'SELECT Id, ContentTitle__c,ContentDocumentID__c,Exception_body__c,Name  FROM Exception_Log__c WHERE Exception_body__c LIKE \'%' + reseller+ '%\' OR Exception_body__c LIKE \'%' + distributor+ '%\' ';
    return Database.getQueryLocator(query);

Ваш запрос не очень динамичен. Просто сделать

return Database.getQueryLocator([
    SELECT Id, ContentTitle__c, ContentDocumentID__c, Exception_body__c, Name  
    FROM Exception_Log__c 
    WHERE Exception_body__c LIKE '%RENEWAL_RESELLER%' OR Exception_body__c LIKE '%RENEWAL_DISTRIBUTOR%'
]);
1
David Reed 18 Сен 2020 в 02:28
Спасибо вам за помощь. Этот приведенный ниже фрагмент кода является хорошим или любым альтернативным способом, которым мы можем написать этот ?String title = a.ContentTitle__c; system.debug('++Заголовок++'+заголовок); строка[] splitTitle = title.split('_'); system.debug('++Title++'+splitTitle[0]); строка QuoteID = splitTitle[0];
 – 
Nirmal Christopher
18 Сен 2020 в 12:20
Есть много способов построить это, но если это работает, я не понимаю, почему это проблема.
 – 
David Reed
18 Сен 2020 в 16:37