Salesforce 销售人员触发器
我想创建一个触发器,在提交之前检查另一个对象中是否存在帐户。 newmember对象存储新成员请求,但在提交新成员请求供批准后,它必须验证是否存在帐户Salesforce 销售人员触发器,salesforce,apex,visualforce,salesforce-lightning,Salesforce,Apex,Visualforce,Salesforce Lightning,我想创建一个触发器,在提交之前检查另一个对象中是否存在帐户。 newmember对象存储新成员请求,但在提交新成员请求供批准后,它必须验证是否存在帐户 trigger VerifyAcc on Account (after update) { Id recordTypeId = [Select Id From RecordType Where DeveloperName = 'newmember'].Id; if (recordTypeID =='newmember'){ MAP&
trigger VerifyAcc on Account (after update) {
Id recordTypeId = [Select Id From RecordType Where DeveloperName = 'newmember'].Id;
if (recordTypeID =='newmember'){
MAP<Id,List<NewMember__c>>Mapnewmemberstoaccounts new MAP<Id,List<NewMember__c>>();
for(NewMember__c objNewMember:[select Id,name from NewMember__c where
Name IN:Trigger.newmap.keyset()])
{
if(Mapnewmemberstoaccounts.containsKey(objNewMember.Name)!= null)
{
CalloutException e = new CalloutException();
e.setMessage('There is no account for this member.');
throw e;
}
}
} else{
CalloutException e = new CalloutException();
e.setMessage('Couldnt Find anything.');
throw e;
}
}
非常感谢你的帮助
trigger VerifyAcc on Account (after update) {
Id recordTypeId = [Select Id From RecordType Where DeveloperName = 'newmember'].Id;
if (recordTypeID =='newmember'){
记录类型Id永远不会等于文本newmember。您可能想迭代Trigger.new并检查记录类型Id与此匹配的记录
MAP<Id,List<NewMember__c>>Mapnewmemberstoaccounts new MAP<Id,List<NewMember__c>>();
for(NewMember__c objNewMember:[select Id,name from NewMember__c where
Name IN:Trigger.newmap.keyset()])
您永远不会填充变量Mapnewmemberstoaccounts,因此在此处检查它将一事无成。containsKey方法返回一个布尔值。它永远不会返回空值
对于与调用无关的错误,代码不应引发调用异常。如果希望停止将特定记录提交到数据库,请仅对该记录使用addError方法。引发异常将导致回滚整个事务
}
}
} else{
CalloutException e = new CalloutException();
e.setMessage('Couldnt Find anything.');
throw e;
if语句的两臂都编码为引发异常。这是没有道理的;结果是,如果执行过封闭for循环,则无法插入任何帐户,因为触发器总是引发异常
大致来说,触发器应该遵循如下逻辑路径:
Create a collection variable
for each Account in the trigger set:
if the Account's record type is "New Member":
Add the Account's identifier to the set.
Query New Member records matching the Account identifiers.
Build a Map between Identifiers and New Member records.
for each Account in the trigger set:
if the Account's record type is "New Member":
Check if the Account's Identifier is in the New Member collection
If it is, call addError() for this Account
你的具体问题是什么?这个逻辑很难理解,也肯定不起作用,但根本不清楚你到底想做什么。嗨@davidered,正在检查记录是否存在于另一个对象中。如果它不存在,我想抛出一个错误。
}
}
} else{
CalloutException e = new CalloutException();
e.setMessage('Couldnt Find anything.');
throw e;
Create a collection variable
for each Account in the trigger set:
if the Account's record type is "New Member":
Add the Account's identifier to the set.
Query New Member records matching the Account identifiers.
Build a Map between Identifiers and New Member records.
for each Account in the trigger set:
if the Account's record type is "New Member":
Check if the Account's Identifier is in the New Member collection
If it is, call addError() for this Account