Расширенный поиск в iFrame’е на форме
В CRM 4.0 часто приходилось запихивать всякую фигню в iFrame: связанные Представления, Расширенный поиск и т.д. В CRM 2011 ситуация со связанными представлениями значительно улучшилась, а вот Расширенному поиску не повезло. Поэтому будем все тем же не поддерживаемым способом пытаться запихнуть его в iFrame.
Что для этого нужно:
- Найдите в скуле SavedQueryId дефолтного Представления того объекта, который Вы хотите отобразить результатах работы Расширенного поиска:
SELECT Name, SavedQueryId, ReturnedTypeCode, FetchXml, LayoutXml FROM SavedQuery WHERE 1=1 and QueryType=1 and IsDefault=1 ORDER BY ReturnedTypeCode
- Создайте HTML Веб-ресурс с именем «new_SubGridFetchXml.htm» и таким кодом:
<HTML> <HEAD> <TITLE>Расширенный поиск</TITLE> <SCRIPT type=text/javascript src="ClientGlobalContext.js.aspx"></SCRIPT> <SCRIPT type=text/javascript> function submitForm() { var form = document.forms[0]; var context = GetGlobalContext(); form.action = context.getServerUrl() + '/AdvancedFind/fetchData.aspx'; form.LayoutXml.value = '<LAYOUTXML>'; form.FetchXml.value = '<FETCHXML>'; form.submit(); } </SCRIPT> <META charset=utf-8> </HEAD> <BODY onload=submitForm()> <FORM method=post action=""> <INPUT name=FetchXml type=hidden> <INPUT name=LayoutXml type=hidden> <INPUT name=EntityName value=contact type=hidden> <INPUT name=DefaultAdvFindViewId value=<SavedQueryID> type=hidden> <INPUT name=ViewId value=<SavedQueryID> type=hidden> <INPUT name=ViewType value=4230 type=hidden> <INPUT name=SortCol value=<SortColumnLogicalName>:1; type=hidden> <INPUT name=UIProvider type=hidden> <INPUT name=DataProvider type=hidden> </FORM> </BODY> </HTML>
В этот код Вам нужно внести следующие изменения:
- Вместо <SavedQueryID> подставьте GUID дефолтного представления, найденный на предыдущем шаге;
- В <SortColumnLogicalName> задайте имя поля, по которому должна производиться сортировка;
- В <LayoutXml> и <FetchXml> поместите значения аналогичных полей, возвращенных SQL-запросом в первом пункте (но можете их изменить на свое усмотрение). При этом из LayoutXml удалите все поля, кроме основного атрибута.
В итоге страница должна выглядеть примерно так:
<HTML> <HEAD> <TITLE>Расширенный поиск</TITLE> <SCRIPT type=text/javascript src="ClientGlobalContext.js.aspx"></SCRIPT> <SCRIPT type=text/javascript> function submitForm() { var form = document.forms[0]; var context = GetGlobalContext(); form.action = context.getServerUrl() + '/AdvancedFind/fetchData.aspx'; form.LayoutXml.value = '<grid name="resultset" object="2" jump="fullname" select="1" icon="1" preview="1"><row name="result" id="contactid"></row></grid>'; form.FetchXml.value = '<fetch version="1.0" output-format="xml-platform" mapping="logical"><entity name="contact"><attribute name="fullname" /><attribute name="telephone1" /><attribute name="contactid" /><order attribute="fullname" descending="false" /></entity></fetch>'; form.submit(); } </SCRIPT> <META charset=utf-8 /> </HEAD> <BODY onload="submitForm()"> <FORM method=post action=""> <INPUT name=FetchXml type=hidden> <INPUT name=LayoutXml type=hidden> <INPUT name=EntityName value=contact type=hidden> <INPUT name=DefaultAdvFindViewId value="00000000-0000-0000-00AA-000000666400" type=hidden> <INPUT name=ViewId value="00000000-0000-0000-00AA-000000666400" type=hidden> <INPUT name=ViewType value=4230 type=hidden> <INPUT name=SortCol value=fullname:1; type=hidden> <INPUT name=UIProvider type=hidden> <INPUT name=DataProvider type=hidden> </FORM> </BODY> </HTML>
- Вынесите Веб-ресурс на форму и опубликуйте изменения.
Здраствуйте
А почему в представлении поля отображаются по два раза?
И как это убрать?
Спасибо
Более точно
К layout добавляется layout системного представления. 🙂
Здрасьте 🙂
Обновил код. Нужно из form.LayoutXml.value удалить все поля кроме основного атрибута.
Да, но тогда мы получим layout представления.(что плохо)
хотелось бы иметь возможность изменения и layout, а не только fetch.
Если достаточно поменять фетч, есть решения проще.
http://crmgreenbible.blogspot.com/2011/07/crm-2011-change-subgrid-fetchxml.html
но оно не позволяет менять layout
Ну можно сделать так…
Создать какое-либо предстиавление (или использовать существующее) и деактивировать его.
В код подставить его GUID. Для этого Представления либо оставьте одно поле и уже коде «дополните» его новыми полями, либо сразу в этом Представлении захардкодьте нужные поля.
Спасибо. интересный вариант.
Вопрос такой а как в iframe теперь можно управлять полученным расширенным поиском?
например на форме есть несколько полей (характеристики недвижимости) и хотелось бы чтобы при их заполнении срабатывал расширенный поиск по этим полям по всем объектам недвижимости и выдавал подходящие варианты
Можно динамически формировать HTML и подставлять его в iFrame.