|
18.05.2011, 11:33 | #1 |
Участник
|
Данные из связанной сущности.
Приветствую, Коллеги.
Не подкажите как из скрипта получить данные связанной сущности. То есть, есть бизнес-партнер и связанны ним контакт. Нахожуcь в контакте :-) и хочу получить например Отрасть бизнес партнера и скопироваь ее в поле контакта. Заранее спасибо за помощь. Последний раз редактировалось a33ik; 18.05.2011 в 12:02. Причина: Орфография x_x |
|
19.05.2011, 12:59 | #2 |
Участник
|
Да, поле заполненно. Спасибо большое за помощь.
Воспользовался другим скриптом - Заработало.:-) Ух и на маялся. На всякий случай выкладываю. Да поле заполненно. Воспользовался другим скриптом заработало :-) (Ух) На всякий случай выкладываю. function GetAttributeValueFromID(sEntityName, sGUID, sAttributeName, isTextField) { var 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\">" + GenerateAuthenticationHeader() + " <soap:Body>" + " <Execute xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" + " <Request xsi:type=\"RetrieveRequest\" ReturnDynamicEntities=\"false\">" + " <Target xsi:type=\"TargetRetrieveDynamic\">" + " <EntityName>" + sEntityName + "</EntityName>" + " <EntityId>" + sGUID + "</EntityId>" + " </Target>" + " <ColumnSet xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:ColumnSet\">" + " <q1:Attributes>" + " <q1:Attribute>" + sAttributeName + "</q1:Attribute>" + " </q1:Attributes>" + " </ColumnSet>" + " </Request>" + " </Execute>" + " </soap:Body>" + "</soap:Envelope>" + ""; var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP"); xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false); xmlHttpRequest.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/200...rvices/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; } crmForm.all.new_serialnumber.DataValue = GetAttributeValueFromID("new_nomenclaturalposition", crmForm.all.new_nomenclaturashippinglin.DataValue[0].id, "new_serialnumber", "isTextField"); |
|
23.12.2011, 11:06 | #3 |
Участник
|
товарищи!
подскажите, пожалуйста, почему при пустом значении поля, из которого берем значение(и подставляем в нужное поле связанной сущности), JS выдает ошибку Ошибка: требуется объект. условие проверки результата null ли он или нет имеется, но, видимо, скрипту необходимо непустое значение того поля, из которого берутся данные. ещё какое-то условие нужно добавить? спасибо! код: Код: function Form_onload() { alert(GetAttributeValueFromID("new_competitormaterial", crmForm.all.new_materialid.DataValue[0].id, "new_links", "isTextField")); } function GetAttributeValueFromID(sEntityName, sGUID, sAttributeName, isTextField) { var 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\">" + GenerateAuthenticationHeader() + " <soap:Body>" + " <Execute xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" + " <Request xsi:type=\"RetrieveRequest\" ReturnDynamicEntities=\"false\">" + " <Target xsi:type=\"TargetRetrieveDynamic\">" + " <EntityName>" + sEntityName + "</EntityName>" + " <EntityId>" + sGUID + "</EntityId>" + " </Target>" + " <ColumnSet xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:ColumnSet\">" + " <q1:Attributes>" + " <q1:Attribute>" + sAttributeName + "</q1:Attribute>" + " </q1:Attributes>" + " </ColumnSet>" + " </Request>" + " </Execute>" + " </soap:Body>" + "</soap:Envelope>" + ""; 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; } |
|
23.12.2011, 14:03 | #4 |
Участник
|
Не очень понятно, где на какой строке у вас возникает ошибка, но в любом случае стоит делать вот так:
X++: function Form_onload() { if (crmForm.all.new_materialid.DataValue != null) { alert(GetAttributeValueFromID("new_competitormaterial", crmForm.all.new_materialid.DataValue[0].id, "new_links", "isTextField")); } } |
|
|
За это сообщение автора поблагодарили: mistah (1). |
23.12.2011, 14:29 | #5 |
Участник
|
Цитата:
Сообщение от griefon
Не очень понятно, где на какой строке у вас возникает ошибка, но в любом случае стоит делать вот так:
X++: function Form_onload() { if (crmForm.all.new_materialid.DataValue != null) { alert(GetAttributeValueFromID("new_competitormaterial", crmForm.all.new_materialid.DataValue[0].id, "new_links", "isTextField")); } } Код: griefon это проверка заполнено ли поле лукапа на форме сущности1, что тоже, кстати, надо было добавить! а у меня проблема была в получении данных из поля с формы связанной сущности2 - если оно не заполнено - возвращалась вышеупомянутая ошибка об объекте. иначе говоря, если значение у sAttributeName не содержит данных/равно null. сделал так: X++: function Form_onload() { if (crmForm.all.new_materialid.DataValue != null) { alert(GetAttributeValueFromID("new_competitormaterial", crmForm.all.new_materialid.DataValue[0].id, "new_links", "isTextField")); } } function GetAttributeValueFromID(sEntityName, sGUID, sAttributeName, isTextField) { var 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\">" + GenerateAuthenticationHeader() + " <soap:Body>" + " <Execute xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" + " <Request xsi:type=\"RetrieveRequest\" ReturnDynamicEntities=\"false\">" + " <Target xsi:type=\"TargetRetrieveDynamic\">" + " <EntityName>" + sEntityName + "</EntityName>" + " <EntityId>" + sGUID + "</EntityId>" + " </Target>" + " <ColumnSet xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:ColumnSet\">" + " <q1:Attributes>" + " <q1:Attribute>" + sAttributeName + "</q1:Attribute>" + " </q1:Attributes>" + " </ColumnSet>" + " </Request>" + " </Execute>" + " </soap:Body>" + "</soap:Envelope>" + ""; 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; var new_v = xmlHttpRequest.responseXML.selectSingleNode("//q1:" + sAttributeName); if(new_v != 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; } |
|
23.12.2011, 15:06 | #6 |
Moderator
|
Скорее всего вы неправильно указываете имя узла XML, потому выбор selectSingleNode(xpath) возращает вам null, а вы спрашиваете у него nodeValue.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
|
За это сообщение автора поблагодарили: mistah (1). |
26.12.2011, 13:43 | #7 |
Участник
|
Цитата:
скрипт ошибок больше не выдает) для текстовых и цифровых полей работает, но когда я попробовал применить его к полю типа "валюта", получается странная штука - для некоторых карточек скрипт работает, как надо (и для тех, которые создаются через "создать запись"), а вот для большей части карточек - нет буквы "р." в поле валюты, как должно быть, и пишет "Если в поле денежной суммы присутствует значение, требуется валюта. Выберите валюту и повторите попытку." Скрипт стоит на онлоаде, если его убрать - ситуация такая же, для некоторых карточек работает, для большей части - нет. Коллеги, поделитесь, пожалуйста, опытом работы с валютой - как поступить в данной ситуации? Последний раз редактировалось mistah; 26.12.2011 в 13:51. |
|
26.12.2011, 13:54 | #8 |
Участник
|
Надо проставить валюту на форме и в поле.
X++: var oCurrency = new Array(); oCurrency[0] = new Object(); oCurrency[0].id = sCurrencyId; oCurrency[0].entityType = "transactioncurrency"; oCurrency[0].name = sCurrencyName; Xrm.Page.getAttribute("transactioncurrencyid").setValue(oCurrency); document.getElementById("field_name_sym").value = "$"; Которые можно либо "захардкодить", что есть плохо, зато быстро, либо получить REST запросом. |
|
|
За это сообщение автора поблагодарили: mistah (1). |
26.12.2011, 18:48 | #9 |
Moderator
|
Уберите
Код: document.getElementById("price").value = "р.";
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
|
За это сообщение автора поблагодарили: mistah (1). |
26.12.2011, 19:10 | #10 |
Участник
|
5 балов.
__________________
Читайте SDK!!! |
|
27.12.2011, 11:33 | #11 |
Участник
|
Цитата:
речь о танцах, да? решение оказалось очевидным - нужно было добавить поле валюта на форму: http://social.microsoft.com/Forums/e...-7baf75bdd0ce/ Последний раз редактировалось mistah; 27.12.2011 в 12:21. |
|
18.05.2011, 11:50 | #12 |
Чайный пьяница
|
Добрый день.
Первое - рекомендую в вопросах указывать про какую версию CRM говорится (3.0, 4.0, 2011). Второе - не надо создавать тем - дублей. Третье - на форуме это уже не раз обсуждалось, потому рекомендую польоваться поиском. Данные можно получить при помощи JavaScript. Для 4.0 хороший пример - http://technet.microsoft.com/en-us/l.../cc677076.aspx и готовый скрипт - http://jianwang.blogspot.com/2008/12...m-entitys.html Для 2011 - http://technet.microsoft.com/en-us/l.../gg334427.aspx или http://technet.microsoft.com/en-us/l.../gg309549.aspx И последнее - читайте SDK - там немало примеров.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
18.05.2011, 12:45 | #13 |
Участник
|
Спасибо.
Попытаюсь разобраться. А как получить ID связанной запись. (знаю как получить name) BR, |
|
18.05.2011, 12:52 | #14 |
Чайный пьяница
|
Цитата:
Если поле вынесено на форму, то тогда примерно так: для 4.0: var id = crmForm.all.<поле лукапа связанной сущности>.DataValue[0].id; для 2011: var id = Xrm.Page.getAttribute(“поле лукапа связанной сущности”).getValue()[0].id; Если не вынесено - тогда через скрипты.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
18.05.2011, 12:56 | #15 |
Участник
|
Да, моя ошибка.
Dynamics CRM 4.0 |
|
18.05.2011, 16:04 | #16 |
Участник
|
Что-то скрипт, господина - Jim Wang не работает:-(
Нет случаем, какой еще ссылки на разбор данной проблематики? |
|
|
|