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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.03.2012, 16:38   #1  
probka is offline
probka
Участник
Аватар для probka
 
98 / 11 (1) +
Регистрация: 20.02.2012
Адрес: Ростов-на-Дону
CRM 4.0 Присвоение одному атрибуту сущности значения другого атрибута связанной сущности
Добрый день. Я использовала обработчик OnChange при изменении атрибута сущности

X++:
var oAttribute = crmForm.all.campaignid;
if (oAttribute.DataValue != null && oAttribute.DataValue[0] != null)
{

sEntityName = 'campaign';
GUID = oAttribute.DataValue[0].id;
sAttributeName = 'new_sourceid';

var authenticationHeader = GenerateAuthenticationHeader();

// Prepare the SOAP message.
var xml = "";
xml = xml+"<?xml version='1.0' encoding='utf-8'?>"+ 
"<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'"+
" xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'"+
" xmlns:xsd='http://www.w3.org/2001/XMLSchema'>"+ 
authenticationHeader+ 
"<soap:Body>"+ 
"<Retrieve xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"+ 
"<entityName>"+sEntityName+"</entityName>"+ 
"<id>"+GUID+"</id>"+ 
"<columnSet xmlns:q1='http://schemas.microsoft.com/crm/2006/Query' xsi:type='q1:ColumnSet'>"+ 
"<q1:Attributes>"+ 
"<q1:Attribute>"+sAttributeName+"</q1:Attribute>"+ 
"</q1:Attributes>"+ 
"</columnSet>"+ 
"</Retrieve>"+ 
"</soap:Body>"+ 
"</soap:Envelope>";

// Prepare the xmlHttpObject and send the request.
var xHReq = new ActiveXObject("Msxml2.XMLHTTP");
xHReq.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
xHReq.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2007/WebServices/Retrieve");
xHReq.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xHReq.setRequestHeader("Content-Length", xml.length);
xHReq.send(xml);
// Capture the result.
var resultXml = xHReq.responseXML;

// Check for errors.
var errorCount = resultXml.selectNodes('//error').length;

if (errorCount == 0)
{
var result = resultXml.selectSingleNode("//q1:" + sAttributeName).nodeTypedValue;
crmForm.all.new_sourceid.value = result;
}

}
Но, к сожалению при изменении атрибута ничего не происходит. В чем может быть проблема?
__________________
Так победим!


Последний раз редактировалось probka; 19.03.2012 в 16:58.
Старый 19.03.2012, 17:09   #2  
g.Naukovych is offline
g.Naukovych
Участник
MCBMSS
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
405 / 130 (5) +++++
Регистрация: 23.03.2011
1. Вы можете продебажить свой код, Нажав F12.
после строки var resultXml = xHReq.responseXML;
напишите alert(xHReq.responseText) и Вы уивдите XML, который Вам возращает запрос. Возможно в нем ошибки.
Если проблема не решится присылайте содержимое ответа.

А какого типа поле, которое Вы заполняете? это lookup?
Старый 19.03.2012, 17:22   #3  
probka is offline
probka
Участник
Аватар для probka
 
98 / 11 (1) +
Регистрация: 20.02.2012
Адрес: Ростов-на-Дону
Цитата:
Сообщение от g.Naukovych Посмотреть сообщение
1. Вы можете продебажить свой код, Нажав F12.
после строки var resultXml = xHReq.responseXML;
напишите alert(xHReq.responseText) и Вы уивдите XML, который Вам возращает запрос. Возможно в нем ошибки.
Если проблема не решится присылайте содержимое ответа.

А какого типа поле, которое Вы заполняете? это lookup?
Да, это lookup,
__________________
Так победим!

Старый 19.03.2012, 17:27   #4  
g.Naukovych is offline
g.Naukovych
Участник
MCBMSS
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
405 / 130 (5) +++++
Регистрация: 23.03.2011
В таком случае проверьте, что Вам возвращает Ваш запрос.

Посое выполнения скрипта у Вас возникает ошибка?
Старый 19.03.2012, 17:35   #5  
g.Naukovych is offline
g.Naukovych
Участник
MCBMSS
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
405 / 130 (5) +++++
Регистрация: 23.03.2011
Я обычно заполняю Лукап след. образом

var lookupData = new Array();
var lookupItem = new Object();
id = result.getElementsByTagName("IncidentFieldResponse")[0].getElementsByTagName("fieldid")[0].childNodes[0].nodeValue;
lookupItem.id = id;
lookupItem.typename = 'account';
customername = result.getElementsByTagName("IncidentFieldResponse")[0].getElementsByTagName("fieldname")[0].childNodes[0].nodeValue;

lookupItem.name = customername;
lookupData[0] = lookupItem;
crmForm.all.customerid.DataValue = lookupData;
Старый 19.03.2012, 17:45   #6  
probka is offline
probka
Участник
Аватар для probka
 
98 / 11 (1) +
Регистрация: 20.02.2012
Адрес: Ростов-на-Дону
Цитата:
Сообщение от g.Naukovych Посмотреть сообщение
В таком случае проверьте, что Вам возвращает Ваш запрос.

Посое выполнения скрипта у Вас возникает ошибка?
Нет, ошибки не возникает. Запрос возвращает, на первый взгляд, нужное значение.

X++:
<?xml version="1.0" encoding="utf-8">
<soap:Envelope xmlns:soap="http://scemas.xmlsoap.org/soap/envelope" xmlns:xsi="http://www.w3.org/2001/XMLScema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<RetrieveResponse xmlns="http://schemas.microsoft.com/crm/2007/WebServices">
<RetrieveResult xmlns:q1="http://schemas.microsoft.com/crm/2007/WebServices" xsi:type="q1:campaign">
<q1:new_sourceid dsc="0" name="Интернет (дpyroe)">{00F7C324-2FB4-E011-8004-0026181D291A}</q1:new_sourceid>
<ql:campaignid>{BA5D0342-5D3E-DF11-B3DD-0026181D2843}</q1:campaignid>
<q1:owningbusinessunit>{EC24793E-BD4C-E111-B815-00155DA01115}</ql:owningbusinessunit>
</ RetrieveResult>
</RetrieveResponse>
</soap: Body>
</soap: Envelope >
__________________
Так победим!

За это сообщение автора поблагодарили: mistah (1).
Старый 19.03.2012, 17:50   #7  
g.Naukovych is offline
g.Naukovych
Участник
MCBMSS
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
405 / 130 (5) +++++
Регистрация: 23.03.2011
Это очень хорошо. Значи проблема в заполнении.

Убедитесь, что Вы точно доходите до строк

var result = resultXml.selectSingleNode("//q1:" + sAttributeName).nodeTypedValue;
crmForm.all.new_sourceid.value = result;


и заполните поле new_sourceid так, как я в предыдущем посте описал. Думаю это Вам поможет.
Старый 20.03.2012, 09:56   #8  
probka is offline
probka
Участник
Аватар для probka
 
98 / 11 (1) +
Регистрация: 20.02.2012
Адрес: Ростов-на-Дону
Цитата:
Сообщение от g.Naukovych Посмотреть сообщение
Это очень хорошо. Значи проблема в заполнении.

Убедитесь, что Вы точно доходите до строк

var result = resultXml.selectSingleNode("//q1:" + sAttributeName).nodeTypedValue;
crmForm.all.new_sourceid.value = result;


и заполните поле new_sourceid так, как я в предыдущем посте описал. Думаю это Вам поможет.
А что означают переменные IncidentFieldResponse, fieldid, fieldname?
__________________
Так победим!

Старый 20.03.2012, 10:27   #9  
g.Naukovych is offline
g.Naukovych
Участник
MCBMSS
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
405 / 130 (5) +++++
Регистрация: 23.03.2011
Это я просто пример заполнения кинул. Я Парсю XML таким способом, но это абсолютно неважно.
Ваш способ получения данных из XML тоже верен. Вы должны получить данные и заполнить их так, как я указал.

var lookupData = new Array();
var lookupItem = new Object();
var id;
lookupItem.id = id; // Здесь должно быть Ваше ID
lookupItem.typename = 'account'; // Здесь укажите имя сущности, на которую делаете ссылку
var lookupText = '';

lookupItem.name = lookupText; // Это текст, который будет отображён в Лукапе
lookupData[0] = lookupItem;
crmForm.all.customerid.DataValue = lookupData; // замените customerid на нужное Вам поле

А Разработка под какую версию CRM ведётся?
За это сообщение автора поблагодарили: probka (1).
Старый 20.03.2012, 10:36   #10  
probka is offline
probka
Участник
Аватар для probka
 
98 / 11 (1) +
Регистрация: 20.02.2012
Адрес: Ростов-на-Дону
Под 4.0. Я же в теме указала.
__________________
Так победим!

Старый 20.03.2012, 10:40   #11  
g.Naukovych is offline
g.Naukovych
Участник
MCBMSS
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
405 / 130 (5) +++++
Регистрация: 23.03.2011
Извините, я видимо еще не проснулся.
Ответы я писал именно для CRM4. Так что все будет работать.
Старый 20.03.2012, 10:49   #12  
probka is offline
probka
Участник
Аватар для probka
 
98 / 11 (1) +
Регистрация: 20.02.2012
Адрес: Ростов-на-Дону
Да, получается вроде. А подскажите, пожалуйста, как корректно получить текст, который будет отображен в Лукапе?
__________________
Так победим!


Последний раз редактировалось probka; 20.03.2012 в 10:56.
Старый 20.03.2012, 10:56   #13  
g.Naukovych is offline
g.Naukovych
Участник
MCBMSS
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
405 / 130 (5) +++++
Регистрация: 23.03.2011
попробуйте getAttribute

resultXml.selectSingleNode("//q1:" + sAttributeName).getAttribute("name");
Старый 20.03.2012, 11:00   #14  
probka is offline
probka
Участник
Аватар для probka
 
98 / 11 (1) +
Регистрация: 20.02.2012
Адрес: Ростов-на-Дону
Спасибо большое! Все работает!
__________________
Так победим!

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Данные из связанной сущности. KKNDSTER Dynamics CRM: Разработка 28 27.12.2011 11:33
Присвоение одного атрибута сущности значения другого атрибута связанной сущности vital.mih Dynamics CRM: Функционал 38 08.09.2010 10:53
Извлечение значения полей из атрибута на форме e.pasechny Dynamics CRM: Разработка 9 10.11.2009 13:44
Тип грида (GridType) при выводе списка связанной сущности alsherin Dynamics CRM: Разработка 4 07.07.2009 19:18
Создание объекта сущности из другого объекта! SnSS Dynamics CRM: Разработка 5 29.05.2008 13:38

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

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

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