[英]CRM 2011: Find current grid in ribbon JavaScript
这个让我发疯了...
我有几种形式的子网格,它们都属于同一实体,并已过滤到不同的字段。 网格功能区中的一个按钮调用一个函数,该函数需要知道确切的网格“实例”才能做出决定-这就是我完全迷失的地方。
在功能区定义中,我将CrmParameter SelectedControl传递给调用的函数。 这应该是活动网格-至少在某种程度上显然是这样。
我想在JavaScript代码中执行的操作是通过其名称获取我的一个网格,然后将其与传递到函数中的对象进行比较-只是这是一些完全不同的对象,并且您几乎无法执行任何操作。 您无法获得其名称,ID或标签。 在SDK中为控件列出的所有方法中,只有四个工作:getVisible(),setVisible(),setFocus()和refresh()。 这些对于我需要做的不是很有用。
一位同事然后告诉我尝试Xrm.Page.ui.getCurrentControl()-但这显示了完全相同的行为,尽管有趣的是两个对象甚至不相等。
我在Google上发现了一种含糊不清的东西,它使用了通过.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处于活动状态时单击功能区按钮时会发生什么。
对于在这种情况下如何真正识别活动的子网格控件的任何提示,我将不胜感激。
这是快把我逼疯了! 这是我破解它的方法:
在JavaScript库中为子网格所在的实体表单指定一个全局变量。
var SelectedSubGrid;
在同一个库中,添加一个名为TagGrid的函数,如下所示。
function TagGrid(SubGridName)
{
if(document.getElementById(SubGridName + "_d") != null)
{
document.getElementById(SubGridName + "_d").onclick = function () { SelectedSubGrid = SubGridName };
}
}
然后添加第二个名为GetCurrentGrid的函数,如下所示。
function GetCurrentGrid()
{
// add code here to check current grid and execute differently as required...
alert('Current Grid is ' + SelectedSubGrid);
}
为相同实体类型的每个子网格包括对TagGrid函数的调用。 在下面的示例中,我有两个自定义实体类型为“ Business Pitch Event”的子网格,一个名为“ DocumentationEvents”的网格,另一个为“ BusinessPitchEventEvents”。
function OnLoad()
{
TagGrid("DocumentationEvents");
TagGrid("BusinessPitchEventEvents");
}
然后在子网格功能区按钮上,调用GetCurrentGrid函数!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.