You need to sign in to do that
Don't have an account?
Mike Summitt
How to prevent accountcontactrole, casecontactrole from cross linking.
We have a business rule that contact roles on an account or a case must be contacts that actually belong to that account, not cross linked from some other account. So I wrote a trigger....
You can probably guess how far I got with that...
Error 1 SObject type does not allow triggers: AccountContactRole C:\Projects\SalesForce\Broker\Triggers\EditAccountContactRoleSameAccount.trigger 1 1
Is there another way I can enforce this rule?
Thanks.
trigger EditAccountContactRoleSameAccount on AccountContactRole (before insert, before update)
{
TriggerControl__c thisTrigger = Utilities.GetTriggerControl('EditAccountContactRoleSameAccount', false, false, false);
if (thisTrigger.Enabled__c) {
Set<Id> theContacts = new Set<Id>();
for (AccountContactRole acr : Trigger.new) {
if (!theContacts.contains(acr.ContactID)) {
theContacts.add(acr.ContactID);
}
Map<Id, AccountContactRole> ContactsAccounts = new Map<Id, AccountContactRole>()
for (AccountContactRole acr : SELECT Id, ContactID, Contact__r.AccountID
FROM AccountContactRole
WHERE ContactID IN : theContacts]) {
ContactsAccounts.add(acr.Id, acr);
}
for (AccountContactRole tacr : Trigger.new) {
for (Id key : ContactsAccounts.keyset()) {
if (ContactsAccounts.get(key).ContactID == tacr.ContactID) {
if (ContactsAccounts.get(key).AccountID != tacr.AccountID) {
if (thisTrigger.Error__c) {
tacr.addError('Attempt to cross-link Contact to ' + tacr.AccountID + ', belongs to ' + ContactsAccounts.get(key).AccountID);
}
}
}
}
}
}
}
{
TriggerControl__c thisTrigger = Utilities.GetTriggerControl('EditAccountContactRoleSameAccount', false, false, false);
if (thisTrigger.Enabled__c) {
Set<Id> theContacts = new Set<Id>();
for (AccountContactRole acr : Trigger.new) {
if (!theContacts.contains(acr.ContactID)) {
theContacts.add(acr.ContactID);
}
Map<Id, AccountContactRole> ContactsAccounts = new Map<Id, AccountContactRole>()
for (AccountContactRole acr : SELECT Id, ContactID, Contact__r.AccountID
FROM AccountContactRole
WHERE ContactID IN : theContacts]) {
ContactsAccounts.add(acr.Id, acr);
}
for (AccountContactRole tacr : Trigger.new) {
for (Id key : ContactsAccounts.keyset()) {
if (ContactsAccounts.get(key).ContactID == tacr.ContactID) {
if (ContactsAccounts.get(key).AccountID != tacr.AccountID) {
if (thisTrigger.Error__c) {
tacr.addError('Attempt to cross-link Contact to ' + tacr.AccountID + ', belongs to ' + ContactsAccounts.get(key).AccountID);
}
}
}
}
}
}
}
You can probably guess how far I got with that...
Error 1 SObject type does not allow triggers: AccountContactRole C:\Projects\SalesForce\Broker\Triggers\EditAccountContactRoleSameAccount.trigger 1 1
Is there another way I can enforce this rule?
Thanks.