Javascript Dynamics CRM2016:无法读取属性';设置参数';未定义的

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

我在帐户表单上有子网格,我正在尝试获取子联系人的订单列表,然后添加到子网格。到目前为止,我编写了以下脚本,但它抛出了一个错误,无法读取未定义的属性“SetParameter”。有人能告诉我如何更改子网格的fetchxml吗

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,但我需要所有订单的子网格,由帐户的所有联系人订购。