我是否需要Apex类或仅需要触发器来更新Salesforce中的查找字段?

时间:2017-09-13 20:15:29

标签: class triggers salesforce apex

我正在使用沙箱,我正在尝试自动更新自定义对象Member_Vendor_del__c下的Vendor_Rep__c(查找字段)。希望在创建或编辑成员供应商记录时更新供应商代表。

我创建了visualforce页面,我开始相信我不再需要实现我需要的东西了。

另外,在一些帮助下,我为Apex类创建了以下代码:

public class contactsearch {

public List<Contact>searchContact(string ContactType, string MemberState, String VendorID)
{
  return [Select Name From Contact
          Where Contact_Type__c = 'Vendor Rep' AND States__c = :MemberState AND Contact_Vendor_ID__c = :VendorID limit 1];

    }
}

此外,在阅读了已发布的几个问题,一些Apex开发人员指南文章,并观看了一些教程视频后,我在下面创建了触发器。 (我不确定我是否需要上课才能达到我的需要)

trigger VendorRepUpdateTrigger on Member_Vendor_del__c (before insert, before update) {

 for (Member_Vendor_del__c u : trigger.new){
     if (u.Vendor_Rep__c == null){

        u.Vendor_Rep__c = [Select Name
                            From Contact
                            Where Contact_Type__c = 'Vendor Rep' AND States__c = :member_vendor_del__c.Member_State__c AND Contact_Vendor_ID__c = :member_vendor_del__c.Vendor_ID__c limit 1];

      }
   }
}

我一直收到触发器中第6行的错误消息

&#34;类型为String&#34;

的列的Schema.SObjectField的绑定表达式类型无效

如何才能通过此错误并将此触发器投入生产并100%工作?我甚至需要Apex Class吗?

1 个答案:

答案 0 :(得分:0)

要在创建或编辑成员供应商记录时更新供应商代表,您必须使用触发器。

解决此问题需要进行一些代码更改。出现错误消息的原因是您尝试将查找字段更新为字符串(&#34;名称&#34;字段)而不是ID。

如果您进行以下更改,请使用您自己的代码,我认为问题将得到解决。

 trigger VendorRepUpdateTrigger on Member_Vendor_del__c (before insert, before update) {
     for (Member_Vendor_del__c u : trigger.new){
         if (u.Vendor_Rep__c == null){

             u.Vendor_Rep__c = [Select Id
                                From Contact
                                Where Contact_Type__c = 'Vendor Rep' AND
                                States__c = :u.Member_State__c AND 
                                Contact_Vendor_ID__c = :u.Vendor_ID__c limit 1];

           }
      }
  }

但代码不是批量化代码。为了使代码批量化,在for循环之外的SOQL查询使用for循环中的SOQL结果。