trigger VerifyAcc on Account (after update) {
Id recordTypeId = [Select Id From RecordType Where DeveloperName = 'newmember'].Id;
if (recordTypeID =='newmember'){
Идентификатор типа записи никогда не будет равен тексту "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()])
Trigger.newMap.keySet()
- это Set<Id>
. Если поле «Имя» объекта NewMember__c
не содержит идентификатора учетной записи, этот запрос не вернет никаких данных.
{
if(Mapnewmemberstoaccounts.containsKey(objNewMember.Name)!= null)
Вы никогда не заполните переменную Mapnewmemberstoaccounts
, поэтому проверка ее здесь ничего не даст. Метод containsKey()
возвращает логическое значение. Он никогда не вернет значение null
.
{
CalloutException e = new CalloutException();
e.setMessage('There is no account for this member.');
throw e;
Ваш код не должен выдавать CalloutException
для ошибки, которая не имеет ничего общего с выноской. Если вы хотите sh, чтобы остановить фиксацию определенной записи c в базе данных, используйте метод addError()
только для этой записи. Бросок исключения приведет к откату всей транзакции.
}
}
} else{
CalloutException e = new CalloutException();
e.setMessage('Couldnt Find anything.');
throw e;
Обе ветви этого оператора if
закодированы для выброса исключения. Это не имеет смысла; В результате (если включается for
l oop когда-либо выполнено) вы не сможете вставить какие-либо учетные записи, потому что ваш триггер всегда выдает исключение.
В грубом плане ваш триггер должен следовать по логическому пути, как это:
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