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
相关产品推荐
相关产品推荐

