Dynamics 365异步操作问题:等待WebApi获取用户详情后执行对比
问题解决:Dynamics 365视图中异步对比用户Azure AD ID显示图标失效
问题原因
你的代码核心问题是异步函数处理不当:fetchAndCompareUserIds是async函数,调用时未使用await关键字,导致finalOutput拿到的是处于pending状态的Promise对象,而非预期的0或1,switch判断自然无法触发对应逻辑。
另外,原代码对executionContext的处理存在错误:executionContext是Dynamics 365提供的上下文对象,不需要用JSON.parse解析,直接通过它获取表单字段值即可。
修正后的代码
async function compareUser(executionContext) { // 获取当前登录用户ID(移除大括号) const globalContext = Xrm.Utility.getGlobalContext(); const loggedinUserId = globalContext.userSettings.userId.replace(/[{}]/g, ""); // 获取字段值:修正executionContext的使用方式 const formContext = executionContext.getFormContext(); const userListField = formContext.getAttribute("suyog_userlist"); if (!userListField || !userListField.getValue()) { console.log("字段值为空"); return ["suyog_testredicon", "Red"]; // 字段为空时默认显示红色图标 } const fieldValID = userListField.getValue()[0].id.guid; // 等待异步对比完成,拿到结果 const finalOutput = await fetchAndCompareUserIds(loggedinUserId, fieldValID); // 根据结果返回对应图标 switch (finalOutput) { case 1: console.log("用户匹配"); return ["suyog_testgreenicon", "Green"]; case 0: console.log("用户不匹配"); return ["suyog_testredicon", "Red"]; default: console.log("对比出错"); return ["suyog_testredicon", "Red"]; // 异常情况默认红色图标 } } async function fetchAndCompareUserIds(loggedinUserId, fieldValID) { try { // 异步获取当前用户的Azure AD ID const result = await Xrm.WebApi.online.retrieveRecord( "systemuser", loggedinUserId, "?$select=azureactivedirectoryobjectid" ); const fetched_aad_id = result.azureactivedirectoryobjectid; console.log(`对比:${fieldValID} vs ${fetched_aad_id}`); // 对比两个ID,返回结果 return fieldValID === fetched_aad_id ? 1 : 0; } catch (error) { console.error("获取用户信息出错:", error.message); return 0; // 出错时默认返回不匹配 } }
关键改动说明
- 异步处理修正:将
compareUser改为async函数,调用fetchAndCompareUserIds时添加await,确保等待异步API请求完成后再执行后续判断逻辑。 - 上下文处理修正:通过
executionContext.getFormContext()正确获取表单上下文,再读取字段值,避免错误的JSON解析操作。 - 异常与边界处理:增加字段为空、API请求失败的情况处理,避免代码崩溃,同时保证任何场景下都能返回图标信息。
- 代码优化:用正则表达式一次性移除用户ID的大括号,简化字符串处理;用三元表达式简化对比逻辑,提升可读性。
内容的提问来源于stack exchange,提问作者foodiepanda
相关产品推荐
相关产品推荐

