如何在Salesforce SOQL中查询Opportunity关联Product Name?返回[object Object]是何原因
问题原因说明
你遇到的Product2字段返回[object Object]的问题和SOQL语句本身无关,是返回结果的序列化/解析逻辑问题,具体原因如下:
- Salesforce SOQL的父子关系查询默认返回嵌套结构:你在子查询
OpportunityLineItems中查询父对象Product2的Name字段时,返回结果的标准结构为:
而非直接在{ "Quantity":"1", "UnitPrice":"10", "ProductCode":"code1", "Product2": { "Name": "name1" } }OpportunityLineItem的顶层返回Product2.Name字段。 - 你当前拿到的
"Product2":"[object Object]"输出,是你用来打印/导出查询结果的工具在序列化时,没有对嵌套的Product2对象做递归序列化,直接调用了对象的默认toString方法导致的。
验证方式
你可以直接在Salesforce自带的Developer Console中执行你写的SOQL语句验证:
SELECT Amount, Account.Name, Account.AccountNumber, Name, ( SELECT Quantity, UnitPrice, ProductCode, Product2.Name FROM OpportunityLineItems ) FROM Opportunity
在返回结果中点击OpportunityLineItems列的展开按钮,再展开对应行项目的Product2属性,就能看到正确的Name值为你在UI中看到的name1。
解决方案
根据你使用的查询工具/开发语言,对应调整即可:
- 如果是Apex代码中处理查询结果:通过
OpportunityLineItem.Product2.Name的语法即可取到正确的产品名称,不要直接对OpportunityLineItem对象做浅度序列化后输出 - 如果是第三方API调用工具返回该结果:检查工具的响应解析配置,开启嵌套sObject的自动序列化配置,即可输出完整的嵌套结构
内容的提问来源于stack exchange,提问作者Kylie
相关产品推荐
相关产品推荐

