
在 Dynamics 365 自定义按钮开发中,直接使用 location.href 会导致全页重载、导航栏丢失、视图状态清空等问题;应优先采用 Xrm.Navigation.navigateTo() 实现与系统内置链接(如网格行跳转)一致的单页应用(SPA)式平滑导航。
在 dynamics 365 自定义按钮开发中,直接使用 `location.href` 会导致全页重载、导航栏丢失、视图状态清空等问题;应优先采用 `xrm.navigation.navigateto()` 实现与系统内置链接(如网格行跳转)一致的单页应用(spa)式平滑导航。
Dynamics 365 基于现代化前端框架构建,其网格、列表项等内部导航均通过 Xrm.Navigation.navigateTo() 实现——该 API 由平台底层路由系统接管,能复用当前会话上下文、保留左侧导航栏、维持视图筛选状态,并支持记录级权限校验与加载动画,完全模拟 <a></a> 标签点击行为,而非传统 HTTP 跳转。
✅ 推荐方案:使用 Xrm.Navigation.navigateTo()
这是官方支持且语义最准确的方式,适用于打开实体表单、视图、自定义页面等场景:
// 导航至指定记录的主表单(在当前窗口)
function navigateToRecord(entityLogicalName, recordId, openInNewWindow = false) {
const navOptions = {
entityName: entityLogicalName, // 如 'account', 'contact'
entityId: recordId, // GUID 格式,例如 '{12345678-9ABC-DEF0-1234-567890ABCDEF}'
openInNewWindow: openInNewWindow // true → 新标签页;false → 当前区域内加载(推荐)
};
// 异步执行,返回 Promise(可选处理加载失败)
Xrm.Navigation.navigateTo(navOptions)
.then(() => console.log("导航成功"))
.catch(error => console.error("导航失败:", error.message));
}
// 在按钮中调用(建议绑定到 form 或 command bar 的 JS web resource)
document.getElementById("customNavBtn").addEventListener("click", () => {
navigateToRecord("account", "{a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8}", false);
});⚠️ 关键注意事项:
- ✅ 必须在 Dynamics 365 页面上下文中执行(即
Xrm对象已就绪),不可在独立 HTML 页面或 iframe 外调用; - ✅
entityId必须为标准 GUID 字符串格式(含大括号{}),不支持 URL 编码或简写; - ❌ 避免混用
window.location.replace()或document.location.href—— 它们强制触发浏览器级跳转,破坏 SPA 体验; - ? 若需打开自定义 HTML 页面(非实体表单),请使用
Xrm.Navigation.openWebResource()并传入webResourceName和参数; - ? 对于高级场景(如带查询参数的视图导航),可配合
Xrm.Navigation.openForm()或openView()(适用于模型驱动应用 v9.2+)。
? 补充技巧:模拟 <a></a> 点击(仅作备选)
若因特殊限制无法使用 Xrm API,可创建隐藏 <a></a> 元素并触发其 click(),但不推荐用于生产环境(绕过平台路由,可能丢失上下文):
function simulateAnchorClick(url) {
const anchor = document.createElement("a");
anchor.href = url;
anchor.style.display = "none";
document.body.appendChild(anchor);
anchor.click();
document.body.removeChild(anchor);
}总之,Xrm.Navigation.navigateTo() 是 Dynamics 365 中实现一致、可靠、高性能导航的唯一标准方式——它不是“替代方案”,而是平台原生导航机制的编程接口。正确使用,即可让自定义按钮与系统内置链接拥有完全相同的用户体验。

















