[CRM] JavaScript в CRM 2011

Привычка полагаться на IntelliSense приводит к тому, что когда его нет, начинаешь забывать как делать какие-то простые вещи. До сих пор регулярно сталкиваюсь с тем, что для написания банальных действий с CRM 2011 из JavaScript открываю Google.

Поэтому немного полезной информации, чтобы больше не забывать:

Работа с полями

Во-первых, чтобы скрипт работал на форме его необходимо добавить в веб-ресурс и добавить этот веб-ресурс непосредственно на форму.

Получить значение текстового поля «Action Code»

Xrm.Page.data.entity.attributes.get("actioncode").getValue();

Сохранить значение «AC231» в текстовое поле «telephone»

Xrm.Page.data.entity.attributes.get("actioncode").setValue("AC231");

Получить значение пиклиста «type»

Xrm.Page.data.entity.attributes.get("type").getValue(); //Цифровое значение
Xrm.Page.data.entity.attributes.get("type").getText(); //Текстовое значение

«undefined» если значение не выбрано.

Установить значение 2 пиклиста «type»

Xrm.Page.data.entity.attributes.get("type").setValue(2);
Текстовое значение на листе будет выбрано автоматически.

Установить значение поля с датой «scheduled» на сегодня

var today = new Date();
Xrm.Page.data.entity.attributes.get("scheduled").setValue(today);

Узнать завтрашную дату можно так

var tomorrow = new Date();tomorrow.setDate(tomorrow.getDate() + 1);

К моему стыду я дико не люблю работу с датой в JavaScript и не люблю когда возникают такие задачи.

Отключить (Disable) поле «name»

Xrm.Page.ui.controls.get("name").setDisabled(true);

Скрыть (Hide) поле «name»

Xrm.Page.ui.controls.get("name").setVisible(false);

Скрыть (Hide) секцию в табе

Xrm.Page.ui.tabs.get("tabname").sections.get("sectionname").setVisible(false);

Работа с формой

Сохранить форму

Xrm.Page.data.entity.save();

Сохранить и закрыть форму

Xrm.Page.data.entity.save("saveandclose");

Остановить сохранение формы
Вешаемся на событие формы OnSave.

function formOnSave(context)
{
  var shouldSave = true;
  if (shouldSave) {
    alert("Unable to save because of some reason or the other.");
    context.getEventArgs().preventDefault();
  }
}

При настройке события необходимо поставить галочку в поле «Pass execution context as first parameter».

Закрыть форму

Xrm.Page.ui.close();
Если пользователь вносил какие-либо изменения он увидит сообщение для подтверждения.

Тип формы
CRM предлагает следующие типы форм:

Create — 1, открыта форма для создания новой записи
Update — 2, открыта форма существующей записи
Read Only — 3, форма только на чтение
Disabled — 4, неактивная форма
Bulk Edit — 6, форма массового редактирования.

Xrm.Page.ui.getFormType();

Получить GUID текущей записи

Xrm.Page.data.entity.getId();

Получить GUID текущего пользователя

Xrm.Page.context.getUserId();

Получить LCID текущего пользователя и организации

Xrm.Page.context.getUserLcid(); //For User
Xrm.Page.context.getOrgLcid(); //For Organization

Список LCID на MSDN здесь.

Получить URL сервера CRM

Xrm.Page.context.getServerUrl();

Лукапы

Получить GUID значение лукапа «accountid»

Xrm.Page.data.entity.attributes.get("accountid").getValue()[0].id;

Получить текстовое значение лукапа «accountid»

Xrm.Page.data.entity.attributes.get("accountid").getValue()[0].name;

Открыть диалоговое окно
В CRM 2011 есть обертка для window.showModalDialog(), функция называется openStdDlg().

openStdDlg(sPath, oArgs, iWidth, iHeight, bResizable, bModeless, sCustomWinParams);

где:
sPath — ссылка на окно,
oArgs — объект с параметрами,
iWidth — ширина окна,
iHeight — высота окна,
bResizable — можно ли изменять размер окна,
bModeless — ,
sCustomWinParams — пользовательские параметры, передаваемые в окно.

Открыть форму сущности
Следующий пример открывает форму существующей сущности incident с GUID = 47c2bb7b-ba62-4afb-9b10-1a24c7a2799e в новом окне.

window.open(Xrm.Page.context.getServerUrl() +
"/main.aspx?etn=incident&pagetype=entityrecord&id=" +
encodeURIComponent("{47c2bb7b-ba62-4afb-9b10-1a24c7a2799e}"),
"_blank",
"location=no,menubar=no,status=no,toolbar=no",
false);

На мой взгляд стоит использовать функции, появившиеся в 8 Rollup, но в специфичных случаях приходится использовать стандартные.

Обновить состояние рибон

Xrm.Page.ui.refreshRibbon();

Если Вы нашли ошибку, пожалуйcта выделите ее и нажмите Shift + E или нажмите здесь чтобы информировать меня. Спасибо.

Добавить комментарий