В этой статье я буду писать о своем опыте использования JavaScript в MS Dynamics CRM 2011.
Работа с полями
Во-первых, чтобы скрипт работал на форме его необходимо добавить в веб-ресурс и добавить этот веб-ресурс непосредственно на форму.
Получить значение текстового поля «telephone»
Xrm.Page.data.entity.attributes.get("telephone1").getValue();
Сохранить значение «123» в текстовое поле «telephone»
Xrm.Page.data.entity.attributes.get("telephone1").setValue("123");
Получить значение пиклиста «address1_addresstypecode»
Xrm.Page.data.entity.attributes.get("address1_addresstypecode").getValue(); //Цифровое значение Xrm.Page.data.entity.attributes.get("address1_addresstypecode").getText(); //Текстовое значение
Имейте в виду, что если значение пиклиста не выбрано, то getValue()/getText() вернет «undefined».
Установить значение 2 пиклиста «address1_addresstypecode»
Xrm.Page.data.entity.attributes.get("address1_addresstypecode").setValue(2);
Установить значение поля с датой «birthdate» на сегодня
var today = new Date(); Xrm.Page.data.entity.attributes.get("birthdate").setValue(today);
Для выражения Xrm.Page.data.entity.attributes.get() есть сокращенный вариант Xrm.Page.getAttribute().
Если поле помечено на форме, что оно доступно только для чтения (ReadOnly) чтобы его изменить необходимо выставить ему SubmitMode = Always.
Xrm.Page.getAttribute("fieldName").setSubmitMode("always");
Отключить (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.
Обязательно надо поставить галочку напротив «Pass execution context as first parameter». Без этого не сработает.
function formOnSave(executionObj) { var shouldSave = true; if (shouldSave) { alert("Unable to save because of some reason or the other."); executionObj.getEventArgs().preventDefault(); } }
Закрыть форму
Пользователю будет показано напоминание если он не сохранил изменения.
Xrm.Page.ui.close();
Открыть форму создания
entityType — имя сущности (entity logical name).
Xrm.Utility.openEntityForm(entityType);
Открыть форму создания с заполненными полями
parameters — объект с параметрами,
entityType — имя сущности (entity logical name).
var entityType = "account"; var parameters = {}; // Заполняем лукап "accountid" parameters["accountid"] = "b053a39a-041a-4356-acef-ddf00182762b"; parameters["accountidname"] = "Имя организации" // Следующий параметр только для поля типа Клиент, где надо указать Контакт это или Организация parameters["accountidtype"] = "account"; // Заполняем текстовое поле "name" parameters["name"] = "Test"; // Заполняем пиклист "address1_addresstypecode" parameters["address1_addresstypecode"] = "3"; // Заполняем булево поле Да/Нет "donotemail" parameters["donotemail"] = "1"; Xrm.Utility.openEntityForm(entityType, null, parameters);
Подробнее здесь Set Field Values Using Parameters Passed to a Form.
Открыть форму существующей сущности
id — GUID экземпляра сущности,
entityType — имя сущности (entity logical name).
Xrm.Utility.openEntityForm(entityType, id);
Определить тип формы
Значения тип форм (Form type codes):
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 здесь.
Получить URL сервера CRM
Xrm.Page.context.getServerUrl();
С выходом 12-го роллапа функция устарела и теперь рекоммендуется делать так
Xrm.Page.context.getClientUrl();
а чтобы работало всегда то так
var ORG_URL = (typeof(Xrm.Page.context.getClientUrl) == "function") ? Xrm.Page.context.getClientUrl() : Xrm.Page.context.getServerUrl();
Получить имя организации
Xrm.Page.context.getOrgUniqueName();
Лукапы
Получить GUID значение лукапа «contactid»
Xrm.Page.data.entity.attributes.get("contactid").getValue()[0].id;
Получить текстовое значение лукапа «contactid»
Xrm.Page.data.entity.attributes.get("contactid").getValue()[0].name;
Функция, которая заполняет лукап
Параметры:
fieldName — название поля,
id — GUID экземпляра сущности,
name — название сущности, которое будет показано в лукапе,
entityType — имя сущности (entity logical name)
// Set the value of a lookup field function SetLookupValue(fieldName, id, name, entityType) { if (fieldName != null) { var lookupValue = []; lookupValue[0] = {}; lookupValue[0].id = id; lookupValue[0].name = name; lookupValue[0].entityType = entityType; Xrm.Page.getAttribute(fieldName).setValue(lookupValue); } }
Данная функция заполняет первое и единственное значение лукапа. Если необходимо ввести несколько значений то следует добавить к массиву lookupValue необходимое количество объектов, по одному на каждый элемент в лукапе.
Тоже самое можно сделать с помощью JSON в одну строку, что выглядит, правда уже не так красиво.
Xrm.Page.data.entity.attributes.get(fieldName).setValue([{ id: id, name: name, entityType: entityType}]);
Открыть диалоговое окно
В 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);
Обновить рибон
Обновляет только состояние Enable/Disable Rule;
Xrm.Page.ui.refreshRibbon();
Статья еще не закончена и, скорее всего, вряд ли будет, так как я буду ее пополнять по мере расширения моего собственного опыта.
Ждите обновлений…
Статья хорошая, такой мини-справочник, написано кратко и главное понятно, спасибо!