很拗口的标题 -_-|||
需求:
页面上有两个同样的Field——accountnumber,想Disable其中一个,究竟为什么有这么傻叉的需求就不讨论了,只关注于如何实现。
看似简单的问题,实际做的时候却遇到问题,一开始,当然是用“Xrm.Page.getControl("accountnumber").setDisabled(true);”,结果发现不行,只有排在前面的那个Field被Disable了,另一个还是enable的。
为什么另一个不行呢?
我用了曲折的方法debugging得到结论:
function disablenumber() {
debugger;
//先取得页面上所有tab
var tabs = Xrm.Page.ui.tabs.get();
for (var i in tabs) {
var tab = tabs[i];
//再取得tab里所有Section,并进行循环
for(var l in tab.sections.get())
{
if(tab.sections.get()[l].getName()=="account information") //我们要Disable的Field在这个Section里
{
for(var k in tab.sections.get()[l].controls.get()) //对Section内所有control进行循环
{
//找到accountnumber后Disable,但是这里没有accountnumber,只有accountnumber1
if(tab.sections.get()[l].controls.get()[k].getName()=="accountnumber"){
tab.sections.get()[l].controls.get()[k].setDisabled(true);
break;
}
}
}
}
}
}
由此得知:如果页面上有多过一个一样的Field,CRM会自动给他们编号,第一个出现的既为原名,下一个就在后面加个1,再下一个加个2,以此类推。。。。。
所以我们这个需求可以这样实现:
找到我们要Disable的Field在页面上的位置,然后:
Xrm.Page.getControl("FieldNameX").setDisabled(true);