You need to sign in to do that
Don't have an account?
saariko.ax241
Simple trigger - change the IsUnreadByOwner
I am trying to update the field: IsUnreadByOwner - when a lead status changes to: Unqualified.
this is my trigger:
trigger UnqualifiedLead on Lead (before update) { for(Lead lead: Trigger.new) { if (lead.Status == 'Unqualified') { lead.IsUnreadByOwner = false; update lead; } } }
And my trigger:
@isTest private class UnqualifiedLeadTest { static testMethod void myUnitTest() { // Setup the lead record Lead lead = new Lead(); lead.LastName = 'last'; lead.FirstName = 'First'; lead.Company = 'Company'; lead.Status = 'Unqualified'; insert lead; lead.IsUnreadByOwner = True; update lead; } }
i have a feeling, that the "update lead;" line is wrong, but not sure how to check if the change works.
Appreciate the help.
This is the error log I get
*** Deployment Log *** Result: FAILED Date: July 17, 2012 5:49:07 PM IDT # Deployed From: Project name: Email2Lead Username: saar....@.com Endpoint: www.salesforce.com # Deployed To: Username: saar.....@.com Endpoint: www.salesforce.com # Deploy Results: File Name: package.xml Full Name: package.xml Action: UPDATED Result: SUCCESS Problem: n/a File Name: triggers/UnqualifiedLead.trigger Full Name: UnqualifiedLead Action: UPDATED Result: SUCCESS Problem: n/a # Test Results: Run Failures: UnqualifiedLeadTest.myUnitTest System.DmlException: Update failed. First exception on row 0 with id 00QD000000VgQJHMA3; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, UnqualifiedLead: execution of BeforeUpdate caused by: System.SObjectException: DML statment cannot operate on trigger.new or trigger.old Trigger.UnqualifiedLead: line 7, column 1: []
Ya - I'm pretty sure that - in your test class - after your insert lead; - you will need to query to get the lead record. Something like this...
insert lead;
Lead newLead = [SELECT Id, IsUnReadByOwner FROM LEAD where Id = :Lead.Id LIMIT 1]();
newLead.isUnReadByOwner = true;
Update newLead;
I might be off on my syntax - but I think that's close.
You cannot have DML Statement in your trigger. Remove the update Statement it should work fine
Tuning Sam's reply a bit.
You cannot use trigger variables for DML operations. In your code
the variable lead is taken from trigger.new. You cannot use it to perform DML.
As Sam mentioned, you can remove the update statement, and it should be fine, as you are modifying the content in triggee.new
Ah - yes - great catch guys. Thanks for the clarification/corrections.
saariko - if this answered your question - you should mark it as solved.
Thanks all,
So I did remove the update from the class (I understand now alittle better the process)
- lead is created
- trigger is "updating" the lead just before the update
- no need to "update the lead" - since this is done once the trigger ends.
- I added the query string (as suggested by @JeffStevens) and the validtion is passing.