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.