Javascript Dynamics CRM2016:无法读取属性';设置参数';未定义的
我在帐户表单上有子网格,我正在尝试获取子联系人的订单列表,然后添加到子网格。到目前为止,我编写了以下脚本,但它抛出了一个错误,无法读取未定义的属性“SetParameter”。有人能告诉我如何更改子网格的fetchxml吗Javascript Dynamics CRM2016:无法读取属性';设置参数';未定义的,javascript,dynamics-crm-2016,subgrid,Javascript,Dynamics Crm 2016,Subgrid,我在帐户表单上有子网格,我正在尝试获取子联系人的订单列表,然后添加到子网格。到目前为止,我编写了以下脚本,但它抛出了一个错误,无法读取未定义的属性“SetParameter”。有人能告诉我如何更改子网格的fetchxml吗 function listOfOrders(contactId){ var orderFetchXml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct
function listOfOrders(contactId){
var orderFetchXml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"+
" <entity name='salesorder'>"+
" <attribute name='name' />"+
" <attribute name='customerid' />"+
" <attribute name='salesorderid' />"+
" <attribute name='statecode' />"+
" <attribute name='createdon' />"+
" <order attribute='name' descending='false' />"+
" <filter type='and'>"+
" <condition attribute='customerid' operator='eq' uitype='contact' value='"+contactId+"' />"+
" </filter>"+
" </entity>"+
"</fetch>";
var retrievedOrders = XrmServiceToolkit.Soap.Fetch(orderFetchXml);
var contactId = "";
if(retrievedOrders.length <0)
return;
var viewId = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX";
var viewDisName = "Account Orders subgridview";
var layOutXml = "<grid name='resultset' object='1' jump='name' select='1' icon='1' preview='1'>" +
"<row name='result' id='salesorderid'>" +
"<cell name='name' width='300' />" +
"<cell name='statecode' />"+
"<cell name='createdon' />"+
"<cell name='customerid' />"+
"disableSorting='1' />" +
"</row>" +
"</grid>";
var orderSubgrid = window.parent.document.getElementById("orderssubgrid");
//apply layout and filtered fetchXML
orderSubgrid.control.SetParameter("layoutXml", layOutXml);
orderSubgrid.control.SetParameter("fetchXml", orderFetchXml);
//Refresh grid to show filtered records only.
orderSubgrid.control.Refresh();
}
功能列表顺序(contactId){
var orderFetchXml=“”+
" "+
" "+
" "+
" "+
" "+
" "+
" "+
" "+
" "+
" "+
" "+
"";
var retrievedOrders=XrmServiceToolkit.Soap.Fetch(orderFetchXml);
var contactId=“”;
如果(retrievedOrders.length是,则可以使用超时。代码如下所示:
function listOfOrders(contactId) {
var orderSubgrid = window.parent.document.getElementById("orderssubgrid");
if (orderSubgrid == null) {
setTimeout(function () { listofOrders(contactId); }, 2000);
return;
}
// ... the rest of your code
}
如果您想尝试受支持的方法,2016年Xrm中添加了新的子网格方法。您可能想看看是否可以使用。有一种不受支持的无代码方法可以做到这一点
- 在Contact实体中创建一个QuickView,该实体包含到订单的子网格
- 将QuickView添加到将其链接到联系人查找的帐户实体
如果联系人不是来自查找,您可以
- 在帐户窗体中添加对联系人的隐藏查找
- 让您的javascript使用要过滤子网格的联系人的引用来填充此查找(请记住在填充字段后调用下一步)
- 调用
refresh()
以更新刚刚填写的联系人查找的onchange中的子网格
然后像上面两点一样实现quickview。当该脚本运行时,DOM中没有ID为orderssubgrid
的任何内容。我从那里开始。我该怎么做,超时?你基于哪个联系人?是从帐户上的查找字段来的吗?我用你提供的代码片段调用了调试器似乎在到达SetParameter之前加载子网格。orderSubgrid=div#orderSubgrid.ms-crm-ListControl-Ex-Lite是我在debugger中看到的,那么应该没有问题?如果子网格在到达orderSubgrid.control.SetParameter()之前加载
则您不应收到无法读取未定义的属性“SetParameter”的错误。如果存在问题,您可以检查是否也定义了控件
属性:If(orderSubgrid.control!=null)
这是我在Debugger中找不到的,谢谢Alex,但我需要所有订单的子网格,由帐户的所有联系人订购。