Salesforce 销售人员触发器

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&

我想创建一个触发器,在提交之前检查另一个对象中是否存在帐户。 newmember对象存储新成员请求,但在提交新成员请求供批准后,它必须验证是否存在帐户

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