如何使用 Web return 来自 Dynamics 365 的 50 多个结果 API
How to return more than 50 results from Dynamics 365 using the Web API
继续我的 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;
这 return 的 50 个结果,然后是分页标签(我们现在将忽略它):
<link rel="next" href="https://mytest.api.crm6.dynamics.com/XRMServices/2011/OrganizationData.svc/AccountSet?$select=Name&$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 文档,将实体数指定为 return 的请求如下所示:
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');
None 的工作。我仍然得到 50 个实体。
有没有其他人成功使用 Delphi 10.2 的 Dynamics 365 Web API,或者我是唯一一个?
您正在使用错误的端点,您正在呼叫
https://org/XRMServices/2011/OrganizationData.svc/AccountSet
你应该打电话给:
https://org/api/data/v8.2/accounts
这很重要,因为第一个已弃用,您将始终在那里获得 50 行(这可以使用 PowerShell 命令更改,如 here 所述)
使用第二个 url(因此实际上支持页面大小的新 WebAPI)最后一个选项应该有效:
RESTRequest.Params.AddHeader('Prefer', 'odata.maxpagesize=250');
继续我的 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;
这 return 的 50 个结果,然后是分页标签(我们现在将忽略它):
<link rel="next" href="https://mytest.api.crm6.dynamics.com/XRMServices/2011/OrganizationData.svc/AccountSet?$select=Name&$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 文档,将实体数指定为 return 的请求如下所示:
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');
None 的工作。我仍然得到 50 个实体。
有没有其他人成功使用 Delphi 10.2 的 Dynamics 365 Web API,或者我是唯一一个?
您正在使用错误的端点,您正在呼叫
https://org/XRMServices/2011/OrganizationData.svc/AccountSet
你应该打电话给:
https://org/api/data/v8.2/accounts
这很重要,因为第一个已弃用,您将始终在那里获得 50 行(这可以使用 PowerShell 命令更改,如 here 所述)
使用第二个 url(因此实际上支持页面大小的新 WebAPI)最后一个选项应该有效:
RESTRequest.Params.AddHeader('Prefer', 'odata.maxpagesize=250');