Dynamics CRM2016: не удается прочитать свойство «SetParameter» неопределенного

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

person M. Ali    schedule 31.03.2017    source источник
comment
Когда этот скрипт запускается, в DOM нет ничего с идентификатором orderssubgrid. Я бы начал там.   -  person Reinstate Monica Cellio    schedule 31.03.2017
comment
что мне делать, таймаут?   -  person M. Ali    schedule 31.03.2017
comment
На каком контакте вы основываете мнение? Это из поля поиска в учетной записи?   -  person Alex    schedule 31.03.2017


Ответы (2)


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

  • Создайте объект QuickView в контакте, содержащий вложенную сетку для заказов.
  • Добавьте QuickView в сущность учетной записи, связав ее с поиском контактов.

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

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

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

person Alex    schedule 31.03.2017
comment
спасибо Алекс, но мне нужна подсетка всех заказов, заказанная по всем контактам аккаунта. - person M. Ali; 05.04.2017

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

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.

person Dave Clark    schedule 31.03.2017
comment
Я вызвал отладчик с фрагментом, который вы предоставили, кажется, что подсетка загружается до достижения SetParameter. orderSubgrid = div#orderssubgrid.ms-crm-ListControl-Ex-Lite — это то, что у меня есть в отладчике - person M. Ali; 31.03.2017
comment
Тогда не должно быть проблем? Если подсетка загружается до достижения orderSubgrid.control.SetParameter(), вы не должны получать сообщение об ошибке невозможно прочитать свойство 'SetParameter' of undefined. Если есть проблема, вы можете вместо этого проверить, что у вас также определено свойство control: if (orderSubgrid.control != null) - person Dave Clark; 31.03.2017
comment
Это то, что я не нашел в отладчике - person M. Ali; 31.03.2017