SOQL 为 salesforce 中的查找类型字段值提供(空 <object__r>)输出?

问题描述 投票:0回答:1

我有两个对象,Sdf__c 和 SdfBudget__c。 Sdf__c 有一个与 SdfBuget 对象相关的查找字段。我想从 sdf__c 中获取值以及从 sdfBudget 中获取与 SdfBudget vbu 名称匹配的预算字段。vbu 是一个公式字段(文本)。

但是我为该字段返回 (null )。如何获取值而不是 null。

该字段有值,但没有返回。

假设该表有以下列: sdf__c sdf__c with fields

SdfBudget__c SdfBudget__c with fields

我需要得到如下输出

enter image description here

查询我有哪些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];

salesforce apex soql
1个回答
0
投票

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?');
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.