Dynamics CRM2016: невозможно прочитать свойство 'SetParameter' из неопределенного

У меня есть подсетка в форме Аккаунта, я пытаюсь получить список Орденов дочерних контактов, а затем добавить в подсеть. Итак, я сделал следующие сценарии, но выдает ошибку, которая не может прочитать свойство 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();
}

2 ответа

Существует поддерживаемый способ без кода для этого.

  • Создайте объект QuickView in Contact, содержащий подсетку с заказами.
  • Добавьте QuickView к объекту Account, связав его с поиском Contact.

Если контакт не из поиска, вы можете

  • Добавить скрытый поиск по контакту в форме учетной записи
  • Сделайте так, чтобы ваш javascript заполнил этот поиск ссылкой на контакт, по которому вы хотите отфильтровать подсетку (не забудьте .fireOnChange() после заполнения поля, чтобы вызвать следующий шаг)
  • взывать refresh() обновить подсеть в замене поиска контактов, который вы только что заполнили

Затем выполните быстрый просмотр, как два пункта выше.

Да, вы можете использовать тайм-аут. Код будет выглядеть так:

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 были добавлены новые методы подсетей. Возможно, вы захотите узнать, возможно ли использовать setCurrentView.

Другие вопросы по тегам