这个快把我逼疯了......
我在一个表单中有几个子网格,所有相同的实体并过滤到不同的字段。网格功能区中的一个按钮调用一个函数,该函数需要知道确切的网格“实例”才能做出决定——这就是我完全迷失的地方。
在我的功能区定义中,我将 CrmParameter SelectedControl 传递给被调用的函数。这应该是活动网格 - 至少在某种程度上它显然是。
我想在我的 JavaScript 代码中做的是通过它的名称获取我的一个网格,然后将它与传递给我的函数的对象进行比较——只是这是一个完全不同的对象,你几乎可以用它做任何事情. 你不能得到它的名字、ID、标签等等;在 SDK 中为控件列出的所有方法中,只有四种有效:getVisible()、setVisible()、setFocus() 和 refresh()。这些对于我需要做的事情不是很有用。
然后一位同事告诉我尝试 Xrm.Page.ui.getCurrentControl() - 但这显示了完全相同的行为,尽管有趣的是这两个对象甚至不相等。
我通过谷歌发现了一些模糊的东西,它使用了通过 .getControl() 检索的控件的 .control 属性,所以我将通过 .getCurrentControl() 获得的属性与该属性进行了比较——它们匹配。不幸的是,“当前控件”与所有子网格的.control 属性相匹配。
一些代码可以更清楚地说明什么是什么:
function ribbonAction(param) // param is the SelectedControl parameter
{
var current = Xrm.Page.ui.getCurrentControl();
var grid1 = Xrm.Page.getControl("grid1");
var grid2 = Xrm.Page.getControl("grid2");
alert(param == current); // false
alert(param == grid1); // false
alert(param == grid1.control); // false
alert(current == grid1); // false
alert(current == grid1.control); // true
alert(current == grid2.control); // true
alert(current.getName()); // throws an error
alert(param.getName()); // throws an error
current.refresh(); // refreshes the correct grid
param.refresh(); // refreshes the correct grid
}
注释说明在 grid1 处于活动状态时单击功能区按钮会发生什么。
对于如何在这种情况下真正识别活动子网格控件的任何提示,我将不胜感激。