<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Microsoft Dynamics CRM &#187; lookup</title>
	<atom:link href="http://ms-dynamics-crm.com.ua/tag/lookup/feed/" rel="self" type="application/rss+xml" />
	<link>http://ms-dynamics-crm.com.ua</link>
	<description>Все о Microsoft Dynamics CRM</description>
	<lastBuildDate>Wed, 25 Jan 2012 21:20:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Отображение только активных продуктов в лукапе для расширенного поиска в MS CRM 4.0</title>
		<link>http://ms-dynamics-crm.com.ua/2011/01/13/only-active-product-in-lookup-ms-crm-4/</link>
		<comments>http://ms-dynamics-crm.com.ua/2011/01/13/only-active-product-in-lookup-ms-crm-4/#comments</comments>
		<pubDate>Wed, 12 Jan 2011 22:44:07 +0000</pubDate>
		<dc:creator>Костя Афендиков</dc:creator>
				<category><![CDATA[ms crm 4.0]]></category>
		<category><![CDATA[lookup]]></category>
		<category><![CDATA[plug-in]]></category>

		<guid isPermaLink="false">http://ms-dynamics-crm.com.ua/?p=1280</guid>
		<description><![CDATA[Задача очень простая &#8211; отображать только активные записи (в этом примере &#8211; продукты) в лукапе при работе с расширенным поиском. Сначала я попробовал изменить вручную экспортированный файл кастомизации сущности product, добавив условие фильтра &#60;filter type=&#34;and&#34;&#62; &#60;condition attribute=&#34;statecode&#34; operator=&#34;eq&#34; value=&#34;0&#34; /&#62; &#60;/filter&#62; и импортировав его обратно не получил требуемого результата. После чего я решил написать плагин, [...]]]></description>
			<content:encoded><![CDATA[<p>Задача очень простая &#8211; отображать только активные записи (в этом примере &#8211; продукты) в лукапе при работе с расширенным поиском.<br />
Сначала я попробовал изменить вручную экспортированный файл кастомизации сущности product, добавив условие фильтра</p>
<pre class="brush: xml; title: ;">
&lt;filter type=&quot;and&quot;&gt;
                    &lt;condition attribute=&quot;statecode&quot; operator=&quot;eq&quot; value=&quot;0&quot; /&gt;
                  &lt;/filter&gt;
</pre>
<p>и импортировав его обратно не получил требуемого результата. После чего я решил написать плагин, который бы перехватывал сгенерированный fetch xml и заменял его на нужный мне. Вот, что получилось:<br />
<span id="more-1280"></span><br />
<strong>Код плагина:</strong></p>
<pre class="brush: csharp; title: ;">
public void Execute(IPluginExecutionContext context)
		{
			if (context.InputParameters.Contains(&quot;FetchXml&quot;))
			{
				string FetchXml = (String)context.InputParameters[&quot;FetchXml&quot;];
				//проверяю, что работаю с product
                                if (FetchXml.Contains(&quot;&lt;entity name=\&quot;product\&quot;&gt;&quot;))
				{
//заменяю на нужный мне fetch xml
                                 context.InputParameters[&quot;FetchXml&quot;] = &quot;&lt;fetch version=\&quot;1.0\&quot; page=\&quot;1\&quot; count=\&quot;100\&quot; output-format=\&quot;xml-platform\&quot; mapping=\&quot;logical\&quot;&gt;&lt;entity name=\&quot;product\&quot;&gt;&lt;attribute name=\&quot;productid\&quot; /&gt;&lt;attribute name=\&quot;name\&quot; /&gt;&lt;order attribute=\&quot;name\&quot; /&gt;&lt;filter type=\&quot;and\&quot;&gt;&lt;condition attribute=\&quot;statecode\&quot; operator=\&quot;eq\&quot; value=\&quot;0\&quot; /&gt;&lt;condition attribute=\&quot;name\&quot; operator=\&quot;like\&quot; value=\&quot;%\&quot; /&gt;&lt;/filter&gt;&lt;/entity&gt;&lt;/fetch&gt;&quot;;

				}
			}
</pre>
<p>Регистрирую плагин с таким шагом:</p>
<div id="attachment_1283" class="wp-caption alignnone" style="width: 310px"><a href="http://ms-dynamics-crm.com.ua/wp-content/uploads/2011/01/plugin-step.jpg"><img class="size-medium wp-image-1283" title="plugin step only active products lookup" src="http://ms-dynamics-crm.com.ua/wp-content/uploads/2011/01/plugin-step-300x161.jpg" alt="plugin step only active products lookup" width="300" height="161" /></a><p class="wp-caption-text">plugin step only active products lookup</p></div>
]]></content:encoded>
			<wfw:commentRss>http://ms-dynamics-crm.com.ua/2011/01/13/only-active-product-in-lookup-ms-crm-4/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Фильтрация записей в lookup. FetchXML на основе расширенного поиска</title>
		<link>http://ms-dynamics-crm.com.ua/2009/07/23/filtered-records-in-lookup-fetchxml/</link>
		<comments>http://ms-dynamics-crm.com.ua/2009/07/23/filtered-records-in-lookup-fetchxml/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 06:18:43 +0000</pubDate>
		<dc:creator>Костя Афендиков</dc:creator>
				<category><![CDATA[ms crm 4.0]]></category>
		<category><![CDATA[javascript in ms crm]]></category>
		<category><![CDATA[lookup]]></category>
		<category><![CDATA[unsupported]]></category>

		<guid isPermaLink="false">http://ms-dynamics-crm.com.ua/?p=859</guid>
		<description><![CDATA[Очень часто возникает необходимость сделать так, чтобы лукап представлял нам уже отфильтрованные данные. Например такие, которые мы можем составить с помощью встроенного инструмента в MS CRM &#8211; &#171;Расширенного поиска&#187;. Один из методов фильтрации я уже описывал здесь &#171;Фильтрация в Microsoft Dynamics CRM 4.0&#171;. На основе такого метода не получится выполнить сложную фильтрацию. В данном посте [...]]]></description>
			<content:encoded><![CDATA[<p>Очень часто возникает необходимость сделать так, чтобы лукап представлял нам уже отфильтрованные данные. Например такие, которые мы можем составить с помощью встроенного инструмента в MS CRM &#8211; &laquo;Расширенного поиска&raquo;. Один из методов фильтрации я уже описывал здесь &laquo;<a title="Фильтрация записей в ms crm 4" href="http://ms-dynamics-crm.com.ua/2009/02/16/filter-in-microsoft-dynamics-crm-40/">Фильтрация в Microsoft Dynamics CRM 4.0</a>&laquo;. На основе такого метода не получится выполнить сложную фильтрацию.</p>
<p>В данном посте я расскажу вам как осуществить такую фильтрации для лукапа с помощью <strong>FetchXml</strong>, сформировав fetch-запрос с помощью &laquo;Расширенного поиска&raquo;.</p>
<p><span id="more-859"></span></p>
<h3>Меняем файл lookupsingle.aspx (unsupported) <strong><br />
</strong></h3>
<p>Первое, что необходимо сделать это изменить файл <strong>lookupsingle.aspx</strong>. Обычно он находится здесь <strong>CRMWeb\_controls\lookup\lookupsingle.aspx</strong> и в самом начале файла вставляем этот код:</p>
<pre>&lt;script runat="server"&gt;
protected override void OnLoad( EventArgs e )
{
      base.OnLoad(e);
      crmGrid.PreRender += new EventHandler( crmgrid_PreRender );
}

void crmgrid_PreRender( object sender , EventArgs e )
{
    // As we don’t want to break any other lookups, ensure that we use workaround only if
    // search parameter set to fetch xml.
    if (crmGrid.Parameters["search"] != null &amp;&amp; crmGrid.Parameters["search"].StartsWith("&lt;fetch"))
   {
        crmGrid.Parameters.Add("fetchxml", crmGrid.Parameters["search"]);
       // searchvalue needs to be removed as it’s typically set to a wildcard ‘*’
        crmGrid.Parameters.Remove("searchvalue");
        // Icing on a cake - ensure that user cannot create new contact outside of the account
        // and then select it.
        this._showNewButton = false;
    }
}
&lt;/script&gt;</pre>
<p><em>Примечание:</em> это неподдерживая кастомизация, не забудьте сделать копию оригинального файла lookupsingle.aspx</p>
<h3>Используем расширенный поиск для составления нужного нам фильтра</h3>
<p>Составляем необходимый фильтр с помощью &laquo;Расширенного поиска&raquo;, фильтр может быть сколь угодно сложным. Я же рассмотрю пока что простой пример.</p>
<p><em>Например: </em>Найти все контакты конкретной организации</p>
<p><img class="alignnone size-full wp-image-935" title="Фильтр расширенного поиска" src="http://ms-dynamics-crm.com.ua/wp-content/uploads/2009/07/fetchxml1.jpg" alt="Фильтр расширенного поиска" width="500" height="145" /></p>
<p>Фильтр готов! Жмем <strong>Найти. </strong>Если результат вас устраивает жмем <strong>F11 </strong>и в строку адреса вставляем следующий код:</p>
<p><strong>javascript:alert(resultRender.FetchXml.value);</strong></p>
<p>или этот</p>
<p><strong>javascript:alert(document.all.FetchXml.value);</strong></p>
<p>Получаем:</p>
<p><strong><img class="alignnone size-full wp-image-936" title="F11+popup" src="http://ms-dynamics-crm.com.ua/wp-content/uploads/2009/07/fetchxml2.jpg" alt="F11+popup" width="500" height="325" /><br />
</strong></p>
<p>Прямо на этом окне (popup) жмете <strong>ctrl+c</strong> и весь код будет скопирован в буфер, после чего вставьте его в текстовый редактор, блокнот например.</p>
<p><em>Такой результат:</em></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Сообщение с веб-страницы</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>&lt;fetch version=&raquo;1.0&#8243; output-format=&raquo;xml-platform&raquo; mapping=&raquo;logical&raquo; distinct=&raquo;false&raquo;&gt;&lt;entity name=&raquo;contact&raquo;&gt;&lt;attribute name=&raquo;do_accountbusinessunit&raquo;/&gt;&lt;attribute name=&raquo;parentcustomerid&raquo;/&gt;&lt;attribute name=&raquo;department&raquo;/&gt;&lt;attribute name=&raquo;ownerid&raquo;/&gt;&lt;attribute name=&raquo;jobtitle&raquo;/&gt;&lt;attribute name=&raquo;do_city&raquo;/&gt;&lt;attribute name=&raquo;fullname&raquo;/&gt;&lt;attribute name=&raquo;emailaddress1&#8243;/&gt;&lt;attribute name=&raquo;contactid&raquo;/&gt;&lt;order attribute=&raquo;fullname&raquo; descending=&raquo;false&raquo;/&gt;&lt;filter type=&raquo;and&raquo;&gt;&lt;condition attribute=&raquo;parentcustomerid&raquo; operator=&raquo;eq&raquo; uiname=&raquo;11&#8243; uitype=&raquo;account&raquo; value=&raquo;{CF5D35B3-C91E-DE11-B4A6-001517817114}&raquo;/&gt;&lt;/filter&gt;&lt;/entity&gt;&lt;/fetch&gt;</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>ОК</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Здесь присутствует очень много лишнего, оставляем только главное для нас. А именно: условия фильтрации: &lt;filter type=&raquo;and&raquo;&gt;&lt;condition attribute=&raquo;parentcustomerid&raquo; operator=&raquo;eq&raquo; uiname=&raquo;11&#8243; uitype=&raquo;account&raquo; value=&raquo;<strong>{CF5D35B3-C91E-DE11-B4A6-001517817114}</strong>&laquo;/&gt;, в котором наш гуид организации заменим на <strong>crmForm.all.do_accountid.DataValue[0].id  &#8211; </strong>это гуид, полученный из лукапа организации.</p>
<h3>Вставляем следующий код с переработанным нашим фильтром.</h3>
<pre>var field1 = crmForm.all.do_contactid;
 field1.Disabled = false;
    // Ensure that search box is not visible in a lookup dialog
    field1.lookupbrowse = 1;

    field1.AddParam("search",
"&lt;fetch mapping='logical'&gt;&lt;entity name='contact'&gt;"
+"&lt;filter type='and'&gt;&lt;condition attribute='parentcustomerid' operator='eq' uitype='account'  value='"
+crmForm.all.do_accountid.DataValue[0].id
+"'/&gt;&lt;/filter&gt;&lt;/entity&gt;&lt;/fetch&gt;");</pre>
<p>Минус данного метода:</p>
<ul>
<li>приходится править оригинальный системный файл</li>
<li>исчезает окно поиска по отфильтрованным записям, поэтому если записей возвращается очень много будет неудобно искать нужную</li>
</ul>
<p>Плюсы:</p>
<ul>
<li>Фильтрация очень проста в реализации. Основная часть &laquo;ложится на плечи&raquo; Расширенного поиска, который, по сути, формирует нужный нам Fetch-запрос.</li>
<li>Метод покрывает бОльшую часть задач по фильтрованным лукапам</li>
</ul>
<p><em>Использовались эти материалы: </em></p>
<p>http://crm.georged.id.au/post/2008/02/16/Filtering-lookup-data-in-CRM-4.aspx</p>
<p>http://ronaldlemmen.blogspot.com/2009/02/using-advanced-find-for-fetchxml.html</p>
]]></content:encoded>
			<wfw:commentRss>http://ms-dynamics-crm.com.ua/2009/07/23/filtered-records-in-lookup-fetchxml/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Скрываем  кнопки в Lookup&#8217;е Microsoft Dynamics CRM</title>
		<link>http://ms-dynamics-crm.com.ua/2009/03/24/ms-crm-hide-lookup-buttons/</link>
		<comments>http://ms-dynamics-crm.com.ua/2009/03/24/ms-crm-hide-lookup-buttons/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 07:19:15 +0000</pubDate>
		<dc:creator>Катерина Головчан</dc:creator>
				<category><![CDATA[ms crm 4.0]]></category>
		<category><![CDATA[javascript in ms crm]]></category>
		<category><![CDATA[lookup]]></category>
		<category><![CDATA[unsupported]]></category>

		<guid isPermaLink="false">http://ms-dynamics-crm.com.ua/?p=651</guid>
		<description><![CDATA[Стандартный single lookup выглядит как на левом рисунке. Наша задача получить lookup как на правом рисунке Нельзя скрыть кнопки &#171;Properties&#187; и &#171;New&#187; стандартными методами, но можно их сделать недоступными, это настраивается с помощью прав и ролей.  Но таким способом Вы не уберете кнопки,  а всего лишь сделаете их недоступными, скрыть кнопки можно с помощью скрипта, [...]]]></description>
			<content:encoded><![CDATA[<p>Стандартный single lookup выглядит как на левом рисунке. Наша задача получить lookup как на правом рисунке</p>
<div id="attachment_655" class="wp-caption aligncenter" style="width: 704px"><img class="size-full wp-image-655" title="ms-crm-lookup-buttons" src="http://ms-dynamics-crm.com.ua/wp-content/uploads/2009/03/ms-crm-lookup-buttons.png" alt="ms-crm-lookup-buttons" width="694" height="273" /><p class="wp-caption-text">ДО и ПОСЛЕ</p></div>
<p style="text-align: center;"><span id="more-651"></span></p>
<p>Нельзя скрыть кнопки &laquo;Properties&raquo; и &laquo;New&raquo; стандартными методами, но можно их сделать недоступными, это настраивается с помощью прав и ролей.  Но таким способом Вы не уберете кнопки,  а всего лишь сделаете их недоступными, скрыть кнопки можно с помощью скрипта, но это <strong>ансаппорт!</strong></p>
<p>Вставляем следующий код в событие OnLoad сущности на которой расположен нужный lookup:</p>
<blockquote><p>function OnCrmPageLoad()<br />
{<br />
var vLookup = crmForm.all.&lt;LookupField&gt;;<br />
vLookup .AddParam(&laquo;ShowNewButton&raquo;,&raquo;0&#8243;);<br />
vLookup .AddParam(&laquo;ShowPropButton&raquo;,&raquo;0&#8243;);<br />
vLookup .showproperty = false;<br />
}</p>
<p>OnCrmPageLoad();</p></blockquote>
<p>&lt;LookupField&gt;- название поля с lookup&#8217;ом.</p>
]]></content:encoded>
			<wfw:commentRss>http://ms-dynamics-crm.com.ua/2009/03/24/ms-crm-hide-lookup-buttons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Фильтрация в Microsoft Dynamics CRM 4.0</title>
		<link>http://ms-dynamics-crm.com.ua/2009/02/16/filter-in-microsoft-dynamics-crm-40/</link>
		<comments>http://ms-dynamics-crm.com.ua/2009/02/16/filter-in-microsoft-dynamics-crm-40/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 18:11:03 +0000</pubDate>
		<dc:creator>Костя Афендиков</dc:creator>
				<category><![CDATA[ms crm 4.0]]></category>
		<category><![CDATA[lookup]]></category>

		<guid isPermaLink="false">http://ms-dynamics-crm.com.ua/?p=246</guid>
		<description><![CDATA[Здесь приведен метод фильтрации с помощью неподдерживаемой кастомизации. Существует еще одни способ для создания фильтрации в MS CRM 4.0, его я здесь и опишу. Рассмотрим пример фильтрации городов в зависимости от выбранной области. Т.е. у нас есть сущность Область (new_region), которая связана с сущность Город (new_city) отношением один-ко-многим, и эти обе сущности вынесены в качестве [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ms-crm.com.ua/?p=216">Здесь</a> приведен метод фильтрации с помощью<a title="неподдерживаемая кастомизация, что это такое" href="http://ms-dynamics-crm.com.ua/2009/02/08/unsupported-customization-for-ms-dynamics-crm/"> неподдерживаемой кастомизации</a>.<br />
Существует еще одни способ для создания фильтрации в MS CRM 4.0, его я здесь и опишу.</p>
<p>Рассмотрим пример фильтрации городов в зависимости от выбранной области. Т.е. у нас есть сущность <strong>Область </strong>(new_region), которая связана с сущность <strong>Город </strong>(new_city) отношением один-ко-многим, и эти обе сущности вынесены в качестве атрибутов на форме <strong>Интерес </strong>(Lead) (Контакт, Организация …)</p>
<p><span id="more-246"></span>Приступим:</p>
<h3>Устанавливаем поле &laquo;Область&raquo; для поиска. Для этого необходимо:</h3>
<ol>
<li>Выбираем сущность &laquo;Город&raquo; (new_city) для изменения</li>
<li>&laquo;Формы и представления&raquo; -&gt; &laquo;Представление поиска&raquo; -&gt; &laquo;Добавить столбцы поиска&raquo;</li>
<li>&laquo;Добавить столбцы представления&raquo; &#8211; добавляю поле &laquo;Область&raquo;</li>
</ol>
<h3>Открываем форму Интереса для редактирования и вставляем следующий код:</h3>
<blockquote><p><strong>Событие OnLoad()</strong></p>
<p>document.FilterLookup = function(source, target)<br />
{<br />
if (IsNull(source) || IsNull(target)) { return; }<br />
var name = IsNull(source.DataValue) ? &raquo; : source.DataValue[0].name;<br />
target.additionalparams = &#8216;search=&#8217;+<strong> escape(name);</strong><br />
}</p>
<p>if(crmForm.all.new_region.DataValue != null)<br />
{<br />
document.FilterLookup(crmForm.all.new_region, crmForm.all.new_city);<br />
}</p></blockquote>
<p><em>Примечание:</em> Обязательно ставьте<strong> escape(name)</strong>, чтобы корректно отображать русские символы.</p>
<h3>Изменяем код для поля &laquo;Область&raquo;(new_region)</h3>
<blockquote><p><strong>на событие OnChange() вешаем следующий код</strong></p>
<p>document.FilterLookup(crmForm.all.new_region, crmForm.all.new_city);</p></blockquote>
<p>Таким образом получим следующее:</p>
<div id="attachment_248" class="wp-caption alignnone" style="width: 310px"><img class="size-medium wp-image-248" title="Фильтрация в Microsoft Dynamics CRM 4.0" src="http://ms-dynamics-crm.com.ua/wp-content/uploads/2009/02/d184d0b8d0bbd18cd182d180d0b0d186d0b8d18f-d0b7d0b0d0bfd0b8d181d0b5d0b9-d0b2-ms-crm-4-300x182.jpg" alt="Фильтрация в Microsoft Dynamics CRM 4.0" width="300" height="182" /><p class="wp-caption-text">Фильтрация в Microsoft Dynamics CRM 4.0</p></div>
<p>Как видите мы просто вставляем название области в поле для поиска лукапа, вот такой небольшой хак получился <img src='http://ms-dynamics-crm.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://ms-dynamics-crm.com.ua/2009/02/16/filter-in-microsoft-dynamics-crm-40/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Вставить значение в лукап по умолчанию</title>
		<link>http://ms-dynamics-crm.com.ua/2009/02/08/defaultvalue-lookup/</link>
		<comments>http://ms-dynamics-crm.com.ua/2009/02/08/defaultvalue-lookup/#comments</comments>
		<pubDate>Sun, 08 Feb 2009 20:45:24 +0000</pubDate>
		<dc:creator>Катерина Головчан</dc:creator>
				<category><![CDATA[ms crm 3.0]]></category>
		<category><![CDATA[ms crm 4.0]]></category>
		<category><![CDATA[javascript in ms crm]]></category>
		<category><![CDATA[lookup]]></category>

		<guid isPermaLink="false">http://ms-dynamics-crm.com.ua/?p=67</guid>
		<description><![CDATA[Если возникает необходимость подгружать по дефолту определенное значение в лукап на форме, то это можно легко сделать. Можно порыться в SDK и найту вот эту замечательную функцию: LookupControlItem(GUID of entity object,type code of entity,the name of the lookup value), где GUID of entity object &#8211; GUID объекта, который мы хотим вставить по дефолту type code [...]]]></description>
			<content:encoded><![CDATA[<p>Если возникает необходимость подгружать по дефолту определенное значение в лукап на форме, то это можно легко сделать.</p>
<p>Можно порыться в SDK и найту вот эту замечательную функцию:</p>
<p><strong>LookupControlItem(GUID of entity object,type code of entity,the name of the lookup value), </strong>где</p>
<p><strong>GUID of entity object &#8211; </strong>GUID объекта, который мы хотим вставить по дефолту</p>
<p><strong>type code of entity &#8211; </strong>ObjectTypeCode сущности, к которой идет лукап</p>
<p><strong>the name of the lookup value &#8211; </strong>Имя, которое будет отображаться в лукапе</p>
<p><span id="more-67"></span></p>
<p>Теперь как это применить. Например, надо в лукап <strong>Контракт </strong>сущности <strong>Обращение </strong>вставить <strong>Контракт </strong>с GUID=&raquo;{F4010BF7-90BF-DD11-B5F7-000C293769AD}&raquo;</p>
<p>Именем=&raquo;Contract for Lookup&raquo;</p>
<p>ObjectTypeCode сущности Контракт =&raquo;1010&#8243;</p>
<p>Итак, вставляем этот код в событие <strong>OnLoad</strong> сущности Обращение:</p>
<blockquote><p>var lookupItem = new Array();</p>
<p>lookupItem[0] = new LookupControlItem (&laquo;{F4010BF7-90BF-DD11-B5F7-000C293769AD}&raquo;, 1010, &laquo;Contract for Lookup&raquo;);</p>
<p>crmForm.all.contractid.DataValue = lookupItem;</p></blockquote>
<div id="attachment_96" class="wp-caption aligncenter" style="width: 449px"><img class="size-full wp-image-96" title="onload_defaultlookup" src="http://ms-dynamics-crm.com.ua/wp-content/uploads/2009/02/onload_defaultlookup.jpg" alt="OnLoad сущности Incident" width="439" height="330" /><p class="wp-caption-text">OnLoad сущности Incident</p></div>
<p>Теперь откроем любое Обращение и вуа-ля <img src='http://ms-dynamics-crm.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: center;">
<div id="attachment_94" class="wp-caption aligncenter" style="width: 627px"><img class="size-full wp-image-94" title="case1" src="http://ms-dynamics-crm.com.ua/wp-content/uploads/2009/02/case1.jpg" alt="созданное ранее обращение" width="617" height="373" /><p class="wp-caption-text">созданное ранее обращение</p></div>
<div id="attachment_95" class="wp-caption aligncenter" style="width: 609px"><img class="size-full wp-image-95" title="newcase1" src="http://ms-dynamics-crm.com.ua/wp-content/uploads/2009/02/newcase1.jpg" alt="Новое обращение,еще не сохраненное" width="599" height="429" /><p class="wp-caption-text">Новое обращение,еще не сохраненное</p></div>
]]></content:encoded>
			<wfw:commentRss>http://ms-dynamics-crm.com.ua/2009/02/08/defaultvalue-lookup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Отношение многие-ко-многим в MS CRM 3.0. Создание лукапа к любой сущности.</title>
		<link>http://ms-dynamics-crm.com.ua/2009/02/08/lookup-to-any-entity-many-to-many-relationships-in-ms-crm-30/</link>
		<comments>http://ms-dynamics-crm.com.ua/2009/02/08/lookup-to-any-entity-many-to-many-relationships-in-ms-crm-30/#comments</comments>
		<pubDate>Sun, 08 Feb 2009 19:22:07 +0000</pubDate>
		<dc:creator>Костя Афендиков</dc:creator>
				<category><![CDATA[ms crm 3.0]]></category>
		<category><![CDATA[javascript in ms crm]]></category>
		<category><![CDATA[lookup]]></category>

		<guid isPermaLink="false">http://ms-dynamics-crm.com.ua/?p=18</guid>
		<description><![CDATA[К сожалению, в MS CRM 3.0 нет возможности связывать сущности отношением многие-ко-многим. И это не очень удобно. Например, когда на форме Вы хотите сделать возможность выбора нескольких контактов, то стандартными инструментами реализовать это никак не получится. Чтобы решить эту проблему обычно предлагают создавать новую сущность и копировать в нее все необходимые записи для выбора. Таким [...]]]></description>
			<content:encoded><![CDATA[<p>К сожалению, в MS CRM 3.0 нет возможности связывать сущности отношением многие-ко-многим. И это не очень удобно. Например, когда на форме Вы хотите сделать возможность выбора нескольких контактов, то стандартными инструментами реализовать это никак не получится.</p>
<p>Чтобы решить эту проблему обычно предлагают создавать новую сущность и копировать в нее все необходимые записи для выбора. Таким образом, чтобы вывести на форме 2 лукапа с возможностью выбора контакта в каждом из них, необходимо создать новую сущность <strong>new_contact</strong>, связать ее со стандартной <strong>contact </strong>и создавать новые записи, привязывая их к записям из стандартной.</p>
<p>Но есть и другой способ – использовать метод, предложенным неким <a href="http://www.eggheadcafe.com/software/aspnet/31488315/ms-crm-30--custom-filte.aspx" target="_blank">Death Angel</a>, за что ему огромное спасибо!<br />
Вот, собственно его функция:<span id="more-18"></span></p>
<p><strong>function Text_To_LookUp(sFieldName, sLookuptype, sEntity, sOnChangeCode, oGUID, sDisplayText, sFilters)</strong><br />
{</p>
<p>var sIcons = &laquo;/_imgs/&raquo;;<br />
var sLookupTypeNames = &laquo;&raquo;;<br />
var sLookupClass = &laquo;&raquo;;</p>
<p>if (sEntity.substr(0,4) == &laquo;new_&raquo;)<br />
{<br />
sIcons += &laquo;icon.aspx?objectTypeCode=&raquo; + sLookuptype + &laquo;&amp;amp;iconType=GridIcon&amp;amp;inProduction=1&amp;amp;cache=1&#8243;;<br />
sLookupTypeNames = &raquo; lookuptypenames=&#8217;&raquo; + sEntity + &laquo;:&raquo; + sLookuptype + &laquo;&#8216; &laquo;;<br />
}<br />
else<br />
{<br />
sLookupClass = &raquo; lookupclass=&#8217;&raquo; + sEntity + &laquo;&#8216; &laquo;;<br />
sIcons += &laquo;ico_16_&raquo; + sLookuptype + &laquo;.gif&raquo;;<br />
}</p>
<p>if (sOnChangeCode != null &amp;&amp; sOnChangeCode != &laquo;&raquo;)<br />
sOnChangeCode = &laquo;onChange=\&raquo; return &raquo; + sOnChangeCode + &laquo;\&raquo;";</p>
<p>var New_HTML = &laquo;&raquo; ;<br />
var Div_HTML = &laquo;&raquo; ;<br />
//alert(oGUID);</p>
<p>Div_HTML = &laquo;&lt;DIV class=lu&gt;&raquo;;<br />
//if (oGUID.length !== 0)<br />
if (oGUID != 0)<br />
{<br />
Div_HTML += &laquo;&lt;SPAN class=lui onclick=\&#8217;openlui();\&#8217; otype=\&#8217;&raquo; + sLookuptype + &laquo;\&#8217; oid=\&#8217;&raquo; + oGUID + &laquo;\&#8217; otypename=\&#8217;&raquo; + &laquo;contact&raquo; + &laquo;\&#8217;&gt;&raquo;;<br />
Div_HTML += &laquo;&lt;IMG class=lui src=\&#8217;&raquo; + sIcons + &laquo;\&#8217;&gt;&raquo;;<br />
Div_HTML += sDisplayText;<br />
Div_HTML += &laquo;&lt;/SPAN&gt;&raquo;;<br />
}<br />
else<br />
{<br />
Div_HTML += &laquo;&amp;nbsp;&raquo;;<br />
}<br />
Div_HTML += &laquo;&lt;/DIV&gt;&raquo;;</p>
<p>New_HTML += &laquo;&lt;table class=&#8217;lu&#8217; cellpadding=&#8217;0&#8242; cellspacing=&#8217;0&#8242; width=&#8217;100%&#8217; style=&#8217;table-layout:fixed;&#8217;&gt;&raquo;;<br />
New_HTML += &laquo;&lt;tr&gt;&raquo;;<br />
New_HTML += &laquo;&lt;td&gt;&raquo;;<br />
New_HTML += Div_HTML;<br />
New_HTML += &laquo;&lt;/td&gt;&raquo;;<br />
New_HTML += &laquo;&lt;td width=&#8217;25&#8242; style=&#8217;text-align: right;&#8217;&gt;&raquo;;<br />
New_HTML += &laquo;&lt;img src=&#8217;/_imgs/btn_off_lookup.gif&#8217; id=&#8217;&raquo; + sFieldName + &laquo;&#8216; class=&#8217;lu&#8217; tabindex=&#8217;1000&#8242; lookuptypes=&#8217;&raquo; + sLookuptype + &laquo;&#8216; &raquo; + sLookupTypeNames + &raquo; lookuptypeIcons=&#8217;&raquo; + sIcons + &laquo;&#8216; &raquo; + sLookupClass + &raquo; lookupbrowse=&#8217;0&#8242; lookupstyle=&#8217;single&#8217; defaulttype=&#8217;0&#8242; req=&#8217;0&#8242; &raquo; + sOnChangeCode + &laquo;&gt;&raquo;;<br />
New_HTML += &laquo;&lt;/td&gt;&raquo;;<br />
New_HTML += &laquo;&lt;/tr&gt;&raquo;;<br />
New_HTML += &laquo;&lt;/table&gt;&raquo;;</p>
<p>//alert(New_HTML);<br />
var field = crmForm.elements[sFieldName];</p>
<p>field.insertAdjacentHTML(&laquo;afterEnd&raquo;,New_HTML)<br />
field.parentNode.removeChild(field);<br />
field = crmForm.elements[sFieldName];<br />
field.value = oGUID;</p>
<p>//Add filters to lookup box<br />
if (sFilters !=null &amp;&amp; sFilters != &laquo;&raquo;)<br />
{<br />
field.lookupbrowse = 1;<br />
field.additionalparams = &#8216;fetchXml=&#8217; + sFilters;<br />
}<br />
}</p>
<p><strong>Параметры:</strong></p>
<ol>
<li>sFieldName : имя текстового поля, в котором будет эмулироваться lookup</li>
<li>sLookuptype : тип лукапа ( код сущности)</li>
<li>sEntity : имя сущности</li>
<li>sOnChangeCode : javascript-код для работы события OnChange() (его эмуляции)</li>
<li>oGUID : GUID сущности, которая будет загружена в лукапе</li>
<li>sDisplayText : текст, который будет отображаться в лукапе</li>
<li>sFilters : возможность фильтрации для лукапа</li>
</ol>
<p><strong>Пример вызова функции (на событие OnLoad):</strong></p>
<p><code>//вызываю функцию с нужными параметрами<br />
Text_To_LookUp("new_aktest", "1088", "SalesOrder","", crmForm.all.new_aktest.datavalue,crmForm.all.new_aktests.value, akfilter);</code></p>
<p><strong>Для работы с этой функцией необходимо сделать следующее:</strong></p>
<ol>
<li> создать текстовое поле</li>
<li>разместить его на форме</li>
<li>в событие OnLoad() формы вставить функцию и ее вызов</li>
<li>Опубликовать изменения.</li>
</ol>
<p>У меня не получилось передвать в функцию 4й параметр для эмуляции события OnChange () (нажатие на лукап), поэтому я использовал следующий код:</p>
<p><code>// симулирую событие onChange()<br />
function onChangeAk()<br />
{<br />
var S_CONTACT_NAME = crmForm.all.new_aktest.parentElement.parentElement.firstChild.innerText;<br />
crmForm.all.new_aktests.value = S_CONTACT_NAME;<br />
}</code></p>
<p>//вызываю функцию с нужными параметрами<br />
Text_To_LookUp(&laquo;new_aktest&raquo;, &laquo;1088&#8243;, &laquo;SalesOrder&raquo;,&raquo;", crmForm.all.new_aktest.datavalue,crmForm.all.new_aktests.value, &laquo;&raquo;);</p>
<p>// «присоединяю» событие OnChange() к необходимому полю-лукапу и вызываю нужную функцию<br />
oRec1 = crmForm.all.new_aktest;<br />
oRec1.attachEvent(&laquo;onchange&raquo;,onChangeAk);</p>
<p>В этом примере, в поле <strong>new_aktest </strong>будет<strong> </strong>храниться <strong>GUID </strong>записи (если сущность <strong>contact</strong>, то значение <strong>contactid). </strong>Поэтому, чтобы сохранять текстовое значение поля приходиться создавать дополнительный текстовый атрибут <strong>new_aktests</strong>, в котором сохраняю текстовое значение.</p>
<p>Параметр <strong>sFilters</strong> позволяет передавать определенное условие фильтрации лукапа с помощью <strong>FetchXML</strong>. Этот вариант я опишу в следующий раз.</p>
<p>Для большинства задач функция подходит, не получилось привязаться к системным сущностям: <strong>Product</strong>, <strong>User</strong>.<br />
<strong>UPD.</strong> Везде используются обычные кавычки вида <strong>&laquo;</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://ms-dynamics-crm.com.ua/2009/02/08/lookup-to-any-entity-many-to-many-relationships-in-ms-crm-30/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

