tag:blogger.com,1999:blog-68793397901747361242024-03-13T01:52:52.871-07:00ProCRM.tvg.Naukovychhttp://www.blogger.com/profile/13636684325805827850noreply@blogger.comBlogger12125tag:blogger.com,1999:blog-6879339790174736124.post-73950664474862908192020-11-02T01:30:00.002-08:002020-11-02T01:30:48.438-08:00Важные изменения в CRM. Много Deprecated<p>С 1 декабря 2020 года многие из привычных для нас функционалов CRM станут Deprecated.</p><p>К примеру Classic Interface или Process Dialog</p><p>Собственно статья с сайта MS. </p><p><a href="https://docs.microsoft.com/en-us/power-platform/important-changes-coming" target="_blank">https://docs.microsoft.com/en-us/power-platform/important-changes-coming</a><br /></p><p>на данный момент эти ограничения точно вступают в силу для CRM Online. Для OnPremise это нужно учитывать т.к. новые Rollup могут принести эти запреты к вам. А также планировать работы по изменению текущих наработок.</p><p><br /></p><p><br /></p>g.Naukovychhttp://www.blogger.com/profile/13636684325805827850noreply@blogger.com0tag:blogger.com,1999:blog-6879339790174736124.post-24888440997440172042020-10-29T00:43:00.014-07:002020-12-18T04:17:13.009-08:00MS CRM JavaScript<p> В MS CRM 365 версии изменился подход в работы с JS функциями.</p>
<p>Начиная с CRM 2011(v 5.x) основным js объектом для взаимодействия с формой был Xrm.Page в CRM 365 (v 9.x) этот способ все еще работает, однако уже стал "Deprecated". В этой статье будут записаны js методы, применяемые мной на практике сигнатуре CRM 365(v 9.x) и более ранних версиях.</p>
Наиболее полный список JS методов можно найти на по ссылке <a href="https://docs.microsoft.com/en-us/powerapps/developer/model-driven-apps/clientapi/reference" target="_blank">https://docs.microsoft.com/en-us/powerapps/developer/model-driven-apps/clientapi/reference</a><div><br /><span><a name='more'></a></span><div><br />
<p><b>Получить значение из поля</b></p>
<pre><code class="js">
formContext.getAttribute("[AttirubeSchemaName]").getValue(); // CRM 365:
Xrm.Page.getAttribute("[AttirubeSchemaName]").getValue(); //CRM2016:
</code></pre>
<p><b>Получить значение из поля типа Lookup</b></p>
<pre><code class="js">
// CRM365
var lookup = new Array();
lookup = Xrm.Page.getAttribute("[AttirubeSchemaName]").getValue();
if (lookup != null)
{
var name = lookup[0].name; //название записи
var id = lookup[0].id; // id записи
var entityType = lookup[0].entityType; // название сущности
}
//CRM2016
var lookup = new Array();
lookup = Xrm.Page.getAttribute("[AttirubeSchemaName]").getValue();
if (lookup != null)
{
var name = lookup[0].name; //название записи
var id = lookup[0].id; // id записи
var entityType = lookup[0].entityType; // название сущности
}
</code></pre>
<p><b>Получить значение из поля типа OptionSetValue</b></p>
<pre><code class="js">
formContext.getAttribute("[AttirubeSchemaName]").getValue(); //CRM 365
Xrm.Page.getAttribute("[AttirubeSchemaName]").getValue(); //CRM2016
</code></pre>
<p><b>Задать значение для поля</b></p>
<pre><code class="js">
formContext.getAttribute("[AttirubeSchemaName]").setValue(); // CRM 365:
Xrm.Page.getAttribute("[AttirubeSchemaName]").setValue(); //CRM2016:
</code></pre>
<p><b>Задать обязательность для поля</b></p><pre><code class="js">
// возможные варианты для requirementLevel
// none Необязательный для заполнения
// required Обязательный для заполнения
// recommended Рекомендован для заполнения
formContext.getAttribute("[AttirubeSchemaName]").setRequiredLevel(requirementLevel); // CRM 365:
Xrm.Page.getAttribute("[AttirubeSchemaName]").setRequiredLevel(requirementLevel); //CRM2016:
</code></pre>
<p><b>Задать значение для поля типа Lookup</b></p>
<pre><code class="js">
formContext.getAttribute("[AttirubeSchemaName]").setValue //CRM 365
(
[{ id: recorid, name: recordname, entityType: entityname}]
);
Xrm.Page.getAttribute("[AttirubeSchemaName]").setValue //CRM2016
(
[{ id: recorid, name: recordname, entityType: entityname}]
);
//recorid: GUID записи
//recordname: текст, который будет отображаться Lookup
//entityname: Название сущности, на которую настроен Lookup
</code></pre>
<p><b>Скрыть/показать поле на форме</b></p>
<pre><code class="js">
// в зависимости от значения параметра, который передается
// в фи-ю setVisible поле будет отображаться или скрываться
formContext.getControl("[AttirubeSchemaName]").setVisible(bool); //CRM 365
Xrm.Page.getControl("[AttirubeSchemaName]").setVisible(bool); //CRM2016
</code></pre>
<p><b>Сделать поле на форме неактивным/активным(Enable/Disable)</b></p>
<pre><code class="js">
// в зависимости от значения параметра, который передается
// в фи-ю setVisible поле будет отображаться или скрываться
formContext.getControl("[AttirubeSchemaName]").setDisabled(bool); //CRM 365
Xrm.Page.getControl("[AttirubeSchemaName]").setDisabled(bool); //CRM2016
</code></pre>
<p><b>Тип формы</b></p>
<pre><code class="js">
//
//0 Undefined
//1 Create
//2 Update
//3 Read Only
//4 Disabled
//6 Bulk Edit
formContext.ui.getFormType();// CRM 365
Xrm.Page.ui.getFormType(); //CRM2016:
</code></pre>
<p><b>Добавить обработчик OnChange для поля</b></p>
<pre><code class="js">
formContext.getAttribute(arg).addOnChange(myFunction) // CRM 365:
Xrm.Page.getAttribute(arg).addOnChange(myFunction) //CRM2016:
</code></pre>
<p><b>Сохранить форму</b></p>
<pre><code class="js">
//CRM 365
formContext.data.save(); //Сохранить
formContext.data.entity.save("saveandclose"); //Сохранить и закрыть
formContext.data.entity.save("saveandnew"); //сохранить и запустить новый
// отмена сохранения
function preventAutoSave(executionContext) {
var eventArgs = executionContext.getEventArgs();
if (eventArgs.getSaveMode() == 70) { // отменяет автосохранение
eventArgs.preventDefault(); // вызывает отмену соханения на форме
}
}
//CRM2016
Xrm.Page.data.save(); //Сохранить
Xrm.Page.data.entity.save("saveandclose"); //Сохранить и закрыть
Xrm.Page.data.entity.save("saveandnew"); //сохранить и запустить новый
</code></pre>
<p><b>Закрыть форму</b></p>
<pre><code class="js">
formContext.ui.close();//CRM 365
Xrm.Page.ui.close();//CRM2016
</code></pre>
<p><b>ID текущей записи</b></p>
<pre><code class="js">
formContext.data.entity.getId();//CRM 365
Xrm.Page.data.entity.getId();//CRM2016
</code></pre>
<p><b>ID текущего пользователя</b></p>
<pre><code class="js">
//CRM 365
var userSettings = Xrm.Utility.getGlobalContext().userSettings;
userSettings.userId
//CRM2016
Xrm.Page.context.getUserId();
</code></pre>
<p><b>Получение URL CRM</b></p>
<pre><code class="js">
//CRM 365
var globalContext = Xrm.Utility.getGlobalContext();
globalContext.getClientUrl();
//CRM2016
Xrm.Page.context.getClientUrl();
//в еще более старых версиях
Xrm.Page.context.getServerUrl();
</code></pre>
<p><b>Обновить Ribbon</b></p>
<pre><code class="js">
formContext.ui.refreshRibbon();//CRM 365
Xrm.Page.ui.refreshRibbon();//CRM2016
</code></pre></div></div>g.Naukovychhttp://www.blogger.com/profile/13636684325805827850noreply@blogger.com0tag:blogger.com,1999:blog-6879339790174736124.post-45075153934748072992020-10-29T00:43:00.005-07:002020-10-29T00:47:40.811-07:00Получение SDK Tools в CRM 365<p>Раньше мы скачивали SDK единым архивом с сайта Microsoft</p><p></p><ul style="text-align: left;"><li><a href="https://www.microsoft.com/en-us/download/details.aspx?id=50032" target="_blank">SDK 2016 (8.x)</a>, </li><li><a href="https://www.microsoft.com/en-us/download/details.aspx?id=44567" target="_blank">SDK 2015 (7.x)</a></li><li><a href="https://www.microsoft.com/en-us/download/details.aspx?id=40321" target="_blank">SDK 2013(6.x)</a><br /></li></ul><div>Однако для версии 365 (9.x) такого архива нет. Есть <a href="https://docs.microsoft.com/ru-ru/dynamics365/customerengagement/on-premises/developer/download-dynamics-365-sdk-v9">ссылка на статью с описанием SDK</a></div><div>Из SDK всегда брались актуальные приложения для работы с MS CRM. Путь их получения описан <a href="https://docs.microsoft.com/ru-ru/dynamics365/customerengagement/on-premises/developer/download-tools-nuget">здесь</a>. Далее опишу способ из этой статьи.</div><div><br /><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/g9dXELyKHnc" width="320" youtube-src-id="g9dXELyKHnc"></iframe></div><br /></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div><br /></div><p></p>g.Naukovychhttp://www.blogger.com/profile/13636684325805827850noreply@blogger.com0tag:blogger.com,1999:blog-6879339790174736124.post-52473359238549816082015-03-18T05:55:00.010-07:002020-10-26T01:59:44.440-07:00Раздача прав доступа для объекта SiteMap<div dir="ltr" style="text-align: left;" trbidi="on">
Сегодня неожиданно для себя узнал, что для каждого объекта в SiteMap можно дать отдельный доступ, независимо от его системы прав.<br />
Изначально это применяется для разделов, которые отображают кастомные или системные HTML страницы.<br />
<br />
<a name='more'></a><pre> <code class="css">
<SubArea Id="nav_productcatalog" ResourceId="Homepage_ProductCatalog" DescriptionResourceId="ProductCatalog_SubArea_Description" Icon="/_imgs/ico_18_productcatalog.gif" Url="/tools/productcatalog/productcatalog.aspx" AvailableOffline="false">
<privilege Entity="product" Privilege="Read" />
</SubArea>
</code>
</pre>
Тег <Privilege> позволяет раздавать права на объекты, и даже на другие сущности.<br />
<br />
<br />
Пример задачи.<br />
У вас есть сущность, которую рядовые пользователи не должны видеть в SiteMap, но могут выбирать в лукапах. При этом администраторы хотят видеть в SiteMap эту сущность.<br />
<br />
Для решения этой задачи в SiteMap можно настроить переназначение привилегий, подменив привилегии отображения сущности на привилегии другой сущности, которая доступна только администраторам.<br />
<br />
Можно либо создать отдельную сущность, либо использовать одну из стандартных, которая не используется в решении и к которой нет доступа рядовым пользователям, но есть доступ администраторам.<br />
Подробнее о <Privilege> читаем в <a href="https://msdn.microsoft.com/en-us/library/gg309286.aspx" target="_blank">MSDN</a>.<br />
<br />
<br />
P.S.<br />
<br />
Первый пост после годичного перерыва<span style="font-size: x-large;">☺</span><br />
<br /></div>
g.Naukovychhttp://www.blogger.com/profile/13636684325805827850noreply@blogger.com0tag:blogger.com,1999:blog-6879339790174736124.post-82149800481263619412013-12-03T05:53:00.000-08:002013-12-03T06:00:49.804-08:00Баг с Custom Actions MS CRM 2013<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="background-color: #f0faff; font-family: arial, verdana, geneva, lucida, 'lucida grande', helvetica, sans-serif; font-size: 13px;">Товарищи, в CRM 2013 обнаружился баг. Не переносится решение, если оно содержит Custom Actions</span><br />
<br style="background-color: #f0faff; font-family: arial, verdana, geneva, lucida, 'lucida grande', helvetica, sans-serif; font-size: 13px;" />
<a href="https://connect.microsoft.com/dynamicssuggestions/feedback/details/810477/crm-2013-solution-import-fails-when-plugins-attached-to-custom-action-processes-sdkmessage-are-included-in-solution">Голосуем за исправление бага</a><br />
<a href="https://connect.microsoft.com/dynamicssuggestions/feedback/details/810477/crm-2013-solution-import-fails-when-plugins-attached-to-custom-action-processes-sdkmessage-are-included-in-solution"><img border="0" src="http://connect.microsoft.com/Images/Connect-logo-New.png" /></a><br />
<br style="background-color: #f0faff; font-family: arial, verdana, geneva, lucida, 'lucida grande', helvetica, sans-serif; font-size: 13px;" />
<span style="background-color: #f0faff; font-family: arial, verdana, geneva, lucida, 'lucida grande', helvetica, sans-serif; font-size: 13px;">Баг на connect есть.</span><br />
<span style="background-color: #f0faff; font-family: arial, verdana, geneva, lucida, 'lucida grande', helvetica, sans-serif; font-size: 13px;">Проголосуйте, чтобы его быстрее исправили.</span><br />
<span style="background-color: #f0faff; font-family: arial, verdana, geneva, lucida, 'lucida grande', helvetica, sans-serif; font-size: 13px;"><br /></span>
<span style="background-color: #f0faff; font-family: arial, verdana, geneva, lucida, 'lucida grande', helvetica, sans-serif; font-size: 13px;">Информацию получил от Вячеслава </span><span style="background-color: #f0faff; font-family: arial, verdana, geneva, lucida, 'lucida grande', helvetica, sans-serif; font-size: 13px;">vako</span><span style="background-color: #f0faff; font-family: arial, verdana, geneva, lucida, 'lucida grande', helvetica, sans-serif; font-size: 13px;"> Колодяжного <a href="http://manzanagroup.ru/">Manzanagroup</a>.</span></div>
g.Naukovychhttp://www.blogger.com/profile/13636684325805827850noreply@blogger.com0tag:blogger.com,1999:blog-6879339790174736124.post-80611437528116794152013-11-18T00:14:00.002-08:002013-11-18T00:14:36.040-08:00Умножение в WorkFlow<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="MsoNormal">
На выходных нашел прикольную штуку:<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<br />
<div class="MsoNormal">
В CRM 2013 добавили операцию умножения, для работы с числами.<o:p></o:p></div>
<div class="MsoNormal">
</div>
<a name='more'></a><br /><br />
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXpxlzvUlKv2mFn8cl5SvPrs_AWA4TOcJgltzY9xYV_4VQDC1Rsp6xtEH3jNhi7rMrMsbqufCTJwSdrvGTSkUlax08xzm0jKi5EFZ0SzFp-txS_ohk9NHxIh5ruEo02pI7a0OXjVW1eng/s1600/WFMUL.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXpxlzvUlKv2mFn8cl5SvPrs_AWA4TOcJgltzY9xYV_4VQDC1Rsp6xtEH3jNhi7rMrMsbqufCTJwSdrvGTSkUlax08xzm0jKi5EFZ0SzFp-txS_ohk9NHxIh5ruEo02pI7a0OXjVW1eng/s320/WFMUL.png" width="320" /></a></div>
<br /></div>
g.Naukovychhttp://www.blogger.com/profile/13636684325805827850noreply@blogger.com0tag:blogger.com,1999:blog-6879339790174736124.post-23335783210812035552013-10-21T00:17:00.004-07:002013-10-21T02:02:50.206-07:00DisplayRule = EnableRule?<div dir="ltr" style="text-align: left;" trbidi="on">
Интересная особенность новой 2013. Если кнопка в toolbar должна быть заблокирована, то она просто пропадает.<br />
<br />
<a name='more'></a><br /><br />
То есть, независимо от того, должна кнопка отображаться или нет, если ее нажатие невозможно, кнопку мы не увидим.<br />
Что там дает эта информация? Теперь у нас появился механизм установки программных зависимостей отображения кнопок. Если раньше для этого необходимо было писать UnSupport js, то сейчас вешаем CustomRule для EnableRule и все.<br />
<br />
Как для меня, очень полезная особенность, которой не хватало в 2011<br />
Для тех кому интересно, для работы с Toolbar использую решение <a href="http://www.develop1.net/public/page/Ribbon-Workbench-for-Dynamics-CRM-2011.aspx">RibbonWorkbench</a>.<br />
<br />
Картинки постараюсь выложить чуть позже.</div>
g.Naukovychhttp://www.blogger.com/profile/13636684325805827850noreply@blogger.com0tag:blogger.com,1999:blog-6879339790174736124.post-68837747476268105492013-10-09T01:28:00.001-07:002013-10-09T01:30:14.077-07:00Отладка скриптов в CRM 2013<div dir="ltr" style="text-align: left;" trbidi="on">
Столкнулся с трудностями отладки скриптов в MS CRM 2013.<br />
<br />
<a name='more'></a><br />
Раньше для отладки скриптов в CRM 2011 я делал следующее:<br />
<br />
<ul style="text-align: left;">
<li>открывал в IE средства разработки</li>
<li>переходил на вкладку Script</li>
<li>находил по имени свой Web Resource и ставил в нем breakpoint</li>
<li>Нажимал "Начать отладку"</li>
</ul>
<div>
В CRM 2013 я не смог найти по имени свой Web Resource, и вообще не смог найти свой код на странице.</div>
<div>
<br /></div>
<div>
Для отладки я сделал следующее.</div>
<div>
<br /></div>
<div>
в текст JS я добавил оператор debugger;</div>
<div>
<br /></div>
<div>
пример:</div>
<div>
<br /></div>
<pre class="js" name="code">function OnLoad()
{
debugger;
alert('Hello world');
}
</pre>
<br />
Теперь выполняю все шаги как и в 2011, кроме поиска Web Resource.<br />
Когда выполнение дойдет до оператора debugger, сценарий остановится на этом слове и можно приступать к отладке.<br />
<br />
Способ не новый и применялся мной еще в CRM 4.<br />
Пока другого для 2013 не нашел.<br />
<pre class="js" name="code"></pre>
<br /></div>
g.Naukovychhttp://www.blogger.com/profile/13636684325805827850noreply@blogger.com0tag:blogger.com,1999:blog-6879339790174736124.post-24312541591144502592013-10-09T01:14:00.005-07:002013-10-09T01:29:34.512-07:00Баг в CRM 2013<div dir="ltr" style="text-align: left;" trbidi="on">
На прошлой неделе обнаружил баг в CRM 2013.<br />
Не работает отображение навигационных элементов, которые раньше были скрыты.<br />
<br />
<a name='more'></a><br /><br />
Выполнял следующий код<br />
<br />
<pre class="js" name="code">function visible(par)
{
Xrm.Page.ui.navigation.items.forEach(function (item, index) {
item.setVisible(par);
});
}
function Visible()
{
visible(true);
}
function UnVisible()
{
visible(false);
}
</pre>
Функция UnVisible() cкрывает все панели навигации.<br />
Функция Visible() должна их отобразить, но она это не делает.</div>
g.Naukovychhttp://www.blogger.com/profile/13636684325805827850noreply@blogger.com0tag:blogger.com,1999:blog-6879339790174736124.post-82856515892703072012013-03-06T11:54:00.000-08:002014-03-07T00:08:56.496-08:00С 8 марта. Украшаем CRM<div dir="ltr" style="text-align: left;" trbidi="on">
Приветствую всех. Всегда хотелось немного изменить CRM, чтобы был более дружелюбен к пользователям. Очередным поводом стал праздник 8 марта.<br />
И так задача повесить праздничную картинку. Я выбрал для этого ToolBar.<br />
Для изменения ToolBar необходимо сделать следующее.<br />
<a name='more'></a><br />
<br />
<ol style="text-align: left;"><ol>
<li>Перейти в корень сайта MS CRM</li>
<li>В корень сайта необходимо положить файл <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFqTYi3tZjZM8ncutB0EeD-L__i76iLFOVGOhAg8N7kiRL3E9yLKRnP-6IAZFZrqQFpeCtkkYs31CAghgb6B9AUrvWpZYFSlrtjqh_Gcs5GcGOK9Mv_CIqLre2vdhz3ZI5U-96qlzFMCY/h48/8march.gif">8march.gif</a></li>
<li>Найти файл main.aspx</li>
<li>Сохранить его в отдельное место.</li>
<li>Открыть файл и найти область head</li>
<li>В конец области head необходимо добавить следующий код</li>
<pre class="js" name="code"><style type="text/css">
.bgimg {
background-image:url(/8march.gif);
background-repeat:repeat-x;
}
</style>
</pre>
<li>Найти строку <div id="crmTopBar" class="ms-crm-TopBarContainer ms-crm-TopBarContainerGlobal" runat="server"></li>
<li>Заменить найденную строку на <div id="crmTopBar" class="bgimg" runat="server"></li>
</ol>
</ol>
<div>
</div>
<div>
<br /></div>
<div>
После этого у Вас на всех организациях MS CRM будет следующая картинка</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpYAbVFhQOm9SE2hMCcwvEcbHypgKHHJrRLDGIScAc3YfMaIO0Fdm2fQUN8D5jqU5FrVtry8e08UZuigUzSket3UvfNidGhY0B0VcBbn2gyhpnfXR6MIPgDSHvJE0S7I-RUWMhQy_Pe8I/s1600/8marchcrm.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpYAbVFhQOm9SE2hMCcwvEcbHypgKHHJrRLDGIScAc3YfMaIO0Fdm2fQUN8D5jqU5FrVtry8e08UZuigUzSket3UvfNidGhY0B0VcBbn2gyhpnfXR6MIPgDSHvJE0S7I-RUWMhQy_Pe8I/s320/8marchcrm.png" height="161" width="320" /></a></div>
<div>
<br /></div>
<br />
Собственно вместо картинки с ромашками или подсолнухами (кому что нравится ), может быть любая картинка.<br />
<br />
Если у Вас после этого возникли проблемы с СРМ, верните все изменения в файле main.aspx в исходное состояние.<br />
<br />
Еще раз всех представительниц прекрасного пола с наступающим праздником.<br />
<br />
<br /></div>
g.Naukovychhttp://www.blogger.com/profile/13636684325805827850noreply@blogger.com0tag:blogger.com,1999:blog-6879339790174736124.post-18375580074972274812012-03-27T13:22:00.000-07:002012-03-27T13:37:48.662-07:00Customer portal или как исправить то, что вроде правильно написано.<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
Customer portal или как исправить то, что вроде правильно написано.</h2>
<div style="text-align: justify;">
Вчера при использовании Customer portal столкнулся со
следующей проблемой. Если изменять данные из портала, то изменения в портале
корректно отображаются. <span style="font-family: "Times New Roman"; font-size: 12pt;">Если же изменить данные через CRM, то в портале ничего не изменяется.
Очистка куков, истории броузера ни к чему не приводят. Единственное что помогает
- это рестарт пула приложения. Заставить клиентов каждый раз перегружать пул
пока не получается. </span><br />
<span style="font-family: "Times New Roman"; font-size: 12pt;"></span><br />
<a name='more'></a><span style="font-family: "Times New Roman"; font-size: 12pt;">Главная странность заключается в том, что при запросе
данных от CRM с помощью XRM библиотеки, возвращаются неактуальные данные. Вот
что с этим делать и почему это так было вообще не ясно. Я даже оставил свой
вопрос на codeplex, но ответа нет до сих пор. Еще нашёл аналогичный вопрос 2010
года тоже без ответа. Но удача мне все же улыбнулась. Я так и не понял почему это
происходит, но судя по тем статьям, что я прочитал библиотеки кешируют данные,
которые получаются через LINQ запросы. Один из вариантов нормальной работы -
это очистка кеша. Для этого необходимо вызвать следующий код:</span><span style="font-family: "Times New Roman"; font-size: 12pt;"><br /></span></div>
<pre class="js" name="code">//название сущности, кешированные данные которой я хочу удалить
string entityname = "contact";
BaseCache baseCache = Microsoft.Xrm.Client.Caching.CacheManager.GetBaseCache();
baseCache.Remove(string.Format("adxdependency:crm:entity:{0}",entityname));
</pre>
<span style="font-family: "Times New Roman"; font-size: 12pt;">
Не уверен, что этот способ оптимален, и совсем правильный, но возможно это кому-нибудь поможет.</span></div>g.Naukovychhttp://www.blogger.com/profile/13636684325805827850noreply@blogger.com1tag:blogger.com,1999:blog-6879339790174736124.post-2278531064748965642012-03-24T05:10:00.002-07:002020-10-26T01:50:33.596-07:00Немного о Java script часть 1<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: justify;" trbidi="on">
<h3 style="text-align: left;">
Немного о Java script часть 1 </h3>
В этой статье мне хотелось описать начало разработки скриптов на формах в CRM2011. <br />
<br />
Основным отличием в аритектуре JS - скриптов CRM2011 от CRM4 является появление Web Resource. Если раньше приходилось хранить скрипты непосредственно на форме или же подключать файлы, хранящиеся на жёстком диске, то сейчас коды скриптов хранятся в отдельных ресурсах, и уже эти ресурсы подключаются на форму. Теперь можно написать один общий код и подключить его на несколько форм одновременно. И править тоже только в одном месте). Рекомендую называть веб-ресурсы таким образом, чтобы исходя из их названия можно было понять к какой сущности они относятся и какого типа функционал в них размещен. <br />
<a name='more'></a><div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: justify;">
Создать новый веб-ресурс можно следующим способом:</div>
<div class="separator" style="clear: both; text-align: justify;">
Перейдем на форму веб-ресурсов через навигационную панель </div>
<div class="separator" style="clear: both; text-align: justify;">
Settings->Customization->Customize the System->Web Resources->New</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsivxi33Mrjhm7ITxXNiqAwyht2MCD67ofk2huSdHSuRkXYcF6JwiDxemuT8_9VjBc1nq8sly5OJaeZHJxEHXF7S44e9brEzib8MN3tdWMeM2zy-GHSypsj8NJCGlLJQf9V-uoLRWb1M4/s1600/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5+%D0%92%D0%B5%D0%B1-%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D0%BE%D0%B2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="257" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsivxi33Mrjhm7ITxXNiqAwyht2MCD67ofk2huSdHSuRkXYcF6JwiDxemuT8_9VjBc1nq8sly5OJaeZHJxEHXF7S44e9brEzib8MN3tdWMeM2zy-GHSypsj8NJCGlLJQf9V-uoLRWb1M4/s320/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5+%D0%92%D0%B5%D0%B1-%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D0%BE%D0%B2.JPG" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
</div>
<div class="separator" style="clear: both;">
Заполните поля аналогично с рисунком. Укажите в поле Type Script. Чтобы задать содержимое веб-ресурса нажмите кнопку Text Editor. У Вас откроется окно редактора, в котором Вы сможете добавлять свои функции. Давайте добавим функцию, которая будет срабатывать при загрузке формы сущности Account.</div>
<div class="separator" style="clear: both;">
</div>
<pre><code class="js">function onload()
{
alert("Hello world!!!");
}
</code>
</pre>
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both;">
Скопируйте этот код в редактор веб-ресурса. </div>
<div class="separator" style="clear: both;">
После этого нажмите кнопку <b>Save</b>. После сохранения нажмите кнопку <b>Publish.</b><span class="Apple-tab-span" style="white-space: pre;"> </span></div>
<div class="separator" style="clear: both;">
<b>Поздравляю Вы создали веб-ресурс.</b><span class="Apple-tab-span" style="white-space: pre;"> </span></div>
<div class="separator" style="clear: both;">
<span class="Apple-tab-span" style="white-space: pre;"><br /></span></div>
<div class="separator" style="clear: both;">
Теперь давайте добавим его на форму. </div>
<div class="separator" style="clear: both;">
Для этого перейдем в кастомизацию сущности <b>Account</b></div>
<div class="separator" style="clear: both;">
Settings->Customization->Customize the System->Entities->Account->Forms.</div>
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both;">
У Вам откроется список форм. Выберите двойным кликом форму <b>Main</b>, и у Вас откроется следующая форма. </div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOlSomFwr73sbSnydfwv9VRLeJMWoQuYgR9wZdDNVNXkkGcbbf_IR7x1ms8v2hOckB-YnEuux9eA9glmSskML8SHOVAVaMYCNQ8AHqeo4tus_UTFTdITNfcD8STb_7g-bzsQ9m3Kg5Se8/s1600/%D0%9A%D0%B0%D1%81%D1%82%D0%BE%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F+%D1%84%D0%BE%D1%80%D0%BC%D1%8B.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="205" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOlSomFwr73sbSnydfwv9VRLeJMWoQuYgR9wZdDNVNXkkGcbbf_IR7x1ms8v2hOckB-YnEuux9eA9glmSskML8SHOVAVaMYCNQ8AHqeo4tus_UTFTdITNfcD8STb_7g-bzsQ9m3Kg5Se8/s320/%D0%9A%D0%B0%D1%81%D1%82%D0%BE%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F+%D1%84%D0%BE%D1%80%D0%BC%D1%8B.JPG" width="320" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
Нажмите на кнопку Form Properties. У Вас откроется следующая форма.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsXX9-oKPa_RexqPs6HFYVs59tJN3W02mDf9_SiQpmoeDv8qktBRjVoKcIv8bC2mJ34CjPkJG6DhGpxO1GwE99hDxIJdLnW6XAhBHHOdVIT5yaZyPQ4iYKmqezA9LWcPcukUHESyKk_ds/s1600/%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5+%D0%B2%D0%B5%D0%B1-%D1%80%D0%BA%D1%81%D1%83%D1%80%D1%81%D0%BE%D0%B2+%D0%BD%D0%B0+%D1%84%D0%BE%D1%80%D0%BC%D1%83.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="312" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsXX9-oKPa_RexqPs6HFYVs59tJN3W02mDf9_SiQpmoeDv8qktBRjVoKcIv8bC2mJ34CjPkJG6DhGpxO1GwE99hDxIJdLnW6XAhBHHOdVIT5yaZyPQ4iYKmqezA9LWcPcukUHESyKk_ds/s320/%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5+%D0%B2%D0%B5%D0%B1-%D1%80%D0%BA%D1%81%D1%83%D1%80%D1%81%D0%BE%D0%B2+%D0%BD%D0%B0+%D1%84%D0%BE%D1%80%D0%BC%D1%83.JPG" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both;">
Нажмите на выделеную кнопку Add и добавте на форму созданный Вами веб-ресурс.</div>
<div class="separator" style="clear: both;">
Попробуем разобраться, что произошло сейчас и к чему это приведет. Мы добавили веб-ресурс. Его код добавится при загрузке на форму. Таким образом у нас при загрузке добавляется функция. Но эта функция нигде не вызывается. Возникает логичный вопрос: зачем создавать функцию, а не писать сразу исполняемый код? Это сделано потому, что в момент загрузки ресурса на форме еще нет элементов и при обращении к ним произойдет ошибка. Значит необходимо вызвать нашу функцию и сделать это при загрузке формы. Для этого обратите внимание на выделенную синим прямоугольником часть на предыдущем скрине. Здесь тоже есть кнопка Add и два выпадающих списка. Изучите содержимое этих списков. В списке Control содержатся контролы и разделы формы. В списке Event возможные события для выбранного контрола. Оставим содержимое списков без изменений и нажмем кнопку Add. Откроется следующая форма. </div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-68IfiWxyJrSyP5FQ5Solx7v9fvKxxeAGo_ze882i-OlgZIinPrl3EyFwp5Zsb0oYHxTewM-JlEVLLOtAMy5tatbhcgp24mKp3cgY-xOppQwik87_9_uIxr9qcc5eL6b3U6PYpgpPwQc/s1600/%25D0%2594%25D0%25BE%25D0%25B1%25D0%25B0%25D0%25B2%25D0%25BB%25D0%25B5%25D0%25BD%25D0%25B8%25D0%25B5+%25D1%2581%25D0%25BE%25D0%25B1%25D1%258B%25D1%2582%25D0%25B8%25D1%258F.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-68IfiWxyJrSyP5FQ5Solx7v9fvKxxeAGo_ze882i-OlgZIinPrl3EyFwp5Zsb0oYHxTewM-JlEVLLOtAMy5tatbhcgp24mKp3cgY-xOppQwik87_9_uIxr9qcc5eL6b3U6PYpgpPwQc/s320/%25D0%2594%25D0%25BE%25D0%25B1%25D0%25B0%25D0%25B2%25D0%25BB%25D0%25B5%25D0%25BD%25D0%25B8%25D0%25B5+%25D1%2581%25D0%25BE%25D0%25B1%25D1%258B%25D1%2582%25D0%25B8%25D1%258F.JPG" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
</div>
<div class="separator" style="clear: both;">
Здесь мы видим в верхней части два выпадающих поля:</div>
<div class="separator" style="clear: both;">
Library - содержит список добавленных на форму веб-ресурсов</div>
<div class="separator" style="clear: both;">
Function - название функции, которую мы хотим "повесить на выбранное нами событие из выбранного веб-ресурса"</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both;">
Два CheckBox:</div>
<div class="separator" style="clear: both;">
Enabled - Включает и отключает событие</div>
<div class="separator" style="clear: both;">
Pass execution context as first parameter - добавляет в качестве первого параметра функции контекст.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both;">
Текстовое поле параметров</div>
<div class="separator" style="clear: both;">
Записанные здесь через запятую значения параметров передаются в функцию.</div>
<div style="clear: both;">
Заполните поля, как показано на рисунке, нажмите ОК, сохраните изменения в свойствах формы, после чего сохраните и опубликуйте саму форму. Терерь перейдем на форму account и увидим что получилось.</div>
<br />
<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq4Vrq9tnhWmDPHuJwMUJ2aL2cvuAKv-NsD2_YTvGEi40A998R587Wdtc5KpKMlBAL-iWaQzzJ0E9JF9FqXJZvsJXTqflzWWleEWwc9YnWgddmd58Tc7nYGwtm8K3ILoLey7_OJaFdZVo/s1600/%D0%98%D1%82%D0%BE%D0%B3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq4Vrq9tnhWmDPHuJwMUJ2aL2cvuAKv-NsD2_YTvGEi40A998R587Wdtc5KpKMlBAL-iWaQzzJ0E9JF9FqXJZvsJXTqflzWWleEWwc9YnWgddmd58Tc7nYGwtm8K3ILoLey7_OJaFdZVo/s320/%D0%98%D1%82%D0%BE%D0%B3.JPG" width="320" /></a></div>
<br />
<br /></div>
</div>g.Naukovychhttp://www.blogger.com/profile/13636684325805827850noreply@blogger.com1