我需要一些关于我的代码的帮助,因为将自定义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.
感谢您的时间。
答案 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);
}
}