Bouncing around a little bit now, I’ve found myself on a Salesforce.com project (dare I say “trapped”?). Anyway, I did have some fun coding with the Force.com IDE.
In this scenario, I had to write my very first trigger. The requirement was to create a case upon the creation of a new record. My code ended up looking like this for the trigger.
trigger createCaseFromBroker on BrokerShop__c (after insert) { List<Group> sfdcGroup = [select Id, name from Group where Name = 'Support Queue' limit 1]; if(Trigger.new.size() == 1){ for(BrokerShop__c b:Trigger.new){ //for each broker, b, create a new DueDiligence case Case newCase = new Case( Subject = 'Perform Due Diligence', Broker_Shop__c = b.Id, Status = 'Open', Priority = 'Medium', Category__c = 'Pre-Approval', Subcategory__c = 'How to become a Broker', Origin = 'Web' //is there an origin? required in UI ); //if broker has a primary contact if(b.Primary_Contact__c != null){ newCase.ContactId = b.Primary_Contact__c; } if(!sfdcGroup.isEmpty()){ newCase.OwnerId = sfdcGroup[0].Id; } insert newCase; } } }
A couple of notes on this:
- This is the main trigger set to fire ‘after insert’
- The trigger is based on a custom SFDC object
On to the unit testing. I will give credit to Salesforce on this one. Requiring unit tests with a minimum coverage of 75% is commendable. Annoying for those of us that just hack our way (me), but still commendable. On to the tests. I encapsulated all of the test cases into my own class file.
public class CreateCase { static testMethod void test_createCaseFromBroker(){ //create contact record Contact contact = new Contact(); contact.FirstName = 'Test 1 - contact'; contact.LastName = 'Dummy'; insert contact; String contactId = contact.Id; //create broker record #1 BrokerShop__c broker1 = new BrokerShop__c(); broker1.Name = 'Test 1 - broker'; broker1.Street_Address__c = '123 Test St'; broker1.City__c = 'Test'; broker1.State__c = 'California'; broker1.Zip__c = '00000'; broker1.Primary_Contact__c = contactId; insert broker1; String broker1Id = broker1.Id; //validate case was created List<Case> bsCase = [ SELECT Id,Broker_Shop__c FROM case WHERE Broker_Shop__c = :broker1Id LIMIT 1 ]; for( Case c:bsCase ){ System.assertEquals(broker1Id,c.Broker_Shop__c); } } }
So there you have it. A insert trigger within Salesforce to create a related case record.