MS CRM ScriptXtractor

Утилит для извлечения клиентских скриптов из файла кастомизации Microsoft Dynamics CRM существует несколько: одни являются надстройками над MS Word, другие - обычными Windows-приложениями.

На самом деле, задача эта не простая, а очень простая - файл кастомизации представляет собой XML-документ (схема и описание появились в SDK последних версий).

А где XML, там и XSLT : )

Извлекать скрипты будем динамически верстая HTML-таблицу с навигацией. И чтобы применить трансформацию к нашей кастомизации достаточно нескольких строк на javascript.


function LoadXml()
{
/* получаем путь к выбранному файлу кастомизации */
var customizationFile = document.getElementById("file");

/* в элемент DIV отобразим результат */
var result = document.getElementById("result");

/* загружаем таблицу стилей - наш XSL */
var xsl = new ActiveXObject("MSXML.DOMDocument");
xsl.load("ScriptXtractor.xsl");

/* загружаем XML с кастомизацией из выбранного файла */
var xmlCustomization = new ActiveXObject("MSXML.DOMDocument");
xmlCustomization.load(customizationFile.value);

/* тут-то и происходит трансформация */
var str = xmlCustomization.transformNode(xsl);

/* эскейпим символы для корректного отображения */
str = str.replace(/</g, "<").replace(/>/g, ">").replace(/&/g, "&");

result.innerHTML = str;
}

Содержимое XSL-файла полностью не привожу, он есть в архиве и никакой сложности для понимания не представляет. Остановлюсь лишь на двух основных вещах: формировании выпадающего списка с перечнем сущностей и вёрсткой таблицы.


<!-- определяем выпадающий список -->
<select onchange="NavigateToTheEntity(this)">
<!-- перебираем в файле кастомизации все элементы сущностей CRM -->
<xsl:for-each select="ImportExportXml/Entities/Entity">
<!-- определяем сортировку по имени сущности -->
<xsl:sort select="Name" order="ascending"/>
<!-- определяем переменную для хранения ObjectTypeCode сущности для скрипта навигации -->
<xsl:variable name="otc" select="ObjectTypeCode"></xsl:variable>
<!-- создаём элемент списка с именем сущности -->
<option value="{$otc}" >
<xsl:value-of select="Name"/> (<xsl:value-of select="ObjectTypeCode"/>) <xsl:value-of select="LocalizedName"/>
</option>
</xsl:for-each>
</select>

Думаю, основная идея XSL-преобразования понятна. Далее проходим по каждой сущности и формируем таблицу со скриптами: сначала получаем скрипты формы (события OnLoad/OnSave), затем для каждого поля.


<!-- перебираем скрипты формы -->
<xsl:for-each select="FormXml/forms/entity/form/events/event">
<xsl:choose>
<!-- это скрипт приложения - доступный для редактирования пользователем -->
<xsl:when test="self::node()[@application = 'true']">
<tr class="appScript">
<td class="fieldNameCell">
<!-- имя события хранится в атрибуте name -->
<div class="eventLabel">Form event: <xsl:value-of select="@name"/></div>
</td>
<td class="scriptCell">
<pre>
<!-- текст скрипта - в элементе script -->
<xsl:value-of select="script"/>
</pre>
</td>
</tr>
</xsl:when>

<xsl:otherwise>
<!-- а это уже системные скрипты CRM (они не видны при настройке) -->
...
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>

 

Cкрипты не извлекаются из файла в прямом смысле слова, просто исходную кастомизацию преобразуем (трансформируем) в таблицу.

Microsoft Dynamics CRM ScriptXtractor

Скачать утилиту со всеми приведёнными в статье кодами можно по ссылке снизу.

Прикрепленный файлРазмер
MSCRMScriptXtractor.zip3.01 кб
Ваша оценка: Пусто Средняя: 2.9 (27 votes)

Комментарии

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.
  • Syntax highlight code surrounded by the {syntaxhighlighter SPEC}...{/syntaxhighlighter} tags, where SPEC is a Syntaxhighlighter options string or "class="OPTIONS" title="the title".

Подробнее о форматировании

Image CAPTCHA
Enter the characters shown in the image.
Работает на Drupal, система с открытым исходным кодом.