Model Driven App:使用导航时如何移除默认保存变更提示
问题描述
- 在Dataverse的Report主表单上,有一个名为“Generate Report”的自定义功能区按钮
- 通过JavaScript Web资源实现报表生成:用Fetch XML从Dataverse表获取数据,转换为CSV格式后上传至新建的Report记录
- 报表创建完成后,需要传入新生成的Report GUID,导航至该报表的编辑表单
- 当前所有功能正常,但从新建Report表单跳转时,会弹出“离开页面前请保存更改”的提示弹窗
- 需求:仅在点击“Generate Report”按钮并跳转至新报表时,移除该提示弹窗
解决方案
要实现仅在点击该按钮时跳过离开提示,可通过以下两种实用方法处理:
方法1:标记表单为“无未保存更改”状态
在跳转代码执行前,调用表单API将脏状态设为false,让系统判定没有未保存内容,从而不触发提示:
// 跳转前添加此行代码 Xrm.Page.data.setIsDirty(false); // 原跳转逻辑(根据实际代码调整) var newReportId = "新生成的Report记录GUID"; Xrm.Utility.openEntityForm("report", newReportId);
如果是新版Power Apps模型驱动应用,建议使用formContext替代Xrm.Page:
function generateAndNavigate(formContext) { // 执行报表生成逻辑... // 标记表单无未保存更改 formContext.data.setIsDirty(false); // 导航至新报表编辑表单 Xrm.Utility.openEntityForm("report", newReportId); }
方法2:使用navigateTo并配置跳过提示参数
若使用Xrm.Navigation.navigateTo方法跳转,可直接通过参数设置跳过提示:
var pageInput = { pageType: "entityrecord", entityName: "report", entityId: newReportId // 新生成的Report记录GUID }; var navigationOptions = { target: 1, // 1=当前窗口打开,2=新窗口打开 skipPrompt: true // 关键参数:跳过未保存更改提示 }; Xrm.Navigation.navigateTo(pageInput, navigationOptions).then( function () { /* 成功跳转后的回调逻辑 */ }, function (error) { /* 错误处理逻辑 */ } );
注意事项
- 确保上述代码仅在点击“Generate Report”按钮时触发,避免影响表单正常的未保存提示逻辑
- 新版模型驱动应用优先使用
formContext和Xrm.Navigation.navigateTo,Xrm.Page已逐步被弃用
内容的提问来源于stack exchange,提问作者Prashant Pokhrel
相关产品推荐
相关产品推荐

