【问题标题】:Grouped by Reference Field SQQL Salesforce按参考字段 SQQL Salesforce 分组
【发布时间】:2021-09-23 15:26:18
【问题描述】:

我即将在 SOQL Apex Salesforce 查询中使用参考字段创建 GROUP BY,我收到以下消息:该字段可以不在查询调用中分组

我的解决方案是创建自定义字段并使用流程构建器更新它们,但此解决方案仅对新记录有帮助,我必须更新数据库中的所有现有记录(超过 100 万条)才能填充这些自定义字段是新创建的。

我可以用父级的参考字段创建一个分组依据吗?

这是我的查询:

SELECT Delivery__r.Beneficiaire__r.ASPO_Master__r.Name, Delivery__r.Beneficiaire__r.ASPO_Master__r.New_ID__c, UM__c,  SUM(Quantity__c)qty 
FROM Item_Distributed__c
WHERE Quantity__c !=0 AND Delivery__r.Beneficiaire__r.ASPO_Master__c !=''
AND Del_Status__c='Delivered'
AND Product__c IN :articleContainersId                                        
GROUP BY  Delivery__r.Beneficiaire__r.ASPO_Master__r.Name, Delivery__r.Beneficiaire__r.ASPO_Master__r.New_ID__c, UM__c];

我想注意到查询是在一个名为 Item_Distributed__c 的自定义对象上进行的,其父对象为 Delivery,它是 Account 的子对象。我要查询的字段来自Account。

【问题讨论】:

    标签: salesforce apex apex-code soql


    【解决方案1】:

    您可以按参考字段(查找和主详细信息)进行分组。这两个应该可以正常工作:

    SELECT Account.Name, COUNT(Id)
    FROM Contact
    GROUP BY Account.Name
    HAVING COUNT(Id) > 1
    LIMIT 5
    
    SELECT Account.Owner.Profile.Name, COUNT(Id)
    FROM Contact
    GROUP BY Account.Owner.Profile.Name
    

    您不能使用公式字段,也许是其他类型。您应该在您的GROUP BY 中检查"describe" call for all fields 的结果,并在它们上调用isGroupable()。从 apex 或 API(https://workbench.developerforce.com/ 可能是最快的)或者您甚至可以在 FieldDefinition 表中查询它...

    一旦您确定了该公式...如果无法修复数据,请考虑是否可以稍微分解该公式,以某种方式按其源字段分组,然后再执行一些步骤来解释结果。这有点讨厌,因为如果有人编辑公式并且不更新您的查询,它将不同步。

    如果你分两步做呢?抓住父母(你标记了apex,这样你就可以把它们放在帮助者Map<Id, Account>中。在SOQL组中只用帐户ID?你仍然需要循环遍历结果并为不同的父母添加行但使用相同的公式值,但可以帮助一点?

    【讨论】:

      猜你喜欢
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      相关资源
      最近更新 更多