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);
}
}
我的代码需要一些帮助,因为将自定义 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);
}
}