Salesforce 使用SOQL查询无法获取帐户申请人\u ID\u\c

Salesforce 使用SOQL查询无法获取帐户申请人\u ID\u\c,salesforce,apex,soql,apex-trigger,Salesforce,Apex,Soql,Apex Trigger,我在帐户中有一个名为“申请人id”的外部id。我正在使用数据加载器将数据导入salesforce Opportunity。下面是我的映射文件内容 Date\ Cancelled=Date_Cancelled__c Date\ Denied=Date_Denied__c Date\ Decisioned=Date_Decisioned__c App\ Status=Application_Status__c Date\ Submitted=Application_Submitted__c Clos

我在帐户中有一个名为“申请人id”的外部id。我正在使用数据加载器将数据导入salesforce Opportunity。下面是我的映射文件内容

Date\ Cancelled=Date_Cancelled__c
Date\ Denied=Date_Denied__c
Date\ Decisioned=Date_Decisioned__c
App\ Status=Application_Status__c
Date\ Submitted=Application_Submitted__c
Closing\ Date=CloseDate
Application\ Source=Application_Source__c
Application\ Type=Application_Type__c
Application\ Sub-Type=Application_Sub_Type__c
App\ ID=App_ID__c
Property=Property_Name__r\:Property_Code__c
Applicant\ ID=Account\:Applicant_ID__c
Record\ Type\ ID=RecordTypeId
上面的映射现在正常工作,我想要的是从触发器填充opportunity名称。 下面是我的触发内容

trigger MapStatusToStageBeforeOpportunintyCreation on Opportunity (before insert, before update) {

for (Opportunity o : Trigger.New){


Account acc = [Select LastName From Account Where Applicant_ID__c =:Account:Applicant_ID__c];

o.Name =acc.LastName;
}  
}

提前谢谢。

您的查询是错误的 首先,永远不要在for循环中查询

List'<'Opportuniy opplist = new list'<'Opportunity'>'();<Br/>
// Remove the single quotes <br/>
for (Opportunity o : Trigger.New){<Br/>
o.OpportunityApplicentID = o.Account.Applicant_ID__c;<Br/>
o.Name =acc.LastName;<Br/>
opplist.add(o);<Br/>
}
update opplist;

List'+而不是使用
申请人ID\uuuu c=:帐户:申请人ID\uu c这。
。只需使用
申请人ID\uu c=:帐户。申请人ID\uu c
。不要使用冒号。使用点运算符

,如果插入101个机会,您创建和排除的答案将爆炸,但是如果你想使用
申请人ID\uuu c
,你可以在账户查询中查询出来

trigger MapStatusToStageBeforeOpportunintyCreation on Opportunity (before insert, before update) 
{
    Set<ID> acctIDS = new Set<ID>();

    for (Opportunity o : Trigger.new)
    {  
        if(o.AccountId != null)
        {
            acctIDS.add(o.AccountID);
        }                
    } 

    Map<ID, Account> acctMap = new Map<ID, Account>([Select LastName, Applicant_ID__c  From Account Where ID =: acctIDS]); 

    for(Opportunity o : Trigger.new)
    {
        for(ID acctID :acctMap.keySet())
        {
            if(o.AccountID == acctID)
            {
                o.Lastname = acctMap.get(acctID).LastName;          
            }
        }   
    }       
}
在Opportunity上(插入前、更新前)触发MapStatusToStageBeforeOpportunity创建
{
Set acctIDS=新集合();
for(机会o:触发器。新)
{  
如果(o.AccountId!=null)
{
账户添加(o.AccountID);
}                
} 
Map acctMap=新地图([从ID=:acctIDS的帐户中选择LastName、申请人ID\uC]);
for(机会o:触发器。新)
{
对于(ID acctID:acctMap.keySet())
{
如果(o.AccountID==acctID)
{
o、 Lastname=acctMap.get(acctID).Lastname;
}
}   
}       
}

如您所见,我在触发器中使用的是before insert,因此在insert之前创建opp对象时,无法直接访问Account.APPLIENT\u ID\u c等关系属性。您可以使用以下查询访问帐户的属性。Account acc=[从帐户中选择LastName,其中id=:o.AccountId];o、 Name=acc.LastName;你必须通过绘制数据图来解决这个问题。请参阅上面Ericsh的回答。如果要使用同一触发器上载5000条以上的记录,该怎么办?请帮助我@ericsh。您可以执行5000条,它会将其分块为200条/条context@TanveerAhmad有什么东西坏了吗?我能做5000条,但我想用这个触发器上传超过一百万条记录。在那种情况下该怎么办?