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

TypeScript应用向Dataverse创建记录及dynamics-web-api代码报错问题

问题解答

关于dynamics-web-api包的适用性

  • 完全满足你的需求:这个包是专门为Dataverse(原Dynamics 365)REST API封装的TypeScript/JavaScript库,支持创建、读取、更新、删除记录等所有核心操作。
  • 授权支持:它兼容Dataverse常用的授权方式,包括OAuth2、MSAL、ADAL,初始化时只需配置对应授权参数(如租户ID、客户端ID、权限范围等)即可完成身份验证。
  • 实用经验:
    • 创建记录可直接使用createEntity方法,传入实体逻辑名和数据对象即可,示例:await dynamicsWebApi.createEntity('account', { name: '测试账户' })
    • 初始化时优先参考官方给出的授权配置示例,覆盖了绝大多数常见的身份验证场景。

代码错误分析与修正

错误原因

你定义的responseDyn是一个异步函数,而非函数执行后的结果;且该函数内部未返回executeUnboundFunction的调用结果,导致它的返回值类型为Promise<void>,自然不存在UserId属性。TypeScript会在编译阶段检测到类型不匹配,因此在你尝试获取结果前就抛出了错误。

修正后的代码

try {
    // 直接调用并await异步操作,获取返回结果
    const responseDyn = await dynamicsWebApi.executeUnboundFunction('WhoAmI');
    console.log(`Hello Dynamics 365! My id is: ${responseDyn.UserId}`);
} catch (error) {
    console.log(error);
}

封装函数的正确写法

如果需要把逻辑封装成独立函数,需确保函数返回异步操作的结果,且调用时要await:

try {
    const getWhoAmI = async () => {
        // 必须返回执行结果
        return await dynamicsWebApi.executeUnboundFunction('WhoAmI');
    };
    const responseDyn = await getWhoAmI();
    console.log(`Hello Dynamics 365! My id is: ${responseDyn.UserId}`);
} catch (error) {
    console.log(error);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:05:37