CRM 2013 - FetchXML 和子网格

CRM 2013 - FetchXML & the subgrid

我的代码需要一些帮助,因为将自定义 FetchXml 应用到子网格的实现在 CRM 2011 到 CRM 2013 中似乎已经改变。请注意,这不是 setParameter 与 SetParameter 外壳的问题,因为我一直在寻找遍布全网。我的问题是如何引用子网格并调用 SetParameter 方法。

这是我的代码:

function uc_addCaseFilterToCaseGrid() {
   var contactGuid = Xrm.Page.data.entity.getId();

  //create a filter xml
   if (contactGuid != null) 
   {
          var filter = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>";
                filter += "<entity name='uc_crecord'>";
                filter += "<attribute name='uc_casemanager' />";
                filter += "<attribute name='uc_cindividual' />";
                filter += "<attribute name='uc_rindividual'/>";
            filter += "<filter type='or'>" +
                       "<filter type='or'>" +
                        "<condition attribute='uc_casemanager' operator='eq' value='" + contactGuid + "'/>" +
                        "<condition attribute='uc_cindividual' operator='eq' value='" + contactGuid + "'/>" +
                        "<condition attribute='uc_rindividual' operator='eq' value='" + contactGuid + "'/>" +
                        "</filter>" +
                     "</filter>" +
                         "</entity>" +
                 "</fetch>";

        //add filter
            //var caseGrid = Xrm.Page.getControl("gPR");
           ***//var caseGrid = Xrm.Page.ui.controls.get("gPR");
           var caseGrid = document.getElementById("gPR").control;***

            if (caseGrid == null) 
            {
               //The caseGrid hasn't loaded, wait 1 second and then try again     
               setTimeout(uc_addCaseFilterToCaseGrid, 3000);
               return;
            }

            caseGrid.control.SetParameter("fetchXML",filter);
            caseGrid.control.Refresh();
    }
}

此代码不起作用,因为粗斜体行给我带来了问题。

如果我使用 getElementByID(不推荐,也不是我想采用的方法),代码 SetParameter 会按预期执行。

但是,我想使用以下设置变量:

var caseGrid = Xrm.Page.getControl("gPR");

因为我想确保未来的支持。但是,当我调用 SetParameter 时,出现错误 "Object doesn't support property or method 'SetParameter'"。给出了什么?

我试过以下方法:

caseGrid.control.SetParameter("fetchXML",filter);

caseGrid.SetParameter("fetchXML",filter);

Xrm.Page.getControl(gPR)._control.get_innerControl()._element.control.SetParameter("fetchXML",filter);

我已经尝试了 setParameter 和 SetParameter,两者都产生了相同的结果。

我已经使用 XRMToolkit 测试了 fetchXml,它很好,所以这不是问题所在(不太可能,但可能是!)

我正在绕弯子试图弄清楚 - 是否有可能您不能再在 CRM 2013 中使用 SetParameter(但在 2011 年可以)?如果是这样,我还能如何为子网格提供 fetchXml?

已在 IE11、CRM 2013 更新汇总包 1 + Service Pack 1 中测试。

感谢您的宝贵时间。

随时停止尝试绕弯。欢迎使用 CRM 2013 和 2015。

Xrm.Page.getControl返回的Object支持设置子网格的FetchXML。您使用 getElementById 是实现此目标的唯一方法,尽管它不受支持并且技术上可能会被更新破坏。

顺便说一句,它在 2011 年实际上不受支持 - 如果您查看 SDK,则没有记录的方法来更改子网格的 FetchXML。它起作用的事实(我相信)是旧 Htc 网格的产物。在 2013 年和 2015 年,不再使用该网格,因此副作用不再起作用。

希望这更像是一个实际的答案,而不仅仅是对您已经发现的答案的确认。

document.getElementById("SubgridName") 不会工作。尝试

var leadwithSameNameGrid = window.parent.document.getElementById("SubgridName"); 现在子网格将具有 control.Try超时,因为需要一些时间才能让 control.For 获得控制权,设置 fetchxml 参数并刷新使用以下代码。

函数 filterSubGrid() {

var leadwithSameNameGrid = window.parent.document.getElementById("SubgridName");

if (leadwithSameNameGrid == null) 
{
    setTimeout(filterSubGrid, 500);
    return;
}

//fetch xml code 

if (leadwithSameNameGrid.control != null) 
{
    leadwithSameNameGrid.control.SetParameter("fetchXml", fetchXml); //set the fetch xml to the sub grid   
    leadwithSameNameGrid.control.refresh(); //refresh the sub grid using the new fetch xml
} 
else 
{
    setTimeout(filterSubGrid, 500);
}

}