我將盡我所能解釋這一點,請隨時根據需要要求澄清。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