2017-09-13 60 views
0

我工作了一个沙箱,我试图自动更新自定义对象Member_Vendor_del__c下的Vendor_Rep__c(查找字段)。希望在创建或编辑会员供应商记录时更新供应商报告。为了更新Salesforce中的查找字段,我需要一个Apex类还是只需要一个触发器?

我已经创建了visualforce页面,我开始相信我不再需要达到我所需要的。

此外,一些帮助,我创建了下面的代码为顶点类:

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行错误信息在我的触发Schema.SObjectField的

“无效的绑定表达式类型对于字符串类型的列“

我该怎么做才能通过此错误并将此触发器转换为生产和工作100%?我甚至需要Apex Class?

回答

0

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

解决此问题需要进行一些代码更改。错误消息的原因是您正尝试将查找字段更新为字符串(“名称”字段)而不是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结果。

+0

我相信我已经尝试使用Id而不是姓名,但我会给它一个镜头。 我也不熟悉“bulkify”。我肯定可以将SOQL查询移动到最后一个结束大括号之前。在for循环中添加SOQL结果有什么特别之处吗? –

+0

我在你的代码中做了另一个改变,我认为这是实际的问题。字段绑定是在SOQL查询的where条件下使用sObject完成的。我已经使用“u.Member_State__c”和“u.Vendor_ID__c”而不是“member_vendor_del__c.Member_State__c”和“member_vendor_del__c.Vendor_ID__c。请尝试使用上面的代码并保留在这里发帖。 –

+0

我做了建议的更改,但现在出现以下错误对于线5信息: 从列表非法分配到编号 –

相关问题