检索导航属性动态WebAPI

时间:2017-06-26 15:38:58

标签: javascript dynamics-crm microsoft-dynamics dynamics-crm-365 microsoft-dynamics-webapi

我正在尝试通过父实体检索子实体的属性。总帐帐户是父实体,我想要与总帐帐户相关的所有总帐行动实体的详细信息。总帐管理系统具有总帐帐户的查找字段。我正在使用来构建网址并检索数据。

根据Microsoft Documentation

  

除非您指定较小的页面大小,否则每个请求最多将返回5000个实体。如果有更多实体与查询过滤条件匹配,则将返回带有结果的@ odata.nextLink属性。将@ odata.nextLink属性的值与新的GET请求一起使用,以返回下一页数据。

我只返回1个父实体和1个子实体,所以我不应该遇到这个障碍。然而,

当我使用网址时:

https://crm.com/api/data/v8.0/ccseq_generalledgeraccounts(48513938-7d5a-e711-80e5-005056b33317)/ccseq_generalledgeraccount_ccseq_generalledgeraction_GeneralLedgerAccountID

我得到了结果:

{
  "@odata.context":"https://crm.com/api/data/v8.0/$metadata#ccseq_generalledgeractions","value":[
    {
      "@odata.etag":"W/\"676070510\"","_organizationid_value":"ff05a89b-16b0-44a6-879c-26866b3a9d9d","ccseq_servicecode":"111","modifiedon":"2017-06-26T14:41:49Z","ccseq_generalledgernumber":"44000","ccseq_dollar":25.0000,"statecode":0,"ccseq_percent":0.0000000000,"statuscode":1,"_createdby_value":"3b0731e3-52bd-e611-80df-005056b33317","ccseq_jobclasscode":"111","ccseq_companycode":"111","_ccseq_generalledgeraccountid_value":"48513938-7d5a-e711-80e5-005056b33317","ccseq_dollar_base":25.0000,"_modifiedby_value":"3b0731e3-52bd-e611-80df-005056b33317","versionnumber":676070510,"exchangerate":1.0000000000,"ccseq_generalledgeractionid":"3e17f993-7d5a-e711-80e5-005056b33317","ccseq_geographycode":"111","createdon":"2017-06-26T14:41:49Z","_transactioncurrencyid_value":"863aa006-cae5-dc11-92e8-001a6449bbe7","_modifiedonbehalfby_value":null,"_createdonbehalfby_value":null,"utcconversiontimezonecode":null,"timezoneruleversionnumber":null,"importsequencenumber":null,"ccseq_name":null,"overriddencreatedon":null
    }
  ]
}

当我使用网址时:

https://crm.com/api/data/v8.0/ccseq_generalledgeraccounts?$select=ccseq_code&$expand=ccseq_generalledgeraccount_ccseq_generalledgeraction_GeneralLedgerAccountID

我得到了结果:

{
  "@odata.context":"https://crm.com/api/data/v8.0/$metadata#ccseq_generalledgeraccounts(ccseq_code,ccseq_generalledgeraccount_ccseq_generalledgeraction_GeneralLedgerAccountID)","value":[
    {
      "@odata.etag":"W/\"676070286\"","ccseq_code":null,"ccseq_generalledgeraccountid":"48513938-7d5a-e711-80e5-005056b33317","ccseq_generalledgeraccount_ccseq_generalledgeraction_GeneralLedgerAccountID":[

      ],"ccseq_generalledgeraccount_ccseq_generalledgeraction_GeneralLedgerAccountID@odata.nextLink":"https://crminternal.cohencpa.com/COHEN/api/data/v8.0/ccseq_generalledgeraccounts(48513938-7d5a-e711-80e5-005056b33317)/ccseq_generalledgeraccount_ccseq_generalledgeraction_GeneralLedgerAccountID"
    }
  ]
}

我的理解是这两个url应该返回完全相同的数据,这些数据将是父&的json对象。子属性。这些查询有什么区别?为什么我的第二个查询返回odata.nextLink而不是实体的json表示?

1 个答案:

答案 0 :(得分:1)

不同之处在于,在您的第一个请求中,您需要从单个记录中检索数据,而在第二个示例中,您需要检索所有总帐帐户。

正如您可以想象的那样,$ expand的工作方式不同,因为如果您正在检索单个记录或集合(前一段时间甚至不支持,并且您获得例外)避免性能问题。检索集合时,WebAPI会为您提供@ odata.nextLink,如您所述,您可以使用第二个GET来检索子记录。

您可以在MSDN中找到相关示例:

  

通过展开集合值导航来检索相关实体   属性:如果展开集合值导航参数   检索实体集的相关实体,@ odata.nextLink   将返回相关实体的财产。你应该使用   @ odata.nextLink属性的值,返回一个新的GET请求   所需的数据。