12

In my Apex class i am converting leads. When i test my code through UI it is working fine but when i run my test class it get failed and shows this error:

22:21:47.413 (413465000)|FATAL_ERROR|leadconvert.BulkLeadConvert.LeadInUseByWorkflowException: 00Qi0000003QfGrEAK

(System Code)

22:21:47.413 (413480000)|FATAL_ERROR|leadconvert.BulkLeadConvert.LeadInUseByWorkflowException: 00Qi0000003QfGrEAK

(System Code) 22:21:47.414 (414323000)|DML_END|[237] 22:21:47.414 (414406000)|EXCEPTION_THROWN|[237]|System.DmlException: ConvertLead failed. First exception on row 0; first error: RECORD_IN_USE_BY_WORKFLOW, Unable to convert lead that is in use by workflow: []

I am just passing list of leads as parameter into convertlead() in Apex class :

List<Database.LeadConvertResult> lcr = Database.convertLead(listOfLeadConvert);

My test class

@isTest(SeeAllData=true) 
public class Test_CVFC_massConvertwithInputs {
public static testmethod void Test_CVFC_massConvertwithInputs(){
    Account a = new Account (); 
    a.Name = 'LeadCompany';
    insert a;

    Opportunity o = new Opportunity();
    o.AccountId = a.Id;
    o.Name = 'LeadCompany';
    O.StageName = 'Prospecting';
    O.CloseDate = date.today();

    insert o;

    Contact c = new Contact();
    c.AccountId = a.id;
    c.FirstName = 'LeadFirstname';
    c.LastName = 'Leadlastname';
    c.MailingStreet = 'LeadStreet';
    c.MailingCity = 'LeadCity';
    c.MailingState = 'LeadState';
    c.MailingPostalCode = '09877';
    insert c;

    Lead l = new Lead();
    //l.Name = 'LeadName';
    l.Company = 'LeadCompany';
    l.IsUnreadByOwner__c = true;
    l.Description = 'leadDescription';
    //l.Status = 'Closed - Converted';
    l.FirstName = 'LeadFirstname';
    l.LastName ='Leadlastname';
    l.Street = 'LeadStreet';
    l.City = 'LeadCity';
    l.State = 'LeadState';
    l.PostalCode = '09877';
    insert l; 

    List<Lead> leadLst = new List<Lead>();
    leadLst = [SELECT  FirstName, LastName, Street, City, State, PostalCode from Lead where id =: l.Id ];

    /*Database.LeadConvert lc = new Database.LeadConvert();
    lc.setLeadId(l.Id);

    LeadStatus convertStatus = [Select Id, MasterLabel from LeadStatus where IsConverted=true limit 1];
    lc.setConvertedStatus(convertStatus.MasterLabel);*/

    PageReference pageRef = Page.massConvertWithInputs;
    Test.setCurrentPage(pageRef); 
    pageRef.getParameters().put('toconvertLeadIds', l.id); 

    ApexPages.StandardController sc = new ApexPages.standardController(l);  

    CVFC_massConvertwithInputs cmc = new CVFC_massConvertwithInputs(sc);
    system.debug('Wrapper list size '+cmc.wrapperList.size());
    for(Integer i = 0; i < cmc.wrapperList.size(); i++){
        System.debug('Values in Wrapper list ' + cmc.wrapperList[i]);
    }
    //cmc.leadIds = leadLst;
    cmc.convert();

}

}

is there any thing i am missing out please guide me.

4
  • 4
    Is there a time-based workflow action pending on the Lead ? May 23, 2013 at 13:32
  • I'd suggest you also look at your Account and Opportunity objects to see what the required fields are. Not satisfying those requirements may be why you're getting the workflow exceptions. You could try doing "Database Insert" using the "false" option which allows the insert to succeed even though not all of the required fields are completed. Unfortunately, your workflow rules if enabled will likely continue to throw exceptions.
    – crmprogdev
    May 27, 2013 at 16:27
  • also not sure why you have seealldata=true.. Oct 26, 2013 at 17:29
  • Have you tried changing the field update step in your workflow as a final approval step? I got this from a similar issue found here: success.salesforce.com/answers?id=90630000000gxQfAAI Feb 5, 2014 at 18:08

1 Answer 1

4

As noted by the commenters, this is almost assuredly that your test Lead is entering into a time-based workflow or approval process.

To verify:

  1. Use anonymous APEX to insert your test Lead
  2. Go to Setup | Monitoring | Time-Based Workflow and fill out the query form : Object equals Lead. If your test lead is displayed - you have a time-based workflow that will prevent lead conversion. Change your test data so as not to trigger the time-based workflow
  3. If not found, in #2, look for an open approval process by going to Setup | Data Management | Mass Transfer Approval Processes and fill in the query Submitter Last name equals <your lastname>. That said, it would be an unusual org that used Approval Processes on Leads. If present, figure out a way for your test data to not initiate the approval process

Lastly, in your post, you commented out all the lead convert code as it presumably is inside of the controllerExtension CVFC_massConvertwithInputs.convert(). It is not clear what happens within the cmc.convert() method (e.g. are you enhancing the Lead and resaving it?).

1
  • 1
    In our case, flow was not time based but flow execution errored hence it was put into that Time-based workflow queue to be retried later. Once we deleted that record, conversion worked.
    – metasync
    Oct 12, 2023 at 21:42

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .