Кастомизация
08
Ноя
0

Создание кастомного поля Клиент

Поле Customer (Клиент) представляет собой лукап, в котором можно выбрать либо бизнес-партнера, либо контакт. Лукап Customer используется в CRM во множестве мест, например, у Возможной сделки например есть поле Потенциальный клиент, которое и является Customer’ом. К сожалению CRM не позволяет создавать поля Customer. А нада 🙂

Самый простой воркэраунд состоит в добавлении на форму сразу двух лукапов: к Бизнес-партнеру и к Контакту. И пользователю нужно заполнить один из них. Реализовать это можно без каких-либо проблем, но с эстетической точки зрении выглядит не очень хорошо… да и некоторых юзверов вводит в ступор 🙂

Чтобы реализовать некое подбие поля Клиент, необходимо пойти на маленькую хитрость. А точнее необходимо изменить свойства какого-либо из лукапов (в данном примере это лукап Бизнес-партнера) таким способом, что CRM будет обрабатывать его как настоящее поле Customer.

Также нам на форме понадобятся два поля: лукап к Бизнес-партнерам и лукап к Контактам. Это нужно потому, что поле Customer требует двух связей в базе данных, одну с таблицей Бизнес-партнера и одну с таблицей Контакта. И поддельное поле Customer не исключение 🙂


Далее на онлоад формы добавьте следующий код:

// Измените "new_account" и "new_contact" на поля которые у Вас используется
var accountLookup = crmForm.all.new_account;
var contactLookup = crmForm.all.new_contact;

// Устанавливаем доступные типы записей в лукапе
accountLookup.lookuptypes = "1,2";
accountLookup.lookuptypenames = "account:1,contact:2";

// Устанавливаем иконку отображаемую при выборе бизнес-партнера или контакта
accountLookup.lookuptypeIcons = "/_imgs/ico_16_1.gif:/_imgs/ico_16_2.gif";

// Если в лукапе Контакта хранится значение, тогда передаем его в лукап Customer
if (contactLookup.DataValue != null) {

	// Установливаем значение по умолчанию для поля customer равное значению лукапа Контакт.
	// Если этого не сделать то, CRM предположит, что Customer был изменен и выведет предупреждения, которое выводится при закрытии формы без сохранения.

	accountLookup.DefaultValue = contactLookup.DataValue;
	accountLookup.DataValue = contactLookup.DataValue;

	if (typeof (accountLookup.DataValue[0].data) != "undefined") {
	// По некоторым причинам, свойство данных DataValue установлено в пустую строку, в то время как свойство данных DefaultValue неопределено.
	// Свойство данных это часть сравнения, которое CRM делает когда ищет измененные поля.
	// Таким образом чтобы CRM «думала», что наше поле customer не было изменено – хотя мы его изменили – это свойство данных должно быть задано.

	accountLookup.DefaultValue[0].data = accountLookup.DataValue[0].data;
    
	}
}

// Скрываем лукап Контакта
crmForm.all.new_contact_c.style.display = 'none';
crmForm.all.new_contact_d.style.display= 'none';

А на онсейв этот:

// Измените "new_account" и "new_contact" на поля которые у Вас используется
var accountLookup = crmForm.all.new_account;
var contactLookup = crmForm.all.new_contact;

// Если в лукапе "customer" ничего не выбрано очищаем, лукап Контакт.
if (accountLookup.DataValue == null) {
	contactLookup.DataValue = null;
}
// Иначе проверяем тип лукапа и копируем выбранное значение в лукап Контакта, если тип соответствует.
else {
	var customer = accountLookup.DataValue[0];

	// Код 1 соответствует бизнес-партнеру.
	if (customer.type == "1") {

		// Если это бизнес-партнер, то очищаем лукап Контакта.
		contactLookup.DataValue = null;

	} else {

		// А если в поле customer был выбран Контакт, то копируем значение в лукап Контакта и очищаем лукап Бизнес-партнера.
		contactLookup.DataValue = accountLookup.DataValue;
		accountLookup.DataValue = null;
   }
}

Код на OnSave просто сохраняет выбранного клиента либо в лукапе Бизнес-партнера, либо в лукапе Контакта. Это необходимо потому, что CRM не позволит сохранить Контакт в лукапе предназначенном для Бизнес-партнера.


Ну, и пробуем… откройте форму Вашего объекта и щелкните по лукапу, который Вы переделали в Customer — у Вас отобразится диалоговое окно поиска характерное для лукапа Customer.


Комментарии (0)

*

code