【问题标题】:How to return more than 50 results from Dynamics 365 using the Web API如何使用 Web API 从 Dynamics 365 返回超过 50 个结果
【发布时间】:2018-07-27 03:36:18
【问题描述】:

继续使用 Delphi 项目中的 Dynamics 365,我现在需要从 CRM 检索比默认情况下可以获得的 50 个实体更多的数据,并且通过设置 maxpagesize 首选项,我应该能够得到更多。

这是我现有的 Delphi 代码从 Dynamics 检索数据的样子:

  RESTClient.BaseURL := 'https://mytest.api.crm6.dynamics.com';
  RESTRequest.Resource := 'XRMServices/2011/OrganizationData.svc/AccountSet?$select=Name&';
  RESTRequest.Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8';
  RESTRequest.Execute;

这会返回 50 个结果,然后是分页标签(我们现在将忽略它):

<link rel="next" href="https://mytest.api.crm6.dynamics.com/XRMServices/2011/OrganizationData.svc/AccountSet?$select=Name&amp;$skiptoken=1,'accountid','%7BE5752F29-1E8E-E811-8182-E0071B662BF1%7D','%7B700C44F2-BF8F-E811-8191-E0071B659EC1%7D'" />

https://msdn.microsoft.com/en-us/library/gg334767.aspx#bkmk_specifyNumber

根据上面的 MS 文档,指定要返回的实体数量的请求如下所示:

GET [Organization URI]/api/data/v8.2/accounts?$select=name HTTP/1.1
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
Prefer: odata.maxpagesize=3

我遇到的麻烦是如何指定 Prefer: odata.maxpagesize=nnn

这些是我尝试过的:

  RESTClient.AddParameter('Prefer', 'odata.maxpagesize=250',TRESTRequestParameterKind.pkHTTPHEADER,
    [TRESTRequestParameterOption.poDoNotEncode]);

  RESTRequest.AddAuthParameter('Prefer', 'odata.maxpagesize=250',TRESTRequestParameterKind.pkHTTPHEADER,
    [TRESTRequestParameterOption.poDoNotEncode]);

  RESTRequest.Params.AddItem('Prefer', 'odata.maxpagesize=250',TRESTRequestParameterKind.pkHTTPHEADER,
    [TRESTRequestParameterOption.poDoNotEncode]);

  RESTRequest.Params.AddHeader('Prefer', 'odata.maxpagesize=250');

这些都不起作用。我仍然得到了 50 个实体。

还有其他人在使用 Delphi 10.2 中的 Dynamics 365 Web API 方面取得过成功吗,还是只有我一个人?

【问题讨论】:

    标签: rest odata delphi-10.2-tokyo dynamics-crm-365


    【解决方案1】:

    您使用了错误的端点,您正在调用

    https://org/XRMServices/2011/OrganizationData.svc/AccountSet
    

    你应该打电话给:

    https://org/api/data/v8.2/accounts
    

    这很重要,因为第一个已弃用,您将始终在那里获得 50 行(这可以使用 PowerShell 命令更改,如 here 所述)

    使用第二个 url(所以实际上支持 pagesize 的新 WebAPI)最后一个选项应该可以工作:

    RESTRequest.Params.AddHeader('Prefer', 'odata.maxpagesize=250');
    

    【讨论】:

    • 天哪!根据开发自定义 Dynamics 365 应用程序的公司向我发送的查询,我为此花了几天时间。所有的解析工作都是以 XML 形式返回的结果完成的。 CRM 2016 仅将记录作为 odata 返回,并且在 Delphi 中没有用于解析 odata...
    猜你喜欢
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多