如何调用 Dynamics 365 OData 终结点以从 Delphi 获取用户列表
How to call the Dynamics 365 OData endpoint to get a list of users from Delphi
如果我通过网络浏览器验证到D365,然后输入以下内容URL:
https://mytenantcode.crmserver.dynamics.com/api/data/v8.2/systemusers? $select=systemuserid,lastname,firstname,title&$top=3
我可以用我请求的数据取回前 3 条记录。
我似乎能够按照 my other question(我回答的)在代码中对 D365 进行身份验证,并且有一个访问令牌,但我似乎无法确定如何设置 TRESTRequest
对象,以便执行工作。
目前,它总是 returns 一个 401 Unauthorized 错误。
我尝试将 TOAuth2Authenticator.AccessToken
属性 设置为我从 D365 收到的令牌,然后将 TRESTClient.Authenticator
属性 设置为 TOAuth2Authenticator
TRESTQuest.Client
到 TRESTClient
,这就是示例在 RESTDemos 项目中的工作方式,但我仍然得到 401.
这是我尝试过的代码的最后一个示例,假设所有 REST 对象都已正确链接,它应该可以工作:
RESTClient.BaseURL := 'https://**mytenantcode**.**crmserver**.dynamics.com/api/data/v8.2/';
RESTRequest.Method := TRESTRequestMethod.rmGET;
RESTRequest.Resource := 'systemusers?$select={SELECT}&$top={TOP}';
RESTRequest.AddParameter('SELECT', 'systemuserid,'+
'lastname,'+
'firstname,'+
'title');
RESTRequest.AddParameter('TOP', '3');
RESTRequest.Execute;
我终于return使用以下代码调用网络API获得了正确的信息:
RESTClient.BaseURL := 'https://mytenantcode.crmserver.dynamics.com/';
RESTRequest.Resource := 'api/data/v8.2/systemusers?$select=int_staffnumber,'+
'_int_serviceareaid_value,'+
'_territoryid_value,'+
'lastname,'+
'firstname,'+
'systemuserid,'+
'title';
RESTRequest.AddAuthParameter('Authorization', 'Bearer ' + AToken, TRESTRequestParameterKind.pkHTTPHEADER,
[TRESTRequestParameterOption.poDoNotEncode]);
RESTRequest.Execute;
重要的变化是添加了 Authorization header 参数,并且没有将 Params 用于查询参数,因为 REST 客户端库似乎实际上没有正确执行此操作。
还必须更改令牌授权的 ResourceURI 以匹配 https://mytenantcode.crmserver.dynamics.com URL 用于方法调用。
如果我通过网络浏览器验证到D365,然后输入以下内容URL:
https://mytenantcode.crmserver.dynamics.com/api/data/v8.2/systemusers? $select=systemuserid,lastname,firstname,title&$top=3
我可以用我请求的数据取回前 3 条记录。
我似乎能够按照 my other question(我回答的)在代码中对 D365 进行身份验证,并且有一个访问令牌,但我似乎无法确定如何设置 TRESTRequest
对象,以便执行工作。
目前,它总是 returns 一个 401 Unauthorized 错误。
我尝试将 TOAuth2Authenticator.AccessToken
属性 设置为我从 D365 收到的令牌,然后将 TRESTClient.Authenticator
属性 设置为 TOAuth2Authenticator
TRESTQuest.Client
到 TRESTClient
,这就是示例在 RESTDemos 项目中的工作方式,但我仍然得到 401.
这是我尝试过的代码的最后一个示例,假设所有 REST 对象都已正确链接,它应该可以工作:
RESTClient.BaseURL := 'https://**mytenantcode**.**crmserver**.dynamics.com/api/data/v8.2/';
RESTRequest.Method := TRESTRequestMethod.rmGET;
RESTRequest.Resource := 'systemusers?$select={SELECT}&$top={TOP}';
RESTRequest.AddParameter('SELECT', 'systemuserid,'+
'lastname,'+
'firstname,'+
'title');
RESTRequest.AddParameter('TOP', '3');
RESTRequest.Execute;
我终于return使用以下代码调用网络API获得了正确的信息:
RESTClient.BaseURL := 'https://mytenantcode.crmserver.dynamics.com/';
RESTRequest.Resource := 'api/data/v8.2/systemusers?$select=int_staffnumber,'+
'_int_serviceareaid_value,'+
'_territoryid_value,'+
'lastname,'+
'firstname,'+
'systemuserid,'+
'title';
RESTRequest.AddAuthParameter('Authorization', 'Bearer ' + AToken, TRESTRequestParameterKind.pkHTTPHEADER,
[TRESTRequestParameterOption.poDoNotEncode]);
RESTRequest.Execute;
重要的变化是添加了 Authorization header 参数,并且没有将 Params 用于查询参数,因为 REST 客户端库似乎实际上没有正确执行此操作。
还必须更改令牌授权的 ResourceURI 以匹配 https://mytenantcode.crmserver.dynamics.com URL 用于方法调用。