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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.04.2013, 20:11   #1  
Blog bot is offline
Blog bot
Участник
 
25,475 / 846 (79) +++++++
Регистрация: 28.10.2006
axforum blogs: Кросбраузерный CRM. Первая кровь...
Источник: http://axforum.info/forums/blog.php?b=391
==============

Вот уж не знаю что двигало разработчиками MS, когда они решили поддержать не все методы в веб сервисе REST. Казалось бы, спасибо и на том, что поддержали самые основные - CRUD. Раньше этого REST вообще не было, мы писали длиннющие портянки SOAP запросов, и ничего - жили как-то, справлялись.

Как вы могли догадаться, этот пост о том как сделать SOAP запрос к веб сервису CRM и обработать его результат в альтернативных браузерах... Послать сам запрос - не беда. Остается еще обработать результат. Разумеется можно воспользоваться кривыми примерами из SDK и потрошить XML через DOM. Однако я решил воспользоваться XPath. Вот тут-то и таилась засада...

Для выполнения XPath InternetExplorer использует нестандартные функции
X++:
selectSingleNode(xpathExpression)selectNodes(xpathExpression)
В то время как все остальные браузеры используют функцию:
X++:
document.evaluate(xpathExpression, contextNode, namespaceResolver, resultType, result)
Как видите это как раз тот случай, когда InternetExplorer стоит любить. Так вот формат в котором вываливается результат нашего SOAP запроса - это тот случай, когда любить Microsoft не стоит. Дело в том, что его XML изобилует кастомными неймспейсами, поддержки которых нет в методах IE, но к которым сторонние браузеры относятся очень чутко.

Результатом многочасовой отладки стал следующий код. Отдаю его без малейшего сожаления, а так же надеюсь что он спасет много жизней:
X++:
selectSingleNode: function (xmlDoc, elementPath, node) { if (xmlDoc.evaluate) { function nsResolver(prefix) { var ns = { "s": "http://schemas.xmlsoap.org/soap/envelope/", "i": "http://www.w3.org/2001/XMLSchema-instance", "a": "http://schemas.microsoft.com/xrm/2011/Contracts", "b": "http://schemas.microsoft.com/xrm/2011/Contracts", "c": "http://schemas.datacontract.org/2004/07/System.Collections.Generic", "d": "http://www.w3.org/2001/XMLSchema" }; return ns[prefix] || null; } var nodes = xmlDoc.evaluate(elementPath, xmlDoc, node || nsResolver, XPathResult.ANY_TYPE, null); var results = nodes.iterateNext(); return results; } else return xmlDoc.selectSingleNode(elementPath); }
Пример использования:
X++:
var responseXml = req.responseXML;// SOAP 1.1var faultCode = selectSingleNode(responseXml, "//s:Envelope/s:Body/s:Fault/faultcode");
В том случае, когда надо получить дочерний элемент от уже полученного элемента, нужно передать его в качестве опционального параметра node:
X++:
var key = selectSingleNode(responseXml, "//c:key", resultNode);
p.s. А вообще, если честно, при всем моем отношение к IE, как ужасному браузеру для серфинга, отладка в нем мне нравится куда больше чем в любимом ранее Firefox. Что кастомный Firebug, что встроенный отладчик ненесли по моей психике удар несовместимый с теми теплыми чувствами, которые я ранее испытывал к Mozilla. Кота названного в честь их браузера я переименовывать, конечно, не стану. Но впредь буду осторожнее ругать IE.


Источник: http://axforum.info/forums/blog.php?b=391
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 13 Blog bot Dynamics CRM: Blogs 0 27.03.2013 22:12
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 12 Blog bot Dynamics CRM: Blogs 0 30.01.2013 01:11
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 10 Blog bot Dynamics CRM: Blogs 0 17.08.2012 03:27
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 4 Blog bot Dynamics CRM: Blogs 0 24.09.2011 01:16
CRM DE LA CREME! Configuring Microsoft Dynamics CRM 4.0 for Internet-facing deployment Blog bot Dynamics CRM: Blogs 0 18.08.2009 11:05
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 02:02.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.