<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3101394961765670978</id><updated>2012-01-21T04:07:16.729-05:00</updated><category term='JavaScript'/><title type='text'>CRMScape</title><subtitle type='html'>Mark Kovalcson's MS CRM blog focusing on MS CRM as an agile development environment and integration tool.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>48</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-1948579685738131323</id><published>2011-06-02T16:15:00.001-04:00</published><updated>2011-06-17T08:56:39.046-04:00</updated><title type='text'>The new MS CRM 2011 64 bit VM and VirtualBox</title><content type='html'>&lt;p&gt;I’ve gotten a number of emails asking what was needed to get the new Partner Source &lt;a href="https://mbs.microsoft.com/Cms/Templates/document/General.aspx?NRMODE=Published&amp;amp;NRNODEGUID={060C9677-229D-49E1-9F00-95E56D9F1657}&amp;amp;NRORIGINALURL=/partnersource/deployment/methodology/vpc/MSD_CRM2011VirtualMachine&amp;amp;NRCACHEHINT=Guest&amp;amp;wa=wsignin1.0" target="_blank"&gt;MS CRM 2011 64bit Virtual Machine&lt;/a&gt; to work in Virtual Box in Windows 7.&lt;/p&gt;  &lt;p&gt;The compatibility issue appears to be the default hard disk settings. The following is a workaround that has worked for many people.&amp;#160; I’ve been told this doesn’t work on Windows 2008 Servers, but on a 2008 server you could also run Hyper-V.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Change your VHD to run from an IDE controller:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Open up your storage settings and add the vhd as an IDE drive.&amp;#160; Click the right + icon to create a new virtual hard&amp;#160; drive. Choose an existing drive.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-7HX2p88D0dg/TefvSoFZiAI/AAAAAAAAAW4/XxjvuTKAd0M/s1600-h/image%25255B7%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-PT3Iz37orVc/TefvS8AC7HI/AAAAAAAAAW8/qUwwk6qsSxM/image_thumb%25255B3%25255D.png?imgmax=800" width="500" height="397" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Select the VHD file the you decompressed and open it.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-pThVOE6NeWY/TefvTYdgb_I/AAAAAAAAAXA/ZwJLxz6jc9k/s1600-h/image%25255B12%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-rfOC0j6E-tE/TefvTgHJGOI/AAAAAAAAAXE/1yIxMc7AgcA/image_thumb%25255B6%25255D.png?imgmax=800" width="500" height="291" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now&amp;#160; remove your SATA drive&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-qhpLgWX-P0w/TefvT95-3eI/AAAAAAAAAXI/Tvlv1WyUfEU/s1600-h/image%25255B16%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-OA4Zrp8Bw84/TefvUD_tebI/AAAAAAAAAXM/X3QjqcgMhyA/image_thumb%25255B8%25255D.png?imgmax=800" width="500" height="395" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now Click OK.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-qRZF482Dw4w/TefvUnvQQPI/AAAAAAAAAXQ/Nd6rqPYHBFo/s1600-h/image%25255B23%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-39px1aFZGE8/TefvU_kOlVI/AAAAAAAAAXU/Xq6Xth7xd5k/image_thumb%25255B11%25255D.png?imgmax=800" width="500" height="395" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Memory&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This VM likes 2.5Gb or more RAM to operate in. As always more is better especially if you are going to demonstrate both CRM and SharePoint together.&lt;/p&gt;  &lt;p&gt;Now Start it up!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Addendum&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;You should enable hardware virtualization when running 64-bit OS’s.&amp;#160; This&amp;#160; is a firmware setting on your motherboard. This is normally called “Intel Virtualization”,&amp;#160; “VT-x” or “Intel VT” and AMD has an equivalent setting. Laptops frequently have this disabled by default. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-1948579685738131323?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/1948579685738131323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=1948579685738131323' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/1948579685738131323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/1948579685738131323'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2011/06/new-ms-crm-2011-64-bit-vm-and.html' title='The new MS CRM 2011 64 bit VM and VirtualBox'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/-PT3Iz37orVc/TefvS8AC7HI/AAAAAAAAAW8/qUwwk6qsSxM/s72-c/image_thumb%25255B3%25255D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-214815708268214355</id><published>2011-03-08T08:10:00.001-05:00</published><updated>2011-03-08T08:10:21.431-05:00</updated><title type='text'>CRM 2011 OData, JSON and CRM Forms</title><content type='html'>&lt;p&gt;&lt;strong&gt;&lt;font color="#4f81bd"&gt;1. Generating OData queries&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;OData commands can easily be tested out in IE. To help with this, you will want to turn off the feed reading view in IE.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TXYqurUMlDI/AAAAAAAAAWw/zQdFY1Twt0M/s1600-h/image3.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TXYqvMssMxI/AAAAAAAAAW0/epSYazSBo0o/image_thumb1.png?imgmax=800" width="544" height="380" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The first thing that you will want is the name of the Sets that you will be calling on. If you use a path like the following it will provide a listing of the names of your sets. &lt;a title="http://w2008r2crmdev:5555/CRMDEV/XRMServices/2011/OrganizationData.svc" href="http://crmdev:5555/CRMDEV/XRMServices/2011/OrganizationData.svc"&gt;http://crmdev:5555/CRMDEV/XRMServices/2011/OrganizationData.svc&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You will see a list of them in the following format.&lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;- &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;collection&lt;/span&gt; &lt;span style="color: #ff0000"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;AccountSet&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;atom:title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;AccountSet&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;atom:title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;collection&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;Since these names are case sensitive you will want to look at the names of your custom entities. Your stock items like AccountSet and ContactSet will be camel cased, but your custom entities will likely show up as new_myentitySet.&lt;/p&gt;

&lt;p&gt;&lt;a title="http://w2008r2crmdev:5555/CRMDEV/XRMServices/2011/OrganizationData.svc" href="http://crmdev:5555/CRMDEV/XRMServices/2011/OrganizationData.svc/AccountSet"&gt;http://crmdev:5555/CRMDEV/XRMServices/2011/OrganizationData.svc/AccountSet&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see the field names use the Schema Name in CRM rather than the lowercase name the is used on the CRM forms. This is something that can cause confusion.&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;d:Address1_Name&lt;/span&gt; &lt;span style="color: #ff0000"&gt;m:null&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;d:Address1_Telephone2&lt;/span&gt; &lt;span style="color: #ff0000"&gt;m:null&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;d:OverriddenCreatedOn&lt;/span&gt; &lt;span style="color: #ff0000"&gt;m:type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Edm.DateTime&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;m:null&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;d:Telephone3&lt;/span&gt; &lt;span style="color: #ff0000"&gt;m:null&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;d:DoNotBulkPostalMail&lt;/span&gt; &lt;span style="color: #ff0000"&gt;m:type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Edm.Boolean&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;false&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;d:DoNotBulkPostalMail&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div&gt;If you specify the guid of that entity, the results returned will be for that one entity. All fields are returned whether they are null or not. This listing will show you the exact case of each attribute name that you may want to query.&lt;/div&gt;

&lt;div&gt;&lt;a title="http://w2008r2crmdev:5555/CRMDEV/XRMServices/2011/OrganizationData.svc" href="http://crmdev:5555/CRMDEV/XRMServices/2011/OrganizationData.svc/AccountSet(guid'3D37ACD3-5846-E011-8AE1-080027131692'"&gt;http://crmdev:5555/CRMDEV/XRMServices/2011/OrganizationData.svc/AccountSet(guid'3D37ACD3-5846-E011-8AE1-080027131692'&lt;/a&gt;)&lt;/div&gt;

&lt;div&gt;You can save bandwidth by only selecting the fields that you need and only those fields will be returned. Below will only return the AccountNumber and AccountName&lt;/div&gt;

&lt;div&gt;&lt;a title="http://w2008r2crmdev:5555/CRMDEV/XRMServices/2011/OrganizationData.svc" href="http://crmdev:5555/CRMDEV/XRMServices/2011/OrganizationData.svc/AccountSet(guid'{3D37ACD3-5846-E011-8AE1-080027131692}')?$select=AccountNumber,AccountName"&gt;http://crmdev:5555/CRMDEV/XRMServices/2011/OrganizationData.svc/AccountSet(guid'{3D37ACD3-5846-E011-8AE1-080027131692}')?$select=AccountNumber,AccountName&lt;/a&gt;&lt;/div&gt;

&lt;div&gt;There are numerous references from MS explaining how to build OData Queries, however, Rhett Clinton’s recent addition to Codeplex is probably the easiest way to generate these queries. His tool can be found at the link below.&lt;/div&gt;

&lt;div&gt;&lt;a title="http://crm2011odatatool.codeplex.com/" href="http://crm2011odatatool.codeplex.com/"&gt;http://crm2011odatatool.codeplex.com/&lt;/a&gt;&lt;/div&gt;

&lt;div&gt;Screen shot of his Query Designer&lt;/div&gt;

&lt;div&gt;&lt;img alt="CRM 2011 OData Query Designer" src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=crm2011odatatool&amp;amp;DownloadId=213954" width="552" height="495" /&gt;&lt;/div&gt;

&lt;div&gt;&lt;strong&gt;&lt;font color="#4f81bd"&gt;2. Using OData Queries with JSON&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;

&lt;div&gt;To use any of the following in a javascript library as webresource in CRM 2011 solution, you will first need to include a jquery library and a json library. The jquery1.4.1.min.js and json2.js files can be found in the most recent MS CRM SDK. &lt;font color="#0000ff"&gt;sdk\samplecode\js\restendpoint\jqueryrestdataoperations\jqueryrestdataoperations\scripts. &lt;/font&gt;&lt;font color="#000000"&gt;Add these a libraries and include them above the JavaScript library that you put your code in. Click &lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TXEEBExbUmI/AAAAAAAAAWo/x-uk4N-5Qx0/s1600-h/image%5B5%5D.png" target="_blank"&gt;here&lt;/a&gt; to see what that looks like in the Forms Property page.&lt;/font&gt;&lt;/div&gt;

&lt;div&gt;To utilize these OData queries in a CRM Form using JSON, there is a pretty standard template to use. Just set the odataSelect below to your OData select url, and use the appropriate return method.&lt;/div&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; odataSelect = &lt;span style="color: #006080"&gt;&amp;quot;Your OData Query&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;$.ajax({&lt;br /&gt;       type: &lt;span style="color: #006080"&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;,&lt;br /&gt;       contentType: &lt;span style="color: #006080"&gt;&amp;quot;application/json; charset=utf-8&amp;quot;&lt;/span&gt;,&lt;br /&gt;       datatype: &lt;span style="color: #006080"&gt;&amp;quot;json&amp;quot;&lt;/span&gt;,&lt;br /&gt;       url: odataSelect,&lt;br /&gt;       beforeSend: &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; (XMLHttpRequest) { XMLHttpRequest.setRequestHeader(&lt;span style="color: #006080"&gt;&amp;quot;Accept&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;application/json&amp;quot;&lt;/span&gt;); },&lt;br /&gt;       success: &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; (data, textStatus, XmlHttpRequest) &lt;br /&gt;           { &lt;br /&gt;               &lt;span style="color: #008000"&gt;// Use only one of these two methods&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;               &lt;span style="color: #008000"&gt;// Use for a selection that may return multiple entities&lt;/span&gt;&lt;br /&gt;               ProcessReturnedEntities(data.d.results); &lt;br /&gt;&lt;br /&gt;               &lt;span style="color: #008000"&gt;// Use for a single selected entity&lt;/span&gt;&lt;br /&gt;               ProcessReturnedEntity(data.d);&lt;br /&gt;           &lt;br /&gt;           },&lt;br /&gt;       error: &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; (XmlHttpRequest, textStatus, errorThrown) { alert(&lt;span style="color: #006080"&gt;'OData Select Failed: '&lt;/span&gt; + odataSelect); }&lt;br /&gt;   });&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;div&gt;Notice the two methods: &lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;ProcessReturnedEntities&lt;/strong&gt;(data.d.results) &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;ProcessReturnedEntity&lt;/strong&gt;(data.d) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When selecting what could be any number of entities, there will be an array returned, and you want to look at the data.d.results.&amp;#160; When selecting a specific Guid there is no results array created, and you will need to just look at the data.d that is returned.&lt;/p&gt;

&lt;div&gt;For example:&lt;/div&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; ProcessReturnedEntities(ManyEntities)&lt;br /&gt;{&lt;br /&gt;  &lt;span style="color: #0000ff"&gt;for&lt;/span&gt;( i=0; i&amp;lt; ManyEntities.length; i++)&lt;br /&gt;  {&lt;br /&gt;     &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; oneEntity = ManyEntities[i];&lt;br /&gt;     &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; accountNumberAttribute = oneEntity.AccountNumber;    &lt;br /&gt;     &lt;br /&gt;     &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; accountNumberValue = eval(oneEntity.AccountNumber);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; ProcessReturnedEntity(OneEntity)&lt;br /&gt;{  &lt;br /&gt;     &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; oneEntity = OneEntity;&lt;br /&gt;     &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; accountNumber = oneEntity.AccountNumber;&lt;br /&gt;     &lt;br /&gt;     &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; accountNumberValue = eval(oneEntity.AccountNumber);     &lt;br /&gt;}&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;div&gt;&lt;strong&gt;Entity Attributes&lt;/strong&gt;&lt;/div&gt;

&lt;div&gt;As you can see the JavaScript entity objects returned have attributes named with matching camel casing in the OData query.&lt;/div&gt;

&lt;div&gt;In that case of simple CRM attributes like:&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;string &lt;/li&gt;

  &lt;li&gt;memo &lt;/li&gt;

  &lt;li&gt;decimal &lt;/li&gt;

  &lt;li&gt;double &lt;/li&gt;

  &lt;li&gt;integer &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can get the value from them by simply using eval like shown in the example above.&lt;/p&gt;

&lt;p&gt;For the following CRM attributes there is more involved.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;optionset &lt;/li&gt;

  &lt;li&gt;money &lt;/li&gt;

  &lt;li&gt;datetime &lt;/li&gt;

  &lt;li&gt;lookup &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; moneyValue = eval( oneEntity.new_MoneyAttribute.Value);&lt;br /&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; optionSetValue = eval ( oneEntity.new_OptionSet.Value);&lt;/pre&gt;
&lt;/div&gt;

&lt;div&gt;&amp;#160;&lt;/div&gt;

&lt;div&gt;&lt;strong&gt;Setting CRM Form Fields with Queried Values&lt;/strong&gt;&lt;/div&gt;

&lt;div&gt;This gets a bit more complex when setting values to CRM form controls.&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;The form field names are all lower case, so the retrieved names do not match. &lt;/li&gt;

  &lt;li&gt;The form fields have validation and maintain more types than the returned OData values have. &lt;/li&gt;

  &lt;li&gt;There is some conversion required between them. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can find out the type of a form control as follows:&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div id="codeSnippetWrapper"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; attrType = Xrm.Page.getAttribute(&lt;span style="color: #006080"&gt;&amp;quot;accountnumber&amp;quot;&lt;/span&gt;).getAttributeType();&lt;/pre&gt;

    &lt;br /&gt;With the type you can then use the appropriate means to set form controls.&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;string, memo fields:&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;Xrm.Page.getAttribute(&lt;span style="color: #006080"&gt;&amp;quot;accountnumber&amp;quot;&lt;/span&gt;).setValue(eval(oneEntity.AccountNumber));&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;div&gt;decimal, double fields:&lt;/div&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;Xrm.Page.getAttribute(&lt;span style="color: #006080"&gt;&amp;quot;new_float&amp;quot;&lt;/span&gt;).setValue(parseFloat(eval(oneEntity.new_Float)));&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;div&gt;integer fields&lt;/div&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;Xrm.Page.getAttribute(&lt;span style="color: #006080"&gt;&amp;quot;new_integer&amp;quot;&lt;/span&gt;).setValue(parseInt(eval(oneEntity.new_Integer)));&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;div&gt;money fields&lt;/div&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;Xrm.Page.getAttribute(&lt;span style="color: #006080"&gt;&amp;quot;new_moneyattribute&amp;quot;&lt;/span&gt;).setValue(parseFloat(eval(oneEntity.new_MoneyAttribute.Value)));&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;div&gt;optionset fields&lt;/div&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;Xrm.Page.getAttribute(&lt;span style="color: #006080"&gt;&amp;quot;new_optionset&amp;quot;&lt;/span&gt;).setValue(eval(oneEntity.new_OptionSet.Value));&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;div&gt;date fields&lt;/div&gt;

&lt;div&gt;
  &lt;div id="codeSnippetWrapper"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; fieldValue = eval(oneEntity.new_DateTime);                       &lt;br /&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; dateValue = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Date(parseInt(fieldValue.replace(&lt;span style="color: #006080"&gt;&amp;quot;/Date(&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;).replace(&lt;span style="color: #006080"&gt;&amp;quot;)/&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;), 10));&lt;br /&gt;Xrm.Page.getAttribute(&lt;span style="color: #006080"&gt;&amp;quot;new_datetime&amp;quot;&lt;/span&gt;).setValue(dateValue);&lt;br /&gt;&lt;/pre&gt;

    &lt;br /&gt;&lt;/div&gt;

  &lt;div&gt;The addition of support for JSON, OData queries in MS CRM 2011 has 
    &lt;div&gt;added some great power to what can be done easily in the JavaScript of a CRM form. This should reduce the number of solutions that require web applications running in iframes dramatically. This is a good thing since MS is phasing out the ISV folder for web applications running in the same app pool on a web server and there is currently no support for aspx files in CRM solutions.&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-214815708268214355?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/214815708268214355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=214815708268214355' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/214815708268214355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/214815708268214355'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2011/03/crm-2011-odata-json-and-crm-forms.html' title='CRM 2011 OData, JSON and CRM Forms'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_pTy2xto-ivU/TXYqvMssMxI/AAAAAAAAAW0/epSYazSBo0o/s72-c/image_thumb1.png?imgmax=800' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-3426654888959865448</id><published>2011-03-04T10:23:00.001-05:00</published><updated>2011-03-04T11:16:37.505-05:00</updated><title type='text'>CRM 2011 Set Default Transaction Currency in JavaScript</title><content type='html'>&lt;p&gt;The following function uses JSON and OData to select the first Currency entity that is configured on your system and then sets the transactioncurrencyid lookup to be that currency.&lt;/p&gt;  &lt;p&gt;This particular feature is just as relevant for CRM 2011 as it was for CRM 4.0, but it is easier to implement now.&lt;/p&gt;  &lt;p&gt;The OData selection for this consists of the following:   &lt;br /&gt;&lt;font color="#c0504d"&gt;/TransactionCurrencySet?$select=TransactionCurrencyId,CurrencyName&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;If you have multiple currencies, you can always add a filter to OData select to grab the specific currency that you need. This function uses the first currency returned.&lt;/p&gt;  &lt;p&gt;   &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:52a7ab38-69c7-43d1-af4c-72ab7f28da76" class="wlWriterEditableSmartContent"&gt;&lt;pre style=" width: 650px; height: 482px;background-color:White;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;overflow: auto;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #0000FF;"&gt;function&lt;/span&gt;&lt;span style="color: #000000;"&gt; SetDefaultCurrency()
{
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; context &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; Xrm.Page.context;
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; serverUrl &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; context.getServerUrl();
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; ODataPath &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; serverUrl &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000;"&gt;/XRMServices/2011/OrganizationData.svc&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000;"&gt;;   
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; odataSelect &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; ODataPath &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000;"&gt;/TransactionCurrencySet?$select=TransactionCurrencyId,CurrencyName&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000;"&gt;;

    $.ajax({
        type: &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000;"&gt;GET&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000;"&gt;,
        contentType: &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000;"&gt;application/json; charset=utf-8&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000;"&gt;,
        datatype: &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000;"&gt;json&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000;"&gt;,
        url: odataSelect,
        beforeSend: &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;function&lt;/span&gt;&lt;span style="color: #000000;"&gt; (XMLHttpRequest) { XMLHttpRequest.setRequestHeader(&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000;"&gt;Accept&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000;"&gt;application/json&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000;"&gt;); },
        success: &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;function&lt;/span&gt;&lt;span style="color: #000000;"&gt; (data, textStatus, XmlHttpRequest)
        {            
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; myCurrency &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; data.d.results[&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;];
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; idValue &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; eval(&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;myCurrency.TransactionCurrencyId&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; textValue &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; eval(&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;myCurrency.CurrencyName&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);    
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; thisEntityType &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;transactioncurrency&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;;            
            Xrm.Page.getAttribute(&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000;"&gt;transactioncurrencyid&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000;"&gt;).setValue([{ id: idValue, name: textValue, entityType: thisEntityType }]);         
        },
        error: &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;function&lt;/span&gt;&lt;span style="color: #000000;"&gt; (XmlHttpRequest, textStatus, errorThrown) { alert(&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;OData Select Failed: &lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; odataSelect); }
    });
}
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;
&lt;/p&gt;

&lt;p&gt;In order to use this. You need to make sure that you include &lt;strong&gt;jquery1.4.1.min.js&lt;/strong&gt; and &lt;strong&gt;json2.js&lt;/strong&gt; as libraries first since this script relies on them. Create another library with the above function. If you just call the SetDefaultCurrency function in the OnLoad event of your form, the currency will be set as the form opens and will be be ready for you to set any currency values that rely on this.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TXEEBExbUmI/AAAAAAAAAWo/x-uk4N-5Qx0/s1600-h/image%5B5%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/TXEEBnTeQbI/AAAAAAAAAWs/phJodbhyi0k/image_thumb%5B3%5D.png?imgmax=800" width="570" height="596" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The jquery1.4.1.min.js and json.js files can be found in the most recent MS CRM SDK. &lt;font color="#0000ff"&gt;sdk\samplecode\js\restendpoint\jqueryrestdataoperations\jqueryrestdataoperations\scripts&lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-3426654888959865448?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/3426654888959865448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=3426654888959865448' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/3426654888959865448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/3426654888959865448'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2011/03/crm-2011-set-default-transaction.html' title='CRM 2011 Set Default Transaction Currency in JavaScript'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_pTy2xto-ivU/TXEEBnTeQbI/AAAAAAAAAWs/phJodbhyi0k/s72-c/image_thumb%5B3%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-8698627670459944520</id><published>2011-03-02T09:46:00.001-05:00</published><updated>2011-03-02T09:47:32.139-05:00</updated><title type='text'>CRM 2011 RTM VM Installation Differences</title><content type='html'>&lt;p&gt;There are a few differences between the RTM installation and the Beta installation I have documented in earlier blog articles. Starting with the following: &lt;a title="http://crmscape.blogspot.com/2010/09/creating-ms-crm-2011-vm-part-1-of-2.html" href="http://crmscape.blogspot.com/2010/09/creating-ms-crm-2011-vm-part-1-of-2.html"&gt;http://crmscape.blogspot.com/2010/09/creating-ms-crm-2011-vm-part-1-of-2.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;1. There are minor appearance changes in the CRM 2011 Installation screens, but everything else looks close enough that the Beta instructions still work.&lt;/p&gt;  &lt;p&gt;2. The entire section of my instructions called &lt;strong&gt;SQL Reporting Services ( Configure Data Source ) &lt;/strong&gt;is unnecessary, which is an improvement.&amp;#160; However I did add my Admin user account to the PrivUserGroup and PrivReportingGroup and then everything worked great.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/TW5YSYoGnUI/AAAAAAAAAWc/CDqf_ul_nVw/s1600-h/blog_Admin%20properties%5B4%5D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="blog_Admin properties" border="0" alt="blog_Admin properties" src="http://lh4.ggpht.com/_pTy2xto-ivU/TW5YShw3UJI/AAAAAAAAAWg/99rEOk2XNJw/blog_Admin%20properties_thumb%5B2%5D.jpg?imgmax=800" width="402" height="517" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Otherwise the instructions still worked well for me. I’ll look over the updated installations instructions shortly to make sure there isn’t anything of importance that needs to be added.&lt;/p&gt;  &lt;p&gt;I’m also using the latest &lt;a href="http://www.virtualbox.org/wiki/Downloads"&gt;Virtual Box 4.0.4 release&lt;/a&gt; for this which is working well. The only reason I used it instead of VMWare is that I had an existing VM just waiting for MS CRM to be installed with all the prerequisites in place. &lt;/p&gt;  &lt;p&gt;I’ve been “living on a cloud” for the past few months in CRM Online and Windows/SQL Azure land, but now that the 2011 On Premises release is out, I’m back on terra firma working with that again too.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-8698627670459944520?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/8698627670459944520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=8698627670459944520' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/8698627670459944520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/8698627670459944520'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2011/03/crm-2011-rtm-vm-installation.html' title='CRM 2011 RTM VM Installation Differences'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_pTy2xto-ivU/TW5YShw3UJI/AAAAAAAAAWg/99rEOk2XNJw/s72-c/blog_Admin%20properties_thumb%5B2%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-5391244921786870553</id><published>2010-12-15T20:56:00.001-05:00</published><updated>2010-12-16T10:29:11.263-05:00</updated><title type='text'>MS CRM 2011, the “Cloud”, Azure and the future</title><content type='html'>&lt;p&gt;Something really important is happening right now, and if you are involved in MS CRM take notice or fall by the wayside!&amp;#160; This is a real game changer!&lt;/p&gt;  &lt;p&gt;Almost all of my MS CRM installations were on premises installations until just this Fall.&amp;#160; Sure there were IFD configurations and web portals with Silverlight etc., but the customer was always in tight control of the servers, even if the servers were hosted.&lt;/p&gt;  &lt;p&gt;I thought the next big thing would be the tighter SharePoint 2010 integration with MS CRM 2011 and to be fair I have seen interest in that and it will be a growing thing.&lt;/p&gt;  &lt;p&gt;What I didn’t expect is that suddenly I would almost exclusively be working with hosted MS CRM systems, MS CRM Online and Windows Azure and SQL Azure. BTW I’ll be working with the new SQL Azure Reporting Services CTP this week as well. &lt;/p&gt;  &lt;p&gt;What is pretty obvious is that MS has a lot of technologies coming together at about the time that MS CRM 2011 is hitting the scene. Frankly I thought it all looked interesting, but I didn’t expect the market to react so quickly or for it all to fit together so well.&lt;/p&gt;  &lt;p&gt;What I also didn’t expect was how much I would enjoy this transfer of responsibility. I enjoy being in control of things, but I also love abstracting away busy work to concentrate on solving real problems.&amp;#160; That is the point of MS CRM. System administration work is not where the fun is, at least for me.&lt;/p&gt;  &lt;p&gt;I was also pleasantly surprised at how easy using SQL Azure is. Just make sure you are using SQL 2008 R2 Management Studio and it is really nothing more than setting up an IP range you will be connecting through in the Azure portal, and changing your connection string. All of your tables need to have Clustered indexes as well and you have to use SQL scripts for all of your modifications, but otherwise it is just like the SQL you already know. Another thing to beware of is that the Web database is 1-5Gb and if you expect to grow beyond that you need to start with a Business Database which starts at 10Gb and can grow to 50Gb.&lt;/p&gt;  &lt;p&gt;I’m currently working on a project that is using an Azure 10Gb database, the new to SQL 2008 geography fields and spatial indexes. I imported about 7Gb of data in about 3.5 hours. The database has been very responsive.&amp;#160; I did notice that when I ran a very intensive task like generating a Spatial index across 9.2 million records that it would occasionally idle my process, but it still finished in a respectable time.&lt;/p&gt;  &lt;p&gt;Windows Azure, likewise, was very easy to set up.&amp;#160; Install the Azure SDK, create a Cloud Service Project, setup the Diagnostics and build a web application. If you make the Cloud Service your Start project it can be debugged locally as it will be deployed. There are a few configuration switches, but then again you are abstracting away all of the IIS administration.&lt;/p&gt;  &lt;p&gt;Where this all gets interesting is that additional instances of your application can be added with a few key clicks and without purchasing equipment or understanding anything about network load balancing. Adjust the amount of CPU cores and memory your application needs as it grows.&amp;#160; Scale it back during the off season or grow though the ceiling.&lt;/p&gt;  &lt;p&gt;I have customers who want to scale up quickly to compete with some pretty large competitors with a better product, but without the infrastructure or small army to maintain it. The Azure platform allows a small guy with a better mousetrap to take on the world.&lt;/p&gt;  &lt;p&gt;As a lone gun for hire, without a staff of sysadmins, what this means to me is that I can create some really really big solutions very quickly and without the setup time normally involved, or the meetings with IT departments to budget for servers, and schedule for installation and configuration. &lt;/p&gt;  &lt;p&gt;What this also is going to do is let a lot more killer apps actually see the light of day. I think we are going to see a new wave of enabled developers make a lot of really cool things happen.&lt;/p&gt;  &lt;p&gt;The cost of admission to see if something will stick has really dropped and if your solution is really that good and your website is nailed with traffic, all you need is a few key clicks to give you more bandwidth, memory and processing power.&lt;/p&gt;  &lt;p&gt;I was a bit skeptical at first, but as the saying goes, “People vote with their wallets”.&amp;#160; Based on what I am seeing the people are voting and much quicker than I expected!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-5391244921786870553?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/5391244921786870553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=5391244921786870553' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/5391244921786870553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/5391244921786870553'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2010/12/ms-crm-2011-cloud-azure-and-future.html' title='MS CRM 2011, the “Cloud”, Azure and the future'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-6680167526300166504</id><published>2010-11-11T14:23:00.001-05:00</published><updated>2010-11-11T14:58:05.642-05:00</updated><title type='text'>MS CRM Custom Workflow CreateCrmService permissions</title><content type='html'>&lt;p&gt;If you are writing custom workflows and calling CRM services, you are probably familiar with the following code which creates a service with system administrator access to all data.&amp;#160; ( true = administrator access )&lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;ICrmService service = context.CreateCrmService(&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;);&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;You may have noticed that any entities created by a custom workflow using this administrator access default to being created and owned by the account that your &lt;strong&gt;&lt;font color="#0000ff"&gt;Microsoft CRM Asynchronous Processing Service&lt;/font&gt;&lt;/strong&gt; runs as.&lt;/p&gt;

&lt;p&gt;This has some trickle down depending on the account your async service is using.&lt;/p&gt;

&lt;p&gt;For example if you are using the Local System Account which “typically” does not have a CRM user account dedicated to it, there are some things that you won’t have permission to do.&lt;/p&gt;

&lt;p&gt;For example the Local System account doesn’t have permission to send an email and the following will fail even with a service having administrator access.&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;var sendRequest = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SendEmailRequest&lt;br /&gt;             {&lt;br /&gt;                 EmailId = emailId,&lt;br /&gt;                 IssueSend = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;,&lt;br /&gt;                 TrackingToken = String.Empty&lt;br /&gt;             };&lt;br /&gt;&lt;br /&gt;sendEmailService.Execute(sendRequest);&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;This will give you the following SoapException:&lt;/p&gt;

&lt;p&gt;&amp;lt;error&amp;gt; 
  &lt;br /&gt;&amp;#160; &amp;lt;code&amp;gt;0x80040216&amp;lt;/code&amp;gt; 

  &lt;br /&gt;&amp;#160; &amp;lt;description&amp;gt;An unexpected error occurred.&amp;lt;/description&amp;gt; 

  &lt;br /&gt;&amp;#160; &amp;lt;type&amp;gt;Platform&amp;lt;/type&amp;gt; 

  &lt;br /&gt;&amp;lt;/error&amp;gt;&lt;/p&gt;

&lt;div&gt;You could create another service reference like below just to send email with which will work as long as the user running the workflow can normally send an email from a workflow.&lt;/div&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;ICrmService sendEmailService = context.CreateCrmService(&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;);&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;You could also use a CRM user CAL and create a CRM user for the account your async service runs as.&lt;/p&gt;

&lt;p&gt;The important thing to realize is that any service request that requires user configuration in order to function beyond security role permissions will be dependent on whether there is a CRM user assigned to the account the acync service is running under and how that CRM user is configured. For example: whether the email access type is E-mail Router.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-6680167526300166504?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/6680167526300166504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=6680167526300166504' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/6680167526300166504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/6680167526300166504'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2010/11/ms-crm-custom-workflow-createcrmservice.html' title='MS CRM Custom Workflow CreateCrmService permissions'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-8384103985677024875</id><published>2010-09-29T08:58:00.001-04:00</published><updated>2010-09-29T08:58:21.454-04:00</updated><title type='text'>Developing for CRM 2011 and SharePoint 2010 Foundation</title><content type='html'>&lt;p&gt;If you are a MS CRM person looking at SharePoint as something new here are a few things that may be of interest.&lt;/p&gt;  &lt;p&gt;The SharePoint 2010 Foundation is &lt;a href="http://rperreaux.spaces.live.com/blog/cns!5D7BD18D324CBEEF!862.entry?wa=wsignin1.0&amp;amp;sa=948089703"&gt;free&lt;/a&gt; and will work with the MS CRM list component but it is limited to database sizes of 4Gb. This makes it much easier to leverage some of the power of SharePoint for your CRM customers. Your customers by default already have licensing for Windows Server and SQL Server in order to run MS CRM and SharePoint Foundation can share that same server.&lt;/p&gt;  &lt;p&gt;In addition the new Business Connectivity Services (BCS) are also supported by SharePoint Foundation: &lt;a title="http://msdn.microsoft.com/en-us/library/ee557646.aspx" href="http://msdn.microsoft.com/en-us/library/ee557646.aspx"&gt;http://msdn.microsoft.com/en-us/library/ee557646.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;BCS will allow you to expose data from other databases to show up in SharePoint, but not take space in the SharePoint database, this of course includes CRM data. There is obviously a performance penalty depending on the interface to access this external data, but it also allows maintaining legacy databases while having access to that data in SharePoint without passing the 4Gb database limit in the SharePoint database.&lt;/p&gt;  &lt;p&gt;If you are looking at SharePoint integration using their web services, you can see from the following link which services are supported by both SharePoint Foundation and by SharePoint Server and just by SharePoint Server. &lt;a title="http://msdn.microsoft.com/en-us/library/ee705814.aspx" href="http://msdn.microsoft.com/en-us/library/ee705814.aspx"&gt;http://msdn.microsoft.com/en-us/library/ee705814.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As an obvious guideline it would make sense to write your base code to support SharePoint Foundation to let customers try out SharePoint functionality, and to have any features that require SharePoint Server features be switchable at a later time if your customer upgrades.&lt;/p&gt;  &lt;p&gt;SharePoint Server has a number of useful features shown in this version comparison that you may or may not need: &lt;a title="http://sharepoint.microsoft.com/en-us/buy/Pages/Editions-Comparison.aspx" href="http://sharepoint.microsoft.com/en-us/buy/Pages/Editions-Comparison.aspx"&gt;http://sharepoint.microsoft.com/en-us/buy/Pages/Editions-Comparison.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As a practical note, SP 2010 is built on .NET 3.5 and CRM 2011 is built on .NET 4.0, so while most of you will not have a lot of .NET 4.0 legacy code at this point, is will be important to make sure your libraries with logic that will be shared between SP and CRM components are all kept at .NET 3.5.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-8384103985677024875?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/8384103985677024875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=8384103985677024875' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/8384103985677024875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/8384103985677024875'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2010/09/developing-for-crm-2011-and-sharepoint.html' title='Developing for CRM 2011 and SharePoint 2010 Foundation'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-8042802677519504239</id><published>2010-09-26T12:10:00.001-04:00</published><updated>2010-09-26T12:10:06.032-04:00</updated><title type='text'>Connecting to MS CRM 2011 outside the VM</title><content type='html'>&lt;p&gt;While the CRM 2011 VM created so far works well by itself, you will most likely want to access MS CRM web site, web services and endpoints from outside the VM for development purposes.&lt;/p&gt;  &lt;p&gt;To do this you will need to set up VirtualBox to allow access from your host computer.&lt;/p&gt;  &lt;p&gt;1. With your VM shutdown, modify the Network Settings and enable the second Adapter. As shown below:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Attached to: Host-Only Adapter&lt;/li&gt;    &lt;li&gt;Name: VirtualBox Host-Only Ethernet&amp;#160; Adapter&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TJ9wR5HZP8I/AAAAAAAAAVM/3SbgEMqQtiE/s1600-h/image%5B43%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/TJ9wSBqO6wI/AAAAAAAAAVQ/ae-2cFbFOcI/image_thumb%5B23%5D.png?imgmax=800" width="548" height="407" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; when a VM is created from scratch it appears to select the correct network adapter type. When I copied the VDI file to my laptop and setup a VM based on that VDI file, it picked a different adapter by default and the networking didn’t work until I made it match the original Network settings that I had when I first configured it.    &lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TJ9wSTDK5AI/AAAAAAAAAVU/zVSaYUlGBkY/s1600-h/image%5B38%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TJ9wSzGumQI/AAAAAAAAAVY/qoL4eOIxkMY/image_thumb%5B20%5D.png?imgmax=800" width="356" height="91" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;2. Start up your VM, open up a command prompt and run&amp;#160; ipconfig. Notice the new Local Area Connection 2 should be in your local network. The other is the default NAT adapter that allows your VM to see the Internet as your host computer.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TJ9wTgBbtPI/AAAAAAAAAVc/5w_dKsdWIDo/s1600-h/image%5B8%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TJ9wT1hu5RI/AAAAAAAAAVg/bhqHyH9W0GQ/image_thumb%5B4%5D.png?imgmax=800" width="558" height="272" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;3. On your host computer go to C:\Windows\System32\drivers\etc and edit your hosts file and add the new IP address to your hosts file.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TJ9wUJj4YGI/AAAAAAAAAVk/KnuiwqBrKW4/s1600-h/image%5B12%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TJ9wUuMfePI/AAAAAAAAAVo/hVtYXVB-a4o/image_thumb%5B6%5D.png?imgmax=800" width="563" height="169" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;4.You may want to add a new Credential to your Credential Manager to reduce your login time under Control Panel since you are not in the domain of the VM.&lt;/p&gt;  &lt;p&gt;Use the Hosts alias created above, then add a domain\username, and password. This will give you a mostly filled out login when you try to reach the website for the first time.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/TJ9wU4IrQ5I/AAAAAAAAAVs/SpUmONE-wLQ/s1600-h/image%5B21%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TJ9wVLHzzyI/AAAAAAAAAVw/K8APDSaF7S0/image_thumb%5B11%5D.png?imgmax=800" width="580" height="383" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt; 5.&amp;#160; Test the connection out by bringing up MS CRM on your host. I’m using the alias in my hosts file pull up CRM.&amp;#160; &lt;a title="http://w2008r2crmdev:5555/CRMDEMO" href="http://w2008r2crmdev:5555/CRMDEMO"&gt;http://w2008r2crmdev:5555/CRMDEMO&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TJ9wVvomboI/AAAAAAAAAV0/AvZiDRti0s8/s1600-h/image%5B16%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TJ9wV6ykIBI/AAAAAAAAAV4/fwWtm4stnno/image_thumb%5B8%5D.png?imgmax=800" width="577" height="360" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;6. Now make sure you can access the endpoints through the browser&lt;/p&gt;  &lt;p&gt;&lt;a title="http://w2008r2crmdev:5555/CRMDEMO/xrmservices/2011/organizationdata.svc/$metadata" href="http://w2008r2crmdev:5555/CRMDEMO/xrmservices/2011/organizationdata.svc/$metadata"&gt;&lt;font size="1"&gt;http://w2008r2crmdev:5555/CRMDEMO/xrmservices/2011/organizationdata.svc/$metadata&lt;/font&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;&lt;a title="http://w2008r2crmdev:5555/CRMDEMO/xrmservices/2011/organizationdata.svc/" href="http://w2008r2crmdev:5555/CRMDEMO/xrmservices/2011/organizationdata.svc/"&gt;&lt;font size="1"&gt;http://w2008r2crmdev:5555/CRMDEMO/xrmservices/2011/organizationdata.svc/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TJ9wWPVrCvI/AAAAAAAAAV8/3cAVm0GXDDo/s1600-h/image%5B26%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/TJ9wWqR4TQI/AAAAAAAAAWA/F3YWMGZPwW8/image_thumb%5B14%5D.png?imgmax=800" width="589" height="273" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;7. If the endpoints show up in the browser than they should be available to add a reference to a Silverlight project as shown below.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TJ9wW1ANIsI/AAAAAAAAAWE/7A26uyeOtyw/s1600-h/VS%20Service%20Reference%20MetaData%5B4%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="VS Service Reference MetaData" border="0" alt="VS Service Reference MetaData" src="http://lh4.ggpht.com/_pTy2xto-ivU/TJ9wXBwwl1I/AAAAAAAAAWI/x2d0QMTuEPk/VS%20Service%20Reference%20MetaData_thumb%5B2%5D.png?imgmax=800" width="595" height="492" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Side Note:&lt;/strong&gt; I have found that this VM is capable of running with 2.3Gb of RAM and on one core on my 2 year old Core Duo laptop. There is just enough memory to run VS 2010 on the host and connect to the guest VM’s endpoints as shown above in the 4Gb of RAM my laptop has. This is by no means an optimum configuration, but it is possible to demonstrate CRM 2011 beta with SharePoint integration and write code against both SDK’s. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-8042802677519504239?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/8042802677519504239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=8042802677519504239' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/8042802677519504239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/8042802677519504239'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2010/09/connecting-to-ms-crm-2011-outside-vm.html' title='Connecting to MS CRM 2011 outside the VM'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_pTy2xto-ivU/TJ9wSBqO6wI/AAAAAAAAAVQ/ae-2cFbFOcI/s72-c/image_thumb%5B23%5D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-7688318965757836200</id><published>2010-09-21T11:04:00.001-04:00</published><updated>2010-09-21T13:15:56.681-04:00</updated><title type='text'>MS CRM 2011 SharePoint List Component Installation</title><content type='html'>&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;Warning&lt;/font&gt;&lt;/strong&gt; if you downloaded the file just as this was introduced it contains an unsigned assembly that will give you an error message shown when you would see it during the installation below. A fix was put out by MS a few days later. If in doubt download it again.&lt;/p&gt; Download the &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=0c7dcc45-9d41-4e2e-8126-895517b4274c&amp;amp;displayLang=en"&gt;SharePoint List Component&lt;/a&gt;   &lt;br /&gt;&lt;strong&gt;CRM2011-SharePointList-ENU-amd64.exe&lt;/strong&gt; file and run it on your VM.   &lt;p&gt;Accept the Conditions    &lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TJjJXUcrTvI/AAAAAAAAATA/yqKbPHevxb8/s1600-h/image%5B3%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pTy2xto-ivU/TJjJXhjlulI/AAAAAAAAATE/R-Iozodo-0o/image_thumb%5B1%5D.png?imgmax=800" width="279" height="257" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Pick a place to unpack the contents. You will be browsing to the &lt;strong&gt;crmlistcomponent.wsp&lt;/strong&gt; file from SharePoint later.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TJjJYKVu2yI/AAAAAAAAATI/sNBUzZmVdME/s1600-h/image%5B7%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TJjJYZINe-I/AAAAAAAAATM/NZnVO9YsAiI/image_thumb%5B3%5D.png?imgmax=800" width="327" height="125" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Before installing the List component you need to relax the Browser File Handling to “Permissive” for the Web application that you are sharing with MS CRM 2011.&lt;/p&gt;  &lt;p&gt;Go to SharePoint Central Administration and click on Manage web applications.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TJjJYvJchvI/AAAAAAAAATQ/Ki496cFTDX8/s1600-h/image%5B15%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/TJjJYzeO8aI/AAAAAAAAATU/0OlXEoh7--4/image_thumb%5B7%5D.png?imgmax=800" width="533" height="360" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Select the web application that you are sharing with MS CRM and click on General Settings.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TJjJZRb1zfI/AAAAAAAAATY/OoLSmYGaZEk/s1600-h/image%5B23%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TJjJZt8GT5I/AAAAAAAAATc/kvMiBXTwVvM/image_thumb%5B11%5D.png?imgmax=800" width="549" height="338" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Scroll down to Browser File Handling and click on permissive then scroll to the bottom and click OK.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TJjJaB6AmwI/AAAAAAAAATg/cXe15suqjh0/s1600-h/image%5B30%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TJjJaYQHE_I/AAAAAAAAATk/0r3zhU1mF-E/image_thumb%5B14%5D.png?imgmax=800" width="554" height="343" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now visit your SharePoint Site and click on Site Actions then Site Settings.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TJjJa1SUgMI/AAAAAAAAATs/rx4o3mYqu6w/s1600-h/image%5B34%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TJjJbLSo44I/AAAAAAAAATw/BDhyGM7FSIg/image_thumb%5B16%5D.png?imgmax=800" width="555" height="386" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Click on Solutions under Galleries&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/TJjJbuoPQaI/AAAAAAAAAT0/10Wgz2e9SoU/s1600-h/image%5B38%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pTy2xto-ivU/TJjJb4zoQGI/AAAAAAAAAT4/izaaBYMVbt8/image_thumb%5B18%5D.png?imgmax=800" width="565" height="393" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Click the Solutions Tab, and a ribbon will appear. Click on Upload Solution in that Ribbon.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TJjJcADfTwI/AAAAAAAAAT8/FaBa660rJhk/s1600-h/image%5B45%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/TJjJcafU6MI/AAAAAAAAAUA/qG6kKqxp4Nc/image_thumb%5B21%5D.png?imgmax=800" width="574" height="376" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Now browse to the &lt;strong&gt;crmlistcomponent.wsp&lt;/strong&gt; file that was unpacked earlier and click OK.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/TJjJchTriCI/AAAAAAAAAUE/8Zu8-D85dDg/s1600-h/image%5B49%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pTy2xto-ivU/TJjJdL1XhaI/AAAAAAAAAUI/OCXiursPq8Q/image_thumb%5B23%5D.png?imgmax=800" width="586" height="387" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now you need to Activate this solution. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TJjJd3kDb-I/AAAAAAAAAUM/CjrEvxDY_iw/s1600-h/image%5B53%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TJjJeoEqVwI/AAAAAAAAAUQ/XSXJ4TKC-J4/image_thumb%5B25%5D.png?imgmax=800" width="590" height="389" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The error below will only happen if you are still using the Initial download of the CRM2011-SharePointList-ENU-amd64.exe file.&amp;#160; &lt;br /&gt;    &lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/TJjJe4LCS3I/AAAAAAAAAUU/v-eCarcuqSc/s1600-h/image%5B58%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pTy2xto-ivU/TJjJfI6bDuI/AAAAAAAAAUY/o5d2rJ3ltps/image_thumb%5B28%5D.png?imgmax=800" width="596" height="395" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;You should see this if you have the right version.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TJjJfvWauSI/AAAAAAAAAUc/nO-uJ--LtbU/s1600-h/image%5B63%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pTy2xto-ivU/TJjJf68QC3I/AAAAAAAAAUg/LvF_XJ5h3EQ/image_thumb%5B31%5D.png?imgmax=800" width="604" height="404" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The SharePoint List Component is now in place.&lt;/p&gt;  &lt;p&gt;To test this in CRM.&lt;/p&gt;  &lt;p&gt;Go to Settings, Document Management and click on Document Management Settings.&amp;#160; Enter your shared SharePoint site. Click Next&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TJjoOuAd1PI/AAAAAAAAAUk/izc-bP-TvwE/s1600-h/image%5B5%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TJjoPFq6JQI/AAAAAAAAAUo/BVmEm22t0QQ/image_thumb%5B2%5D.png?imgmax=800" width="612" height="545" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You can pick Account, Contact or not select where you Document Library will be based. I selected Account below.&amp;#160; Click Next&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TJjoPkX8ZNI/AAAAAAAAAUs/OvM3hgWmi_g/s1600-h/image%5B10%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TJjoQLOUfKI/AAAAAAAAAUw/9vaj8mCRgvk/image_thumb%5B5%5D.png?imgmax=800" width="534" height="549" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TJjoQd7JOuI/AAAAAAAAAU0/gfHBQp3_jxs/s1600-h/image%5B15%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TJjoRKtI0fI/AAAAAAAAAU4/N5M_d5tkVI0/image_thumb%5B8%5D.png?imgmax=800" width="547" height="556" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;When it is all done, click finish.&lt;/p&gt;  &lt;p&gt;Create a Test Account if you don’t already have one. Add a document of some kind. It will prompt you for a location to automatically create a SharePoint Folder the first time you do this per Account. Click OK.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/TJjoRbUsOxI/AAAAAAAAAU8/xxF3Umx_XlM/s1600-h/image%5B19%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TJjoR7IZybI/AAAAAAAAAVA/8Z0M9QSilZ0/image_thumb%5B10%5D.png?imgmax=800" width="565" height="343" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Click the Open SharePoint link to see the document in SharePoint. Both sides can now work with documents in this folder.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/TJjoScfoiYI/AAAAAAAAAVE/nrIcelBXyaQ/s1600-h/image%5B23%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TJjoSwkDj9I/AAAAAAAAAVI/pnMYz9fscmg/image_thumb%5B12%5D.png?imgmax=800" width="588" height="362" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-7688318965757836200?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/7688318965757836200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=7688318965757836200' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/7688318965757836200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/7688318965757836200'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2010/09/ms-crm-2011-sharepoint-list-component.html' title='MS CRM 2011 SharePoint List Component Installation'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_pTy2xto-ivU/TJjJXhjlulI/AAAAAAAAATE/R-Iozodo-0o/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-4072817330894997219</id><published>2010-09-19T15:30:00.001-04:00</published><updated>2010-09-19T15:30:11.879-04:00</updated><title type='text'>MS CRM 2011 Beta VM Continued.. Customizations</title><content type='html'>&lt;p&gt;As my instructions left off, trying to publish a CRM customization and exporting customizations will fail with a SQL error. This is because the administrator currently doesn’t have adequate permissions.&lt;/p&gt;  &lt;p&gt;Since the Administrator account has the Administrator security role this should not be an issue.&lt;/p&gt;  &lt;p&gt;In a production system we should not be giving the Administrator account direct&amp;#160; access the &lt;strong&gt;&amp;lt;orgname&amp;gt;_MSCRM&lt;/strong&gt; database as dbo in SQL Management Studio, but that will work for the VM. However I believe the user should instead belong to a group with the proper permissions. In this case I added the Administrator user to the &lt;strong&gt;SQLAccessGroup&lt;/strong&gt; as shown below which had adequate permissions.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TJZkwnSTAaI/AAAAAAAAAS4/WMNVZx9IGM8/s1600-h/image%5B12%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TJZkw0pJhHI/AAAAAAAAAS8/oxZX9-E2zaw/image_thumb%5B6%5D.png?imgmax=800" width="552" height="465" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-4072817330894997219?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/4072817330894997219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=4072817330894997219' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/4072817330894997219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/4072817330894997219'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2010/09/ms-crm-2011-beta-vm-continued_19.html' title='MS CRM 2011 Beta VM Continued.. Customizations'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_pTy2xto-ivU/TJZkw0pJhHI/AAAAAAAAAS8/oxZX9-E2zaw/s72-c/image_thumb%5B6%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-1765366638508854528</id><published>2010-09-15T12:02:00.001-04:00</published><updated>2010-09-15T15:50:42.362-04:00</updated><title type='text'>MS CRM 2011 Beta VM continued…</title><content type='html'>&lt;p&gt;There is going to be plenty more to this VM and the CRM beta to work on as we learn more about this new release.&lt;/p&gt;  &lt;p&gt;More Building Blocks are needed.&lt;/p&gt;  &lt;p&gt;Using steps in the previous section make sure that the SharePoint websites are stopped.&amp;#160; Also stop the SharePoint services below. This will dramatically speed things up.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TJDuIW1-QdI/AAAAAAAAARw/HnPxpJlGedI/s1600-h/image%5B2%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TJDuIslaLUI/AAAAAAAAAR0/FOhL0nxbut4/image_thumb.png?imgmax=800" width="244" height="111" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;font size="5"&gt;Unpack the Beta SDK&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Install the CRM 2001 SDK,&amp;#160; using &lt;strong&gt;MicrosoftDynamicsCRM2011BetaSDK.exe&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Double click and pick a folder to use. I chose&amp;#160; C:\CRM2011BETASDK&lt;/p&gt;  &lt;p&gt;&lt;font size="5"&gt;Build the Plug-in Registration Tool&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Open VS 2010    &lt;br /&gt;Open the solution in&amp;#160; C:\CRM2011BETASDK\sdk\tools\pluginregistration&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TJDuIy9fDqI/AAAAAAAAAR4/ylp4pYztcMs/s1600-h/image%5B6%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TJDuJU0DY1I/AAAAAAAAAR8/2D2p4b_vb6Y/image_thumb%5B2%5D.png?imgmax=800" width="550" height="306" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Debug the solution to make sure it works.&lt;/p&gt;  &lt;p&gt;Enter the URL of your CRM website, and check Use Saved Credentials and click connect.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TJDuJnuMg1I/AAAAAAAAASA/H6CTerNMTdQ/s1600-h/image%5B18%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TJDuKANOazI/AAAAAAAAASE/hc7nQWA-Hds/image_thumb%5B10%5D.png?imgmax=800" width="547" height="394" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Click Connect again and you should see that the Plug-in Registration tool is working.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TJDuKe1S77I/AAAAAAAAASI/DMX5ipS84xY/s1600-h/image%5B19%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pTy2xto-ivU/TJDuKpttFbI/AAAAAAAAASM/_f-mtdwHMpE/image_thumb%5B11%5D.png?imgmax=800" width="555" height="339" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;For testing purposes you can just run the copy out of the bin debug folder or put a copy on a folder on your desktop.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font size="4"&gt;SQL Reporting Services ( Configure Data Source )&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Now that CRM is installed we need to revisit Reporting services and configure the MS CRM_DataSource&lt;/p&gt;  &lt;p&gt;Go to Reporting Services in Internet Explorer:   &lt;br /&gt;&lt;a title="http://w2008r2crmdev/Reports" href="http://w2008r2crmdev/Reports"&gt;http://w2008r2crmdev/Reports&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TJEi6koRJiI/AAAAAAAAASQ/l_mbOl43FYU/s1600-h/image%5B17%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TJEi7FrjRuI/AAAAAAAAASU/zjMaydIJA9w/image_thumb%5B9%5D.png?imgmax=800" width="549" height="235" /&gt;&lt;/a&gt; Click on &lt;strong&gt;SharedReports     &lt;br /&gt;&lt;/strong&gt;Click on&lt;strong&gt; 5.0.xxxx     &lt;br /&gt;&lt;/strong&gt;Click on &lt;strong&gt;Details View&lt;/strong&gt; since the datasources are hidden by default.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TJEi7bIEwAI/AAAAAAAAASY/dyNZdV6RBuA/s1600-h/image%5B21%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pTy2xto-ivU/TJEi7i449QI/AAAAAAAAASc/qZqgN81zeV8/image_thumb%5B11%5D.png?imgmax=800" width="549" height="145" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Click on &lt;strong&gt;MSCRM_DataSource&lt;/strong&gt;. &lt;font color="#008040"&gt;(obviously adjust the following for your organization name and server name )&lt;/font&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Change the Data source type to:&amp;#160; &lt;strong&gt;Microsoft SQL Server&lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;Change the Connection string to:&amp;#160; &lt;strong&gt;Data Source=W2008R2CRMDEV;Initial Catalog=CRMDEMO_MSCRM;Connection Timeout=60;Integrated Security=SSPI&lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;Click on Windows integrated security.&lt;/li&gt;    &lt;li&gt;Click on Apply&lt;/li&gt;    &lt;li&gt;Click on Test Connection&lt;/li&gt; &lt;/ol&gt;  &lt;blockquote&gt;   &lt;p&gt;You should see: &lt;font color="#008040"&gt;Connection created successfully. &lt;/font&gt;&lt;font color="#000000"&gt;as shown below.&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TJEi7xsshJI/AAAAAAAAASg/Rh1o2oxzk80/s1600-h/image%5B22%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TJEi8Vum0BI/AAAAAAAAASk/N_ouQTMYAUU/image_thumb%5B12%5D.png?imgmax=800" width="583" height="533" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You should now be able to test out a CRM report.   &lt;br /&gt;I just pulled up the Account Distribution Report at the top of the list. &lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TJEi8mWvG7I/AAAAAAAAASo/qNPfqzwL3T4/s1600-h/image%5B31%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pTy2xto-ivU/TJEi8xo7R0I/AAAAAAAAASs/VtUn2E8SH_4/image_thumb%5B17%5D.png?imgmax=800" width="563" height="360" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;That wasn’t really impressive since this VM has almost no data in it, but there were no SSRS errors and that is the important part.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TJEi9ZXhbcI/AAAAAAAAASw/NHcpU8LL28k/s1600-h/image%5B27%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TJEi9iM95dI/AAAAAAAAAS0/6Lpfif9z4xo/image_thumb%5B15%5D.png?imgmax=800" width="568" height="384" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-1765366638508854528?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/1765366638508854528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=1765366638508854528' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/1765366638508854528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/1765366638508854528'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2010/09/ms-crm-2011-beta-vm-continued.html' title='MS CRM 2011 Beta VM continued…'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_pTy2xto-ivU/TJDuIslaLUI/AAAAAAAAAR0/FOhL0nxbut4/s72-c/image_thumb.png?imgmax=800' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-7788753564389757918</id><published>2010-09-12T12:31:00.001-04:00</published><updated>2010-09-12T12:31:31.187-04:00</updated><title type='text'>Creating a MS CRM 2011 VM Part 2 of 2</title><content type='html'>&lt;font size="5"&gt;   &lt;p&gt;     &lt;br /&gt;&lt;/p&gt;   &lt;strong&gt;Performance Note:&lt;/strong&gt; VirtualBox allows you to set more CPU’s for your virtual machine than you should. I ended up using 3 CPU’s for my i7 although it is a hyperthreading and shows 8 cores. I found it MUCH faster set to 3 CPU’s instead of say 4. &lt;/font&gt;  &lt;p&gt;To speed the installation up turn off the SharePoint Websites for now. Go to IIS Manager and stop the SharePoint sites. You may want to leave this off until installing the SharePoint List component in MS CRM and you will probably only want these turned on when you are using SharePoint, otherwise they    &lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TIz_qwvdiCI/AAAAAAAAALI/9Trnm-vQib0/s1600-h/image12.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/TIz_r31CrKI/AAAAAAAAALM/4bmn4SotpQg/image_thumb6%5B1%5D.png?imgmax=800" width="562" height="286" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;font size="5"&gt;   &lt;p&gt;Visual Studio 2010 Installation&lt;/p&gt; &lt;/font&gt;  &lt;p&gt;VS 2010 is a very straight forward installation. It also installs a number of other prerequisites needed for MS CRM 2011 like .NET 4.0. &lt;/p&gt;  &lt;p&gt;Mount your VS 2010 iso image and select it.&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TIz_sSJb9mI/AAAAAAAAALQ/32CD1Yt8-7Y/s1600-h/image3.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/TIz_s8ii-6I/AAAAAAAAALU/cCjJ3vdUB5A/image_thumb1%5B1%5D.png?imgmax=800" width="561" height="431" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/TIz_ts87iII/AAAAAAAAALY/r-LLdxzLA6k/s1600-h/image13.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TIz_uAw40bI/AAAAAAAAALc/t2yFNennntI/image_thumb7.png?imgmax=800" width="572" height="443" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;When that is complete you may want to make another snapshot of your VM.&lt;/p&gt;  &lt;p&gt;At this point your VM’s dvi file should be about 21Gb in size.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font size="5"&gt;Reporting Services Installation&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Go to the Start button and click on All Programs&lt;/p&gt;  &lt;p&gt;Microsoft SQL Server 2008 R2 –&amp;gt;Configuration Tools –&amp;gt; Reporting Service Configuration Manager&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TIz_uyKTpYI/AAAAAAAAALg/fIyNVSRyFYQ/s1600-h/image86.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pTy2xto-ivU/TIz_vRpC_5I/AAAAAAAAALk/ZQMm2GgBe_Y/image_thumb51.png?imgmax=800" width="361" height="249" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Click Connect&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/TIz_vyKSnQI/AAAAAAAAALo/G9Kp5ELUMMA/s1600-h/image90.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TIz_wOcYEzI/AAAAAAAAALs/XW3DPWICTrA/image_thumb53.png?imgmax=800" width="559" height="425" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Click Web Service URL&amp;#160; then Click Apply&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TIz_whSUmvI/AAAAAAAAALw/myG3QX9rZCo/s1600-h/image94.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TIz_w5TBr-I/AAAAAAAAAL0/PJUSbmadfE0/image_thumb55.png?imgmax=800" width="603" height="460" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TIz_xARf8ZI/AAAAAAAAAL4/g4OSEr6a47w/s1600-h/image98.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TIz_xRwFZRI/AAAAAAAAAL8/S0z_PJjHhHY/image_thumb57.png?imgmax=800" width="352" height="97" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;Click on Database and Change Database&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TIz_xwPIcFI/AAAAAAAAAMA/SMib7fdsJ7A/s1600-h/image102.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pTy2xto-ivU/TIz_yMvXTaI/AAAAAAAAAME/_GiM_3jXjTk/image_thumb59.png?imgmax=800" width="596" height="450" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Create a new report server database &lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/TIz_y1o2ziI/AAAAAAAAAMI/U7Nf6ZCF7Ig/s1600-h/image107.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TIz_zbozlNI/AAAAAAAAAMM/OTYWY3iLyAk/image_thumb62.png?imgmax=800" width="602" height="443" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Click Next&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TIz_0LlnfyI/AAAAAAAAAMQ/5gUNhcuKEcE/s1600-h/image112.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TIz_0oY2lGI/AAAAAAAAAMU/-KB-s3uqnzA/image_thumb65.png?imgmax=800" width="607" height="441" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Click Next&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TIz_1agt9cI/AAAAAAAAAMY/GSP0zj3j2JQ/s1600-h/image116.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pTy2xto-ivU/TIz_1uthh1I/AAAAAAAAAMc/AVB-d15llXw/image_thumb67.png?imgmax=800" width="615" height="447" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Click Next&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TIz_2GqrURI/AAAAAAAAAMg/OcC1IWldrgY/s1600-h/image120.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pTy2xto-ivU/TIz_2cHm_nI/AAAAAAAAAMk/7UQ_RV1jXGU/image_thumb69.png?imgmax=800" width="633" height="463" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Click Next &lt;/p&gt;  &lt;p&gt;Click Finish&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TIz_3Pw0u1I/AAAAAAAAAMo/AYrTu0jFo_w/s1600-h/image124.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/TIz_3bAgjcI/AAAAAAAAAMs/tQi80pZ60q0/image_thumb71.png?imgmax=800" width="654" height="476" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Click on Report Manager URL and click apply.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TIz_3nbgjNI/AAAAAAAAAMw/rhPD__mmQxI/s1600-h/image135.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TIz_3xBTsdI/AAAAAAAAAM0/ZnDFQhXF1sw/image_thumb78.png?imgmax=800" width="575" height="443" /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;Once again this is a test VM, so I gave this my Administrator account. You probably won’t be be using connectivity to remote servers anyway.&lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/TIz_4uEjKKI/AAAAAAAAAM4/c9UCHXbIjqo/s1600-h/image134.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/TIz_4w768sI/AAAAAAAAAM8/RpdY_sXIh_Q/image_thumb77.png?imgmax=800" width="570" height="437" /&gt;&lt;/a&gt;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TIz_5ePxKkI/AAAAAAAAANE/O0sZLD7mZ8k/s1600-h/image141.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/TIz_5yK218I/AAAAAAAAANI/-Vxxxa_1vDU/image_thumb82.png?imgmax=800" width="448" height="101" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This is good enough for the MS CRM installation to finish successfully.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font size="5"&gt;MS CRM 2011 Beta Installation&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Included in the download area is the file &lt;a href="http://go.microsoft.com/fwlink/?LinkID=200050"&gt;MicrosoftDynamicsCRM2011BetaIG.zip&lt;/a&gt; containing:&amp;#160; &lt;strong&gt;MicrosoftDynamicsCRM2011BetaInstallingGuide.doc&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;You can refer to that document if there is anything in my instructions below that you need more information about. Page 13 starts “&lt;a name="_Toc271018674"&gt;&lt;strong&gt;Install Microsoft Dynamics CRM 2011 Server on a server without Microsoft Dynamics CRM installed&lt;/strong&gt;&lt;/a&gt;”&lt;/p&gt;  &lt;p&gt;Start by going to you shared folder where you need to copy the CRM2011 executables that you need and copy them to the VM’s desktop. For now we just want the CRM Server and the SharePoint List component.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TIz_6WPjKBI/AAAAAAAAANM/2k0FvYSZy84/s1600-h/image22.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TIz_6qMGy_I/AAAAAAAAANQ/uItFqjlW4YM/image_thumb12.png?imgmax=800" width="580" height="236" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Create a CRM2011Beta folder on your desktop and click on the CRM2011-server-ENU-amd64.exe file and extract the contents into this folder.&lt;/p&gt;  &lt;p&gt;Open the CRM2011Beta folder –&amp;gt; server –&amp;gt; amd64    &lt;br /&gt;Double click on setserver.exe&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TIz_7FbTcXI/AAAAAAAAANU/QjSKBwD6mLc/s1600-h/image4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TIz_74dFEDI/AAAAAAAAANY/SoOFTANhUpg/image_thumb1.png?imgmax=800" width="592" height="255" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The Beta was just released so there is no point in getting any updates yet.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/TIz_8HtJ8jI/AAAAAAAAANc/0ZIl_yfOTlE/s1600-h/image8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/TIz_8tAPDnI/AAAAAAAAANg/7XGSgt4xMtM/image_thumb3.png?imgmax=800" width="603" height="460" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;MS CRM Workgroup (5 CAL limit): &lt;strong&gt;FF2JM-QX9PG-HXT8M-MMHXG-4MF32      &lt;br /&gt;&lt;/strong&gt;MS CRM Server (no CAL limit): &lt;strong&gt;4FDTK-3HYV2-D9CCJ-4MF9Q-QJ32X&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Next put in the appropriate key above.&lt;strong&gt;&amp;#160; &lt;font color="#ff0000"&gt;Notice the 270 day expiration period!&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TIz_80BsgQI/AAAAAAAAANk/e4pFplaru1o/s1600-h/image13%5B1%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TIz_9V_tk4I/AAAAAAAAANo/SfXzYmnNxJc/image_thumb6.png?imgmax=800" width="624" height="461" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Accept the license agreement.&lt;/p&gt;  &lt;p&gt;Install the prerequisites.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TIz_9yZ0_GI/AAAAAAAAANs/LzD1JyJcPE8/s1600-h/image18%5B1%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TIz_-DJyHRI/AAAAAAAAANw/9nQewXWF_3Q/image_thumb9.png?imgmax=800" width="633" height="471" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TIz_-unahHI/AAAAAAAAAN0/w8sqcNf2LFg/s1600-h/image24.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pTy2xto-ivU/TIz_-3OseFI/AAAAAAAAAN4/EN83Nf0Xau8/image_thumb13.png?imgmax=800" width="644" height="483" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Select an installation location or keep the default.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TIz__ccb2GI/AAAAAAAAAN8/gyCkm264pt4/s1600-h/image29.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/TI0AAFP8kJI/AAAAAAAAAOA/u2micG8tfg4/image_thumb16.png?imgmax=800" width="653" height="573" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Click Next and install all of the roles.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/TI0ABNIAQzI/AAAAAAAAAOE/dyHfE3oIsDQ/s1600-h/image34.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TI0ABjOJFtI/AAAAAAAAAOI/gIpmgpPrqNo/image_thumb19.png?imgmax=800" width="661" height="575" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Type in the name of your VM Server.&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TI0AB4KiQaI/AAAAAAAAAOM/dEtPzik9-Rc/s1600-h/image52.png"&gt;      &lt;br /&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/TI0ACIyUpkI/AAAAAAAAAOQ/U1lKsEUcUO4/image_thumb31.png?imgmax=800" width="558" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Click Browse and just select the top node. Click OK and Next.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TI0ACqboZFI/AAAAAAAAAOU/W9E7pVJFRyM/s1600-h/image51.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pTy2xto-ivU/TI0ADNuOlsI/AAAAAAAAAOY/ozdpGxUv92E/image_thumb30.png?imgmax=800" width="553" height="467" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Specifying a Security Account. For a production system you will not want&amp;#160; to do this, but for our demo system, just select &lt;strong&gt;Network service account&lt;/strong&gt;.&amp;#160; There is an additional step required for the SharePoint document management feature when doing this.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TI0ADUzV2HI/AAAAAAAAAOc/elWRkx-486c/s1600-h/image50.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pTy2xto-ivU/TI0AD36vONI/AAAAAAAAAOg/x_BZax24SoI/image_thumb29.png?imgmax=800" width="560" height="485" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You want to create a new website to avoid any conflict with SharePoint and other sites. Keep 5555 for the port. You should have selected 9999 for the SharePoint site if you followed the instructions.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/TI0AEGHg_oI/AAAAAAAAAOk/Ue1OUN3zIKc/s1600-h/image56.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/TI0AEWkHLeI/AAAAAAAAAOo/NYli2oKexGA/image_thumb33.png?imgmax=800" width="556" height="480" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;We are NOT going to set up an Email router at this time. Notice the note. This can be done later.&amp;#160; &lt;em&gt;(Setting up Exchange Server and Outlook on a test environment is worth doing especially with the new multi-tenant support in Outlook)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TI0AEn3pxEI/AAAAAAAAAOs/TeHr36DubbA/s1600-h/image61.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TI0AFSFwScI/AAAAAAAAAOw/zQeCQnuAJEc/image_thumb36.png?imgmax=800" width="570" height="496" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Pick an organization name for your system. It will name the Database automatically. Leave the rest alone. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TI0AFjAVbJI/AAAAAAAAAO0/GIuuXDOVKg0/s1600-h/image66.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pTy2xto-ivU/TI0AFxXjVZI/AAAAAAAAAO4/CRITAoWFpZw/image_thumb39.png?imgmax=800" width="586" height="510" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Take the default reportserver name unless you have installed it somewhere else.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TI0AGflUZlI/AAAAAAAAAO8/xlLZBmDDW1k/s1600-h/image71.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TI0AGhKTw1I/AAAAAAAAAPA/NU-rmrd7VeI/image_thumb42.png?imgmax=800" width="600" height="520" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;Decide if you want to take part in the use experience and click Next.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TI0AG_QKj4I/AAAAAAAAAPE/a5Sgf0tWeqI/s1600-h/image76.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TI0AHeUAaeI/AAAAAAAAAPI/ScDRD4XMkw0/image_thumb45.png?imgmax=800" width="611" height="534" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TI0AH8aub9I/AAAAAAAAAPM/i3lB2Z9f4sE/s1600-h/image82.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/TI0AIMdAIpI/AAAAAAAAAPQ/YGoBnJ8sAhA/image_thumb49.png?imgmax=800" width="621" height="541" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Next Installation&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TI0AIY3p4bI/AAAAAAAAAPU/KIicuh8m5dA/s1600-h/image146.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TI0AI87clmI/AAAAAAAAAPY/ZrMrUt0fokA/image_thumb85.png?imgmax=800" width="623" height="545" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TI0AJKllUiI/AAAAAAAAAPc/AFCpbMaeDVg/s1600-h/image151.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pTy2xto-ivU/TI0AKA_el5I/AAAAAAAAAPg/UHueDnn26Nc/image_thumb88.png?imgmax=800" width="629" height="550" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TI0AKurRCmI/AAAAAAAAAPk/2jRWe_6YXbg/s1600-h/image156.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TI0ALWUCHzI/AAAAAAAAAPo/bPlKm8ESOJw/image_thumb91.png?imgmax=800" width="640" height="562" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;It may sit like this for a while. Be patient…&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TI0ALgEDS1I/AAAAAAAAAPs/0wr4dw-iVA4/s1600-h/image%5B4%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TI0AMDdBb4I/AAAAAAAAAPw/tGJXKuKSoRY/image_thumb%5B1%5D.png?imgmax=800" width="660" height="575" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Getting close now.&amp;#160; Check the box to set up the SSRS extensions, and click Finish!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TI0AMcz2-BI/AAAAAAAAAP0/KMSzpCQpU54/s1600-h/image%5B16%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TI0AM5C8r_I/AAAAAAAAAP4/FlgbFPqWBHQ/image_thumb%5B9%5D.png?imgmax=800" width="664" height="580" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font size="5"&gt;Installing the SSRS Connector&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;If you decided not to start this when the CRM installation finished. On your desktop go to the srsdataconnector folder&amp;#160; CRM2011Beta\server\amd64\srsdataconnector&amp;#160; and Double click on the file &lt;strong&gt;SetupSrsDataConnector.exe&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TI0ANSFUaJI/AAAAAAAAAP8/RzP6oRTV5XM/s1600-h/image%5B20%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TI0AN6ism3I/AAAAAAAAAQA/xyaF4VjuKic/image_thumb%5B11%5D.png?imgmax=800" width="680" height="514" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Click Next&lt;/p&gt;  &lt;p&gt;Accept the license agreement&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TI0AONZDokI/AAAAAAAAAQE/SaYH1hAm-3s/s1600-h/image%5B25%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/TI0AOR0b1aI/AAAAAAAAAQI/gCroKweiDA8/image_thumb%5B14%5D.png?imgmax=800" width="686" height="521" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TI0AO2mmNlI/AAAAAAAAAQM/P3Q9C4mPmAo/s1600-h/image%5B30%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/TI0APD1EL_I/AAAAAAAAAQQ/2C-EzKmPhSs/image_thumb%5B17%5D.png?imgmax=800" width="694" height="606" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/TI0APgkWtSI/AAAAAAAAAQU/nV6AMmZ5Vl8/s1600-h/image%5B35%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TI0AP5os35I/AAAAAAAAAQY/p5H47MO24aY/image_thumb%5B20%5D.png?imgmax=800" width="701" height="612" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TI0AQY6id7I/AAAAAAAAAQc/0sfwrDK9Hhc/s1600-h/image%5B47%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TI0ARLe1igI/AAAAAAAAAQk/L4rFeCHtLmA/image_thumb%5B28%5D.png?imgmax=800" width="620" height="545" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The warnings are OK for a demo, development box.&amp;#160; Click Next.&amp;#160; &lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TI0ARpQ1QfI/AAAAAAAAAQo/QGXB-XZSQvI/s1600-h/image%5B46%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pTy2xto-ivU/TI0AR4vDCjI/AAAAAAAAAQs/G8dl3viaLYM/image_thumb%5B27%5D.png?imgmax=800" width="622" height="542" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TI0ASYAunrI/AAAAAAAAAQw/_eDbbfUqZD8/s1600-h/image%5B51%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/TI0AS7ut0iI/AAAAAAAAAQ0/l4992O8_w3Y/image_thumb%5B30%5D.png?imgmax=800" width="638" height="551" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TI0ATbzGSvI/AAAAAAAAAQ4/xLi2TjGpQuk/s1600-h/image%5B56%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TI0ATrIRk3I/AAAAAAAAAQ8/uJLFGilM-nk/image_thumb%5B33%5D.png?imgmax=800" width="647" height="562" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/TI0AT7QtEDI/AAAAAAAAARA/377y6eamgv4/s1600-h/image%5B61%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TI0AUTQs30I/AAAAAAAAARE/884wA379-g8/image_thumb%5B36%5D.png?imgmax=800" width="654" height="572" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The Moment of truth…. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TI0AUpvMqKI/AAAAAAAAARI/8_V2J4DS_Bk/s1600-h/image%5B66%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pTy2xto-ivU/TI0AU8pze0I/AAAAAAAAARM/Opv2jo5yQ1I/image_thumb%5B39%5D.png?imgmax=800" width="674" height="503" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;At this point I shut the system down. It was apparent that it was running out of memory with 4Gb RAM. So I shut it down to make a snapshot and to increase the memory to about 6Gb to see if that was usable.&lt;/p&gt;  &lt;p&gt;It seemed much faster after the reboot. It is interesting to note that it is only using about 2.5Gb of RAM without SharePoint running.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TI0AVU1QPtI/AAAAAAAAARQ/7McprWPKa_w/s1600-h/image%5B70%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TI0AV4qqoWI/AAAAAAAAARU/Zr6s4UcEBJE/image_thumb%5B41%5D.png?imgmax=800" width="693" height="507" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now turn on the SharePoint Sites again.&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TI0AWBFb2tI/AAAAAAAAARY/F_RIczMa7g4/s1600-h/image%5B74%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TI0AWhexmsI/AAAAAAAAARc/K4HTkLwgk64/image_thumb%5B43%5D.png?imgmax=800" width="691" height="464" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Create a SPList folder on your desktop. Copy the&amp;#160; CRM2011-SharePointList-ENU-amd64.exe&amp;#160; file from the Shared Folder areato the VM’s desktop and double click on it.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TI0AWxxH-fI/AAAAAAAAARg/s-4oPLchW8A/s1600-h/image%5B79%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TI0AXou9GbI/AAAAAAAAARk/3n2_KmwXHKo/image_thumb%5B46%5D.png?imgmax=800" width="426" height="391" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Browse to your new folder, and click OK.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TI0AXyAC8yI/AAAAAAAAARo/9b3c8MhPS5M/s1600-h/image%5B83%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TI0AYVAiLUI/AAAAAAAAARs/pd5yvR5Q7z4/image_thumb%5B48%5D.png?imgmax=800" width="445" height="305" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Read the following inside the SPList folder for instructions to install the SP List Component.&lt;/p&gt;  &lt;p&gt;Microsoft_Dynamics_CRM_2011_List_Component_Readme.htm&lt;/p&gt;  &lt;p&gt;More to come. I have to do something else for a little while…&lt;/p&gt;  &lt;p&gt;Good luck with the new Beta!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-7788753564389757918?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/7788753564389757918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=7788753564389757918' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/7788753564389757918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/7788753564389757918'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2010/09/creating-ms-crm-2011-vm-part-2-of-2.html' title='Creating a MS CRM 2011 VM Part 2 of 2'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_pTy2xto-ivU/TIz_r31CrKI/AAAAAAAAALM/4bmn4SotpQg/s72-c/image_thumb6%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-3056170841944713720</id><published>2010-09-11T19:50:00.001-04:00</published><updated>2010-09-11T19:51:00.023-04:00</updated><title type='text'>Creating a MS CRM 2011 VM Part 1 of 2</title><content type='html'>&lt;p&gt;I needed both a demo box and development environment to run on Win7 64 bit computers to show customers and to write code against the MS CRM 2011 beta using the SharePoint 2010 connectivity and Visual Studio 2010 to write WP7 applications against the new WCF services in MS CRM. &lt;/p&gt;  &lt;p&gt;The new SharePoint List Connectivity in MS CRM 2011 is a feature a number of my customers are interested in and I expect to have a lot more CRM/SharePoint integration projects coming up. Assuming this is an indication of a general interest, this would be a great time to start learning SharePoint if you haven’t already so I consider this an important piece to build into this VM.&lt;/p&gt;  &lt;p&gt;&lt;font size="4"&gt;Two points:&lt;/font&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;The world is going 64bit everywhere. There is no point trying to set up a 32bit box. It is time to just say no to 32 bit. &lt;/li&gt;    &lt;li&gt;Virtual PC doesn’t support 64bit applications which effectively makes it useless! &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;font size="4"&gt;Options to Host a Virtual machine in Windows 7 64 bit&lt;/font&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Virtual Server on a W7 box as shown here (unsupported by MS)&lt;a href="http://tfl09.blogspot.com/2009/08/windows-7-and-virtual-server.html"&gt;http://tfl09.blogspot.com/2009/08/windows-7-and-virtual-server.html&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;VMware &lt;a title="http://www.vmware.com/" href="http://www.vmware.com/"&gt;http://www.vmware.com/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;VirtualBox&lt;/strong&gt;&amp;#160; &lt;a title="http://www.virtualbox.org/wiki/Downloads" href="http://www.virtualbox.org/wiki/Downloads"&gt;http://www.virtualbox.org/wiki/Downloads&lt;/a&gt; &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;I chose Virtual Box 3.2.8 based on many recommendations. It can run 64bit VHD’s and VMWare VMs but will create a VDI file and it’s a free open source solution.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TIwVqJLLVOI/AAAAAAAAAI0/PEUlqMXV4lA/s1600-h/image4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pTy2xto-ivU/TIwVqrTRqII/AAAAAAAAAI4/KN3zOIQ3wXw/image_thumb2.png?imgmax=800" width="544" height="305" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;font size="4"&gt;VirtualBox installation in Windows 7 64bit&lt;/font&gt; &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Stop IP Helper Service ( this will keep the VBox installation from working) &lt;/li&gt;    &lt;li&gt;Install VirtualBox from the downloaded exe. &lt;font color="#0000ff"&gt;VirtualBox-3.2.8-64453-Win.exe&lt;/font&gt; &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TIwVq9XDdZI/AAAAAAAAAI8/fabsZ4o23H0/s1600-h/image108.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TIwVraCR_LI/AAAAAAAAAJA/lZWHtx0tX7o/image_thumb65.png?imgmax=800" width="551" height="337" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;font size="4"&gt;What you need before beginning to build your VM:&lt;/font&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Time:&lt;/strong&gt; Expect at least a full day to get everything set up and that’s on a reasonably fast system. My host system ( i7 12Gb RAM running the VM image off of RAID 0 10,000rpm drives, (VM 6Gb RAM, and 4 cores)) took a full day. Plan accordingly!       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Windows 2008 R2 64 bit iso image &lt;/li&gt;    &lt;li&gt;SQL Server 2008 R2 64 bit iso image (recent copy 5/3/2010)&amp;#160; &lt;ul&gt;       &lt;li&gt;&lt;font size="1"&gt;&lt;font color="#ff0000"&gt;Note:&lt;/font&gt; Older SQL iso files may require SQL Server 2008 R2 SP1 and the following Hot Fix SQL Server SP1 Cumulative Update 2 &lt;/font&gt;&lt;a href="http://support.microsoft.com/kb/970315/"&gt;&lt;font size="1"&gt;http://support.microsoft.com/kb/970315/&lt;/font&gt;&lt;/a&gt;&lt;font size="1"&gt; &lt;/font&gt;&lt;/li&gt;        &lt;li&gt;&lt;font size="1"&gt;They will give you this error message during the SharePoint Installation.            &lt;br /&gt;&lt;/font&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TIwVril0rPI/AAAAAAAAAJE/F0-WPJ4fyls/s1600-h/image111.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TIwVr56FV5I/AAAAAAAAAJI/JP66rb0MZRI/image_thumb66.png?imgmax=800" width="244" height="107" /&gt;&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;Save yourself the trouble and download the latest SQL 2008 R2 &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;SharePoint Server 2010 64 bit iso image &lt;/li&gt;    &lt;li&gt;VS 2010 iso image &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The current CRM 2011 beta downloads are&lt;strong&gt; &lt;/strong&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=0c7dcc45-9d41-4e2e-8126-895517b4274c&amp;amp;displayLang=en"&gt;&lt;strong&gt;here&lt;/strong&gt;&lt;/a&gt; you will need the following:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;MS CRM 2011 Server CRM2011-server-ENU-amd64.exe &lt;/li&gt;    &lt;li&gt;CRM2011-SharePointList-ENU-amd64.exe &lt;/li&gt;    &lt;li&gt;MicrosoftDynamicsCRM2011BetaSDK.exe &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="4"&gt;Credit where credit is due:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;I am going to defer to the good work of the folks at Critical Path Training for their excellent instructions and links to video for setting up a SharePoint 2010 VM, so please visit their site &lt;a title="http://www.criticalpathtraining.com" href="http://www.criticalpathtraining.com"&gt;http://www.criticalpathtraining.com&lt;/a&gt; create an account (it’s free), then go to the Members Section and download their pdf document:     &lt;br /&gt;“&lt;strong&gt;&lt;font color="#800000"&gt;SharePoint Server 2010 RTM Virtual Machine Setup Guide&lt;/font&gt;&lt;/strong&gt;”. &lt;/p&gt;  &lt;p&gt;These instructions will walk you through setting up Windows Server 2008R2, SQL Server 2008 R2, and SharePoint 2010 which is covers a good chunk of what we are installing.&lt;/p&gt;  &lt;p&gt;Their instructions start with setting up a Hyper-V vhd which you can skip unless you are setting this up on a Microsoft Virtual Server system. You should be able to run a vhd created on a Virtual Server system on a Windows 7 64bit box using VirtualBox.    &lt;br /&gt;    &lt;br /&gt;Since my intent is to create this VM on a Windows 7 64bit system here are my VirtualBox instructions.&lt;/p&gt;  &lt;p&gt;Start VirtualBox and Click on New, click Next&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TIwVsGgHO2I/AAAAAAAAAJM/Gyo_fdTAHSA/s1600-h/image84.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TIwVsfq99_I/AAAAAAAAAJQ/rKB0zYoZbnw/image_thumb51.png?imgmax=800" width="546" height="113" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Give your machine a name:&amp;#160;&amp;#160; W2008R2CRMDEV &lt;/li&gt;    &lt;li&gt;Operating System: Microsoft Windows &lt;/li&gt;    &lt;li&gt;Version: Windows 2008 (64 bit) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TIwVsy7wiVI/AAAAAAAAAJU/ALdvVAcYR-s/s1600-h/image85.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/TIwVtAFVRRI/AAAAAAAAAJY/lxLLOQHDDnk/image_thumb52.png?imgmax=800" width="509" height="365" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Give it a minimum of 4Gb of memory or more if you can spare it.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TIwVtyhMJ_I/AAAAAAAAAJc/tbMKoPFcs6Q/s1600-h/image36.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TIwVueZVJuI/AAAAAAAAAJg/HAJbEUz5Khg/image_thumb22.png?imgmax=800" width="459" height="325" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Create a new hard Disk. Click Next and Next again at the Create Virtual Disk Wizard.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TIwVuxB1DjI/AAAAAAAAAJk/uki-Hhxo3VI/s1600-h/image40.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TIwVvcLdl4I/AAAAAAAAAJo/bkc0Ci2ky-0/image_thumb24.png?imgmax=800" width="461" height="325" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Select Dynamically expanding storage&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TIwVv_FpUgI/AAAAAAAAAJs/w94nCA3f6rs/s1600-h/image44.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/TIwVwpSvQcI/AAAAAAAAAJw/JJ688LkXT7o/image_thumb26.png?imgmax=800" width="480" height="334" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The virtual disk is only 324Mb while empty and will only use as much disk space as it needs so give it 100Gb.Click the folder button to choose where you want to store this image.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/TIwVxChDm_I/AAAAAAAAAJ0/fP2Urn5WfGY/s1600-h/image48.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TIwVxh52jUI/AAAAAAAAAJ8/pH5WL-H0e7Q/image_thumb28.png?imgmax=800" width="494" height="348" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Click Next and then click Finish.    &lt;br /&gt;Now you will want to make a few more adjustments.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TIwVx_nTssI/AAAAAAAAAKA/H1A5k1isDoM/s1600-h/image52.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TIwVyBJ0Q3I/AAAAAAAAAKE/6T2m8pZDsfc/image_thumb30.png?imgmax=800" width="366" height="523" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Click on &lt;font color="#0000ff"&gt;System &lt;/font&gt;&lt;font color="#000000"&gt;then click on the Processor tab and add some CPU’s if you can so the installation will go faster. You can always reduce the memory or CPU’s later.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/TIwVyrxbLyI/AAAAAAAAAKI/S66aBZ3QkOE/s1600-h/image61.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/TIwVy6Qa1vI/AAAAAAAAAKM/ppmFnP-5brg/image_thumb35.png?imgmax=800" width="536" height="399" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Click on Display and set the video memory to 128Mb.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/TIwVzdAMC6I/AAAAAAAAAKQ/SOCGWYiO_CA/s1600-h/image57.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pTy2xto-ivU/TIwVzxZM6_I/AAAAAAAAAKU/Bvjiqw2MMIo/image_thumb33.png?imgmax=800" width="531" height="395" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Click on the Shared Folders and point to an area to access files. You will need this to install the SQL Server SP1 and Hotfix and for moving files around later.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TIwV0VXVnxI/AAAAAAAAAKY/OcJkAKq6juI/s1600-h/image65.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TIwV0vLoi-I/AAAAAAAAAKc/vM5MbJCv5xk/image_thumb37.png?imgmax=800" width="562" height="418" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Next Click Start&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/TIwV09bawBI/AAAAAAAAAKg/2kpB5PazV-A/s1600-h/image89.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/TIwV1fY3csI/AAAAAAAAAKk/yJpiid__x1o/image_thumb54.png?imgmax=800" width="564" height="483" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Click on the Folder and Browse to your ISO image of the Windows 2008R2 DVD    &lt;br /&gt;You can use a DVD, but it will be much slower.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TIwV1uB-NjI/AAAAAAAAAKo/yL2oOw0qNAw/s1600-h/image93.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TIwV2BLCW8I/AAAAAAAAAKs/9w9DES2vi9k/image_thumb56.png?imgmax=800" width="577" height="494" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Once you have your iso images added, you can run any of them for installations, by just selecting the .iso file and clicking the Select Button.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/TIwV2qo-oFI/AAAAAAAAAKw/EZSkEEwuykg/s1600-h/image97.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/TIwV25DCLII/AAAAAAAAAK0/IUZ_NAwEtBo/image_thumb58.png?imgmax=800" width="588" height="461" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Once you have Windows 2008 installed make sure to install the Guest additions just so that the mouse transitions better.&lt;/p&gt;  &lt;p&gt;Devices –&amp;gt; Install Guest Additions&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;When you need to reach the CRM executables access the shared drives in Windows Explorer&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Network –&amp;gt; VBOXSVR –&amp;gt; &lt;a href="file://\\VBOXSVR\Shared"&gt;\\VBOXSVR\Shared&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/TIwV3cfBVgI/AAAAAAAAAK4/eZn55tj2iRA/s1600-h/image102.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/TIwV3hEPj0I/AAAAAAAAAK8/g3kOjM6XKw0/image_thumb61.png?imgmax=800" width="624" height="301" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Use the Critical Path instructions starting with the section to install Windows 2008R2 then SQL Server 2008R2 and SharePoint 2010. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Notes:&lt;/strong&gt; &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;When the Farm configuration Wizard is running, it could take an hour or longer and the IE screen can time out.&amp;#160; When the CPU finally calms down it is done. My VM was running about 100% on each CPU while this was running. &lt;/li&gt;    &lt;li&gt;The first time you bring up your default site it may time out a couple times and then finally work. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/TIwV4LfFv_I/AAAAAAAAALA/I73zhPlVsNM/s1600-h/image116.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/TIwV4seM9XI/AAAAAAAAALE/rrXYCAjLLXU/image_thumb69.png?imgmax=800" width="628" height="518" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This gives you a great starting point to install the MS CRM 2011 Beta. &lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000" size="3"&gt;&lt;strong&gt;Important!!!!&lt;/strong&gt;&lt;/font&gt; I would highly recommend that you make a copy of your VDI file at this point!&amp;#160; You may want to install various MS CRM 2011 release candidates and then the final RTM on this system later, or my might want to install MS CRM 4.0 on this system as well.&amp;#160; Also Visual Studio is great for a Development system, but you may want to create a DEMO system at some point without VS installed.&lt;/p&gt;  &lt;p&gt;&lt;font size="5"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-3056170841944713720?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/3056170841944713720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=3056170841944713720' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/3056170841944713720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/3056170841944713720'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2010/09/creating-ms-crm-2011-vm-part-1-of-2.html' title='Creating a MS CRM 2011 VM Part 1 of 2'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_pTy2xto-ivU/TIwVqrTRqII/AAAAAAAAAI4/KN3zOIQ3wXw/s72-c/image_thumb2.png?imgmax=800' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-2976318549246091389</id><published>2010-08-06T16:48:00.001-04:00</published><updated>2010-08-06T16:48:13.556-04:00</updated><title type='text'>MS CRM 4.0 LINQ Support in CRM SDK 4.0.12</title><content type='html'>&lt;p&gt;So far I really like what I have seen in this new SDK release &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=82E632A7-FAF9-41E0-8EC1-A2662AAE9DFB&amp;amp;displaylang=en"&gt;MS CRM SDK&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;It solves real problems and will actually make life better for CRM developers.&lt;/p&gt;  &lt;p&gt;The new LINQ support can be used by people customizing their own propriety CRM systems and for integrators and xRM developers with software to deploy across different CRM schemas.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#000000"&gt;How they got it right and made life easier!&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;The attributes can be directly accessed as simple types!&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;&lt;strong&gt;&lt;font color="#0080ff"&gt;bool?&lt;/font&gt;&lt;/strong&gt;&amp;#160; instead of&amp;#160; &lt;font color="#0080ff"&gt;CrmBoolean&lt;/font&gt;&lt;/li&gt;      &lt;li&gt;&lt;strong&gt;&lt;font color="#0080ff"&gt;Guid&lt;/font&gt;&lt;/strong&gt;&amp;#160;&amp;#160; instead of&amp;#160;&amp;#160; &lt;font color="#0080ff"&gt;Key&lt;/font&gt;&lt;/li&gt;      &lt;li&gt;&lt;font color="#0080ff"&gt;etc..         &lt;br /&gt;&lt;/font&gt;&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;The related entities are associated as a list of entities like you would expect with LINQ&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;&lt;font color="#0080ff"&gt;&lt;strong&gt;IEnumerable&amp;lt;contact&amp;gt;&lt;/strong&gt;&lt;/font&gt;&amp;#160; instead of a &lt;font color="#0080ff"&gt;&lt;strong&gt;BusinessEntityCollection&lt;/strong&gt;&lt;/font&gt;.&lt;/li&gt;      &lt;li&gt;Many less queries need to be coded greatly simplifying code.&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Even though the additional queries are generated internally, they are done on the SQL side rather then requiring multiple web service calls which should be faster.&lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;The related entity list names are predictable!&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;ex.&amp;#160; acct.account_contacts&lt;/li&gt;        &lt;li&gt;ex.&amp;#160; acct.new_account_contact&lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;&lt;strong&gt;Note:&lt;/strong&gt; This is a significant improvement from the LINQtoSQL model that would just name related entities&amp;#160; contacts, contacts1, contacts2 without any way to predict which related list is which and wouldn’t give you a permanent way to set naming behavior. Adding an additional relationship to an entity that was already related could ruin your existing LINQ, requiring manual editing of the model xml.        &lt;br /&gt;&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;There is now much less of a reason to need to use the much more primitive &lt;strong&gt;Fetch&lt;/strong&gt; type syntax.&amp;#160; &lt;font color="#0080ff"&gt;string xmlResults = crmService.Fetch(xmlQuery);&lt;/font&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Entity classes do &lt;strong&gt;NOT&lt;/strong&gt; need to be identical to the CRM schema for Selects!      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Entity classes do &lt;strong&gt;NOT&lt;/strong&gt; need to be identical to the CRM schema for Updates!&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;According to MS the Update operation sends only modified attributes back to the server so you don’t have to care about anything else that’s been added.       &lt;br /&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;In a nutshell&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Strong typing and compile time errors     &lt;br /&gt;No web reference required      &lt;br /&gt;Easily regenerated Entity classes&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Simple Maintenance&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;From a command line all you have to do is use the new crmsvcutil.exe to generate and update the LINQ Entity class source files. More information here.&amp;#160; &lt;a href="http://msdn.microsoft.com/en-us/library/ff681561.aspx"&gt;MSDN reference&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#000000"&gt;C:\&amp;gt; crmsvcutil /server:&lt;/font&gt;&lt;a href="http://crm/Contoso"&gt;&lt;font color="#000000"&gt;http://crm/Contoso&lt;/font&gt;&lt;/a&gt;&lt;font color="#000000"&gt; /out:MyLinqEntities&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#000000"&gt;One of the reasons I really appreciate this is that I wrote a utility to read all of the MS CRM Metadata and generate (Data Transfer Objects) or DTO’s for RIA services about a year ago along with all of the associated attributes for validation.&amp;#160; &lt;strong&gt;Idea for MS&lt;/strong&gt;: If we had a switch on this utility to dynamically generate validation criteria attributes from the MS CRM metadata so that we could bind a control to it, that would be great for MVVM Silverlight apps!&amp;#160; Or generate them by default and just comment them out.&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;strong&gt;Getting Started:&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;David Yack has an &lt;a href="http://crm.davidyack.com/journal/2010/5/6/new-crm-sdk-new-developer-experience.html"&gt;explanation&lt;/a&gt; of how to set up MS CRM LINQ on your system and use it in a hello world project. There is no point duplicating his effort.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Sample Solution:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The following is a very simple &lt;a href="http://www.onecrmpro.com/downloads/CRMLINQSolution.zip"&gt;sample solution&lt;/a&gt; 7.5Mb that is little more than the sample in the explanation link above. However the SDK libraries are included in the solution as are the Entity class files generated from the stock MS CRM 4.0 Contoso VM with a couple additions to the Account entity.&lt;/p&gt;  &lt;p&gt;Since it ONLY accesses a couple standard fields in the Account entity it should work out of the box on any CRM 4 box once the Server name is set in the app.config file.&amp;#160; Just change the line below to whatever your local server name/orgname is and it should work.&lt;/p&gt;  &lt;p&gt;Server=&lt;a href="http://crm/Contoso;&amp;quot;/"&gt;http://crm/Contoso;&amp;quot;/&lt;/a&gt;&amp;gt;&lt;/p&gt;  &lt;p&gt;This is good stuff and the sooner you start using this the more time it will save you!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-2976318549246091389?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/2976318549246091389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=2976318549246091389' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/2976318549246091389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/2976318549246091389'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2010/08/ms-crm-40-linq-support-in-crm-sdk-4012.html' title='MS CRM 4.0 LINQ Support in CRM SDK 4.0.12'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-4754371785070536661</id><published>2009-10-03T07:01:00.001-04:00</published><updated>2009-10-03T07:01:26.723-04:00</updated><title type='text'>MS CRM 4.0 Sending Attachments to the Browser</title><content type='html'>&lt;p&gt;In a previous blog article I covered how to take files and make them attachments to emails. &lt;a href="http://crmscape.blogspot.com/2008/10/creating-attachments-to-emails-and.html"&gt;Creating Attachments to emails and annotations&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Recently I’ve been spending more time building portals to MS CRM, and have needed to make attached files available to the user by browser.&lt;/p&gt;  &lt;p&gt;From a custom web app running with MS CRM you can always create a link like the following that will call the annotation editor screen which will let you download the attachment or delete it or add an additional attachment to the annotation.&lt;/p&gt;  &lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 98.06%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 43px; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;   &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 97.18%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; height: 30px; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; link = String.Format(&lt;span style="color: #006080"&gt;@&amp;quot;{0}{1}/notes/edit.aspx?id={2}&amp;quot;&lt;/span&gt;, crmServerBaseUrl, orgname, thisNote.annotationid.Value);&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;However sometimes when working with an external application you don’t have the ability to call the MS CRM functionality or for aesthetic reasons you want things to look differently. In this case I have a Silverlight 3 application with a completely different look and feel and I just need to retrieve annotation attachments from a list associated with an entity or contact. The ExportFile() method below would work just as well with an activitymimeattachment for email attachments.&lt;/p&gt;

&lt;p&gt;The following aspx file simply takes an annotationid querystring, retrieves that annotation ( you provide the query) and sends the attached file to the user’s browser. The user will then be able to download the file or open the file in an appropriate application.&lt;/p&gt;

&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 780px; max-height: 780px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;
  &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System;
&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Web;
&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Passport.Web.Services.Logic;

&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; YourProject
{
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;partial&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; SendAnnotation : System.Web.UI.Page
    {
        &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, EventArgs e)
        {           
            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (Request.QueryString[&lt;span style="color: #006080"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;] != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)
            {                
                Guid annotationId = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Guid(Request.QueryString[&lt;span style="color: #006080"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;].Replace(&lt;span style="color: #006080"&gt;&amp;quot;{&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;).Replace(&lt;span style="color: #006080"&gt;&amp;quot;}&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;));

                &lt;span style="color: #008000"&gt;// Get annotation&lt;/span&gt;
                annotation fileContainer = &lt;span style="color: #008000"&gt;// fill in the query logic you need here.&lt;/span&gt;
                
                &lt;span style="color: #008000"&gt;// Call method to write&lt;/span&gt;
                ExportFile(fileContainer.filename, fileContainer.documentbody, fileContainer.mimetype);             
            }
        }

        &lt;span style="color: #008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span style="color: #008000"&gt;/// This method takes the annotation documentbody and writes it back to the browser&lt;/span&gt;
        &lt;span style="color: #008000"&gt;/// with a file name and mimetype so that your browser knows how to intelligently &lt;/span&gt;
        &lt;span style="color: #008000"&gt;/// handle the file being sent to it.&lt;/span&gt;
        &lt;span style="color: #008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;fileName&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
        &lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;content&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
        &lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;type&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; ExportFile(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; fileName, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; content, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; type)
        {
            &lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;[] fileContent = Convert.FromBase64String(content);
            Response.ClearContent();
            Response.AddHeader(&lt;span style="color: #006080"&gt;&amp;quot;content-disposition&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;attachment; filename=&amp;quot;&lt;/span&gt; + fileName);
            Response.ContentType = type;
            Response.BinaryWrite(fileContent);
            Response.End();
        }
        
    }

}&lt;/pre&gt;
&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-4754371785070536661?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/4754371785070536661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=4754371785070536661' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/4754371785070536661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/4754371785070536661'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2009/10/ms-crm-40-sending-attachments-to.html' title='MS CRM 4.0 Sending Attachments to the Browser'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-2237419075499197429</id><published>2009-07-30T09:46:00.001-04:00</published><updated>2009-07-30T09:46:58.870-04:00</updated><title type='text'>MS CRM 4.0, xRM and building blocks</title><content type='html'>&lt;p&gt;I have spent a number of years working with MS CRM as the end solution while integrating it with many other systems to make it the center of an organization’s business processes, data tracking and communication.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Change is good.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;My emphasis has changed over the last year from business analysis, configuration, integration and customization of MS CRM to xRM systems that use MS CRM as a framework to build non-CRM solutions, and now leveraging MS CRM and xRM systems as a part of larger solutions.&lt;/p&gt;  &lt;p&gt;My change in direction has also made me seriously think about what can be data driven and abstracted away to allow much more powerful solutions. I’m looking at MS CRM’s metadata in a completely new way these days as I integrate MS CRM with EF, RIA services and Silverlight 3. Taking a page from MS CRM’s form designer I’m now building Silverlight XAML based on metadata. &lt;/p&gt;  &lt;p&gt;I’m also working on creating a developer level product out of my MS CRM import framework. (&lt;em&gt;Think Scribe but for developers with complete control over everything for one time data migrations and for scheduled synchronizations&lt;/em&gt;.) &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Enamored with MS&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;A real credit to the MS CRM framework is that I’m always looking at the holes in other technologies compared to what MS CRM allows as a development framework. It seems like they are all playing a game of catch up.&lt;/p&gt;  &lt;p&gt;As a person who loves finding interesting ways to bend and mold MS CRM to do amazing things for businesses, I think the latest developments in EF, RIA and SL3 are really exciting. MS is really giving us great building blocks to create better and more powerful solutions that really improve the user experience. MS should be blushing right now and waiting for me to pucker up and give them a kiss.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Didn’t always feel this way&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Now don’t get me wrong. I didn’t drink the MS Kool-Aid early in my career. I was focused around UNIX technologies for over a decade, QNX (digital Mastering console with proprietary parallel processing backplane), SCO UNIX (tracking nuclear waste shipments by satellite) and (Continuous Emissions Monitoring systems), Interactive, AIX ( Medical Systems ). I also touched HP/UX, IRIX, Coherent and Linux to a lesser extent.&amp;#160; &lt;/p&gt;  &lt;p&gt;At one point all serious work was done in UNIX, period. Now that am creating business solutions, I really can’t see any competitors to the business infrastructure and products that MS has and is developing. MS has so many technologies that really deliver and connect together easily that I rarely feel like I can’t create a solution to any problem.&amp;#160; Maybe I’m just having some really good development days lately, but it just seems like a lot of new technologies are really evolving well.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;So how does this impact my blog?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I’m still working with all of the MS CRM API’s, but have noticed that a lot of things are so second nature that I don’t even think about them any more. The result is that I have less urges to write a blog articles.&amp;#160; I continue to read and answer questions in the newsgroup &lt;strong&gt;&lt;font color="#0080ff"&gt;microsoft.public.crm.developer&lt;/font&gt;&lt;/strong&gt; which is sometimes a source of inspiration for blog articles, and I expect to add some content soon on using the MS CRM metadata web service, so time will tell.&lt;/p&gt;  &lt;p&gt;I’m also considering creating a secondary blog dealing with the fun of global development, virtual dev teams, finding talent, maximizing personal productivity, tools and lessons learned. &lt;/p&gt;  &lt;p&gt;Of course the trick is keeping balance in my life while doing this. I’ve been very fortunate that I continue to be found by some great customers who have been fun to work with and have very interesting and challenging work. I am even more fortunate to have a great wife who pulls me away from the computer to play ( cycling, mountain biking, hiking, etc.. ). &lt;/p&gt;  &lt;p&gt;Looking forward to the road ahead!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-2237419075499197429?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/2237419075499197429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=2237419075499197429' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/2237419075499197429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/2237419075499197429'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2009/07/ms-crm-40-xrm-and-building-blocks.html' title='MS CRM 4.0, xRM and building blocks'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-8018749866879542466</id><published>2009-06-22T19:24:00.001-04:00</published><updated>2009-06-22T19:34:23.733-04:00</updated><title type='text'>RFC822 Import to MS CRM email activity utility</title><content type='html'>&lt;p&gt;When migrating from Goldmine and some other CRM systems to MS CRM there is sometimes a need to import historical email.&amp;#160; This is frequently stored in a SQL database in rfc822 format. RFC822 is an email format standard.&lt;/p&gt;  &lt;p&gt;What I am providing is a single class along with a file from the MS CRM SDK that this class currently uses. This single class is consolidated from a number of other classes in my import framework and is intended to give you a nearly complete rfc822 import solution that you can modify for your needs.&amp;#160; Every place that you need to make a modification according to your particular system has a &lt;font color="#008000"&gt;//&lt;/font&gt;&lt;strong&gt;&lt;font color="#000080"&gt;TODO:&lt;/font&gt;&lt;/strong&gt; comment explaining what you need to adjust particular to your configuration. In addition assume that there will be some tweaking required, and make sure to do thorough debugging and testing to verify that your email records are being properly generated.&lt;/p&gt;  &lt;p&gt;You can download the source code &lt;a href="http://www.onecrmpro.com/downloads/rfc822ToEmail_Source.zip" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;There are 2 steps to using this class.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#0080c0"&gt;Part 1: Initialize a new RFC822ToEmailActivity object.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 95.36%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 29px; background-color: #f4f4f4"&gt;   &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 84.16%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; height: 15px; background-color: #f4f4f4; border-bottom-style: none"&gt;var emailConversion = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; RFC822ToEmailActivity(&lt;span style="color: #006080"&gt;&amp;quot;Contoso&amp;quot;&lt;/span&gt;); // Your Orgname&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;font color="#0080c0"&gt;Part 2: Calling the CreateEmailFromRfc822Record() method&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CreateEmailFromRfc822Record() should be called in your loop that is reading the rfc822 records&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 125px; background-color: #f4f4f4"&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 91.37%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; height: 112px; background-color: #f4f4f4; border-bottom-style: none"&gt;var emailEntity = emailConversion.CreateEmailFromRfc822Record(&amp;#160;&amp;#160;&amp;#160;&amp;#160; rfc822Record, &lt;span style="color: #008000"&gt;// This is the string holding the whole 822 record&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; localEmailDomainName, &lt;span style="color: #008000"&gt;// This is the local email domain name ex. onecrmpro.com &lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; emailOwnerId, &lt;span style="color: #008000"&gt;// systemUserId of email entity owner&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; relatedEntityName, &lt;span style="color: #008000"&gt;// contact or account or....&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; relatedEntityId &lt;span style="color: #008000"&gt;// id of the entity to regard the email to&lt;/span&gt;
)&lt;/pre&gt;
&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;Calls parsing method &lt;/li&gt;

  &lt;li&gt;Creates email attachments from pathnames returned from parsing method.&lt;/li&gt;

  &lt;li&gt;Writes to an error log file with all attachments that are not found and other errors.&lt;/li&gt;

  &lt;li&gt;Makes any other changes to the email entity before saving it.&lt;/li&gt;

  &lt;li&gt;Sets Email State as completed (sent or received) based on local domain name.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Called Internally: ParseRFC822() parsing and email activity creation.&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Parse an rfc822 record&lt;/li&gt;

  &lt;li&gt;Create an email activity based on that record.&lt;/li&gt;

  &lt;li&gt;Compare email addresses, both To: and From: with a local domain name to decide if the email is incoming or outgoing.&lt;/li&gt;

  &lt;li&gt;Create ActivityParties for To:, CC:, BCC:, From: related to CRM users, Contacts, Accounts and Leads in that match order precedence.&lt;/li&gt;

  &lt;li&gt;Return a list of pathnames to any attachments.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;&lt;font color="#0080c0"&gt;RFC882 Email Attachments&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Products like Gold Mine are storing email bodies in the database but they only have pathnames to the attachments. These attachment paths are frequently on the end user’s local computer which can be unreliable. These attachments may have been renamed, moved or deleted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;Hint1:&lt;/font&gt;&lt;/strong&gt; Create a single shared folder on a file server with a separate tree branch for each computer that has attached files in the email history and modify the pathnames programmatically to match the structure you create on the file server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; 

  &lt;br /&gt;&lt;font color="#0000ff"&gt;S:\importattachments\C\Documents and Settings\mkovalcson\My Documents&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;Hint2:&lt;/strong&gt;&lt;/font&gt; Comment out or create a test mode where nothing is written into the CRM database, but missing attachments are still written to a log file where you can see what isn’t found and decide how important it is to hunt attachments down before the final import.&lt;/p&gt;

&lt;p&gt;You may want to look at this before you get started. 
  &lt;br /&gt;&lt;a href="http://crmscape.blogspot.com/2008/10/ms-crm-data-import-cleaning-up-mess.html" target="_blank"&gt;MS CRM Data Import (Cleaning up the Mess)&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-8018749866879542466?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/8018749866879542466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=8018749866879542466' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/8018749866879542466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/8018749866879542466'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2009/06/rfc882-import-to-ms-crm-email-activity.html' title='RFC822 Import to MS CRM email activity utility'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-3379900433203134491</id><published>2009-06-13T08:41:00.001-04:00</published><updated>2009-06-13T09:00:03.354-04:00</updated><title type='text'>MS CRM 4.0 Entity Mapping and Hidden Mappings</title><content type='html'>&lt;p&gt;Microsoft has a powerful way to manage automatic attribute mappings from entities created from other entities. Typically we see this in the QOI process where an Opportunity is created, and then a Quote, Order or Invoice can be created from the Opportunity and much of the information is automatically copied from the Opportunity to that Quote, Order or Invoice.&lt;/p&gt;  &lt;p&gt;&lt;font color="#0080c0" size="4"&gt;&lt;strong&gt;Entity Mapping&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;If you open up your Opportunity from Customize Entities and look at 1:N Relationships, you can see the opportunity_quotes relationship.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/SjOeXS5f9QI/AAAAAAAAAHo/oWOkX-hFhkg/s1600-h/image%5B12%5D.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="308" alt="image" src="http://lh4.ggpht.com/_pTy2xto-ivU/SjOeXztJNxI/AAAAAAAAAHs/AH2dJYfnXjU/image_thumb%5B8%5D.png?imgmax=800" width="583" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you double click on that you will see mappings. This shows you the names of each &lt;strong&gt;source&lt;/strong&gt; opportunity attribute that is “&lt;strong&gt;Mapped&lt;/strong&gt;” to a &lt;strong&gt;target&lt;/strong&gt; quote attribute when a Quote is created from an opportunity.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/SjOeYedcIxI/AAAAAAAAAHw/9oTgL70t6ys/s1600-h/image%5B4%5D.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="396" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/SjOeY3FEyFI/AAAAAAAAAH0/vUxjsV9NbOM/image_thumb%5B2%5D.png?imgmax=800" width="588" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This is very useful if you want to add custom fields and have those automatically propagated too or if you want to disable any default mappings.&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000" size="3"&gt;So what about mapping the opportunityproduct?&lt;/font&gt; or quotedetail, salesorderdetail, and invoicedetail for that matter?&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#0080c0" size="4"&gt;Hidden Entity Mapping&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 1.&lt;/strong&gt; You need the EntityMapId for the relationship that you want to map.&lt;/p&gt;  &lt;p&gt;You can manually scan the EntityMapBase table matching against the SourceEntityName and TargetEntityName.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/SjOeZCvdUbI/AAAAAAAAAH4/LIihB5ZZWFA/s1600-h/image%5B27%5D.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="156" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/SjOeZrcJlHI/AAAAAAAAAH8/fEcCeyud-n8/image_thumb%5B17%5D.png?imgmax=800" width="495" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Or you can write a select like the one below to get a nice list of Guids to copy and paste into a temporary form.&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 85.61%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 36px; background-color: #f4f4f4"&gt;   &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 81.85%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; height: 32px; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;Select&lt;/span&gt; TargetEntityName, EntityMapId &lt;span style="color: #0000ff"&gt;from&lt;/span&gt; dbo.EntityMapBase
&lt;span style="color: #0000ff"&gt;where&lt;/span&gt; SourceEntityName = &lt;span style="color: #006080"&gt;'opportunityproduct'&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/SjOeZwjD3kI/AAAAAAAAAIA/hLBTkYCvi7Y/s1600-h/image%5B34%5D.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="299" alt="image" src="http://lh4.ggpht.com/_pTy2xto-ivU/SjOeaRSXiBI/AAAAAAAAAIE/NLFPVddCoxg/image_thumb%5B22%5D.png?imgmax=800" width="592" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2.&lt;/strong&gt; Take the following URL and replace your server name and the EntityMapId of your choice to gain access to the rest of the mappingList editors.&lt;/p&gt;

&lt;p&gt;&lt;a title="http://localhost:5555/Tools/SystemCustomization/Relationships/Mappings/mappingList.aspx?mappingId=3A116CD4-A5EE-DD11-BDF0-0003FFEB167C" href="http://localhost:5555/Tools/SystemCustomization/Relationships/Mappings/mappingList.aspx?mappingId=3A116CD4-A5EE-DD11-BDF0-0003FFEB167C"&gt;http://localhost:5555/Tools/SystemCustomization/Relationships/Mappings/mappingList.aspx?mappingId=3A116CD4-A5EE-DD11-BDF0-0003FFEB167C&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/SjOeayTTUgI/AAAAAAAAAII/yB_8DAyKVs8/s1600-h/image%5B41%5D.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="341" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/SjOebfNMuPI/AAAAAAAAAIM/ykt8mxqxInw/image_thumb%5B27%5D.png?imgmax=800" width="619" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-3379900433203134491?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/3379900433203134491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=3379900433203134491' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/3379900433203134491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/3379900433203134491'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2009/06/ms-crm-40-entity-mapping-and-hidden.html' title='MS CRM 4.0 Entity Mapping and Hidden Mappings'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_pTy2xto-ivU/SjOeXztJNxI/AAAAAAAAAHs/AH2dJYfnXjU/s72-c/image_thumb%5B8%5D.png?imgmax=800' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-466137324534814188</id><published>2009-05-23T06:38:00.001-04:00</published><updated>2009-05-23T06:38:05.285-04:00</updated><title type='text'>CRM Demos, SSD Drives and Virtual Machines</title><content type='html'>&lt;p&gt;When doing a demo you never want the software to look slow, and when doing CRM development against virtual machines performance is always critical to being efficient. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Hardware     &lt;br /&gt;&lt;/strong&gt;Samsung recently released their new 256Gb SSD drive and for me this drive signals that SSD drives have become mature. Intel has had very fast SSD drives available, but they were not very large. Like most other SSD drives they suffered from a condition where over time the drive would drop dramatically in performance. Samsung’s new drive has algorithms to minimize this to the point of it being of it being much less noticeable while still performing very similarly to the Intel SSD’s in access time and throughput.&lt;/p&gt;  &lt;p&gt;So hoping that this drive lived up to my expectations, I replaced my laptop’s 7200 rpm 160Gb drive with Samsung’s new 256Gb SSD drive. My main concern was that running my VM’s off the system drive would still be unacceptable.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Virtual Machines&lt;/strong&gt;    &lt;br /&gt;&lt;font color="#ff0000"&gt;Before:&lt;/font&gt; I have run my vhd files from separate Firewire 800 Raid 0 drives. Keeping the system drive separate from the VHD was critical to getting good virtual machine performance.&lt;/p&gt;  &lt;p&gt;&lt;font color="#008000"&gt;After:&lt;/font&gt; The MS CRM 4.0 VHD 2009 now loads up in a mere 14 seconds while still running on the system drive versus 52 seconds on my external Firewire 800 drive. VS 2008 loads up after a clean boot(nothing cached) in 17 seconds and closes in 2 seconds compared with 57 and 13 seconds on my old drive.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Developing against a VM while on battery&lt;/strong&gt;    &lt;br /&gt;This allows real development work to be done while running on battery power. The new SSD drive uses less power than the original drive did, and lugging around external drives for demos is now unnecessary.&lt;/p&gt;  &lt;p&gt;As I write this the new Samsung drive is currently available at Dell as part 341-9999 for $699.99.&amp;#160; For this you get 256Gb at the speed of a 10,000 rpm RAID system that fits in a laptop while sipping at your batteries. In some ways, especially average access time, it actually blows an expensive and bulky RAID system away. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/ShfSDHjnKYI/AAAAAAAAAHg/0IBT9fvNknY/s1600-h/SSD-Drive_0785%5B5%5D.jpg"&gt;&lt;img title="SSD-Drive_0785" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="496" alt="SSD-Drive_0785" src="http://lh5.ggpht.com/_pTy2xto-ivU/ShfSDDnxrNI/AAAAAAAAAHk/Yij0MNSeNVw/SSD-Drive_0785_thumb%5B3%5D.jpg?imgmax=800" width="529" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Even MORE Speed Possible     &lt;br /&gt;&lt;/strong&gt;I’ve seen reports twin drive laptops getting transfer rates of 300 MB/sec with two of these Samsung drives in a RAID 0 configuration. For comparison a single Samsung drive has a transfer rate of 200MB/sec which is still a lot faster than the 60Mb/sec of a 7200rpm internal laptop drive my less than a year old laptop was using.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Installation&lt;/strong&gt;    &lt;br /&gt;The replacement was easy. I used my Acronis backup software to make a complete disk backup to one of my external RAID drives. For my Dell M6300 I had to remove 4 screws, pull the drive out. Remove two more screws for the surrounding case. Screw the new drive into the case, slide it into the computer and put the 4 attaching screws back in. Boot from the Acronis CD. It recognizes all of my external drives USB and Firewire. Use the Acronis software to “add a drive” and partition it. Then restore the backup, remove the CD and reboot. The backup and restore(much faster) took me about 2.5 hours. Everything else took about 15 minutes.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-466137324534814188?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/466137324534814188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=466137324534814188' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/466137324534814188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/466137324534814188'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2009/05/crm-demos-ssd-drives-and-virtual.html' title='CRM Demos, SSD Drives and Virtual Machines'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_pTy2xto-ivU/ShfSDDnxrNI/AAAAAAAAAHk/Yij0MNSeNVw/s72-c/SSD-Drive_0785_thumb%5B3%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-4629986731760092355</id><published>2009-05-18T09:12:00.001-04:00</published><updated>2009-05-18T09:12:14.748-04:00</updated><title type='text'>MS CRM 4.0 Generate SSRS reports by webservice ( pdf , HTML , CSV , etc..)</title><content type='html'>&lt;p&gt;Below is a Generic SSRS web service reporting method that generates a byte[] perfect for use in an annotation or email attachment. The example method above it shows how to call this method and how to create an annotation attachment.&lt;/p&gt;  &lt;p&gt;You can combine this with my post on &lt;a href="http://crmscape.blogspot.com/2009/03/techniques-for-driving-ms-crm-email.html" target="_blank"&gt;driving email templates&lt;/a&gt; and &lt;a href="http://crmscape.blogspot.com/2008/10/creating-attachments-to-emails-and.html" target="_blank"&gt;generating email attachments&lt;/a&gt; to create some very powerful solutions. If you need a primer on activity parties see my post on &lt;a href="http://crmscape.blogspot.com/2008/10/creating-activityparty-in-ms-crm-40.html" target="_blank"&gt;creating activity parties&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Generating SSRS reports by web service is a very valuable tool. I frequently use this to generate custom reports from custom web applications running in iframes such that the report is run with the permissions of the user running the report. To take advantage of this the reports must be run against MS CRM’s filtered views.&lt;/p&gt;  &lt;p&gt;To Generate an SSRS report by web service do the following:&lt;/p&gt;  &lt;p&gt;1. Add a report execution web reference to your solution. Make sure this link is accessible. The url should be something like the following:   &lt;br /&gt;&lt;strong&gt;http://&amp;lt;SRS_Server_Name&amp;gt;/ReportServer/ReportExecution2005.asmx&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;2. Build up the parameters that you need to generate the report.&lt;/p&gt;  &lt;p&gt;3. Select the Report Name of your Report&lt;/p&gt;  &lt;p&gt;4. Specify the Type of Report&lt;/p&gt;  &lt;p&gt;5. Specify the Device information ( formatting )&lt;/p&gt;  &lt;p&gt;The example method CallReport() below demonstrates these steps. It in turn calls GenerateSRSbytes which makes the actual web service call.&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 2300px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 2300px; background-color: #f4f4f4"&gt;   &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Net;
&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Microsoft.Win32;
&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; ReportExecutionService;


&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; SRSReporting
{

    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; CallReport()
    {
        &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; reportServiceUrl = &lt;span style="color: #006080"&gt;&amp;quot;http://&amp;lt;SRS_Server_Name&amp;gt;/ReportServer/ReportExecution2005.asmx&amp;quot;&lt;/span&gt;;

        &lt;span style="color: #008000"&gt;// Create the Report Service Url from the registry&lt;/span&gt;
        RegistryKey key = Registry.LocalMachine.OpenSubKey(&lt;span style="color: #006080"&gt;&amp;quot;Software\\Microsoft\\MSCRM&amp;quot;&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;);

        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (key != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)
        {
            reportServiceUrl = (&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;)key.GetValue(&lt;span style="color: #006080"&gt;&amp;quot;SQLRSServerURL&amp;quot;&lt;/span&gt;) + &lt;span style="color: #006080"&gt;@&amp;quot;/ReportExecution2005.asmx&amp;quot;&lt;/span&gt;;
        }

        &lt;span style="color: #008000"&gt;// Report parameter Name and Value fields are strings.&lt;/span&gt;

        &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; reportParameter = &lt;span style="color: #006080"&gt;&amp;quot;type&amp;quot;&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; reportValue = &lt;span style="color: #006080"&gt;&amp;quot;annual&amp;quot;&lt;/span&gt;;

        &lt;span style="color: #008000"&gt;// Create as many parameters as you need.&lt;/span&gt;
        var parameters = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt;[]
         {
             &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ParameterValue {Name = &lt;span style="color: #006080"&gt;&amp;quot;entityid&amp;quot;&lt;/span&gt;, Value = &lt;span style="color: #006080"&gt;&amp;quot;0031a390-0d42-de11-9aa9-0003ff517b20&amp;quot;&lt;/span&gt;},
             &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ParameterValue {Name = reportParameter, Value = reportValue}
         };

        &lt;span style="color: #008000"&gt;// Pathname to the report from Reporting Services, where TestReport is the rdl uploaded using http://&amp;lt;SRS_Server_Name&amp;gt;/Reports&lt;/span&gt;
        &lt;span style="color: #008000"&gt;// Make sure that you set the Data Source properly&lt;/span&gt;
        &lt;span style="color: #008000"&gt;// Make sure to set security properly&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; reportName = &lt;span style="color: #006080"&gt;&amp;quot;/AutomatedCRMReporting/TestReport&amp;quot;&lt;/span&gt;;

        &lt;span style="color: #008000"&gt;// Specify what type of report you want to create HTML,PDF, CVS, Excel, Word, XML, MHTML, Image&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; reportFormat = &lt;span style="color: #006080"&gt;&amp;quot;PDF&amp;quot;&lt;/span&gt;;

        &lt;span style="color: #008000"&gt;// Specify the device information to control the output of your report.&lt;/span&gt;
        &lt;span style="color: #008000"&gt;//For device information See http://msdn2.microsoft.com/en-us/library/ms155397.aspx&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; deviceInformation = &lt;span style="color: #006080"&gt;&amp;quot;&amp;lt;DeviceInfo&amp;gt;&amp;lt;DpiX&amp;gt;240&amp;lt;/DpiX&amp;gt;&amp;lt;DpiY&amp;gt;240&amp;lt;/DpiY&amp;gt;&amp;lt;StartPage&amp;gt;0&amp;lt;/StartPage&amp;gt;&amp;lt;/DeviceInfo&amp;gt;&amp;quot;&lt;/span&gt;;

        &lt;span style="color: #008000"&gt;// Generate a report in a format for a CRM annotation or email attachment&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;[] generatedReport = GenerateSRSbytes(reportName, parameters, reportFormat, deviceInformation, reportServiceUrl, &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;);

        &lt;span style="color: #008000"&gt;// An example attachment created from an SRS report&lt;/span&gt;
        &lt;span style="color: #008000"&gt;//var newAnnotation = new annotation&lt;/span&gt;
        &lt;span style="color: #008000"&gt;//  {&lt;/span&gt;
        &lt;span style="color: #008000"&gt;//      objectid = CrmTypes.CreateLookup(regardingEntity, regardingId),&lt;/span&gt;
        &lt;span style="color: #008000"&gt;//      objecttypecode = CrmTypes.CreateEntityNameReference(EntityName.contact.ToString()),&lt;/span&gt;
        &lt;span style="color: #008000"&gt;//      isdocument = CrmTypes.CreateCrmBoolean(true),&lt;/span&gt;
        &lt;span style="color: #008000"&gt;//      ownerid = CrmTypes.CreateOwner(EntityName.systemuser.ToString(), ownerId),&lt;/span&gt;
        &lt;span style="color: #008000"&gt;//      filename = reportFileName,&lt;/span&gt;
        &lt;span style="color: #008000"&gt;//      documentbody = Convert.ToBase64String(generatedReport),&lt;/span&gt;
        &lt;span style="color: #008000"&gt;//      filesize = CrmTypes.CreateCrmNumber(generatedReport.Length),&lt;/span&gt;
        &lt;span style="color: #008000"&gt;//      subject = reportFileName&lt;/span&gt;
        &lt;span style="color: #008000"&gt;//  };&lt;/span&gt;

        &lt;span style="color: #008000"&gt;//service.Create(newAnnotation);&lt;/span&gt;
    }


    &lt;span style="color: #008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #008000"&gt;/// Generates an SSRS Report and returns a byte[] for a CRM attachment&lt;/span&gt;
    &lt;span style="color: #008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;reportPath&amp;quot;&amp;gt;Name of the report.&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;parameters&amp;quot;&amp;gt;The parameters.&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;outputFormat&amp;quot;&amp;gt;The output format.&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;deviceInformation&amp;quot;&amp;gt;The device information. See http://msdn2.microsoft.com/en-us/library/ms155397.aspx&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;ReportServiceUrl&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;userName&amp;quot;&amp;gt;if null, DefaultNetworkCredentials are used&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;passWord&amp;quot;&amp;gt;if null, DefaultNetworkCredentials are used&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;domainName&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span style="color: #008000"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;[] GenerateSRSbytes(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; reportPath, ParameterValue[] parameters, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; outputFormat, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; deviceInformation, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; ReportServiceUrl, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; userName, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; passWord, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; domainName)
    {
        &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; encoding;
        &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; mimeType;
        &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; extension;
        &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;[] streamIDs;
        &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; SessionId;
        &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; historyID = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;
        Warning[] warnings;

        &lt;span style="color: #008000"&gt;// By default the Report will run with the permissions of the AD authenticated User.&lt;/span&gt;
        var rs = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ReportExecutionService.ReportExecutionService
        {
            Credentials = System.Net.CredentialCache.DefaultNetworkCredentials,
            Url = ReportServiceUrl
        };


        &lt;span style="color: #008000"&gt;// Impersonate credentials if they are specified. &lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (userName != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; passWord != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)
        {
            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (domainName == &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)
            {
                rs.Credentials = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; NetworkCredential(userName, passWord);
            }
            &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;
            {
                rs.Credentials = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; NetworkCredential(userName, passWord, domainName);
            }
        }

        &lt;span style="color: #008000"&gt;// Set timeout in seconds of the report takes a long time.&lt;/span&gt;
        &lt;span style="color: #008000"&gt;//rs.Timeout = 600000;&lt;/span&gt;

        ExecutionHeader execHeader = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ExecutionHeader();
        rs.ExecutionHeaderValue = execHeader;

        var execInfo = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ExecutionInfo();
        execInfo = rs.LoadReport(reportPath, historyID);

        rs.SetExecutionParameters(parameters, &lt;span style="color: #006080"&gt;&amp;quot;en-us&amp;quot;&lt;/span&gt;);

        SessionId = rs.ExecutionHeaderValue.ExecutionID;

        &lt;span style="color: #008000"&gt;// Render Report&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; rs.Render(outputFormat, deviceInformation, &lt;span style="color: #0000ff"&gt;out&lt;/span&gt; extension, &lt;span style="color: #0000ff"&gt;out&lt;/span&gt; mimeType, &lt;span style="color: #0000ff"&gt;out&lt;/span&gt; encoding, &lt;span style="color: #0000ff"&gt;out&lt;/span&gt; warnings, &lt;span style="color: #0000ff"&gt;out&lt;/span&gt; streamIDs);

    }
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Happy Coding!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-4629986731760092355?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/4629986731760092355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=4629986731760092355' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/4629986731760092355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/4629986731760092355'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2009/05/ms-crm-40-generate-ssrs-reports-by.html' title='MS CRM 4.0 Generate SSRS reports by webservice ( pdf , HTML , CSV , etc..)'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-2535651394374870180</id><published>2009-05-13T13:37:00.001-04:00</published><updated>2009-05-13T13:37:18.801-04:00</updated><title type='text'>MS CRM 4.0 Many to Many Query helper</title><content type='html'>&lt;p&gt;Rather than trying to explain how to query a many to many relationship, I thought it might be easier for many people to take a working generic method that retrieves a collection of entities from a Many to Many relationship and modify it as needed.&lt;/p&gt;  &lt;p&gt;When a many to many relationship is created CRM creates a link table. Default naming conventions could give you a name like this &lt;/p&gt; &lt;font color="#408080"&gt;&lt;strong&gt; &lt;/strong&gt;new_new_entity1_new_entity2    &lt;br /&gt;&lt;/font&gt;  &lt;p&gt;which is a link table between &lt;font color="#408080"&gt;new_entity1&lt;/font&gt; and &lt;font color="#408080"&gt;new_entity2&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The three entities involved are the following:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;linkTableEntity - new_new_entity1_new_entity2&lt;/li&gt;    &lt;li&gt;filterEntity – new_entity1&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt; put your conditions against this&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;returnedEntity – new_entity2&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;specify your return attributes against this&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;The arguments to call this method are the following:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;service = ICRMService     &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;linkTableEntityName= &amp;quot;new_new_entity1_new_entity2&amp;quot;     &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;filterEntityName = &amp;quot;new_entity1&amp;quot;&lt;/li&gt;    &lt;li&gt;filterEntityIdName = &amp;quot;new_entity1id&amp;quot;&lt;/li&gt;    &lt;li&gt;filterAttribute = &amp;quot;new_name&amp;quot;&lt;/li&gt;    &lt;li&gt;filterValue = &amp;quot;my entity’s name&amp;quot;     &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;returnedCollectionEntityName = &amp;quot;new_entity2&amp;quot;&lt;/li&gt;    &lt;li&gt;returnedCollectionIdName = &amp;quot;new_entity2id&amp;quot;&lt;/li&gt;    &lt;li&gt;returnedAttibutes = null&amp;#160; &lt;font color="#008000"&gt;//null returns all columns&lt;/font&gt;      &lt;br /&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;or&lt;/strong&gt;&lt;/font&gt; returnedAttributes = new[]{&amp;quot;new_entity2id&amp;quot;,&amp;quot;new_name&amp;quot;}&lt;/li&gt; &lt;/ul&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 1400px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 1400px; background-color: #f4f4f4"&gt;   &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; height: 1356px; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// Generic Method to retrieve a collection of all DynamicEntities related to another Entity in a Many to Many relationship&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;service&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;linkTableEntityName&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;filterEntityName&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;filterEntityIdName&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;filterValue&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;returnedCollectionEntityName&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;returnedCollectionEntityIdName&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;filterAttribute&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;returnedAttributes&amp;quot;&amp;gt;if null, AllColumns() is used&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; BusinessEntityCollection RetrieveEntityCollectionFromManyToMany(ICrmService service, 
    &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; linkTableEntityName,
    &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; filterEntityName, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; filterEntityIdName, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; filterAttribute,  &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; filterValue,
    &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; returnedCollectionEntityName, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; returnedCollectionEntityIdName, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;[] returnedAttributes)
{
    &lt;span style="color: #008000"&gt;// Selection against linked Filter Entity&lt;/span&gt;
    var con = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ConditionExpression
    {
        AttributeName = filterAttribute,
        Operator = ConditionOperator.Equal,
        Values = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt;[] { filterValue }
    };

    var filter = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; FilterExpression
    {
        FilterOperator = LogicalOperator.And
    };
    
    filter.AddCondition(con);

    &lt;span style="color: #008000"&gt;// the Entity that you are filtering with&lt;/span&gt;
    var filterLinkEntity = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; LinkEntity
       {
           LinkToEntityName = filterEntityName,
           LinkFromAttributeName = filterEntityIdName,
           LinkToAttributeName = filterEntityIdName,
           LinkCriteria = filter
       };
    
    &lt;span style="color: #008000"&gt;// The linktable Entity that CRM generates&lt;/span&gt;
    var linkTableEntity = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; LinkEntity
      {
          LinkToEntityName = linkTableEntityName,
          LinkFromAttributeName = returnedCollectionEntityIdName,
          LinkToAttributeName = returnedCollectionEntityIdName
      };

    linkTableEntity.LinkEntities.Add(filterLinkEntity);

   
    &lt;span style="color: #008000"&gt;// The Entity returning the results&lt;/span&gt;
    var expression = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; QueryExpression
    {
        EntityName = returnedCollectionEntityName
    };

    &lt;span style="color: #008000"&gt;// Set columns being returned&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (returnedAttributes == &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)
    {
        expression.ColumnSet = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; AllColumns();
    }
    &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;
    {
        expression.ColumnSet = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ColumnSet(returnedAttributes);
    }

    expression.LinkEntities.Add(linkTableEntity);

    var request = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; RetrieveMultipleRequest {Query = expression, ReturnDynamicEntities = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt; };

    var response = (RetrieveMultipleResponse)service.Execute(request);
    
    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; response.BusinessEntityCollection;
}&lt;/pre&gt;
&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-2535651394374870180?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/2535651394374870180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=2535651394374870180' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/2535651394374870180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/2535651394374870180'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2009/05/ms-crm-40-many-to-many-query-helper.html' title='MS CRM 4.0 Many to Many Query helper'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-997250988618374158</id><published>2009-04-09T10:34:00.001-04:00</published><updated>2009-04-09T10:34:35.699-04:00</updated><title type='text'>Accessing and Controlling the CrmForm from an iframe.</title><content type='html'>&lt;p&gt;If you write custom web applications in iframes that depend on the data in the parent form, it is important to run on up to date information to avoid user confusion.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Important!&lt;/strong&gt; This requires that the Restrict cross-frame scripting box for your iframe is NOT checked.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/Sd4HdX12zZI/AAAAAAAAAHY/0xxITpzLVnc/s1600-h/image%5B12%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="72" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/Sd4Hd934FwI/AAAAAAAAAHc/p-aAQ8Dm7ak/image_thumb%5B10%5D.png?imgmax=800" width="382" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#008080"&gt;Accessing attribute values on the Parent Form&lt;/font&gt;&lt;/strong&gt; can be done simply by adding a &lt;strong&gt;parent.document &lt;/strong&gt;in front of your normal attribute names. This gets you the values currently on the form, but doesn't guarantee those values have been saved.&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.36%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 16px; background-color: #f4f4f4"&gt;   &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 89.96%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; height: 13px; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; myAttributeValue = parent.document.crmForm.all.new_attribute.DataValue;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;font color="#008080"&gt;&lt;strong&gt;Parent Form Save &amp;quot;if modified&amp;quot;&lt;/strong&gt; &lt;font color="#000000"&gt;This is a nice method to call because if there are no modified values on the form it won't do anything and your application can continue on it's merry way.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 15px; background-color: #f4f4f4"&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 36.93%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; height: 9px; background-color: #f4f4f4; border-bottom-style: none"&gt;parent.document.crmForm.Save();&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;font color="#008080"&gt;&lt;strong&gt;Force a Parent Save &lt;/strong&gt;&lt;/font&gt;&lt;font color="#000000"&gt;Sometimes you want to force a save so that a Plug-in is called to do some additional calculations even though no attributes have been modified on your current form. The recalculate on the Opportunity, Quote, Order, and Invoice forms is a good example.&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;/font&gt; The SubmitCrmForm method is not a MS supported method, but it hasn't changed in the last couple CRM revisions.&lt;/p&gt;

&lt;p&gt;SubmitCRMForm( Mode, Validate, ForceSubmit, closeWindow)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Modes:&lt;/strong&gt; 

  &lt;br /&gt;1 = Save, 2 = SaveAndClose, 7 = Send, 

  &lt;br /&gt;58 = SaveAsCompleted, 59 = SaveAndNew&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; In this example I am forcing a save so that a plug-in is called on the Pre Update for the quote to create a new total value from the quote details that were filled in when the Quote was created from an Opportunity. These new fields were&amp;#160; mapped between the detail products see &lt;strong&gt;Mapping Note&lt;/strong&gt; below. The iframe contains a button to do something that requires all of the data on the quote be up to date.&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; background-color: #f4f4f4"&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 84.05%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; height: 146px; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; RecalculateQuote() 
{ 
   &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( parent.document.crmForm.all.new_totalamount.DataValue == &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)
   {    
    parent.document.crmForm.SubmitCrmForm(1, &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;);   
    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;      
    } 
    
    parent.document.crmForm.Save();
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The above JavaScript is made to work with an OnClientClick so that a return false will not generate a postback. &lt;/p&gt;

&lt;p&gt;Why do we need a return false option?&amp;#160; If the validation fails, a message is generated for the user, the save is not performed, and you do not want your action to run.&lt;/p&gt;

&lt;p&gt;The data has already been filled in, then the crmFrom.Save() will check to make sure that any modified fields on the form have been saved.&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; background-color: #f4f4f4"&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 95.94%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; height: 59px; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;p&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:Button&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;RunMyNeatFeature&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;CssClass&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;button&amp;quot; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Text&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Go&amp;quot;&lt;/span&gt; 
&lt;span style="color: #ff0000"&gt;OnClick&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;RunMyNeatFeature_Click&amp;quot;&lt;/span&gt;  &lt;br /&gt;&lt;span style="color: #ff0000"&gt;OnClientClick&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;javascript:return RecalculateQuote();&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;For the button the OnClick will PostBack and run the functionality I care about only if the RecalculateQuote() is not false.&lt;/p&gt;

&lt;p&gt;This safeguards the user from running the functionality with different data than what is on the screen when they press the &amp;quot;Go&amp;quot; button.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mapping Note:&lt;/strong&gt; For mapping details open SQL Management Studio and look at the EntityMapBase table to find the EntityMapId that has the SourceEntityName and TargetEntityName that you are interested in. Add your guid to the end of the URL below and it will bring up a form to map attributes between the Source and Target Entities.&lt;/p&gt;

&lt;p&gt;http://yourcrmservername:5555//tools/systemcustomization/relationships/mappings/mappinglist.aspx?mappingId=&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-997250988618374158?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/997250988618374158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=997250988618374158' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/997250988618374158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/997250988618374158'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2009/04/accessing-and-controlling-crmform-from.html' title='Accessing and Controlling the CrmForm from an iframe.'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_pTy2xto-ivU/Sd4Hd934FwI/AAAAAAAAAHc/p-aAQ8Dm7ak/s72-c/image_thumb%5B10%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-9202525628225810443</id><published>2009-03-15T10:52:00.001-04:00</published><updated>2009-03-15T10:55:11.643-04:00</updated><title type='text'>Techniques for Driving MS CRM Email Templates</title><content type='html'>&lt;p&gt;The email templates in MS CRM can be leveraged as a powerful building block when generating emails programmatically.&lt;/p&gt;  &lt;p&gt;Tips:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Generate your HTML in another editor and then paste it into the template editor to add data slugs. &lt;/li&gt;    &lt;li&gt;Associate your template with the entity that you want the most information from. &lt;/li&gt;    &lt;li&gt;Use Template Naming conventions that organize things and make programmatic template selection easier. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;For an example lets say that we have product specific Quote Letters. &lt;/p&gt;  &lt;p&gt;Using my helper method from a &lt;a href="http://crmscape.blogspot.com/2009/02/dynamic-entity-and-entity-query-helper.html" target="_blank"&gt;previous blog article&lt;/a&gt;, grab an email template matching a specific name based on the product.&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 96.96%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 87px; background-color: #f4f4f4"&gt;   &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 99.41%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; height: 72px; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #008000"&gt;// Get appropriate Template&lt;/span&gt;
BusinessEntityCollection templates = 
   h.GetAllEntitieswithFilter(EntityName.template.ToString(), &lt;span style="color: #0000ff"&gt;new&lt;/span&gt;[] { &lt;span style="color: #006080"&gt;&amp;quot;templateid&amp;quot;&lt;/span&gt; }, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt;[]{&lt;span style="color: #006080"&gt;&amp;quot;title&amp;quot;&lt;/span&gt;}, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt;[]{emailTemplateTitle});&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Then create a new InstantiateTemplateRequest using the template id and point it at an entity with the information that you want merged in. This must be the same type that you associated your template with when you created it.&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 240px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 229px; background-color: #f4f4f4"&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 95.85%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; height: 210px; background-color: #f4f4f4; border-bottom-style: none"&gt;var instTemplate = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; InstantiateTemplateRequest
     {
         TemplateId = thisTemplate.templateid.Value,
         ObjectId = quoteId,
         ObjectType = EntityName.quote.ToString()
     };


&lt;span style="color: #008000"&gt;// Execute the request to create an email message from the template.&lt;/span&gt;
var instTemplateResponse = (InstantiateTemplateResponse)h.service.Execute(instTemplate);

var newEmail = (email)instTemplateResponse.BusinessEntityCollection.BusinessEntities[0];&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The result of the InstantiateTemplateResponse is an email entity collection. For this example we just have one email.&lt;/p&gt;

&lt;p&gt;From here you can regard the email to a completely different entity if you want. It is only important that the ObjectId and ObjectType be set for the merge process. After that is complete this is just another email with a bunch of fields pre-filled. Now you can have your way with it like any other email that you created from scratch. This is critical to making the best use of email templates. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font color="#0080ff"&gt;Additional Merging
      &lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;If you are calculating other numbers or pulling information from another data source outside of CRM, there is no reason to limit merging to what can be represented as data slugs.&lt;/p&gt;

&lt;p&gt;In this example I am using putting additional information into the email body with a simple string replace using an agreed upon naming convention to represent additional merge fields. &lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 49px; background-color: #f4f4f4"&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 96.47%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; height: 36px; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #008000"&gt;// If template had #EmbedLicense# in body replace it with the license information&lt;/span&gt;
newEmail.description = newEmail.description.Replace(&lt;span style="color: #006080"&gt;&amp;quot;#EmbedLicense#&amp;quot;&lt;/span&gt;, embedFile);&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;From here you can add attachments as shown &lt;a href="http://crmscape.blogspot.com/2008/10/creating-attachments-to-emails-and.html" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;font color="#0080ff"&gt;&lt;strong&gt;Proofing before Email is Sent
      &lt;br /&gt;&lt;/strong&gt;&lt;/font&gt;Another useful thing to do if you are doing this in a web application or a client Winform application is save the email and then open it in a new window for final review before it is sent. To do that generate a URL like the following with your orgname and email id passed in. You can get the CRM server base URL from the registry as shown &lt;a href="http://crmscape.blogspot.com/2008/09/hint-developing-for-multiple-ms-crm-40.html" target="_blank"&gt;here&lt;/a&gt; which you need for your web service reference, and then use the following: CrmServerBaseUrl = CrmServiceUrl.Substring(0, CrmServiceUrl.ToLower().IndexOf(&amp;quot;mscrmservices&amp;quot;));&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; background-color: #f4f4f4"&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 98.3%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; height: 61px; background-color: #f4f4f4; border-bottom-style: none"&gt; &lt;span style="color: #008000"&gt;// Open newly created email activity at this Url.&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; emailUrl = h.CrmServerBaseUrl + &lt;span style="color: #006080"&gt;&amp;quot;/&amp;quot;&lt;/span&gt;+orgname+&lt;span style="color: #006080"&gt;&amp;quot;/activities/email/edit.aspx?id={&amp;quot;&lt;/span&gt; + emailId + &lt;span style="color: #006080"&gt;&amp;quot;}&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;From a WinForm application you can pop a CRM screen up like &lt;a href="http://crmscape.blogspot.com/2008/08/invoking-ms-crm-from-other-applications.html" target="_blank"&gt;this&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For a web application register some JavaScript in the code behind that sets the value of the new email's URL. &lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 240px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 166px; background-color: #f4f4f4"&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 96.02%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; height: 151px; background-color: #f4f4f4; border-bottom-style: none"&gt; &lt;span style="color: #008000"&gt;// Sets Javascript variables to envoke Window Open to new Explorer Window with body onload event&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; SETQUERYSTRING_SCRIPT = &lt;span style="color: #006080"&gt;&amp;quot;Email_String&amp;quot;&lt;/span&gt;;

&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!Page.ClientScript.IsClientScriptBlockRegistered(SETQUERYSTRING_SCRIPT))
{
   Page.ClientScript.RegisterClientScriptBlock(GetType(), SETQUERYSTRING_SCRIPT, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #006080"&gt;@&amp;quot;&amp;lt;script language=&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;javascript&amp;quot;&lt;/span&gt;&lt;span style="color: #006080"&gt;&amp;quot;&amp;gt;emailRecordUrl = '{0}';&amp;lt;/script&amp;gt;&amp;quot;&lt;/span&gt;, emailUrl));
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Then in the aspx file use the following JavaScript code to open the new window. Call the script from the onload of the body.&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 290px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 298px; background-color: #f4f4f4"&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 95.83%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; height: 274px; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;p&gt;   &amp;lt;script type=&lt;span style="color: #006080"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;

    &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; emailRecordUrl = &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;   
    
    &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; UpdateCRMFormGenerateEmail()
    {
       &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (emailRecordUrl != &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;)
       {
           window.open( emailRecordUrl, &lt;br /&gt;               &lt;span style="color: #006080"&gt;&amp;quot;_blank&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;toolbar=no,scrollbars=yes,resizable=yes&amp;quot;&lt;/span&gt;);
           emailRecordUrl = &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;
       }   
   }

    &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body onload=&lt;span style="color: #006080"&gt;&amp;quot;UpdateCRMFormGenerateEmail();&amp;quot;&lt;/span&gt;&amp;gt;&lt;/p&gt;&lt;/pre&gt;
&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-9202525628225810443?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/9202525628225810443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=9202525628225810443' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/9202525628225810443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/9202525628225810443'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2009/03/techniques-for-driving-ms-crm-email.html' title='Techniques for Driving MS CRM Email Templates'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-8316695115626296956</id><published>2009-02-25T10:17:00.001-05:00</published><updated>2009-02-25T10:34:30.675-05:00</updated><title type='text'>MS CRM 4.0 Plug-in Stages, Pipelines and Execution Modes</title><content type='html'>&lt;p&gt;I've found a lot of contradictory information and misinformation about what you can and can't do inside of a plugin depending on how you are calling it, and when you should call each one, so I hope this will help. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Stage of Execution: &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#0000a0"&gt;Pre-Stage:&lt;/font&gt;&lt;/strong&gt; (synchronous) called before the write to the database.&lt;/p&gt;  &lt;p&gt;The main reasons to use a Pre-Stage of Execution are synchronous in nature:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Modify data before it is written to the database. &lt;/li&gt;    &lt;li&gt;Abort the action being taken &lt;/li&gt;    &lt;li&gt;Server Side Validity checking &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#008000"&gt;Post-Stage:&lt;/font&gt;&lt;/strong&gt; (synchronous or asynchronous)&lt;/p&gt;  &lt;p&gt;Use the Post-Stage of Execution whenever you don't need to use Pre-Stage. &lt;/p&gt;  &lt;p&gt;If you don't want the user to wait for the process to finish and there is no race condition use asynchronous. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Triggering Pipeline:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The triggering pipeline is a little less obvious in nature and has an impact on what functionality that you can use in your plugin.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#0000a0"&gt;Parent Pipeline:&lt;/font&gt;&lt;/strong&gt; This is the pipeline that is the most common and there are no restrictions imposed in a parent pipeline.&lt;/p&gt;  &lt;p&gt;&lt;font color="#008000"&gt;&lt;strong&gt;Child Pipeline:&lt;/strong&gt;&lt;/font&gt; This is the pipeline that causes the most confusion and there are limitations that vary with Stage and Execution Mode.&lt;/p&gt;  &lt;p&gt;Sometimes a child pipeline is required to trap the event you need, and sometimes you need to trap both the parent and child pipeline for the same entity, message and stage.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; Change the &lt;font color="#0080ff"&gt;quotenumber&lt;/font&gt; in the Pre-Stage for the Create of a Quote.     &lt;br /&gt;    &lt;br /&gt;The &lt;font color="#008080"&gt;quotenumber&lt;/font&gt; is a field that the CRM web service will not allow you to change after it is written to the database so you need to use the Pre-Stage and modify the context Entity before the end of the Execute method as shown below.&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 235px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 233px; background-color: #f4f4f4"&gt;   &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 94.06%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; height: 212px; background-color: #f4f4f4; border-bottom-style: none"&gt;var entity = (DynamicEntity)context.InputParameters.Properties[ParameterName.Target];

&lt;span style="color: #008000"&gt;// . . . retrieve data to populate number . . .&lt;/span&gt;

&lt;span style="color: #008000"&gt;// Set value before it is written to the database&lt;/span&gt;

&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;( entity.Properties.Contains(numberField))
{
    entity.Properties.Remove(numberField);
}

var prop = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; StringProperty(numberField, newNumber);
entity.Properties.Add(prop);&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;So far so good. This will work in any Pre-Create pipeline!&lt;/p&gt;

&lt;p&gt;You can create a Quote in a few ways. &lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Sales -&amp;gt; Quotes -&amp;gt; New &lt;/li&gt;

  &lt;li&gt;(open an Account) -&amp;gt; Quotes -&amp;gt; New Quote &lt;/li&gt;

  &lt;li&gt;Sales -&amp;gt; Opportunities (open an opportunity) -&amp;gt; Quotes -&amp;gt; New Quote &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;&lt;font color="#0000ff"&gt;Do you think that Creating a Quote always happens in the same pipeline?&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Since you are an efficient plugin developer and are using the ICrmService and dynamic entities to access CRM data because it is pre-authenticated and fast. You retrieve some information to help create the number. &lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 96.97%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 47px; background-color: #f4f4f4"&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 74.63%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; height: 31px; background-color: #f4f4f4; border-bottom-style: none"&gt;ICrmService service = context.CreateCrmService(&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;);
retrieved = (RetrieveMultipleResponse)service.Execute(retrieve);&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;You register your plugin using the handy plugin registration tool for the Quote entity with the following settings:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Create &lt;/li&gt;

  &lt;li&gt;Pre Stage &lt;/li&gt;

  &lt;li&gt;Synchronous &lt;/li&gt;

  &lt;li&gt;Parent Pipeline &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&amp;#160;&lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/SaVg9WWDEoI/AAAAAAAAAHI/PKXp7JqSd9s/s1600-h/CreateQuoteParent%5B6%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="505" alt="CreateQuoteParent" src="http://lh3.ggpht.com/_pTy2xto-ivU/SaVg9mqrFfI/AAAAAAAAAHM/YpkHYGMZ4dc/CreateQuoteParent_thumb%5B4%5D.jpg?imgmax=800" width="518" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;You create your Quote from &lt;strong&gt;Sales -&amp;gt; Quotes -&amp;gt; New&lt;/strong&gt; and it works!&lt;/p&gt;

&lt;p&gt;However, in many business processes the user will create a Quote from an opportunity so it will inherit opportunityproduct information.&lt;/p&gt;

&lt;p&gt;Now you create your quote from &lt;strong&gt;Sales -&amp;gt; Opportunities (open an opportunity) -&amp;gt; Quotes -&amp;gt; New Quote &lt;/strong&gt;and for some reason your plugin did not fire. That is because this quote was created in a child pipeline.&lt;/p&gt;

&lt;p&gt;The entire QOI chain also occurs in a child pipeline. If you create an order from a quote or invoice from an order it is happening in a child pipeline. There are other places that this occurs as well like creation of an account or contact from a lead.&lt;/p&gt;

&lt;p align="center"&gt;&lt;strong&gt;&lt;font color="#ff0000" size="3"&gt;You are in a child pipeline, now what ?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first thing that you might try is to take your existing plugin and register it against the child pipeline, but it won't work. The ICrmService is not available to you in a child pipeline. &lt;/p&gt;

&lt;p&gt;If you downloaded the plug-in template for CRM, you have probably seen the following method, which is what you need to use in a child pipeline.&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 102.48%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 237px; background-color: #f4f4f4"&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 131.87%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; height: 445px; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// Creates a CrmService proxy for plug-ins that execute in the child pipeline.&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;context&amp;quot;&amp;gt;The execution context that was passed to the plug-ins Execute method.&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;flag&amp;quot;&amp;gt;Set to True to use impersontation.&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;returns&amp;gt;A CrmServce instance.&amp;lt;/returns&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; CrmService CreateCrmService(IPluginExecutionContext context, Boolean flag)
{
    var authToken = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; CrmAuthenticationToken { AuthenticationType = 0, OrganizationName = context.OrganizationName, CallerId = (flag ? context.UserId : context.InitiatingUserId) };

    var corToken = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; CorrelationToken { CorrelationId = context.CorrelationId, CorrelationUpdatedTime = context.CorrelationUpdatedTime, Depth = context.Depth };

    var regkey = Registry.LocalMachine.OpenSubKey(&lt;span style="color: #006080"&gt;&amp;quot;SOFTWARE\\Microsoft\\MSCRM&amp;quot;&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;);

    var service = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; CrmService
    {
        CrmAuthenticationTokenValue = authToken,
        UseDefaultCredentials = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;,
        Url = String.Concat(regkey.GetValue(&lt;span style="color: #006080"&gt;&amp;quot;ServerUrl&amp;quot;&lt;/span&gt;).ToString(), &lt;span style="color: #006080"&gt;&amp;quot;/2007/crmservice.asmx&amp;quot;&lt;/span&gt;),
        CorrelationTokenValue = corToken
    };

    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; service;
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;You may find another method called GetCrmProxyUsingEndpointUrlInChildPipeline. It is essentially the same.&lt;/p&gt;

&lt;p&gt;There is a comment in the plugin template that doesn't tell the whole story.&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 101.96%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 42px; background-color: #f4f4f4"&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 95.24%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; height: 32px; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #008000"&gt;// For a plug-in running in the child pipeline, use this statement.&lt;/span&gt;
// CrmService crmService = CreateCrmService(context, &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;);&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;font color="#000000"&gt;What it doesn't mention is that what you are allowed to do with that service depends on what your execution mode is.&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font color="#000000"&gt;Hard Coded Restrictions:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="#008000"&gt;A CrmService running &lt;strong&gt;Synchronously&lt;/strong&gt; in a child pipeline is limited to the following:&lt;/font&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;font color="#008000"&gt;&lt;strong&gt;Create&lt;/strong&gt;&lt;/font&gt; &lt;/li&gt;

  &lt;li&gt;&lt;font color="#008000"&gt;&lt;strong&gt;Delete&lt;/strong&gt;&lt;/font&gt; &lt;/li&gt;

  &lt;li&gt;&lt;font color="#008000"&gt;&lt;strong&gt;Update&lt;/strong&gt;&lt;/font&gt; &lt;/li&gt;

  &lt;li&gt;&lt;font color="#008000"&gt;&lt;strong&gt;RetrieveExchangeRate&lt;/strong&gt;&lt;/font&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;font color="#008000"&gt;However a child plugin running in &lt;strong&gt;Asynchronous&lt;/strong&gt; Execution Mode is not limited this way.&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;Those 4 allowed actions are hard coded by MS whenever the plugin is executed inside a transaction, and it appears that all synchronous child pipeline events occur inside a transaction.&lt;/p&gt;

&lt;p&gt;However you can do a query in child pipeline if it is registered as asynchronous.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In review:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Use ICrmService for all parent pipelines when at all possible. &lt;/li&gt;

  &lt;li&gt;Use CrmService for child pipelines in asynchronous execution mode. &lt;/li&gt;

  &lt;li&gt;&lt;font color="#000000"&gt;There is very limited functionality allowed with CrmService for any plugin registered in a synchronous child pipeline&lt;/font&gt; &lt;/li&gt;

  &lt;li&gt;Querying CRM data in a plug-in registered as a synchronous Pre Create in a child process is currently very &lt;font color="#000000"&gt;unsupported. (ie. direct SQL access)&lt;/font&gt; &lt;/li&gt;
&lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-8316695115626296956?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/8316695115626296956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=8316695115626296956' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/8316695115626296956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/8316695115626296956'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2009/02/ms-crm-40-plug-in-stages-pipelines-and.html' title='MS CRM 4.0 Plug-in Stages, Pipelines and Execution Modes'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_pTy2xto-ivU/SaVg9mqrFfI/AAAAAAAAAHM/YpkHYGMZ4dc/s72-c/CreateQuoteParent_thumb%5B4%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-3099555690539258685</id><published>2009-02-08T18:52:00.001-05:00</published><updated>2009-02-08T18:52:31.695-05:00</updated><title type='text'>Dynamic Entity and Entity query helper methods</title><content type='html'>&lt;p&gt;If you do much MS CRM development you will find that you are constantly querying for things. These are a couple helper methods that I have found come in handy.&lt;/p&gt;  &lt;p&gt;There are some subtle differences between them. &lt;/p&gt;  &lt;p&gt;&lt;font color="#0080c0" size="4"&gt;&lt;strong&gt;Querying for Collections&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The following 2 methods retrieve any entity, filtering on any attribute(s), ordering on any attribute(s), and returning any number of specified attributes. The only real restraint is that they are hard coded to anding the filters together and only comparing filters with an Equal condition operator. &lt;/p&gt;  &lt;p&gt;&lt;font color="#008000"&gt;BusinessEntityCollection opportunityCollection = webservicehelper.GetAllEntitieswithFiltersOrdered(     &lt;br /&gt;&lt;/font&gt;&lt;font color="#008000"&gt;EntityName.opportunity.ToString(),      &lt;br /&gt;new[]&amp;#160; &amp;quot;opportunityid&amp;quot;, &amp;quot;name&amp;quot;, &amp;quot;statecode&amp;quot; },&amp;#160; &lt;br /&gt;new[] { &amp;quot;customerid&amp;quot;,&amp;quot;statecode&amp;quot; },       &lt;br /&gt;new[] { thisAccount.accountid.Value.ToString(),&amp;quot;Open&amp;quot; },       &lt;br /&gt;new[] {&amp;quot;createdon&amp;quot;},       &lt;br /&gt;&lt;/font&gt;&lt;font color="#008000"&gt;new[] {false});&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#800000"&gt;BusinessEntityCollection opportunityCollection      &lt;br /&gt;= PluginHelper.GetDynamicEntitiesWithFiltersOrdered( EntityName.opportunity.ToString(),       &lt;br /&gt;new[] { &amp;quot;opportunityid&amp;quot;, &amp;quot;name&amp;quot;, &amp;quot;statecode&amp;quot; },       &lt;br /&gt;new[] { &amp;quot;customerid&amp;quot; },       &lt;br /&gt;new[] { accountId.ToString() },       &lt;br /&gt;new[] {&amp;quot;createdon&amp;quot;},       &lt;br /&gt;new[] {false},&amp;#160; &lt;br /&gt;service);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The following Helper methods do the exact same thing for strongly typed entities and then dynamic entities. They both return a BusinessEntityCollection but notice the differences in how they are implemented.&lt;/p&gt;  &lt;p&gt;&lt;font color="#008000"&gt;The first is for the strongly typed Entity.&lt;/font&gt;&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 1400px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 1400px; background-color: #f4f4f4"&gt;   &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; BusinessEntityCollection GetAllEntitieswithFiltersOrdered(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; entity, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;[] attributes, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;[] fields, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;[] values, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;[] orderfields, &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt;[] orderAscending)
{

    var cols = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ColumnSet { Attributes = attributes };

    var conditions = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ConditionExpression[fields.Length];

    &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i = 0; i &amp;lt; fields.Length; i++)
    {
        var condition = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ConditionExpression
        {
            AttributeName = fields[i],
            Operator = ConditionOperator.Equal,
            Values = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt;[] { values[i] }
        };

        conditions[i] = condition;
    }

    var filter = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; FilterExpression
    {
        FilterOperator = LogicalOperator.And,
        Conditions = conditions
    };

    var orderArray = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; OrderExpression[orderfields.Length];

    &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i = 0; i &amp;lt; orderfields.Length; i++)
    {
        var thisOrder = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; OrderExpression
        {
            AttributeName = orderfields[i],
            OrderType = (orderAscending[i] ? OrderType.Ascending : OrderType.Descending)
        };

        orderArray[i] = thisOrder;
    }


    var query = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; QueryExpression
    {
        EntityName = entity,
        ColumnSet = cols,
        Criteria = filter,
        Orders = orderArray
    };

    &lt;span style="color: #0000ff"&gt;try&lt;/span&gt;
    {
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; service.RetrieveMultiple(query);
    }

    &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (SoapException ex)&lt;/pre&gt;

  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        var thisOrder = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; OrderExpression
        {
            AttributeName = orderfields[i],
            OrderType = (orderAscending[i] ? OrderType.Ascending : OrderType.Descending)
        };

        orderArray[i] = thisOrder;
    }


    var query = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; QueryExpression
    {
        EntityName = entity,
        ColumnSet = cols,
        Criteria = filter,
        Orders = orderArray
    };

    &lt;span style="color: #0000ff"&gt;try&lt;/span&gt;
    {
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; service.RetrieveMultiple(query);
    }

    &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (SoapException ex)
    {
        emailNotifications.sendExceptionMessage(service.Url, &lt;span style="color: #006080"&gt;&amp;quot; - GetAllEntitieswithFiltersOrdered FAILED:&amp;quot;&lt;/span&gt;, errorEmails, ex,
            &lt;span style="color: #006080"&gt;&amp;quot;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;Entity: &amp;quot;&lt;/span&gt; + query.EntityName);
        &lt;span style="color: #0000ff"&gt;throw&lt;/span&gt;;
    }
}&lt;/pre&gt;

  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    {
        emailNotifications.sendExceptionMessage(service.Url, &lt;span style="color: #006080"&gt;&amp;quot; - GetAllEntitieswithFiltersOrdered FAILED:&amp;quot;&lt;/span&gt;, errorEmails, ex,
            &lt;span style="color: #006080"&gt;&amp;quot;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;Entity: &amp;quot;&lt;/span&gt; + query.EntityName);
        &lt;span style="color: #0000ff"&gt;throw&lt;/span&gt;;
    }
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;font color="#800000"&gt;The second is for a Dynamic Entity in a Plug-in.&lt;/font&gt;&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 1000px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 1000px; background-color: #f4f4f4"&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; BusinessEntityCollection GetDynamicEntitiesWithFiltersOrdered(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; entityName, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;[] attributes, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;[] fields, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;[] values, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;[] orderfields, &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt;[] orderAscending, ICrmService serv)
{
    &lt;span style="color: #0000ff"&gt;try&lt;/span&gt;
    {
        var filters = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; FilterExpression { FilterOperator = LogicalOperator.And };

        &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i = 0; i &amp;lt; fields.Length; i++)
        {
            var condition = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ConditionExpression
            {
                AttributeName = fields[i],
                Operator = ConditionOperator.Equal,
                Values = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt;[] { values[i] }
            };

            filters.Conditions.Add(condition);
        }
        
        var query = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; QueryExpression
        {
            EntityName = entityName,
            ColumnSet = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ColumnSet(attributes),
            Criteria = filters
        };

        &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i = 0; i &amp;lt; fields.Length; i++)
        {
            var oneExpression = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; OrderExpression
                 {
                     AttributeName = orderfields[i],
                     OrderType = (orderAscending[i] ? OrderType.Ascending : OrderType.Descending)
                 };

            query.Orders.Add(oneExpression);
        }

        var retrieve = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; RetrieveMultipleRequest { Query = query, ReturnDynamicEntities = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt; };

        var retrieved = (RetrieveMultipleResponse)serv.Execute(retrieve);

        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; retrieved.BusinessEntityCollection;
    }

    &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (SoapException ex)
    {
        &lt;span style="color: #0000ff"&gt;throw&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; InvalidPluginExecutionException(
             String.Format(&lt;span style="color: #006080"&gt;&amp;quot;An error occurred in GetDynamicEntitiesWithFilters plug-in. {0}&amp;quot;&lt;/span&gt;, ex.Detail.InnerText), ex);
    }

    &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (Exception ex)
    {
        &lt;span style="color: #0000ff"&gt;throw&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; InvalidPluginExecutionException(
           String.Format(&lt;span style="color: #006080"&gt;&amp;quot;An error occurred in GetDynamicEntitiesWithFilters plug-in. {0} - trace - {1} -  source - {2}&amp;quot;&lt;/span&gt;, ex.Message, ex.StackTrace, ex.Source), ex);
    }
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;One of the largest differences between querying for these two types of collections is that you are assigning a complete arrays in one and adding to the other. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-3099555690539258685?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/3099555690539258685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=3099555690539258685' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/3099555690539258685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/3099555690539258685'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2009/02/dynamic-entity-and-entity-query-helper.html' title='Dynamic Entity and Entity query helper methods'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-2891128570704820713</id><published>2009-01-19T08:58:00.001-05:00</published><updated>2009-01-19T08:58:01.440-05:00</updated><title type='text'>Case Responsible Contact To Email and other Activities</title><content type='html'>&lt;p&gt;A typical customer request is for email created from a Case to default to send to the Responsible Contact instead of its default behavior which is to send it to the Customer. &lt;/p&gt;  &lt;p&gt;Since the Responsible Contact isn't even on the Case form by default and a customer could be a contact, MS chose this default behavior. However most of my installations to date have an Account as the Customer and one of many Contacts related to that Account as a Responsible Contact.&lt;/p&gt;  &lt;p&gt;This is actually something very easy to change.&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;Please Note:&lt;/strong&gt;&lt;/font&gt; This is an unsupported modification, and any patch could overwrite this.&lt;/p&gt;  &lt;p&gt;There is a JavaScript file, &lt;font color="#0000ff"&gt;cases.js&lt;/font&gt;, in the following folder.&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;C:\Program Files\Microsoft Dynamics CRM Server\CRMWeb\_static\CS\cases&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;It contains a function called &lt;strong&gt;locAddActTo &lt;/strong&gt;that fills the &lt;strong&gt;To:&lt;/strong&gt; activity party variables that are sent in the QueryString to the activity like the URL below.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://crmserver1:5555/MicrosoftCRM/activities/email/edit.aspx?"&gt;http://crmserver1:5555/MicrosoftCRM/activities/email/edit.aspx?&lt;/a&gt;     &lt;br /&gt;pId={E0F2E676-7FE2-DD11-9AE8-0003FF517B20}     &lt;br /&gt;&amp;amp;pType=112     &lt;br /&gt;&amp;amp;pName=CaseTitleGoesHere     &lt;br /&gt;&lt;font color="#0080ff"&gt;&amp;amp;partyid={0EDF3D7E-E3E0-DD11-A5F9-0003FF517B20}      &lt;br /&gt;&amp;amp;partytype=1       &lt;br /&gt;&amp;amp;partyname=AccountNameGoesHere       &lt;br /&gt;&lt;/font&gt;&amp;amp;partyaddressused=&amp;amp;contactInfo=&lt;/p&gt;  &lt;p&gt;What we care about are the &lt;font color="#0080ff"&gt;&lt;strong&gt;partyid&lt;/strong&gt;&lt;/font&gt;, &lt;font color="#0080ff"&gt;&lt;strong&gt;partytype&lt;/strong&gt;&lt;/font&gt; and &lt;font color="#0080ff"&gt;&lt;strong&gt;partyname&lt;/strong&gt; &lt;/font&gt;&lt;font color="#000000"&gt;arguments.&lt;/font&gt;&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 100.04%; cursor: text; max-height: 500px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 500px; background-color: #f4f4f4"&gt;   &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; height: 402px; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; locAddActTo(iActivityType, sContentId)
{
&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; sParentId   = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;
&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; sParentType = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;
&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; sPartyId   = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;
&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; sPartyType = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;
&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; sPartyName = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;
&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; sPartyLocation = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;


sParentId   = crmFormSubmit.crmFormSubmitId.value;
sParentType = crmFormSubmit.crmFormSubmitObjectType.value;


&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (iActivityType != Task)
{
&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; customerId = crmForm.all.customerid.DataValue;
&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!IsNull(customerId))
{
&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!IsNull(customerId[0]))
{
sPartyId   = customerId[0].id;
sPartyType = customerId[0].type;
}
}
sPartyName = crmForm.customerid.parentElement.previousSibling.innerText;

sPartyLocation = &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;As you can see this information is being pulled from the case form customer field &lt;strong&gt;crmForm.all.customerid.DataValue&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;So all we have to do is change this to &lt;strong&gt;crmForm.all.&lt;font color="#0080ff" size="2"&gt;responsiblecontactid&lt;/font&gt;.DataValue&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;and change the sPartyName assignment.&lt;/p&gt;

&lt;p&gt;sPartyName = crmForm.customerid.parentElement.previousSibling.innerText;
  &lt;br /&gt;to 

  &lt;br /&gt;&lt;font color="#0080ff"&gt;sPartyName = customerId[0].name;&lt;/font&gt; &lt;/p&gt;

&lt;p&gt;You can just replace the above function with the one below if you would like.&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 500px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 500px; background-color: #f4f4f4"&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; height: 497px; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; locAddActTo(iActivityType, sContentId)
{
&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; sParentId   = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;
&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; sParentType = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;
&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; sPartyId   = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;
&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; sPartyType = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;
&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; sPartyName = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;
&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; sPartyLocation = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;


sParentId   = crmFormSubmit.crmFormSubmitId.value;
sParentType = crmFormSubmit.crmFormSubmitObjectType.value;


&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (iActivityType != Task)
{
&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; customerId = crmForm.all.&lt;strong&gt;&lt;font color="#0080ff" size="2"&gt;responsiblecontactid&lt;/font&gt;&lt;/strong&gt;.DataValue;
&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!IsNull(customerId))
{
&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!IsNull(customerId[0]))
{
sPartyId   = customerId[0].id;
sPartyType = customerId[0].type;
&lt;font color="#0080ff"&gt;sPartyName = customerId[0].name;&lt;/font&gt;
}
}


sPartyLocation = &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;After you have saved the change, run&amp;#160; iisreset to flush the cache.&lt;/p&gt;

&lt;p&gt;That's it.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-2891128570704820713?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/2891128570704820713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=2891128570704820713' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/2891128570704820713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/2891128570704820713'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2009/01/case-responsible-contact-to-email-and.html' title='Case Responsible Contact To Email and other Activities'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-3175813746269062077</id><published>2009-01-18T11:03:00.001-05:00</published><updated>2009-01-18T11:06:51.124-05:00</updated><title type='text'>CRM 4.0 Custom Workflows</title><content type='html'>&lt;p&gt;Custom Workflows in MS CRM 4.0 are very simple to deploy and are pretty simple to create especially if you are familiar with Plugin-in development.&amp;#160; &lt;/p&gt;  &lt;p&gt;Before you can create a workflow you need to have the Workflow Extensions installed. This is more of a concern if you are running VS2005. If you are running VS 2008 SP1, you should have everything you need already.&lt;/p&gt;  &lt;p&gt;If you have an assembly that you are already deploying for plug-ins you can even add a workflow to that assembly so that you have fewer deployment assemblies.&lt;/p&gt;  &lt;p&gt;The following custom workflow was created for a customer who wanted to have a matching customer sales relationship created for an account whenever an opportunity role was assigned to a contact.&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 800px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 800px; background-color: #f4f4f4"&gt;   &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;p&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; OneCRMPro
{
    &lt;span style="color: #008000"&gt;// In the workflow editor&lt;/span&gt;
    &lt;span style="color: #008000"&gt;// &amp;quot;OneCRMPro&amp;quot; is going to show up at the bottom of the Add Step pick list&lt;/span&gt;
    &lt;span style="color: #008000"&gt;// &amp;quot;Create CustomerRelationship&amp;quot; will show up as item off of OneCRMPro.&lt;/span&gt;
    [PersistOnClose]
    [CrmWorkflowActivity(&lt;span style="color: #006080"&gt;&amp;quot;Create CustomerRelationship&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;OneCRMPro&amp;quot;&lt;/span&gt;)]
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;partial&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; CreateCustomerRelationship : SequenceActivity
    {

        &lt;span style="color: #008000"&gt;// These DependencyProperty entries will show up in the Set Properties editor&lt;/span&gt;
        &lt;span style="color: #008000"&gt; &lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; DependencyProperty RoleProperty = DependencyProperty.Register(&lt;span style="color: #006080"&gt;&amp;quot;Role&amp;quot;&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(Lookup), &lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(CreateCustomerRelationship));
        [CrmInput(&lt;span style="color: #006080"&gt;&amp;quot;Sales Role&amp;quot;&lt;/span&gt;)]
        [CrmReferenceTarget(&lt;span style="color: #006080"&gt;&amp;quot;relationshiprole&amp;quot;&lt;/span&gt;)]        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; Lookup Role
        {
            get { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; (Lookup)GetValue(RoleProperty); }
            set { SetValue(RoleProperty, &lt;span style="color: #0000ff"&gt;value&lt;/span&gt;); }
        }

        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; DependencyProperty CustomerProperty = DependencyProperty.Register(&lt;span style="color: #006080"&gt;&amp;quot;Customer&amp;quot;&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(Lookup), &lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(CreateCustomerRelationship));
        [CrmInput(&lt;span style="color: #006080"&gt;&amp;quot;Customer Contact&amp;quot;&lt;/span&gt;)]
        [CrmReferenceTarget(&lt;span style="color: #006080"&gt;&amp;quot;contact&amp;quot;&lt;/span&gt;)]
        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; Lookup Customer
        {
            get { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; (Lookup)GetValue(CustomerProperty); }
            set { SetValue(CustomerProperty, &lt;span style="color: #0000ff"&gt;value&lt;/span&gt;); }
        }


        &lt;span style="color: #008000"&gt;// End Set Properties&lt;/span&gt;


        &lt;span style="color: #008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span style="color: #008000"&gt;/// Execute is called when the custom workflow is invoked&lt;/span&gt;
        &lt;span style="color: #008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;executionContext&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
        &lt;span style="color: #008000"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
        {
            &lt;span style="color: #008000"&gt;//Get a workflow context&lt;/span&gt;
            var contextService = executionContext.GetService(&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(IContextService)) &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; IContextService;
            var workflowContext = contextService.Context;

            CreateRole(workflowContext);

            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; ActivityExecutionStatus.Closed;
        }


        &lt;span style="color: #008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span style="color: #008000"&gt;/// Create a matching sales customer relationship role&lt;/span&gt;
        &lt;span style="color: #008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;context&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; CreateRole(IWorkflowContext context)
        {
            &lt;span style="color: #0000ff"&gt;try&lt;/span&gt;
            {
                &lt;span style="color: #008000"&gt;// Get Guids of Customer and RelationshipRole&lt;/span&gt;
                Guid contactId = Customer.Value;
                Guid salesRoleId = Role.Value;

                &lt;span style="color: #008000"&gt;// get a local service&lt;/span&gt;
                ICrmService service = context.CreateCrmService(&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;);

                &lt;span style="color: #008000"&gt;// Grab the contact involved&lt;/span&gt;
                var cols = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ColumnSet(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; [] {&lt;span style="color: #006080"&gt;&amp;quot;parentcustomerid&amp;quot;&lt;/span&gt;});
                
                var thisContact = (contact)service.Retrieve(EntityName.contact.ToString(), contactId, cols);

                &lt;span style="color: #008000"&gt;// Create a cooresponding customer relationship&lt;/span&gt;
                var role = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; customerrelationship
                {
                    customerid = thisContact.parentcustomerid,
                    partnerid = CrmTypes.CreateCustomer(EntityName.contact.ToString(), contactId),
                    partnerroleid = CrmTypes.CreateLookup(EntityName.relationshiprole.ToString(), salesRoleId)
                };

                service.Create(role);
            }

            &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (SoapException)
            {
                &lt;span style="color: #008000"&gt;// Handle error&lt;/span&gt;
            }

            &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (Exception)
            {
                &lt;span style="color: #008000"&gt;// Handle error&lt;/span&gt;
            }

        }


    }

}&lt;/p&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Before you can use your workflow it needs to be strongly signed and registered.&amp;#160; Its assembly is registered in the same way as a plugin, but it doesn't require registering it at the entity or event level. If you don't have the plugin Registration Tool you can find it here. &lt;a href="http://code.msdn.microsoft.com/crmplugin"&gt;Plugin Deployment Tool&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/SXNSzubO0fI/AAAAAAAAAGY/csQefezlFkg/s1600-h/image%5B9%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="181" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/SXNSz056OwI/AAAAAAAAAGc/s0weD3EyR8s/image_thumb%5B5%5D.png?imgmax=800" width="565" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;When you create a new Workflow you can now select this custom Workflow when you &amp;quot;Add Step&amp;quot; and pick the following at the bottom of the list.&lt;/p&gt;

&lt;p&gt;OneCRMPro&amp;#160;&amp;#160; &amp;gt;&amp;#160;&amp;#160; Create CustomerRelationship&lt;/p&gt;

&lt;p&gt;Now when you &amp;quot;Set Properties&amp;quot;, you will see below how the DependencyProperty values will show up below.&lt;/p&gt;

&lt;p&gt;The &lt;font color="#0080ff"&gt;&lt;strong&gt;CrmInput&lt;/strong&gt;&lt;/font&gt; keyword specifies the Property Name and the &lt;font color="#0080ff"&gt;&lt;strong&gt;CrmReferenceTarget &lt;/strong&gt;&lt;/font&gt;keyword specifies the expected attribute type to be mapped.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/SXNS0dwNR8I/AAAAAAAAAGg/Cy55rJRxBd8/s1600-h/image%5B4%5D.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="382" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/SXNS1AeL6FI/AAAAAAAAAGk/4N73H0tUUVU/image_thumb%5B2%5D.png?imgmax=800" width="563" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt; That's about it. Publish your workflow and try it out!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-3175813746269062077?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/3175813746269062077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=3175813746269062077' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/3175813746269062077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/3175813746269062077'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2009/01/crm-40-custom-workflows.html' title='CRM 4.0 Custom Workflows'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_pTy2xto-ivU/SXNSz056OwI/AAAAAAAAAGc/s0weD3EyR8s/s72-c/image_thumb%5B5%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-4367840819844864995</id><published>2008-12-20T16:03:00.001-05:00</published><updated>2008-12-21T09:42:59.979-05:00</updated><title type='text'>MS CRM 4.0 Filtered Lookups</title><content type='html'>&lt;p&gt;I just finished implementing a number of filtered lookups with Michael H&amp;#246;hne's &lt;a href="http://www.stunnware.com/" target="_blank"&gt;Stunnware Filtered Lookup 4.0&lt;/a&gt;. Like most developers I have to think seriously about whether I want to build something vs. pay for someone else's work.&lt;/p&gt;  &lt;p&gt;There has been a lot of work put into this product since its introduction with CRM 3.0. The 4.0 release seems pretty well sorted and really makes creating filtered lookups an easy task to accomplish. Supporting the Outlook client, multiple languages, multi-tenancy, and IFD makes this a much better solution then most(probably all) of us would take the time to build on our own.&lt;/p&gt;  &lt;p&gt;Filtered Lookups have been reinvented far too many times and become maintenance issues for many upgrading from CRM 3.0 to CRM 4.0. I would rather not have to dig through another guy's failed attempt at this functionality in the future. I personally believe MS should pull this functionality into its product, but barring that, I think using a product like this is the best way to go.&lt;/p&gt;  &lt;p&gt;I'm currently using it for a growing list of filtered Lookups for one my customers.&amp;#160; This includes some pretty standard lookups like the Account: Primary Contact Lookup, the Case: Responsible Contact, and the Email To:, CC:, and BCC: fields, as well as some for custom fields.&lt;/p&gt;  &lt;p&gt;What is typically involved in making a filtered lookup with this tool is the following:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Settings -&amp;gt; Filtered Lookup: Create a &lt;font color="#008080"&gt;&lt;strong&gt;Retrieve Multiple Queries&lt;/strong&gt;&lt;/font&gt; entity       &lt;ul&gt;       &lt;li&gt;This may involve using the Fetch Wizard to generate the query. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Settings -&amp;gt; Filtered Lookup: Create a &lt;font color="#008080"&gt;&lt;strong&gt;Single-View Lookup&lt;/strong&gt;&lt;/font&gt; entity &lt;/li&gt;    &lt;li&gt;Settings -&amp;gt; Customizations: Add JavaScript to your entity's OnLoad event. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Here is a simple example:&lt;/p&gt;  &lt;p&gt;I needed a filtered list for Reseller Accounts on an opportunity. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/SU1dtmzxxtI/AAAAAAAAAFg/C4N7BPYXtF0/s1600-h/image%5B11%5D.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="193" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/SU1dt7R1cOI/AAAAAAAAAFk/WK5v9L_1Was/image_thumb%5B7%5D.png?imgmax=800" width="546" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;So I created a new Retrieve Multiple Query entity,&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/SU5LsE65_rI/AAAAAAAAAFw/SSNzmRX4XFE/s1600-h/image%5B9%5D.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="270" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/SU5LsQMupRI/AAAAAAAAAF0/Xa6suo7BDdI/image_thumb%5B4%5D.png?imgmax=800" width="544" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;copied the Query from the Active Accounts example and added a filter for an industrycode picklist value of 21,&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/SU5LsxPlKsI/AAAAAAAAAF4/jfNqLWEU4Jc/s1600-h/image%5B4%5D.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="524" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/SU5LtH_ze1I/AAAAAAAAAF8/-D5D-A2Ghgk/image_thumb%5B1%5D.png?imgmax=800" width="541" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;created a Single-View Lookup using the Query above,&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/SU5LtZhXt0I/AAAAAAAAAGA/E6ODpBW6PWA/s1600-h/image%5B17%5D.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="367" alt="image" src="http://lh5.ggpht.com/_pTy2xto-ivU/SU5LtbARkEI/AAAAAAAAAGE/EWgzQvf6JA4/image_thumb%5B8%5D.png?imgmax=800" width="551" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;setup the columns for that Lookup,&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/SU5Ltkii_TI/AAAAAAAAAGI/eGdDDLFq80w/s1600-h/image%5B21%5D.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="215" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/SU5Lt2zZtuI/AAAAAAAAAGM/hF35lc7EPQw/image_thumb%5B10%5D.png?imgmax=800" width="560" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;set the Labels to English,&lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/SU5Lt7-cazI/AAAAAAAAAGQ/zq4o5Z2rjQ8/s1600-h/image%5B25%5D.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="191" alt="image" src="http://lh4.ggpht.com/_pTy2xto-ivU/SU5LuUCUsvI/AAAAAAAAAGU/OPrVgN4ZKpM/image_thumb%5B12%5D.png?imgmax=800" width="564" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;added this JavaScript to my Opportunity's OnLoad Event. Published the opportunity and I was done.&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 98.22%; cursor: text; max-height: 400px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 400px; background-color: #f4f4f4"&gt;   &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;p&gt;SW_IS_LICENSED_USER = &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;

&lt;span style="color: #0000ff"&gt;try&lt;/span&gt; &lt;br /&gt;{
    &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; httpRequest = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ActiveXObject(&lt;span style="color: #006080"&gt;&amp;quot;Msxml2.XMLHTTP&amp;quot;&lt;/span&gt;);
    httpRequest.open(&lt;span style="color: #006080"&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;, prependOrgName(&lt;span style="color: #006080"&gt;&amp;quot;/isv/stunnware.com/cld4/cld4.aspx?orgname=&amp;quot;&lt;/span&gt; + ORG_UNIQUE_NAME), &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;);
    httpRequest.send(&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;);
    eval(httpRequest.responseText);
}

&lt;span style="color: #0000ff"&gt;catch&lt;/span&gt;(e) {
}

&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (SW_IS_LICENSED_USER) 
{
    &lt;span style="color: #0000ff"&gt;var &lt;/span&gt;resellerAccountLookup = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SwSingleLookup(&lt;span style="color: #006080"&gt;&amp;quot;new_resellerid&amp;quot;&lt;/span&gt;);

    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (resellerAccountLookup.existsOnForm()) 
    {
         resellerAccountLookup.setLookupClass(&lt;span style="color: #006080"&gt;&amp;quot;ResellerAccounts&amp;quot;&lt;/span&gt;);
     }
}&lt;/p&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;All in all that took maybe 10 minutes including testing.&lt;/p&gt;

&lt;p&gt;That was a very simple case. The examples in the help file show you how to create the Account: Primary Contact filtered lookup showing only Contacts associated with that Account. Implementing this only required cutting from the example and pasting into the OnLoad Event of the account form. Another example gave me the information I needed to to implement the Case Responsible Contacts Filter where the Filtered Lookup changes when the case's account is changed. This required a little JavaScript added to the OnChange for the customerid as well as the Onload for the form.&lt;/p&gt;

&lt;p&gt;The email modifications I made were also very easy to implement as shown in the code that follows. Since the Account is almost always preloaded in the To: field, it was easy to overload the lookups for the target selections to default to the Contacts related to that Account.&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 800px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 561px; background-color: #f4f4f4"&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;SW_IS_LICENSED_USER = &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;

&lt;span style="color: #0000ff"&gt;try&lt;/span&gt; {
    &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; httpRequest = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ActiveXObject(&lt;span style="color: #006080"&gt;&amp;quot;Msxml2.XMLHTTP&amp;quot;&lt;/span&gt;);
    httpRequest.open(&lt;span style="color: #006080"&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;, prependOrgName(&lt;span style="color: #006080"&gt;&amp;quot;/isv/stunnware.com/cld4/cld4.aspx?orgname=&amp;quot;&lt;/span&gt; + ORG_UNIQUE_NAME), &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;);
    httpRequest.send(&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;);
    eval(httpRequest.responseText);
}

&lt;span style="color: #0000ff"&gt;catch&lt;/span&gt;(e) {
}

&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (SW_IS_LICENSED_USER) 
{  
   &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( crmForm.all.to.DataValue != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt; )
   {
     &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; accountid =  crmForm.all.to.DataValue[0].id;
    
     &lt;span style="color: #0000ff"&gt;var &lt;/span&gt;toContactLookup = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SwSingleLookup(&lt;span style="color: #006080"&gt;&amp;quot;to&amp;quot;&lt;/span&gt;);
     toContactLookup.setParameter(&lt;span style="color: #006080"&gt;&amp;quot;parentcustomerid&amp;quot;&lt;/span&gt;, accountid);
     toContactLookup.setLookupClass(&lt;span style="color: #006080"&gt;&amp;quot;AssociatedContacts&amp;quot;&lt;/span&gt;);

     &lt;span style="color: #0000ff"&gt;var &lt;/span&gt;ccContactLookup = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SwSingleLookup(&lt;span style="color: #006080"&gt;&amp;quot;cc&amp;quot;&lt;/span&gt;);
     ccContactLookup.setParameter(&lt;span style="color: #006080"&gt;&amp;quot;parentcustomerid&amp;quot;&lt;/span&gt;, accountid);
     ccContactLookup.setLookupClass(&lt;span style="color: #006080"&gt;&amp;quot;AssociatedContacts&amp;quot;&lt;/span&gt;);

    &lt;span style="color: #0000ff"&gt;var &lt;/span&gt;bccContactLookup = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SwSingleLookup(&lt;span style="color: #006080"&gt;&amp;quot;bcc&amp;quot;&lt;/span&gt;);
    bccContactLookup.setParameter(&lt;span style="color: #006080"&gt;&amp;quot;parentcustomerid&amp;quot;&lt;/span&gt;, accountid);
    bccContactLookup.setLookupClass(&lt;span style="color: #006080"&gt;&amp;quot;AssociatedContacts&amp;quot;&lt;/span&gt;);
   }

}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;For this instance I am still relying on the Form Assistant if the end user wants to select multiple Contacts for a single field or add a CRM user, which is a rare case for this customer. The Form Assistant is not modified by these lookups in any way. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font color="#008000" size="3"&gt;Understanding 3 Important Lines of Code 
      &lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;There are three important lines of code to that you will use to create a filtered lookup. &lt;/p&gt;

&lt;p&gt;1. &lt;strong&gt;Create a new lookup&lt;/strong&gt; to override the existing lookup for specified field on the form. In this case the &amp;quot;to&amp;quot; field on the email form.&amp;#160; &lt;br /&gt;

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;var&lt;/font&gt; toContactLookup = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SwSingleLookup(&lt;span style="color: #006080"&gt;&amp;quot;to&amp;quot;&lt;/span&gt;); 

  &lt;br /&gt;

  &lt;br /&gt;2. &lt;strong&gt;Set a filter parameter&lt;/strong&gt; that is defined in your Fetch and assign a value.&amp;#160; &lt;br /&gt;

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; toContactLookup.setParameter(&lt;span style="color: #006080"&gt;&amp;quot;parentcustomerid&amp;quot;&lt;/span&gt;, accountid); &lt;/p&gt;

&lt;p&gt;Below is the Fetch that you can access under settings. Notice the parentcustomerid field in the filter section. You are not limited to a single parameter if you need additional criteria for your filter.&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 98.07%; cursor: text; max-height: 550px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 204px; background-color: #f4f4f4"&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; height: 178px; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;fetch&lt;/span&gt; &lt;span style="color: #ff0000"&gt;mapping&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;logical&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;entity&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;contact&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;attribute&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;emailaddress1&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;attribute&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;telephone1&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;attribute&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;fullname&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;order&lt;/span&gt; &lt;span style="color: #ff0000"&gt;attribute&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;fullname&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;filter&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;condition&lt;/span&gt; &lt;span style="color: #ff0000"&gt;attribute&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;statecode&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;operator&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;eq&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;condition&lt;/span&gt; &lt;span style="color: #ff0000"&gt;attribute&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;parentcustomerid&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;operator&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;eq&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;param&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;parentcustomerid&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;filter&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
   &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;entity&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;fetch&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
  &lt;br /&gt;3. &lt;strong&gt;Set the class&lt;/strong&gt; that you are using.&amp;#160;&amp;#160; &lt;br /&gt;

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; toContactLookup.setLookupClass(&lt;span style="color: #006080"&gt;&amp;quot;AssociatedContacts&amp;quot;&lt;/span&gt;); &lt;/p&gt;

&lt;p&gt;That's it, just save your customization and publish. You now have a working filtered Lookup.&lt;/p&gt;

&lt;p&gt;&lt;font color="#008000" size="3"&gt;&lt;strong&gt;Just the Beginning&amp;#160; &lt;br /&gt;&lt;/strong&gt;&lt;/font&gt;These are some very simple examples, but it is obvious how easily much more complex filters could be. If you are going to create complex Retrieve queries, it is worth downloading the Fetch Wizard as well, which is a really easy way to create the XML needed for the fetches that this tool relies on. The Fetch Wizard is part of the &lt;a href="http://www.stunnware.com/" target="_blank"&gt;Stunnware Tools 4.0&lt;/a&gt;. that are available for download at no charge.&lt;/p&gt;

&lt;p&gt;What you will see Under &lt;strong&gt;Settings-&amp;gt; Filtered Lookup&lt;/strong&gt; are the following which will allow you to configure everything but the little bit of JavaScript that you will add to your forms, and there are even tools for tracing your filtered lookups if something isn't working quite right.&lt;a href="http://lh5.ggpht.com/_pTy2xto-ivU/SU1duJBvFNI/AAAAAAAAAFo/3Tz4uy0Mo7U/s1600-h/image%5B6%5D.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="863" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/SU1dus6D5qI/AAAAAAAAAFs/v5Tx3cXDy5E/image_thumb%5B4%5D.png?imgmax=800" width="559" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This tool is made for a developer to use, but a person comfortable with customizing CRM and with some JavaScript experience should be able to get by. It requires an installation process that can require you to manually update the XML of your ISV.config and SiteMap, but if you read the instructions, it will all make sense.&lt;/p&gt;

&lt;p&gt;If you are playing with the MS CRM 4.0 VPC Image, there is a license for that image that you can download at no cost to test this system out.&lt;/p&gt;

&lt;p&gt;If you are considering reinventing this wheel, I seriously recommend trying this solution out first.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-4367840819844864995?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/4367840819844864995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=4367840819844864995' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/4367840819844864995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/4367840819844864995'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2008/12/ms-crm-40-filtered-lookups.html' title='MS CRM 4.0 Filtered Lookups'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_pTy2xto-ivU/SU1dt7R1cOI/AAAAAAAAAFk/WK5v9L_1Was/s72-c/image_thumb%5B7%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-1459723186941065388</id><published>2008-12-15T06:32:00.001-05:00</published><updated>2008-12-15T07:57:45.748-05:00</updated><title type='text'>MS CRM 4.0 Plug-ins vs. CRM 3.0 Callouts</title><content type='html'>&lt;p&gt;Plug-ins are a huge improvement over the callouts available in MS CRM 3.0. They are much more flexible, much easier to deploy, and have a many more triggers allowing a lot more access to the inner operation of your CRM system. &lt;/p&gt;  &lt;p&gt;The following comparison shows some of the key differences:&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="550" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="275"&gt;         &lt;p align="center"&gt;&lt;strong&gt;Callout&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="277"&gt;         &lt;p align="center"&gt;&lt;strong&gt;Plug-in&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" colspan="2"&gt;         &lt;p align="center"&gt;&lt;font size="4"&gt;&lt;strong&gt;Deployment&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="270"&gt;Requires Workflow service to be restarted to re-read the callout.config.xml which defines which assemblies and classes to call for each triggered event.&lt;/td&gt;        &lt;td valign="top" width="277"&gt;         &lt;ul&gt;           &lt;li&gt;Has an easy to use Deployment Tool &lt;a href="http://code.msdn.microsoft.com/crmplugin" target="_blank"&gt;Plugin Deployment Tool&lt;/a&gt;               &lt;br /&gt;&lt;/li&gt;            &lt;li&gt;Has an open API for automation of builds. &lt;/li&gt;         &lt;/ul&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="270"&gt;         &lt;p&gt;Requires assemblies be copied to each CRM server in your web server farm. Because those assemblies can be busy this can require:&lt;/p&gt;          &lt;ol&gt;           &lt;li&gt;Draining each server in an NLB configuration. &lt;/li&gt;            &lt;li&gt;An IIS reset &lt;/li&gt;            &lt;li&gt;Stopping the Workflow service. &lt;/li&gt;         &lt;/ol&gt;       &lt;/td&gt;        &lt;td valign="top" width="277"&gt;         &lt;ul&gt;           &lt;li&gt;Allows deployment to the database in a single step for all CRM servers.              &lt;br /&gt;&lt;/li&gt;            &lt;li&gt;Or deployment to the GAC on each server.              &lt;br /&gt;&lt;/li&gt;            &lt;li&gt;Or deployment to a folder for debugging. &lt;/li&gt;         &lt;/ul&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="270"&gt;         &lt;p&gt;&amp;#160;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="277"&gt;         &lt;ul&gt;           &lt;li&gt;Requires a strongly typed assembly.&lt;/li&gt;         &lt;/ul&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" colspan="2"&gt;         &lt;p align="center"&gt;&lt;font size="4"&gt;&lt;strong&gt;Flexibility&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="270"&gt;Requires a different interface for each Message. A PreCreate has a different interface from a PostCreate, or a PreUpdate, or a PostUpdate.&lt;/td&gt;        &lt;td valign="top" width="277"&gt;Has the same interface for all messages. &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="270"&gt;&lt;/td&gt;        &lt;td valign="top" width="277"&gt;         &lt;p&gt;Supports many more messages            &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc151101.aspx" target="_blank"&gt;Supported Messages for Plug-ins&lt;/a&gt; &lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="270"&gt;&amp;#160;&lt;/td&gt;        &lt;td valign="top" width="277"&gt;Has parent and child pipeline feature&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="270"&gt;&amp;#160;&lt;/td&gt;        &lt;td valign="top" width="277"&gt;Has the ability to watch for endless loops.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" colspan="2"&gt;         &lt;p align="center"&gt;&lt;font size="4"&gt;&lt;strong&gt;Coding&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="270"&gt;         &lt;p&gt;Requires parsing Xml images to see the contents of the entity generating the message: preImageEntityXml, postImageEntityXml&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="277"&gt;         &lt;p&gt;Returns a Dynamic Entity or Moniker instead.&lt;/p&gt;          &lt;p&gt;var entity = (DynamicEntity)context.InputParameters.Properties[ParameterName.Target];&lt;/p&gt;          &lt;p&gt;var myMoniker = (Moniker)context.InputParameters.Properties[ParameterName.Target];&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="270"&gt;         &lt;p&gt;Allows validity checking and stopping a change to the database in a preCallout&lt;/p&gt;          &lt;p&gt;errorMessage = &amp;quot;Validation Failed.&amp;quot;; return PreCalloutReturnValue.Abort;            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="277"&gt;         &lt;p&gt;Allows validity checking and stopping an operation in a Pre message.&lt;/p&gt;          &lt;p&gt;throw new InvalidPluginExecutionException(            &lt;br /&gt;&amp;quot;Validity Failed. {1}&amp;quot;);&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="270"&gt;         &lt;p&gt;Allows modifying data before it is written to the database in a&amp;#160; preCallout.&lt;/p&gt;          &lt;p&gt;Parse and Modify the entityXML&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="277"&gt;         &lt;p&gt;Allows modifying data before it is written to the database in a Pre message.&lt;/p&gt;          &lt;p&gt;Modify the Dynamic entity.&lt;/p&gt;          &lt;p&gt;String nameProperty = entity.Properties[&amp;quot;name&amp;quot;] as String;            &lt;br /&gt;nameProperty = &amp;quot;new name&amp;quot;;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;strong&gt;     &lt;br /&gt;Resources&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://code.msdn.microsoft.com/crmplugintemplate/Release/ProjectReleases.aspx?ReleaseId=1684" target="_blank"&gt;VS Plug-in template &lt;/a&gt;This template will create a basic Plug-in Project and is a good starting point. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The example it creates is for a Dynamic Entity Target. This is useful for Create and Update messages, but many other messages will return a Moniker which gives you the id of the calling entity.      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;The template includes code to call a customized crmservice which can be useful, although it is faster and a better practice to call your service from the context as shown below if you are comfortable with Dynamic Entities:      &lt;br /&gt;      &lt;br /&gt;&lt;strong&gt;ICrmService service = context.CreateCrmService(true);        &lt;br /&gt;&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://code.msdn.microsoft.com/crmplugin" target="_blank"&gt;Plugin Deployment Tool&lt;/a&gt; This tool will allow you a simple way to deploy your plug-ins. and has an easy to use UI. &lt;/p&gt;  &lt;p&gt;With plug-ins it is important to learn about Dynamic Entities.&lt;/p&gt;  &lt;p&gt;If you purchase David Yak's &lt;a href="http://www.thecrmbook.com/" target="_blank"&gt;CRM as a Rapid Development Platform&lt;/a&gt;, it comes with a number of helper classes for Dynamic Entities, and plug-ins as well as other useful tools that are interesting. His chapters on plug-ins and dynamic entities are useful, and the code he provides is worth downloading and referring to. He also has chapters specific to using his plug-in framework for debugging and other tasks which are not CRM development generic.&lt;/p&gt;  &lt;p&gt;I recently ordered a copy of &lt;a href="http://www.amazon.com/gp/product/0735625948" target="_blank"&gt;Programming Microsoft Dynamics CRM 4.0&lt;/a&gt;, and I'll try to remember to update this post after I have looked over its coverage of Plug-ins and dynamic entities.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-1459723186941065388?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/1459723186941065388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=1459723186941065388' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/1459723186941065388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/1459723186941065388'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2008/12/ms-crm-40-plug-ins-vs-callouts.html' title='MS CRM 4.0 Plug-ins vs. CRM 3.0 Callouts'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-7453245128691274585</id><published>2008-11-26T08:54:00.001-05:00</published><updated>2008-11-26T08:54:13.418-05:00</updated><title type='text'>Interactive Webcast: The Top 5 Ways to Save Money with CRM</title><content type='html'>&lt;p&gt;I've been invited back to be a guest speaker for an interactive Webcast on December 4th at 10:00 AM Pacific, 1:00 PM Eastern, 6:00PM GMT. This is through CBS interactive and Tech Republic.&lt;/p&gt;  &lt;p&gt;&lt;a title="http://webcasts.techrepublic.com.com/abstract.aspx?docid=390610&amp;amp;promo=100202" href="http://webcasts.techrepublic.com.com/abstract.aspx?docid=390610&amp;amp;promo=100202"&gt;http://webcasts.techrepublic.com.com/abstract.aspx?docid=390610&amp;amp;promo=100202&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-7453245128691274585?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/7453245128691274585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=7453245128691274585' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/7453245128691274585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/7453245128691274585'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2008/11/interactive-webcast-top-5-ways-to-save.html' title='Interactive Webcast: The Top 5 Ways to Save Money with CRM'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-4671841314514054938</id><published>2008-11-20T08:11:00.001-05:00</published><updated>2008-11-20T08:11:58.992-05:00</updated><title type='text'>Queues in MS CRM</title><content type='html'>&lt;p&gt;There are a lot of misconceptions about queues. They only apply to cases and activities.&amp;#160; While the terminology is the same, assigning a case or activity to a queue is not the same as assigning an entity to a CRM user or team. Programmatically what is being used is a &lt;a href="http://msdn.microsoft.com/en-us/library/cc151181.aspx" target="_blank"&gt;RouteRequest&lt;/a&gt; rather than an &lt;a href="http://technet.microsoft.com/en-us/library/bb955912.aspx" target="_blank"&gt;AssignRequest&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;To get a better idea how this works we'll look at database. There are two entities storing queue information, the Queue and the QueueItem. These are not customizable.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Queue&lt;/b&gt; &amp;#8211; (table) contains all queues&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;There are two queues automatically created for each CRM user.&amp;#160; &lt;ul&gt;       &lt;li&gt;&lt;strong&gt;&lt;font color="#008000"&gt;Assigned&lt;/font&gt;&lt;/strong&gt; &lt;/li&gt;        &lt;li&gt;In &lt;strong&gt;&lt;font color="#008000"&gt;Progress&lt;/font&gt;&lt;/strong&gt;           &lt;br /&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Any user defined queues that you create are also stored here.      &lt;ul&gt;       &lt;li&gt;example:&amp;#160; &lt;strong&gt;&lt;font color="#008000"&gt;My New Public Queue&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;QueueItem&lt;/b&gt; &amp;#8211; (link table)&amp;#160; Contains an entry for each entity assigned to a queue.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;An item can only belong to &lt;b&gt;one&lt;/b&gt; Queue at a time, &lt;/li&gt;    &lt;li&gt;The only entities that can below to a Queue are:      &lt;ul&gt;       &lt;li&gt;Activities ( email, tasks, etc. ) &lt;/li&gt;        &lt;li&gt;Cases &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;An activity or case retains its owner and is not modified in any way when it is assigned to a queue. It is just added to the QueueItem list.&amp;#160; An entity can ONLY belong to one queue at a time.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Normal Lifecycle&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;When created a case or activity is added to the &lt;font color="#008040"&gt;&lt;strong&gt;Assigned&lt;/strong&gt;&lt;/font&gt; queue of the owner and it will stay there until it is completed/closed/canceled. &lt;/p&gt;  &lt;p&gt;Sometimes a workflow will assign an entity to a user defined queue. (Below is an example that just puts all created Cases into a Support queue.) &lt;font size="1"&gt;You might want logic with timers to move Cases around, or you might have different queues by subject, or related account territory. The important thing is that the queue is used as a natural part of the customer's business process.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/SSViGw_XiFI/AAAAAAAAAFQ/MJDDmnQjlAs/s1600-h/image4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="324" alt="image" src="http://lh3.ggpht.com/_pTy2xto-ivU/SSViHMg1TjI/AAAAAAAAAFU/Nf-ATrtQPyA/image_thumb2.png?imgmax=800" width="574" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;When someone selects an entity in the queue and clicks&amp;#160; &lt;strong&gt;Accept...&lt;/strong&gt; that entity it is then moved into that person's &amp;quot;&lt;strong&gt;&lt;font color="#008000"&gt;In Progress&lt;/font&gt;&lt;/strong&gt;&amp;quot; queue.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pTy2xto-ivU/SSViHcQJxEI/AAAAAAAAAFY/CwNzqgMHg-k/s1600-h/image7.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="193" alt="image" src="http://lh6.ggpht.com/_pTy2xto-ivU/SSViHUEbcOI/AAAAAAAAAFc/8xoQJINqSK0/image_thumb3.png?imgmax=800" width="189" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Example code working with Queues&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Creating a Queue&lt;/strong&gt;&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 400px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 174px; background-color: #f4f4f4"&gt;   &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 99.51%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; height: 160px; background-color: #f4f4f4; border-bottom-style: none"&gt;var newQueue = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; queue
{
    name = &lt;span style="color: #006080"&gt;&amp;quot;My New Public Queue&amp;quot;&lt;/span&gt;,
    businessunitid = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Lookup { Value = BusinessUnitId, type = EntityName.businessunit.ToString() },
    primaryuserid = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Lookup { Value = UserId, type = EntityName.systemuser.ToString() },
    queuetypecode = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Picklist { name = &lt;span style="color: #006080"&gt;&amp;quot;Public&amp;quot;&lt;/span&gt;, Value = 1 }
};

service.Create(newQueue);&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Assigning an incident to a Queue &lt;/strong&gt;&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 400px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 285px; background-color: #f4f4f4"&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 94.71%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; height: 272px; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;p&gt; &lt;span style="color: #008000"&gt;// Target the incident&lt;/span&gt;
var target = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; TargetQueuedIncident 
{
   EntityId = incidentId
};

&lt;span style="color: #008000"&gt;// Create a RouteRequest ( you would need to query for your Queue Id's )&lt;/span&gt;
var route = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; RouteRequest
{
   Target = target,
   RouteType = RouteType.Queue,&lt;br /&gt;   SourceQueueId = currentQueueId.Value 
   EndpointId = finalQueueId,
   };
            
&lt;span style="color: #008000"&gt;// Execute the route&lt;/span&gt;
var routed = (RouteResponse)service.Execute(route);&lt;/p&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Tracking Queue Assignment in a Plugin&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the related improvements to MS CRM 4.0 is the inclusion of the Route Message for Plug-ins.&amp;#160; For example, you can now trigger based on a Case being routed to a queue even though the case entity is not modified in any way. &lt;/p&gt;

&lt;p&gt;Your code can inspect the SourceQueueId to see what queue it is coming from and the EndpointId to see the destination queue.&lt;/p&gt;

&lt;p&gt;This link shows a complete list of the &lt;a href="http://www.patrickverbeeten.com/pages/ContentItemPage.aspx?id=12&amp;amp;item=53&amp;amp;p=true" target="_blank"&gt;Plug-in Message Input Parameters&lt;/a&gt;. You can see that the Route Message has 3 input parameters, two which I mentioned (SourceQueueId and EndpointId) as well as &lt;a href="http://technet.microsoft.com/en-us/library/bb959350.aspx" target="_blank"&gt;RouteType&lt;/a&gt; which has three values ( Auto = 0 ( automatic route) , User = 1 (route to a user's private queue), Queue =&amp;#160; 2 (route to a public queue) ) You could use the RouteType to filter out a chunk of queue routes that wish to ignore.&lt;/p&gt;

&lt;p&gt;The fact that the dynamic entity of an incident contains no information about the queue it is assigned to means that you need to examine the context.InputParameters.Properties to find out which queue the case is coming from and which queue it will finally call home.&lt;/p&gt;

&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Execute(IPluginExecutionContext context)
   {
      DynamicEntity entity = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;

    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (context.InputParameters.Properties.Contains(ParameterName.Target) &amp;amp;&amp;amp;
       context.InputParameters.Properties[ParameterName.Target] &lt;span style="color: #0000ff"&gt;is&lt;/span&gt; DynamicEntity)
    {
        entity = (DynamicEntity)context.InputParameters.Properties[ParameterName.Target];
        
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (entity.Name != EntityName.incident.ToString()) { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;; }
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (context.MessageName != MessageName.Route.ToString()) { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;; }
        
        Guid SourceQueueId = ((Moniker)context.InputParameters.Properties[&lt;span style="color: #006080"&gt;&amp;quot;SourceQueueId&amp;quot;&lt;/span&gt;]).Id;
        Guid EndpointId = ((Moniker)context.InputParameters.Properties[&lt;span style="color: #006080"&gt;&amp;quot;EndpointId&amp;quot;&lt;/span&gt;]).Id;
    }&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-4671841314514054938?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/4671841314514054938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=4671841314514054938' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/4671841314514054938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/4671841314514054938'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2008/11/queues-in-ms-crm.html' title='Queues in MS CRM'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_pTy2xto-ivU/SSViHMg1TjI/AAAAAAAAAFU/Nf-ATrtQPyA/s72-c/image_thumb2.png?imgmax=800' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-4699789276354826602</id><published>2008-11-19T07:43:00.001-05:00</published><updated>2008-11-19T07:44:52.594-05:00</updated><title type='text'>A Couple Data import issues</title><content type='html'>&lt;p&gt;I thought these items might be of help to other people populating data in MS CRM systems. The first is documented, but for the second I found no information on web.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Issue 1:&lt;/strong&gt; When importing &lt;font color="#0080c0"&gt;&lt;strong&gt;email&lt;/strong&gt;&lt;/font&gt; activities, like all other activities in the vast majority of instances you need to complete them so they show up in history and not in the current Activities of a user's Workplace or against the items to which they are regarded.&lt;/p&gt;  &lt;p&gt;If you import an email message with a From email address that is not a CRM system user, you can create the activity without a problem, but will get a Soap Exception &amp;quot;&lt;font color="#ff0000"&gt;The specified sender type is not supported&lt;/font&gt;.&amp;quot; When you try to set the state of the email to &amp;quot;Received&amp;quot;. The following hot fix will allow you to Complete those incoming emails and set them to &amp;quot;Received&amp;quot;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/947860/en-us"&gt;http://support.microsoft.com/kb/947860/en-us&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Issue 2:&lt;/strong&gt;&amp;#160; While importing account information after a customer of mine added additional customertypecode picklist items I ran into a Soap Exception.&lt;/p&gt;  &lt;p&gt;&amp;lt;code&amp;gt;0x8004431a&amp;lt;/code&amp;gt;   &lt;br /&gt;&amp;lt;description&amp;gt;A validation error occurred.&amp;#160; &lt;font color="#ff0000"&gt;The value of 'customertypecode' on record of type 'account' is outside the valid range&lt;/font&gt;.&amp;lt;/description&amp;gt;&lt;/p&gt;  &lt;p&gt;The customertypecode picklist starts at 1 and progresses linearly with the default values out of the box, and you can always rename the existing items, but any new picklist items start with values of 200001 and progress linearly from there.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#008000"&gt;Workaround:&lt;/font&gt;&lt;/strong&gt; Edit an existing account or add a dummy account and select a new pick list item with a higher ranged value and save that account record. Now the problem magically disappears. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#0080c0"&gt;Hypothesis:&lt;/font&gt;&lt;/strong&gt; I'm thinking that the CRM webservices are using reflection like Excel does on a spreadsheet column but against the database and it initially ranges the pick list field as a short, but only ranges it up when a larger value exists. &lt;/p&gt;  &lt;p&gt;If anyone has a better understanding of why this behavior occurs, I would love to hear about it.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-4699789276354826602?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/4699789276354826602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=4699789276354826602' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/4699789276354826602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/4699789276354826602'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2008/11/couple-data-import-issues.html' title='A Couple Data import issues'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-7472592163002100727</id><published>2008-11-12T08:28:00.001-05:00</published><updated>2008-11-26T08:56:10.676-05:00</updated><title type='text'>Interactive Webcast: Using CRM to Drive Sales in a Slowing Economy</title><content type='html'>&lt;p&gt;I've been invited to be the guest speaker for an interactive Webcast on November 13th at 1:00 PM Pacific, 4:00 PM Eastern, 9:00PM GMT. This is through CBS interactive and Tech Republic.&lt;/p&gt;  &lt;p&gt;&lt;a title="http://webcasts.techrepublic.com.com/abstract.aspx?docid=390611" href="http://webcasts.techrepublic.com.com/abstract.aspx?docid=390611"&gt;http://webcasts.techrepublic.com.com/abstract.aspx?docid=390611&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-7472592163002100727?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/7472592163002100727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=7472592163002100727' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/7472592163002100727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/7472592163002100727'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2008/11/interactive-webcast-using-crm-to-drive.html' title='Interactive Webcast: Using CRM to Drive Sales in a Slowing Economy'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-5794866232797345558</id><published>2008-11-07T09:20:00.001-05:00</published><updated>2008-11-07T09:27:17.015-05:00</updated><title type='text'>Annotation Import web service error</title><content type='html'>&lt;p&gt;During a recent import I was getting some exceptions while adding annotations to Accounts and Contacts. The exceptions being generated were not SoapExceptions, but HTTP 400 malformed http request errors.&lt;/p&gt;  &lt;p&gt;This was a data driven problem and I assumed that it was an illegal character messing up the SOAP. The annotation.notetext attribute was the only one being set to a large chunk of unknown text. Debugging this showed some illegal characters in my source data. Initially I found an occasional &amp;quot;\0&amp;quot; which is easily removed, but there was another character that showed up as a box symbol. &lt;/p&gt;  &lt;p&gt;So how do you filter that out?&lt;/p&gt;  &lt;p&gt;First you need to know what you are looking at, so while debugging copy the offending character into the clipboard and paste it into a text file. In Visual Studio there is a binary editor. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;File &lt;/strong&gt;-&amp;gt; &lt;strong&gt;Open File&lt;/strong&gt;     &lt;br /&gt;After selecting your file click notice the small pick list to the right of Open.     &lt;br /&gt;Select &lt;strong&gt;Open &lt;u&gt;W&lt;/u&gt;ith...&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pTy2xto-ivU/SRROndbxINI/AAAAAAAAAFA/rR-3o0zVykA/s1600-h/evilcharacter%5B3%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="373" alt="evilcharacter" src="http://lh4.ggpht.com/_pTy2xto-ivU/SRROnQgqWnI/AAAAAAAAAFE/BMxnnc1vvxw/evilcharacter_thumb%5B1%5D.jpg?imgmax=800" width="500" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Viewing the text file revealed that the offending character was a hex 12. I had copied three of them into NotePad. For the curious among you a hex 12 = DC2 or Device Control 2. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pTy2xto-ivU/SRROnvBDq2I/AAAAAAAAAFI/yXQnr80CG7Q/s1600-h/hex_editor%5B3%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="228" alt="hex_editor" src="http://lh3.ggpht.com/_pTy2xto-ivU/SRROn0a_AfI/AAAAAAAAAFM/ftfuI0nubeY/hex_editor_thumb%5B1%5D.jpg?imgmax=800" width="311" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Armed with that information the following statement filtered out the offending characters and the import completed without error.&lt;/p&gt;  &lt;p&gt;newAnnotation.notetext = note.&lt;strong&gt;Replace('\0', ' ').Replace('\u0012', ' ');&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Below is a code example using this filter to generate contact annotations&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;  &lt;div&gt;   &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;var newAnnotation = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; annotation
       {
          objectid = CrmTypes.CreateLookup(EntityName.contact.ToString(), contactId),
          objecttypecode = CrmTypes.CreateEntityNameReference(EntityName.contact.ToString()),
          isdocument = CrmTypes.CreateCrmBoolean(&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;),
          ownerid = newContact.ownerid,
          subject = &lt;span style="color: #006080"&gt;&amp;quot;GoldMine notes&amp;quot;&lt;/span&gt;,
          notetext = note.Replace(&lt;span style="color: #006080"&gt;'\0'&lt;/span&gt;, &lt;span style="color: #006080"&gt;' '&lt;/span&gt;).Replace(&lt;span style="color: #006080"&gt;'\u0012'&lt;/span&gt;, &lt;span style="color: #006080"&gt;' '&lt;/span&gt;)
       };

&lt;span style="color: #0000ff"&gt;try&lt;/span&gt;
{
    service.Create(newAnnotation);
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;This could have been solved a number of other ways like a regex that only allows valid characters for a SOAP request, but I haven't run into this issue enough to create one.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-5794866232797345558?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/5794866232797345558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=5794866232797345558' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/5794866232797345558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/5794866232797345558'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2008/11/annotation-import-web-service-error.html' title='Annotation Import web service error'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_pTy2xto-ivU/SRROnQgqWnI/AAAAAAAAAFE/BMxnnc1vvxw/s72-c/evilcharacter_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-955194416843959467</id><published>2008-10-26T10:04:00.001-04:00</published><updated>2008-10-26T10:04:51.278-04:00</updated><title type='text'>Creating an ActivityParty in MS CRM 4.0</title><content type='html'>&lt;p&gt;In an earlier Blog I covered creating activities, but did not cover the &lt;font color="#0080ff"&gt;activityparty&lt;/font&gt; in depth. Each activity has a number of activityparty arrays containing lookups to the CRM &lt;font color="#0080ff"&gt;systemuser&lt;/font&gt;, &lt;font color="#0080ff"&gt;contact&lt;/font&gt;, &lt;font color="#0080ff"&gt;lead&lt;/font&gt;, and &lt;font color="#0080ff"&gt;account&lt;/font&gt; entities that are involved in that activity.&lt;/p&gt;  &lt;p&gt;For many purposes the only attributes that need to be set in each ActivityParty are the &lt;font color="#0080ff"&gt;participationtypemask&lt;/font&gt; and &lt;font color="#0080ff"&gt;partyid&lt;/font&gt;. The name participationtypemask is a little misleading since it needs to be set to a picklist with a value from the &lt;font color="#0080ff"&gt;ActivityPartyType &lt;/font&gt;&lt;font color="#000000"&gt;rather than actually being a bitmask like the &lt;font color="#0080ff"&gt;SecurityPrincipal&lt;/font&gt; &lt;font color="#0080ff"&gt;AccessMask&lt;/font&gt;. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;There are numerous ActivityPartyTypes used for the different ActivityParty arrays in each activity. A complete list of&amp;#160; these types is located here &lt;a href="http://technet.microsoft.com/en-us/library/cc151230.aspx" target="_blank"&gt;MSDN ActivityPartyType Class&lt;/a&gt;. The partyid is just a lookup to the appropriate systemuser, contact, lead or account.&lt;/p&gt;  &lt;p&gt;Typically when importing activities you will be matching against an email address and/or contact or lead name. I'd included some example code that will creates an activityparty array for use in creating an activity based on email addresses. A few examples of how I would call this are the following:&lt;/p&gt;  &lt;div&gt;   &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;p&gt;thisEmail.to   = CreateActivityParty(to_rfc882,   &lt;font color="#0080c0"&gt;ActivityPartyType&lt;/font&gt;.ToRecipient);&lt;br /&gt;thisEmail.from = CreateActivityParty(from_rfc882, &lt;font color="#0080c0"&gt;ActivityPartyType&lt;/font&gt;.Sender);&lt;br /&gt;thisEmail.cc   = CreateActivityParty(cc_rfc882,   &lt;font color="#0080c0"&gt;ActivityPartyType&lt;/font&gt;.CcRecipient);&lt;br /&gt;thisEmail.bcc  = CreateActivityParty(bcc_rfc882,  &lt;font color="#0080c0"&gt;ActivityPartyType&lt;/font&gt;.BccRecipient);&lt;/p&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;This shows an email entity having a number of attributes assigned an appropriate activityparty array.&lt;/p&gt;

&lt;p&gt;This code takes the emailAddresses string from a given email and creates a list of email addresses that will be part of the ActivityParty array. Then it looks for a match for each email address against systemusers, contacts, leads and finally accounts. Notice that an ActivityParty array can consist of any combination of these entities.&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 900px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; background-color: #f4f4f4"&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 850px; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// Create that list of Parties associated with each email address in the email list&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;emailAddresses&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;addressType&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; activityparty[] CreateActivityParty(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; emailAddresses, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; addressType)
{
    var activityPartiesPerEmail = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; List&amp;lt;activityparty&amp;gt;();

    List&amp;lt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;gt; addresses = CleanEmail(emailAddresses);  &lt;span style="color: #008000"&gt;// Get a clean email list from the rfc822 address line.&lt;/span&gt;

    &lt;span style="color: #008000"&gt;//Find All Activity parties &lt;/span&gt;
    
    &lt;span style="color: #008000"&gt;// Pecking order System Users, Contacts, Leads, Accounts&lt;/span&gt;

    &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; ( var emailAddress &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; addresses)
    {
        BusinessEntityCollection users = FindEntitiesByAttribute(emailAddress, EntityName.systemuser.ToString(), &lt;span style="color: #006080"&gt;&amp;quot;internalemailaddress&amp;quot;&lt;/span&gt;);

        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (users.BusinessEntities.Length &amp;gt; 0)
        {
            &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (systemuser user &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; users.BusinessEntities)
            {
                activityPartiesPerEmail.Add( &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; activityparty
                    {
                        participationtypemask = CrmTypes.CreatePicklist(addressType),
                        partyid = CrmTypes.CreateLookup(EntityName.systemuser.ToString(), user.systemuserid.Value)
                    }
                  );
                &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
            }
        }
        &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;
        {
            BusinessEntityCollection contacts = FindEntitiesByAttribute(emailAddress, EntityName.contact.ToString(), &lt;span style="color: #006080"&gt;&amp;quot;emailaddress1&amp;quot;&lt;/span&gt;);

            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (contacts.BusinessEntities.Length &amp;gt; 0)
            {
                &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (contact aContact &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; contacts.BusinessEntities)
                {
                    activityPartiesPerEmail.Add(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; activityparty
                          {
                              participationtypemask = CrmTypes.CreatePicklist(addressType),
                              partyid = CrmTypes.CreateLookup(EntityName.contact.ToString(), aContact.contactid.Value)
                          }
                        );
                    &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
                }
            }
            &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;
            {
                BusinessEntityCollection leads = FindEntitiesByAttribute(emailAddress, EntityName.lead.ToString(), &lt;span style="color: #006080"&gt;&amp;quot;emailaddress1&amp;quot;&lt;/span&gt;);

                &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (leads.BusinessEntities.Length &amp;gt; 0)
                {
                    &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (lead aLead &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; leads.BusinessEntities)
                    {
                        activityPartiesPerEmail.Add(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; activityparty
                            {
                                participationtypemask = CrmTypes.CreatePicklist(addressType),
                                partyid = CrmTypes.CreateLookup(EntityName.lead.ToString(), aLead.leadid.Value)
                            }
                          );
                        &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
                    }
                }
                &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;
                {
                    BusinessEntityCollection accounts = FindEntitiesByAttribute(emailAddress, EntityName.account.ToString(), &lt;span style="color: #006080"&gt;&amp;quot;emailaddress1&amp;quot;&lt;/span&gt;);

                    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (accounts.BusinessEntities.Length &amp;gt; 0)
                    {
                        &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (account anAccount &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; accounts.BusinessEntities)
                        {
                            activityPartiesPerEmail.Add(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; activityparty
                                {
                                    participationtypemask = CrmTypes.CreatePicklist(addressType),
                                    partyid = CrmTypes.CreateLookup(EntityName.account.ToString(), anAccount.accountid.Value)
                                }
                            );
                            &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
                        }
                    }
                }
            }
        }
    }
    
    var theseParties = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; activityparty[activityPartiesPerEmail.Count];

    activityPartiesPerEmail.CopyTo(theseParties);
    
    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; theseParties;
}

&lt;span style="color: #008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// Returns all entities of a specified type filterd on a specified attribute and value&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;emailAddress&amp;quot;&amp;gt;attribute filter value&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;entity&amp;quot;&amp;gt;entityName&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;param name=&amp;quot;attributeName&amp;quot;&amp;gt;attribute to filter on&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; BusinessEntityCollection FindEntitiesByAttribute(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; emailAddress, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; entity, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; attributeName)
{
    var condition = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ConditionExpression
    {
        AttributeName = attributeName,
        Operator = ConditionOperator.Equal,
        Values = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt;[] { emailAddress }
    };


    var filter = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; FilterExpression
    {
        FilterOperator = LogicalOperator.And,
        Conditions = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt;[] { condition }
    };


    var query = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; QueryExpression
    {
        EntityName = entity,
        ColumnSet = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; AllColumns(),
        Criteria = filter
    };

    &lt;span style="color: #0000ff"&gt;try&lt;/span&gt;
    {
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; service.RetrieveMultiple(query);
    }

    &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (SoapException ex)
    {
        &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; errormsg = String.Format(&lt;span style="color: #006080"&gt;&amp;quot;Error for FindSystemUserByEmailAddress {0} error {1}&amp;quot;&lt;/span&gt;, emailAddress, ex.Detail.InnerText);

        WriteErrorFile(errormsg);
        &lt;span style="color: #0000ff"&gt;throw&lt;/span&gt;;
    }
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;If you have any questions please let me know.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-955194416843959467?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/955194416843959467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=955194416843959467' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/955194416843959467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/955194416843959467'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2008/10/creating-activityparty-in-ms-crm-40.html' title='Creating an ActivityParty in MS CRM 4.0'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-5297764467651019654</id><published>2008-10-17T07:39:00.001-04:00</published><updated>2008-10-17T07:44:07.089-04:00</updated><title type='text'>Creating Attachments to emails and annotations</title><content type='html'>&lt;p&gt;MS CRM stores attachments directly in the database which allows security to be enforced on attachments. If you delete a entity, all of its annotations are removed with it. By way of comparison this offers a lot more control than just saving a pathname for an attached file like GoldMine does with its RFC822 format emails.&lt;/p&gt;  &lt;p&gt;In MS CRM 4.0 the attachments are stored in a text field in the ActivityMimeAttachment table, and in an nvarchar(max) in the AnnotationBase table.&amp;#160; You can use SQL &amp;quot;like&amp;quot; comparator in a where clause against an nvarchar but not for a text field. nvarchar(max) was introduced with SQL 2005.&lt;/p&gt;  &lt;p&gt;&lt;font color="#0080c0" size="3"&gt;&lt;strong&gt;Creating an activitymimeattachment ( Email attachment )&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The following is a code snippet from a larger method that creates the email entity as well. This code is inside a try catch for the email creation.&lt;/p&gt;  &lt;p&gt;Notice that a file can be converted into a format that can be saved into the &lt;font color="#0080c0"&gt;&lt;strong&gt;&lt;em&gt;activitymimeattachment&lt;/em&gt;&lt;/strong&gt;.&lt;em&gt;&lt;strong&gt;body&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt; attribute by using the &lt;strong&gt;File.ReadAllBytes&lt;/strong&gt;() and the &lt;strong&gt;Convert.ToBase64String()&lt;/strong&gt; methods.&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 100%; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 750px; background-color: #f4f4f4"&gt;   &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 880px; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #008000"&gt;// If you have an email entity ready to be created and list of pathnames&lt;/span&gt;
&lt;span style="color: #008000"&gt;// the following code will generate the related &lt;span style="color: #008000"&gt;activitymimeattachment entities&lt;/span&gt; &lt;/span&gt;
&lt;font style="background-color: #ffffff" color="#008000"&gt;&lt;/font&gt;
Guid emailId = service.Create(newEmail);
 
 &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (attachmentPathnames.Count &amp;gt; 0)
 {
     &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; attachmentCount = 1;

     &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (var attachmentPathName &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; attachmentPathnames)
    {
     var emailAttachment = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; activitymimeattachment
             {
                &lt;span style="color: #008000"&gt;// Relate back to email activity &lt;/span&gt;
                activityid = CrmTypes.CreateLookup(EntityName.email.ToString(), emailId),
                filename = attachmentPathName.Substring(attachmentPathName.LastIndexOf(&lt;span style="color: #006080"&gt;'\\'&lt;/span&gt;) + 1), 
                subject = subject,
                attachmentnumber = CrmTypes.CreateCrmNumber(attachmentCount ++)
             };

     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (File.Exists(attachmentPathName))
     {         
         &lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;[] fileContents = File.ReadAllBytes(attachmentPathName);
         emailAttachment.body = Convert.ToBase64String(fileContents);
         emailAttachment.filesize = CrmTypes.CreateCrmNumber((&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;) &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; FileInfo(attachmentPathName).Length);
         emailAttachment.mimetype = GetMimeType(attachmentPathName); &lt;span style="color: #008000"&gt;// GetMimeType() Covered Below&lt;/span&gt;
     }
     &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;
     {
         &lt;span style="color: #008000"&gt;// Handle condition where file doesn't exist&lt;/span&gt;
         emailAttachmentbody = &lt;span style="color: #006080"&gt;&amp;quot;Attachment File Not Found.&amp;quot;&lt;/span&gt;;
     }

     &lt;span style="color: #0000ff"&gt;try&lt;/span&gt;
     {
         service.Create(emailAttachment);
     }

     &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (SoapException ex)
     {
         &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; errormsg = String.Format(&lt;span style="color: #006080"&gt;&amp;quot;Write Error for Email Attachment {0} error {1}&amp;quot;&lt;/span&gt;, attachmentPathName, ex.Detail.InnerText);
         WriteErrorFile(errormsg);
     }
    }
 }&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;font color="#0080c0" size="3"&gt;&lt;strong&gt;Creating an annotation (Notes attachment)&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;The following code creates an &lt;strong&gt;annotation&lt;/strong&gt; which can belong to any entity with a Notes tab. In this case it is a Letter activity. This is very similar to the above code for the activitymimeattachment. One key difference is that an annotation can also just be a Note,&amp;#160; so it has an attribute just to specify if it is a note or an attachment.&lt;/p&gt;

&lt;p&gt;Notice the &lt;strong&gt;&lt;font color="#0080c0"&gt;isdocument&lt;/font&gt;&lt;/strong&gt; attribute of the annotation. This needs to be set to true for an attachment. Also notice the &lt;strong&gt;&lt;font color="#0080c0"&gt;overriddencreatedon&lt;/font&gt;&lt;/strong&gt; attribute. The addition of this is one of the many improvements in MS CRM 4.0 and removed one of my pet peeves about MS CRM 3.0. When importing annotations in MS CRM 3.0 all of the annotations would be set to the import date which is useless for the end user. The ONLY way to change it was to go back with a SQL Update to change the createdon date. Now we have the &lt;strong&gt;&lt;font color="#0080c0"&gt;overriddencreatedon&lt;/font&gt;&lt;/strong&gt; attribute so that we don't have to &amp;quot;break the rules&amp;quot; and access the data tables directly.&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 800px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 700px; background-color: #f4f4f4"&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 880px; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;blockquote&gt;&lt;p&gt;Guid letterId = service.Create(newLetter);

var newAnnotation = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; annotation
  {
      objectid = CrmTypes.CreateLookup(EntityName.letter.ToString(), letterId),
      objecttypecode = CrmTypes.CreateEntityNameReference(EntityName.letter.ToString()),
      isdocument = CrmTypes.CreateCrmBoolean(&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;),
      ownerid = newLetter.ownerid,
      subject = subject,
      overriddencreatedon = newLetter.actualend,
      notetext = &lt;span style="color: #006080"&gt;&amp;quot;File from import.&amp;quot;&lt;/span&gt;
  };

&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (hasAttachment)
{
    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (File.Exists(attachmentPath))
    {
        newAnnotation.isdocument = CrmTypes.CreateCrmBoolean(&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;),
        newAnnotation.filename = attachmentPath.Substring(attachmentPath.LastIndexOf('\\') + 1);
        &lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;[] fileContents = File.ReadAllBytes(attachmentPath);
        newAnnotation.documentbody = System.Convert.ToBase64String(fileContents);
        newAnnotation.filesize = CrmTypes.CreateCrmNumber((&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;)&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; FileInfo(attachmentPath).Length);
        newAnnotation.mimetype = GetMimeType(attachmentPath);
    }
    &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;
    {
        &lt;span style="color: #008000"&gt;// Handle missing attachment&lt;br /&gt;        &lt;/span&gt;newAnnotation.subject += &lt;span style="color: #006080"&gt;&amp;quot; - (attached document not found)&amp;quot;&lt;/span&gt;;
    }

    &lt;span style="color: #0000ff"&gt;try&lt;/span&gt;
    {
        service.Create(newAnnotation);
    }

    &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (SoapException ex)
    {
        &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; errormsg = String.Format(&lt;span style="color: #006080"&gt;&amp;quot;Write Error for Letter Attachment {0} error {1}&amp;quot;&lt;/span&gt;, attachmentPath, ex.Detail.InnerText);
        WriteErrorFile(errormsg);
    }

}&lt;/p&gt;&lt;/blockquote&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The following method is a helper to look up a mimetype for a given file extension.&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; background-color: #f4f4f4"&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; GetMimeType(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; fileName)
{
    &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; mimeType;

    &lt;span style="color: #0000ff"&gt;switch&lt;/span&gt; (System.IO.Path.GetExtension(fileName).ToLower())
    {
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.3dm&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;x-world/x-3dmf&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.3dmf&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;x-world/x-3dmf&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.a&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/octet-stream&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.aab&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-authorware-bin&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.aam&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-authorware-map&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.aas&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-authorware-seg&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.abc&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/vnd.abc&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.acgi&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/html&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.afl&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/animaflex&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ai&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/postscript&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.aif&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/aiff&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.aifc&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/aiff&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.aiff&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/aiff&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.aim&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-aim&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.aip&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/x-audiosoft-intra&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ani&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-navi-animation&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.aos&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-nokia-9000-communicator-add-on-software&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.aps&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/mime&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.arc&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/octet-stream&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.arj&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/arj&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.art&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/x-jg&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.asf&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/x-ms-asf&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.asm&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/x-asm&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.asp&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/asp&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.asx&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/x-ms-asf&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.au&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/basic&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.avi&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/avi&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.avs&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/avs-video&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.bcpio&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-bcpio&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.bin&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/octet-stream&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.bm&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/bmp&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.bmp&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/bmp&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.boo&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/book&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.book&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/book&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.boz&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-bzip2&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.bsh&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-bsh&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.bz&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-bzip&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.bz2&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-bzip2&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.c&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.c++&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.cat&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.ms-pki.seccat&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.cc&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ccad&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/clariscad&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.cco&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-cocoa&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.cdf&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/cdf&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.cer&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/pkix-cert&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.cha&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-chat&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.chat&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-chat&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.class&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/java&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.com&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/octet-stream&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.conf&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.cpio&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-cpio&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.cpp&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/x-c&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.cpt&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-cpt&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.crl&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/pkcs-crl&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.crt&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/pkix-cert&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.csh&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-csh&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.css&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.cxx&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.dcr&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-director&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.deepv&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-deepv&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.def&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.der&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-x509-ca-cert&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.dif&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/x-dv&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.dir&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-director&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.dl&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/dl&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.doc&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/msword&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.dot&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/msword&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.dp&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/commonground&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.drw&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/drafting&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.dump&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/octet-stream&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.dv&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/x-dv&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.dvi&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-dvi&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.dwf&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;model/vnd.dwf&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.dwg&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/vnd.dwg&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.dxf&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/vnd.dwg&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.dxr&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-director&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.el&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/x-script.elisp&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.elc&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-elc&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.env&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-envoy&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.eps&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/postscript&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.es&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-esrehber&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.etx&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/x-setext&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.evy&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/envoy&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.exe&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/octet-stream&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.f&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.f77&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/x-fortran&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.f90&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.fdf&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.fdf&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.fif&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/fif&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.fli&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/fli&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.flo&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/florian&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.flx&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/vnd.fmi.flexstor&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.fmf&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/x-atomic3d-feature&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.for&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/x-fortran&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.fpx&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/vnd.fpx&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.frl&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/freeloader&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.funk&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/make&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.g&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.g3&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/g3fax&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.gif&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/gif&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.gl&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/gl&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.gsd&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/x-gsm&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.gsm&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/x-gsm&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.gsp&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-gsp&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.gss&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-gss&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.gtar&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-gtar&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.gz&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-gzip&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.gzip&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-gzip&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.h&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.hdf&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-hdf&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.help&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-helpfile&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.hgl&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.hp-hpgl&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.hh&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.hlb&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/x-script&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.hlp&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/hlp&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.hpg&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.hp-hpgl&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.hpgl&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.hp-hpgl&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.hqx&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/binhex&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.hta&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/hta&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.htc&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/x-component&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.htm&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/html&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.html&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/html&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.htmls&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/html&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.htt&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/webviewhtml&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.htx&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/html&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ice&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;x-conference/x-cooltalk&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ico&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/x-icon&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.idc&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ief&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/ief&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.iefs&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/ief&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.iges&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/iges&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.igs&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/iges&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ima&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-ima&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.imap&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-httpd-imap&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.inf&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/inf&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ins&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-internett-signup&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ip&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-ip2&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.isu&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/x-isvideo&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.it&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/it&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.iv&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-inventor&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ivr&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;i-world/i-vrml&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ivy&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-livescreen&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.jam&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/x-jam&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.jav&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.java&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.jcm&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-java-commerce&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.jfif&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/jpeg&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.jfif-tbnl&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/jpeg&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.jpe&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/jpeg&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.jpeg&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/jpeg&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.jpg&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/jpeg&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.jps&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/x-jps&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.js&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-javascript&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.jut&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/jutvision&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.kar&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/midi&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ksh&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-ksh&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.la&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/nspaudio&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.lam&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/x-liveaudio&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.latex&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-latex&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.lha&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/octet-stream&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.lhx&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/octet-stream&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.list&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.lma&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/nspaudio&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.log&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.lsp&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-lisp&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.lst&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.lsx&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/x-la-asf&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ltx&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-latex&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.lzh&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/octet-stream&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.lzx&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/octet-stream&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.m&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.m1v&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/mpeg&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.m2a&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/mpeg&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.m2v&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/mpeg&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.m3u&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/x-mpequrl&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.man&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-troff-man&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.map&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-navimap&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mar&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mbd&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/mbedlet&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mc$&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-magic-cap-package-1.0&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mcd&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/mcad&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mcf&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/mcf&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mcp&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/netmc&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.me&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-troff-me&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mht&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;message/rfc822&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mhtml&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;message/rfc822&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mid&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/midi&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.midi&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/midi&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mif&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-mif&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mime&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;message/rfc822&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mjf&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/x-vnd.audioexplosion.mjuicemediafile&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mjpg&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/x-motion-jpeg&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mm&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/base64&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mme&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/base64&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mod&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/mod&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.moov&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/quicktime&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mov&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/quicktime&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.movie&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/x-sgi-movie&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mp2&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/mpeg&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mp3&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/mpeg&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mpa&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/mpeg&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mpc&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-project&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mpe&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/mpeg&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mpeg&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/mpeg&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mpg&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/mpeg&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mpga&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/mpeg&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mpp&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.ms-project&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mpt&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.ms-project&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mpv&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.ms-project&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mpx&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.ms-project&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mrc&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/marc&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ms&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-troff-ms&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mv&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/x-sgi-movie&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.my&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/make&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.mzz&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-vnd.audioexplosion.mzz&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.nap&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/naplps&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.naplps&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/naplps&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.nc&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-netcdf&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ncm&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.nokia.configuration-message&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.nif&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/x-niff&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.niff&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/x-niff&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.nix&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-mix-transfer&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.nsc&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-conference&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.nvd&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-navidoc&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.o&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/octet-stream&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.oda&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/oda&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.omc&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-omc&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.omcd&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-omcdatamaker&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.omcr&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-omcregerator&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.p&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/x-pascal&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.p10&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/pkcs10&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.p12&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/pkcs-12&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.p7a&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-pkcs7-signature&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.p7c&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/pkcs7-mime&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.p7m&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/pkcs7-mime&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.p7r&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-pkcs7-certreqresp&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.p7s&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/pkcs7-signature&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.part&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/pro_eng&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.pas&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/pascal&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.pbm&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/x-portable-bitmap&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.pcl&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.hp-pcl&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.pct&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/x-pict&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.pcx&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/x-pcx&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.pdb&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;chemical/x-pdb&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.pdf&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/pdf&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.pfunk&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/make&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.pgm&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/x-portable-greymap&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.pic&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/pict&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.pict&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/pict&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.pkg&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-newton-compatible-pkg&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.pko&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.ms-pki.pko&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.pl&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.plx&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-pixclscript&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.pm&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/x-xpixmap&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.pm4&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-pagemaker&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.pm5&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-pagemaker&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.png&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/png&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.pnm&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-portable-anymap&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.pot&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.ms-powerpoint&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.pov&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;model/x-pov&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ppa&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.ms-powerpoint&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ppm&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/x-portable-pixmap&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.pps&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.ms-powerpoint&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ppt&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.ms-powerpoint&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ppz&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.ms-powerpoint&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.pre&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-freelance&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.prt&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/pro_eng&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ps&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/postscript&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.psd&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/octet-stream&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.pvu&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;paleovu/x-pv&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.pwz&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.ms-powerpoint&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.py&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/x-script.phyton&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.pyc&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;applicaiton/x-bytecode.python&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.qcp&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/vnd.qcelp&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.qd3&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;x-world/x-3dmf&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.qd3d&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;x-world/x-3dmf&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.qif&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/x-quicktime&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.qt&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/quicktime&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.qtc&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/x-qtc&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.qti&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/x-quicktime&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.qtif&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/x-quicktime&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ra&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/x-pn-realaudio&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ram&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/x-pn-realaudio&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ras&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-cmu-raster&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.rast&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/cmu-raster&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.rexx&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/x-script.rexx&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.rf&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/vnd.rn-realflash&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.rgb&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/x-rgb&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.rm&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.rn-realmedia&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.rmi&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/mid&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.rmm&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/x-pn-realaudio&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.rmp&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/x-pn-realaudio&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.rng&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/ringing-tones&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.rnx&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.rn-realplayer&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.roff&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-troff&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.rp&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/vnd.rn-realpix&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.rpm&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/x-pn-realaudio-plugin&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.rt&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/richtext&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.rtf&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/richtext&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.rtx&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/richtext&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.rv&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/vnd.rn-realvideo&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.s&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/x-asm&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.s3m&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/s3m&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.saveme&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/octet-stream&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.sbk&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-tbook&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.scm&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-lotusscreencam&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.sdml&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.sdp&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/sdp&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.sdr&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/sounder&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.sea&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/sea&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.set&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/set&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.sgm&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/sgml&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.sgml&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/sgml&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.sh&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-sh&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.shar&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-shar&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.shtml&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/html&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.sid&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/x-psid&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.sit&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-sit&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.skd&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-koan&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.skm&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-koan&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.skp&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-koan&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.skt&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-koan&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.sl&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-seelogo&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.smi&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/smil&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.smil&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/smil&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.snd&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/basic&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.sol&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/solids&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.spc&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/x-speech&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.spl&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/futuresplash&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.spr&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-sprite&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.sprite&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-sprite&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.src&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-wais-source&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ssi&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/x-server-parsed-html&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ssm&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/streamingmedia&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.sst&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.ms-pki.certstore&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.step&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/step&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.stl&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/sla&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.stp&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/step&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.sv4cpio&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-sv4cpio&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.sv4crc&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-sv4crc&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.svf&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/vnd.dwg&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.svr&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-world&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.swf&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-shockwave-flash&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.t&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-troff&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.talk&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/x-speech&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.tar&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-tar&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.tbk&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/toolbook&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.tcl&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-tcl&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.tcsh&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/x-script.tcsh&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.tex&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-tex&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.texi&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-texinfo&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.texinfo&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-texinfo&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.text&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.tgz&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-compressed&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.tif&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/tiff&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.tiff&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/tiff&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.tr&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-troff&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.tsi&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/tsp-audio&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.tsp&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/dsptype&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.tsv&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/tab-separated-values&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.turbot&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/florian&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.txt&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.uil&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/x-uil&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.uni&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/uri-list&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.unis&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/uri-list&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.unv&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/i-deas&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.uri&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/uri-list&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.uris&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/uri-list&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.ustar&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-ustar&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.uu&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/octet-stream&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.uue&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/x-uuencode&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.vcd&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-cdlink&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.vcs&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/x-vcalendar&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.vda&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vda&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.vdo&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/vdo&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.vew&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/groupwise&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.viv&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/vivo&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.vivo&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/vivo&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.vmd&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vocaltec-media-desc&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.vmf&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vocaltec-media-file&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.voc&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/voc&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.vos&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/vosaic&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.vox&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/voxware&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.vqe&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/x-twinvq-plugin&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.vqf&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/x-twinvq&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.vql&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/x-twinvq-plugin&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.vrml&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-vrml&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.vrt&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;x-world/x-vrt&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.vsd&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-visio&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.vst&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-visio&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.vsw&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-visio&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.w60&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/wordperfect6.0&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.w61&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/wordperfect6.1&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.w6w&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/msword&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.wav&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/wav&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.wb1&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-qpro&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.wbmp&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/vnd.wap.wbmp&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.web&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.xara&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.wiz&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/msword&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.wk1&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-123&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.wmf&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;windows/metafile&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.wml&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/vnd.wap.wml&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.wmlc&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.wap.wmlc&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.wmls&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/vnd.wap.wmlscript&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.wmlsc&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.wap.wmlscriptc&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.word&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/msword&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.wp&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/wordperfect&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.wp5&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/wordperfect&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.wp6&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/wordperfect&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.wpd&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/wordperfect&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.wq1&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-lotus&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.wri&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/mswrite&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.wrl&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-world&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.wrz&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;x-world/x-vrml&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.wsc&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/scriplet&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.wsrc&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-wais-source&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.wtk&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-wintalk&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.xbm&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/x-xbitmap&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.xdr&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/x-amt-demorun&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.xgz&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;xgl/drawing&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.xif&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/vnd.xiff&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.xl&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/excel&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.xla&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.ms-excel&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.xlb&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.ms-excel&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.xlc&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.ms-excel&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.xld&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.ms-excel&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.xlk&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.ms-excel&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.xll&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.ms-excel&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.xlm&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.ms-excel&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.xls&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.ms-excel&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.xlt&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.ms-excel&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.xlv&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.ms-excel&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.xlw&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/vnd.ms-excel&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.xm&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;audio/xm&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.xml&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/xml&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.xmz&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;xgl/movie&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.xpix&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-vnd.ls-xpix&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.xpm&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/xpm&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.x-png&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/png&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.xsr&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;video/x-amt-showrun&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.xwd&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;image/x-xwd&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.xyz&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;chemical/x-pdb&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.z&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/x-compressed&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.zip&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/zip&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.zoo&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/octet-stream&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;.zsh&amp;quot;&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;text/x-script.zsh&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;default&lt;/span&gt;: mimeType = &lt;span style="color: #006080"&gt;&amp;quot;application/octet-stream&amp;quot;&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
    }
    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; mimeType;
} &lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;font color="#0080c0" size="3"&gt;MS CRM 4.0 Attachment Size Limitation&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;MS CRM stores attachments directly in the database, and there is a 5Mb attachment limit by default with CRM 4.0. This limit is set for good reason, and if you want to increase it, you may want to see if it starts to impact your system performance. &lt;/p&gt;

&lt;p&gt;This can be overwritten by doing the following:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Changing the &lt;strong&gt;maxRequestLength&lt;/strong&gt; value in the main CRM web.config file. By default it is 8Mb which doesn't impact the System Setting below. However if you increase the Maximum File size above the maxRequestLength you will have problems. 

    &lt;br /&gt;

    &lt;br /&gt;&amp;lt;system.web&amp;gt; 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;httpRuntime executionTimeout=&amp;quot;300&amp;quot; maxRequestLength=&amp;quot;8192&amp;quot;/&amp;gt; 

    &lt;br /&gt;&amp;lt;/system.web&amp;gt; 

    &lt;br /&gt;

    &lt;br /&gt;There are many examples on the web that show something like the following which pretty well removes any size constraints from the web.config. 

    &lt;br /&gt;

    &lt;br /&gt;&amp;lt;httpRuntime executionTimeout=&amp;quot;&lt;strong&gt;9999&lt;/strong&gt;&amp;quot; maxRequestLength=&amp;quot;&lt;strong&gt;99999&lt;/strong&gt;&amp;quot;/&amp;gt; 

    &lt;br /&gt;

    &lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;Save the web.config and restart IIS. 
    &lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;For MS CRM 4.0 that just leaves adjusting the Maximum file size in System Settings with default of 5,120 Kb shown below to something higher but less than the maxRequestLength. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="http://lh6.ggpht.com/mkovalcson/SPh5gX5gloI/AAAAAAAAAE4/VNGSL9p9aME/s1600-h/emailAtttachmentSize9.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="601" alt="emailAtttachmentSize" src="http://lh5.ggpht.com/mkovalcson/SPh5hGPk65I/AAAAAAAAAE8/GKOmpSrTxsE/emailAtttachmentSize_thumb5.jpg?imgmax=800" width="528" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Alternate 3&lt;/em&gt;. In MS CRM 3.0 there is a registry setting that needs to be set instead. In &lt;strong&gt;HKEY_Local_Machine\Software\Microsoft\MSCRM&lt;/strong&gt;&amp;#160; &lt;br /&gt;the &lt;strong&gt;maxuploadfilesize&lt;/strong&gt; value can be changed from it's 5Mb default.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-5297764467651019654?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/5297764467651019654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=5297764467651019654' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/5297764467651019654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/5297764467651019654'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2008/10/creating-attachments-to-emails-and.html' title='Creating Attachments to emails and annotations'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/mkovalcson/SPh5hGPk65I/AAAAAAAAAE8/GKOmpSrTxsE/s72-c/emailAtttachmentSize_thumb5.jpg?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-4675424686779582147</id><published>2008-10-12T11:02:00.001-04:00</published><updated>2008-10-12T11:02:28.650-04:00</updated><title type='text'>CRM 4.0 Creating Activities</title><content type='html'>&lt;p&gt;When importing activities or creating them for a process, there are three important Steps.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Create the Activity relating it to all appropriate entities.&lt;/li&gt;    &lt;li&gt;(Optional) Attach a file using an Annotation or ActivityMimeAttachment &lt;/li&gt;    &lt;li&gt;Set the State of the Activity &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;MS CRM has numerous Activities. They are all part of an &lt;strong&gt;ActivityPointer&lt;/strong&gt; Entity, but we won't work with that directly.&amp;#160; We will directly create &lt;strong&gt;task&lt;/strong&gt;, &lt;strong&gt;email&lt;/strong&gt;, &lt;strong&gt;letter&lt;/strong&gt;, &lt;strong&gt;appointment&lt;/strong&gt;, and &lt;strong&gt;phonecall&lt;/strong&gt; entities. I'll cover Campaign and Service Activities another day.&lt;/p&gt;  &lt;p&gt;Activities need to be related with a number of entities before they are useful.&lt;/p&gt;  &lt;p&gt;Activities need &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;An &lt;strong&gt;owner&lt;/strong&gt;, a systemuser who is responsible for carrying an activity out. &lt;/li&gt;    &lt;li&gt;A &lt;strong&gt;regardingobject&lt;/strong&gt;, the entity the activity is related to, like a Contact, Opportunity or Account.&lt;/li&gt;    &lt;li&gt;Numerous &lt;strong&gt;activityparty&lt;/strong&gt; arrays for holding the different types of related entities that this activity affects. For example an email could &lt;em&gt;cc:&lt;/em&gt; a systemuser and a contact, and there is a cc activityparty array for an email.&lt;/li&gt;    &lt;li&gt;Any file attachments in the form of an &lt;strong&gt;annotation&lt;/strong&gt; or &lt;strong&gt;activitymimeattachment&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;Start and End dates Scheduled and Actual.&lt;/li&gt;    &lt;li&gt;A &lt;strong&gt;state/status&lt;/strong&gt; combination       &lt;ol&gt;       &lt;li&gt;Active will show up in the owners WorkPlace Activities and under the regardingobject entity and possible rollup to an entity above that. &lt;/li&gt;        &lt;li&gt;Inactive - will show up in history under the regardingobject and possible rollup to an entity above that. &lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Setting up each activity is very similar. Below is some example code that creates a phonecall, and completes that activity.&lt;/p&gt;  &lt;p&gt;Notice the following in the code sample:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The &lt;strong&gt;activityparty&lt;/strong&gt; arrays that allow any number of &lt;strong&gt;systemuser&lt;/strong&gt;, &lt;strong&gt;contact&lt;/strong&gt;, &lt;strong&gt;account&lt;/strong&gt; and &lt;strong&gt;lead&lt;/strong&gt; entities to be related to an activity.&lt;/li&gt;    &lt;li&gt;The &lt;font color="#0080c0"&gt;&lt;strong&gt;SetStatePhoneCallRequest&lt;/strong&gt;&lt;/font&gt; to set the state of the &lt;strong&gt;phonecall&lt;/strong&gt; to completed. The &lt;font color="#0080c0"&gt;&lt;strong&gt;PhoneCallStatus&lt;/strong&gt; &lt;/font&gt;of 2 for outgoing. You can refer to the following link for this and find other state enumerations required to set the state and status of all entities. &lt;a href="http://msdn.microsoft.com/en-us/library/bb959340.aspx" target="_blank"&gt;Link to MSDN PhoneCallState Enumeration&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;I use the CRM SDK CrmTypes and other Enumeration helpers. They come in handy so why not?&lt;/li&gt; &lt;/ul&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 800px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; white-space: nowrap; background-color: #f4f4f4"&gt;   &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 1000px; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;var newphoneCall = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; phonecall
  {
      ownerid = CrmTypes.CreateOwner(EntityName.systemuser.ToString(), activityOwnerId),
      from = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt;[]
          {
              &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; activityparty
                  {
                      participationtypemask = CrmTypes.CreatePicklist(ActivityPartyType.Sender),
                      partyid = CrmTypes.CreateLookup(EntityName.systemuser.ToString(), activityOwnerId)
                  }
          },
      subject = subject,
      description = description,
      regardingobjectid = (matchedContact) ? CrmTypes.CreateLookup(EntityName.contact.ToString(), relatedContactId) : &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;,
      to =  (!matchedContact)? &lt;span style="color: #0000ff"&gt;null&lt;/span&gt; : &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; []
         {
            &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; activityparty
              {
                  participationtypemask = CrmTypes.CreatePicklist(ActivityPartyType.ToRecipient),
                  partyid = CrmTypes.CreateLookup(EntityName.contact.ToString(), relatedContactId)
              }
         },
      scheduledstart = CrmTypes.CreateCrmDateTime(Convert.ToDateTime(scheduledStart).ToShortDateString()),
      actualstart = CrmTypes.CreateCrmDateTime(Convert.ToDateTime(scheduledStart).ToShortDateString()),
      scheduledend = CrmTypes.CreateCrmDateTime(Convert.ToDateTime(scheduledEnd).ToShortDateString()),
      actualend = (isComplete) ? CrmTypes.CreateCrmDateTime(Convert.ToDateTime(scheduledEnd).ToShortDateString()) : &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;,
  };

&lt;span style="color: #0000ff"&gt;try&lt;/span&gt;
  {
      Guid phonecallId = service.Create(newphoneCall);

      &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (isComplete)
      {
          var request = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SetStatePhoneCallRequest
              {
                  EntityId = phonecallId,
                   PhoneCallState = PhoneCallState.Completed,
                   PhoneCallStatus = 2
              };

          &lt;span style="color: #0000ff"&gt;try&lt;/span&gt;
          {
              service.Execute(request);
          }

          &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (SoapException ex)
          {
              &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; errormsg = String.Format(&lt;span style="color: #006080"&gt;&amp;quot;Update Error Setting PhoneCall State to Complete error {0}&amp;quot;&lt;/span&gt;, ex.Detail.InnerText);
              WriteErrorFile(errormsg);
          }
      }

  }
&lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (SoapException ex)
   {
       &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; errormsg = String.Format(&lt;span style="color: #006080"&gt;&amp;quot;Write Error for PhoneCall {0} error {1}&amp;quot;&lt;/span&gt;, row[(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;) tblCal.ACTVCODE], ex.Detail.InnerText);
       WriteErrorFile(errormsg);
   }&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Next: &lt;/strong&gt; My next post will cover importing files into CRM in the form of &lt;strong&gt;annotations&lt;/strong&gt; and &lt;strong&gt;activitymimeattachments&lt;/strong&gt; as well as mimeTypes, and CRM file size limitations and their configuration. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3101394961765670978-4675424686779582147?l=crmscape.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmscape.blogspot.com/feeds/4675424686779582147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3101394961765670978&amp;postID=4675424686779582147' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/4675424686779582147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3101394961765670978/posts/default/4675424686779582147'/><link rel='alternate' type='text/html' href='http://crmscape.blogspot.com/2008/10/crm-40-creating-activities.html' title='CRM 4.0 Creating Activities'/><author><name>Mark Kovalcson</name><uri>http://www.blogger.com/profile/05363028899186950966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_pTy2xto-ivU/SLfwvTh0IaI/AAAAAAAAAEQ/1NXLK2yyiZk/S220/BlogSized.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3101394961765670978.post-6308701450287770050</id><published>2008-10-06T16:44:00.001-04:00</published><updated>2008-10-27T09:59:31.373-04:00</updated><title type='text'>MS CRM Data Import (Cleaning up the Mess)</title><content type='html'>&lt;div&gt;&amp;#160;&lt;/div&gt;  &lt;p&gt;Before importing data into CRM it, I think it is important to know how to get it back out, how long it will take to get it back out, or how to get back to a clean state.&lt;/p&gt;  &lt;p&gt;Why is that?&lt;/p&gt;  &lt;p&gt;1. &lt;strong&gt;Time Estimation!&lt;/strong&gt;&amp;#160; Creating a CRM record is FAST. Deleting a CRM record can be VERY slow!&amp;#160; There is a reason for this. When you create a new Account, there is a new record added to a Base and Extension base table. That's pretty simple! When you delete an Account, CRM checks for all of the dependencies and potentially deletes a number of child records in other tables, verifies that there are no records that restrict the deletion of a parent and finally deletes the Account.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;To drive this home, using my import fr
