【问题标题】:How to call the Dynamics 365 OData endpoint to get a list of users from Delphi如何调用 Dynamics 365 OData 端点以从 Delphi 获取用户列表
【发布时间】:2018-04-06 02:22:19
【问题描述】:

如果我通过网络浏览器对 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 对象,以便执行工作。

目前,它总是返回 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;

【问题讨论】:

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


【解决方案1】:

我终于让它使用以下代码返回正确的信息来调用 Web 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 标头参数,而不是使用 Params 作为查询参数,因为看起来 REST 客户端库实际上并没有正确执行。

还必须更改令牌授权的 ResourceURI 以匹配用于方法调用的 https://mytenantcode.crmserver.dynamics.com URL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    相关资源
    最近更新 更多