You need to sign in to do that
Don't have an account?
dfiorent
Trigger to update a checkbox on Opportunity if Contact.mailing address is blank
I have no experience writing triggers and am looking for a sample that I can use to create my trigger. Any examples would be appreciated.
When an Opportunity is being created or updated, I need to set a check box to true if the mailing address on the Contact is blank.
You should be able to do this with a Workflow Rule + Field Update.
Workflow rule would be:
If formula evaluates to true
Formula = ISBLANK(FIELD YOU WANT TO CHECK GOES HERE)
Then have it use a field update to set the checkbox.
Can be accomplished in various ways, with a workflow rule as the above poster suggeted or a trigger.
Just add whatever logic you need there, i havent compiled this its just to get you started :)
Hope this helps
Gaston.
I am still a little confused - I would like to use the workflow rule and field update but I have a question:
I want to check the if the mailing address is blank on the contact when a new opportunity is created. If it is, I want to set a check box to true on the Opportunity. If do the workflow rule on mailing street, and have it use the field update - how do I make sure this is only done when an Opportunity is created?
This is all new to me!
I am trying to get the trigger to work now - how do I link Contact and Opportunity? Do I need to do a Select against OpportunityContactRole to get the contact id to select the contact record so I can check the address field for spaces?
Which Contact in particular are you checking against?
Is there a lookup field on the Opp record or are you looking for a particular Contact related through Contact Roles?
I am looking for the address on the Contact that is related to the Opportunity. I do not have a lookup field on the Opportunity table, I would be looking through ContactRoles
Ah, that does make it a bit more difficult. How will you be deciding which Contact to check if there are multiple Contacts listed?
In our instance - an Opportunity will only have 1 related contact.
If that is the case, then something like this should work. This isn't tested, so there may be typos.
Thanks so much - I will give it a try!
That code assumes just one Contact for each Opp. Probably wouldn't hurt to put some checks in there to ensure that there aren't multiple Contacts, just in case.
Thank you for your help. I made a few modifications and now have it working - partially. It works for the before update, but not before insert. Any suggestions?
trigger CheckContactAddress on Opportunity(before insert, before update)
{
List<OpportunityContactRole> contactRoles = [SELECT OpportunityId,ContactId
FROM OpportunityContactRole
WHERE OpportunityId IN : Trigger.new];
if(contactRoles.size()>0)
{
Map<Id,Id> oppCon_map = new Map<Id,Id>();
for(OpportunityContactRole cr : contactRoles)
{
oppCon_map.put(cr.OpportunityId,cr.ContactId);
}
Map<Id,Contact> con_map = new Map<ID,Contact>([SELECT Id,MailingStreet
FROM Contact
WHERE Id IN : oppCon_map.values()]);
for(Opportunity o : Trigger.new)
{
if(oppCon_map.containsKey(o.Id))
{
if(con_map.get(oppCon_map.get(o.id)).MailingStreet == null )
{
o.Use_SW_Address_as_Ship_Bill_To__c = TRUE;
}
else
{
o.Use_SW_Address_as_Ship_Bill_To__c = FALSE;
}
}
}
}
}
Now that I think about it, before insert doesn't make much sense, does it? You can't insert an Opp with a Contact Role. The contact role has to be created after the Opp is inserted. Ideal situation would be to setup a trigger on the OppContactRole, but that is not currently possible.
I have a similar requirement.
Accounts_to_be_assigned__c is a checkbox in accounts. And i need to write a trigger to check that checkbox when OpportunityStage='Won'.
any suggestions please. since this is a cross-object reference, i am confused on how and where to start.
Pls note that 1 Account can have multiple opportunities.
so, you mean if any one opportunity's stage is set to "won", you want that checkbox to be checked on the account?
Trigger is the way to do that . You can write a trigger on Opportunity for an update event that does the trick.
Let me know if this helped.
Sales4ce
public static void isCheckAccount(List<Account>accList){
for(Account a:accList){
if(a.IsActive__c==true){
a.addError('Cannot update isActive field now first create contacts');
}
}
}
public static void isCheckContact(List<Account>accList){
System.debug('Trigger.new'+accList);
Integer newStatus=0;
Integer renewStatus=0;
Set<Id> accId=new Set<Id>();
for(Account a:accList){
accId.add(a.Id);
}
System.debug('accList'+accList);
System.debug('accId'+accId);
// List<Contact> con=new List<Contact>[Select Id,Name Type__c From Contact Wh];
map<Id,List<Contact>> accountContactMap = new map<id,List<Contact>>();
List<Account> lstAccount = [SELECT Id,
name,
IsActive__c,
(SELECT Id,
Name,
Type__c
FROM Contacts
Where Type__c=:'New'
Or Type__c=:'Renew')
FROM Account
Where Id IN :accId];
for(Account acc : lstAccount)
{
accountContactMap.put(acc.id, acc.Contacts);
}
System.debug(accountContactMap);
for (List<Contact> outerList : accountContactMap.values())
{
for(Contact con:outerList){
System.debug('Type'+con.Type__c);
if(con.Type__c=='New'){
newStatus=newStatus+1;
System.debug('newStatus'+newStatus);
}
else if(con.Type__c=='Renew'){
renewStatus=renewStatus+1;
System.debug('renewStatus'+renewStatus);
}
}
}
for(Account a : accList){
if(a.IsActive__c==true){
if(newStatus>0 && renewStatus>0)
{
System.debug('You can update');
a.IsActive__c=true;
}
else
{
a.addError('You should have atleast 1 contact of type new and 1 of type renew');
a.IsActive__c=false;
}
}
}
}
/*public static void isCheckContact(List<Account>accList){
System.debug('Trigger.new'+accList);
Integer newStatus=0;
Integer renewStatus=0;
Set<Id> accId=new Set<Id>();
for(Account a:accList){
accId.add(a.Id);
}
System.debug('accList'+accList);
System.debug('accId'+accId);
List<Account> lstAccount = [SELECT Id,
name,
IsActive__c,
(SELECT Id,
Name,
Type__c
FROM Contacts
Where Type__c=:'New'
Or Type__c=:'Renew')
FROM Account
Where Id IN :accId];
}*/
} how to bulkify ths code
please anyone can help me