40 Apex Trigger Scenario Use Cases with Solution
40 Apex Trigger Scenario Use Cases with Solution
SCENARIO/USE CASES
WITH SOLUTION
@salesforcecorporatetrainer
Apex triggers are essential components of
Salesforce development, allowing
developers to automate business
processes and execute custom logic.
However, writing effective Apex triggers
can be challenging, particularly when
dealing with complex business
requirements.
In this post, we will explore 40 common
scenarios and use cases where Apex
triggers can be used to automate
business processes and streamline
workflow. We will provide practical
solutions and code examples to help
developers build robust and efficient
triggers.
@salesforcecorporatetrainer
When ever a record is
inserted to the account
automatically inserted
to the contact
@salesforcecorporatetrainer
@salesforcecorporatetrainer
When ever a record is
inserted to the contact
automatically inserted
to the account
@salesforcecorporatetrainer
@salesforcecorporatetrainer
When ever a create
opportunity object
record updated total
opportunies and total
amount in account
object
@salesforcecorporatetrainer
trigger scenario24 on Opportunity (after insert) {
set<id>ids = new set<id>();
for(Opportunity op : trigger.new) {
ids.add(op.accountid);
}
list<account> ac = [select Total_opportunities__c,
Total_Amount__c, (select id, Amount from
Opportunities) from account where id = :ids];
for(account a : ac) {
a.Total_opportunities__c = a.opportunities.size();
decimal sum = 0;
for(opportunity p : a.opportunities) {
sum = sum + p.amount;
}
a.Total_Amount__c = sum;
}
update ac;
}
@salesforcecorporatetrainer
Contact object when
ever department
equal to cse
automatically before
inserted email field
@salesforcecorporatetrainer
@salesforcecorporatetrainer
When ever we modify
inputout object
doctorname
automatically update
droppoff object text
field no relation ship
@salesforcecorporatetrainer
trigger SCENARIO32 on Inputout__c (after update) {
list<Dropoff1__c> d = [SELECT Id, Name, Text__c
FROM Dropoff1__c WHERE Text__c = 'naveen']; string name; for
(Inputout__c c : trigger.new) { name = c.Doctor_Name__c; } for
(Dropoff1__c dp : d) { dp.Text__c = name; } update d; }
@salesforcecorporatetrainer
Limit reached the
records
@salesforcecorporatetrainer
trigger SCENARIO6 on Account (before insert,before update) {
integer count=0;
list<account> a = [select id,name from account where
createddate=today or lastmodifieddate=today];
for(account ac: trigger.new) {
count = a.size();
ac.NumberofLocations__c = count;
if(count > 2) {
ac.addError('Reached limit today');
}
}
}
@salesforcecorporatetrainer
Can not
inser/update/delete
that user account
object records
@salesforcecorporatetrainer
@salesforcecorporatetrainer
Already existing
records display error
message
@salesforcecorporatetrainer
trigger scenario8 on Contact (before insert) {
list<string>st=new list<string>();
for(contact c:trigger.new) {
if(a.size()>0) {
c.Email.adderror('already existing');
}
}
@salesforcecorporatetrainer
Count of related
contacts and
accounts field display
size
@salesforcecorporatetrainer
public static void increment(list<contact>con) {
set<id>ids=new set<id>();
for(contact c:con) {
ids.add(c.accountid);
}
list<account>a=[select id,name,NumberOfEmployees,(select
id,lastname from contacts) from account where id=:ids];
for(account ac:a) {
ac.NumberOfEmployees=ac.contacts.size();
}
update a;
}
@salesforcecorporatetrainer
when ever opportunity
stagename
=closedwon
automatically update
the account field
rating=hot
@salesforcecorporatetrainer
@salesforcecorporatetrainer
when ever account
name is naveen
automatically update
the contact all
lastnames
@salesforcecorporatetrainer
trigger scenario13 on Account (after update) {
string names;
list<contact> c = [select id, lastname, firstname from contact
where lastname = :names];
for(account a : trigger.new) {
names = a.Name;
}
for(contact con : c) {
con.LastName = names;
}
update c;
}
@salesforcecorporatetrainer
when ever a opportunity
created record amount
field is calculated by
account total field
@salesforcecorporatetrainer
trigger scenario21 on Opportunity (after insert, after update, after
delete) { set<id> ids = new set<id>(); map<id, opportunity> opp =
new map<id, opportunity>(); Decimal oldVal; Decimal newVal;
@salesforcecorporatetrainer
} else { a.Total_Amount__c += opp.get(a.Id).Amount; } } update
acc; } else if(trigger.isUpdate) { for(opportunity op : trigger.new) {
if(op.Amount != trigger.oldMap.get(op.Id).Amount) {
ids.add(op.AccountId); opp.put(op.AccountId, op); } }
list<account> acc = [select id, Total_Amount__c from account
where id = :ids]; for(account a : acc) {
list<account> acc = [select id, Total_Amount__c from account
where id = :ids]; for(account a : acc) { oldVal =
trigger.oldMap.get(a.Id).Total_Amount__c; newVal =
a.Total_Amount__c; if(oldVal == null) { oldVal = 0; } if(newVal ==
null) { newVal = 0; } a.Total_Amount__c = (newVal - oldVal) +
opp.get(a.Id).Amount; } update acc; } else if(trigger.isDelete) {
for(opportunity op : trigger.old) { ids.add(op.AccountId);
opp.put(op.AccountId, op);
@salesforcecorporatetrainer
} list<account> acc = [select id, Total_Amount__c from account
where id = :ids];
for(account a : acc) { if(a.Total_Amount__c != null) {
a.Total_Amount__c -= opp.get(a.Id).Amount; } } update acc; } }
@salesforcecorporatetrainer
when ever a create a
lead object
automatically
converted account
,contact,opportunity
@salesforcecorporatetrainer
@salesforcecorporatetrainer
when ever create a
contact automatically
update opprtunity fields
@salesforcecorporatetrainer
@salesforcecorporatetrainer
Whenever new account
is created, its rating
should be hot.
@salesforcecorporatetrainer
@salesforcecorporatetrainer
Make a Fax field
mandatory in Account
using trigger.
@salesforcecorporatetrainer
@salesforcecorporatetrainer
Whenever a new
contact is created,
prefix the firstname with
Mr.
@salesforcecorporatetrainer
@salesforcecorporatetrainer
Prevent the insertion of
an account, if you
already have an
account with the same
name
@salesforcecorporatetrainer
Set<String> setName = new Set<String>(); for(Account acc :
trigger.new) { setName.add(acc.name); } if(setName.size() > 0 ) {
List<Account> lstAccount = [SELECT name, id FROM Account
WHERE name IN :setName]; Map<String ,Account>
mapNameWiseAccount = new Map<String,Account>();
for(Account acc: lstAccount) {
mapNameWiseAccount.put(acc.name ,acc); } for(Account acc :
trigger.new) { if(mapNameWiseAccount.containsKey(acc.name)) {
acc.Name.addError('Name already exists'); } } } }
@salesforcecorporatetrainer
Whenever a new
contact is inserted in
the system, update the
accounts phone field
with the contacts phone
field
@salesforcecorporatetrainer
trigger contactTrigger on Contact (before insert, before update,
before delete, after insert, after update, after delete, after
undelete) {
if(trigger.isBefore){
system.debug('I am before trigger ');
}
else if(trigger.isAfter){
system.debug('I am after trigger ');
if(trigger.isUpdate){
contactTriggerHandler.afterUpdateHelper(trigger.new);
}
}
}
@salesforcecorporatetrainer
Create a contact
whenever a new
account is created.
@salesforcecorporatetrainer
@salesforcecorporatetrainer
Prevent to delete
account if they have
related opportunity
@salesforcecorporatetrainer
trigger DeleteAccountOpportunity1 on Account (before delete) {
for(Account a : Trigger.OLD) {
for(Opportunity o : Opp) {
if(a.id == o.accountId) {
@salesforcecorporatetrainer
if the account does not
exist during the creation
of a record in the
contact object then
create a new account
record
@salesforcecorporatetrainer
NEEDS TO ASK
@salesforcecorporatetrainer
Trigger will prevent the
user to delete records
from account
@salesforcecorporatetrainer
trigger test6 on Account (before delete) {
@salesforcecorporatetrainer
Prevent user from
creating duplicate
accounts with same
name
@salesforcecorporatetrainer
trigger AccountDuplicate on Account (before insert) {
if(setName.size() > 0 ) {
@salesforcecorporatetrainer
Add a prefix dr to all
leads names whenever
a record is updated or
inserted
@salesforcecorporatetrainer
Set<Id> accountIds = new Set<Id>();
List<Contact> newContacts = Trigger.new;
update accountsToUpdate;
@salesforcecorporatetrainer
Prevent user to delete
contact which is
associated with any
account.
@salesforcecorporatetrainer
for (Contact c : Trigger.old) {
if (c.AccountId != null) {
c.addError('Cannot delete contact associated with an
Account.');
}
}
@salesforcecorporatetrainer
Throw an error if phone
number is not 10 dight
of length
@salesforcecorporatetrainer
@salesforcecorporatetrainer
Whenever contact is
created update status
field from it's associate
account
@salesforcecorporatetrainer
Keep Reading!
@salesforcecorporatetrainer
Whenever a new record
is created in account
object, before this
record inserted in
account object Account
@salesforcecorporatetrainer
Delete all contact
records available with
the same name
@salesforcecorporatetrainer
When ever a record is
inserted to the Account
automatically inserted
to the Contact
@salesforcecorporatetrainer
trigger SCENARIO1 on Account (after insert) {
list<contact> c=new list<contact>();
for(account a:trigger.new)
{
contact b = new contact();
b.LastName = a.Name;
b.AccountId = a.Id;
c.add(b);
}
insert c;
@salesforcecorporatetrainer
when ever a create
opportunity object
record updated total
opportunies and total
amount in account
object
@salesforcecorporatetrainer
trigger scenario24 on Opportunity (after insert) {
set<id> ids = new set<id>();
for(Opportunity op:trigger.new)
{
ids.add(op.accountid);
}
list<account>ac=[select
Total_opportunities__c,Total_Amount__c,(select id,Amount
from Opportunities ) fro
ma
ccount where id=:ids];
for(account a:ac)
{
a.Total_opportunities__c=a.opportunities.size();
decimal sum=0;
for(opportunity p:a.opportunities)
{
sum=sum+p.amount;
}
a.Total_Amount__c=sum;
}
update ac;
}
@salesforcecorporatetrainer
Can not
inser/update/delete
that user account
object records
@salesforcecorporatetrainer
trigger AccountDuplicate on Account (before insert, before
update, before delete){
@salesforcecorporatetrainer
when ever opportunity
stagename
=closedwon
automatically update
the account field
rating=hot
@salesforcecorporatetrainer
trigger updateAccountRating on opportunity (after insert, after update){
list<Id> accIds = new list<Id>();
list<Account> accounts = new list<account>();
for(opportunity o:trigger.new){
accIds.add(o.accountId);
}
for(account a:[select Id, Rating from account where Id IN :accIds]){
for(opportunity opp:trigger.new){
if(opp.stage=='closed won'){
a.Rating='hot';
accounts.add(a);
}
}
}
update accounts;
}
@salesforcecorporatetrainer
name field is updated
on account then put
name field as name +
Phone
@salesforcecorporatetrainer
trigger AccountDuplicate on Account (before update){
@salesforcecorporatetrainer
Whenever account is
created with annual
revenue more than
50000, then add Pranay
mehare as contact
Name
@salesforcecorporatetrainer
DONE (Check 50 k and insert contact )
Cont.AccountId = Acc.Id;
Cont.Firstname = 'Pranay';
Cont.Lastname = 'Mehare';
ContList.add(Cont);
}
}
Insert ContList;
@salesforcecorporatetrainer
Whenever Lead is
created with lead
Source as WEB then
give rating as COLD
otherwise HOT
@salesforcecorporatetrainer
trigger test56 on Lead (before insert) {
if (l.leadSource == 'Web'){
l.Rating = 'Cold';
}
Else{
l.Rating = 'Hot';
}
}
}
@salesforcecorporatetrainer
Prevent Account from
deleting if it has 2 or
more contacts
@salesforcecorporatetrainer
trigger Account1 on Account (before Delete) {
AccIds.add(A.Id);
}
for (Account A:[SELECT Id, Name, (SELECT Id, Firstname, LastName FROM
Contacts) FROM ACCOU
NT WHERE Id IN :AccIds]){
AccMap.put(A.Id, A);
}
for (Account A1:Trigger.Old){
@salesforcecorporatetrainer
While creating or
updating Lead check
whether Email is
already there in existing
contact , if it is there
then throw an error
@salesforcecorporatetrainer
//Unrelated Objects ::
contMap.put(c.Email, c);
}
for (lead l:Trigger.new){
@salesforcecorporatetrainer
Whenever phone is
modified on account
object then update
contact record with
phone field
@salesforcecorporatetrainer
trigger updatePhone on Account (after update) {
con.HomePhone=trigger.newmap.get(con.AccountId).Phone;
con.OtherPhone = trigger.oldmap.get(con.AccountId).Phone;
conlist.add(con);
}
update conlist;
@salesforcecorporatetrainer
Counts number of
contacts on Account
using trigger (Create
Lookup Summary field
using Trigger)
@salesforcecorporatetrainer
Note : Object CONTACT [Very importatnt]
TRIGGER :
HANDLER CLASS :
try{
if (NewContact != Null){
for (Contact con:newContact){
if(Con.AccountId != Null){
ContAcc
}
@salesforcecorporatetrainer
if (oldContact != Null){
for (Contact con:oldContact){
if(Con.AccountId != Null){
ContAccIds.add(con.AccountId);
}
}
}
if (AccList != Null){
for (Account AccValue:AccList){
accvalue.ContCount__c = accValue.Contacts.Size();
}
}
if(!AccList.isEmpty()){
update AccList;
}
}
@salesforcecorporatetrainer
Continuously exploring and implementing
new techniques can greatly enhance
your productivity and efficiency
in using Salesforce. Stay
up-to-date and
keep learning
@salesforcecorporatetrainer