我将尽我所能解释这一点,请随时根据需要要求澄清。SDK GridRefresh调用抛出异常
使用IE10,CRM Online和RU12。
我正在玩与子网格,并让他们刷新。请看下面的代码,我从MSDN缺口批发(和包装在一个try/catch块)
function start() {
try {
var controls = Xrm.Page.ui.controls.get(isSubGrid);
if (controls.length > 0) {
var subGridNames = "";
for (var i in controls) {
controls[i].refresh();
subGridNames += (" - " + controls[i].getName() + "\n");
}
alert("The following subgrids were refreshed: \n" + subGridNames);
}
else {
alert("There are no subgrid controls on the current form.");
}
}
catch (ex) {
alert(ex);
}
}
function isSubGrid (control)
{
return control.getControlType() == "subgrid";
}
什么特别的存在 - 获取subgrid
类型的所有控件(这将返回10种元素如预期)和请致电refresh()
。
但是,这在第一次致电refresh()
时始终失败。
异常的详细信息是相当简单的
TypeError: Unable to get property 'Refresh' of undefined or null reference
这表明在这里
for (var i in controls) {
controls[i].refresh();//error thrown here - suggests controls[i] is null
subGridNames += (" - " + controls[i].getName() + "\n");
}
这点在循环中调用时control[i]
为null但是我可以看到它是不是null (并按预期方法有refresh
)。
我可以使它工作使用setInterval
function waitAndThenRefresh(gridname) {
var grid = Xrm.Page.ui.controls.get(gridname);
var intervalId = setInterval(function() {
if (grid === null || grid._control === null || grid._control._element === null) {
return;
}
if (grid._control._element.readyState === 'complete') {
window.clearInterval(intervalId);
if (grid != null) {
grid.refresh();
}
}
}, 1000);
}
但是,这是非常可怕的,更何况不与SDK调用不能按预期工作解释。
所以我想问题是:有其他人看过这个问题吗?或者你可以在另一个实例上复制它吗?我错过了什么吗? SDK中没有任何内容表明您需要推迟调用refresh
,直到内部控件的readyState
为complete
?
道歉延迟响应。虽然我完全可以看到你在说什么,但它会产生同样的错误。很奇怪。 – glosrob 2013-03-19 00:47:46