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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.08.2009, 15:05   #1  
Blog bot is offline
Blog bot
Участник
 
25,640 / 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, напишите личное сообщение администратору.
Старый 25.04.2010, 14:06   #2  
kabazakra is offline
kabazakra
Участник
 
22 / 10 (1) +
Регистрация: 25.04.2010
Добрый день.

Может кто-то помочь. Нужно избежать ошибки, которую возвращает soap-запрос, когда поле sAttributeName , к которому обращается функция GetAttributeValueFromID, пустое. Как я понимаю, работать с пустыми полями эта функция не может.
Нужно, чтобы в случае пустого поля, функция возвращала что-то типа "Нет данных"
Старый 25.04.2010, 21:17   #3  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Цитата:
Сообщение от kabazakra Посмотреть сообщение
Добрый день.

Может кто-то помочь. Нужно избежать ошибки, которую возвращает soap-запрос, когда поле sAttributeName , к которому обращается функция GetAttributeValueFromID, пустое. Как я понимаю, работать с пустыми полями эта функция не может.
Нужно, чтобы в случае пустого поля, функция возвращала что-то типа "Нет данных"
Измените код

Код:
var result = null;

if(isTextField) {
	result = xmlHttpRequest.responseXML.selectSingleNode("//q1:" + sAttributeName).text;
} else {
	result = xmlHttpRequest.responseXML.selectSingleNode("//q1:" + sAttributeName).getAttribute('name');
}
на следующий

Код:
var result = null;
var node = xmlHttpRequest.responseXML.selectSingleNode("//q1:" + sAttributeName);


if (node != null)
{
	if(isTextField) {
		result = node.text;
	} else {
		result = node.getAttribute('name');
	}
}
else
	result = 'Нет данных';
Обратились бы к автору блога. Может помог бы
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 26.04.2010, 19:10   #4  
kabazakra is offline
kabazakra
Участник
 
22 / 10 (1) +
Регистрация: 25.04.2010
Спасибо за ответ. Всё работает, как хотел.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
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, время: 15:10.