繁体   English   中英

CRM 2011:在功能区JavaScript中查找当前网格

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM