我创建了一个自定义的“Resolve Case”窗口,它取代了CRM的默认案例解析窗口。我所做的是用自己的按钮替换了Resolve Case功能区按钮,单击该按钮可打开自定义HTML页面。然后,当用户按下该页面上的Resolve按钮时,将创建SOAP消息以解决该特定情况。在SOAP消息之后,我调用window.close()来关闭“Resolve Case”窗口。之后,我调用location.reload(),以便重新加载主窗体并刷新功能区。因此它(在用户的角度来看)就像默认的案例解析窗口一样。
现在这是一个问题。如果用户在解决案例后重新激活它然后再解析它我收到以下消息(来自浏览器的弹出警报):
“要再次显示网页,浏览器需要重新发送您之前提交的信息。如果您要进行购买,则应单击”取消“以避免重复交易。否则,请单击”重试“以再次显示该网页。 “
我发现问题是因为我使用了location.reload()重新加载主表单,因此发生了重复的表单提交。我试图使用window.location = window.location,location.href = location.href等代替location.reload(),但它们都不适用于我。他们似乎刷新了主要形式(至少它眨了眨眼),但是丝带没有刷新。我也试过使用Xrm.Page.ui.refreshRibbon(),但它也没有什么区别。
我从互联网上搜索了一个解决方案,人们正在谈论发布/重定向/获取模式。我找不到任何明确的例子如何实现它,所以我希望你能帮助我理解它以及如何在这种特殊情况下使用它。
如果需要,将提供更多信息和代码示例。
答案 0 :(得分:0)
我倾向于使用以下内容来刷新记录的表单(您可能希望将其包装在函数中):
// Open form with same record.
var newWindow = Xrm.Utility.openEntityForm(entityName, entityId);
// After rollup 12, this function returns a boolean instead of
// the window object.
if (typeof newWindow === 'boolean') {
// The name of the window, when the record is not new, is equal to the record GUID,
// without {, } or - characters. When it is equal, were done. Otherwise, close
// the current window.
if (window.top.name.toLowerCase() === entityId.replace(/[\{\}\-]/gi, "").toLowerCase()) {
return;
}
Xrm.Page.ui.close();
return;
}
// Before rollup 12, the function returns a window object. Compare the window objects.
// When they're not equal, close the current window.
if (newWindow.top !== window.top) {
Xrm.Page.ui.close();
return;
}
根据我的经验,这始终如一。