今天工作中遇到一个问题,一些实体的form一打开就显示unsaved changes, 当你试图去关闭或者跳转到别的form的时候,会显示修改未保存的alert。这虽然是个小问题,但是却会影响用户体验。
下面就说说我分析和解决这个问题的流程。
1. 检查这个form的JavaScript。
如果js的onload中有setvalue, 就会改变field的值,导致这个问题。
2. 检查这个实体的Business rule
business rule中如果有set值的行为同样会产生unsaved的问题。
3. 添加代码来解决。
这个代码并不适用于一般情况,因为我们要通过改变所有form上的field的submit mode为never的方法去阻止”未保存的alert“的出现,但是一般情况下,我们是希望CRM保存我们的修改的。 所以这个程序只适用于你要通过代码去关闭form的时候。
示例代码如下:
var attributes = Xrm.Page.data.entity.attributes.get();
// removes IsDirty property from all the fields
for (var i in attributes) {
attributes[i].setSubmitMode("never");
}
// refresh grid view
window.parent.opener.location.reload();
Xrm.Page.ui.close();
4.小窍门帮你找到有问题的field.
var attributes = Xrm.Page.data.entity.attributes.get();
string fieldnames = "";
for (var i in attributes) {
if(attributes[i].getIsDirty&&attributes[i].getIsDirty()){
fieldnames+=attributes[i].getName()+"\";
}
alert(fieldnames);}
这个代码将会把有修改的field的name给alert出来,这样你就可以去针对性在js或者business rule里面去寻找有关的代码了。另外,返回的是field的name, 不是display name 或者label.
可以参考一下的链接去和之前解释过的submit mode去了解更多的细节:
https://social.microsoft.com/Forums/en-US/b36816be-72f9-4cf6-a1a7-adc8a4619513/no-dirty-fields-on-form-but-unsaved-changes-window-still-appears?forum=crmdevelopment
关于unsaved change的一些问题就说这么多了,希望对大家类似的问题有帮助。