<?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; unsupported</title>
	<atom:link href="http://ms-dynamics-crm.com.ua/tag/unsupported/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>Выбор всех значений из picklist</title>
		<link>http://ms-dynamics-crm.com.ua/2010/08/17/select-all-values-from-picklist/</link>
		<comments>http://ms-dynamics-crm.com.ua/2010/08/17/select-all-values-from-picklist/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 15:11:36 +0000</pubDate>
		<dc:creator>Костя Афендиков</dc:creator>
				<category><![CDATA[ms crm 4.0]]></category>
		<category><![CDATA[javascript in ms crm]]></category>
		<category><![CDATA[picklist]]></category>
		<category><![CDATA[tips and tricks]]></category>
		<category><![CDATA[unsupported]]></category>

		<guid isPermaLink="false">http://ms-dynamics-crm.com.ua/?p=1196</guid>
		<description><![CDATA[Наверняка вы уже знакомы с решением от Jim Wang для выбора нескольких значений из picklist MS CRM, а стиль самого picklist был изменен с добавлением чекбоксов. Отличное решение, но, иногда, возникает необходимость выбирать все элементы из списка и если значений много, то будет неудобно выбирать каждое по отдельности. Поэтому вот небольшой javascript сниппет, который позволяет [...]]]></description>
			<content:encoded><![CDATA[<p>Наверняка вы уже знакомы с<a title="multi select" href="http://jianwang.blogspot.com/2009/01/crm-40-checkbox-style-multi-select.html" target="_blank"> решением от Jim Wang</a> для выбора нескольких значений из picklist MS CRM, а стиль самого picklist был изменен с добавлением чекбоксов.</p>
<p><img class="alignnone" title="multiple picklist chekbox" src="http://2.bp.blogspot.com/_-lOIedxo3AA/SXBymQg6L7I/AAAAAAAAAMw/Wfb2U3bwdWU/s400/checkboxpicklist.png" alt="" width="345" height="95" /></p>
<p>Отличное решение, но, иногда, возникает необходимость выбирать все элементы из списка и если значений много, то будет неудобно выбирать каждое по отдельности. Поэтому вот небольшой javascript сниппет, который позволяет решить данную задачу.<br />
<span id="more-1196"></span><br />
1. Необходимо добавить новое значение <strong>Select all </strong>в ваш picklist</p>
<p>2. В событие <strong>OnSave()</strong> вставляем следующий код:</p>
<pre class="brush: jscript; title: ;">
var PL = crmForm.all.new_fundingsource;
var PLV = crmForm.all.new_fundingsourcevalue;
    if(PLV.value != &quot;&quot;)
    {
	  var PLVT = PLV.value.split(&quot;||&quot;);

	  for( var i = 0; i &lt; PLVT.length; i++ )
		{
			if( PLVT[i] == &quot;Select All&quot;)
			{
                        PLV.value = &quot;&quot;;
			for( var i = 1; i &lt; PL.options.length; i++ )
				{
                                      PLV.value += PL.options[i].text+ &quot;||&quot;;
				}
			}
		}
    }
</pre>
<p>Все. Теперь достаточно выбрать пункт Select all и нажать сохранить, после чего будут выбраны все значения данного picklist</p>
<p>Код для создания multi picklist (чтобы не забыть):</p>
<pre class="brush: jscript; title: ;">
var PL = crmForm.all.new_fundingsource;
var PLV = crmForm.all.new_fundingsourcevalue;

if( PL != null &amp;&amp; PLV != null )
{
  PL.style.display = &quot;none&quot;;
  PLV.style.display = &quot;none&quot;;

  // Create a DIV container
  var addDiv = document.createElement(&quot;&lt;div style='overflow-y:auto; height:80px; border:1px #6699cc solid; background-color:#ffffff;' /&gt;&quot;);
  PL.parentNode.appendChild(addDiv);

  // Initialise checkbox controls
  for( var i = 1; i &lt; PL.options.length; i++ )
  {
    var pOption = PL.options[i];
    if( !IsChecked( pOption.text ) )
      var addInput = document.createElement(&quot;&lt;input type='checkbox' style='border:none; width:25px; align:left;' /&gt;&quot; );
    else
      var addInput = document.createElement(&quot;&lt;input type='checkbox' checked='checked' style='border:none; width:25px; align:left;' /&gt;&quot; );

    var addLabel = document.createElement( &quot;&lt;label /&gt;&quot;);
    addLabel.innerText = pOption.text;

    var addBr = document.createElement( &quot;&lt;br/&gt;&quot;); //it's a 'br' flag

    PL.nextSibling.appendChild(addInput);
    PL.nextSibling.appendChild(addLabel);
    PL.nextSibling.appendChild(addBr);
  }

  // Check if it is selected
  function IsChecked( pText )
  {

    if(PLV.value != &quot;&quot;)
    {
      var PLVT = PLV.value.split(&quot;||&quot;);
      for( var i = 0; i &lt; PLVT.length; i++ )
      {
        if( PLVT[i] == pText )
          return true;
      }
    }
    return false;
  }

  // Save the selected text, this filed can also be used in Advanced Find
  crmForm.attachEvent( &quot;onsave&quot; , OnSave);
//debugger
  function OnSave()
  {
    PLV.value = &quot;&quot;;
    var getInput = PL.nextSibling.getElementsByTagName(&quot;input&quot;);

    for( var i = 0; i &lt; getInput.length; i++ )
    {
      if( getInput[i].checked)
      {

        PLV.value += getInput[i].nextSibling.innerText + &quot;||&quot;;

      }
    }
  }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://ms-dynamics-crm.com.ua/2010/08/17/select-all-values-from-picklist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Включение неактивных записей в результат Быстрого поиска (Quick Find) в Microsoft Dynamics CRM 4.0</title>
		<link>http://ms-dynamics-crm.com.ua/2009/07/26/ms-dynamics-crm-include-inactive-records-in-quick-find/</link>
		<comments>http://ms-dynamics-crm.com.ua/2009/07/26/ms-dynamics-crm-include-inactive-records-in-quick-find/#comments</comments>
		<pubDate>Sun, 26 Jul 2009 12:31:43 +0000</pubDate>
		<dc:creator>Костя Афендиков</dc:creator>
				<category><![CDATA[ms crm 4.0]]></category>
		<category><![CDATA[quick find]]></category>
		<category><![CDATA[unsupported]]></category>

		<guid isPermaLink="false">http://ms-dynamics-crm.com.ua/?p=947</guid>
		<description><![CDATA[Microsoft Dynamics CRM 4.0 Quick Find (Быстрый поиск) является отличным инструментом для быстрого поиска записей без использования Advanced Find (Расширенного поиска). Но Быстрый поиск  проигрывает из-за отсутствия возможности изменения фильтра. Например, Быстрый поиск работает только для поиска активных записей. Для некоторых сущностей такое подходит, но, например, при поиске Account (Организаций) или Contact (Контактов) может понадобиться [...]]]></description>
			<content:encoded><![CDATA[<p>Microsoft Dynamics CRM 4.0 Quick Find (Быстрый поиск) является отличным инструментом для быстрого поиска записей без использования Advanced Find (Расширенного поиска). Но Быстрый поиск  проигрывает из-за отсутствия возможности изменения фильтра. Например, Быстрый поиск работает только для поиска активных записей. Для некоторых сущностей такое подходит, но, например, при поиске Account (Организаций) или Contact (Контактов) может понадобиться включить в результаты неактивные записи.</p>
<p><span id="more-947"></span></p>
<p><img class="aligncenter size-full wp-image-964" title="ms-crm-quick-find-example" src="http://ms-dynamics-crm.com.ua/wp-content/uploads/2009/07/ms-crm-quick-find-example.png" alt="ms-crm-quick-find-example" width="369" height="134" /></p>
<p>В MS CRM 4.0 нет поддерживаемого метода для включения в Быстрый поиск неактивных записей и окно настройки  не позволяет изменять критерий фильтра для представления.</p>
<p><img class="aligncenter size-full wp-image-963" title="ms-crm-quick-find-contacts" src="http://ms-dynamics-crm.com.ua/wp-content/uploads/2009/07/ms-crm-quick-find-contacts.png" alt="ms-crm-quick-find-contacts" width="684" height="446" /></p>
<p>Это простой <strong>неподдерживаемый </strong>способ включить в результаты неактивные записи:</p>
<p>1. Экспортируем кастомизацию нужной сущности (в нашем случает Контакт)</p>
<p>Идем Settings -&gt; Customization-&gt;Export Customizations. Выбираем Contact и жмем Export Selected Customizations. Сохраняем кастомизацию.</p>
<p>2.  Открываем файл в блокноте и ищем &laquo;Quick Find Active&raquo;.</p>
<p><img class="aligncenter size-full wp-image-965" title="ms-crm-quick-find-notepad" src="http://ms-dynamics-crm.com.ua/wp-content/uploads/2009/07/ms-crm-quick-find-notepad.png" alt="ms-crm-quick-find-notepad" width="546" height="374" /></p>
<p>3. Удалите из файла следующий код для фильтра:</p>
<p><img class="aligncenter size-full wp-image-962" title="ms-crm-quick-find-remove-filter" src="http://ms-dynamics-crm.com.ua/wp-content/uploads/2009/07/ms-crm-quick-find-remove-filter.png" alt="ms-crm-quick-find-remove-filter" width="691" height="342" /></p>
<p>4. Сохраните XML-файл, импортируйте  в MS CRM и опубликуйте сущность.</p>
<p><strong>!</strong> Следует заострить внимание на том, что это<strong> неподдерживаемый метод</strong>, не забывайте сохранять копии файлов. Это будет работать на всех сущностях, включая пользовательские.</p>
<p>Источник  http://blogs.engage2day.com/2009/04/include-inactive-records-in-microsoft-crm-40-quick-find/</p>
]]></content:encoded>
			<wfw:commentRss>http://ms-dynamics-crm.com.ua/2009/07/26/ms-dynamics-crm-include-inactive-records-in-quick-find/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>Удобное отображение KB Article в MS CRM 4.0</title>
		<link>http://ms-dynamics-crm.com.ua/2009/03/27/ms-crm-kbarticle-view/</link>
		<comments>http://ms-dynamics-crm.com.ua/2009/03/27/ms-crm-kbarticle-view/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 07:46:09 +0000</pubDate>
		<dc:creator>Катерина Головчан</dc:creator>
				<category><![CDATA[ms crm 4.0]]></category>
		<category><![CDATA[ISV]]></category>
		<category><![CDATA[javascript in ms crm]]></category>
		<category><![CDATA[KB Article]]></category>
		<category><![CDATA[unsupported]]></category>

		<guid isPermaLink="false">http://ms-dynamics-crm.com.ua/?p=621</guid>
		<description><![CDATA[Если Вы использовали статьи KB Article, то возможно, сталкивались с подобной проблемой. Рассмотрим на примере. Есть обращение, у которого на вкладке Notes and Article вставлен раздел Knowledge Base Article, где Вы можете в Lookup&#8217;е выбрать статью и, отметив checkbox &#171;Show Article&#187;, отобразить статью в маленьком iFrame. Как оказалось, этот раздел всего лишь отображает страницу &#171;/CS/articles/viewer/default.aspx&#187; [...]]]></description>
			<content:encoded><![CDATA[<p>Если Вы использовали статьи KB Article, то возможно, сталкивались с подобной проблемой. Рассмотрим на примере. Есть обращение, у которого на вкладке <strong>Notes and Article</strong> вставлен раздел <strong>Knowledge Base Article</strong>, где Вы можете в Lookup&#8217;е выбрать статью и, отметив checkbox &laquo;Show Article&raquo;, отобразить статью в маленьком iFrame. Как оказалось, этот раздел всего лишь отображает страницу <strong>&laquo;/CS/articles/viewer/default.aspx&raquo;</strong> и передает Article ID как параметр. Эту зону нельзя подредактировать, а просматривать статью в таком маленьком окошке совсем неудобно.</p>
<p><img class="aligncenter size-full wp-image-627" title="ms-crm-article-default-view" src="http://ms-dynamics-crm.com.ua/wp-content/uploads/2009/03/ms-crm-article-default-view.png" alt="ms-crm-article-default-view" width="683" height="489" /></p>
<p>С помощью некоторых изменений, уберем этот раздел совсем, добавим новую вкладку KB Article и  создадим такой же функционал на эту вкладку.</p>
<p><span id="more-621"></span>Сначала следует экспортировать кастомизацию сущности Incident (Case) и внести в нее коррективы. Открываем файл customization.xml и удаляем часть кода, который передает Article ID в раздел Knowledge Base Article.</p>
<p><img class="aligncenter size-full wp-image-628" title="ms-crm-delete-onchange-article" src="http://ms-dynamics-crm.com.ua/wp-content/uploads/2009/03/ms-crm-delete-onchange-article.png" alt="ms-crm-delete-onchange-article" width="675" height="409" /></p>
<p>Также удаляем row, которые содержат этот раздел</p>
<p><img class="aligncenter size-full wp-image-629" title="ms-crm-delete-row-article" src="http://ms-dynamics-crm.com.ua/wp-content/uploads/2009/03/ms-crm-delete-row-article.png" alt="ms-crm-delete-row-article" width="670" height="439" /></p>
<p>Сохраняем, импортируем в MS CRM и публикуем. <strong>Важно хранить бэкапы кастомизаций на случай ошибки.</strong></p>
<p>Через CRM создайте в сущности Incident новую вкладку  с именем <strong>KB Article</strong>, добавьте раздел с именем <strong>Knowledge Base Article</strong>, в него поместите поле <strong>kbarticleid</strong>,а на <strong>OnChange </strong>этого поля пропишите следующий код:</p>
<blockquote><p>DisplayKBArticle();<br />
function DisplayKBArticle()<br />
{<br />
var oKBArticle = crmForm.all.IFRAME_KBArticle;<br />
if (oKBArticle != null)<br />
{<br />
var oKBId = crmForm.all.kbarticleid.DataValue;<br />
if (oKBId == null)<br />
{<br />
oKBArticle.src = oKBArticle.url;<br />
}<br />
else<br />
{<br />
oKBArticle.src=&raquo;/&raquo; + ORG_UNIQUE_NAME + &laquo;/CS/articles/viewer/default.aspx?IsRestrictedMode=true&amp;id=&raquo; + oKBId[0].id;<br />
}<br />
}<br />
}</p></blockquote>
<p>Включите событие и сохраните.  Добавьте в этот же раздел <strong>iFrame </strong>с такими настройками:</p>
<p><strong>Name: </strong>IFRAME_KBArticle</p>
<p><strong>URL: </strong>/_static/blank.htm</p>
<p>На вкладке <strong>Dependencies </strong>добавьте Knowledge Base Article.</p>
<p>Включите событие OnLoad сущности Incident и добавьте в него следующий скрипт:</p>
<blockquote><p>if (crmForm.FormType == 2)<br />
{<br />
DisplayKBArticle();<br />
}</p>
<p>function DisplayKBArticle()<br />
{<br />
var oKBArticle = crmForm.all.IFRAME_KBArticle;<br />
if (oKBArticle != null)<br />
{<br />
var oKBId = crmForm.all.kbarticleid.DataValue;<br />
if (oKBId == null)<br />
{<br />
oKBArticle.src = oKBArticle.url;<br />
}<br />
else<br />
{<br />
oKBArticle.src=&raquo;/&raquo; + ORG_UNIQUE_NAME + &laquo;/CS/articles/viewer/default.aspx?IsRestrictedMode=true&amp;id=&raquo; + oKBId[0].id;<br />
}<br />
}<br />
}</p></blockquote>
<p>Сохраняем, публикуем и открываем запись с Обращением, получаем такую вот вещь:</p>
<p><img class="aligncenter size-full wp-image-626" title="ms-crm-article-corrected-view" src="http://ms-dynamics-crm.com.ua/wp-content/uploads/2009/03/ms-crm-article-corrected-view.png" alt="ms-crm-article-corrected-view" width="678" height="482" /></p>
<p>Прикладываю <a rel="nofollow" href="http://ms-dynamics-crm.com.ua/download/case.zip">customization.xml</a>, в котором содержится  кастомизация только сущности Incident. <strong>Не забывайте, что если у вас были внесены какие-то изменения в данную сущности, то после публикации  этой кастомизации они пропадут.</strong></p>
<p>За основу данного поста взят пост <a title="Display KB Article Your Way" rel="nofollow" href="http://blogs.msdn.com/ukcrm/archive/2008/05/25/display-kb-articles-your-way.aspx">Display KB Article Your Way</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ms-dynamics-crm.com.ua/2009/03/27/ms-crm-kbarticle-view/feed/</wfw:commentRss>
		<slash:comments>0</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>Добавляем алфавит для сортировки записей в MS Dynamics CRM</title>
		<link>http://ms-dynamics-crm.com.ua/2009/03/19/ms-dynamics-crm-alphabets-sort-2/</link>
		<comments>http://ms-dynamics-crm.com.ua/2009/03/19/ms-dynamics-crm-alphabets-sort-2/#comments</comments>
		<pubDate>Thu, 19 Mar 2009 18:53:14 +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[unsupported]]></category>
		<category><![CDATA[алфавит сортировки]]></category>

		<guid isPermaLink="false">http://ms-dynamics-crm.com.ua/?p=553</guid>
		<description><![CDATA[В Microsoft Dynamics CRM 4.0, как и в MS CRM 3.0, так и не добавили возможности сортировки ваших записей на другом языке. Для MS CRM 3.0 я уже рассматривал способ добавления второго алфавита сортировки . Этот способ работает и для MS CRM 4.0. Сейчас же хочу описать способ, который сделал Роман Савран для MS CRM [...]]]></description>
			<content:encoded><![CDATA[<p>В <strong>Microsoft Dynamics CRM 4.0</strong>, как и в <strong>MS CRM 3.0</strong>, так и не добавили возможности сортировки ваших записей на другом языке. Для <strong>MS CRM 3.0</strong> я уже рассматривал способ <a title="2 алфавита для сортировки записей в ms crm" href="http://ms-dynamics-crm.com.ua/2009/02/08/microsoft-dynamics-crm-30-two-alphabets-to-sort-records/">добавления второго алфавита сортировки</a> . Этот способ работает и для MS CRM 4.0.</p>
<p>Сейчас же хочу описать способ, который сделал <a rel="nofollow" href="http://ms-crm.com.ua">Роман Савран</a> для <strong>MS CRM 3.0</strong> с моими незначительными дополнениями для <strong>MS CRM 4.0</strong>, с помощью которого мы сможем получить панель для <strong>сортировки </strong>записей такого вида:</p>
<div id="attachment_554" class="wp-caption alignnone" style="width: 1101px"><img class="size-full wp-image-554" title="2 алфавита ms crm" src="http://ms-dynamics-crm.com.ua/wp-content/uploads/2009/03/2-d0b0d0bbd184d0b0d0b2d0b8d182d0b0-d0b2-ms-crm.jpg" alt="2 алфавита ms crm" width="1091" height="43" /><p class="wp-caption-text">2 алфавита ms crm</p></div>
<p><span id="more-553"></span></p>
<h3>Для Microsoft Dynamics CRM 4.0</h3>
<p><em><strong>Примечание</strong></em>: этот метод, так же как и предыдущий вариант, относится к категории unsupported, так что делайте копии измененных файлов.</p>
<ol>
<li>Делаем копию файла <strong>HomePage.aspx</strong>. Найти его можно здесь: <strong>C:\Program Files\Microsoft CRM\CRMWeb\_root</strong></li>
<li>Открываем его для редактирования и ищем следующий код:</li>
<p>function window.onload()<br />
{<br />
HandleBackButtonIssues(_currentTypeCode);<br />
}</p>
<li>Заменяем его на код, представленный в <a title="код для алфавита ms crm 4" href="http://ms-dynamics-crm.com.ua/download/mscrm4alphabet.txt">mscrm4alphabet.txt</a> (wordpress некорректно отображает)</li>
</ol>
<h3>Для Microsoft Dynamics CRM 3.0</h3>
<p>На 3 шаге заменяем на следующую функцию из файла <a title="алфавит для ms crm 3.0" href="http://ms-dynamics-crm.com.ua/download/mscrm3alphabet.txt">mscrm3alphabet.txt</a></p>
<p>Вот и все <img src='http://ms-dynamics-crm.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Разница между вариантами только в том, что в <strong>MS CRM 4.0</strong> изменили предыдущие классы, эти изменения найдите сами <img src='http://ms-dynamics-crm.com.ua/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><em><strong>Примечание</strong>:</em> эта панель не будет доступна для сортировки действий, если вам хочется и там иметь возможность сортировать, используйте или модернизируйте <a title="сортировка записей в ms dynamics crm" href="http://ms-dynamics-crm.com.ua/2009/02/08/microsoft-dynamics-crm-30-two-alphabets-to-sort-records/">прошлый вариант</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ms-dynamics-crm.com.ua/2009/03/19/ms-dynamics-crm-alphabets-sort-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Меняем стандартные представления Действий в MS CRM 4.0 и MS CRM 3.0</title>
		<link>http://ms-dynamics-crm.com.ua/2009/03/17/change-default-view-in-ms-crm-4-and-mscrm-3/</link>
		<comments>http://ms-dynamics-crm.com.ua/2009/03/17/change-default-view-in-ms-crm-4-and-mscrm-3/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 19:24:10 +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[unsupported]]></category>

		<guid isPermaLink="false">http://ms-dynamics-crm.com.ua/?p=544</guid>
		<description><![CDATA[К сожалению, в Microsoft Dynamics CRM нет возможности изменить стандартные представления  (Views).  Например, при выборе Действия , по умолчанию, выводятся все активные действия на следующие 30 дней, но гораздо удобней видеть все действия. Вот пример как это сделать для MS CRM 4.0, ну и MS CRM 3.0 . Меняем View для Microsoft Dynamics CRM 4.0 [...]]]></description>
			<content:encoded><![CDATA[<p>К сожалению, в <strong>Microsoft Dynamics CRM</strong> нет возможности изменить стандартные представления  (Views).  Например, при выборе <em>Действия </em>, по умолчанию, выводятся все активные действия на <em>следующие 30 дней</em>, но гораздо удобней видеть <strong>все действия</strong>. Вот пример как это сделать для <strong>MS CRM 4.0</strong>, ну и <strong>MS CRM 3.0 </strong>.</p>
<p><img class="alignnone size-full wp-image-545" title="Действия на &quot;Все&quot;" src="http://ms-dynamics-crm.com.ua/wp-content/uploads/2009/03/after.png" alt="Действия на &quot;Все&quot;" width="1010" height="263" /></p>
<p><span id="more-544"></span></p>
<h3>Меняем View для Microsoft Dynamics CRM 4.0</h3>
<ol>
<li>Здесь рассматривается <a title="неподдерживаемые изменения для ms dynamics crm" href="http://ms-dynamics-crm.com.ua/2009/02/08/unsupported-customization-for-ms-dynamics-crm/">unsupported </a>метод, поэтому обязательно сделайте копию файла &laquo;<strong>AppGridFilterContainer.htc</strong>&laquo;. Находится файл здесь:  <em>C:\Program Files\Microsoft Dynamics CRM Server\CRMWeb\_static\_controls\appgridfiltercontainer</em></li>
<li>Редактируем файл любым текстовым редактором и в конце файла ищем следующие строки:</li>
</ol>
<blockquote><p>if(!IsNull(oCtrl.DataValue))<br />
{<br />
oCallback(oCtrl);</p></blockquote>
<p>Которые мы заменим на следующий код:</p>
<blockquote><p>if(!IsNull(oCtrl.DataValue))<br />
{<br />
if(oCtrl.DataValue==”LastXDays;30” || oCtrl.DataValue==”NextXDays;30” || oCtrl.DataValue==”0”)<br />
{<br />
oCtrl.DataValue = “All”<br />
RefreshGridView();<br />
}<br />
oCallback(oCtrl);</p></blockquote>
<p>Сохраните файл и <span style="text-decoration: underline;"><strong>удалите все временные файлы (Temporary Files) из IE</strong></span>!<br />
Запускайте MS CRM, теперь  по умолчанию, для Действий из вкладки Контакта, Организации и Возможный сделок фильтр будет установлен на &laquo;Все&raquo; (в моем случае &laquo;All&raquo;)</p>
<h3>Для Microsoft Dynamics CRM 3.0</h3>
<p>В отличие от предыдущего решения для <strong>MS CRM 4.0,</strong> в тройке это же можно решить без изменения стандартных файлов, только с помощью <strong>JavaScript.</strong></p>
<ol>
<li>Откройте сущность <strong>Contact </strong>для редактирования и в <strong>OnLoad()</strong> формы вставьте следующий код:</li>
</ol>
<blockquote><p>SetDefaultView = function(viewCombo, viewName) {<br />
if (viewCombo.value != viewName) {<br />
viewCombo.value = viewName;<br />
viewCombo.FireOnChange();<br />
}<br />
}<br />
areaActivityHistoryFrame_OnReadyStateChange = function() {<br />
if (this.readyState == “complete”) {<br />
var frame = document.frames(”areaActivityHistoryFrame”);<br />
var viewCombo = frame.document.getElementById(”actualend”);<br />
if (viewCombo.readyState == “complete”) {<br />
SetDefaultView(viewCombo, “All”);<br />
}<br />
else {<br />
viewCombo.onreadystatechange = function() {<br />
if (this.readyState == “complete”) {<br />
SetDefaultView(this, “All”);<br />
}<br />
}<br />
}<br />
}<br />
}<br />
areaOppsFrame_OnReadyStateChange = function() {<br />
if (this.readyState == “complete”) {<br />
var frame = document.frames(”areaOppsFrame”);<br />
var viewCombo = frame.document.getElementById(”statecode”);<br />
if (viewCombo.readyState == “complete”) {<br />
SetDefaultView(viewCombo, “All”);<br />
}<br />
else {<br />
viewCombo.onreadystatechange = function() {<br />
if (this.readyState == “complete”) {<br />
SetDefaultView(this, “All”);<br />
}<br />
}<br />
}<br />
}<br />
}<br />
areaActivitiesFrame_OnReadyStateChange = function() {<br />
if (this.readyState == “complete”) {<br />
var frame = document.frames(”areaActivitiesFrame”);<br />
var viewCombo = frame.document.getElementById(”scheduledend”);<br />
if (viewCombo.readyState == “complete”) {<br />
SetDefaultView(viewCombo, “All”);<br />
}<br />
else {<br />
viewCombo.onreadystatechange = function() {<br />
if (this.readyState == “complete”) {<br />
SetDefaultView(this, “All”);<br />
}<br />
}<br />
}<br />
}<br />
}<br />
loadArea(’areaActivityHistory’);<br />
loadArea(’areaActivities’);<br />
loadArea(’areaOpps’);<br />
loadArea(’areaForm’);<br />
document.frames(”areaActivityHistoryFrame”).document.onreadystatechange = areaActivityHistoryFrame_OnReadyStateChange;<br />
document.frames(”areaActivitiesFrame”).document.onreadystatechange = areaActivitiesFrame_OnReadyStateChange;<br />
document.frames(”areaOppsFrame”).document.onreadystatechange = areaOppsFrame_OnReadyStateChange;</p></blockquote>
<p><em>Примечание:</em> не забудьте ставить прямые кавычки &#8216; и &raquo;</p>
<p>Гораздо более «поддерживаемый» метод <img src='http://ms-dynamics-crm.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Этот же код можно применить и для сущности Организации (account) и Возможной сделки (opportunity).</p>
<p>Оригинал <a rel="nofollow" href="http://www.unitek.com/training/microsoft/crm/blog/2008/01/18/changing-the-default-views-in-crm-30-crm-40/" target="_blank">здесь</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ms-dynamics-crm.com.ua/2009/03/17/change-default-view-in-ms-crm-4-and-mscrm-3/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Как бы побыстрее добраться до OnLoad формы,а?</title>
		<link>http://ms-dynamics-crm.com.ua/2009/02/08/crm-onload/</link>
		<comments>http://ms-dynamics-crm.com.ua/2009/02/08/crm-onload/#comments</comments>
		<pubDate>Sun, 08 Feb 2009 20:46:31 +0000</pubDate>
		<dc:creator>Катерина Головчан</dc:creator>
				<category><![CDATA[ms crm 3.0]]></category>
		<category><![CDATA[ms crm 4.0]]></category>
		<category><![CDATA[CRM-форма]]></category>
		<category><![CDATA[javascript in ms crm]]></category>
		<category><![CDATA[unsupported]]></category>

		<guid isPermaLink="false">http://ms-dynamics-crm.com.ua/?p=69</guid>
		<description><![CDATA[Знаю два простых решения. Я давно уже пишу все в Visual Studio, но нередко появляется необходимость наваять что-то на javascript. И тогда сталкиваешься с проблемой, что ужасно неудобно писать в том маленьком окошке, которое предложили майкрософт нам, разработчикам. Первый способ  подходит и для тестирования, и для того, чтобы после тестирования все оставить так, как и [...]]]></description>
			<content:encoded><![CDATA[<p>Знаю два простых решения. Я давно уже пишу все в Visual Studio, но нередко появляется необходимость наваять что-то на javascript. И тогда сталкиваешься с проблемой, что ужасно неудобно писать в том маленьком окошке, которое предложили майкрософт нам, разработчикам.</p>
<p>Первый способ  подходит и для тестирования, и для того, чтобы после тестирования все оставить так, как и при тестировании. Он заключается во вставке в событие <strong>Onload </strong>формы вот этого кода:</p>
<p><span id="more-69"></span></p>
<blockquote><p>try<br />
{<br />
var script = document.createElement(&laquo;script&raquo;);<br />
script.language = &laquo;javascript&raquo;;<br />
<strong> script.src = </strong>&laquo;<strong>/custom/onload.js</strong>&laquo;<strong>;</strong><br />
document.getElementsByTagName(&laquo;head&raquo;)[0].appendChild(script);<br />
}<br />
catch (err)<br />
{<br />
alert(&laquo;Error &laquo;);<br />
}</p></blockquote>
<p>В данном случае по пути установки CRM в папке CRMWeb создана папка с названием <strong>custom</strong>, а в ней лежит файл <strong>onload.js</strong>. И когда срабатывает событие <strong>Onload </strong>формы, то вызывается на выполнение файл <strong>onload.js</strong>.<strong> </strong>Таким образом можно смело один раз прописать этот код в событии формы и дальше спокойненько себе редактировать файл <strong>onload.js </strong>в Far&#8217;е, ну или в Notepad&#8217;e.</p>
<p>Второй способ я обычно употребляю для тестирования и отладки.  Покажу его на примере, буду редактировать форму сущности Обращение (incident). Чтобы узнать где лежит сама форма обращения идем в какое-нибудь обращение, открываем его и жмем <strong>F11</strong> или<strong> Ctrl+N</strong>.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-88" title="case" src="http://ms-dynamics-crm.com.ua/wp-content/uploads/2009/02/case.jpg" alt="case" width="557" height="191" /></p>
<p>Вот он адрес, по которому я могу найти форму Обращения:</p>
<p><strong>папка установки CRM/CRMWeb/cs/cases/edit.aspx</strong></p>
<p>Открываем этот файл и двигаемся в самый низ, перед закрывающимся тегом боди <strong>&lt;/body&gt;</strong> вставляем, например, такой кусочек:</p>
<blockquote><p>&lt;script&gt;</p>
<p>alert(&#8216;Hello MS CRM!&#8217;);</p>
<p>&lt;/script&gt;</p></blockquote>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-89" title="editcase" src="http://ms-dynamics-crm.com.ua/wp-content/uploads/2009/02/editcase.jpg" alt="editcase" width="440" height="295" /></p>
<p>Сохраняем, закрываем. Идем в обращения, открываем любое и получаем наш алерт.</p>
<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/08/crm-onload/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Неподдерживаемые изменения для Microsoft Dynamics CRM</title>
		<link>http://ms-dynamics-crm.com.ua/2009/02/08/unsupported-customization-for-ms-dynamics-crm/</link>
		<comments>http://ms-dynamics-crm.com.ua/2009/02/08/unsupported-customization-for-ms-dynamics-crm/#comments</comments>
		<pubDate>Sun, 08 Feb 2009 20:17:40 +0000</pubDate>
		<dc:creator>Костя Афендиков</dc:creator>
				<category><![CDATA[ms crm 3.0]]></category>
		<category><![CDATA[ms crm 4.0]]></category>
		<category><![CDATA[unsupported]]></category>

		<guid isPermaLink="false">http://ms-dynamics-crm.com.ua/?p=59</guid>
		<description><![CDATA[Многие, и я в том числе, иногда прибегают к нестандартным методам при разработке под MS CRM. Как определить, что наша разработка является поддерживаемой, т.е. при очередном обновлении не будет головной боли с переносом настроек (теоретически ). Вот перечень того, что Microsoft считает неподдерживаемой кастомизацией. Модификации Microsoft Dynamics CRM, которые сделаны без использования Dynamics CRM SDK [...]]]></description>
			<content:encoded><![CDATA[<p>Многие, и я в том числе, иногда прибегают к нестандартным методам при разработке под MS CRM. Как определить, что наша разработка является поддерживаемой, т.е. при очередном обновлении не будет головной боли с переносом настроек (теоретически <img src='http://ms-dynamics-crm.com.ua/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ).</p>
<p>Вот перечень того, что Microsoft считает <strong>неподдерживаемой кастомизацией</strong>.</p>
<p>Модификации <strong>Microsoft Dynamics CRM</strong>, которые сделаны без использования <strong>Dynamics CRM SDK</strong> или официальных <strong>инструментов Microsoft Dynamics CRM</strong> – не поддерживаются в процессе обновления или апгрейда Microsoft Dynamics CRM. Все что не задокументированно в SDK и сопутствующих материалах  &#8211; не поддерживается. Не поддерживаемые модификации могут вызывать проблемы, когда вы устанавливаете service pack или обновляете CRM. Для того, чтобы минимизировать вопросы после обновления или апгрейда – не изменяйте файлы Microsoft Dynamics CRM, которых вы не создавали.<span id="more-59"></span></p>
<h3>Изменение стандартных файлов CRM</h3>
<p>Изменения в любых .aspx, .css, .htm, .js, .xml, .jpg, или .gif  файлах или добавления в файлы, которые находятся в папке wwwroot приложения Microsoft Dynamics CRM, Microsoft Dynamics CRM инструменты или Microsoft Dynamics CRM файлы находятся в <strong>Program Files\Microsoft Dynamics CRM</strong> . Во время обновления CRM эти файлы не проверяются на изменения и могут быть перезаписаны.</p>
<h3>Изменения, внесенные в файлы или настройки веб-сайта Microsoft Dynamics CRM</h3>
<p>Ваши разработки должны быть установлены на другом веб-сайте. Это включает в себя изменения в файловой системе списков контроля доступа (ACL) любых файлов в сервере Microsoft Dynamics CRM.</p>
<h3>Изменения в физической схеме базы данных</h3>
<p>Включает в себя любые действия, совершенные в отношении данных без прохождения через систему настройки. Изменение таблиц, индексов, хранимых процедур, или вьювов(views), в базе данных не поддерживается. Добавление таблиц, индексов, хранимых процедур, или вьювов, в базу данных также не поддержали из-за целостности баз. Примечание: Это относится ко всем базам данных Microsoft Dynamics CRM для Microsoft Office Outlook локальных баз данных MS CRM.</p>
<p>При изменении данных, не используя настройки системы (System Customization), вы рискуете получить проблемы при обновлении и апгрейде</p>
<ul>
<li>Обращение к другим библиотекам .dll Microsoft Dynamics CRM, помимо <strong>Microsoft.Crm.Sdk.dll</strong>, <strong>Microsoft.Crm.SdkTypeProxy.dll</strong> и <strong>Microsoft.Crm.Outlook.Sdk.dll</strong>.</li>
<li>Использования интерфейсов прикладного программирования (API), помимо документированных API, в веб-службах <strong>CrmDeploymentService</strong>, <strong>CrmDiscoveryService</strong>, <strong>CrmService </strong>и <strong>MetadataService</strong>.</li>
<li>Н рекомендуем использовать или изменять <strong>default.css</strong> файл в корневом каталоге установки Microsoft Dynamics CRM. Только те настройки, изложенных, например, с помощью <span style="text-decoration: underline;">Template.css</span>, поддерживаются.</li>
<li>Повторное использование любых имеющихся в Microsoft Dynamics CRM установленного <strong>JavaScript</strong>-кода. Этот код может измениться или быть перезаписаным во время обновления.</li>
</ul>
<p>И несколько других предупреждений.</p>
<p>Весь этот список ограничений, в первую очередь, это разграничение ответственности между Microsoft и разработчиками. Понятное дело, что Microsoft никогда не сможет удовлетворить потребности и желания каждой компании, поэтому и остается возможность добавления и разработки собственных продуктов и расширений для системы. Используя стандартные методы можно создать очень серьезные дополнения к CRM, хотя не хуже продукты можно создать и используя не поддерживаемую кастомизацию. 50 на 50 <img src='http://ms-dynamics-crm.com.ua/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Экспериментируйте!</p>
]]></content:encoded>
			<wfw:commentRss>http://ms-dynamics-crm.com.ua/2009/02/08/unsupported-customization-for-ms-dynamics-crm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft Dynamics CRM 3.0. Два алфавита для сортировки записей</title>
		<link>http://ms-dynamics-crm.com.ua/2009/02/08/microsoft-dynamics-crm-30-two-alphabets-to-sort-records/</link>
		<comments>http://ms-dynamics-crm.com.ua/2009/02/08/microsoft-dynamics-crm-30-two-alphabets-to-sort-records/#comments</comments>
		<pubDate>Sun, 08 Feb 2009 18:48:00 +0000</pubDate>
		<dc:creator>Костя Афендиков</dc:creator>
				<category><![CDATA[ms crm 3.0]]></category>
		<category><![CDATA[javascript in ms crm]]></category>
		<category><![CDATA[unsupported]]></category>
		<category><![CDATA[алфавит сортировки]]></category>

		<guid isPermaLink="false">http://ms-dynamics-crm.com.ua/?p=14</guid>
		<description><![CDATA[Когда я впервые столкнулся с Microsoft Dynamics CRM 3.0, первым заданием было сделать возможность сортировки записей на английском языке. Т.к. была установлена русская версия MS CRM, то панель сортировки выглядела так: Здесь я опишу способ, после которого она будет выглядеть так: Сразу хочу заметить, что метод относится к категории unsupported, будем менять исходный код разработчиков. [...]]]></description>
			<content:encoded><![CDATA[<p>Когда я впервые столкнулся с Microsoft Dynamics CRM 3.0, первым заданием было сделать возможность сортировки записей на английском языке. Т.к. была установлена русская версия MS CRM, то панель сортировки выглядела так:</p>
<div id="attachment_42" class="wp-caption alignnone" style="width: 510px"><a href="http://stimulus.dn.ua/blog/ak/files/2008/10/search-panel.jpg"><img class="size-full wp-image-42" src="http://stimulus.dn.ua/blog/ak/files/2008/10/search-panel.jpg" alt="Стандартная панель поиска - сортировки записей" width="500" height="21" /></a><p class="wp-caption-text">Стандартная панель поиска - сортировки записей</p></div>
<p>Здесь я опишу способ, после которого она будет выглядеть так:</p>
<div id="attachment_72" class="wp-caption alignnone" style="width: 510px"><a href="http://stimulus.dn.ua/blog/ak/files/2008/10/search-panel1.jpg"><img class="size-full wp-image-72" src="http://stimulus.dn.ua/blog/ak/files/2008/10/search-panel1.jpg" alt="Панель сортировки записей по двум языкам" width="500" height="24" /></a><p class="wp-caption-text">Панель сортировки записей по двум языкам</p></div>
<p>Сразу хочу заметить, что метод относится к категории <strong>unsupported</strong>, будем менять исходный код разработчиков.<span id="more-14"></span></p>
<ol>
<li>Ищем файл <strong>AppGrid_JumpBar.htc</strong>, который обычно находится здесь <strong>C:\Program Files\Microsoft CRM\CRMWeb\_grid</strong>\<strong>AppGrid_JumpBar.htc</strong></li>
<li>Делаем его копию, а сам файл открываем для редактирования. Для этого подойдет любой текстовый редактор.</li>
<li>Сразу послеВставляем следующий код:<br />
<code> var letters_sort = ["",//1й символ - пробел; (автоматически заменяется на  "Все"<br />
"\u0030|\u0031|\u0032|\u0033|\u0034|\u0035|\u0036|\u0037|\u0038|\u0039", // цифры от 0-9<br />
"\u0410|\u0411",// А, Б<br />
"\u0412|\u0413",// В, Г<br />
"\u0414|\u0415",// Д, Е<br />
"\u0416|\u0417",// Ж, З<br />
"\u0418|\u041A",// И, К<br />
"\u041B|\u041C",// Л, М<br />
"\u041D|\u041E",// Н, О<br />
"\u041F|\u0420",// П, Р<br />
"\u0421|\u0422",// С, Т<br />
"\u0423|\u0424",// У, Ф<br />
"\u0425|\u0426",// Х, Ц<br />
"\u0427|\u0428",// Ч, Ш<br />
"\u0429|\u042D",// Щ, Э<br />
"\u042E|\u042F",// Ю, Я<br />
"\u0041|\u0042",// A, B<br />
"\u0043|\u0044",// C, D<br />
"\u0045|\u0046",// E, F<br />
"\u0047|\u0048",// G, H<br />
"\u0049|\u004A",// I, J<br />
"\u004B|\u004C",// K, L<br />
"\u004D|\u004E",// M, N<br />
"\u004F|\u0050",// O. P<br />
"\u0051|\u0052",// Q, R<br />
"\u0053|\u0054",// S. T<br />
"\u0055|\u0056",// U. V<br />
"\u0057|\u0058",// W, X<br />
"\u0059",// Y<br />
"\u005A"// Z<br />
];</code><br />
В MS CRM 3.0 используется кодировка utf-8 и выше приведённый фрагмент кода &#8211; это всего лишь массив из букв русского и английского алфавитов, а так же цифр [0-9] в кодировке utf-8. В массиве 30 элементов, потому что в панели выводится 30 позиций.</li>
<li> Далее идет функция <strong>Reset()</strong>, в которой мы ничего менять не будем. Эта функция отвечает за внешний вид букв при обновлении окна. Меня она устраивает, поэтому цвета менять не стал.<br />
<code>function Reset()<br />
{<br />
if (_oLast)<br />
{<br />
with (_oLast.style)<br />
{<br />
color = "#000000";<br />
fontWeight = "normal";<br />
}<br />
}<br />
with (this.rows[0].cells[0].style)<br />
{<br />
fontWeight = "bold";<br />
color = "#000088";<br />
}<br />
_oLast = this.rows[0].cells[0];<br />
}</code></li>
<li> Переходим к функции <strong>init()</strong>, которая отвечает за вывод букв из нашего массива в нижнюю панель сортировки. Добавляем следующий код:<br />
<code>// Выводим все буквы из массива<br />
for (var i = 2; i &lt; this.rows[0].cells.length; i++)<br />
{<br />
this.rows[0].cells[i].innerText = letters_sort[i].split("|");<br />
}</code><br />
Функция <strong>init()</strong> теперь такая:<br />
<code>function init()<br />
{<br />
for (var cell = 0 ;cell &lt; this.rows[0].cells.length; cell++)<br />
{<br />
if (this.rows[0].cells[cell].className == "jump")<br />
{<br />
_oLast = this.rows[0].cells[cell];<br />
}<br />
}<br />
// Выводим все буквы из массива<br />
for (var i = 2; i &lt; this.rows[0].cells.length; i++)<br />
{<br />
this.rows[0].cells[i].innerText = letters_sort[i].split("|");</code></p>
<p>}<br />
}</li>
<li> Осталось изменить функцию для сортировки: <strong>filter()</strong>. Она теперь будет принимать следующий вид.<br />
<code><br />
function filter()<br />
{<br />
var o = event.srcElement;<br />
if (o.tagName == "TD")<br />
{<br />
with (_oLast.style)<br />
{<br />
color = "#000000";<br />
fontWeight = "bold";<br />
}</code></p>
<p>with (o.style)<br />
{<br />
fontWeight = &laquo;normal&raquo;;<br />
color = &laquo;#000088&#8243;;<br />
}<br />
_oLast = o;<br />
var o = window.document.all[this.gridId];</p>
<p><strong>o.SetParameter(&laquo;filter&raquo;, _oLast.cellIndex == 0 ? &laquo;&raquo; : letters_sort[_oLast.cellIndex]); </strong>//выводим массив</p>
<p>o.SetParameter(&laquo;filterDisplay&raquo;, _oLast.cellIndex == 0 ? &laquo;&raquo; : _oLast.innerText);<br />
o.ClearPagingCookie();<br />
o.PageNumber = 1;</p>
<p>}<br />
}</li>
<li> Функцию <strong>setStyle(bOn)</strong> можете изменить по своему вкусу. Она отвечает за визуальное представление.</li>
</ol>
<p>Вот и все. Экспериментируйте! <img src='http://ms-dynamics-crm.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>UPD:</strong><strong></strong> Выложу <a title="AppGrid_JumpBar.htc" href="http://www.stimulus.dn.ua/downloads/AppGrid_JumpBar.htc.txt">сам файл <strong><span lang="EN-US">AppGrid</span>_</strong><strong><span lang="EN-US">JumpBar</span>.</strong><strong><span lang="EN-US">htc</span></strong></a><span lang="EN-US">(поменяйте расширение) на всякий случай. Не забудь сохранить свой оригинал<br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://ms-dynamics-crm.com.ua/2009/02/08/microsoft-dynamics-crm-30-two-alphabets-to-sort-records/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
	</channel>
</rss>

