CRM 2013 - FetchXML&子网格

时间:2015-01-28 00:42:22

标签: dynamics-crm-2013 microsoft-dynamics

我需要一些关于我的代码的帮助,因为将自定义FetchXml应用到子网格的实现似乎已经在CRM 2011中更改为CRM 2013.请注意这不是setParameter vs 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();
    }
}

此代码不起作用,因为粗体,italisized行导致我出现问题。

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

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

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

因为我想确保未来的支持。但是当我调用SetParameter时,我得到一个错误&#34;对象不支持属性或方法&#39; SetParameter&#39;&#34;。是什么给了什么?

我尝试过以下方法:

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.

感谢您的时间。

2 个答案:

答案 0 :(得分:4)

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

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

顺便说一句,它在2011年实际上并没有得到支持 - 如果你看一下SDK,就没有记录方法来改变子网格的FetchXML。它工作的事实是(我相信)旧Htc网格的工件。 2013年和2015年不再使用网格,因此副作用不再有效。

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

答案 1 :(得分:1)

document.getElementById(&#34; SubgridName&#34;)不会工作。试试

var leadwithSameNameGrid = window.parent.document.getElementById(&#34; SubgridName&#34;); 现在子网格将有控件。尝试超时,因为它需要一段时间才能获得control.For获取控件,设置fetchxml参数并刷新使用以下代码。

function 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);
}

}