<?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; word</title>
	<atom:link href="http://ms-dynamics-crm.com.ua/tag/word/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>Вставка в шаблон Word значений из MS CRM</title>
		<link>http://ms-dynamics-crm.com.ua/2009/02/08/mscrm-word/</link>
		<comments>http://ms-dynamics-crm.com.ua/2009/02/08/mscrm-word/#comments</comments>
		<pubDate>Sun, 08 Feb 2009 20:47:59 +0000</pubDate>
		<dc:creator>Катерина Головчан</dc:creator>
				<category><![CDATA[ms crm 3.0]]></category>
		<category><![CDATA[ms crm 4.0]]></category>
		<category><![CDATA[javascript in ms crm]]></category>
		<category><![CDATA[word]]></category>

		<guid isPermaLink="false">http://ms-dynamics-crm.com.ua/?p=71</guid>
		<description><![CDATA[В этом посте я опишу свое первое задание, с которого и началось мое знакомство с CRM .
Задание заключалось в следующем: есть определенный договор (например договор купли-продажи чего-то) в формате . doc . В определенные места этого договора нужно вставить данные из определенного объекта сущности (ну и из связанных с данным объектом других объектов).
Вот сейчас на [...]]]></description>
			<content:encoded><![CDATA[<p>В этом посте я опишу свое первое задание, с которого и началось мое знакомство с CRM .</p>
<p>Задание заключалось в следующем: есть определенный договор (например договор купли-продажи чего-то) в формате . doc . В определенные места этого договора нужно вставить данные из определенного объекта сущности (ну и из связанных с данным объектом других объектов).</p>
<p>Вот сейчас на тестовом примере и расскажу как я это реализовала.</p>
<p><span id="more-71"></span>Сейчас я создала тестовую сущность <strong>new _ dogovor </strong>. В нее добавила такие поля:</p>
<p><strong>Название договора – new _ dogovor . new _ name </strong></p>
<p><strong>№ договора – new _ dogovor . new _ number </strong></p>
<p><strong>Организация</strong> <strong></strong><strong>– new_dogovor.new_accountid </strong>(lookup к сущности Account)</p>
<p><strong>Контакт</strong> <strong></strong><strong>– new_dogovor.new_contactid</strong> (lookup к сущности Contact)</p>
<p><a href="http://stimulus.dn.ua/blog/gk/files/2008/11/new_dogovor.jpg"><img class="aligncenter size-full wp-image-109" title="new_dogovor" src="http://ms-dynamics-crm.com.ua/wp-content/uploads/2009/02/new_dogovor.jpg" alt="new_dogovor" width="637" height="163" /><br />
</a></p>
<p>На форму новой сущности new _ dogovor добавила кнопку :</p>
<p><em>Фрагмент из файла </em><em>isv .</em><em> config .</em><em> xml :</em></p>
<blockquote><p>&lt;Entity name=&raquo;new_dogovor&raquo;&gt;<br />
&lt;ToolBar ValidForCreate=&raquo;0&#8243; ValidForUpdate=&raquo;1&#8243;&gt;<br />
&lt;Button Title=&raquo;To Word&raquo; ToolTip=&raquo;Open Word&raquo; Icon=&raquo;/_imgs/ico_18_debug.gif&raquo; JavaScript=&raquo;window.toword();&raquo; /&gt;<br />
&lt;/ToolBar&gt;<br />
&lt;/Entity&gt;</p></blockquote>
<p>При нажатии на эту кнопку происходит вызов функции <strong>window . toword ();</strong> При этом сама функция определена в событии <strong>OnLoad </strong>сущности <strong>new _ dogovor </strong>.Также я использовала функцию <strong>Retrieve (….)</strong>, которая получает любое поле указанного объекта сущности, не буду ее описывать, так как это уже сделано вот <a title="тут" href="http://stimulus.dn.ua/blog/ak/2008/11/12/work-with-web-services-in-javascript-in-ms-crm-30/">тут</a>.</p>
<p>Код из события <strong>OnLoad</strong> сущности <strong>new_dogovor</strong>:</p>
<blockquote><p>function <strong>Retrieve</strong>(sEntity, sGuid, sAttribute)<br />
{<br />
var sXml = &laquo;&lt;?xml version=\&raquo;1.0\&raquo; encoding=\&raquo;utf-8\&raquo;?&gt;&raquo;;<br />
sXml += &laquo;&lt;soap:Envelope xmlns:soap=\&raquo;http://schemas.xmlsoap.org/soap/envelope/\&raquo; xmlns:xsi=\&raquo;http://www.w3.org/2001/XMLSchema-instance\&raquo; xmlns:xsd=\&raquo;http://www.w3.org/2001/XMLSchema\&raquo;&gt;&raquo;;<br />
sXml += &laquo;&lt;soap:Body&gt;&raquo;;<br />
//sXml += &laquo;&lt;entityName xmlns=\&raquo;http://schemas.microsoft.com/crm/2006/WebServices\&raquo;&gt;&raquo;+mEntity.get(&laquo;Name&raquo;)+&raquo;&lt;/entityName&gt;&raquo;;<br />
sXml += &laquo;&lt;entityName xmlns=\&raquo;http://schemas.microsoft.com/crm/2006/WebServices\&raquo;&gt;&raquo;+sEntity+&raquo;&lt;/entityName&gt;&raquo;;</p>
<p>sXml += &laquo;&lt;id xmlns=\&raquo;http://schemas.microsoft.com/crm/2006/WebServices\&raquo;&gt;&raquo;+sGuid+&raquo;&lt;/id&gt;&raquo;;</p>
<p>sXml += &laquo;&lt;columnSet xmlns:q1=\&raquo;http://schemas.microsoft.com/crm/2006/Query\&raquo; xsi:type=\&raquo;q1:ColumnSet\&raquo; xmlns=\&raquo;http://schemas.microsoft.com/crm/2006/WebServices\&raquo;&gt;&raquo;;<br />
sXml += &laquo;&lt;q1:Attributes&gt;&raquo;;</p>
<p>sXml += &laquo;&lt;q1:Attribute&gt;&raquo;+sAttribute+&raquo;&lt;/q1:Attribute&gt;&raquo;;</p>
<p>sXml += &laquo;&lt;/q1:Attributes&gt;&raquo;;<br />
sXml += &laquo;&lt;/columnSet&gt;&raquo;;<br />
sXml += &laquo;&lt;/soap:Body&gt;&raquo;;<br />
sXml += &laquo;&lt;/soap:Envelope&gt;&raquo;;</p>
<p>var oXmlHttp = new ActiveXObject(&laquo;Msxml2.XMLHTTP&raquo;);<br />
oXmlHttp.Open(&laquo;POST&raquo;, &laquo;/MsCrmServices/2006/CrmService.asmx&raquo;, false);<br />
oXmlHttp.setRequestHeader(&laquo;SOAPAction&raquo;, &laquo;http://schemas.microsoft.com/crm/2006/WebServices/Retrieve&raquo;);<br />
oXmlHttp.setRequestHeader(&laquo;Content-Type&raquo;, &laquo;text/xml; charset=utf-8&#8243;);<br />
oXmlHttp.setRequestHeader(&laquo;Content-Length&raquo;, sXml.length);<br />
oXmlHttp.send(sXml);<br />
var doc = oXmlHttp.responseXML;<br />
var retValue = &laquo;&raquo;;<br />
retValue = oXmlHttp.responseXML.selectSingleNode(&laquo;//RetrieveResult/&raquo;+sAttribute).text;<br />
return retValue;<br />
}</p>
<p><strong>window.toword</strong>=function()<br />
{<br />
var oWord = new ActiveXObject(&laquo;Word.Application&raquo;);<br />
var oDoc;<br />
oWord.Visible = 1;<br />
oDoc = oWord.Documents.Add(&laquo;http://localhost:5555/dogovor.doc&raquo;); //путь,где лежит документ<br />
oDoc.Bookmarks.Item(&laquo;number&raquo;).Range.Text =crmForm.all.new_number.DataValue;//закладка<br />
oDoc.Bookmarks.Item(&laquo;account&raquo;).Range.Text =crmForm.all.new_accountid.DataValue[0].name;<br />
oDoc.Bookmarks.Item(&laquo;contact&raquo;).Range.Text =crmForm.all.new_contactid.DataValue[0].name;<br />
oDoc.Bookmarks.Item(&laquo;tel&raquo;).Range.Text =Retrieve(&#8216;contact&#8217;,crmForm.all.new_contactid.DataValue[0].id,&#8217;telephone1&#8242;);<br />
oDoc.Bookmarks.Item(&laquo;adr&raquo;).Range.Text =Retrieve(&#8216;account&#8217;,crmForm.all.new_accountid.DataValue[0].id,&#8217;address2_country&#8217;);<br />
}</p></blockquote>
<p>С помощью <strong>Retrieve</strong> через лукапы получены поле <strong>Рабочий телефон</strong> сущности <strong>Контакт </strong>и поле <strong>Страна</strong> сущности Организация.</p>
<p>Нужно создать документ-шаблон Word. У меня он называется <strong>dogovor.doc</strong> и лежит по пути установки CRM в папке CRMWeb. В этом документе следует расставить закладки. Я их назвала number,contact,account,tel,adr. Вот пример как это сделать:</p>
<p><a href="http://stimulus.dn.ua/blog/gk/files/2008/11/bookmark.jpg"><img class="aligncenter size-full wp-image-108" title="bookmark" src="http://ms-dynamics-crm.com.ua/wp-content/uploads/2009/02/bookmark.jpg" alt="bookmark" width="559" height="274" /><br />
</a></p>
<p><a href="http://stimulus.dn.ua/blog/gk/files/2008/11/word1.jpg"><img class="aligncenter size-full wp-image-110" title="word1" src="http://ms-dynamics-crm.com.ua/wp-content/uploads/2009/02/word1.jpg" alt="word1" width="668" height="310" /><br />
</a></p>
<p>Нужно заметить, что придется понизить уровень безопасности в IE . Связано это с тем, что word – это по сути объект ActiveX , и IE очень нервно реагирует. Но даже после понижения уровня безопасности IE реагирует на попытку открыть Word вот таким сообщением:</p>
<p><a href="http://stimulus.dn.ua/blog/gk/files/2008/11/activex.jpg"><img class="aligncenter size-full wp-image-107" title="activex" src="http://ms-dynamics-crm.com.ua/wp-content/uploads/2009/02/activex.jpg" alt="activex" width="343" height="134" /><br />
</a></p>
<p>Пока с этим ничего не поделать, так что пусть будет (жмем Yes).</p>
<p>Итак, теперь результат. В моем примере, при нажатии на кнопку &laquo;To Word&raquo; открывается документ dogovor.doc и по закладкам проставляются данные, которые берутся из объекта сущности и из связанных с ним объектов.</p>
<p>Хочу добавить, что нужно обязательно юзать блоки <strong>try catch</strong>, так как поля могут быть не заполнены.</p>
<p>Данный способ глуповат и неудобен, но тем не менее первое придуманное решение было именно таким. Можно иначе, но это я опишу как-нибудь в следующий раз <span style="font-family: Wingdings;"> <img src='http://ms-dynamics-crm.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </span></p>
<p>Возможно, сумбурно и не все расписано, но я же все же впервые описываю это так. <img src='http://ms-dynamics-crm.com.ua/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Проверено с Word 2003/2007, MS CRM 3.0 (в MS CRM 4.0 не тестировала, но проблем быть не должно).</p>
]]></content:encoded>
			<wfw:commentRss>http://ms-dynamics-crm.com.ua/2009/02/08/mscrm-word/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
