04.05.2012, 17:13 | #1 |
Участник
|
Всё те же soap запросы :)
Всем привет. Есть кнопка на объекте, по её нажатии мне нужно получить значение лукап поля. При нажатии пишет: ошибка на странице. Больше ничего не происходит. Помогите разобраться что я делаю не так, пожалуйста!
new_credit_programm - поле лукап var guid=crmForm.ObjectId; var xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP"); xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false); xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); xmlHttpRequest.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2007/WebServices/Retrieve"); var xmlk = [ "<?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>", " <Retrieve xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>", " <entityName>new_dogovor</entityName>", "<id xsi:type='xsd:string'>"+guid+"</id>", " <columnSet xmlns:q1='http://schemas.microsoft.com/crm/2006/Query' xsi:type='q1:ColumnSet'>", "<q1:Attributes>", "<q1:Attribute>new_credit_programm</q1:Attribute>", "</q1:Attributes>", "</columnSet>", "</Retrieve>", "</soap:Body>", "</soap:Envelope>"].join(""); xmlHttpRequest.setRequestHeader("Content-Length", xmlk.length); xmlHttpRequest.send(xmlk); var result= xmlHttpRequest.responseXML.xml; var doc = new ActiveXObject("MSXML2.DOMDocument"); doc.async=false; doc.loadXML(result); var returnNode=doc.selectSingleNode("//new_credit_programm"); alert(returnNode.text); |
|
04.05.2012, 17:18 | #2 |
Чайный пьяница
|
Цитата:
Сообщение от Taker1796
Всем привет. Есть кнопка на объекте, по её нажатии мне нужно получить значение лукап поля. При нажатии пишет: ошибка на странице. Больше ничего не происходит. Помогите разобраться что я делаю не так, пожалуйста!
new_credit_programm - поле лукап var guid=crmForm.ObjectId; var xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP"); xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false); xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); xmlHttpRequest.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2007/WebServices/Retrieve"); var xmlk = [ "<?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>", " <Retrieve xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>", " <entityName>new_dogovor</entityName>", "<id xsi:type='xsd:string'>"+guid+"</id>", " <columnSet xmlns:q1='http://schemas.microsoft.com/crm/2006/Query' xsi:type='q1:ColumnSet'>", "<q1:Attributes>", "<q1:Attribute>new_credit_programm</q1:Attribute>", "</q1:Attributes>", "</columnSet>", "</Retrieve>", "</soap:Body>", "</soap:Envelope>"].join(""); xmlHttpRequest.setRequestHeader("Content-Length", xmlk.length); xmlHttpRequest.send(xmlk); var result= xmlHttpRequest.responseXML.xml; var doc = new ActiveXObject("MSXML2.DOMDocument"); doc.async=false; doc.loadXML(result); var returnNode=doc.selectSingleNode("//new_credit_programm"); alert(returnNode.text); 1. Что за кнопка - созданная через ISV.Config или через аттрибут на форме. 2. Каким образом вы вызываете данный код. 3. Почему таким образом обрабатываете результат, ведь есть способ гораздо проще - http://technet.microsoft.com/en-us/l.../cc677076.aspx
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
04.05.2012, 17:22 | #3 |
Участник
|
1) Кнопка создана через атрибут на форме
2) Вызываю вот так : crmForm.all.new_button.attachEvent("onclick",TestTheButton); function TestTheButton() { ..... } |
|
04.05.2012, 17:30 | #4 |
Участник
|
Цитата:
Насколько я понимаю это потому что поле лукап. А как достать само значение то? Я просто новичек еще... |
|
04.05.2012, 17:49 | #5 |
Чайный пьяница
|
Покажите код, пожалуйста - помогу.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
04.05.2012, 17:53 | #6 |
Участник
|
//кнопка
crmForm.all.new_button.DataValue = "Пересчитать кредит"; crmForm.all.new_button.style.textAlign = "center"; crmForm.all.new_button.vAlign = "middle"; //вид кнопки crmForm.all.new_button.style.cursor = "hand"; crmForm.all.new_button.style.backgroundColor = "#CADFFC"; crmForm.all.new_button.style.color = "#000000"; crmForm.all.new_button.style.borderColor = "#330066"; crmForm.all.new_button.style.fontWeight = "bold"; crmForm.all.new_button.contentEditable = false; //обработка клика по кнопке crmForm.all.new_button.attachEvent("onclick",TestTheButton); function TestTheButton() { var guid=crmForm.ObjectId; 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>"+ "<Retrieve xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"+ "<entityName>new_dogovor</entityName>"+ "<id>"+guid+"</id>"+ "<columnSet xmlns:q1='http://schemas.microsoft.com/crm/2006/Query' xsi:type='q1:ColumnSet'>"+ "<q1:Attributes>"+ "<q1:Attribute>new_credit_programm</q1:Attribute>"+ "</q1:Attributes>"+ "</columnSet>"+ "</Retrieve>"+ "</soap:Body>"+ "</soap:Envelope>"; 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); var resultXml = xHReq.responseXML; var rez=resultXml.selectSingleNode("//q1:new_credit_programm").nodeTypedValue; alert(rez); |
|
04.05.2012, 18:12 | #7 |
Чайный пьяница
|
Попробуйте так:
var rez=resultXml.selectSingleNode("//q1:new_credit_programm").getAttribute("name");
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: Taker1796 (1). |
04.05.2012, 18:20 | #8 |
Участник
|
|
|
15.05.2012, 13:28 | #9 |
Участник
|
А можно ли как то с помощью soap запроса заполнить значение поля? Например есть две сущности 1:N и надо значением из поля сущности1 заполнить поле на сущности2. При этом мы работаем с сущностью1 на событии ончейндж поля
|
|
15.05.2012, 13:35 | #10 |
Участник
|
Для этого лучше использовать рест. Но вроде и соап можно. Никак не пойму, почему Вы рест не используете. Он проще и есть куча фреймворков.
|
|
15.05.2012, 14:23 | #11 |
Чайный пьяница
|
Цитата:
По поводу того, как обновлять сущности при помощи SOAP - посмотрите следующую статью - http://technet.microsoft.com/en-us/l.../cc677074.aspx
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: NoTimeToCry (1). |
15.05.2012, 14:53 | #12 |
Участник
|
Хорошо. Может быть 4.
10 минут поиска на mmcrm. и вот пример http://mmcrm.ru/?p=790 вот еще http://mmcrm.ru/?p=919 и еще http://mmcrm.ru/?p=1470 CRM 4 была у многих и разрабатывали под неё года 4 если не больше. За это время столько всего уже написано. Так почему изобретать велосипед каждый раз. Все в открытом коде. Последний раз редактировалось g.Naukovych; 15.05.2012 в 15:01. |
|
|
За это сообщение автора поблагодарили: NoTimeToCry (1). |
15.05.2012, 16:11 | #13 |
Чайный пьяница
|
Цитата:
Сообщение от g.Naukovych
Хорошо. Может быть 4.
10 минут поиска на mmcrm. и вот пример http://mmcrm.ru/?p=790 вот еще http://mmcrm.ru/?p=919 Я пользовался похожей штукой. Сливка говорит, что вещь хорошая. Почему не использовать её. Этот громоздкий и непонятный никому в дальнейшем соап запрос, как по мне хуже чем использование сторонней библиотеки. 1. Для меня эти запросы не непонятны, а прозрачны, потому я их и люблю использовать, а не ковыряться в чужом фреймворке - вдруг там баги? 2. Человек мог и не знать о ресурсе. А если и знал, то мог и не найти как подключить данные фреймворки к системе, а в 4.0 это делается простите через Ж. 3. С момента, как Вячеслав перестал креатировать, а стал попросту драть чужие статьи - я стал посещать его блог только с целью троллинга. Для молодых полезно, для более опытных - глупо. 4. С какого момента мнение Вячеслава стало истиной?
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
15.05.2012, 16:27 | #14 |
Участник
|
Не хотеслоь бы начинать обсуждение slivka_83. Его здесь сейчас нет и я лично с ним не знаком. Из его блога я много узнал лично и рассматриваю его как хранилище данных о различных "красивостях".
Собственно я тестировал и разбирался во фреймворках которые на его сайте находил, точнее читал на его и переходил на официальный, читал отзывы и сам разбирался в коде. Это как мне кажется не сложнее, чем делать соап запросы. Еще помнится, что была программулина, которые эти запросы генерила. И Если возникают такие проблемы с ними, что задается вопрос на форум, то возникает вопрос о необходимости их использования, может быть взять уже готовые куски кода, которые были написаны протестированы другими за долгое время использование CRM 4. Если взять тот же самый рест, то я использую CrmRestKit. Пришлось с ним поразбираться, но это вроде не критично, за то сейчас он мне время экономит. Если завтра возникнет задача создать сущность, то проще будет взять фреймворк, с которым разбирался и написать несколько строк, а не начинать воять новый соам запрос и опять в нем запутаться. Я бы рекомендовал ресурс mmcrm.ru. Это может нравиться или нет, но инфы там много. Возможно она списана. Я даже сам несколько раз оригиналы на английском находил, но для начинающих там много написано, есть возможность задать вопрос и все это на русском языке. Когда я начинал заниматься срм 5 лет назад у нас ресурсов на русском не было вообще. Если этот форум был раньше, то извините, я о нем узнал несколько лет назад. |
|
15.05.2012, 16:43 | #15 |
Чайный пьяница
|
Не всё конечно, но думаю, что точно больше половины - чужие креативы.
Я CRM заниматься стал скоро 4 года как и сюда попал довольно таки быстро. На тот момент ветки по CRM уже были наполнены информацией.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
15.05.2012, 16:57 | #16 |
Участник
|
Когда был кризис я не занимался.
Могу только поздавить, что MVP за 4 года. И вообще где человек, который тему поднял? Тут дискуссия идет, Вот он к примеру скажет мне не нравятся фреймворки из-за того что.... И будет понятно почему я не прав. Или кто-нибудь другой скажет, что они их использовал. Я их использовал на 4 и 2011, предварительно тестировав и читая отзывы, но хотелось бы уточнить кто еще так делает, а кто пишет запросы сам. |
|
15.05.2012, 18:23 | #17 |
Участник
|
Нет, сейчас я работаю с CRM 2011. Решил писать всё таки рестом. Но в плане синтаксиса траблы. В общем надо записать значение с поля сущности1 в поле сущности2, пишу код на ончандж сущности 1
Xrm.Page.getAttribute("new_postponed").setValue(days); var currentValue = Xrm.Page.getAttribute("new_opportunityid").getValue(); COMMON.REST.updateRecord(currentValue[0].id.toString(), new_opportunity_opportunityhistory, "opportunity", function (dataRes) { Xrm.Page.getAttribute("new_delayed").setValue(new_delayed); }, function (errorCode) { //Если пришла ошибка alert("Can not get response from Server for new_delayed field. " + errorCode.description.trim()); }); В итоге ничего не происходит. Я думаю проблема во втором параметре функции updeteRecord. Я просто не пойму что именно туда писать |
|
15.05.2012, 18:27 | #18 |
Участник
|
Возьми CrmRestKit
http://crmrestkit.codeplex.com/ http://mmcrm.ru/?p=1802 Там уже давно придумана функция Update. |
|
15.05.2012, 18:30 | #19 |
Участник
|
Цитата:
Сообщение от NoTimeToCry
Нет, сейчас я работаю с CRM 2011. Решил писать всё таки рестом. Но в плане синтаксиса траблы. В общем надо записать значение с поля сущности1 в поле сущности2, пишу код на ончандж сущности 1
Xrm.Page.getAttribute("new_postponed").setValue(days); var currentValue = Xrm.Page.getAttribute("new_opportunityid").getValue(); COMMON.REST.updateRecord(currentValue[0].id.toString(), new_opportunity_opportunityhistory, "opportunity", function (dataRes) { Xrm.Page.getAttribute("new_delayed").setValue(new_delayed); }, function (errorCode) { //Если пришла ошибка alert("Can not get response from Server for new_delayed field. " + errorCode.description.trim()); }); В итоге ничего не происходит. Я думаю проблема во втором параметре функции updeteRecord. Я просто не пойму что именно туда писать |
|
15.05.2012, 18:31 | #20 |
Участник
|
|
|
|
|