如何在Oracle CRM On Demand中跨父对象字段和子对象字段构建查询?

时间:2013-04-16 07:04:26

标签: oracle crm ondemand

作为集成需求的一部分,我需要查询在特定日期和时间之后已修改的商机记录?

现在,Opportunity有一个名为ProductRevenue的子对象,它具有一对多的关系。反正我是否可以构建一个querypage来获取记录,其机会字段“OR”是其子ProductRevenue的字段在特定日期和时间之后被修改过的?

我已尝试使用SearchSpec参数,但它不允许我跨子对象字段进行查询。

例如:

ObjOpptyQueryPageInput.ListOfOpportunity.Opportunity.searchspec = "([ModifiedDate] > '01/01/2013 00:00:00') OR ([ProductRevenueData.ModifiedDate] >= '01/01/2013 00:00:00')";

[上面用C#编写的代码我错误地说 - 对象Opportunity没有名为ProductRevenueData.ModifiedDate的集成组件。]

任何帮助将不胜感激。谢谢。

3 个答案:

答案 0 :(得分:1)

我一直在寻找答案,这是我的理解,虽然不是解决方案。

在Web Services 2.0中,Oracle说“所有父记录都符合父标准,只返回符合子标准的子项。”

您实际上可以在父级和子级上定义“searchspec”,它确实以Oracle定义的方式工作。然而,这可能不是您正在寻找的行为。当你这样做时,你得到的所有父母都匹配parent.searchspec,无论它的孩子是否与child.searchspec匹配。但是,这些父母只会在查询结果中显示与您的child.searchspec匹配的子项。所以如果你想要的只是“有这些孩子的父母”或“这些孩子”,那你就不走运了。因为你得到的是“许多父母和他们的一些孩子。”

因此,即使您使用两个查询进行后期处理,也需要花一些时间。 :(

顺便说一下,你的两个单独的查询必须看起来像这样:

查询1。  ObjOpptyQueryPageInput.ListOfOpportunity.Opportunity.searchspec = "([ModifiedDate] > '01/01/2013 00:00:00')";

查询2. ObjOpptyQueryPageInput.ListOfOpportunity.Opportunity.ListOfProductRevenue.ProductRevenue.searchspec = "([ModifiedDate] >= '01/01/2013 00:00:00')";

然后进行后处理查询2以取出所有没有孩子的父母。 然后将其与查询1的结果联合起来。

答案 1 :(得分:0)

根据我的经验,您将无法使用他们的V2.0 api(即searchspec)执行此操作。您可以使用V1.0 api执行此操作但是这将返回符合条件的所有父记录以及所有相关的ProductRevenue记录,无论它们是否符合条件。我做了类似的事情,然后对xpath谓词过滤器后处理数据。我认为唯一的另一个选择是2个单独的查询。

答案 2 :(得分:0)

我遇到了同样的问题,我尝试了很多方法来解决问题,但是现在你应该处理返回的结果:你可以使用DOMXPathregular expressions提取返回结果所需的信息。

在我的情况下,我使用XPath,因为它非常快速,更容易。这是我用正确答案发布的问题的链接: Xpath solution for the parent-child query result

我希望这能解决这个问题。