<?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>Mon, 21 May 2012 14:44:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<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=&#187;new_dogovor&#187;&gt;<br />
&lt;ToolBar ValidForCreate=&#187;0&#8243; ValidForUpdate=&#187;1&#8243;&gt;<br />
&lt;Button Title=&#187;To Word&#187; ToolTip=&#187;Open Word&#187; Icon=&#187;/_imgs/ico_18_debug.gif&#187; JavaScript=&#187;window.toword();&#187; /&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 = &#171;&lt;?xml version=\&#187;1.0\&#187; encoding=\&#187;utf-8\&#187;?&gt;&#187;;<br />
sXml += &#171;&lt;soap:Envelope xmlns:soap=\&#187;http://schemas.xmlsoap.org/soap/envelope/\&#187; xmlns:xsi=\&#187;http://www.w3.org/2001/XMLSchema-instance\&#187; xmlns:xsd=\&#187;http://www.w3.org/2001/XMLSchema\&#187;&gt;&#187;;<br />
sXml += &#171;&lt;soap:Body&gt;&#187;;<br />
//sXml += &#171;&lt;entityName xmlns=\&#187;http://schemas.microsoft.com/crm/2006/WebServices\&#187;&gt;&#187;+mEntity.get(&#171;Name&#187;)+&#187;&lt;/entityName&gt;&#187;;<br />
sXml += &#171;&lt;entityName xmlns=\&#187;http://schemas.microsoft.com/crm/2006/WebServices\&#187;&gt;&#187;+sEntity+&#187;&lt;/entityName&gt;&#187;;</p>
<p>sXml += &#171;&lt;id xmlns=\&#187;http://schemas.microsoft.com/crm/2006/WebServices\&#187;&gt;&#187;+sGuid+&#187;&lt;/id&gt;&#187;;</p>
<p>sXml += &#171;&lt;columnSet xmlns:q1=\&#187;http://schemas.microsoft.com/crm/2006/Query\&#187; xsi:type=\&#187;q1:ColumnSet\&#187; xmlns=\&#187;http://schemas.microsoft.com/crm/2006/WebServices\&#187;&gt;&#187;;<br />
sXml += &#171;&lt;q1:Attributes&gt;&#187;;</p>
<p>sXml += &#171;&lt;q1:Attribute&gt;&#187;+sAttribute+&#187;&lt;/q1:Attribute&gt;&#187;;</p>
<p>sXml += &#171;&lt;/q1:Attributes&gt;&#187;;<br />
sXml += &#171;&lt;/columnSet&gt;&#187;;<br />
sXml += &#171;&lt;/soap:Body&gt;&#187;;<br />
sXml += &#171;&lt;/soap:Envelope&gt;&#187;;</p>
<p>var oXmlHttp = new ActiveXObject(&#171;Msxml2.XMLHTTP&#187;);<br />
oXmlHttp.Open(&#171;POST&#187;, &#171;/MsCrmServices/2006/CrmService.asmx&#187;, false);<br />
oXmlHttp.setRequestHeader(&#171;SOAPAction&#187;, &#171;http://schemas.microsoft.com/crm/2006/WebServices/Retrieve&#187;);<br />
oXmlHttp.setRequestHeader(&#171;Content-Type&#187;, &#171;text/xml; charset=utf-8&#8243;);<br />
oXmlHttp.setRequestHeader(&#171;Content-Length&#187;, sXml.length);<br />
oXmlHttp.send(sXml);<br />
var doc = oXmlHttp.responseXML;<br />
var retValue = &#171;&#187;;<br />
retValue = oXmlHttp.responseXML.selectSingleNode(&#171;//RetrieveResult/&#187;+sAttribute).text;<br />
return retValue;<br />
}</p>
<p><strong>window.toword</strong>=function()<br />
{<br />
var oWord = new ActiveXObject(&#171;Word.Application&#187;);<br />
var oDoc;<br />
oWord.Visible = 1;<br />
oDoc = oWord.Documents.Add(&#171;http://localhost:5555/dogovor.doc&#187;); //путь,где лежит документ<br />
oDoc.Bookmarks.Item(&#171;number&#187;).Range.Text =crmForm.all.new_number.DataValue;//закладка<br />
oDoc.Bookmarks.Item(&#171;account&#187;).Range.Text =crmForm.all.new_accountid.DataValue[0].name;<br />
oDoc.Bookmarks.Item(&#171;contact&#187;).Range.Text =crmForm.all.new_contactid.DataValue[0].name;<br />
oDoc.Bookmarks.Item(&#171;tel&#187;).Range.Text =Retrieve(&#8216;contact&#8217;,crmForm.all.new_contactid.DataValue[0].id,&#8217;telephone1&#8242;);<br />
oDoc.Bookmarks.Item(&#171;adr&#187;).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>Итак, теперь результат. В моем примере, при нажатии на кнопку &#171;To Word&#187; открывается документ 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>

