我有两个对象,Sdf__c 和 SdfBudget__c。 Sdf__c 有一个与 SdfBuget 对象相关的查找字段。我想从 sdf__c 中获取值以及从 sdfBudget 中获取与 SdfBudget vbu 名称匹配的预算字段。vbu 是一个公式字段(文本)。
但是我为该字段返回 (null
该字段有值,但没有返回。
我需要得到如下输出
查询我有哪些trid
List<SdfBudget__c> sdfVbus=new List<SdfBudget__c>();
sdfVbus=[SELECT budget__c,VBU__c FROM SdfBudget__c WHERE VBU__C != null];
List<Sdf__c> sdfItems=new List<Sdf__c>();
for(SdfBudget__c ob:sdfVbus)
{
vbuValues.add(ob.VBU__c);
}
sdfItems=[SELECT Name,VBU__c,Sdf_Budget__r.Budget__c FROM sdf__c WHERE VBU__c IN :vbuValues];
VBU__c 在两条记录上相同吗?它是什么,一段文字?一个选择列表?听起来好像您通过文本字段进行了匹配,但实际查找
Sdf__c.SdfBudget__c
未填充,因此您得到的是 null。
你可以在 apex 中解决这个问题,但这实际上会让报告变得更加困难......如果它们应该链接起来 - 制作它们。也许将
SdfBudget__c.VBU__c
标记为唯一的外部 id,然后在更新 Sdfs 时,您可以告诉销售人员通过该 ID 而不是通过 id 来查找匹配的预算。
让它工作的一种快速而肮脏的方法是这样,但你真的应该考虑填充查找
Map<String, SdfBudget__c> budgetsByVBU = new Map<String, SdfBudget__c>();
for(SdfBudget__c ob:[SELECT budget__c,VBU__c FROM SdfBudget__c WHERE VBU__C != null]){
budgetsByVBU.put(ob.VBU__c, ob);
}
List<Sdf__c> sdfItems = [SELECT Name,VBU__c,Sdf_Budget__r.Budget__c
FROM sdf__c
WHERE VBU__c IN :budgetsByVBU.keyset()];
for(Sdf__c item : sdfItems){
System.debug(item);
if(item.Sdf_Budget__r != null){
System.debug('got value from proper lookup: ' + item.Sdf_Budget__r.Budget__c);
} else if(budgetsByVBU.containsKey(item.VBU__c)){
System.debug('no lookup but match by exact vbu ' + budgetsByVBU.get(item.VBU__c));
} else {
System.debug('no match by vbu. Check if there\'s really a budget with that value. Maps are case sensitive so maybe somebody wrote wrong one to this sdf?');
}
}