You need to sign in to do that
Don't have an account?
sam_Admin
Case Insensitive trigger
Issue: Below trigger forwards opp if opp name contains "TrailHead", our users are entering "Trailhead" and opp is not forwarding, it's getting forwarded if i use "TrailHead", i have used contains so why is my trigger using case sensitive?
Trigger AutoforwardOpp on Opportunity(after insert, after update)
{
List <PartnerNetworkRecordConnection> prncList;
List <PartnerNetworkConnection> connectionList;
Map <ID, PartnerNetworkConnection> connMap;
Map <ID, ID> oppIdvsAccountIdMap;
Map<ID, Account> accountWithContactMap;
ID cid;
String status;
String connName;
if(Trigger.isafter && (Trigger.isInsert || Trigger.isUpdate)){
connectionList = new List<PartnerNetworkConnection>();
prncList = new List<PartnerNetworkRecordConnection>();
//This would ideally return multiple active Connections if they exist hence its best you use a
//criteria to ensure only the appropriate connection record is returned.
connMap = new Map<ID, PartnerNetworkConnection>(
[Select ID, ConnectionStatus, ConnectionName
From PartnerNetworkConnection
Where ConnectionStatus = 'Accepted']);
//get connection details
for(ID connId :connMap.keySet()){
cid = connMap.get(connId).ID;
status = connMap.get(connId).ConnectionStatus;
connName = connMap.get(connId).ConnectionName;
}
//Populate a map of Opp Ids and associated Account Ids
oppIdvsAccountIdMap = new Map<ID, ID>();
for(Opportunity oppRecord :Trigger.new){
if(oppRecord.Name.contains('TrailHead')){
//System.debug('Opp Id: ' + oppRecord.ID + '-> Account Id: ' + oppRecord.AccountId);
oppIdvsAccountIdMap.put(oppRecord.ID, oppRecord.AccountId);
}
}
//Get associated Accounts and Contacts for every US opportunity if they exist
if(oppIdvsAccountIdMap.keySet().size() > 0){
accountWithContactMap = new Map<ID, Account>(
[Select ID, Name,
(Select ID, Name, Account.Id From Account.Contacts)
From Account
Where ID IN :oppIdvsAccountIdMap.values()]);
//Create PartnerNetworkRecordConnections for sharing the records
for(ID oppId : oppIdvsAccountIdMap.keySet()){
ID accountId = oppIdvsAccountIdMap.get(oppId);
//Share Opportunity
prncList.add(new PartnerNetworkRecordConnection(
ConnectionId = cid,
LocalRecordId = oppId,
SendClosedTasks = true,
SendOpenTasks = true,
SendEmails = true));
//Share Account
if(oppIdvsAccountIdMap.get(oppId) != null){
prncList.add(new PartnerNetworkRecordConnection(
ConnectionId = cid,
LocalRecordId = accountId,
SendClosedTasks = true,
SendOpenTasks = true,
SendEmails = true));
}
//Share associated Contacts
if(accountWithContactMap.get(accountId).Contacts != null){
for(Contact contact :accountWithContactMap.get(accountId).Contacts){
prncList.add(new PartnerNetworkRecordConnection(
ConnectionId = cid,
LocalRecordId = contact.ID,
//ParentRecordId = Contact.AccountId,
SendClosedTasks = true,
SendOpenTasks = true,
SendEmails = true));
}
}
}
//Insert record connections
if(!prncList.isEmpty()){
try{
insert prncList;
}
catch(System.Dmlexception dmlExceptionInstance){
System.debug('Record Share Error:' + dmlExceptionInstance.getMessage());
}
}
}
}
}
Trigger AutoforwardOpp on Opportunity(after insert, after update)
{
List <PartnerNetworkRecordConnection> prncList;
List <PartnerNetworkConnection> connectionList;
Map <ID, PartnerNetworkConnection> connMap;
Map <ID, ID> oppIdvsAccountIdMap;
Map<ID, Account> accountWithContactMap;
ID cid;
String status;
String connName;
if(Trigger.isafter && (Trigger.isInsert || Trigger.isUpdate)){
connectionList = new List<PartnerNetworkConnection>();
prncList = new List<PartnerNetworkRecordConnection>();
//This would ideally return multiple active Connections if they exist hence its best you use a
//criteria to ensure only the appropriate connection record is returned.
connMap = new Map<ID, PartnerNetworkConnection>(
[Select ID, ConnectionStatus, ConnectionName
From PartnerNetworkConnection
Where ConnectionStatus = 'Accepted']);
//get connection details
for(ID connId :connMap.keySet()){
cid = connMap.get(connId).ID;
status = connMap.get(connId).ConnectionStatus;
connName = connMap.get(connId).ConnectionName;
}
//Populate a map of Opp Ids and associated Account Ids
oppIdvsAccountIdMap = new Map<ID, ID>();
for(Opportunity oppRecord :Trigger.new){
if(oppRecord.Name.contains('TrailHead')){
//System.debug('Opp Id: ' + oppRecord.ID + '-> Account Id: ' + oppRecord.AccountId);
oppIdvsAccountIdMap.put(oppRecord.ID, oppRecord.AccountId);
}
}
//Get associated Accounts and Contacts for every US opportunity if they exist
if(oppIdvsAccountIdMap.keySet().size() > 0){
accountWithContactMap = new Map<ID, Account>(
[Select ID, Name,
(Select ID, Name, Account.Id From Account.Contacts)
From Account
Where ID IN :oppIdvsAccountIdMap.values()]);
//Create PartnerNetworkRecordConnections for sharing the records
for(ID oppId : oppIdvsAccountIdMap.keySet()){
ID accountId = oppIdvsAccountIdMap.get(oppId);
//Share Opportunity
prncList.add(new PartnerNetworkRecordConnection(
ConnectionId = cid,
LocalRecordId = oppId,
SendClosedTasks = true,
SendOpenTasks = true,
SendEmails = true));
//Share Account
if(oppIdvsAccountIdMap.get(oppId) != null){
prncList.add(new PartnerNetworkRecordConnection(
ConnectionId = cid,
LocalRecordId = accountId,
SendClosedTasks = true,
SendOpenTasks = true,
SendEmails = true));
}
//Share associated Contacts
if(accountWithContactMap.get(accountId).Contacts != null){
for(Contact contact :accountWithContactMap.get(accountId).Contacts){
prncList.add(new PartnerNetworkRecordConnection(
ConnectionId = cid,
LocalRecordId = contact.ID,
//ParentRecordId = Contact.AccountId,
SendClosedTasks = true,
SendOpenTasks = true,
SendEmails = true));
}
}
}
//Insert record connections
if(!prncList.isEmpty()){
try{
insert prncList;
}
catch(System.Dmlexception dmlExceptionInstance){
System.debug('Record Share Error:' + dmlExceptionInstance.getMessage());
}
}
}
}
}
Best Answer chosen by sam_Admin
Sabrent