为了更新Salesforce中的查找字段,我需要一个Apex类还是只需要一个触发器?
问题描述:
我工作了一个沙箱,我试图自动更新自定义对象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?
答
要创建或编辑成员供应商记录时更新供应商代表,您必须使用触发器。
解决此问题需要进行一些代码更改。错误消息的原因是您正尝试将查找字段更新为字符串(“名称”字段)而不是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结果。
我相信我已经尝试使用Id而不是姓名,但我会给它一个镜头。 我也不熟悉“bulkify”。我肯定可以将SOQL查询移动到最后一个结束大括号之前。在for循环中添加SOQL结果有什么特别之处吗? –
我在你的代码中做了另一个改变,我认为这是实际的问题。字段绑定是在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。请尝试使用上面的代码并保留在这里发帖。 –
我做了建议的更改,但现在出现以下错误对于线5信息: 从列表非法分配到编号 –