Источник:
http://mmcrm.ru/?p=602
==============
Наверное, Вы уже знаете, что поле lookup отображает только значение основного поля связанного объекта. И это не может быть изменено с помощью настроек, т.к. в большинстве случаев этого достаточно.
Однако, если в Вашем случаи необходимо отобразить а лукапе другую информацию (без необходимости открытия формы связанного объекта), то можете воспользоваться ниже представленной JavaScript функцией.
Пример
Допустим на форме Возможной сделки Вы хотите отобразить в лукапе Потенциальный клиент поле Код организации вместо названия бизнес-партнера.
- Пойдите к настройке формы объекта (в данном примере это Возможная сделка), где у Вас расположен лукап:
Добавьте на событие onload эту строчку кода и замените в ней LookupSchemaName на имя Вашего лукапа:crmForm.all.LookupSchemaName.FireOnChange();Эта строчка запускает код при открытии формы, который мы далее поместим на лукап (чтобы его дважды не копировать). Для чего это нужно? Очень просто – на самом деле мы не можем сделать так, чтобы вместо основного атрибута отображался какой-либо другой (лукап на самом деле представляет собой массив состоящий из трех значений – айдишник связанной записи, значение основного атрибута и тип связанного объека) и поэтому будем в режиме реального времени подставлять в лукап вместо значения основного атрибута любой другой (какой захотим). А доставать значение другого атрибута мы будем с помощью SOAP-запроса. Этот SOAP-запрос мы поместим на поле лукапа (чтобы он срабатывал при изменении лукапа). Но при сохранении формы значение атрибута не сохранится (сохранится его айдишник) и его снова придется вытаскивать при открытии формы. А это строчка? как я уже сказал, всего лишь запустит лукаповский код (который вытаскивает значение какого-либо атрибута из связанного объекта) при загрузке!
Т.е. я экспериментирую над лукапом Потенциальный клиент, формы Возможная сделка, то эта строчка будет выглядеть так:
crmForm.all.customerid.FireOnChange();
- На событие onchange лукапа скопируйте следующий код, в котором определите две переменные:
- fieldToDisplay = имя атрибута связанного объекта, который Вы хотите отобразить в лукапе вместо основного атрибута.
- fieldToDisplayIsText, подствьте в него:
- true, если поле, которое Вы хотите отобразить в лукапе это nvarchar (т.е. текстовое) поле.
- false, если поле, которое Вы хотите отобразить в лукапе это picklist или лукап.
var fieldToDisplay = 'accountnumber';var fieldToDisplayIsText = true;var lookupData = new Array();var lookupItem= new Object();var lookup = event.srcElement.DataValue;if (typeof(lookup) != 'undefined' && lookup != null && lookup[0] != null) { var myValue = GetAttributeValueFromID(lookup[0].typename,lookup[0].id,fieldToDisplay,fieldToDisplayIsText); if(myValue != '') { lookupItem.id = lookup[0].id; lookupItem.typename = lookup[0].typename; lookupItem.name = myValue; lookupData[0] = lookupItem; crmForm.all[event.srcElement.id].DataValue = lookupData; }}function GetAttributeValueFromID(sEntityName, sGUID, sAttributeName, isTextField) { var xml = "" +"" +"" +GenerateAuthenticationHeader() +" " +" " +" " +" " +" " + sEntityName + "" +" " + sGUID + "" +" " +" " +" " +" " + sAttributeName + "" +" " +" " +" " +" " +" " +"" +"";var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);xmlHttpRequest.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2007/WebServices/Execute");xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");xmlHttpRequest.setRequestHeader("Content-Length", xml.length);xmlHttpRequest.send(xml); var result = null;if(isTextField) { result = xmlHttpRequest.responseXML.selectSingleNode("//q1:" + sAttributeName).text;} else { result = xmlHttpRequest.responseXML.selectSingleNode("//q1:" + sAttributeName).getAttribute('name');} if (result == null) { return '';} else return result;}
Тестируем…
Содайте запись объекта Бизнес-партнер и заполните в ней помимо всего прочего поле Код организации! Создайте запись Возможная сделка (или откройте существующую) и выберите в лукапе Потенциальный клиент созданную запись бизнес-партнера!
Источник:
http://mmcrm.ru/?p=602