Продолжение предыдущего поста: Изменение CRM форм с помощью JavaScript.

Почему мы пишем crmForm.all.name? Давайте посмотрим на исходный код HTML стандартной формы Организации (account). Исходный код страницы CRM можно получить несколькими способами, самый простой – открываем любую организацию и жмем CTRL+N, после этого «Вид» -> «Просмотр HTML-кода»

Вот, что у меня получилось:

<html>
<head>
<META HTTP-EQUIV=»Content-Type» CONTENT=»text/html; CHARSET=utf-8″><script language=»JavaScript»>var LOCID_DEVERROR_BADTYPE_STRING = «Этот элемент управления принимает только строковые значения или пустое значение\u002e»;
var LOCID_LU_SELECT_VALUE_FOR = «Необходимо выбрать значение для \»\u007b0\u007d\»\u002e»;
var LOCID_LU_SELECT_VALUE = «Щелкните для выбора значения\u002e»;
var LOCID_NO_JAVASCRIPT_URL = «В это поле невозможно ввести сценарий JScript\u002e»;

</script>
<link rel=»stylesheet» type=»text/css» href=»/_common/styles/global.css»>
<script language=»javascript» src=»/_controls/util/util.js»></script>
<script language=»javascript» src=»/_common/scripts/global.js»></script>
<script language=»javascript» src=»/_common/windowinformation/windowinformation.aspx»></script>
<link rel=»stylesheet» type=»text/css» href=»/_common/styles/fonts.aspx»>

<title>Организация: Название организации</title>
<head>

<body scroll=»no»>
<table class=»layout» cellspacing=»0″ cellpadding=»0″>
<col width=»180″><col>
<tr height=»80″>
<td colspan=»2″>

<form name=»crmForm» class=»crm» setinitialfocus=»true» formtype=2>
<input type=»hidden» name=»crmFormRootElem» value=»account»/>
<tr>
<td>
<div id=»Notifications» MaxHeight=»62″ class=»Notifications» …></div>
</td>
</tr>

<input type=»hidden» id=»address1_addressid» class=»hid» value=»b3820430-99a8-da11-9330-0003ff4f110d» req=»0″>
<input type=»hidden» id=»address2_addressid» class=»hid» value=»b4820430-99a8-da11-9330-0003ff4f110d» req=»0″>

<input type=’text’ id=»name» tabindex=»1000″ maxlength=»160″ class=»txt» value=»Account Name» req=»2″>

<input type=’text’ id=»telephone1″ tabindex=»1050″ maxlength=»50″ class=»txt» value=»" req=»0″>

</form>

<form name=»crmFormSubmit» method=»post»>
<input type=»hidden» name=»crmFormSubmitXml»>
<input type=»hidden» name=»crmFormSubmitMode»>
<input type=»hidden» id=»crmFormSubmitId» name=»crmFormSubmitId» value=»{B2820430-99A8-DA11-9330-0003FF4F110D}»>
<input type=»hidden» name=»crmFormSubmitObjectType» value=»1″>
<input type=»hidden» id=»crmFormSubmitObjectTypeName» value=»account»>
<input type=»hidden» name=»crmFormSubmitSecurity» value=»852407″>
<input type=»hidden» name=»crmFormSubmitOnline» value=»1″>
<input type=»hidden» name=»CRMWRPCToken» value=»cOKuMI6hMvGJvvF7fhn+hArYlOU=»>
<input type=»hidden» name=»CRMWRPCTokenTimeStamp» value=»632774427771668464″>
</form>

</body>
</html>

Здесь видим строки локализации, ссылки на файлы стилей (.css) и подключенный файлы JavaScript (.js). Мы можем даже подключить что-то свое, но этого делать не рекомендуется, т.к. возможна некорректная работа приложения и при апгрейде на новую версию CRM изменения не перенесутся.

Однако, javascript-скрипты на стороне клиента обычно привязаны к отображаемой форме, форме CRM – crmForm. Тэг формы всегда включен в тело страницы, поэтому можем найти элемент <form name=»crmForm» class=»crm» setinitialfocus=»true» formtype=2>.

Причина, по которой мы пишем код типа crmForm.all.name очень проста – имя атрибута формы называется crmForm. Если бы было другое название, например CrmWindow, то пришлось бы писать CrmWindow.all.name. Вообще-то есть альтернативный вариант crmForm, можно писать document.all.name, т.к. document (HTML документ) содержит все дочерние элементы. Но остановимся на crmForm как общепризнанном варианте.
Итак, crmForm – это объект который содержит все элементы CRM формы. Если нужна дополнительная информация по элементу FORM, ссылка на документацию в MSDN. У формы есть свойство, названное «all«, которое представляет собой коллекцию всех подчиненных элементов. Поэтому crmForm.all сожержит все метки и поля для ввода, которые нас интересуют. Чтобы получить доступ к определенному элементу, можно сделать так:

  • crmForm.all.item(«id»)
  • crmForm.all.item(1)
  • crmForm.all.namedItem(«name»)

Короткая форма записи очень простая crmForm.all.item, где item –это имя поля в схеме.

В документе HTML есть еще и другая форма – crmFormSubmit. Ее не видно, когда редактируете сущность, но все изменения в атрибутах передаются в нее, когда вы жмете на кнопку сохранить. Можно получить доступ к значения формы crmFormSubmit так же как и для crmForm:

  • alert(crmFormSubmit.all.crmFormSubmitObjectTypeName.value);
  • alert(crmFormSubmit.all.crmFormSubmitObjectType.value);

покажет «account» and «1″. Код типа объект так же доступен и в crmForm, используйте crmForm.ObjectTypeCode.

Рассмотрим пример изменения стиля названия поля для формы организации(account) с помощью DHTML. Изменим цвет поля для ввода.

Введите следующий код для события OnLoad формы организации:
crmForm.all.name.style.backgroundColor = «#EEEEEE»;
crmForm.all.name.style.color = «#0000FF»;
Включите событие OnLoad и выберите «Создать форму». Вы увидите, что цвет background поля – светло серый и цвет текста – синий.

Пару примеров использования javascript-кода в клиент-серверном программировании для Microsoft Dynamics CRM

  1. Работа с JavaScript в MS CRM 3.0
  2. Работа с JavaScript в MS CRM 3.0. Часть 2
  3. Через javascript можно даже обратиться к веб-службам MS CRM: Работа с веб-сервисами через javascript в MS CRM 3.0

With best regards to Michael Höhne