如何根据 ID 和 return 某些相关字段遍历多个相关对象?

How can I traverse through multiple related objects based on ID and return some related field?

我有点卡住了。

我正在尝试生成一份报告,以确定是否有人对我们订单框架内的某些字段进行了手动更改。我已经想出了要审计的适当字段和结构,甚至是如何制作报告,但我结合使用了 Dataloader 和 Excel xlookups 的提取物来制作它。现在,我被要求找到一种自动生成报告的方法,我怀疑这意味着我需要编写一个 SOQL 查询来解决这个问题。我在基于这些 ID 字段遍历多个关系时遇到问题。本质上,我要做的是根据 18 位 Salesforce ID 进行多个“左连接”,并从其他对象中提取一些相关信息。

例如,如果我从 order_product_history 开始(使用字段 OrderProductID 来标识订单产品)并且我想引入“产品名称”,我必须首先将 OrderProductID 与 ID 匹配order_product“table”中的字段,然后我必须将 order_product“table”中的 Product2ID 字段与产品“table”中的 ID 匹配",那么我必须将匹配的产品名称作为我报告中的一列:

Matching/Traversal Process

Desired Result

这是一个字段的一个例子。我还必须引入诸如用户“table”的用户名和订单 table 的订单号之类的东西,但是一旦我有了大致的想法,我想我就可以了。我还想过滤结果以仅包含我的 Fee__c 和 UnitPrice 字段,忽略自动用户并设置日期过滤器——不确定我是否必须在主查询中使用 WHERE 子句来做到这一点,或者如果我也必须过滤子查询。

不是程序员,我没有接受过正式的 Salesforce 培训;我只是一名技术倾向的分析师,有点像 Salesforce 管理员的角色。我熟悉编程概念,一直在使用 Flow 应用程序编写东西,甚至涉足 Apex 的一些东西,但这可能有点困难。我不是要你为我做我的工作,我愿意努力解决问题并学习;任何帮助表示赞赏。对链接感到抱歉;所以还不允许我嵌入图片。

很有可能您不必为它编写任何代码。我会给你一些提示,尝试一下并编辑问题或 post 新问题?

这张图可能有帮助:https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_erd_products.htm

开发者方式

一切都是为了编写正确的查询。您可以在 Developer Console 或 Workbench 中使用它。阅读有关 SF 中关系查询的信息。

https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_relationships_understanding.htm

https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_relationships_query_hist.htm

我没有启用订单的组织,但这应该是一个好的开始:

SELECT CreatedById, Created.Name, 
    Parent.Name, Parent.Product2.Name, Parent.Order.Name, 
    Field, OldValue, NewValue, CreatedDate
FROM OrderItemHistory

如果它抛出有关“Parent”的错误,请查看“OrderItem”是否有效。一旦你拥有它 - WHERE Field IN ('UnitPrice', 'Fee__c') AND CreatedDate = LAST_WEEK 可能是下一步的好选择。 (日期可以按日期过滤,但也有一些 "constants" 更易于阅读)

您甚至可以使用 Data Loader 导出它,您只需在订单产品历史记录 table 上启动向导。但是您可以忽略整个查询创建者并粘贴您创建的查询。

管理方式

您曾经在 Salesforce 中创建过报告吗?有 self-paced trainings(Lightning 和 Classic UI)和大量 YouTube 视频。感受一下少做报告的感觉。

您想要的可能可以通过内置报告类型实现(查看是否有新报告 -> 订购产品历史记录)。如果没什么令人兴奋的 - 作为管理员,您可以在设置中创建新的报告类型。例如订单 -> 订购产品 -> 订购产品历史记录。来自 here 的屏幕截图可能会有所帮助。

只是想为将来寻找解决方案的任何人更新此信息。

事实证明,您可以在 SOQL 查询中将它们作为父子关系遍历。这是我最终使用的查询:

SELECT CreatedBy.Name, FORMAT(CreatedDate), OrderItem.Order.OrderNumber, OrderItem.Product2.Name, OrderItem.Product2.ProductCode, Field, OldValue, NewValue
FROM OrderItemHistory
WHERE (Field = 'Fee__c' OR UnitPrice) AND (CreatedBy.Name != 'Integration User') AND (Created Date >= 2020-11-24T00:00:00.000Z) ORDER BY CreatedDate DESC