我正在尝试使用以下代码更新查询字段(Customer对象中的Benefit_ID),该代码适用于单个记录但是多个记录失败:
错误:“由以下原因引起:System.DmlException:插入失败。第0行出现第一个异常;第一个错误:CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY,”
trigger updatelookupfield_Customer on Customer__c (before insert,before update) {
Set<String> Bundle = new Set<String>();
for (Customer__c Cust : Trigger.new) {
Bundle.add(Cust.Bundle__c);
}
List<Benfit__c> BenfitList = [SELECT id, Bundle__c FROM Benfit__c WHERE Bundle__c IN :Bundle];
Map<String, Benfit__c> shippingNumToContactMap = new Map<String, Benfit__c>();
for (Benfit__c c : BenfitList) {
shippingNumToContactMap.put(c.Bundle__c, c);
}
for (Customer__c o : Trigger.new) {
if (o.Bundle__c != null) {
o.Benefit_ID__c = shippingNumToContactMap.get(o.Bundle__c).id;
}
else {
o.Benefit_ID__c = null;
}
}
}
答案 0 :(得分:0)
似乎问题将在线 o.Benefit_ID__c = shippingNumToContactMap.get(o.Bundle__c).id;您正尝试使用键从地图中获取值,但您不会检查地图中是否存在该键。
尝试在尝试为其获取值之前添加检查键是否在地图中。
trigger updatelookupfield_Customer on Customer__c (before insert,before update) {
Set<String> Bundle = new Set<String>();
for (Customer__c Cust : Trigger.new) {
Bundle.add(Cust.Bundle__c);
}
List<Benfit__c> BenfitList = [SELECT id, Bundle__c FROM Benfit__c WHERE Bundle__c IN :Bundle];
Map<String, Benfit__c> shippingNumToContactMap = new Map<String, Benfit__c>();
for (Benfit__c c : BenfitList) {
shippingNumToContactMap.put(c.Bundle__c, c);
}
for (Customer__c o : Trigger.new) {
if (o.Bundle__c != null && shippingNumToContactMap.containsKey(o.Bundle__c)) {
o.Benefit_ID__c = shippingNumToContactMap.get(o.Bundle__c).id;
}
else {
o.Benefit_ID__c = null;
}
}
}
Svata
答案 1 :(得分:0)
在我看来,好像你真的需要任何Apex。
因此,Customer上有一个名为Bundle__c的文本字段。
你还有一个名为Benfit__c的自定义对象,它也有一个名为Bundle__c的字符串字段。
您正在使用Customer上的Bundle__c字段来确定Benfit__c适用于哪些字段。
为什么不能直接从客户查找到Benfit__c?