You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Delphi中调用Dynamics 365 OData接口获取用户列表并配置TRESTRequest

如何用Delphi的TRESTRequest调用Dynamics 365 OData获取用户列表

嘿,既然你已经搞定了认证拿到access token,那剩下的配置其实就很顺了,我来一步步给你拆解怎么弄:

核心组件准备

首先你需要三个Delphi REST组件:TRESTClient、TRESTRequest、TRESTResponse——可以在设计时拖到窗体上,也可以在代码里动态创建,看你习惯。

配置步骤

1. 配置TRESTClient

把它的BaseURL设为D365 OData的根地址,注意去掉URL里多余的空格:

RESTClient1.BaseURL := 'https://mytenantcode.crmserver.dynamics.com/api/data/v8.2/';
RESTClient1.ContentType := 'application/json'; // 指定返回JSON格式

2. 配置TRESTRequest

这是核心部分,要设置请求方法、资源路径,最重要的是带上认证头:

  • 设置请求方法为rmGET
  • Resource设为你要查询的实体和OData参数(注意把URL里的&换成&,代码里不需要HTML转义):
    RESTRequest1.Resource := 'systemusers?$select=systemuserid,lastname,firstname,title&$top=3';
    
  • 关联Client和Response:
    RESTRequest1.Client := RESTClient1;
    RESTRequest1.Response := RESTResponse1;
    

3. 添加认证头和必要请求头

一定要把拿到的access token放到Authorization头里,格式是Bearer + 空格 + token,同时加上Accept头确保返回JSON:

RESTRequest1.Params.Clear;
RESTRequest1.Params.AddHeader('Authorization', 'Bearer ' + YourAccessToken);
RESTRequest1.Params.AddHeader('Accept', 'application/json');

完整代码示例(设计时组件版)

procedure TForm1.btnGetUsersClick(Sender: TObject);
var
  LAccessToken: string;
  LJsonObj: TJSONObject;
  LValueArr: TJSONArray;
  LUserObj: TJSONObject;
begin
  // 假设你已经通过认证流程获取到了有效的access token
  LAccessToken := '你的实际access_token内容';

  // 配置RESTClient
  RESTClient1.BaseURL := 'https://mytenantcode.crmserver.dynamics.com/api/data/v8.2/';
  RESTClient1.ContentType := 'application/json';

  // 配置RESTRequest
  RESTRequest1.Method := rmGET;
  RESTRequest1.Resource := 'systemusers?$select=systemuserid,lastname,firstname,title&$top=3';
  RESTRequest1.Client := RESTClient1;
  RESTRequest1.Response := RESTResponse1;

  // 添加请求头
  RESTRequest1.Params.Clear;
  RESTRequest1.Params.AddHeader('Authorization', 'Bearer ' + LAccessToken);
  RESTRequest1.Params.AddHeader('Accept', 'application/json');

  try
    // 执行请求
    RESTRequest1.Execute;

    // 先把原始响应内容显示出来(方便调试)
    Memo1.Lines.Clear;
    Memo1.Lines.Add('原始响应:');
    Memo1.Lines.Add(RESTResponse1.Content);
    Memo1.Lines.Add('------------------------');

    // 解析JSON响应,提取用户信息
    LJsonObj := TJSONObject.ParseJSONValue(RESTResponse1.Content) as TJSONObject;
    if Assigned(LJsonObj) then
    try
      LValueArr := LJsonObj.GetValue<TJSONArray>('value');
      if Assigned(LValueArr) then
      begin
        Memo1.Lines.Add('解析后的用户列表:');
        for var I := 0 to LValueArr.Count - 1 do
        begin
          LUserObj := LValueArr.Items[I] as TJSONObject;
          Memo1.Lines.Add(Format('ID: %s | 姓名: %s %s | 职位: %s', [
            LUserObj.GetValue<string>('systemuserid'),
            LUserObj.GetValue<string>('firstname'),
            LUserObj.GetValue<string>('lastname'),
            LUserObj.GetValue<string>('title')
          ]));
        end;
      end;
    finally
      LJsonObj.Free;
    end;
  except
    on E: Exception do
      ShowMessage('请求失败: ' + E.Message);
  end;
end;

常见坑和注意点

  • Token有效性:如果遇到401 Unauthorized错误,先检查token是否过期,或者是否拥有访问systemusers实体的权限
  • URL格式:一定要去掉URL里的多余空格,比如你原来的https:// mytenantcode . crmserver .dynamics.com要改成无空格的版本
  • OData版本:如果你的D365用的不是v8.2,要换成对应的版本号(比如v9.1)
  • 响应格式:一定要设置Accept: application/json,否则D365可能返回XML格式,解析会出错

内容的提问来源于stack exchange,提问作者SiBrit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:20:32