23.09.2013, 11:30 | #1 |
Участник
|
SetParameter не работает?
Добрый день, коллеги!
Есть задача: фильтровать записи в SubGrid в зависимости от значения поля с типом набор параметров. Проблема на финальной стадии, когда я пытаюсь установить setParameter мне выдает что объект не поддерживает свойство или метод или не удалось получить свойство "SetParameter" ссылки, значение которой не определено или является NULL. Вот сам код: Цитата:
function filterSubGrid() { //var accountsGrid = document.getElementById("new_dogovorGrid"); //grid to filter var Casko = 100000001; var Osago = 100000000; var reguestGrid =Xrm.Page.ui.controls.get('new_dogovorGrid')._control; debugger; if (reguestGrid == null) { //make sure the grid has loaded setTimeout(function () { updateSubGrid(); }, 2000); //if the grid hasn’t loaded run this again when it has return; } var accountValue = Xrm.Page.getAttribute("new_account").getValue(); //field to filter by var ProductValue = Xrm.Page.getAttribute("new_insurance_product").getValue(); //field to filter by var accountId = "00000000-0000-0000-0000-000000000000"; //if filter field is null display nothing if (accountValue != null && (ProductValue == Casko || ProductValue == Osago)) { var accountId = accountValue[0].id; } //fetch xml code which will retrieve all the accounts related to the contact var fetchXml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>" + " <entity name='new_request'>" + " <attribute name='new_requestid' />" + " <attribute name='new_insurance_product' />" + " <attribute name='new_insuransepayment' />" + " <attribute name='new_total_limit' />" + " <attribute name='new_client_account' />" + " <order attribute='new_insurance_product' descending='false' />" + " <filter type='and'>" + " <condition attribute='new_client_account' operator='eq' uitype='account' value='" + accountId + "' />" + " <condition attribute='new_insurance_product' operator='eq' value='" + ProductValue + "'/>" + " <condition attribute='new_stage' operator='eq' value='100000006' />" + " <condition attribute='new_result' operator='eq' value='1' /> " + " </filter>" + " </entity>" + "</fetch>"; если пишу так - то объект не поддерживает свойство или метод reguestGrid.setParameter("fetchXml", fetchXml); - reguestGrid.refresh(); //refresh the sub grid using the new fetch xml если пишу так - то не удалось получить свойство "SetParameter" ссылки, значение которой не определено или является NULL. // reguestGrid.control.SetParameter("fetchXml", fetchXml); //set the fetch xml to the sub grid // reguestGrid.control.refresh(); //refresh the sub grid using the new fetch xml } |
|
23.09.2013, 17:43 | #2 |
Участник
|
поле UR12 они переименовали метод с SetParameter на setParameter или на оборот точно не помню.
Но нужно писать точно reguestGrid.control.setParameter А для поддержки нескольких ролапов нужно писать так: Код: if (typeof reguestGrid.control.setParameter != "undefined"){ reguestGrid.control.setParameter("fetchXml", fetchXml); } if (typeof reguestGrid.control.SetParameter != "undefined"){ reguestGrid.control.SetParameter("fetchXml", fetchXml); } |
|
23.09.2013, 21:22 | #3 |
Участник
|
Этот код не работает, ошибка осталась. Я сети я находил подобный код.
Переименовалась с setParameter на setParameter. Может еще кто-то подкинет идеи? Цитата:
Сообщение от spectr
поле UR12 они переименовали метод с сна setParameter или на оборот точно не помню.
Но нужно писать точно reguestGrid.control.setParameter А для поддержки нескольких ролапов нужно писать так: Код: if (typeof reguestGrid.control.setParameter != "undefined"){ reguestGrid.control.setParameter("fetchXml", fetchXml); } if (typeof reguestGrid.control.SetParameter != "undefined"){ reguestGrid.control.SetParameter("fetchXml", fetchXml); } |
|
23.09.2013, 22:21 | #4 |
Участник
|
У меня вот такой код работает на 12,13 ролапе
Код: var Interval = null; function OnLoadForm() { var fetchXml = 'YOUR FETCH'; ChangeFetch("YOUR SUBGRID NAME", fetchXml); } function ChangeFetch(sGridName, fetchXML) { Init(); function Init() { Interval = setInterval(function () { var grid = document.getElementById(sGridName); if (grid != null && typeof grid.control != 'undefined' && grid.control != null) { clearInterval(Interval); try { grid.control.SetParameter("fetchXml", fetchXML); grid.control.refresh(); } catch (e) { } } }, 300); } } Он первый на форме?
__________________
Читайте SDK!!! |
|
24.09.2013, 11:23 | #5 |
Участник
|
Цитата:
Этот код не работает, ошибка осталась. Я сети я находил подобный код.
Цитата:
var reguestGrid =Xrm.Page.ui.controls.get('new_dogovorGrid')._control;
Код: var reguestGrid = document.getElementById("new_dogovorGrid"); .... if (typeof reguestGrid.control.setParameter != "undefined"){ reguestGrid.control.setParameter("fetchXml", fetchXml); } if (typeof reguestGrid.control.SetParameter != "undefined"){ reguestGrid.control.SetParameter("fetchXml", fetchXml); } Вместо: Цитата:
if (reguestGrid == null) { //make sure the grid has loaded
setTimeout(function () { updateSubGrid(); }, 2000); //if the grid hasn’t loaded run this again when it has return; } Код: if (reguestGrid != null) { if (reguestGrid .readyState != "complete") { setTimeout(updateSubGrid, 1000); return; } } else { setTimeout(updateSubGrid, 1000); return; } Код: if (grid != null && typeof grid.control != 'undefined' && grid.control != null) Последний раз редактировалось spectr; 24.09.2013 в 11:30. |
|
24.09.2013, 18:35 | #6 |
Участник
|
Я код переписал, мне не ясно почему если пишу так, то переменная содержит значение reguestGrid {...} Object, (FormUIControl)
Цитата:
var reguestGrid =Xrm.Page.ui.controls.get('new_dogovorGrid')._control;
А переменная reguestGrid = undefined, когда пишу таким образом document.getElementById("new_dogovorGrid") = [Object, HTMLDivElement] Цитата:
var reguestGrid = document.getElementById("new_dogovorGrid")
Цитата:
function filterSubGrid() { var Casko = 100000001; var Osago = 100000000; var reguestGrid =Xrm.Page.ui.controls.get('new_dogovorGrid')._control; var reguestGrid1 = document.getElementById("new_dogovorGrid"); debugger; if (reguestGrid != null) { if (reguestGrid .readyState != "complete") { setTimeout(filterSubGrid, 1000); return; } } else { setTimeout(filterSubGrid, 1000); return; } var accountValue = Xrm.Page.getAttribute("new_account").getValue(); //field to filter by var ProductValue = Xrm.Page.getAttribute("new_insurance_product").getValue(); //field to filter by var accountId = "00000000-0000-0000-0000-000000000000"; //if filter field is null display nothing if (accountValue != null && (ProductValue == Casko || ProductValue == Osago)) { var accountId = accountValue[0].id; } //fetch xml code which will retrieve all the accounts related to the contact var fetchXml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>" + " <entity name='new_request'>" + " <attribute name='new_requestid' />" + " <attribute name='new_insurance_product' />" + " <attribute name='new_insuransepayment' />" + " <attribute name='new_total_limit' />" + " <attribute name='new_client_account' />" + " <order attribute='new_insurance_product' descending='false' />" + " <filter type='and'>" + " <condition attribute='new_client_account' operator='eq' uitype='account' value='" + accountId + "' />" + " <condition attribute='new_insurance_product' operator='eq' value='" + ProductValue + "'/>" + " <condition attribute='new_stage' operator='eq' value='100000006' />" + " <condition attribute='new_result' operator='eq' value='1' /> " + " </filter>" + " </entity>" + "</fetch>"; if (typeof reguestGrid.control.setParameter != "undefined"){ reguestGrid.control.setParameter("fetchXml", fetchXml); } if (typeof reguestGrid.control.SetParameter != "undefined"){ reguestGrid.control.SetParameter("fetchXml", fetchXml); } } |
|
24.09.2013, 18:41 | #7 |
Участник
|
Грид находится в отдельной вкладке, в разделе, и открыт постоянно, на форме он последний
Последний раз редактировалось Ion; 24.09.2013 в 18:55. |
|
25.09.2013, 00:59 | #8 |
Чайный пьяница
|
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
25.09.2013, 18:54 | #9 |
Участник
|
Сделал как в примере, СРМ выводит сообщение: Недопустимый XML формат.
Вот лог ошибки, что к чему не ясно мне пока. Цитата:
Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: System.Xml.XmlException: Microsoft Dynamics CRM has experienced an error. Reference number for administrators or support: #044F499ADetail:
<OrganizationServiceFault xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/xrm/2011/Contracts"> <ErrorCode>-2147220970</ErrorCode> <ErrorDetails xmlns:d2p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic"> <KeyValuePairOfstringanyType> <d2p1:key>CallStack</d2p1:key> <d2p1:value xmlns:d4p1="http://www.w3.org/2001/XMLSchema" i:type="d4p1:string"> в Microsoft.Crm.Application.WebServices.AppGridWebServiceHandler.ProcessRequestInternal(HttpContext context) в System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() в System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)</d2p1:value> </KeyValuePairOfstringanyType> </ErrorDetails> <Message>System.Xml.XmlException: Microsoft Dynamics CRM has experienced an error. Reference number for administrators or support: #044F499A</Message> <Timestamp>2013-09-25T14:46:35.5114095Z</Timestamp> <InnerFault> <ErrorCode>-2147220991</ErrorCode> <ErrorDetails xmlns:d3p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic"> <KeyValuePairOfstringanyType> <d3p1:key>CallStack</d3p1:key> <d3p1:value xmlns:d5p1="http://www.w3.org/2001/XMLSchema" i:type="d5p1:string"> в Microsoft.Crm.Query.EntityExpression.InternalDeserializeFromFetchXml(String xmlInfo, ParsingConditionValuesOption parsingOption) в Microsoft.Crm.Application.Platform.Grid.GridDataProviderQueryBuilder.SetupQueryBuilder(QueryBuilder queryBuilder, View view) в Microsoft.Crm.Application.Platform.Grid.GridDataProviderQueryBuilder.LoadQueryData() в Microsoft.Crm.Application.Platform.Grid.GridDataProviderQueryBuilder.LoadData() в Microsoft.Crm.Application.Platform.Grid.GridDataProviderBase.PrepareGridData() в Microsoft.Crm.Application.Platform.Grid.GridDataProviderBase.PrepareData() в Microsoft.Crm.Application.Controls.GridUIProvider.Render(HtmlTextWriter output) в Microsoft.Crm.Application.WebServices.AppGridWebServiceHandler.GetRefreshResponseHtml(IGridUIProvider uiProvider, StringBuilder sbTemp) в Microsoft.Crm.Application.WebServices.AppGridWebServiceHandler.Refresh(String gridXml, StringBuilder sbXml, StringBuilder sbHtml, Boolean returnJsonData) в Microsoft.Crm.Application.WebServices.AppGridWebServiceHandler.ProcessRequestInternal(HttpContext context)</d3p1:value> </KeyValuePairOfstringanyType> </ErrorDetails> <Message>Invalid XML.</Message> <Timestamp>2013-09-25T14:46:35.5114095Z</Timestamp> <InnerFault> <ErrorCode>-2147220970</ErrorCode> <ErrorDetails xmlns:d4p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic"> <KeyValuePairOfstringanyType> <d4p1:key>CallStack</d4p1:key> <d4p1:value xmlns:d6p1="http://www.w3.org/2001/XMLSchema" i:type="d6p1:string"> в System.Xml.XmlTextReaderImpl.Throw(String res, String[] args) в System.Xml.XmlTextReaderImpl.ThrowTagMismatch(NodeData startTag) в System.Xml.XmlTextReaderImpl.ParseEndElement() в System.Xml.XmlTextReaderImpl.ParseElementContent() в System.Xml.XmlLoader.LoadNode(Boolean skipOverWhitespace) в System.Xml.XmlLoader.LoadDocSequence(XmlDocument parentDoc) в System.Xml.XmlDocument.Load(XmlReader reader) в Microsoft.Crm.Query.XmlDomHelper.LoadXmlInfo(String xmlInfo) в Microsoft.Crm.Query.EntityExpression.InternalDeserializeFromFetchXml(String xmlInfo, ParsingConditionValuesOption parsingOption)</d4p1:value> </KeyValuePairOfstringanyType> </ErrorDetails> <Message>System.Xml.XmlException: Microsoft Dynamics CRM has experienced an error. Reference number for administrators or support: #5B878BDA</Message> <Timestamp>2013-09-25T14:46:35.5114095Z</Timestamp> <InnerFault i:nil="true" /> <TraceText i:nil="true" /> </InnerFault> <TraceText i:nil="true" /> </InnerFault> <TraceText i:nil="true" /> </OrganizationServiceFault> |
|
25.09.2013, 19:42 | #10 |
Чайный пьяница
|
Можете после
Код: var fetchXml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>" + " <entity name='new_request'>" + " <attribute name='new_requestid' />" + " <attribute name='new_insurance_product' />" + " <attribute name='new_insuransepayment' />" + " <attribute name='new_total_limit' />" + " <attribute name='new_client_account' />" + " <order attribute='new_insurance_product' descending='false' />" + " <filter type='and'>" + " <condition attribute='new_client_account' operator='eq' uitype='account' value='" + accountId + "' />" + " <condition attribute='new_insurance_product' operator='eq' value='" + ProductValue + "'/>" + " <condition attribute='new_stage' operator='eq' value='100000006' />" + " <condition attribute='new_result' operator='eq' value='1' /> " + " </filter>" + " </entity>" + "</fetch>"; В ProductValue - текстовое значение? Точно не лукап?
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
25.09.2013, 21:13 | #11 |
Участник
|
Цитата:
вставить alert, который покажет фильтр?
Цитата:
<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>
<entity name='new_request'> <attribute name='new_requestid' /> <attribute name='new_insuransepayment' /> <attribute name='new_total_limit' /> <attribute name='new_client_account' /> <attribute name='new_insurance_product' /> <order attribute='new_insurance_product' descending='false' /> <filter type='and'> <condition attribute='new_client_account' operator='eq' uitype='account' value='{BAF1A4C8-3C03-E311-8620-00155D001525}' /> <condition attribute='new_insurance_product' operator='eq' value='100000000'/> <condition attribute='new_stage' operator='eq' value='100000006' /> <condition attribute='new_result' operator='eq' value='1' /> </filter> </link-entity> </entity> </fetch> Вроде все корректно. Непонятно. Цитата:
В ProductValue - текстовое значение? Точно не лукап?
|
|
25.09.2013, 21:46 | #12 |
Участник
|
Разобрался, всем спасибо)
|
|
25.09.2013, 22:37 | #13 |
Чайный пьяница
|
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
26.09.2013, 00:04 | #14 |
Участник
|
|
|
26.09.2013, 00:06 | #15 |
Участник
|
|
|
|
|