Цитата:
Сообщение от
amg
Как в CRM 3.0 изменить настраиваемые объекты (организации, контакты, счета, заказы и т.д.) все ясно и понятно. Но как изменить системные объекты и возможно ли такое? Требуется изменить объект Закрытие заказа (OrderClose), точнее его атрибут Состояние (StatusCode). По умолчанию в этом атрибуте стоит значение Нет средств, а мне надо добавить еще несколько значений, чтобы классифицировать нереализованные заказы. Кто нибудь сталкивался с подобной задачей?
В описании ЦРМ и рекомендация по кастомизации неизменяемые (красные) поля изменять нельзя но можно попробывать сделать такое для установления значения поля при изменении значения другого поля на форме:
Если поле, значение которого должно быть установлено, просто текст, то все просто:
var fieldToChange = crmForm.all.description;
fieldToChange.value="Новое значение поля";
Все усложняется, если поле, которое надо изменить, типа lookup. Давайте разберем этот случай на примере формы "Продукт для сделки"(Opportunity Product).
Предположим, что необходимо при выборе Продукта в форме сделки в поле Единица измерения автоматически подставлять единицу измерения.
Чтобы это происходило, выполните следующие действия:
- Перейдите в раздел "Настройки", далее "Модификация", "Изменение сущностей".
- В списке дважды щелкните на элементе "Продукт для сделки".
- В открывшемся диалоге нажмите "Формы".
- Отобразится список форм. Дважды щелкните на самом верхнем элементе "Форма".
- Откроется редактор формы.
- В верхней части есть два поля - Продукт и Единица измерения. Дважды щелкните на поле "Продукт".
- Откроется форма свойств поля. Нажмите закладку "События".
- У этого поля есть только одно событие - onChange(), вызывается при изменении. Выделите его в списке и нажмите кнопку "Редактировать".
- Откроется редактор код события. Здесь нужно отметить галочку "Активно".
Чтобы написать код события, нужно узнать имя поля "Единица измерения" по схеме, идентификатор устанавливаемой единицы, и код сущности. Чтобы узнать эти сведения, выполните следующие шаги:
- Закройте редактор кода и диалог свойств поля "Продукт" и откройте свойства поля "Единица измерения".
- Перейдите на закладку "Схема".
- Запомните значение поля "Имя в схеме". В данном случае это uomid. Обратите внимание - регистр важен.
- Откройте Microsoft SQL Server Management Studio и подключитесь к серверу базы данных MS CRM.
- Откройте базу данных [Имя_Домена]_METABASE, перейдите к списку таблиц, в списке откройте таблицу Entity.
- Пролистывая таблицу найдите запись со значением поля LocalizedName равным "Единица измерения", запомните код сущности этой записи из поля "ObjectTypeCode" (в данном случае это 1055) и имя таблицы, хранящей записи этой сущности в поле "BaseTableName" (в данном случае это BaseUnit).
- Откройте базу данных [Имя_Домена]_MSCRM, перейдите к списку таблиц и откройте требуемую таблицу.
- Найдите запись единицы, которая будет подставляться, и скопируйте ее GUID (например, 650681f4-89ce-4f50-9088-fb0d9abff90d) в буфер обмена.
Теперь откройте редактор события onChange поля "Продукт" и впишите туда следующий код:
var aData = new Array();
var uomGUID = "650681f4-89ce-4f50-9088-fb0d9abff90d"; //GUID единицы
var uomObjectTypeCode = 1055; //Код сущности
var uomCaption = "Штука"; //Представление, отображаемое на экране
var o = new LookupControlItem(uomGUID, uomObjectTypeCode, uomCaption);
aData.push(o);
crmForm.all.uomid.DataValue = aData;
Установите галочку "Активно" и нажмите "Ок" в редакторе события и редакторе свойств поля. Теперь можно посмотреть, что получилось - нажмите в меню пункт Просмотр/Форма для создания и введите какой-либо продукт.