function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Justin.WilliamsJustin.Williams 

Not getting complete code coverage from this test, any thoughts?

May have a bulkify issue.  I thought the code below was bulkified but its preventing me from insterting opportunities over 1 at a time.  At least I think its the below code, from what little I know about using debug logs and the developer console.  I filtered on the phrase "Insert Failed" and I saw this trigger come up.

 

The error I get with the data loader when its higher than 1 record is this

 

Insert failed. First exception on row 0 with id a047000000G0BaFAAV; first error: INVALID_FIELD_FOR_INSERT_UPDATE, cannot specify Id in an insert call: [Id]

 

trigger UpdateSalesScoreEvents on Opportunity (After update) {
   
   try { 
 
    // List of variables to be used later.
       List<Sales_Score__c> ScoreEvents = new list<Sales_Score__c>();   
       List<Opportunity> OldStage = New list<Opportunity>();
       ScoreEventHelper.resetCreatedScores();


    // 
    for (Opportunity Opp: Trigger.New) {
        if ((Opp.Company_Division__c == 'Textura') && (Opp.StageName != trigger.oldMap.get(Opp.id).StageName) && (!ScoreEventHelper.hasAlreadyCreatedScores())){

            //
            Sales_Score__c OldEvent = new Sales_Score__c();
            OldEvent.Opportunity__c = opp.id;
            OldEvent.Direction__c = 'Leaving Stage';
            OldEvent.Movement_Date__c = system.Today();
            OldEvent.Stage__c = Trigger.oldMap.get(opp.ID).StageName;
            // Add to ScoreEvent list
            ScoreEvents.add(OldEvent);
            
            //
            Sales_Score__c Event = new Sales_Score__c();
            Event.Opportunity__c = opp.id;
            Event.Direction__c = 'Entering Stage';
            Event.Movement_Date__c = system.Today();
            Event.Stage__c = opp.StageName;
            // Add to ScoreEvent list
            ScoreEvents.add(Event);
                                   

        }
        ScoreEventHelper.setAlreadyCreatedScores();
        insert ScoreEvents;
    }   
   } catch (Exception e) {Trigger.new[0].addError(e.getMessage());}   
}

 

Naidu PothiniNaidu Pothini
trigger UpdateSalesScoreEvents on Opportunity (After update)
{
    List<Sales_Score__c> ScoreEvents = new list<Sales_Score__c>();   
    List<Opportunity> OldStage = New list<Opportunity>();
    ScoreEventHelper.resetCreatedScores();

    for (Opportunity Opp: Trigger.New)
    {
        if ((Opp.Company_Division__c == 'Textura') && (Opp.StageName != trigger.oldMap.get(Opp.id).StageName) && (!ScoreEventHelper.hasAlreadyCreatedScores()))
        {
            Sales_Score__c OldEvent = new Sales_Score__c();
            OldEvent.Opportunity__c = opp.id;
            OldEvent.Direction__c = 'Leaving Stage';
            OldEvent.Movement_Date__c = system.Today();
            OldEvent.Stage__c = Trigger.oldMap.get(opp.ID).StageName;
            // Add to ScoreEvent list
            ScoreEvents.add(OldEvent);
            
            Sales_Score__c Event = new Sales_Score__c();
            Event.Opportunity__c = opp.id;
            Event.Direction__c = 'Entering Stage';
            Event.Movement_Date__c = system.Today();
            Event.Stage__c = opp.StageName;
            // Add to ScoreEvent list
            ScoreEvents.add(Event);
        }
    }

    try
    {
        ScoreEventHelper.setAlreadyCreatedScores();
        insert ScoreEvents;
    }
    catch (Exception e)
    {
        Trigger.new[0].addError(e.getMessage());
    }   
}

When the loop runs for the first opportunity, ScoreEvents List will have two sales score records, so works fine, but when the loop runs for the second time ScoreEvents list will have two more newly created sales score records with first two records already inserted.

 

try the above code.