如何在Microsoft Dynamics中通过JavaScript按业务单元设置用户默认视图
根据业务单元设置Dynamics数据表默认视图(JavaScript实现)
核心思路
先获取当前登录用户所属的业务单元,通过预设的业务单元与视图的映射关系找到对应视图ID,最后将该视图设为数据表的默认视图。
完整代码实现
function setDefaultViewByBusinessUnit(executionContext) { // 获取表单上下文 const formContext = executionContext.getFormContext(); // 获取当前用户ID(去除前后大括号) const currentUserId = Xrm.Utility.getGlobalContext().userSettings.userId.replace(/[{}]/g, ""); // 1. 获取用户所属业务单元信息 Xrm.WebApi.retrieveRecord("systemuser", currentUserId, "?$select=_businessunitid_value&$expand=businessunitid($select=name, businessunitid)") .then(function(userRecord) { const businessUnitId = userRecord.businessunitid.businessunitid.replace(/[{}]/g, ""); // 2. 定义业务单元与视图的映射(替换为你的实际ID) const buViewMap = { "7a1d2345-6789-0abc-def1-23456789abcd": "12345678-90ab-cdef-1234-567890abcdef", "8b2e3456-7890-1bcd-ef2-34567890bcde": "23456789-0abc-def1-2345-67890abcdef1" // 也可改用业务单元名称作为键,比如:"销售部": "视图ID" }; // 3. 匹配目标视图ID const targetViewId = buViewMap[businessUnitId]; if (!targetViewId) { console.log("未找到当前业务单元对应的默认视图,将使用系统默认视图"); return; } // 4. 设置数据表默认视图(替换gridControlName为你的网格控件名称) const gridControl = formContext.getControl("gridControlName"); if (gridControl) { gridControl.setDefaultView(targetViewId); console.log("已成功设置默认视图: " + targetViewId); } else { console.log("未找到指定的网格控件"); } }) .catch(function(error) { console.error("获取用户业务单元信息失败: ", error.message); }); }
关键注意事项
- 替换实际ID:把代码中
buViewMap里的业务单元ID和视图ID替换为你环境中的真实ID,也可以改成用业务单元名称匹配(根据需求调整)。 - 网格控件名称:
gridControlName要替换为你表单上数据表网格的控件名称,可在Dynamics表单设计器中查看。 - 事件绑定:将这个函数绑定到实体表单的
OnLoad事件上,确保表单加载时自动执行。 - 权限要求:确保当前用户拥有目标视图的访问权限,否则设置后视图无法正常加载。
内容的提问来源于stack exchange,提问作者Benno Straub
相关产品推荐
相关产品推荐

