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

React TypeScript调用Xrm WebApi报‘Xrm未定义’,如何获取Dynamics 365环境变量

问题原因
  • 类型定义缺失:TypeScript编译器无法识别全局Xrm对象,因为Xrm是Dynamics 365客户端运行时注入的全局变量,本地VS Code环境默认没有对应的类型声明文件,导致编译时提示“Xrm not defined”。
  • 运行环境不匹配:如果直接在VS Code里执行这段代码,本地环境没有加载Dynamics 365的客户端框架,Xrm对象本身就不存在,运行时必然报错。
解决方法

1. 用于Dynamics 365 Web资源开发(代码将在Dynamics客户端运行)

  • 安装官方TypeScript类型定义:
    在项目根目录执行以下npm命令,添加Dynamics 365的类型声明:
    npm install @types/xrm --save-dev
    
    安装后,TypeScript就能识别Xrm的类型结构,消除代码中的错误提示。
  • 正确部署运行:这段代码不能在本地VS Code环境直接执行,必须打包成Web资源(比如把TS编译为JS),上传到Dynamics 365后,在表单、Web资源等客户端场景中调用。

2. 本地测试/非客户端环境调用(直接调用Dataverse Web API)

如果需要在本地环境获取环境变量,不要依赖Xrm.WebApi,直接调用Dataverse的Web API端点即可,示例代码如下:

async function GetEnvironmentVariableValue(name: string): Promise<string | null> {
    const environmentUrl = "https://your-org.crm.dynamics.com"; // 替换为你的Dataverse环境URL
    const accessToken = "your-valid-access-token"; // 需通过Azure AD获取有效的访问令牌

    try {
        const response = await fetch(
            `${environmentUrl}/api/data/v9.2/environmentvariabledefinitions?$filter=schemaname eq '${name}'&$select=environmentvariabledefinitionid&$expand=environmentvariabledefinition_environmentvariablevalue($select=value)`,
            {
                method: "GET",
                headers: {
                    "Authorization": `Bearer ${accessToken}`,
                    "Accept": "application/json"
                }
            }
        );

        if (!response.ok) throw new Error(`请求失败,状态码:${response.status}`);
        
        const results = await response.json();
        if (!results?.value || results.value.length === 0) return null;
        
        const variable = results.value[0];
        if (!variable?.environmentvariabledefinition_environmentvariablevalue || variable.environmentvariabledefinition_environmentvariablevalue.length === 0) return null;

        return variable.environmentvariabledefinition_environmentvariablevalue[0].value;
    } catch (error) {
        console.error("获取环境变量出错:", error);
        return null;
    }
}
  • 注意:需要先通过Azure AD认证获取Dataverse的访问令牌,且令牌对应的权限需包含environmentvariabledefinition实体的读取权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 18:21:10