• BCT Admin
  • NEWBIE
  • 0 Points
  • Member since 2012

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 0
    Questions
  • 1
    Replies

I have a after trigger on CampaignMember with a goal to calculate a Lead score based on Campaign participation.  Each Campaign has a set of scores associated to Campaign Member status values, and the trigger rolls these values up to the Lead.

 

Campaign #1- Webinar: Registered - 5pts, Attended - 8pts

Campaign #2- Seminar: Registered - 7pts, Attended - 10pts

 

Joe Lead - attended Webinar (+8), registered for Seminar (+7) for a total of 15 rolled up to the Lead.

 

This appears to be working in the UI, but the Unit Tests are failing because the Campaign Member: Status that I set when I create is changed to 'Sent' when it is inserted in the database.  This happens even if 'Sent' isn't one of the available labels/values for Campaign Member: Status.

 

I checked for Workflow rules that might be setting Status, but there are none.

 

Here's the Unit Test code:

 

 

Lead TestLead1 = new Lead(LastName='TestLead 1', Company='Test Company', Status='Qualified'); insert TestLead1; Campaign TestCampaign1 = new Campaign(Name='Test-Webinar Campaign I', Response_1__c='Responded', Response_1_Score__c=0, Response_2__c='Registered', Response_2_Score__c=4, Response_3__c='Attended', Response_3_Score__c=7); insert TestCampaign1; // Create CampaignMembers, associating the new Leads to their associated Campaigns CampaignMember member1 = new CampaignMember(CampaignId=TestCampaign1.Id, LeadId=TestLead1.Id, Status='Registered'); system.debug('===== InsertSingleCampaignMember:' + TestCampaign1.Name + ', member1(pre-insert)=' + member1.Status + ' ====='); insert member1;

The debug code is confirming that the initial CampaignMember status = 'Registered'

 

Once inside the After trigger, the status appears as 'Sent' (and I changed 'Sent' in the sandbox to 'Solicited'; it still says 'Sent')

 

Again, no workflow.  Here is my Trigger code: 

 

 

Set<Id> setLeadIds = new Set<Id>(); Set<Id> setMemberIds = new Set<Id>(); List<CampaignMember> lstCampaignMembers = new List<CampaignMember>(); List<Lead> lstLeads = new List<Lead>(); // Add the Lead, CampaignMember and Campaign Ids in the trigger to our sets for (CampaignMember member :trigger.new) { if (member.LeadId <> null) { setLeadIds.add(member.LeadId); setCampaignIds.add(member.CampaignId); system.debug('===== processing campaign member ' + member.Status + '...'); ...

At this point ^, when I'm capturing the details of the CampaignMembers in my After trigger, the member Status is 'Sent'.

 

Does this make sense to anybody?!?

 

For overkill' sake, this is what appears when I run my test:

 

 

Class.UnitTests_updateCampaignMembers.test_Insert_SingleLead_SingleCampaign: line 33, column 4: ===== InsertSingleCampaignMember:Test-Webinar Campaign I, member1(pre-insert)=Registered ===== ** so far, so good ** Class.UnitTests_updateCampaignMembers.test_Insert_SingleLead_SingleCampaign: line 35, column 4: Insert: SOBJECT:CampaignMember *** Beginning updateCampaignMembers on CampaignMember trigger event AfterInsert for 00vQ000000077Ry Trigger.updateCampaignMembers: line 24, column 3: SelectLoop:LIST:SOBJECT:CampaignMember 20100109142457.212:Trigger.updateCampaignMembers: line 28, column 5: ===== processing campaign member Sent... ** nope, not so good after all **