19.03.2012, 16:38 | #1 |
Участник
|
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 |
Участник
|
1. Вы можете продебажить свой код, Нажав F12.
после строки var resultXml = xHReq.responseXML; напишите alert(xHReq.responseText) и Вы уивдите XML, который Вам возращает запрос. Возможно в нем ошибки. Если проблема не решится присылайте содержимое ответа. А какого типа поле, которое Вы заполняете? это lookup? |
|
19.03.2012, 17:22 | #3 |
Участник
|
Цитата:
Сообщение от g.Naukovych
1. Вы можете продебажить свой код, Нажав F12.
после строки var resultXml = xHReq.responseXML; напишите alert(xHReq.responseText) и Вы уивдите XML, который Вам возращает запрос. Возможно в нем ошибки. Если проблема не решится присылайте содержимое ответа. А какого типа поле, которое Вы заполняете? это lookup? |
|
19.03.2012, 17:27 | #4 |
Участник
|
В таком случае проверьте, что Вам возвращает Ваш запрос.
Посое выполнения скрипта у Вас возникает ошибка? |
|
19.03.2012, 17:35 | #5 |
Участник
|
Я обычно заполняю Лукап след. образом
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 |
Участник
|
Цитата:
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 |
Участник
|
Это очень хорошо. Значи проблема в заполнении.
Убедитесь, что Вы точно доходите до строк var result = resultXml.selectSingleNode("//q1:" + sAttributeName).nodeTypedValue; crmForm.all.new_sourceid.value = result; и заполните поле new_sourceid так, как я в предыдущем посте описал. Думаю это Вам поможет. |
|
20.03.2012, 09:56 | #8 |
Участник
|
Цитата:
Сообщение от g.Naukovych
Это очень хорошо. Значи проблема в заполнении.
Убедитесь, что Вы точно доходите до строк var result = resultXml.selectSingleNode("//q1:" + sAttributeName).nodeTypedValue; crmForm.all.new_sourceid.value = result; и заполните поле new_sourceid так, как я в предыдущем посте описал. Думаю это Вам поможет. |
|
20.03.2012, 10:27 | #9 |
Участник
|
Это я просто пример заполнения кинул. Я Парсю 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 |
Участник
|
Под 4.0. Я же в теме указала.
|
|
20.03.2012, 10:40 | #11 |
Участник
|
Извините, я видимо еще не проснулся.
Ответы я писал именно для CRM4. Так что все будет работать. |
|
20.03.2012, 10:49 | #12 |
Участник
|
Да, получается вроде. А подскажите, пожалуйста, как корректно получить текст, который будет отображен в Лукапе?
Последний раз редактировалось probka; 20.03.2012 в 10:56. |
|
20.03.2012, 10:56 | #13 |
Участник
|
попробуйте getAttribute
resultXml.selectSingleNode("//q1:" + sAttributeName).getAttribute("name"); |
|
20.03.2012, 11:00 | #14 |
Участник
|
Спасибо большое! Все работает!
|
|