Показать сообщение отдельно
Старый 09.11.2006, 15:54   #2  
pkost is offline
pkost
Участник
 
150 / 11 (1) +
Регистрация: 25.09.2006
Адрес: Киев
Цитата:
Сообщение от amg Посмотреть сообщение
Как в CRM 3.0 изменить настраиваемые объекты (организации, контакты, счета, заказы и т.д.) все ясно и понятно. Но как изменить системные объекты и возможно ли такое? Требуется изменить объект Закрытие заказа (OrderClose), точнее его атрибут Состояние (StatusCode). По умолчанию в этом атрибуте стоит значение Нет средств, а мне надо добавить еще несколько значений, чтобы классифицировать нереализованные заказы. Кто нибудь сталкивался с подобной задачей?
В описании ЦРМ и рекомендация по кастомизации неизменяемые (красные) поля изменять нельзя но можно попробывать сделать такое для установления значения поля при изменении значения другого поля на форме:



Если поле, значение которого должно быть установлено, просто текст, то все просто:

var fieldToChange = crmForm.all.description;
fieldToChange.value="Новое значение поля";


Все усложняется, если поле, которое надо изменить, типа lookup. Давайте разберем этот случай на примере формы "Продукт для сделки"(Opportunity Product).

Предположим, что необходимо при выборе Продукта в форме сделки в поле Единица измерения автоматически подставлять единицу измерения.
Чтобы это происходило, выполните следующие действия:
  1. Перейдите в раздел "Настройки", далее "Модификация", "Изменение сущностей".
  2. В списке дважды щелкните на элементе "Продукт для сделки".
  3. В открывшемся диалоге нажмите "Формы".
  4. Отобразится список форм. Дважды щелкните на самом верхнем элементе "Форма".
  5. Откроется редактор формы.
  6. В верхней части есть два поля - Продукт и Единица измерения. Дважды щелкните на поле "Продукт".
  7. Откроется форма свойств поля. Нажмите закладку "События".
  8. У этого поля есть только одно событие - onChange(), вызывается при изменении. Выделите его в списке и нажмите кнопку "Редактировать".
  9. Откроется редактор код события. Здесь нужно отметить галочку "Активно".
Чтобы написать код события, нужно узнать имя поля "Единица измерения" по схеме, идентификатор устанавливаемой единицы, и код сущности. Чтобы узнать эти сведения, выполните следующие шаги:
  1. Закройте редактор кода и диалог свойств поля "Продукт" и откройте свойства поля "Единица измерения".
  2. Перейдите на закладку "Схема".
  3. Запомните значение поля "Имя в схеме". В данном случае это uomid. Обратите внимание - регистр важен.
  4. Откройте Microsoft SQL Server Management Studio и подключитесь к серверу базы данных MS CRM.
  5. Откройте базу данных [Имя_Домена]_METABASE, перейдите к списку таблиц, в списке откройте таблицу Entity.
  6. Пролистывая таблицу найдите запись со значением поля LocalizedName равным "Единица измерения", запомните код сущности этой записи из поля "ObjectTypeCode" (в данном случае это 1055) и имя таблицы, хранящей записи этой сущности в поле "BaseTableName" (в данном случае это BaseUnit).
  7. Откройте базу данных [Имя_Домена]_MSCRM, перейдите к списку таблиц и откройте требуемую таблицу.
  8. Найдите запись единицы, которая будет подставляться, и скопируйте ее 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;
Установите галочку "Активно" и нажмите "Ок" в редакторе события и редакторе свойств поля. Теперь можно посмотреть, что получилось - нажмите в меню пункт Просмотр/Форма для создания и введите какой-либо продукт.