Кастомизация
01
Фев
0

Lookup как альтернатива SOAP-запросам

Lookup Retrieve

Из лукапа поддерживаемыми методами можно вытащить только три знаяения: GUID, значение основного атрибута и имя объекта. Но когда Вы открываете диалоговое окно поиска лукапа, то в него (точнее в его столбцы) подтягиваются и другие значения, которые Вы определяете в настройка представления «Представление для поиска организаций» (в других объектах название отличается 🙂 ). А раз так, то мы можем получить к ним доступ и производить например проверку на валиднось. Все это дает нам очень неплохую альтернативу громоздким SOAP-запросам (только Retrieve).

Итак…

  • Для начала настройте представление отображаемое в лукапе (для Бизнес-партнеров это «Представление для поиска организаций»);
  • Затем мовесть на onchange лукапа такой скрипт:
    if(crmForm.all.<lookupId>.DataValue != null) {
    
    	var entityId = document.getElementById("<lookupId>");
    	var lookupItems = entityId.items[0].values;
    
    	alert(lookupItems[0].value); // Первая колонка
    	alert(lookupItems[1].value); // Вторая колонка
    	alert(lookupItems[2].value); // Третья колонка
    	alert(lookupItems[3].value); // Четвертая колонка
    	alert(lookupItems[4].value); // Пятая колонка
    	alert(lookupItems[5].value); // Шестая колонка
    }
    
  • Ну и выберите что-нибудь в лукапе — Вы увидите значения полей данной записи, которые были в представлении диалогового окна лукапа.



Учтите, что Вы должны будете отключить авторазрешение для лукапа. Потому, что этот скрипт будет работать, только если будет открыто диалоговое окно лукапа.

<имя_лукапа>.Lookup

Даный пример показывает, как программно разрешить значения в поле типа лукап. Т.е. мы передадим в лукап какую-то текстовую строку, а функционал лукапа произведет поиск такого значения среди соответствующих записей. Что мы в результате выигрываем? Правильно! Один SOAP-запрос! Т.к. поддерживаемым способом программно можно задать значение лукапа, только передав ему три параметра — GUID, значение основного атрибута и тип объекта. А данные параметры можно получить (динамически) в основном с помощью SOAP-запроса.

Приступим… это простой пример (и частично основан на предыдущем) и все что Вам ужно — это поместить нижеследующий код на онлоад формы Бизнес-партнера. Этот код привязывает к событию выбора значения в лукапе Головная организация функцию OnAfterAccountSelect. Эта функция вытаскивает из диалогового окна выбора записи лукапа Головная организация ее Основной контак (но только отображаемую строку). Далее эта строка передается в лукап Основной контак на текущей форме и задействуется ее разрешение в соответствующую запись.

// Привязываем к событию выбора записи в лукапе функцию OnAfterAccountSelect
crmForm.all.parentaccountid.attachEvent( "onafterselect" , OnAfterAccountSelect );

function OnAfterAccountSelect() {

	var contactLookup  = crmForm.all.primarycontactid;
	if( contactLookup.DataValue != null )
    	return;
	
	// Отключаем авторазрешение в лукапе
	contactLookup.AutoResolve = 1;
    
	var accountLookup = crmForm.all.parentaccountid;
	primaryContact = accountLookup.items[0].keyValues.primarycontactid;
	
	contactLookup.SetFocus();
	contactDiv = document.all.primarycontactid_d.getElementsByTagName("DIV")[0];
	contactDiv.innerText = primaryContact.value;
	contactLookup.Lookup( true , true , primaryContact.value , true );
}

А далее просто выберите в лукапе Головная организация какую-нибудь запись (у которой есть основной контакт) и смотрите как заполнится лукап Основной контакт.


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

*

code