Triggers Apex触发器(插入前):在创建新Lead记录期间,使用自定义查找字段中的值更新公司名称

Triggers Apex触发器(插入前):在创建新Lead记录期间,使用自定义查找字段中的值更新公司名称,triggers,salesforce,apex,Triggers,Salesforce,Apex,使用Apex触发器,我试图在创建新lead期间使用用户从同一对象的自定义查找字段中选择的值更新Company字段。因此,用户单击lead选项卡上的new以创建新lead。输入名字、姓氏和其他详细信息。用户不再输入公司名称,而是在查找字段compName_uu_uc中搜索公司名称,然后从列表中选择它。我想完成的是,当用户单击save时,compName字段中的值被复制到新记录上的Company字段,然后创建新记录 以下是我迄今为止所做的 trigger UpdateLeadCompany o

使用Apex触发器,我试图在创建新lead期间使用用户从同一对象的自定义查找字段中选择的值更新Company字段。因此,用户单击lead选项卡上的new以创建新lead。输入名字、姓氏和其他详细信息。用户不再输入公司名称,而是在查找字段compName_uu_uc中搜索公司名称,然后从列表中选择它。我想完成的是,当用户单击save时,compName字段中的值被复制到新记录上的Company字段,然后创建新记录

以下是我迄今为止所做的

   trigger UpdateLeadCompany on Lead (before insert) {

Set<Id> AN = New Set<Id>();

For (Lead LeadComp : Trigger.New) 
{
IF(LeadComp.compName__c != null) 
{
AN.add(LeadComp.compName__c);
 }
}

Map<Id, Agency__c> y = [SELECT Name, compName__c FROM compName__c WHERE Id IN :AN];
For(Lead CompNameUpdate : Trigger.New)
{
Company a = y get(CompNameUpdate.compName__c);
IF(a != null)
{
CompNameUpdate = a.compName__c; 
  }
 }
}
触发Lead上的UpdateLeadCompany(插入前){
设置一个=新设置();
用于(Lead LeadComp:Trigger.New)
{
如果(LeadComp.compName\uuu c!=null)
{
添加(LeadComp.compName\uuu c);
}
}
映射y=[从compName\uuu c中选择名称,compName\uu c,其中Id位于:AN];
对于(Lead CompNameUpdate:Trigger.New)
{
公司a=y get(CompNameUpdate.compName\uuu\c);
如果(a!=null)
{
CompNameUpdate=a.compName\uu\c;
}
}
}
更新

那么你的代码应该是-

trigger UpdateLeadCompany on Lead (before insert) {

   Set<Id> AN = New Set<Id>();

   for(Lead leadObj : Trigger.New) {

     IF(leadObj.compName__c != null) {
       AN.add(leadObj.compName__c);
     }

   }

   Map<Id, compName__c> y = [SELECT Name, compName__c FROM compName__c WHERE Id IN :AN];

   For(Lead leadObj : Trigger.New) {

       compName__c a = y.get(leadObj.compName__c);

       IF(a != null) {
         leadObj.Company = a.Name; 
       }
   }
}
触发Lead上的UpdateLeadCompany(插入前){
设置一个=新设置();
用于(Lead-leadObj:Trigger.New){
如果(leadObj.compName\uu c!=null){
添加(leadObj.compName\uu c);
}
}
映射y=[从compName\uuu c中选择名称,compName\uu c,其中Id位于:AN];
用于(Lead-leadObj:Trigger.New){
compName\uuu c a=y.get(leadObj.compName\uu c);
如果(a!=null){
leadObj.Company=a.名称;
}
}
}

Hi Mukesh,这里有一个标准字段,即Company和一个名为compName\uu\c的自定义查找字段。无法转换/更改Lead对象上的标准字段。根据公司字段类型,即标准和要求,以及执行顺序,在这种情况下,Apex触发器可能无法工作。想法?@user77211执行顺序和标准字段不会有任何问题。您可以覆盖字段的值,但不要设置为空,否则您将获得所需的字段错误。Mukesh,您的语句是否意味着用户必须在公司字段中输入文本,然后触发器将使用在查找字段中选择的文本重写字段中的文本?是,但如果您不想填充任何值,则需要为Lead create/update表单创建自定义VF页面,然后您可以通过自定义逻辑(即通过自定义VF页面上的Javascript)自动填充公司字段。我可以让创建Lead的用户在公司字段中输入值,然后代码将用自定义查找中的值替换该值领域这样就不需要VF页面了。上面代码的测试类是什么样子的?