【发布时间】:2017-12-21 14:18:43
【问题描述】:
我一直在寻找一种方法来获取 CRM 表单中所有脏字段的列表,以确定已更改的内容以及需要保存在浏览器控制台中的内容。这将帮助我调试 javascript 或其他与一般 CRM 相关的问题
我怎样才能做到这一点?
【问题讨论】:
标签: javascript dynamics-crm dynamics-crm-2015 xrm
我一直在寻找一种方法来获取 CRM 表单中所有脏字段的列表,以确定已更改的内容以及需要保存在浏览器控制台中的内容。这将帮助我调试 javascript 或其他与一般 CRM 相关的问题
我怎样才能做到这一点?
【问题讨论】:
标签: javascript dynamics-crm dynamics-crm-2015 xrm
打开开发者工具(F12),选择控制台并输入以下内容:
Xrm.Page.data = Xrm.Page.data || frames[0].Xrm.Page.data || frames[1].Xrm.Page.data; Xrm.Page.data.entity.getDataXml()
返回的 XML 会将脏字段及其值列为 XML。例如
<contact><firstname>changed on form but not saved in db</firstname></contact>
【讨论】:
您可以参考以下代码
var attribs = Xrm.Page.data.entity.attributes.get();
获取from中所有字段的列表,然后为它调用函数getIsDirty()为
var filterDirty = attribs.filter(function(elem,index,attribs){
var name = elem.getName();
return (Xrm.Page.getAttribute(name).getIsDirty() === true);
});
现在filterDirty 将保存所有脏字段的数组,您可以将其与地图一起打印为
filterDirty.map(function(e){ console.log(e.getName()); });
注意:只要确保 Xrm 可用,您就可以看到为什么在我上面提到的 here 之前还有额外的代码位
整个代码对你来说看起来像这样
// get the correct frame
for(var i=0;i<5;i++) //loop through 0 to 4
if(frames[i].Xrm.Page.ui != undefined) //check if undefined
{
Xrm = frames[i].Xrm; //assign Xrm
console.info("~: Xrm updated with frame " + i + " :~"); //show info
break; //breakout the loop
}
//Query
var attribs = Xrm.Page.data.entity.attributes.get();
//Filter
var filterDirty = attribs.filter(function(elem,index,attribs){
var name = elem.getName();
return (Xrm.Page.getAttribute(name).getIsDirty() === true);
});
//print
filterDirty.map(function(e){
console.log(e.getName());
});
【讨论】: