<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Microsoft Dynamics CRM &#187; работа с веб-службой</title>
	<atom:link href="http://ms-dynamics-crm.com.ua/tag/%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0-%d1%81-%d0%b2%d0%b5%d0%b1-%d1%81%d0%bb%d1%83%d0%b6%d0%b1%d0%be%d0%b9/feed/" rel="self" type="application/rss+xml" />
	<link>http://ms-dynamics-crm.com.ua</link>
	<description>Все о Microsoft Dynamics CRM</description>
	<lastBuildDate>Fri, 30 Jul 2010 08:18:45 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Вспомогательные классы для работы с веб-службами MS CRM 4.0 из JavaScript</title>
		<link>http://ms-dynamics-crm.com.ua/2009/07/21/ms-crm-4-javascript-web-service-helper-object/</link>
		<comments>http://ms-dynamics-crm.com.ua/2009/07/21/ms-crm-4-javascript-web-service-helper-object/#comments</comments>
		<pubDate>Tue, 21 Jul 2009 08:12:49 +0000</pubDate>
		<dc:creator>Костя Афендиков</dc:creator>
				<category><![CDATA[ms crm 4.0]]></category>
		<category><![CDATA[javascript in ms crm]]></category>
		<category><![CDATA[работа с веб-службой]]></category>

		<guid isPermaLink="false">http://ms-dynamics-crm.com.ua/?p=890</guid>
		<description><![CDATA[Хочу поделиться с Вами замечательной подборкой вспомогательных классов для работы с веб-службами в MS CRM 4.0, написанную Andrew Zimmer. Он попытался составить свои классы как можно более похожими на .NET SDK API для Microsoft Dynamics CRM 4.0.
Что же из этого вышло&#8230;

Когда мы вызываем методы веб-служб из JavaScript мы пишем код, который содержит XML-строки и в [...]]]></description>
			<content:encoded><![CDATA[<p>Хочу поделиться с Вами замечательной подборкой вспомогательных классов для работы с веб-службами в MS CRM 4.0, написанную <a href="http://blogs.inetium.com/blogs/azimmer/archive/2009/02/01/crm-4-0-javascript-web-service-helper-objects.aspx"><strong>Andrew Zimmer</strong></a>. Он попытался составить свои классы как можно более похожими на .NET SDK API для Microsoft Dynamics CRM 4.0.</p>
<p>Что же из этого вышло&#8230;</p>
<p><span id="more-890"></span></p>
<p>Когда мы вызываем методы веб-служб из JavaScript мы пишем код, который содержит XML-строки и в ручном режиме формируем HTTP запрос для CRM. Пример из SDK как может выглядеть такой код</p>
<h3><strong>Традиционный вызов веб-службы. Web Service Soap Request</strong></h3>
<pre>var xml = "&lt;?xml version='1.0' encoding='utf-8'?&gt;"+
"&lt;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'&gt;"+
authenticationHeader+
"&lt;soap:Body&gt;"+
"&lt;RetrieveMultiple xmlns='http://schemas.microsoft.com/crm/2007/WebServices'&gt;"+
"&lt;query xmlns:q1='http://schemas.microsoft.com/crm/2006/Query'"+
" xsi:type='q1:QueryExpression'&gt;"+
"&lt;q1:EntityName&gt;contact&lt;/q1:EntityName&gt;"+
"&lt;q1:ColumnSet xsi:type='q1:ColumnSet'&gt;"+
"&lt;q1:Attributes&gt;"+
"&lt;q1:Attribute&gt;fullname&lt;/q1:Attribute&gt;"+
"&lt;q1:Attribute&gt;contactid&lt;/q1:Attribute&gt;"+
"&lt;/q1:Attributes&gt;"+
"&lt;/q1:ColumnSet&gt;"+
"&lt;q1:Distinct&gt;false&lt;/q1:Distinct&gt;"+
"&lt;q1:Criteria&gt;"+
"&lt;q1:FilterOperator&gt;And&lt;/q1:FilterOperator&gt;"+
"&lt;q1:Conditions&gt;"+
"&lt;q1:Condition&gt;"+
"&lt;q1:AttributeName&gt;address1_city&lt;/q1:AttributeName&gt;"+
"&lt;q1:Operator&gt;Like&lt;/q1:Operator&gt;"+
"&lt;q1:Values&gt;"+
"&lt;q1:Value xsi:type='xsd:string'&gt;"+searchCity+"&lt;/q1:Value&gt;"+
"&lt;/q1:Values&gt;"+
"&lt;/q1:Condition&gt;"+
"&lt;/q1:Conditions&gt;"+
"&lt;/q1:Criteria&gt;"+
"&lt;/query&gt;"+
"&lt;/RetrieveMultiple&gt;"+
"&lt;/soap:Body&gt;"+
"&lt;/soap:Envelope&gt;";</pre>
<p>Этот код формирует тело SOAP запроса. Он не содержит HTTP-запроса или вывод данных.</p>
<h3><strong>Helper Objects</strong></h3>
<p><strong>Andrew Zimmer </strong>написал пару вспомогательных классов, которые действительно делают жизнь разработчика легче. Они не поддерживают все возможные методы (например условия фильтрации или группировки), однако, большую часть повседневных задач решают замечательно.</p>
<p>Примечание: т.к. движок блога иногда интерпретирует код по-своему, то вы можете скачать исходники <a title="ObjectHelperSample for ms crm 4.0" href="http://ms-dynamics-crm.com.ua/download/ObjectHelperSample.txt">здесь </a>или <a href="http://blogs.inetium.com/cfs-filesystemfile.ashx/__key/CommunityServer.Components.PostAttachments/00.00.02.07.57/ObjectHelperSample.txt">здесь</a></p>
<h3>Пример запроса для одной сущности</h3>
<pre>        var LOGICAL_OPERATOR_OR = "Or";</pre>
<pre>        var CONDITION_OPERATOR_EQUAL = "Equal";</pre>
<pre>        // Создаем объект и передаем параметры</pre>
<pre>        var crmService = new CrmService("contact", LOGICAL_OPERATOR_OR);</pre>
<pre>        crmService.AddColumn("jobtitle"); //хочу получить должность</pre>
<pre>        crmService.AddColumn("telephone1"); // и рабочий телефон</pre>
<pre>        // Задаю условия выборки</pre>
<pre>        crmService.AddFilterCondition("contactid", crmForm.all.do_contactid.DataValue[0].id, CONDITION_OPERATOR_EQUAL);</pre>
<pre>        // Возвращаю результат</pre>
<pre>        var result = crmService.RetrieveMultiple();</pre>
<pre>        // Пробегаю по строкам и получаю результат</pre>
<pre>        for (rowsNumber in result.Rows) {</pre>
<pre>            var row = result.Rows[rowsNumber];</pre>
<pre>            // Получаю столбец по имени</pre>
<pre>         crmForm.all.do_jobtitle.value = row.GetValue("jobtitle");</pre>
<pre>        crmForm.all.do_workphone.value = row.GetValue("telephone1");</pre>
<pre>        }</pre>
<p><a title="ObjectHelperSample for ms crm 4.0" href="http://ms-dynamics-crm.com.ua/download/ObjectHelperSample.txt ">Загрузить код вспомогательных классов</a></p>
<p><a href="http://blogs.inetium.com/blogs/azimmer/archive/2009/02/01/crm-4-0-javascript-web-service-helper-objects.aspx"><br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ms-dynamics-crm.com.ua/2009/07/21/ms-crm-4-javascript-web-service-helper-object/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Метод Retrieve на javascript для получения атрибута сущности в MS CRM 4.0</title>
		<link>http://ms-dynamics-crm.com.ua/2009/03/28/retrieve-in-javascript-ms-crm4/</link>
		<comments>http://ms-dynamics-crm.com.ua/2009/03/28/retrieve-in-javascript-ms-crm4/#comments</comments>
		<pubDate>Sat, 28 Mar 2009 06:40:29 +0000</pubDate>
		<dc:creator>Костя Афендиков</dc:creator>
				<category><![CDATA[ms crm 4.0]]></category>
		<category><![CDATA[javascript in ms crm]]></category>
		<category><![CDATA[работа с веб-службой]]></category>

		<guid isPermaLink="false">http://ms-dynamics-crm.com.ua/?p=712</guid>
		<description><![CDATA[Как вы знаете, к стандартным веб-службам MS CRM можно обращаться непосредственно с помощью JavaScript. Здесь мы уже рассматривали пример для работы с веб-службой CRM в MS CRM 3.0, но в MS CRM 4.0 он не работает, т.к. обновился сам вызов веб-службы CrmService. Поэтому привожу функцию, которая позволяет получить любой атрибут сущности зная лишь GUID записи, [...]]]></description>
			<content:encoded><![CDATA[<p>Как вы знаете, к стандартным <strong>веб-службам MS CRM </strong>можно обращаться непосредственно с помощью JavaScript. Здесь мы уже рассматривали пример для <a title="работа с веб-службой в ms crm 3.0" href="http://ms-dynamics-crm.com.ua/2009/02/08/work-with-web-services-javascript-in-ms-crm-30/">работы с веб-службой CRM в MS CRM 3.0</a>, но в <strong>MS CRM 4.0</strong> он не работает, т.к. обновился сам вызов веб-службы <strong>CrmService</strong>. Поэтому привожу функцию, которая позволяет получить любой атрибут сущности зная лишь GUID записи, используя метод <strong>Retrieve</strong>:<br />
<span id="more-712"></span></p>
<h3>Пример функции вызова Retrieve</h3>
<blockquote><p>function GetAttributeValueFromID(sEntityName, GUID, sAttributeName)<br />
{<br />
var authenticationHeader = GenerateAuthenticationHeader();<br />
// Prepare the SOAP message.<br />
var xml = &laquo;&raquo;;<br />
xml = xml+&raquo;&lt;?xml version=&#8217;1.0&#8242; encoding=&#8217;utf-8&#8242;?&gt;&raquo;+<br />
&laquo;&lt;soap:Envelope xmlns:soap=&#8217;http://schemas.xmlsoap.org/soap/envelope/&#8217;&raquo;+<br />
&raquo; xmlns:xsi=&#8217;http://www.w3.org/2001/XMLSchema-instance&#8217;&raquo;+<br />
&raquo; xmlns:xsd=&#8217;http://www.w3.org/2001/XMLSchema&#8217;&gt;&raquo;+<br />
authenticationHeader+<br />
&laquo;&lt;soap:Body&gt;&raquo;+<br />
&laquo;&lt;Retrieve xmlns=&#8217;http://schemas.microsoft.com/crm/2007/WebServices&#8217;&gt;&raquo;+<br />
&laquo;&lt;entityName&gt;&raquo;+sEntityName+&raquo;&lt;/entityName&gt;&raquo;+<br />
&laquo;&lt;id&gt;&raquo;+GUID+&raquo;&lt;/id&gt;&raquo;+<br />
&laquo;&lt;columnSet xmlns:q1=&#8217;http://schemas.microsoft.com/crm/2006/Query&#8217; xsi:type=&#8217;q1:ColumnSet&#8217;&gt;&raquo;+<br />
&laquo;&lt;q1:Attributes&gt;&raquo;+<br />
&laquo;&lt;q1:Attribute&gt;&raquo;+sAttributeName+&raquo;&lt;/q1:Attribute&gt;&raquo;+<br />
&laquo;&lt;/q1:Attributes&gt;&raquo;+<br />
&laquo;&lt;/columnSet&gt;&raquo;+<br />
&laquo;&lt;/Retrieve&gt;&raquo;+<br />
&laquo;&lt;/soap:Body&gt;&raquo;+<br />
&laquo;&lt;/soap:Envelope&gt;&raquo;;<br />
// Prepare the xmlHttpObject and send the request.<br />
var xHReq = new ActiveXObject(&laquo;Msxml2.XMLHTTP&raquo;);<br />
xHReq.Open(&laquo;POST&raquo;, &laquo;/mscrmservices/2007/CrmService.asmx&raquo;, false);<br />
xHReq.setRequestHeader(&laquo;SOAPAction&raquo;,&raquo;http://schemas.microsoft.com/crm/2007/WebServices/Retrieve&raquo;);<br />
xHReq.setRequestHeader(&laquo;Content-Type&raquo;, &laquo;text/xml; charset=utf-8&#8243;);<br />
xHReq.setRequestHeader(&laquo;Content-Length&raquo;, xml.length);<br />
xHReq.send(xml);<br />
// Capture the result.<br />
var resultXml = xHReq.responseXML;</p>
<p>// Check for errors.<br />
var errorCount = resultXml.selectNodes(&#8216;//error&#8217;).length;</p>
<p>var result = resultXml.selectSingleNode(&laquo;//q1:&raquo; + sAttributeName).nodeTypedValue;<br />
if (errorCount != 0)<br />
{<br />
var msg = resultXml.selectSingleNode(&#8216;//description&#8217;).nodeTypedValue;<br />
result = &raquo; &laquo;;<br />
alert(msg);<br />
}<br />
// Display the retrieved value.<br />
else<br />
{<br />
return result;<br />
}<br />
}</p></blockquote>
<h3>Пример вызова:</h3>
<blockquote><p>crmForm.all.new_field.value = GetAttributeValueFromID(&laquo;account&raquo;,&raquo;{GUID_RECORD}&raquo;,&raquo;name&raquo;);</p></blockquote>
<p>Остальные методы описаны в <strong>SDK</strong> достаточно подробно, возможно, мы к ним вернемся.</p>
]]></content:encoded>
			<wfw:commentRss>http://ms-dynamics-crm.com.ua/2009/03/28/retrieve-in-javascript-ms-crm4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Работа с веб-сервисами через javascript в MS CRM 3.0</title>
		<link>http://ms-dynamics-crm.com.ua/2009/02/08/work-with-web-services-javascript-in-ms-crm-30/</link>
		<comments>http://ms-dynamics-crm.com.ua/2009/02/08/work-with-web-services-javascript-in-ms-crm-30/#comments</comments>
		<pubDate>Sun, 08 Feb 2009 19:47:18 +0000</pubDate>
		<dc:creator>Костя Афендиков</dc:creator>
				<category><![CDATA[ms crm 3.0]]></category>
		<category><![CDATA[javascript in ms crm]]></category>
		<category><![CDATA[работа с веб-службой]]></category>

		<guid isPermaLink="false">http://ms-dynamics-crm.com.ua/?p=29</guid>
		<description><![CDATA[Функция использует стандартный метод Retrieve веб-сервиса CrmService.
Этот код помещается в OnLoad() формы. Позволяет выбрать любой атрибут практически из любой сущности (не работает с системными сущностями: Product, Systemuser&#8230;).
Для этого необходимо передавать имя сущности, ее гуид и имя атрибута, который необходимо получить. Под гуидом сущности понимается guid записи.
Исходный код:
function GetAttributeValueByEntityId(entityName, entytiId, attributeName)
{
var xml = &#187; +
&#8216;[?xml version=`1.0` [...]]]></description>
			<content:encoded><![CDATA[<p>Функция использует стандартный метод <strong>Retrieve</strong> веб-сервиса <strong>CrmService</strong>.</p>
<p>Этот код помещается в <strong>OnLoad() </strong>формы. Позволяет выбрать любой атрибут практически из любой сущности (не работает с системными сущностями: Product, Systemuser&#8230;).</p>
<p>Для этого необходимо передавать имя сущности, ее гуид и имя атрибута, который необходимо получить. Под гуидом сущности понимается guid записи.<span id="more-29"></span></p>
<p><strong>Исходный код:</strong></p>
<p>function GetAttributeValueByEntityId(entityName, entytiId, attributeName)<br />
{<br />
var xml = &raquo; +<br />
&#8216;[?xml version=`1.0` encoding=`utf-8`?]&#8216; + &#8216;\r\n&#8217; +<br />
&#8216;[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`]&#8216; + &#8216;\r\n&#8217; +<br />
&#8216; [soap:Body]&#8216; + &#8216;\r\n&#8217; +<br />
&#8216; [entityName xmlns=`http://schemas.microsoft.com/crm/2006/WebServices`]&#8216; + entityName + &#8216;[/entityName]&#8216; + &#8216;\r\n&#8217; +<br />
&#8216; [id xmlns=`http://schemas.microsoft.com/crm/2006/WebServices`]&#8216; + entytiId + &#8216;[/id]&#8216; + &#8216;\r\n&#8217; +<br />
&#8216; [columnSet xmlns=`http://schemas.microsoft.com/crm/2006/WebServices` xmlns:q=`http://schemas.microsoft.com/crm/2006/Query` xsi:type=`q:ColumnSet`]&#8216; + &#8216;\r\n&#8217; +<br />
&#8216; [q:Attributes]&#8216; + &#8216;\r\n&#8217; +<br />
&#8216; [q:Attribute]&#8216; + attributeName + &#8216;[/q:Attribute]&#8216; + &#8216;\r\n&#8217; +<br />
&#8216; [/q:Attributes]&#8216; + &#8216;\r\n&#8217; +<br />
&#8216; [/columnSet]&#8216; + &#8216;\r\n&#8217; +<br />
&#8216; [/soap:Body]&#8216; + &#8216;\r\n&#8217; +<br />
&#8216;[/soap:Envelope]&#8216; +<br />
&raquo;;<br />
xml = xml.replace(/\[/gi, String.fromCharCode(60));<br />
xml = xml.replace(/\]/gi, String.fromCharCode(62));<br />
xml = xml.replace(/\`/gi, String.fromCharCode(34));<br />
var xmlHttpRequest = new ActiveXObject(&#8216;Msxml2.XMLHTTP&#8217;);<br />
xmlHttpRequest.Open(&#8216;POST&#8217;, &#8216;/mscrmservices/2006/CrmService.asmx&#8217;, false);<br />
xmlHttpRequest.setRequestHeader(&#8216;SOAPAction&#8217;,'http://schemas.microsoft.com/crm/2006/WebServices/Retrieve&#8217;);<br />
xmlHttpRequest.setRequestHeader(&#8216;Content-Type&#8217;, &#8216;text/xml; charset=utf-8&#8242;);<br />
xmlHttpRequest.setRequestHeader(&#8216;Content-Length&#8217;, xml.length);<br />
xmlHttpRequest.send(xml);<br />
var doc = xmlHttpRequest.responseXML;<br />
// alert(xmlHttpRequest.responseText);<br />
var retValue = &raquo;;<br />
if (doc.selectSingleNode(&#8216;//RetrieveResult/&#8217; + attributeName) != null) retValue = doc.selectSingleNode(&#8216;//RetrieveResult/&#8217; + attributeName).text;<br />
return retValue;<br />
}<br />
<strong><br />
Пример вызова :</strong><br />
brandGuid = GetAttributeValueByEntityId(&#8216;new_productconsumption&#8217;, crmForm.all.new_productconsumption.DataValue[0].id, &#8216;new_brand&#8217;);</p>
<ul>
<li>new_productconsumption &#8211; моя сущность</li>
<li>crmForm.all.new_productconsumption.DataValue[0].id &#8211; на форме есть лукап, следовательно получаю гуид записи</li>
<li>new_brand &#8211; получаю необходимый мне аттрибут</li>
</ul>
<p><strong>UPD: </strong><a title="Метод Retrieve на javascript для получения атрибута сущности в MS CRM 4.0" href="http://ms-dynamics-crm.com.ua/2009/03/28/retrieve-in-javascript-ms-crm4/">Метод Retrieve на javascript для получения атрибута сущности в MS CRM 4.0</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ms-dynamics-crm.com.ua/2009/02/08/work-with-web-services-javascript-in-ms-crm-30/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
