AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Blogs
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.08.2009, 15:05   #1  
Blog bot is offline
Blog bot
Участник
 
25,631 / 848 (80) +++++++
Регистрация: 28.10.2006
Мелкомягкий CRM: Отображение в Lookup’е произвольного поля вместо основного атрибута
Источник: http://mmcrm.ru/?p=602
==============

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

Однако, если в Вашем случаи необходимо отобразить а лукапе другую информацию (без необходимости открытия формы связанного объекта), то можете воспользоваться ниже представленной JavaScript функцией.

Пример

Допустим на форме Возможной сделки Вы хотите отобразить в лукапе Потенциальный клиент поле Код организации вместо названия бизнес-партнера.
  1. Пойдите к настройке формы объекта (в данном примере это Возможная сделка), где у Вас расположен лукап:
    Добавьте на событие onload эту строчку кода и замените в ней LookupSchemaName на имя Вашего лукапа:crmForm.all.LookupSchemaName.FireOnChange();Эта строчка запускает код при открытии формы, который мы далее поместим на лукап (чтобы его дважды не копировать). Для чего это нужно? Очень просто – на самом деле мы не можем сделать так, чтобы вместо основного атрибута отображался какой-либо другой (лукап на самом деле представляет собой массив состоящий из трех значений – айдишник связанной записи, значение основного атрибута и тип связанного объека) и поэтому будем в режиме реального времени подставлять в лукап вместо значения основного атрибута любой другой (какой захотим). А доставать значение другого атрибута мы будем с помощью SOAP-запроса. Этот SOAP-запрос мы поместим на поле лукапа (чтобы он срабатывал при изменении лукапа). Но при сохранении формы значение атрибута не сохранится (сохранится его айдишник) и его снова придется вытаскивать при открытии формы. А это строчка? как я уже сказал, всего лишь запустит лукаповский код (который вытаскивает значение какого-либо атрибута из связанного объекта) при загрузке!

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

    crmForm.all.customerid.FireOnChange();
  2. На событие 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
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
CRM DE LA CREME! Configuring Microsoft Dynamics CRM 4.0 for Internet-facing deployment Blog bot Dynamics CRM: Blogs 0 18.08.2009 11:05
Microsoft Dynamics CRM Team Blog: CRM Online: Reporting Options Blog bot Dynamics CRM: Blogs 0 18.06.2009 06:14
Microsoft Dynamics CRM Team Blog: Building Rich-Client Dashboards for Microsoft Dynamics CRM with Windows Presentation Foundation Blog bot Dynamics CRM: Blogs 1 31.03.2009 13:24
Microsoft Dynamics CRM Team Blog: List Web Part for Microsoft Dynamics CRM 4.0 Deployment Scenarios Blog bot Dynamics CRM: Blogs 0 30.01.2009 22:05
Microsoft Dynamics CRM Team Blog: Microsoft Dynamics CRM 4.0 Bookshelf Blog bot Dynamics CRM: Blogs 1 22.01.2009 04:46

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:25.