如何列出控制台中所有脏的 CRM 字段?

How to list all CRM fields which are dirty in console?

我一直在寻找一种方法来获取 CRM 表单中所有脏字段的列表,以确定更改的内容以及需要在浏览器控制台中保存的内容。这将帮助我调试 javascript 或其他一般的 CRM 相关问题

我怎样才能做到这一点?

您可以使用以下代码供您参考

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()); 
});

打开开发人员工具 (F12),select 控制台并输入以下内容:

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>