03.05.2012, 15:34 | #1 |
Участник
|
soap запрос 1:N
Добрый день всем!
Небольшая проблемка возникла. Есть соап запрос, который вытаскивает данные из сущности. И результат надо достать из xml, вот это у меня не получается( Думаю проблема в этой строчке var rez=resultXml.selectSingleNode("//new_dateend"); Я просто не знаю как именно вытащить значение перемнная theText содержит значение, по которому осуществляется поиск " <q1:EntityName>new_credit</q1:EntityName>" + " <q1:ColumnSet xsi:type=\"q1:ColumnSet\">" + " <q1:Attributes>" + " <q1:Attribute>new_dateend</q1:Attribute>" + " </q1:Attributes>" + " </q1:ColumnSet>" + " <q1istinct>false</q1istinct>" + " <q1:Criteria>" + " <q1:FilterOperator>And</q1:FilterOperator>" + " <q1:Conditions>" + " <q1:Condition>" + " <q1:AttributeName>new_name</q1:AttributeName>" + " <q1:Operator>Equal</q1:Operator>" + "<q1:Values>"+ "<q1:Value>theText</q1:Value>"+ "</q1:Values>"+ " </q1:Condition>" + " </q1:Conditions>" + " </q1:Criteria>" + " </query>" + " </Retrieve>" + " </soap:Body>" + "</soap:Envelope>" + ""; var xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP"); xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false); xmlHttpRequest.setRequestHeader("SOAPAction"," http://schemas.microsoft.com/crm/2007/WebServices/Retrieve"); xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); xmlHttpRequest.setRequestHeader("Content-Length", xml1.length); xmlHttpRequest.send(xml1); var resultXml = xmlHttpRequest.responseXML; var rez=resultXml.selectSingleNode("//new_dateend"); Последний раз редактировалось Taker1796; 03.05.2012 в 17:33. |
|
03.05.2012, 16:30 | #2 |
Участник
|
Приведите пример респонса.
Он хранится в переменной xmlHttpRequest.responseText |
|
03.05.2012, 16:46 | #3 |
Участник
|
|
|
03.05.2012, 16:52 | #4 |
Участник
|
Судя по тексту сообщения у Вас явно возникает ошибка.
Запустите Трейс и посмотрите с чем она связана. И собственно потом правильный респонс выложите. P.S. Если нажать на окне алерта CTRL+C, то его содержимое скопируется. |
|
|
За это сообщение автора поблагодарили: Taker1796 (1). |
03.05.2012, 16:55 | #5 |
Участник
|
А как запустить в трейсе?
|
|
03.05.2012, 17:06 | #6 |
Участник
|
http://support.microsoft.com/kb/907490/ru
В Ветке реестра HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\MSCRM добавить новый ключ типа DWORD TraceEnabled и назначить ему значение 1 Если ключ есть, то просто назначить значение. Потом перезапустить ИИС. Далее в c:\program files\Microsoft Dynamics CRM\trace будет файл с логами системі получите ошибку и посмотрите его содержимое |
|
03.05.2012, 17:10 | #7 |
Moderator
|
Что-то у вас не клеится: Вы вызываете метод RetrieveMultiple но в запросе я ясно вижу Retrieve. Вы уверены что запрос вообще отрабатывает?
Из RetrieveMultiple вы должны получить что-то вроде RetrieveMultipleResponse\EntityCollection\Entities В каждом Entitie есть Attributes где должен быть тот, который вы запросили. В вашем случае, я бы рекомендовал переписать ваш запрос под использование REST. Разбирать результат будет гораздо проще.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
|
За это сообщение автора поблагодарили: Taker1796 (1). |
03.05.2012, 17:12 | #8 |
Участник
|
Как видно из респонса ничего не отрабатывает.
|
|
03.05.2012, 17:31 | #9 |
Участник
|
Я убрал RetrieveMultiple, оставил просто Retrieve, всё равно всё так же.
Блин, я не понимаю в чем ошибка, вроде всё написано правильно. Логи мне не понятны) |
|
03.05.2012, 17:34 | #10 |
Участник
|
Воспользуйтесь советом и используйте рест.
http://mmcrm.ru/?p=1802 Вот здесь описан фреймворк. Получите свои данные за несколько строк. примеры есть. Мы его часто импользуем. |
|
03.05.2012, 17:38 | #11 |
Участник
|
Спасибо ребят) Но мне нужно только с помощью соап
|
|
03.05.2012, 20:17 | #12 |
Участник
|
В общем помотрел я логи. Пишет : entityName не может быть пустым. Хотя вот же я в коде пишу <q1:EntityName>new_credit</q1:EntityName>. Ваще не понимаю, что ему не нравится. Ребят выручайте, проект горит
|
|
03.05.2012, 20:20 | #13 |
Чайный пьяница
|
Полный код покажите, пожалуйста. По куску, который вы предоставили, невозможно понять причину проблему.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
03.05.2012, 20:39 | #14 |
Участник
|
В общем. Есть сущность "договор", есть сущность"кредитная программа"(new_credit). На форме договор есть лукап поле. При событии onChange этого поля, я должен получить значение даты(new_dateend) из сущности "кредитная программа"(new_credit). То есть я в договоре выбираю в качестве значения лукап название кредитной программы. Потом по этому имени в сущности "кредитные программы" вытаскиваю соответствующую дату и и что то с ней делаю.
Вот код соап запроса : 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\">" + " <query xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:QueryExpression\">" + " <q1:EntityName>new_credit</q1:EntityName>" + " <q1:ColumnSet xsi:type=\"q1:ColumnSet\">" + " <q1:Attributes>" + " <q1:Attribute>new_dateend</q1:Attribute>" + " </q1:Attributes>" + " </q1:ColumnSet>" + " <q1istinct>false</q1istinct>" + " <q1:Conditions>" + " <q1:Condition>" + " <q1:AttributeName>new_name(имя кредитной программы)</q1:AttributeName>" + " <q1:Operator>Equal</q1:Operator>" + "<q1:Values>"+ "<q1:Value>theText</q1:Value>" //theText-имя кредитной программы из поля лукап //сущности договор </q1:Values>"" </q1:Condition>" + " </q1:Conditions>" + " </query>" + " </Retrieve>" + " </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/Retrieve"); xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); xmlHttpRequest.setRequestHeader("Content-Length", xml.length); xmlHttpRequest.send(xml); |
|
03.05.2012, 21:43 | #15 |
Чайный пьяница
|
Посмотрите пример работы с RetrieveMultiple - http://technet.microsoft.com/en-us/l.../cc677077.aspx, сравните и проведите работу над ошибками.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: Taker1796 (1). |
04.05.2012, 10:52 | #16 |
Участник
|
Спасибо!!
|
|