<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Microsoft Dynamics CRM UK Blog</title><link>http://blogs.msdn.com/b/ukcrm/</link><description>CRM news and views from Simon Hutson</description><dc:language>en-US</dc:language><generator>Telligent Community 5.6.583.20496 (Build: 5.6.583.20496)</generator><item><title>CRM Online Discovery Web Service Changes For Office 365</title><link>http://blogs.msdn.com/b/ukcrm/archive/2012/01/18/crm-online-discovery-web-service-changes-for-office-365.aspx</link><pubDate>Wed, 18 Jan 2012 17:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10258133</guid><dc:creator>Simon Hutson</dc:creator><slash:comments>0</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/ukcrm/commentapi.aspx?WeblogPostID=10258133</wfw:comment><comments>http://blogs.msdn.com/b/ukcrm/archive/2012/01/18/crm-online-discovery-web-service-changes-for-office-365.aspx#comments</comments><description>&lt;p&gt;The Wind Blew Them All Away&amp;hellip;&lt;/p&gt;
&lt;p&gt;I was just browsing through the CRM SDK when I spotted a change that will affect you if you develop applications that connect to the CRM Online web services.&lt;/p&gt;
&lt;p&gt;The Discovery web service is used by applications to determine the organisations that a user is a member of, and the URL to access the CRM web service for each of those organisations. All a developer needs to know is the address of the Discovery Service, and this will provide them everything they need to know to connect to the correct CRM Online organisation.&lt;/p&gt;
&lt;p&gt;Now that we have a second CRM Online environment, running on the Microsoft Online Portal (MOP) administration, billing and provisioning platform, we also have a new set of URLs for the Discovery service (depending on which region you are in).&lt;/p&gt;
&lt;p&gt;Full details can be found in the SDK here - &lt;a title="Discover the URL for Your Organization with IDiscoveryService Web Service" href="http://msdn.microsoft.com/library/gg328127.aspx" target="_blank"&gt;Discover the URL for Your Organization with IDiscoveryService Web Service&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/p&gt;
&lt;p&gt;&lt;a style="color: #ffffff; font-size: 6px;" title="The Chain Gang. Berkshire's leading live Soul, Funk, Disco and Motown function band" href="http://www.chaingangreading.com/" target="_blank"&gt;The Chain Gang&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10258133" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+Online/">CRM Online</category></item><item><title>Provisioning CRM Online Via The Office 365 Microsoft Online Portal</title><link>http://blogs.msdn.com/b/ukcrm/archive/2012/01/09/provisioning-crm-online-via-the-office-365-microsoft-online-portal.aspx</link><pubDate>Mon, 09 Jan 2012 15:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10254593</guid><dc:creator>Simon Hutson</dc:creator><slash:comments>0</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/ukcrm/commentapi.aspx?WeblogPostID=10254593</wfw:comment><comments>http://blogs.msdn.com/b/ukcrm/archive/2012/01/09/provisioning-crm-online-via-the-office-365-microsoft-online-portal.aspx#comments</comments><description>&lt;p&gt;War At 33 1/3&amp;hellip;&lt;/p&gt;
&lt;p&gt;Just before Christmas, I helped one of my customers sign up and purchase a small CRM Online development environment for their project starting in the new year. As I mentioned in a &lt;a title="CRM Online Now Live On OSDP" href="http://blogs.msdn.com/b/ukcrm/archive/2011/12/14/crm-online-now-live-on-osdp.aspx" target="_blank"&gt;previous post&lt;/a&gt;, customer 30-day trials are not yet up and running on the new Microsoft Online Portal (MOP)administration, billing &amp;amp; provisioning platform, but for new customer purchases by credit card or invoice, you can use the following URL to sign-up for an account with CRM Online already loaded into your shopping cart: &lt;a title="Purchase CRM Online" href="https://portal.microsoftonline.com/Signup/MainSignUp.aspx?OfferId=E778C9B9-48BE-4a95-A2D9-AA43F828ED0C&amp;amp;dl=CRMSTANDARD" target="_blank"&gt;https://portal.microsoftonline.com/Signup/MainSignUp.aspx?OfferId=E778C9B9-48BE-4a95-A2D9-AA43F828ED0C&amp;amp;dl=CRMSTANDARD&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you already have a MOP account for Office 365, then you should not use this URL as CRM Online will already be available for you to purchase from your list of available subscriptions.&lt;/p&gt;
&lt;p&gt;Anyhow, back to the sign-up process. Clicking on the link takes you a sign-up page where you need to fill in a few details. The most important choices are the &amp;ldquo;Organisation Name&amp;rdquo; and &amp;ldquo;Domain Name&amp;rdquo;. Once created, you will not be able to change these, so make sure you choose carefully.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/2352.CRM_2D00_Online_2D00_OSDP_2D00_Signup_5F00_46E78C74.png" target="_blank"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="CRM Online OSDP Signup" border="0" alt="CRM Online OSDP Signup" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/0724.CRM_2D00_Online_2D00_OSDP_2D00_Signup_5F00_thumb_5F00_6B98A3EB.png" width="504" height="379" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The new user ID you create as part of the sign-up process will be assigned the global administrator role within MOP, so it is important that you make sure you select a strong password, and that access to this user is restricted within your organisation. You can of course create multiple administrators, and MOP provides several different administrator roles so that you can be quite granular in the permissions you assign:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Global Administrator&lt;/li&gt;
&lt;li&gt;Billing Administrator&lt;/li&gt;
&lt;li&gt;User Management Administrator&lt;/li&gt;
&lt;li&gt;Password Administrator&lt;/li&gt;
&lt;li&gt;Service Administrator&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can find a full definition of each role is available here - &lt;a title="http://onlinehelp.microsoft.com/en-us/office365-enterprises/ff637584.aspx" href="http://onlinehelp.microsoft.com/en-us/office365-enterprises/ff637584.aspx" target="_blank"&gt;http://onlinehelp.microsoft.com/en-us/office365-enterprises/ff637584.aspx&lt;/a&gt;. I recommend you spend some time understanding this so that you have the correct number of users assigned to each role. At the very least, you are probably going to want to have two Global Administrators (in case you lose/forget one of the passwords), plus a handful of User Management Administrators and Password Administrators.&lt;/p&gt;
&lt;p&gt;Anyway, back to my customer. After spending a couple of minutes signing up and logging in to &lt;a title="Microsoft Online Portal" href="https://portal.microsoftonline.com" target="_blank"&gt;https://portal.microsoftonline.com&lt;/a&gt; with our first Global Administrator user, we decided to create a second MOP user to be the CRM Online administrator, assigning them the Service Administrator role. Once done, we logged in as this new user and completed the CRM Online purchase. All went as expected, and within a few more minutes we received the familiar&amp;nbsp; message &amp;ldquo;Setting up Dynamics CRM Online&amp;hellip; this may take a few minutes&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/5584.CRM_2D00_Online_2D00_Setup_2D00_Issue_2D00_OSDP_5F00_7BC46BE4.png" target="_blank"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="CRM Online Setup Issue OSDP" border="0" alt="CRM Online Setup Issue OSDP" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/5504.CRM_2D00_Online_2D00_Setup_2D00_Issue_2D00_OSDP_5F00_thumb_5F00_728830A3.png" width="504" height="359" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So we waited, and waited, then waited some more. By this time it was Christmas, so we left it running only to find the same message when we returned in the New Year.&lt;/p&gt;
&lt;p&gt;After a quick call to Microsoft Support, it transpires that the user who purchases the CRM Online subscription must be assigned either a Billing or Global Administrator role in order for the provisioning process to complete. After making this change within MOP and waiting a little longer (not sure exactly how long&amp;nbsp;as I decided to go for some lunch), I returned to find CRM Online up and running. I guess this is the kind of &amp;ldquo;teething trouble&amp;rdquo; you get when you are on the cutting-edge of CRM&amp;nbsp;technology.&lt;/p&gt;
&lt;p&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/p&gt;
&lt;p&gt;&lt;a style="color: #ffffff; font-size: 6px;" title="The Chain Gang. Berkshire's leading live Soul, Funk, Disco and Motown function band" href="http://www.chaingangreading.com/" target="_blank"&gt;The Chain Gang&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10254593" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+Online/">CRM Online</category></item><item><title>Bulk Creating Windows Live IDs</title><link>http://blogs.msdn.com/b/ukcrm/archive/2012/01/06/bulk-creating-windows-live-ids.aspx</link><pubDate>Fri, 06 Jan 2012 16:25:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10254018</guid><dc:creator>Simon Hutson</dc:creator><slash:comments>0</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/ukcrm/commentapi.aspx?WeblogPostID=10254018</wfw:comment><comments>http://blogs.msdn.com/b/ukcrm/archive/2012/01/06/bulk-creating-windows-live-ids.aspx#comments</comments><description>&lt;p&gt;Bring The Noise&amp;hellip;&lt;/p&gt;
&lt;p&gt;As I mentioned in a &lt;a title="CRM Online Now Live On OSDP" href="http://blogs.msdn.com/b/ukcrm/archive/2011/12/14/crm-online-now-live-on-osdp.aspx" target="_blank"&gt;previous post&lt;/a&gt;, for the time being we will be running CRM Online on both the Windows Live (CTP) and the Office 365 (OSDP) administration, billing &amp;amp; provisioning platforms. If you are currently running CRM Online using Windows Live IDs for your users, the chances are that you have run into the issue where you can&amp;rsquo;t create more than 3 Windows Live IDs per day using the same IP address. This limit was originally put in place as a measure to prevent unscrupulous folks from creating large numbers of &amp;ldquo;spam&amp;rdquo; mailboxes, but has proved frustrating for legitimate CRM Online customers.&lt;/p&gt;
&lt;p&gt;The good news is that there is now a simple way for you to &amp;ldquo;whitelist&amp;rdquo; your company&amp;rsquo;s IP address(es), which will allow you to bulk-create your Windows Live IDs. Simply complete the &lt;a title="Windows Live ID IP Whitelisting Form" href="https://support.live.com/eform.aspx?productKey=wlidipexc&amp;amp;ct=eformts&amp;amp;st=1&amp;amp;wfxredirect=1" target="_blank"&gt;IP Whitelisting Form&lt;/a&gt; with as many details as possible, and your request will be automatically submitted to our Windows Live ID escalations team.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/5483.Picture1_5F00_01691358.png" target="_blank"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="Picture1" border="0" alt="Picture1" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/6646.Picture1_5F00_thumb_5F00_2D396747.png" width="504" height="379" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/p&gt;
&lt;p&gt;&lt;a style="color: #ffffff; font-size: 6px;" title="The Chain Gang. Berkshire's leading live Soul, Funk, Disco and Motown function band" href="http://www.chaingangreading.com/" target="_blank"&gt;The Chain Gang&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10254018" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+Online/">CRM Online</category></item><item><title>Introductions</title><link>http://blogs.msdn.com/b/ukcrm/archive/2011/12/28/introductions.aspx</link><pubDate>Wed, 28 Dec 2011 11:05:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10251462</guid><dc:creator>M. Amoedo</dc:creator><slash:comments>1</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/ukcrm/commentapi.aspx?WeblogPostID=10251462</wfw:comment><comments>http://blogs.msdn.com/b/ukcrm/archive/2011/12/28/introductions.aspx#comments</comments><description>&lt;p&gt;Hi everyone! My name is Marco Amoedo and I am the new CRM Partner Technology Advisor in the UK. My role as part of the UK Dynamics Team is to evangelise and ensure the technical enablement of Microsoft Dynamics CRM partners. My colleague Simon has invited me to his blog so I can use this forum to share with you more information regarding the readiness activities we are planning as well as some technical titbits from time to time. &lt;/p&gt;  &lt;p&gt;I am looking forward to posting some of the draft ideas that I have collected on my notes over the last few months. In the meantime, I wish you all a Merry Christmas and a Happy New Year. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/6283.promo_2D00_price_5F00_2182F28D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="promo price" border="0" alt="promo price" align="right" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/2260.promo_2D00_price_5F00_thumb_5F00_757A0538.jpg" width="325" height="106" /&gt;&lt;/a&gt;Remember that the introductory price for Microsoft Dynamics CRM Online of £22.95 per user/month for the 12 month contract is ending on the 31&lt;sup&gt;st&lt;/sup&gt;. The price will revert to the standard price of £29.50. Customers signing up users for CRM Online prior to Dec 31st those users will receive the introductory rate for the remainder of the 12 month contract. Additionally, if they add any further users to that same contract after Dec 31st those additional users will ALSO receive the same introductory rate (only for credit card or invoicing customers, the enterprise agreements work differently).&lt;/p&gt;  &lt;p&gt;In other words, if you are considering buying CRM Online don’t wait till the New Year, sign up &lt;b&gt;NOW&lt;/b&gt; (even if it is just one user) and lock the introductory price for the next 12 months. This can save you more than £1,000 on a 15 user deployment.&lt;/p&gt;  &lt;p&gt;Happy New Year!&lt;/p&gt;  &lt;p&gt;Marco Amoedo&lt;/p&gt;  &lt;p&gt;&lt;em&gt;This posting is provided &amp;quot;AS IS&amp;quot; with no warranties, and confers no rights.&lt;/em&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10251462" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/Off+Topic/">Off Topic</category><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+Online/">CRM Online</category></item><item><title>CRM Online Invoice Payment Option</title><link>http://blogs.msdn.com/b/ukcrm/archive/2011/12/20/crm-online-invoice-payment-option.aspx</link><pubDate>Tue, 20 Dec 2011 08:27:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10249493</guid><dc:creator>Simon Hutson</dc:creator><slash:comments>2</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/ukcrm/commentapi.aspx?WeblogPostID=10249493</wfw:comment><comments>http://blogs.msdn.com/b/ukcrm/archive/2011/12/20/crm-online-invoice-payment-option.aspx#comments</comments><description>&lt;p&gt;Who Stole The Soul&amp;hellip;&lt;/p&gt;
&lt;p&gt;With the move to the new Microsoft Online Portal (MOP) administration, billing and provisioning platform, purchasing CRM Online (and Office 365) services has become much easier. We still have the same three payment options, Credit Card, Invoice and Volume Licensing, but unlike the previous Windows Live (CTP) &lt;a title="Microsoft Dynamics CRM Online Payment Options" href="http://crm.dynamics.com/payment-options" target="_blank"&gt;options&lt;/a&gt; we don&amp;rsquo;t make you jump through hoops if you want to set up something as simple as paying by invoice.&lt;/p&gt;
&lt;p&gt;Simply log into your Microsoft Online Portal (MOP) at &lt;a href="https://portal.microsoftonline.com" target="_blank"&gt;https://portal.microsoftonline.com&lt;/a&gt;, selecting Purchase from the Subscriptions tab. Add the Microsoft Dynamics CRM Online Professional plan to your shopping cart and select the number of user licenses you wish to purchase.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/5657.1_5F00_5150649E.png" target="_blank"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" title="Adding CRM Online To MOP Shopping Cart" alt="Adding CRM Online To MOP Shopping Cart" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/4062.1_5F00_thumb_5F00_5E9A15DA.png" width="504" height="379" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Once you proceed to the checkout, you will be taken through a very simple wizard to complete your purchase. The first page allows you to enter company information, including you VAT Registration Number if you have one (I guess this is UK specific and will change depending on which country you are in).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/8741.3_5F00_07750517.png" target="_blank"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" title="CRM Online Purchasing Company Details" alt="CRM Online Purchasing Company Details" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/8311.3_5F00_thumb_5F00_299CEAD0.png" width="504" height="379" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you are working with a Microsoft Dynamics CRM implementation partner, you can add their partner ID to your order. Although this step is optional and has no impact on your order, this information helps us understand which of our partners are doing great work with our online customers. You can always change this in future (for example, if you choose to work with another partner), so please, please, please do take the time to fill this in.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/8080.3a_5F00_602A9614.png" target="_blank"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" title="CRM Online Partner Information" alt="CRM Online Partner Information" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/2021.3a_5F00_thumb_5F00_22015596.png" width="504" height="379" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Next you can choose either monthly payments (credit card only) or pay for the full year (both credit card and invoice). For higher-value, invoice purchases we have a credit-check process that usually takes 2-to-3 working days to approve before you can access your CRM Online subscription. However for lower-value purchases, approval should be instantaneous.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/7140.4_5F00_20ED3E67.png" target="_blank"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" title="CRM Online Payment Options" alt="CRM Online Payment Options" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/6052.4_5F00_thumb_5F00_750CC4AA.png" width="504" height="379" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Finally, after signing the &lt;a title="Microsoft Online Subscription Agreement (MOSA)" href="http://www.microsoft.com/online/mosa.aspx" target="_blank"&gt;legal agreement&lt;/a&gt; and confirming your purchase, you are ready to go. I&amp;rsquo;m sure you will agree, this is a very straightforward and easy to understand process, which enables you to purchase CRM Online (and Office 365) with confidence.&lt;/p&gt;
&lt;p&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/p&gt;
&lt;p&gt;&lt;a style="color: #ffffff; font-size: 6px;" href="http://www.laughingboy.net/"&gt;Laughing Boy&lt;/a&gt; &lt;a style="color: #ffffff; font-size: 6px;" href="http://www.chestnutspreschool.co.uk/"&gt;Chestnuts Pre-School&lt;/a&gt; &lt;a style="color: #ffffff; font-size: 6px;" href="http://www.chaingangreading.com/"&gt;Chain Gang&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10249493" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+Online/">CRM Online</category></item><item><title>CRM Online Bulk User Management</title><link>http://blogs.msdn.com/b/ukcrm/archive/2011/12/14/crm-online-bulk-user-management.aspx</link><pubDate>Wed, 14 Dec 2011 23:55:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10247868</guid><dc:creator>Simon Hutson</dc:creator><slash:comments>2</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/ukcrm/commentapi.aspx?WeblogPostID=10247868</wfw:comment><comments>http://blogs.msdn.com/b/ukcrm/archive/2011/12/14/crm-online-bulk-user-management.aspx#comments</comments><description>&lt;p&gt;I Ain&amp;rsquo;t Mad At All&amp;hellip;&lt;/p&gt;
&lt;p&gt;In my &lt;a title="CRM Online Now Live On OSDP" href="http://blogs.msdn.com/b/ukcrm/archive/2011/12/14/crm-online-now-live-on-osdp.aspx" target="_blank"&gt;previous post&lt;/a&gt; I talked about CRM Online moving to the same administration, billing and provisioning platform used by Office 365. One of the many benefits is the ability for administrators to manage user accounts in bulk, rather than having to rely on end-users setting up their own Windows Live IDs.&lt;/p&gt;
&lt;p&gt;The Microsoft Online Portal (MOP) at &lt;a href="https://portal.microsoftonline.com"&gt;https://portal.microsoftonline.com&lt;/a&gt; provides three different ways of managing user accounts:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Standalone User Accounts &amp;ndash; Administrators can create new user accounts, typically using the format &lt;strong&gt;&amp;lt;username&amp;gt;@&amp;lt;orgname&amp;gt;.onmicrosoft.com&lt;/strong&gt;. Administrators can create users, manage which services they have access to, as well as resetting passwords and updating contact information.&lt;/li&gt;
&lt;li&gt;Synchronised User Accounts &amp;ndash; Using the &lt;a title="Microsoft Online Services Directory Synchronisation Tool" href="http://www.microsoft.com/download/en/details.aspx?id=5535" target="_blank"&gt;Microsoft Online Services Directory Synchronisation Tool&lt;/a&gt;, user accounts from your in-house Active Directory can be synchronised into MOP. Users will only have to remember a single user id, however in reality there are actually two separate accounts, each with different passwords.&lt;/li&gt;
&lt;li&gt;Synchronised User Accounts + Federated Authentication &amp;ndash; Using the synchronisation tool described previously, and deploying Microsoft &lt;a title="Active Directory Federation Services (AD FS) 2.0" href="http://technet.microsoft.com/library/adfs2.aspx" target="_blank"&gt;Active Directory Federation Services (AD FS) 2.0&lt;/a&gt; inside your in-house network, users can log on with their Active Directory passwords rather than storing separate passwords within MOP.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As you can see, this is a pretty comprehensive set of options. In order to make my life easier for demos, I decided to stick with option 1 and set up a number of standalone user accounts. MOP provides a bulk user creation option as shown below&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/3857.Picture1_5F00_1A025D20.png" target="_blank"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" title="Start MOP Bulk User Add Wizard" alt="Start MOP Bulk User Add Wizard" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/6746.Picture1_5F00_thumb_5F00_2E6F5ED3.png" width="504" height="379" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This starts a wizard which steps you through the process of bulk creating new users. First of all I downloaded the new user template and used it to create a .csv file containing the list of the user accounts I wanted to create.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/0358.Picture2_5F00_55E62B3D.png" target="_blank"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" title="Use Excel Template To Create Users" alt="Use Excel Template To Create Users" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/8360.Picture2_5F00_thumb_5F00_5D6174DD.png" width="504" height="379" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Once the .csv file is uploaded, you can select which online services you want these user to access. As you can see, this includes CRM Online as well as the various Office 365 services.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/1805.Picture3_5F00_7F1D27A1.png" target="_blank"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" title="Assign CRM Online And Office 365 Services To Users" alt="Assign CRM Online And Office 365 Services To Users" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/5518.Picture3_5F00_thumb_5F00_72EB87AD.png" width="504" height="379" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Once the wizard has completed, you can log into CRM Online and administer the new users in the usual way.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/6254.Picture5_5F00_444558FE.png" target="_blank"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" title="Administer New CRM Online User InThe Usual Way" alt="Administer New CRM Online User InThe Usual Way" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/8473.Picture5_5F00_thumb_5F00_0F28A401.png" width="504" height="379" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There you have it. MOP provides an extremely simple and scalable platform for managing users, which is particularly important for customers with more than a handful of CRM users.&lt;/p&gt;
&lt;p&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/p&gt;
&lt;p&gt;&lt;a style="color: #ffffff; font-size: 6px;" href="http://www.laughingboy.net/"&gt;Laughing Boy&lt;/a&gt; &lt;a style="color: #ffffff; font-size: 6px;" href="http://www.chestnutspreschool.co.uk/"&gt;Chestnuts Pre-School&lt;/a&gt; &lt;a style="color: #ffffff; font-size: 6px;" href="http://www.chaingangreading.com/"&gt;Chain Gang&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10247868" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+Online/">CRM Online</category></item><item><title>CRM Online Now Live On OSDP</title><link>http://blogs.msdn.com/b/ukcrm/archive/2011/12/14/crm-online-now-live-on-osdp.aspx</link><pubDate>Wed, 14 Dec 2011 00:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10247400</guid><dc:creator>Simon Hutson</dc:creator><slash:comments>0</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/ukcrm/commentapi.aspx?WeblogPostID=10247400</wfw:comment><comments>http://blogs.msdn.com/b/ukcrm/archive/2011/12/14/crm-online-now-live-on-osdp.aspx#comments</comments><description>&lt;p&gt;Aintnuttin Buttersong&amp;hellip;&lt;/p&gt;
&lt;p&gt;Earlier this year we &lt;a title="The Microsoft Dynamics CRM Blog" href="http://blogs.msdn.com/b/crm/archive/2011/10/19/microsoft-dynamics-crm-the-road-ahead.aspx" target="_blank"&gt;announced&lt;/a&gt; that Microsoft Dynamics CRM online would move from the CTP (Commerce Transaction Platform) administration, billing &amp;amp; provisioning platform to OSDP (Online Services Delivery Platform) used by Office 365. Well I&amp;rsquo;m pleased to say that as of yesterday CRM Online is now live on the OSDP platform in all three territories NA/LATAM, EMEA &amp;amp; APAC.&lt;/p&gt;
&lt;p&gt;So what does this mean for customers and partners? Well, for the time being you probably won&amp;rsquo;t notice any changes since CTP and OSDP will run in parallel. For example, anyone signing up for a free &lt;a title="Microsoft Dynamics CRM 30-Day Trial" href="http://crm.dynamics.com" target="_blank"&gt;30-day trial&lt;/a&gt; will continue to access CRM on the CTP platform. However, for anyone making a new purchase via a volume licensing agreement (such as an EA or Select) will access CRM on the OSDP platform.&lt;/p&gt;
&lt;p&gt;Having just received my internal OSDP trial license today, I will be exploring the capabilities of running both CRM Online &amp;amp; Office 365 from the same platform, and I will report my findings in future blog posts.&lt;/p&gt;
&lt;p align="center"&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/6165.image_5F00_5BE7F5DD.png" target="_blank"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/7167.image_5F00_thumb_5F00_6A827BF5.png" width="504" height="379" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/p&gt;
&lt;p&gt;&lt;a style="color: #ffffff; font-size: 6px;" href="http://www.laughingboy.net/"&gt;Laughing Boy&lt;/a&gt; &lt;a style="color: #ffffff; font-size: 6px;" href="http://www.chestnutspreschool.co.uk/"&gt;Chestnuts Pre-School&lt;/a&gt; &lt;a style="color: #ffffff; font-size: 6px;" href="http://www.chaingangreading.com/"&gt;Chain Gang&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10247400" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+Online/">CRM Online</category></item><item><title>Plug-Ins For Calculated Fields</title><link>http://blogs.msdn.com/b/ukcrm/archive/2011/12/13/plug-ins-for-calculated-fields.aspx</link><pubDate>Tue, 13 Dec 2011 18:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10247291</guid><dc:creator>Simon Hutson</dc:creator><slash:comments>1</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/ukcrm/commentapi.aspx?WeblogPostID=10247291</wfw:comment><comments>http://blogs.msdn.com/b/ukcrm/archive/2011/12/13/plug-ins-for-calculated-fields.aspx#comments</comments><description>&lt;p&gt;Boom, Shake The Room&amp;hellip;&lt;/p&gt;
&lt;p&gt;It has been all go here in the UK CRM Enterprise Sales team, so I haven&amp;rsquo;t had any time to post regularly. Today, one of my Banking solutions partners called me for some help with one of their deals. They have an important client demo to deliver later this week, and are running out of time to build all the Dynamics CRM 2011 components they need.&lt;/p&gt;
&lt;p&gt;They asked if I could help by building a plug-in that would execute whenever an Opportunity was updated and calculate a new Weighted Est. Revenue field by multiplying the standard Est. Revenue and Probability fields. Always one for a challenge, I set myself the goal of building, testing and creating a solution package within a couple of hours, which I managed with time to spare.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/7455.image_5F00_777C1694.png" target="_blank"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/8422.image_5F00_thumb_5F00_234C6A84.png" width="504" height="379" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you want to try this out, I have packaged up my solution as an unmanaged solution package, and made it available for download (along with the source code for the plug-in) &lt;a title="here" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-24-72-91/WeightedEstimatedRevenue.zip" target="_blank"&gt;here&lt;/a&gt;. The solution package contains the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A modified Opportunity entity containing a new "Weighted Est. Revenue" currency field.&lt;/li&gt;
&lt;li&gt;A new Opportunity form, containing this new field - I have not updated any of the out-of-the-box forms, so this won&amp;rsquo;t overwrite any customisations you have made to the Opportunity entity.&lt;/li&gt;
&lt;li&gt;A plug-in to handle the Create and Update events on the Opportunity entity.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Don&amp;rsquo;t forget, you need to extract the solution package .zip from the download .zip file before you can import it into CRM 2011 or CRM Online.&lt;/p&gt;
&lt;p&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/p&gt;
&lt;p&gt;&lt;a style="color: #ffffff; font-size: 6px;" href="http://www.laughingboy.net/"&gt;Laughing Boy&lt;/a&gt; &lt;a style="color: #ffffff; font-size: 6px;" href="http://www.chestnutspreschool.co.uk/"&gt;Chestnuts Pre-School&lt;/a&gt; &lt;a style="color: #ffffff; font-size: 6px;" href="http://www.chaingangreading.com/"&gt;Chain Gang&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10247291" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-24-72-91/WeightedEstimatedRevenue.zip" length="214586" type="application/zip" /><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/Plug_2D00_Ins/">Plug-Ins</category><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+2011/">CRM 2011</category><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+Online/">CRM Online</category><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/C_2300_/">C#</category></item><item><title>Building Silverlight Apps For CRM</title><link>http://blogs.msdn.com/b/ukcrm/archive/2011/10/04/building-silverlight-apps-for-crm.aspx</link><pubDate>Tue, 04 Oct 2011 22:39:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10220076</guid><dc:creator>Simon Hutson</dc:creator><slash:comments>5</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/ukcrm/commentapi.aspx?WeblogPostID=10220076</wfw:comment><comments>http://blogs.msdn.com/b/ukcrm/archive/2011/10/04/building-silverlight-apps-for-crm.aspx#comments</comments><description>&lt;p&gt;Get Down On It&amp;hellip;&lt;/p&gt;
&lt;p&gt;Although I have posted several CRM code-samples on my blog, I don&amp;rsquo;t think of myself as a particularly expressive or creative developer. Sure, I can code a plug-in in VB (and more recently C#), or knock out the occasional JScript library, but I struggle to use design &lt;a title="Microsoft Patterns &amp;amp; Practices" href="http://msdn.microsoft.com/practices" target="_blank"&gt;patterns &amp;amp; practices&lt;/a&gt; to ensure the clean separation and testability of code required in production environments. Luckily my role is in pre-sales, and it is usually somebody else's responsibility to make sure any code is &amp;ldquo;Production-Ready&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;One of the biggest gaps in my knowledge is how to build user interface (UI) components that extend the out-of-the-box CRM forms. With CRM 2011 we introduced the concept of &lt;a title="Web Resources for Microsoft Dynamics CRM" href="http://msdn.microsoft.com/en-us/library/gg309473.aspx" target="_blank"&gt;web resources&lt;/a&gt;, that allow you to integrate Html, JScript and Silverlight components directly into CRM. However, that still leaves me with the big problem of actually writing the UI code.&lt;/p&gt;
&lt;p&gt;A couple of weeks ago, I built a Broker Management demo for a prospect in the Insurance industry. They had a simple requirement along the following lines:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;When a business manager (user) books an appointment with a particular broker, they may also want to book other appointments with nearby brokers to maximise their time in the local area.&lt;/li&gt;
&lt;li&gt;For the broker they are visiting, they wanted to open the broker (account) CRM record and see a map showing the other nearest brokers within a pre-defined radius.&lt;/li&gt;
&lt;li&gt;From the map, they wanted to be able to click on a nearby broker, open up the CRM record for that broker and book an appointment.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/1667.image_5F00_625376FC.png" target="_blank"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/3487.image_5F00_thumb_5F00_7941AC9E.png" width="504" height="379" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This scenario is a perfect candidate for using Microsoft Silverlight, and a quick search for &amp;ldquo;&lt;a title="Bing Search" href="http://letmebingthatforyou.com/?q=CRM%202011%20Silverlight%20Map" target="_blank"&gt;CRM 2011 Silverlight Map&lt;/a&gt;&amp;rdquo; brings up many different examples, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a title="Codeplex: Bing Map Browser for Microsoft Dynamics CRM 2011" href="http://mapsforcrm2011.codeplex.com/" target="_blank"&gt;Codeplex: Bing Map Browser for Microsoft Dynamics CRM 2011&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a title="Planet xRM: Maps for CRM" href="http://www.planetxrm.com/apps/maps-for-crm/" target="_blank"&gt;Planet xRM: Maps for CRM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a title="Mando Group: Silverlight CRM Dashboard" href="http://labs.mandogroup.com/silverlight-crm-dashboard/" target="_blank"&gt;Mando Group: Silverlight CRM Dashboard&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The problem was that none of the examples did "exactly&amp;rdquo; what I needed, so I took a look at the source code for some of the examples and came up with my own variation on the theme using the &lt;a title="Bing Maps Silverlight Control" href="http://msdn.microsoft.com/library/ee681884.aspx" target="_blank"&gt;Bing Maps Silverlight control&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Using Plug-Ins For Some &amp;ldquo;Heavy Lifting&amp;rdquo;&lt;/h3&gt;
&lt;p&gt;Before I could begin building the Silverlight UI I needed a way to calculate Latitude and Longitude values for an address. Now I could do this within the Silverlight code itself, but the problem comes when trying to calculate the nearest set of accounts when you have thousands of account records. This is not something you really want to do in &amp;ldquo;real-time&amp;rdquo; in the UI. Instead, I opted to build a plug-in that would call the &lt;a title="Bing Maps Web Services" href="http://msdn.microsoft.com/library/cc980922.aspx" target="_blank"&gt;Bing Maps Web Services&lt;/a&gt; every time I created or updated an account address.&lt;/p&gt;
&lt;p&gt;As is my usual &amp;ldquo;best practice&amp;rdquo;, I chose to implement an Asynchronous, Post-Event plug-in that would trigger every time an account was created or whenever and account address field was updated. The &lt;a title="Bing Maps Geocode Service" href="http://msdn.microsoft.com/library/cc981066.aspx" target="_blank"&gt;Geocode Web Service&lt;/a&gt; allows you to submit a postal address, and will return Latitude and Longitude values, and my plug-in writes these to the account entity address fields.&lt;/p&gt;
&lt;p&gt;Now that I have this geocode information stored in the CRM database, I am able to retrieve and sort quickly and efficiently inside my Silverlight app, without having to make additional, expensive, and (relatively) slow web service calls to Bing Maps every time the app is run.&lt;/p&gt;
&lt;h3&gt;&lt;/h3&gt;
&lt;h3&gt;Initial Silverlight Design&lt;/h3&gt;
&lt;p&gt;As this was my first attempt as using Silverlight in earnest, I tried to apply my knowledge of developing other types of CRM components (such as plug-ins and custom workflow activities) to this task. However, I quickly hit two problems.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;By default, Silverlight is not able to connect to the CRM SOAP service, but instead has to make use of the CRM REST service. Now this is all well and good, but I haven&amp;rsquo;t spent much time using REST, so this would be quite a steep learning curve. Luckily, the CRM 2011 SDK team has published an article on how to enable SOAP support: &lt;a title="Walkthrough: Use the SOAP Endpoint for Web Resources with Silverlight" href="http://msdn.microsoft.com/library/gg594452.aspx"&gt;Walkthrough: Use the SOAP Endpoint for Web Resources with Silverlight&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Silverlight only supports asynchronous web service calls. Now this one really does confuse me, as I have only really built synchronous, sequential code before. Now I have to write a method that calls a CRM web service, then write another &amp;ldquo;callback&amp;rdquo; method to handle the response on another thread. What happens when I need to make a web-service request, that depend on the results of a previous request on a different thread, and then update the UI which is running on yet another thread? Well, you quickly end up with &amp;ldquo;spaghetti&amp;rdquo; code, chaining together multiple methods and callbacks, and making life very difficult if you want to make minor changes, or if you need to have conditional branching.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;MVVM Comes To The Rescue&lt;/h3&gt;
&lt;p&gt;Although my code was working, I knew there had to be a better way to build Silverlight applications. After a few Bing searches, the term MVVM kept cropping up. &lt;a title="Wikipedia: MVVM" href="http://en.wikipedia.org/wiki/Model_View_ViewModel"&gt;MVVM&lt;/a&gt; (short for Model-View-ViewModel) is a design pattern, specifically developed to solve this class of problem.&lt;/p&gt;
&lt;p&gt;Now, I won&amp;rsquo;t go into detail here, but there is a great series of articles that helped me understand MVVM, which I encourage you to read - &lt;a title="How To Refactor And Build Better Microsoft Silverlight Applications" href="http://www.arrangeactassert.com/how-to-refactor-and-build-better-microsoft-silverlight-applications/" target="_blank"&gt;How To Refactor And Build Better Microsoft Silverlight Applications&lt;/a&gt;. Using this approach, I refactored my original design into different layers, one each for Views, Models and ViewModels, as shown in my Visual Studio project solution explorer&lt;/p&gt;
&lt;p&gt;&lt;img style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; margin-right: auto; margin-left: auto; display: block; background-image: none;" title="SilverLight MVVM Project" border="0" alt="SilverLight MVVM Project" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/2772.SilverLight_2D00_MVVM_2D00_Project_5F00_36BEE49B.png" width="385" height="449" /&gt;&lt;/p&gt;
&lt;p&gt;In addition, I also started to make use of a couple of other design patterns, such as the &lt;a title="Creating a Service Agent Class" href="http://msdn.microsoft.com/gg710789" target="_blank"&gt;Service Agent&lt;/a&gt; pattern for to handle instantiating the CRM WCF proxy object and calling the appropriate CRM operations. It&amp;rsquo;s still very much &amp;ldquo;work-in-progress&amp;rdquo;, but I definitely think I am on the right track, and I now have the confidence to start building even more Silverlight UI components for other scenarios.&lt;/p&gt;
&lt;h3&gt;Bringing It All Together&lt;/h3&gt;
&lt;p&gt;Just like in my previous postings, I have packaged up the solution components ready for you to try out. The solution package includes the following components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A Silverlight control that will work when placed on any account entity form.&lt;/li&gt;
&lt;li&gt;A plug-in to handle the Create and Update events for the account entity, and obtain latitude and longitude values for an address.&lt;/li&gt;
&lt;li&gt;A modified account entity containing a new form to contain the Silverlight control. I have not updated any of the out-of-the-box forms or views, so this won&amp;rsquo;t overwrite any other customisations.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In order for the solution to work correctly, you will need to sign-up to obtain a unique Bing Maps Developer Key&amp;nbsp; here - &lt;a href="http://www.bingmapsportal.com"&gt;http://www.bingmapsportal.com&lt;/a&gt;. This key is passed as a parameter to both the plug-in (using the &lt;a title="Walkthrough: Register a Plug-in using the Plug-in Registration Tool" href="http://msdn.microsoft.com/library/gg309580.aspx" target="_blank"&gt;plug-in registration tool&lt;/a&gt; in the CRM SDK), and the Silverlight control.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/2388.Bin_2D00_Maps_2D00_Plug_2D00_In_2D00_Registration_5F00_6A1AA7F7.png" target="_blank"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="Bin Maps Plug-In Registration" border="0" alt="Bin Maps Plug-In Registration" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/0211.Bin_2D00_Maps_2D00_Plug_2D00_In_2D00_Registration_5F00_thumb_5F00_1A617CAE.png" width="504" height="263" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In addition, the Silverlight control takes an additional parameter; the search radius (in miles) to use when locating nearby accounts.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/0218.Bin_2D00_Maps_2D00_Silverlight_2D00_Parameters_5F00_580E646A.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="Bin Maps Silverlight Parameters" border="0" alt="Bin Maps Silverlight Parameters" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/3438.Bin_2D00_Maps_2D00_Silverlight_2D00_Parameters_5F00_thumb_5F00_044AEB4F.png" width="490" height="725" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can download my solutions package (both managed and unmanaged), the source code for the plug-in and Silverlight control, as well as sample data with real UK addresses &lt;a title="here" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-22-00-76/Bing-Maps-Browser.zip" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/p&gt;
&lt;p&gt;&lt;a style="color: #ffffff; font-size: 6px;" href="http://www.laughingboy.net/"&gt;Laughing Boy&lt;/a&gt; &lt;a style="color: #ffffff; font-size: 6px;" href="http://www.chestnutspreschool.co.uk/"&gt;Chestnuts Pre-School&lt;/a&gt; &lt;a style="color: #ffffff; font-size: 6px;" href="http://www.chaingangreading.com/"&gt;Chain Gang&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10220076" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-22-00-76/Bing-Maps-Browser.zip" length="4933472" type="application/octet-stream" /><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/Plug_2D00_Ins/">Plug-Ins</category><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+2011/">CRM 2011</category><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/Silverlight/">Silverlight</category><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/Solutions/">Solutions</category><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/C_2300_/">C#</category></item><item><title>Tracking Activity History</title><link>http://blogs.msdn.com/b/ukcrm/archive/2011/09/27/tracking-activity-history.aspx</link><pubDate>Tue, 27 Sep 2011 15:06:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10217230</guid><dc:creator>Simon Hutson</dc:creator><slash:comments>1</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/ukcrm/commentapi.aspx?WeblogPostID=10217230</wfw:comment><comments>http://blogs.msdn.com/b/ukcrm/archive/2011/09/27/tracking-activity-history.aspx#comments</comments><description>&lt;p&gt;22 Acacia Avenue&amp;hellip;&lt;/p&gt;
&lt;p&gt;For a recent client demo, I needed to build a dashboard that would identify key accounts/contacts that hadn&amp;rsquo;t been contacted recently. Although all the activity data needed is in the CRM database, it&amp;rsquo;s not easy to consume within a dashboard.&lt;/p&gt;
&lt;p&gt;For example, suppose I wanted a chart of contacts who had not had a phone call in the last 3 months, segmented by role. I couldn&amp;rsquo;t find a way to display this out of the box. Luckily, with a small amount of configuration and customisation, I was able to solve the problem. The screenshot below is a dashboard showing the 6 main activity types (appointment, e-mail, fax, letter, phone call and service appointment) by role (decision make, influencer, employee).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/8306.Contact_2D00_Activity_2D00_History_5F00_70C40A7C.png" target="_blank"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="Contact Activity History" border="0" alt="Contact Activity History" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/7220.Contact_2D00_Activity_2D00_History_5F00_thumb_5F00_09EC382A.png" width="504" height="379" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To create this I first configured 6 additional fields on the contact entity in order to track the last activity date of the main activity types (appointment, e-mail, fax, letter, phone call and service appointment). Then I configured 6 views to identify contacts who had not been contacted in the last 3 months, one view for each activity type. Next I configured 6 charts, one for each activity type, to show activity by role. Finally, i configured a new dashboard to display each chart, filtered by the relevant view.&lt;/p&gt;
&lt;p&gt;Now, all that is left to do update the new fields on a contact record whenever they participate in an activity. This is where we need a little &amp;ldquo;plug-in&amp;rdquo; magic. I created a plug-in that would execute on the SetStateDynamicEntity event for each of the main activity types. The plug-in loops through each PartyList field (To, From, Cc, Bcc, Organizer, Required Attendees, Optional Attendees etc.), and every time it finds a CRM contact, it updates the appropriate last activity date field for that contact. All fairly simple really. Just one note of caution, in large CRM deployments you might have a lot of activity tracking going on, which means the plug-in gets fired a lot. In order to reduce the likelihood of performance issues, I chose to trigger the plug-in on Asynchronous events.&lt;/p&gt;
&lt;p&gt;If you want to try this out, I have packaged up my solution (both managed and unmanaged solution packages) and made it available for download &lt;a title="here" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-21-72-30/Activity-History.zip" target="_blank"&gt;here&lt;/a&gt;. The solution package contains the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A modified contact entity containing 6 new fields, 6 new charts and 6 new views. I have not updated any of the out-of-the-box forms or views, so this won&amp;rsquo;t overwrite any customisations you have made to the contact entity.&lt;/li&gt;
&lt;li&gt;A plug-in to handle the SetStateDynamicEntity event on the 6 main activity types (appointment, e-mail, fax, letter, phone call and service appointment).&lt;/li&gt;
&lt;li&gt;A dashboard to display the 6 new charts.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In addition, I have included the source code for the plug-in, as well as an Excel spreadsheet containing some sample contact data that you can use to test the solution. Using the same solution, and adding some multi-series charts (see the CRM product group blog for more details - &lt;a title="CRM 2011 Charts &amp;ndash; Know the Real Potential ~ Part I" href="http://blogs.msdn.com/b/crm/archive/2011/01/04/crm-2011-charts-know-the-real-potential-part-i.aspx" target="_blank"&gt;CRM 2011 Charts &amp;ndash; Know the Real Potential ~ Part I&lt;/a&gt;), here&amp;rsquo;s an example of a slightly more complex dashboard I put together for another demo.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/7823.Contact_2D00_Activity_2D00_History_2D00_1_5F00_145CE67D.png" target="_blank"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="Contact Activity History 1" border="0" alt="Contact Activity History 1" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/0044.Contact_2D00_Activity_2D00_History_2D00_1_5F00_thumb_5F00_123FE7B4.png" width="504" height="379" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/p&gt;
&lt;p&gt;&lt;a style="color: #ffffff; font-size: 6px;" href="http://www.laughingboy.net/"&gt;Laughing Boy&lt;/a&gt; &lt;a style="color: #ffffff; font-size: 6px;" href="http://www.chestnutspreschool.co.uk/"&gt;Chestnuts Pre-School&lt;/a&gt; &lt;a style="color: #ffffff; font-size: 6px;" href="http://www.chaingangreading.com/"&gt;Chain Gang&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10217230" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-21-72-30/Activity-History.zip" length="339361" type="application/zip" /><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/Plug_2D00_Ins/">Plug-Ins</category><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/Business+Intelligence/">Business Intelligence</category><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+2011/">CRM 2011</category><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/C_2300_/">C#</category></item><item><title>Automating CRM 2011 Security Rules With Plug-Ins</title><link>http://blogs.msdn.com/b/ukcrm/archive/2011/07/08/automating-crm-2011-security-rules-with-plug-ins.aspx</link><pubDate>Fri, 08 Jul 2011 11:27:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10184551</guid><dc:creator>Simon Hutson</dc:creator><slash:comments>1</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/ukcrm/commentapi.aspx?WeblogPostID=10184551</wfw:comment><comments>http://blogs.msdn.com/b/ukcrm/archive/2011/07/08/automating-crm-2011-security-rules-with-plug-ins.aspx#comments</comments><description>&lt;p&gt;Secret Messages&amp;hellip;&lt;/p&gt;
&lt;p&gt;Following on from my previous post (&lt;a title="Using Plug-Ins To Modify Views" href="http://blogs.msdn.com/b/ukcrm/archive/2011/03/10/using-plug-ins-to-modify-views.aspx" target="_blank"&gt;Using Plug-Ins To Modify Views&lt;/a&gt;), I developed a set of plug-ins to manage security at an account level in order to satisfy the requirements for one of my corporate banking clients. The scenario was quite straightforward, in that a Client Director owns a number of accounts, grouped into one or more portfolios. Each portfolio has specific team members assigned to it, and these team members need access to the account record.&lt;/p&gt;
&lt;p&gt;Now, on first pass this would seem to be a simple case of setting up automatic sharing of account records based on portfolio membership. However, the problem with this is performance &amp;amp; scalability.&lt;/p&gt;
&lt;h3&gt;Why Large-Scale Sharing Is Bad&lt;/h3&gt;
&lt;p&gt;Sharing in CRM is designed to provide explicit access to records when the role-based security doesn&amp;rsquo;t allow it. Whenever a record is shared, an entry is added to the PrincipalObjectAccess table in the database. In addition, depending on the cascading options set on different entity relationships, an entry is added for each child record. For example, suppose you take the out-of-the box account entity and look 1:N relationships to the various child entities (e-mail, phone call, task, appointment, letter, fax, lead, opportunity, quote, order, invoice, contact, case, note etc.). Each time you share the parent account, an entry is added for each child record as well. For large-scale CRM deployments, it doesn&amp;rsquo;t take long for the PrincipalObjectAccess table to grow to several million records, which can have a major impact on performance.&lt;/p&gt;
&lt;p&gt;If you want to understand this in more depth, here are some good articles on the subject:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/crminthefield/archive/2010/08/16/excessive-principalobjectaccess-poa-table-growth-in-crm-4-0.aspx" target="_blank"&gt;Dynamics CRM in The Field Blog: Excessive PrincipalObjectAccess Table Growth in CRM 4.0 from the Reparent - Cascade All setting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/crminthefield/archive/2011/06/09/principalobjectaccess-performance-recommendations.aspx" target="_blank"&gt;Dynamics CRM in The Field Blog: PrincipalObjectAccess&amp;ndash;Performance Recommendations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Team Ownership As An Alternative To Sharing&lt;/h3&gt;
&lt;p&gt;New to CRM 2011 is team ownership of records, and it is this feature that I believe offers a more scalable solution to sharing. In order to make this work, I decided that I would have a separate team for each account record, so for a CRM implementation with 40,000 accounts there would be 40,000 teams. I did think about having a team for each portfolio to keep the number of teams to a relatively small number, but there are some possible future requirements that will mean each account may need slightly different user access.&lt;/p&gt;
&lt;h3&gt;Designing The Solution (Part I) &amp;ndash; Auto Create Teams&lt;/h3&gt;
&lt;p&gt;Initially, I created a plug-in that would fire whenever an account was created, and would perform the following tasks:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a new team&lt;/li&gt;
&lt;li&gt;Associate the team with a security role which has rights to allow the team to &amp;ldquo;own&amp;rdquo; an account.&lt;/li&gt;
&lt;li&gt;Assign ownership of the account to the new team&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This seemed sensible, until I started to notice that the team was being created and associated with the security role, but the account ownership wasn&amp;rsquo;t being set. Although I couldn&amp;rsquo;t pin down the exact reason, I suspect I was victim of a &lt;a title="Wikipedia: Race Condition" href="http://en.wikipedia.org/wiki/Race_condition" target="_blank"&gt;race condition&lt;/a&gt;. Whenever a security principle is created (such as a team or a user), a number of background operations are kicked off, and I suspect that trying to assign the account to a team before these operations have completed results in a failure.&lt;/p&gt;
&lt;p&gt;To overcome this issue, I split the plug-in into two. As before, the first plug-in would fire whenever an account was created, but this time it would perform the following tasks:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a new team&lt;/li&gt;
&lt;li&gt;Associate the team with a security role&lt;/li&gt;
&lt;li&gt;Update the account, adding the team to a custom lookup field &amp;ldquo;srh_coverageteamid&amp;rdquo; (a new N:1 relationship between the account and team entities).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A second plug-in would then fire whenever the &amp;ldquo;srh_coverageteamid&amp;rdquo; field gets updated, and would perform just one task:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Assign ownership of the account to the team specified in the &amp;ldquo;srh_coverageteamid&amp;rdquo; field&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This did the trick, and now whenever a new account is created, a corresponding team is also created, and assigned ownership. To finish off this side of the design, I created a third plug-in that would delete the team whenever the corresponding account was deleted.&lt;/p&gt;
&lt;h3&gt;Designing The Solution (Part II) &amp;ndash; Custom Portfolio Entity&lt;/h3&gt;
&lt;p&gt;The next part of the design required a custom portfolio entity, with a custom 1:N relationship to the account entity.&amp;nbsp; In addition, I defined multiple N:1 relationships with the user entity to track various portfolio roles such as Client Director, Associate Client Director and Assistant Client Director.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/0574.Coverage_2D00_Team_5F00_566EB925.jpg" target="_blank"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Coverage Team" border="0" alt="Coverage Team" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/6835.Coverage_2D00_Team_5F00_thumb_5F00_2D177127.jpg" width="504" height="404" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Designing The Solution (Part III) &amp;ndash; Auto Team Membership&lt;/h3&gt;
&lt;p&gt;Now we have a portfolio containing several roles, I needed a series of plug-ins to modify team membership in the following circumstances:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;When an account is added or removed from a portfolio, change the account coverage team members.&lt;/li&gt;
&lt;li&gt;When portfolio members change, change the coverage team members for all accounts in the portfolio.&lt;/li&gt;
&lt;li&gt;When the Client Director changes, change the owner of the portfolio to match.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Designing The Solution (Part IV) &amp;ndash; Non Functional Considerations&lt;/h3&gt;
&lt;p&gt;Now there is too much complexity here to dive into detail into each plug-in, but one of the challenges involved was how to make the solution perform well. For example, I knew that all the plug-ins should run asynchronously. Imagine a situation where a portfolio has 500 accounts, and you update the portfolio members. That&amp;rsquo;s 500 teams that need to be updated..!! A synchronous plug-in would take far too long to complete this operation, and this has the potential&amp;nbsp; to bring the system to halt.&lt;/p&gt;
&lt;p&gt;However, when designing asynchronous processes, you have to be very careful to avoid race-conditions where a process starts before the previous process has completed.&lt;/p&gt;
&lt;p&gt;Another issue is security. Most plug-ins run in the security context of the user who made the change that caused the plug-in to run. However, when modifying security roles via team memberships, you need the plug-ins to run with administrator privileges as you don&amp;rsquo;t want to be granting these kind of permission to every user.&lt;/p&gt;
&lt;p&gt;One final issue is the default cascade options set on the account entity relationships. Think what would happen if you regularly change ownership on an account. By default, all the child activities and entities would also change owners. My design has tried to bypass this issue, by creating an owning team for each account when that account is first created, and then modifying only the team members. The coverage team (i.e. the actual account owner) does not change over the life of the account.&lt;/p&gt;
&lt;h3&gt;Designing The Solution (Part V) &amp;ndash; Bringing It All Together&lt;/h3&gt;
&lt;p&gt;For those of you who want to try this out, I have packed up the solution and made it available for download. The solution package contains the following&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A new Portfolio custom entity&lt;/li&gt;
&lt;li&gt;New custom entity relationships for account and team entities&lt;/li&gt;
&lt;li&gt;A new security role that will allow teams to own accounts&lt;/li&gt;
&lt;li&gt;7 Plug-ins to handle the following events:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Account is created&lt;/li&gt;
&lt;li&gt;Account is deleted&lt;/li&gt;
&lt;li&gt;Account is added/removed from a Portfolio&lt;/li&gt;
&lt;li&gt;Account coverage team is updates&lt;/li&gt;
&lt;li&gt;Portfolio is created&lt;/li&gt;
&lt;li&gt;Portfolio client director is updated&lt;/li&gt;
&lt;li&gt;Portfolio members are updated&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;You can download a.zip file &lt;a title="Download" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-18-45-51/CoverageTeam.zip"&gt;here&lt;/a&gt;, and this contains both managed and unmanaged solution packages, as well as the Visual Studio 2010 project containing the plug-in source code.&lt;/p&gt;
&lt;p&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/p&gt;
&lt;p&gt;&lt;a style="color: #ffffff; font-size: 6px;" href="http://www.laughingboy.net/"&gt;Laughing Boy&lt;/a&gt; &lt;a style="color: #ffffff; font-size: 6px;" href="http://www.chestnutspreschool.co.uk/"&gt;Chestnuts Pre-School&lt;/a&gt; &lt;a style="color: #ffffff; font-size: 6px;" href="http://www.chaingangreading.com/"&gt;Chain Gang&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10184551" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-18-45-51/CoverageTeam.zip" length="275994" type="application/zip" /><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/Plug_2D00_Ins/">Plug-Ins</category><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+2011/">CRM 2011</category></item><item><title>CRM 2011 Certified For Citrix</title><link>http://blogs.msdn.com/b/ukcrm/archive/2011/05/11/crm-2011-certified-for-citrix.aspx</link><pubDate>Wed, 11 May 2011 12:58:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10163365</guid><dc:creator>Simon Hutson</dc:creator><slash:comments>0</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/ukcrm/commentapi.aspx?WeblogPostID=10163365</wfw:comment><comments>http://blogs.msdn.com/b/ukcrm/archive/2011/05/11/crm-2011-certified-for-citrix.aspx#comments</comments><description>&lt;p&gt;Let&amp;rsquo;s Get It Started&amp;hellip;&lt;/p&gt;
&lt;p&gt;I just spotted this on the Citrix web site &lt;a href="http://www.citrix.com/ready/partners/microsoft/products/microsoft-dynamics-crm-2011"&gt;http://www.citrix.com/ready/partners/microsoft/products/microsoft-dynamics-crm-2011&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.citrix.com/ready/partners/microsoft/products/microsoft-dynamics-crm-2011" title="Microsoft Dynamics CRM 2011 Certified for Citrix"&gt;&lt;img height="360" width="520" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/8688.image_5F00_5244D7C3.png" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.laughingboy.net/" style="color: #ffffff; font-size: 6px;"&gt;Laughing Boy&lt;/a&gt; &lt;a href="http://www.chestnutspreschool.co.uk/" style="color: #ffffff; font-size: 6px;"&gt;Chestnuts Pre-School&lt;/a&gt; &lt;a href="http://www.chaingangreading.com/" style="color: #ffffff; font-size: 6px;"&gt;Chain Gang&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10163365" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+2011/">CRM 2011</category></item><item><title>Getting Started With CCA For CRM 2011</title><link>http://blogs.msdn.com/b/ukcrm/archive/2011/05/11/getting-started-with-cca-for-crm-2011.aspx</link><pubDate>Wed, 11 May 2011 12:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10163341</guid><dc:creator>Simon Hutson</dc:creator><slash:comments>3</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/ukcrm/commentapi.aspx?WeblogPostID=10163341</wfw:comment><comments>http://blogs.msdn.com/b/ukcrm/archive/2011/05/11/getting-started-with-cca-for-crm-2011.aspx#comments</comments><description>&lt;p&gt;Rolling In The Deep&amp;hellip;&lt;/p&gt;
&lt;p&gt;You may have heard that we recently released the latest version of the &lt;a target="_blank" href="http://dynamics-crm.pinpoint.microsoft.com/en-GB/applications/customer-care-accelerator-for-microsoft-dynamics-crm-2011-12884914795" title="Customer Care Accelerator for Microsoft Dynamics CRM 2011"&gt;Customer Care Accelerator for Microsoft Dynamics CRM 2011&lt;/a&gt; (CCA R2) on the &lt;a target="_blank" href="http://dynamics-crm.pinpoint.microsoft.com" title="Microsoft Dynamics Marketplace"&gt;Microsoft Dynamics Marketplace&lt;/a&gt;. CCA delivers contact centre functionality by combining, displaying, and manipulating data from disparate line of business applications in a single user interface. CCA provides a number of capabilities, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Integrated agent desktop &lt;/li&gt;
&lt;li&gt;Scripting to eliminate duplicate data entry &lt;/li&gt;
&lt;li&gt;Computer Telephony Integration (CTI) &lt;/li&gt;
&lt;li&gt;Agent activity reporting &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At it&amp;rsquo;s core CCA is a framework that allow developers to build their own agent desktop, and provides features such as multi-session management, UI integration with different kinds of applications (including Web, Windows Forms, Java and Terminal Services apps), task automation and so on. This development framework is known as the User Interface Integration (UII) for Microsoft Dynamics CRM 2011.&lt;/p&gt;
&lt;p&gt;In addition to UII, we also ship a sample agent desktop application with some ready-to-use CRM 2011 integration components, to show what can be achieved with the development framework.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/1184.image_5F00_24C13B84.png"&gt;&lt;img height="378" width="504" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/4130.image_5F00_thumb_5F00_19D4346F.png" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Installing UII on an agent&amp;rsquo;s PC is very straightforward, and we provide a simple installer (32-bit or 64-bit depending on your version of Windows) that guides you through this process. There are a couple of pre-requisites, and UII requires both the &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9cfb2d51-5ff4-4491-b0e5-b386f32c0992" title=".NET Framework 4.0"&gt;.NET Framework 4.0&lt;/a&gt; and &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=eb9c345f-e830-40b8-a5fe-ae7a864c4d76" title="Windows Identity Foundation"&gt;Windows Identity Foundation&lt;/a&gt; (WIF) to be installed first. Unfortunately, since WIF does not run on Windows XP, neither can the CCA agent desktop.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/7382.image_5F00_779C28E8.png"&gt;&lt;img height="379" width="504" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/5734.image_5F00_thumb_5F00_4242F0B6.png" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Earlier this week, I was lucky enough to spend a couple of days with &lt;a target="_blank" href="http://www.linkedin.com/in/leezuckett" title="Lee Zuckett"&gt;Lee Zuckett&lt;/a&gt; (solutions architect on the CCA team), and he was able to get me up and running with the new product. He pointed out that a specific .dll was not able to be included with the UII installer because some of the code had been written by a 3rd party and was posted on the Microsoft Open Source site &lt;a href="http://www.codeplex.com"&gt;http://www.codeplex.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The UII deployment guide includes a section entitled &amp;ldquo;Integrating the WPF CAB Libraries with the Composite UI Application Block&amp;rdquo;, which explains how to download the source code from codeplex, modify it slightly for use with UII, and compile it yourself. The end result is that you end up with a file called &lt;em&gt;&lt;strong&gt;Microsoft.Practices.CompositeUI.Windows.dll&lt;/strong&gt;&lt;/em&gt;, which you have to deploy in the UII folder on each agent machine.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/4263.UII_5F00_3036AD29.png"&gt;&lt;img height="379" width="504" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-56-40-metablogapi/2022.UII_5F00_thumb_5F00_3A3B2887.png" alt="UII" border="0" title="UII" style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Although not too time consuming it is still a bit of a pain, so I decided to simplify my life and post a copy of the compiled file &lt;a target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-16-33-41/Microsoft.Practices.CompositeUI.Windows.dll.zip" title="here"&gt;here&lt;/a&gt; so I can always get hold of it no matter where I happen to be. Please note, this is for my own personal use, and is not intended to be used by the wider CRM community :-)&lt;/p&gt;
&lt;p&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.laughingboy.net/" style="color: #ffffff; font-size: 6px;"&gt;Laughing Boy&lt;/a&gt; &lt;a href="http://www.chestnutspreschool.co.uk/" style="color: #ffffff; font-size: 6px;"&gt;Chestnuts Pre-School&lt;/a&gt; &lt;a href="http://www.chaingangreading.com/" style="color: #ffffff; font-size: 6px;"&gt;Chain Gang&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10163341" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-16-33-41/Microsoft.Practices.CompositeUI.Windows.dll.zip" length="15606" type="application/zip" /><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/Customer+Care+Accelerator/">Customer Care Accelerator</category><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+2011/">CRM 2011</category></item><item><title>CRM 4.0 Client Upgrade To CRM 2011</title><link>http://blogs.msdn.com/b/ukcrm/archive/2011/04/22/crm-4-0-client-upgrade-to-crm-2011.aspx</link><pubDate>Fri, 22 Apr 2011 21:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10157233</guid><dc:creator>Simon Hutson</dc:creator><slash:comments>4</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/ukcrm/commentapi.aspx?WeblogPostID=10157233</wfw:comment><comments>http://blogs.msdn.com/b/ukcrm/archive/2011/04/22/crm-4-0-client-upgrade-to-crm-2011.aspx#comments</comments><description>&lt;p&gt;Left Outside Alone&amp;hellip;&lt;/p&gt;
&lt;p&gt;Following on from my previous post &lt;a target="_blank" href="http://blogs.msdn.com/b/ukcrm/archive/2011/04/20/outlook-2003-client-features.aspx" title="Outlook 2003 Client Features"&gt;Outlook 2003 Client Features&lt;/a&gt;, I was asked about the CRM 4.0 Client for Outlook and how this works with CRM 2011 Server.&lt;/p&gt;
&lt;p&gt;As you may know, Microsoft Dynamics CRM 4.0 for Outlook with Update Rollup 7 (or later) is compatible with Microsoft Dynamics CRM 2011 Server. This compatibility eases the upgrade timeline to allow administrators to do a phased rollout without being forced to upgrade clients at the same time as the server (See &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9886ab96-3571-420f-83ad-246899482fb4" title="Microsoft Dynamics CRM 201 Planning Guide"&gt;Microsoft Dynamics CRM 201 Planning Guide&lt;/a&gt; for more details).&lt;/p&gt;
&lt;p&gt;Unlike the CRM 2011 Client For Outlook, there are no context-specific menus. Instead, you get the full &amp;ldquo;web-client ribbon&amp;rdquo; in the entity grid views. You can see this clearly below, with the first example showing the CRM 4.0 Client for Outlook 2003 and the second showing the CRM 2011 Client for Outlook 2003.&lt;/p&gt;
&lt;p align="center"&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;CRM 2011 Server with CRM 4.0 Client for Outlook 2003&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-56-40-metablogapi/8640.image_5F00_1AFEE53A.png"&gt;&lt;img height="379" width="504" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-56-40-metablogapi/8662.image_5F00_thumb_5F00_40488D0E.png" alt="CRM 2011 with CRM 4.0 Client for Outlook 2003" border="0" title="CRM 2011 with CRM 4.0 Client for Outlook 2003" style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;CRM 2011 Server with CRM 2011 Client for Outlook 2003&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-56-40-metablogapi/2620.image_5F00_3C0E8F7C.png"&gt;&lt;img height="379" width="504" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-56-40-metablogapi/7510.image_5F00_thumb_5F00_42B17332.png" alt="CRM 2011 with CRM 2011 Client for Outlook 2003" border="0" title="CRM 2011 with CRM 2011 Client for Outlook 2003" style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One key limitation seems to be that the &amp;ldquo;Go Offline&amp;rdquo; functionality is disabled when the CRM 4.0 Client for Outlook connects to CRM 2011 server. So if you have a lot of occasionally connected users, making extensive use of the offline synchronisation, you might need to develop an alternative upgrade strategy.&lt;/p&gt;
&lt;p&gt;In order to compare the look &amp;amp; feel of the CRM 4.0 Client, I put together another PowerPoint presentation, this time containing a number of screenshots of the core CRM 2011 functionality with the CRM 4.0 client for Outlook 2003. I have attached a copy &lt;a target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Components-PostAttachments/00-10-15-72-33/CRM-2011-_2B00_-CRM-4.0-_2B00_-Office-2003.zip" title="CRM 2011 + CRM 4.0 + Office 2003"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.laughingboy.net/" style="color: #ffffff; font-size: 6px;"&gt;Laughing Boy&lt;/a&gt; &lt;a href="http://www.chestnutspreschool.co.uk/" style="color: #ffffff; font-size: 6px;"&gt;Chestnuts Pre-School&lt;/a&gt; &lt;a href="http://www.chaingangreading.com/" style="color: #ffffff; font-size: 6px;"&gt;Chain Gang&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10157233" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-15-72-33/CRM-2011-_2B00_-CRM-4.0-_2B00_-Office-2003.zip" length="7008673" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+4-0/">CRM 4.0</category><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+2011/">CRM 2011</category></item><item><title>CRM Online Cashback Offer</title><link>http://blogs.msdn.com/b/ukcrm/archive/2011/04/21/crm-online-cashback-offer.aspx</link><pubDate>Thu, 21 Apr 2011 10:06:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10156596</guid><dc:creator>Simon Hutson</dc:creator><slash:comments>0</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/ukcrm/commentapi.aspx?WeblogPostID=10156596</wfw:comment><comments>http://blogs.msdn.com/b/ukcrm/archive/2011/04/21/crm-online-cashback-offer.aspx#comments</comments><description>&lt;p&gt;Two Steps Behind&amp;hellip;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not sure how I missed this first time around, but we have a special offer for CRM Online running at the moment. Not only do we have an introductory price of &amp;pound;22.75 per user, per month (available until June 31st 2011), but we also have a cashback offer for customers who switch from a competitor CRM solution.&lt;/p&gt;
&lt;p&gt;We will give you &lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;&amp;pound;134&lt;/span&gt;&lt;/strong&gt; cash per user of Microsoft Dynamics CRM Online for every seat you switch from &lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;ANY&lt;/span&gt;&lt;/strong&gt; other CRM package.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s right, &amp;pound;134 per user to spend any way you want. It probably makes sense to use this money to pay for the costs of switching (&lt;a target="_blank" href="http://www.scribesoft.com" title="Scribe Software"&gt;Scribe Software&lt;/a&gt; provide some great migration tools), but that&amp;rsquo;s entirely your choice. As you would expect, there are some conditions attached, but these aren&amp;rsquo;t particularly onerous:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The offer is only valid between 8th April and 28th May 2011.&lt;/li&gt;
&lt;li&gt;You must purchase at least 15 seats of Microsoft Dynamics CRM online, and is capped at a maximum of 250 seats &amp;ndash; you can purchase more, but will only receive cashback for 250 seats.&lt;/li&gt;
&lt;li&gt;You must commit to a minimum 2-year subscription.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After 28th May, we will continue to run the promotion (until June 31st 2011), but only for customers who are switching from Oracle CRM On Demand, Oracle Siebel CRM or Salesforce.com. So if you are currently using older CRM products such as Pivotal, Onyx, Goldmine, SalesLogix, SageCRM, Maximizer, ACT!, SugarCRM etc. now is the time to switch.&lt;/p&gt;
&lt;p&gt;All you have to do is fill in the form at &lt;a href="http://www.cloudcrmforless.com"&gt;http://www.cloudcrmforless.com&lt;/a&gt; and someone from Microsoft will be in touch within 24 hours. Simples.!!!&lt;/p&gt;
&lt;p&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.laughingboy.net/" style="color: #ffffff; font-size: 6px;"&gt;Laughing Boy&lt;/a&gt; &lt;a href="http://www.chestnutspreschool.co.uk/" style="color: #ffffff; font-size: 6px;"&gt;Chestnuts Pre-School&lt;/a&gt; &lt;a href="http://www.chaingangreading.com/" style="color: #ffffff; font-size: 6px;"&gt;Chain Gang&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10156596" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+2011/">CRM 2011</category><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+Online/">CRM Online</category></item><item><title>Outlook 2003 Client Features</title><link>http://blogs.msdn.com/b/ukcrm/archive/2011/04/20/outlook-2003-client-features.aspx</link><pubDate>Wed, 20 Apr 2011 22:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10156447</guid><dc:creator>Simon Hutson</dc:creator><slash:comments>2</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/ukcrm/commentapi.aspx?WeblogPostID=10156447</wfw:comment><comments>http://blogs.msdn.com/b/ukcrm/archive/2011/04/20/outlook-2003-client-features.aspx#comments</comments><description>&lt;p&gt;Tiger Feet&amp;hellip;&lt;/p&gt;
&lt;p&gt;A couple of weeks ago, one of my CRM 2011 prospects asked for details about which features are/aren&amp;rsquo;t available when using older versions of desktop software. Like many large enterprises their standard desktop is based on Windows XP &amp;amp; Office 2003, and although they are planning a Windows 7 rollout, this won&amp;rsquo;t be ready for another 12-18 months.&lt;/p&gt;
&lt;p&gt;The problem is that all the CRM marketing material I&amp;rsquo;ve seen shows CRM with the latest and greatest versions of Windows 7, Outlook 2010 and IE 8 or 9, and I wasn&amp;rsquo;t entirely sure what features would be available when running previous versions. So I spun up a new CRM Online 30-day trial, and built a fresh Hyper-V virtual machine running Windows XP SP3, Office 2003 SP3 and Internet Explorer 7.&lt;/p&gt;
&lt;p&gt;I was pleasantly surprised to find out that the majority of CRM 2011 features are in-tact, with a couple of exceptions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Outlook Ribbon &amp;ndash; Although Outlook 2003 uses menus (remember them?) instead of the more recent Office fluent UI (a.k.a. the ribbon), CRM 2011 gives you context-sensitive menus, which change depending on which entity you are working with.&lt;/li&gt;
&lt;li&gt;Outlook Preview Pane &amp;ndash; Unfortunately, Outlook 2003 does not provide this capability, so you don&amp;rsquo;t get to preview CRM records when navigating views.&lt;/li&gt;
&lt;li&gt;Outlook Conditional Formatting, Follow-up and Categories &amp;ndash; One real innovation made possible with Outlook 2010 is the use of native MAPI grids to surface CRM views. By using these native features, you get access to rich Outlook features for free.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-56-40-metablogapi/0755.image_5F00_7EEEBD95.png"&gt;&lt;img height="379" width="504" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-56-40-metablogapi/1348.image_5F00_thumb_5F00_486D241F.png" alt="image" border="0" title="image" style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In order to bring this to life for my prospect, I put together a PowerPoint presentation containing a number of screenshots of the core CRM 2011 functionality with Outlook 2003. I thought this might be useful to the wider community, so I have attached a copy for you &lt;a target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Components-PostAttachments/00-10-15-64-47/CRM-2011-_2B00_-Office-2003.zip" title="here"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.laughingboy.net/" style="color: #ffffff; font-size: 6px;"&gt;Laughing Boy&lt;/a&gt; &lt;a href="http://www.chestnutspreschool.co.uk/" style="color: #ffffff; font-size: 6px;"&gt;Chestnuts Pre-School&lt;/a&gt; &lt;a href="http://www.chaingangreading.com/" style="color: #ffffff; font-size: 6px;"&gt;Chain Gang&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10156447" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-15-64-47/CRM-2011-_2B00_-Office-2003.zip" length="8582156" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+2011/">CRM 2011</category></item><item><title>Using Plug-Ins To Modify Views</title><link>http://blogs.msdn.com/b/ukcrm/archive/2011/03/10/using-plug-ins-to-modify-views.aspx</link><pubDate>Thu, 10 Mar 2011 23:38:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10139561</guid><dc:creator>Simon Hutson</dc:creator><slash:comments>3</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/ukcrm/commentapi.aspx?WeblogPostID=10139561</wfw:comment><comments>http://blogs.msdn.com/b/ukcrm/archive/2011/03/10/using-plug-ins-to-modify-views.aspx#comments</comments><description>&lt;p&gt;I Wish&amp;hellip;&lt;/p&gt;
&lt;p&gt;I realise it has been a while since I last posted, but I have been mega-busy working with some of the top UK financial services organisations and selling Microsoft Dynamics CRM 2011 into various divisions such as business banking, corporate&amp;nbsp; banking, wealth management and investment banking. Just from a personal productivity perspective, the latest version of our product is so much quicker to configure compelling demos, that I can now crank out a decent demo in less than half the time it took with CRM 4.0. What&amp;rsquo;s more the new features such as charting, dashboards, goal management, team-ownership of records are really resonating with Business Decision Makers (BDM) when comparing us against the competition.&lt;/p&gt;
&lt;p&gt;I particularly like the new data import functionality, which combines the best bits of the CRM 4.0 data import and data migration tools and adds additional capabilities. It&amp;rsquo;s not perfect (e.g. no ability to import many:many relationship data), but hey, that&amp;rsquo;s why our product teams in the USA and India are flat out working on CRM v.next :-)&lt;/p&gt;
&lt;p&gt;I wanted to share some of the more interesting pieces of the demos I have been working on, so I will start with a security requirement that cropped up recently.&lt;/p&gt;
&lt;p&gt;The client, a corporate &amp;amp; investment banking (CIB) division of a large retail bank, was looking for additional security over-and-above the role-based security model of CRM 2011. They wanted the ability for the owner of a record (either an individual, or members of the owning team), to restrict access to that record simply by selecting a &amp;ldquo;Private&amp;rdquo; check-box on the form.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-56-40-metablogapi/2364.CRM_2D00_2011_2D00_IsPrivate_2D00_UI_5F00_5DCF88EA.png"&gt;&lt;img height="93" width="504" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-56-40-metablogapi/4527.CRM_2D00_2011_2D00_IsPrivate_2D00_UI_5F00_thumb_5F00_5FE873B4.png" alt="CRM 2011 IsPrivate UI" border="0" title="CRM 2011 IsPrivate UI" 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" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Obviously, adding a new field is simplicity itself, but what about the business logic? Looking back at one of my &lt;a target="_blank" href="http://blogs.msdn.com/b/ukcrm/archive/2007/10/08/microsoft-dynamics-crm-4-0-tidbits-advanced-events.aspx" title="Microsoft Dynamics CRM 4.0 Tidbits - Advanced Events"&gt;previous posts&lt;/a&gt; from October 2007, I achieved something similar when trying to restrict which queues would show up in any view. So I converted the code from VB.NET to C# and, pulled some &lt;a target="_blank" href="http://msdn.microsoft.com/en-gb/library/gg594416.aspx" title="Sample: Basic Plug-in"&gt;sample plug-in code&lt;/a&gt; from the new SDK and put together a very simple solution.&lt;/p&gt;
&lt;p&gt;Every time you access a view in CRM user interface, it causes the CRM platform to execute a query by raising a RetrieveMultiple request. A plug-in that intercepts this request, can modify the query before it is executed by the CRM platform, and this is exactly what I have done in the code below.&lt;/p&gt;
&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;
&lt;div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum1" style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; RetrieveMultiple : Microsoft.Xrm.Sdk.IPlugin&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum2" style="color: #606060"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum3" style="color: #606060"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Execute(IServiceProvider serviceProvider)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum4" style="color: #606060"&gt;   4:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum5" style="color: #606060"&gt;   5:&lt;/span&gt;         &lt;span style="color: #008000"&gt;// Obtain the execution context from the service provider.&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum6" style="color: #606060"&gt;   6:&lt;/span&gt;         IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(IPluginExecutionContext));&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum7" style="color: #606060"&gt;   7:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum8" style="color: #606060"&gt;   8:&lt;/span&gt;         &lt;span style="color: #008000"&gt;// Get a reference to the Organization service.&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum9" style="color: #606060"&gt;   9:&lt;/span&gt;         IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(IOrganizationServiceFactory));&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum10" style="color: #606060"&gt;  10:&lt;/span&gt;         IOrganizationService service = factory.CreateOrganizationService(context.UserId);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum11" style="color: #606060"&gt;  11:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum12" style="color: #606060"&gt;  12:&lt;/span&gt;         &lt;span style="color: #008000"&gt;// Get a reference to the tracing service.&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum13" style="color: #606060"&gt;  13:&lt;/span&gt;         ITracingService tracingService = (ITracingService)serviceProvider.GetService(&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(ITracingService));&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum14" style="color: #606060"&gt;  14:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum15" style="color: #606060"&gt;  15:&lt;/span&gt;         &lt;span style="color: #008000"&gt;// Check that all of the following conditions are true:&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum16" style="color: #606060"&gt;  16:&lt;/span&gt;         &lt;span style="color: #008000"&gt;//  1. plug-in is running synchronously&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum17" style="color: #606060"&gt;  17:&lt;/span&gt;         &lt;span style="color: #008000"&gt;//  2. plug-in is running on the 'pre-stage' event&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum18" style="color: #606060"&gt;  18:&lt;/span&gt;         &lt;span style="color: #008000"&gt;//  3. plug-in is running on the 'RetrieveMultiple' event&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum19" style="color: #606060"&gt;  19:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (context.Mode == 0 &amp;amp;&amp;amp; context.Stage == 10 &amp;amp;&amp;amp; context.MessageName.Equals(&lt;span style="color: #006080"&gt;"RetrieveMultiple"&lt;/span&gt;))&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum20" style="color: #606060"&gt;  20:&lt;/span&gt;         {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum21" style="color: #606060"&gt;  21:&lt;/span&gt;             &lt;span style="color: #008000"&gt;// The InputParameters collection contains all the data passed in the message request.&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum22" style="color: #606060"&gt;  22:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (context.InputParameters.Contains(&lt;span style="color: #006080"&gt;"Query"&lt;/span&gt;))&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum23" style="color: #606060"&gt;  23:&lt;/span&gt;             {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum24" style="color: #606060"&gt;  24:&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (context.InputParameters[&lt;span style="color: #006080"&gt;"Query"&lt;/span&gt;] &lt;span style="color: #0000ff"&gt;is&lt;/span&gt; QueryExpression)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum25" style="color: #606060"&gt;  25:&lt;/span&gt;                 {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum26" style="color: #606060"&gt;  26:&lt;/span&gt;                     &lt;span style="color: #008000"&gt;// Get the QueryExpression from the property bag&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum27" style="color: #606060"&gt;  27:&lt;/span&gt;                     QueryExpression objQueryExpression = (QueryExpression)context.InputParameters[&lt;span style="color: #006080"&gt;"Query"&lt;/span&gt;];&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum28" style="color: #606060"&gt;  28:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum29" style="color: #606060"&gt;  29:&lt;/span&gt;                     &lt;span style="color: #008000"&gt;// We can modify the original query to ensure that any record marked "Private" will only be visible to either&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum30" style="color: #606060"&gt;  30:&lt;/span&gt;                     &lt;span style="color: #008000"&gt;//  1. The owner of the of the record (if user-owned)&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum31" style="color: #606060"&gt;  31:&lt;/span&gt;                     &lt;span style="color: #008000"&gt;//  2. Members of the owning team (if team-owned)&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum32" style="color: #606060"&gt;  32:&lt;/span&gt;                     ConditionExpression privateFlagCondition = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ConditionExpression()&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum33" style="color: #606060"&gt;  33:&lt;/span&gt;                     {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum34" style="color: #606060"&gt;  34:&lt;/span&gt;                         AttributeName = &lt;span style="color: #006080"&gt;"srh_private"&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum35" style="color: #606060"&gt;  35:&lt;/span&gt;                         Operator = ConditionOperator.Equal,&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum36" style="color: #606060"&gt;  36:&lt;/span&gt;                         Values = { &lt;span style="color: #0000ff"&gt;false&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum37" style="color: #606060"&gt;  37:&lt;/span&gt;                     };&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum38" style="color: #606060"&gt;  38:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum39" style="color: #606060"&gt;  39:&lt;/span&gt;                     ConditionExpression owningUserCondition = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ConditionExpression()&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum40" style="color: #606060"&gt;  40:&lt;/span&gt;                     {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum41" style="color: #606060"&gt;  41:&lt;/span&gt;                         AttributeName = &lt;span style="color: #006080"&gt;"owninguser"&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum42" style="color: #606060"&gt;  42:&lt;/span&gt;                         Operator = ConditionOperator.EqualUserId,&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum43" style="color: #606060"&gt;  43:&lt;/span&gt;                     };&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum44" style="color: #606060"&gt;  44:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum45" style="color: #606060"&gt;  45:&lt;/span&gt;                     ConditionExpression owningTeamCondition = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ConditionExpression()&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum46" style="color: #606060"&gt;  46:&lt;/span&gt;                     {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum47" style="color: #606060"&gt;  47:&lt;/span&gt;                         AttributeName = &lt;span style="color: #006080"&gt;"owningteam"&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum48" style="color: #606060"&gt;  48:&lt;/span&gt;                         Operator = ConditionOperator.EqualUserTeams,&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum49" style="color: #606060"&gt;  49:&lt;/span&gt;                     };&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum50" style="color: #606060"&gt;  50:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum51" style="color: #606060"&gt;  51:&lt;/span&gt;                     FilterExpression newFilter = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; FilterExpression()&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum52" style="color: #606060"&gt;  52:&lt;/span&gt;                     {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum53" style="color: #606060"&gt;  53:&lt;/span&gt;                         FilterOperator = LogicalOperator.Or,&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum54" style="color: #606060"&gt;  54:&lt;/span&gt;                         Conditions = { privateFlagCondition, owningUserCondition, owningTeamCondition }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum55" style="color: #606060"&gt;  55:&lt;/span&gt;                     };&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum56" style="color: #606060"&gt;  56:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum57" style="color: #606060"&gt;  57:&lt;/span&gt;                     objQueryExpression.Criteria.AddFilter(newFilter);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum58" style="color: #606060"&gt;  58:&lt;/span&gt;                 }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum59" style="color: #606060"&gt;  59:&lt;/span&gt;             }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum60" style="color: #606060"&gt;  60:&lt;/span&gt;         }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum61" style="color: #606060"&gt;  61:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum62" style="color: #606060"&gt;  62:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;No matter what the original query, the QueryExpression object can easily be modified to filter out records where the &amp;ldquo;Private&amp;rdquo; flag is set, and the the user is not the record owner.&lt;/p&gt;
&lt;p&gt;In order show this in operation, I developed a sample Call Report solution which you can download &lt;a target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Components-PostAttachments/00-10-13-95-61/callreport_5F00_1_5F00_0_5F00_0_5F00_1.zip" title="CRM 2011 Call Report Solution Package"&gt;here&lt;/a&gt;. Once you have imported this into your CRM 2011 environment, please feel free to customise to your own requirements.&lt;/p&gt;
&lt;p&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10139561" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-13-95-61/callreport_5F00_1_5F00_0_5F00_0_5F00_1.zip" length="32077" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/Plug_2D00_Ins/">Plug-Ins</category><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+2011/">CRM 2011</category></item><item><title>CRM 2011 Online Is Here</title><link>http://blogs.msdn.com/b/ukcrm/archive/2011/01/17/crm-2011-online-is-here.aspx</link><pubDate>Mon, 17 Jan 2011 13:25:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10116551</guid><dc:creator>Simon Hutson</dc:creator><slash:comments>0</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/ukcrm/commentapi.aspx?WeblogPostID=10116551</wfw:comment><comments>http://blogs.msdn.com/b/ukcrm/archive/2011/01/17/crm-2011-online-is-here.aspx#comments</comments><description>&lt;p&gt;Celebration&amp;hellip;&lt;/p&gt;
&lt;p&gt;The wait is finally over. Microsoft Dynamics CRM Online is available today in 40 markets and 41 languages, for the introductory price of &amp;pound;22.75 per user, per month.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-56-40-metablogapi/1727.Celebrate_5F00_3613E46A.jpg"&gt;&lt;img height="257" width="500" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-56-40-metablogapi/3884.Celebrate_5F00_thumb_5F00_29398E4C.jpg" alt="Celebrate" border="0" title="Celebrate" style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can sign up for your &lt;strong&gt;FREE 30-DAY TRIAL&lt;/strong&gt; at &lt;a href="http://crm.dynamics.com." title="http://crm.dynamics.com"&gt;http://crm.dynamics.com.&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Also, we are hosting a global, online launch event on Thursday 20th January 2011, and you can register to attend &lt;a target="_blank" href="http://crm.dynamics.com/2011launch" title="Microsoft Dynamics CRM Online Global Launch Event"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://crm.dynamics.com/2011launch" title="Microsoft Dynamics CRM Online Global Launch Evet"&gt;&lt;img height="142" width="397" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-56-40-metablogapi/7103.CRM_2D00_Online_2D00_Launch_2D00_Event_5F00_07D9E8B0.jpg" alt="CRM Online Launch Event" border="0" title="CRM Online Launch Event" style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For those of you who are still considering an on-premises deployment, the final version of Microsoft Dynamics CRM 2011 will be available globally on Monday 28th February 2011. Don&amp;rsquo;t forget, online and on-premises are the same product, so why not sign up for a 30-day online trial today, start customising CRM for your business processes, then bring your customisations in-house when you are ready. &lt;strong&gt;It&amp;rsquo;s really is that simple :-)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.laughingboy.net/" style="color: #ffffff; font-size: 6px;"&gt;Laughing Boy&lt;/a&gt; &lt;a href="http://www.chestnutspreschool.co.uk/" style="color: #ffffff; font-size: 6px;"&gt;Chestnuts Pre-School&lt;/a&gt; &lt;a href="http://www.chaingangreading.com/" style="color: #ffffff; font-size: 6px;"&gt;Chain Gang&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10116551" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/Webcasts/">Webcasts</category><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+2011/">CRM 2011</category><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+Online/">CRM Online</category></item><item><title>Dependent Option Sets (Continued)</title><link>http://blogs.msdn.com/b/ukcrm/archive/2011/01/14/dependent-option-sets-continued.aspx</link><pubDate>Fri, 14 Jan 2011 16:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10115892</guid><dc:creator>Simon Hutson</dc:creator><slash:comments>1</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/ukcrm/commentapi.aspx?WeblogPostID=10115892</wfw:comment><comments>http://blogs.msdn.com/b/ukcrm/archive/2011/01/14/dependent-option-sets-continued.aspx#comments</comments><description>&lt;p&gt;Diggin&amp;rsquo; On James Brown&amp;hellip;&lt;/p&gt;
&lt;p&gt;Last month I posted a &lt;a target="_blank" href="http://blogs.msdn.com/b/ukcrm/archive/2010/12/02/crm-2011-dependent-option-set-example.aspx" title="CRM 2011 Dependent Option Set Example"&gt;sample solution&lt;/a&gt; which demonstrated how to use some of the capabilities of CRM 2011 (such as JScript libraries, global option sets and the new client-side object model) to develop re-usable, dependent option sets (pick-lists). In that example I had two pick-lists on a form, one containing a list of countries and the other a list of regions (EMEA, APAC, Americas etc.). Whenever a country was selected from the first pick-list, a JScript function would display the correct region in the second pick-list.&lt;/p&gt;
&lt;p&gt;But what if I wanted the reverse scenario, where I select a region from one pick-list, and only those countries from that region are visible in the second pick-list?&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-56-40-metablogapi/5545.CRM_2D00_2011_2D00_Dependent_2D00_Option_2D00_Set_2D00_Part_2D00_II_2D00_Example_5F00_3487BEFE.jpg"&gt;&lt;img height="140" width="504" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-56-40-metablogapi/7128.CRM_2D00_2011_2D00_Dependent_2D00_Option_2D00_Set_2D00_Part_2D00_II_2D00_Example_5F00_thumb_5F00_1DE570B7.jpg" alt="CRM 2011 Dependent Option Set Part II Example" border="0" title="CRM 2011 Dependent Option Set Part II Example" 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" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Like before, the code to achieve the simple case is fairly easy to write, but what if I wanted to build a JScript library that would allow me to re-use my logic, without having to hard-code specific field names? In addition, CRM 2011 introduces the ability for multiple copies of the same field on a single form, so how would my code cope with deal with a field which had multiple controls?&lt;/p&gt;
&lt;p&gt;Luckily, CRM 2011 introduces a much richer client programming model than previous versions of CRM, which makes this straightforward. I have two main JScript functions, &lt;strong&gt;formOnLoad()&lt;/strong&gt; and &lt;strong&gt;attributeOnChange()&lt;/strong&gt;, which do some simple error handling before calling &lt;strong&gt;updateDependentOptionSet()&lt;/strong&gt;, which does most of the heavy lifting.&lt;/p&gt;
&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;
&lt;div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum1" style="color: #606060"&gt;   1:&lt;/span&gt; formOnLoad(context, attributeName, dependentAttributeName) {&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum2" style="color: #606060"&gt;   2:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum3" style="color: #606060"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ((&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.isValidContext(context)) &amp;amp;&amp;amp; (&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.isValidOptionSet(attributeName)) &amp;amp;&amp;amp; (&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.isValidOptionSet(dependentAttributeName))) {&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum4" style="color: #606060"&gt;   4:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.updateDependentOptionSet(attributeName, dependentAttributeName, &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;)&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum5" style="color: #606060"&gt;   5:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum6" style="color: #606060"&gt;   6:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum7" style="color: #606060"&gt;   7:&lt;/span&gt;         alert(&lt;span style="color: #006080"&gt;"This function is expecting three parameters. Context, attribute name and dependent attribute name"&lt;/span&gt;);&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum8" style="color: #606060"&gt;   8:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum9" style="color: #606060"&gt;   9:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum10" style="color: #606060"&gt;  10:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum11" style="color: #606060"&gt;  11:&lt;/span&gt; attributeOnChange(context, dependentAttributeName) {&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum12" style="color: #606060"&gt;  12:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum13" style="color: #606060"&gt;  13:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ((&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.isValidContext(context)) &amp;amp;&amp;amp; (&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.isValidOptionSet(dependentAttributeName))) {&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum14" style="color: #606060"&gt;  14:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; attributeName = context.getEventSource().getName();&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum15" style="color: #606060"&gt;  15:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.updateDependentOptionSet(attributeName, dependentAttributeName, &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;)&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum16" style="color: #606060"&gt;  16:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum17" style="color: #606060"&gt;  17:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum18" style="color: #606060"&gt;  18:&lt;/span&gt;         alert(&lt;span style="color: #006080"&gt;"This function is expecting two parameters. Context and dependent attribute name"&lt;/span&gt;);&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum19" style="color: #606060"&gt;  19:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum20" style="color: #606060"&gt;  20:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum21" style="color: #606060"&gt;  21:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum22" style="color: #606060"&gt;  22:&lt;/span&gt; updateDependentOptionSet(attributeName, dependentAttributeName, isFormOnLoad) {&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum23" style="color: #606060"&gt;  23:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum24" style="color: #606060"&gt;  24:&lt;/span&gt;     &lt;span style="color: #008000"&gt;// Get the attribute&lt;/span&gt;&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum25" style="color: #606060"&gt;  25:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; attribute = Xrm.Page.data.entity.attributes.get(attributeName);&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum26" style="color: #606060"&gt;  26:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; attributeValue = attribute.getValue();&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum27" style="color: #606060"&gt;  27:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum28" style="color: #606060"&gt;  28:&lt;/span&gt;     &lt;span style="color: #008000"&gt;// Get the dependent attribute&lt;/span&gt;&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum29" style="color: #606060"&gt;  29:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; dependentAttribute = Xrm.Page.data.entity.attributes.get(dependentAttributeName);&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum30" style="color: #606060"&gt;  30:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; dependentAttributeValue = dependentAttribute.getValue();&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum31" style="color: #606060"&gt;  31:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; dependentAttributeInitialValue = dependentAttribute.getInitialValue();&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum32" style="color: #606060"&gt;  32:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum33" style="color: #606060"&gt;  33:&lt;/span&gt;     &lt;span style="color: #008000"&gt;// There may be more than one control on the form for this dependent attribute, so get an array of these controls&lt;/span&gt;&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum34" style="color: #606060"&gt;  34:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; dependentAttributeControls = &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.getAttributeControls(dependentAttributeName);&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum35" style="color: #606060"&gt;  35:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum36" style="color: #606060"&gt;  36:&lt;/span&gt;     &lt;span style="color: #008000"&gt;// Make sure that we actually have an array with at least one control&lt;/span&gt;&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum37" style="color: #606060"&gt;  37:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ((dependentAttributeControls != &lt;span style="color: #006080"&gt;"undefined"&lt;/span&gt;) &amp;amp;&amp;amp; (dependentAttributeControls != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)) {&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum38" style="color: #606060"&gt;  38:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum39" style="color: #606060"&gt;  39:&lt;/span&gt;         &lt;span style="color: #008000"&gt;// Loop through each control in the array&lt;/span&gt;&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum40" style="color: #606060"&gt;  40:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; i = 0; i &amp;lt;= dependentAttributeControls.length - 1; i++) {&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum41" style="color: #606060"&gt;  41:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum42" style="color: #606060"&gt;  42:&lt;/span&gt;             &lt;span style="color: #008000"&gt;// For each control, first delete all the options&lt;/span&gt;&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum43" style="color: #606060"&gt;  43:&lt;/span&gt;             dependentAttributeControls[i].clearOptions();&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum44" style="color: #606060"&gt;  44:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum45" style="color: #606060"&gt;  45:&lt;/span&gt;             &lt;span style="color: #008000"&gt;// Now get an array of dependent options&lt;/span&gt;&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum46" style="color: #606060"&gt;  46:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; dependentAttributeValues = &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.getDependentAttributeValues(attributeValue);&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum47" style="color: #606060"&gt;  47:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum48" style="color: #606060"&gt;  48:&lt;/span&gt;             &lt;span style="color: #008000"&gt;// Make sure that we actually have an array with at least one option&lt;/span&gt;&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum49" style="color: #606060"&gt;  49:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ((dependentAttributeValues != &lt;span style="color: #006080"&gt;"undefined"&lt;/span&gt;) &amp;amp;&amp;amp; (dependentAttributeValues != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;) &amp;amp;&amp;amp; (dependentAttributeValues.length != 0)) {&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum50" style="color: #606060"&gt;  50:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum51" style="color: #606060"&gt;  51:&lt;/span&gt;                 &lt;span style="color: #008000"&gt;// Loop through each option in the array, and add each one to the control&lt;/span&gt;&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum52" style="color: #606060"&gt;  52:&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; j = 0; j &amp;lt;= dependentAttributeValues.length - 1; j++) {&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum53" style="color: #606060"&gt;  53:&lt;/span&gt;                     dependentAttributeControls[i].addOption(dependentAttribute.getOption(dependentAttributeValues[j]));&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum54" style="color: #606060"&gt;  54:&lt;/span&gt;                 }&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum55" style="color: #606060"&gt;  55:&lt;/span&gt;             }&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum56" style="color: #606060"&gt;  56:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum57" style="color: #606060"&gt;  57:&lt;/span&gt;                 dependentAttribute.setValue(&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;);&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum58" style="color: #606060"&gt;  58:&lt;/span&gt;             }&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum59" style="color: #606060"&gt;  59:&lt;/span&gt;         }&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum60" style="color: #606060"&gt;  60:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum61" style="color: #606060"&gt;  61:&lt;/span&gt;     &lt;span style="color: #008000"&gt;// If this is the OnLoad event we need to restore the original value of the dependent attribute, since this got wiped out earlier when we called dependentAttributeControls[i].clearOptions()&lt;/span&gt;&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum62" style="color: #606060"&gt;  62:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ((isFormOnLoad) &amp;amp;&amp;amp; (dependentAttributeInitialValue != &lt;span style="color: #006080"&gt;"undefined"&lt;/span&gt;) &amp;amp;&amp;amp; (dependentAttributeInitialValue != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)) {&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum63" style="color: #606060"&gt;  63:&lt;/span&gt;         dependentAttribute.setValue(dependentAttributeInitialValue);&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum64" style="color: #606060"&gt;  64:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum65" style="color: #606060"&gt;  65:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Using the same option sets from the previous example, all I had to do was to add the country and region fields to a form, and wire up both the form &lt;strong&gt;OnLoad()&lt;/strong&gt; and region field &lt;strong&gt;OnChange()&lt;/strong&gt; events as shown below.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-56-40-metablogapi/5557.CRM_2D00_2011_2D00_Dependent_2D00_Option_2D00_Set_2D00_Part_2D00_II_2D00_Example_2D00_2_5F00_23C01450.jpg"&gt;&lt;img height="405" width="504" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-56-40-metablogapi/0755.CRM_2D00_2011_2D00_Dependent_2D00_Option_2D00_Set_2D00_Part_2D00_II_2D00_Example_2D00_2_5F00_thumb_5F00_4FFC9B34.jpg" alt="CRM 2011 Dependent Option Set Part II Example 2" border="0" title="CRM 2011 Dependent Option Set Part II Example 2" 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" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-56-40-metablogapi/5040.CRM_2D00_2011_2D00_Dependent_2D00_Option_2D00_Set_2D00_Part_2D00_II_2D00_Example_2D00_3_5F00_068A4679.jpg"&gt;&lt;img height="405" width="504" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-56-40-metablogapi/3073.CRM_2D00_2011_2D00_Dependent_2D00_Option_2D00_Set_2D00_Part_2D00_II_2D00_Example_2D00_3_5F00_thumb_5F00_5E0B6464.jpg" alt="CRM 2011 Dependent Option Set Part II Example 3" border="0" title="CRM 2011 Dependent Option Set Part II Example 3" 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" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As before, I have selected the &amp;ldquo;Pass execution context as first parameter&amp;rdquo; checkbox, and specified the name of the relevant fields (in quotes). If you want to try this out on your own CRM 2011 environment, I have exported my solution as an unmanaged package, which you can download &lt;a target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Components-PostAttachments/00-10-11-58-92/regionsandcountries_5F00_1_5F00_0_5F00_0_5F00_0.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Please note, there is a bug in &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=0c7dcc45-9d41-4e2e-8126-895517b4274c" title="Download CRM 2011 Beta"&gt;CRM 2011 Beta&lt;/a&gt; (build 05.00.9585.101) which affects the behaviour of the &lt;strong&gt;Xrm.Page.ui.control.clearOptions()&lt;/strong&gt; method, so this solution will only work if you are using &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c3f82c6f-c123-4e80-b9b2-ee422a16b91d" title="Download CRM 2011 Release Candidate"&gt;CRM 2011 Release Candidate&lt;/a&gt; (build 05.00.9688.34).&lt;/p&gt;
&lt;p&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.laughingboy.net/" style="color: #ffffff; font-size: 6px;"&gt;Laughing Boy&lt;/a&gt; &lt;a href="http://www.chestnutspreschool.co.uk/" style="color: #ffffff; font-size: 6px;"&gt;Chestnuts Pre-School&lt;/a&gt; &lt;a href="http://www.chaingangreading.com/" style="color: #ffffff; font-size: 6px;"&gt;Chain Gang&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10115892" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-11-58-92/regionsandcountries_5F00_1_5F00_0_5F00_0_5F00_0.zip" length="11014" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/JScript/">JScript</category><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+2011/">CRM 2011</category></item><item><title>CRM 2011 Release Candidate Available</title><link>http://blogs.msdn.com/b/ukcrm/archive/2010/12/15/crm-2011-release-candidate-available.aspx</link><pubDate>Wed, 15 Dec 2010 00:16:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10105026</guid><dc:creator>Simon Hutson</dc:creator><slash:comments>2</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/ukcrm/commentapi.aspx?WeblogPostID=10105026</wfw:comment><comments>http://blogs.msdn.com/b/ukcrm/archive/2010/12/15/crm-2011-release-candidate-available.aspx#comments</comments><description>&lt;p&gt;Walk The Dinosaur&amp;hellip;&lt;/p&gt;
&lt;p&gt;I just spotted that the on-premises RC (Release Candidate) has just been posted on the Microsoft Downloads web site. I shall be upgrading my Beta demo system as soon as I can.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Microsoft Dynamics CRM 2011 Server Release Candidate 05.00.9688.34 &lt;/b&gt;&lt;br /&gt;&lt;a target="_blank" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c3f82c6f-c123-4e80-b9b2-ee422a16b91d"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c3f82c6f-c123-4e80-b9b2-ee422a16b91d&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Microsoft Dynamics CRM 2011 for Microsoft Office Outlook 05.00.9688.32 &lt;br /&gt;&lt;/b&gt;&lt;a target="_blank" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=22dc423a-7194-491e-a169-6ace16bfdd36"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=22dc423a-7194-491e-a169-6ace16bfdd36&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Microsoft Dynamics CRM 2011 Language Pack (41 Languages) &lt;br /&gt;&lt;/b&gt;&lt;a target="_blank" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=db44c564-2338-407e-980a-c9c83ad37729"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=db44c564-2338-407e-980a-c9c83ad37729&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Microsoft Dynamics CRM 2011 Report Authoring Extension &lt;br /&gt;&lt;/b&gt;&lt;a target="_blank" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=64a09b75-8376-4b9d-aea3-8a83a1837c4d"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=64a09b75-8376-4b9d-aea3-8a83a1837c4d&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Microsoft Dynamics CRM 2011 E-mail Router &lt;br /&gt;&lt;/b&gt;&lt;a target="_blank" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a995f6ad-0099-42fd-9b22-cf7b3d40a2bf"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a995f6ad-0099-42fd-9b22-cf7b3d40a2bf&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Microsoft Dynamics CRM 2011 List Component for Microsoft SharePoint Server 2010 &lt;br /&gt;&lt;/b&gt;&lt;a target="_blank" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=23c0f351-8694-4d92-9ddf-34a949aec6a7"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=23c0f351-8694-4d92-9ddf-34a949aec6a7&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Enjoy the CRM 2011 RC goodness.&lt;/p&gt;
&lt;p&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.laughingboy.net/" style="color: #ffffff; font-size: 6px;"&gt;Laughing Boy&lt;/a&gt; &lt;a href="http://www.chestnutspreschool.co.uk/" style="color: #ffffff; font-size: 6px;"&gt;Chestnuts Pre-School&lt;/a&gt; &lt;a href="http://www.chaingangreading.com/" style="color: #ffffff; font-size: 6px;"&gt;Chain Gang&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10105026" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+2011/">CRM 2011</category></item><item><title>UK CRM Blog is 5 Today</title><link>http://blogs.msdn.com/b/ukcrm/archive/2010/12/06/5-years-of-crm-blogging.aspx</link><pubDate>Mon, 06 Dec 2010 19:13:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10100925</guid><dc:creator>Simon Hutson</dc:creator><slash:comments>0</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/ukcrm/commentapi.aspx?WeblogPostID=10100925</wfw:comment><comments>http://blogs.msdn.com/b/ukcrm/archive/2010/12/06/5-years-of-crm-blogging.aspx#comments</comments><description>&lt;p&gt;I'm Still Standing...&lt;/p&gt;
&lt;p&gt;I can't believe it, but 5 years after I arrived on the blogsphere with my &lt;a target="_blank" href="http://blogs.msdn.com/b/ukcrm/archive/2005/12/06/500733.aspx" title="Introduction To My Blog"&gt;first post&lt;/a&gt;,&amp;nbsp;announcing the general availability of Microsoft Dynamics CRM 3.0, I'm still here.&amp;nbsp;Back then,&amp;nbsp;I didn't expect to be working in the world of business solutions for another five years, but looking back, I can honestly say that every single day has been a blast. During that time I have moved house once, become a father for the second time, been through four office moves, broken one XBOX console, had five laptops refreshes, and changed bands twice.&lt;/p&gt;
&lt;p&gt;After re-reading my first post, I think I have managed to stick to closely to my original plan - "&lt;em&gt;I don't have a particular agenda or plan for this, so I will probably write about stuff that I've been working on during the week an hopefully you'll find some useful nuggets of information that will make you MSCRM life a little easier.&lt;/em&gt;"&lt;/p&gt;
&lt;p&gt;As a thank you to everyone who has stopped by over the years, I thought I would run a little competition. You may have noticed that I start almost every blog post with a &lt;a target="_blank" href="http://blogs.msdn.com/b/ukcrm/archive/2006/02/25/blog-postings-and-song-titles.aspx" title="Blog postings and song titles"&gt;song title&lt;/a&gt;, so I thought it would be a "spiffing wheeze" to find out who can guess correctly the&amp;nbsp;artist or composer for each of the 170+ song titles. You have until early January 2011 to submit your answers via my special competition e-mail address, &lt;a href="mailto:ukcrmcompetition@live.co.uk"&gt;ukcrmcompetition@live.co.uk&lt;/a&gt;, and in the meantime&amp;nbsp;I'll be sorting out some suitable swag for the person who correctly guesses the highest number of right answers.&lt;/p&gt;
&lt;p&gt;To make it easier for me to score the answers, please use the Excel spreadsheet attached &lt;a target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Components-PostAttachments/00-10-10-09-25/UK-CRM-Blog-Competition.xlsx"&gt;here&lt;/a&gt;. The only rule is that my decision is final :-)&lt;/p&gt;
&lt;p&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.laughingboy.net/" style="color: #ffffff; font-size: 6px;"&gt;Laughing Boy&lt;/a&gt; &lt;a href="http://www.chestnutspreschool.co.uk/" style="color: #ffffff; font-size: 6px;"&gt;Chestnuts Pre-School&lt;/a&gt; &lt;a href="http://www.chaingangreading.com/" style="color: #ffffff; font-size: 6px;"&gt;Chain Gang&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10100925" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-10-09-25/UK-CRM-Blog-Competition.xlsx" length="14153" type="application/vnd.openxmlformats-officedocument.spre" /><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/Off+Topic/">Off Topic</category></item><item><title>CRM 2011 Dependent Option Set Example</title><link>http://blogs.msdn.com/b/ukcrm/archive/2010/12/02/crm-2011-dependent-option-set-example.aspx</link><pubDate>Thu, 02 Dec 2010 15:08:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10099537</guid><dc:creator>Simon Hutson</dc:creator><slash:comments>3</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/ukcrm/commentapi.aspx?WeblogPostID=10099537</wfw:comment><comments>http://blogs.msdn.com/b/ukcrm/archive/2010/12/02/crm-2011-dependent-option-set-example.aspx#comments</comments><description>&lt;p&gt;Bu2b&amp;hellip;&lt;/p&gt;
&lt;p&gt;With the introduction of&amp;nbsp; Option Sets in CRM 2011 (formerly known as picklists), it is now possible to create common drop-down lists across multiple entities and forms. On a recent project I had a specific requirement to build a solution that used two related option sets. If I selected a particular country from the first drop-down, the region would automatically selected from the second drop-down.&lt;/p&gt;
&lt;p&gt;That doesn&amp;rsquo;t sound too tricky, and indeed writing a small amount of JScript I was able to achieve this fairly quickly. The problem came about when I wanted to use these option sets multiple times on a single entity. In this example, I needed to track &amp;ldquo;Country of Birth&amp;rdquo;, &amp;ldquo;Country of Residence&amp;rdquo; and &amp;ldquo;Tax Residency&amp;rdquo; as well as the associated regions. Now I have three variations of the same JScript code, with the only difference being the CRM schema names of the various country and region fields.&lt;/p&gt;
&lt;p&gt;This got me thinking. Could I build a JScript library that would allow me to reuse the dependent option set logic, without having to hard-code specific field names? A quick search through the CRM 2011 SDK revealed several major enhancements to the client-side programming model, and of specific interest to me were:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The ability to access the form execution context. When you associate a JScript library function with a CRM form event (such as a field &lt;strong&gt;OnChange&lt;/strong&gt; event), you can now pass the execution context as a parameter to your function. The execution context object has a method called &lt;strong&gt;getEventSource()&lt;/strong&gt;, which returns a reference to the field that triggered the event. In this example, I no longer have to hard-code the name of the country field that triggered the &lt;strong&gt;OnChange&lt;/strong&gt; event. &lt;/li&gt;
&lt;li&gt;The ability to pass additional parameters to a JScript library function. In this example I specify the name of the region field as an additional parameter, instead of using a hard-coded value in my code. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So what does my code look like? Below, I have a simple JScript function called &lt;strong&gt;attributeOnChange()&lt;/strong&gt;, which takes the both execution context and the dependent attribute name as input parameters. After some some simple error handling, the function then calls a second function &lt;strong&gt;getDependentAttributeValue()&lt;/strong&gt;, which actually does the work of selecting the correct region, based on which country was selected. I&amp;rsquo;ve chosen to use the names &lt;strong&gt;attribute&lt;/strong&gt; and &lt;strong&gt;dependentAttribute&lt;/strong&gt; instead of &lt;strong&gt;country&lt;/strong&gt; and &lt;strong&gt;region&lt;/strong&gt;, so I can reuse this code for any dependent option sets.&lt;/p&gt;
&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;
&lt;div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum1" style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; attributeOnChange(context, dependentAttributeName) {&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum2" style="color: #606060"&gt;   2:&lt;/span&gt;     &lt;span style="color: #008000"&gt;// Check the context object exists and that it has a method getEventSource()&lt;/span&gt;&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum3" style="color: #606060"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ((context != &lt;span style="color: #006080"&gt;"undefined"&lt;/span&gt;) &amp;amp;&amp;amp; (context != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;) &amp;amp;&amp;amp; (context.getEventSource)) {&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum4" style="color: #606060"&gt;   4:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum5" style="color: #606060"&gt;   5:&lt;/span&gt;         &lt;span style="color: #008000"&gt;// Get the attribute that triggered this event&lt;/span&gt;&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum6" style="color: #606060"&gt;   6:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; attribute = context.getEventSource();&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum7" style="color: #606060"&gt;   7:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum8" style="color: #606060"&gt;   8:&lt;/span&gt;         &lt;span style="color: #008000"&gt;// Check the attribute type is an OptionSet&lt;/span&gt;&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum9" style="color: #606060"&gt;   9:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (attribute.getAttributeType() == &lt;span style="color: #006080"&gt;"optionset"&lt;/span&gt;) {&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum10" style="color: #606060"&gt;  10:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum11" style="color: #606060"&gt;  11:&lt;/span&gt;             &lt;span style="color: #008000"&gt;// Check the dependent attribute name has been passed as a parameter, and that it is a string&lt;/span&gt;&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum12" style="color: #606060"&gt;  12:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ((dependentAttributeName != &lt;span style="color: #006080"&gt;"undefined"&lt;/span&gt;) &amp;amp;&amp;amp; (dependentAttributeName != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;) &amp;amp;&amp;amp; (&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt; (dependentAttributeName) == &lt;span style="color: #006080"&gt;"string"&lt;/span&gt;)) {&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum13" style="color: #606060"&gt;  13:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum14" style="color: #606060"&gt;  14:&lt;/span&gt;                 &lt;span style="color: #008000"&gt;// Get the dependent attribute object from the CRM page&lt;/span&gt;&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum15" style="color: #606060"&gt;  15:&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; dependentAttribute = Xrm.Page.data.entity.attributes.get(dependentAttributeName);&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum16" style="color: #606060"&gt;  16:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum17" style="color: #606060"&gt;  17:&lt;/span&gt;                 &lt;span style="color: #008000"&gt;// Check the dependent attribute object exists&lt;/span&gt;&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum18" style="color: #606060"&gt;  18:&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ((dependentAttribute != &lt;span style="color: #006080"&gt;"undefined"&lt;/span&gt;) &amp;amp;&amp;amp; (dependentAttribute != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)) {&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum19" style="color: #606060"&gt;  19:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum20" style="color: #606060"&gt;  20:&lt;/span&gt;                     &lt;span style="color: #008000"&gt;// Check the dependent attribute type is an OptionSet&lt;/span&gt;&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum21" style="color: #606060"&gt;  21:&lt;/span&gt;                     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (dependentAttribute.getAttributeType() == &lt;span style="color: #006080"&gt;"optionset"&lt;/span&gt;) {&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum22" style="color: #606060"&gt;  22:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum23" style="color: #606060"&gt;  23:&lt;/span&gt;                         &lt;span style="color: #008000"&gt;// Get the selected attribute OptionSet value&lt;/span&gt;&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum24" style="color: #606060"&gt;  24:&lt;/span&gt;                         &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; attributeValue = attribute.getValue();&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum25" style="color: #606060"&gt;  25:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum26" style="color: #606060"&gt;  26:&lt;/span&gt;                         &lt;span style="color: #008000"&gt;// Lookup the dependent attribute OptionSet value&lt;/span&gt;&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum27" style="color: #606060"&gt;  27:&lt;/span&gt;                         &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; dependentAttributeValue = &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.getDependentAttributeValue(attributeValue);&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum28" style="color: #606060"&gt;  28:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum29" style="color: #606060"&gt;  29:&lt;/span&gt;                         &lt;span style="color: #008000"&gt;// Update the dependent attribute OptionSet&lt;/span&gt;&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum30" style="color: #606060"&gt;  30:&lt;/span&gt;                         dependentAttribute.setValue(dependentAttributeValue);&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum31" style="color: #606060"&gt;  31:&lt;/span&gt;                     }&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum32" style="color: #606060"&gt;  32:&lt;/span&gt;                     &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum33" style="color: #606060"&gt;  33:&lt;/span&gt;                         alert(&lt;span style="color: #006080"&gt;"The second parameter of this function should be the name of an OptionSet attribute. The attribute \""&lt;/span&gt; + dependentAttributeName + &lt;span style="color: #006080"&gt;"\" is not an OptionSet."&lt;/span&gt;);&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum34" style="color: #606060"&gt;  34:&lt;/span&gt;                     }&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum35" style="color: #606060"&gt;  35:&lt;/span&gt;                 }&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum36" style="color: #606060"&gt;  36:&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum37" style="color: #606060"&gt;  37:&lt;/span&gt;                     alert(&lt;span style="color: #006080"&gt;"The second parameter of this function \""&lt;/span&gt; + dependentAttributeName + &lt;span style="color: #006080"&gt;"\" is not a valid attribute name."&lt;/span&gt;);&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum38" style="color: #606060"&gt;  38:&lt;/span&gt;                 }&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum39" style="color: #606060"&gt;  39:&lt;/span&gt;             }&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum40" style="color: #606060"&gt;  40:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum41" style="color: #606060"&gt;  41:&lt;/span&gt;                 alert(&lt;span style="color: #006080"&gt;"This function requires you to pass the name of the dependent attribute as the second parameter e.g. \"crm_attributename\"."&lt;/span&gt;);&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum42" style="color: #606060"&gt;  42:&lt;/span&gt;             }&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum43" style="color: #606060"&gt;  43:&lt;/span&gt;         }&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum44" style="color: #606060"&gt;  44:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum45" style="color: #606060"&gt;  45:&lt;/span&gt;             alert(&lt;span style="color: #006080"&gt;"This function should only be used with an OptionSet attribute. The attribute \""&lt;/span&gt; + attribute.getName() + &lt;span style="color: #006080"&gt;"\" is not an OptionSet."&lt;/span&gt;);&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum46" style="color: #606060"&gt;  46:&lt;/span&gt;         }&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum47" style="color: #606060"&gt;  47:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum48" style="color: #606060"&gt;  48:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum49" style="color: #606060"&gt;  49:&lt;/span&gt;         alert(&lt;span style="color: #006080"&gt;"This function requires you to pass the execution context as the first parameter."&lt;/span&gt;);&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum50" style="color: #606060"&gt;  50:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--crlf--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum51" style="color: #606060"&gt;  51:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/!--crlf--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;So now I have the necessary option sets and JScript library to solve my original problem, all that&amp;rsquo;s left is to add the fields to a form, and wire-up the &lt;strong&gt;OnChange()&lt;/strong&gt; event as shown.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-56-40-metablogapi/4885.CRM_2D00_2011_2D00_Dependent_2D00_Option_2D00_Set_2D00_Example_5F00_1218DBF0.png"&gt;&lt;img height="327" width="504" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-56-40-metablogapi/3817.CRM_2D00_2011_2D00_Dependent_2D00_Option_2D00_Set_2D00_Example_5F00_thumb_5F00_30831CD9.png" alt="CRM 2011 Dependent Option Set Example" border="0" title="CRM 2011 Dependent Option Set Example" 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" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As you can see, I have selected the &amp;ldquo;Pass execution context as first parameter&amp;rdquo; checkbox, and specified the name of the region field &amp;ldquo;srh_region&amp;rdquo;, not forgetting to put quotes around the name. If you want to try this out in your own CRM 2011 environment, I have exported my solution as an unmanaged package, which you may download &lt;a target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Components-PostAttachments/00-10-09-95-37/countriesandregions_5F00_1_5F00_0_5F00_0_5F00_0.zip" title="CRM 2011 Solution Package"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.laughingboy.net/" style="color: #ffffff; font-size: 6px;"&gt;Laughing Boy&lt;/a&gt; &lt;a href="http://www.chestnutspreschool.co.uk/" style="color: #ffffff; font-size: 6px;"&gt;Chestnuts Pre-School&lt;/a&gt; &lt;a href="http://www.chaingangreading.com/" style="color: #ffffff; font-size: 6px;"&gt;Chain Gang&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10099537" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-09-95-37/countriesandregions_5F00_1_5F00_0_5F00_0_5F00_0.zip" length="10216" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/JScript/">JScript</category><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+2011/">CRM 2011</category></item><item><title>Off Topic: Zune On Windows Server 2008 R2</title><link>http://blogs.msdn.com/b/ukcrm/archive/2010/11/26/off-topic-zune-on-windows-server-2008-r2.aspx</link><pubDate>Fri, 26 Nov 2010 10:53:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10096959</guid><dc:creator>Simon Hutson</dc:creator><slash:comments>4</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/ukcrm/commentapi.aspx?WeblogPostID=10096959</wfw:comment><comments>http://blogs.msdn.com/b/ukcrm/archive/2010/11/26/off-topic-zune-on-windows-server-2008-r2.aspx#comments</comments><description>&lt;p&gt;Soul Vaccination&amp;hellip;&lt;/p&gt;
&lt;p&gt;I try not to post off-topic stuff too often, but this is kind of related to my CRM demo laptop configuration so there is a link. As I mentioned in my &lt;a target="_blank" href="http://blogs.msdn.com/b/ukcrm/archive/2010/10/02/my-new-demo-laptop.aspx" title="My New Demo Laptop"&gt;earlier post&lt;/a&gt; I have made the move from Windows 7 to Windows Server 2008 R2 and Hyper-V for my CRM 2011 demo environment. Although great for demos, there is some software that was not designed to run on a server.&lt;/p&gt;
&lt;p&gt;I have been a &lt;a target="_blank" href="http://www.zune.net/en-us/products/mp3players/zune4/features.htm" title="Zune 4GB"&gt;Zune&lt;/a&gt; user for a couple of years now, primarily because of the custom Wolfson DAC chipset which, combined with the lossless WMA audio that I use with all my music and my high-end &lt;a target="_blank" href="http://www.westone.com/catalog/um2-dual-driver-monitor"&gt;Westone UM2 In-Ear Monitors&lt;/a&gt;, delivers hi-fi quality music on the move (I am pretty anal when it comes to my music listening standards). Unfortunately, the Zune software is only supported on Windows XP, Vista and Windows 7, and will not install on Windows Server 2008 R2&amp;hellip;or so I thought.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;a target="_blank" href="http://www.zune.net/products/software/download/" title="Download Zune Software"&gt;&lt;img height="162" width="200" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-56-40-metablogapi/4137.Zune_2D00_Logo_5F00_75E0B5D4.png" alt="Zune Logo" border="0" title="Zune Logo" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I just came across this post, which has a couple of simple steps that will bypass the OS check during installation of the Zune software, and has allowed me to combine my CRM 2011 and Zune passions. Oh happy days :-)&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://robmensching.com/blog/posts/2009/9/12/How-to-install-Zune-software-on-Windows-2008-R2" title="How to install Zune software on Windows 2008 R2"&gt;How to install Zune software on Windows 2008 R2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.laughingboy.net/" style="color: #ffffff; font-size: 6px;"&gt;Laughing Boy&lt;/a&gt; &lt;a href="http://www.chestnutspreschool.co.uk/" style="color: #ffffff; font-size: 6px;"&gt;Chestnuts Pre-School&lt;/a&gt; &lt;a href="http://www.chaingangreading.com/" style="color: #ffffff; font-size: 6px;"&gt;Chain Gang&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10096959" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/Off+Topic/">Off Topic</category></item><item><title>60,000 User, Real World, CRM Deployment</title><link>http://blogs.msdn.com/b/ukcrm/archive/2010/11/23/60-000-user-real-world-crm-deployment.aspx</link><pubDate>Tue, 23 Nov 2010 12:31:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10095356</guid><dc:creator>Simon Hutson</dc:creator><slash:comments>0</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/ukcrm/commentapi.aspx?WeblogPostID=10095356</wfw:comment><comments>http://blogs.msdn.com/b/ukcrm/archive/2010/11/23/60-000-user-real-world-crm-deployment.aspx#comments</comments><description>&lt;p&gt;Alien Water Kiss&amp;hellip;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;&lt;em&gt;United States Air Force European Command (USAFE) uses Task Management Tracker to align directorate; tool expands to over 60,000 users across 23 government organizations&lt;/em&gt;&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;All I can say is &amp;ldquo;blimey, that&amp;rsquo;s a lot of users". For more information, you can read the full press article &lt;a target="_blank" href="http://www.microsoft.com/presspass/press/2010/nov10/11-15msdynamicstaskpr.mspx" title="Customer Spotlight: Microsoft Dynamics CRM Task Management Solution Helps U.S. Government Achieve Significant Process Improvements"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.laughingboy.net/" style="color: #ffffff; font-size: 6px;"&gt;Laughing Boy&lt;/a&gt; &lt;a href="http://www.chestnutspreschool.co.uk/" style="color: #ffffff; font-size: 6px;"&gt;Chestnuts Pre-School&lt;/a&gt; &lt;a href="http://www.chaingangreading.com/" style="color: #ffffff; font-size: 6px;"&gt;Chain Gang&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10095356" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+4-0/">CRM 4.0</category><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/Solutions/">Solutions</category></item><item><title>Best Buy-Side CRM Award</title><link>http://blogs.msdn.com/b/ukcrm/archive/2010/11/22/best-buy-side-crm-award.aspx</link><pubDate>Mon, 22 Nov 2010 16:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10094976</guid><dc:creator>Simon Hutson</dc:creator><slash:comments>0</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/ukcrm/commentapi.aspx?WeblogPostID=10094976</wfw:comment><comments>http://blogs.msdn.com/b/ukcrm/archive/2010/11/22/best-buy-side-crm-award.aspx#comments</comments><description>&lt;p&gt;The Whisper&amp;hellip;&lt;/p&gt;
&lt;p&gt;I just received a &lt;a target="_blank" href="http://www.digiterre.com/about-digiterre/news/archive/digiterre-awarded-best-buy-side-crm-2010" title="Press release: Digiterre wins best buy-side CRM product award"&gt;press release&lt;/a&gt; from &lt;a target="_blank" href="http://www.digiterre.com/" title="Digiterre"&gt;Digiterre&lt;/a&gt;, one of our UK CRM partners, announcing they had won the best CRM provider in Buy-Side Technology magazine&amp;rsquo;s prestigious awards for leading technology providers in the investment management sector.&lt;/p&gt;
&lt;p&gt;&lt;img height="325" width="520" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-56-40-metablogapi/8206.Digiterre_2D00_Best_2D00_Buy_2D00_Side_2D00_CRM_2D00_Award_5F00_thumb_5F00_15AF70DF.png" alt="Digiterre Best Buy-Side CRM Award" border="0" title="Digiterre Best Buy-Side CRM Award" 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" /&gt;&lt;/p&gt;
&lt;p&gt;Built on Microsoft Dynamics CRM 4.0 (and soon to be upgraded to CRM 2011), &lt;a target="_blank" href="http://www.digiterre.com/dcrm" title="Digiterre dCRM"&gt;dCRM&lt;/a&gt; is built specifically to support marketing and investor servicing processes within the investment management sector. Its fund flows module allows investment managers to link investor holdings data with relationship information and is one of several aspects of the system which differentiate it strongly from other, more generic CRM applications.&lt;/p&gt;
&lt;p&gt;I have been working with &lt;a target="_blank" href="http://uk.linkedin.com/pub/ian-murrin/0/152/a13" title="Ian Murrin, CEO, Digiterre"&gt;Ian Murrin&lt;/a&gt; (CEO) and his team for the last 18 months, and have been really impressed with their capital markets solutions focus, their relationships with senior people within this industry, as well as their exceptional CRM &amp;amp; .NET technology skills.&lt;/p&gt;
&lt;p&gt;&lt;img height="246" width="504" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-56-40-metablogapi/4174.Digiterre_2D00_Focus_2D00_Areas_5F00_thumb_5F00_52F025A6.png" alt="Digiterre Focus Areas" border="0" title="Digiterre Focus Areas" 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" /&gt;&lt;/p&gt;
&lt;p&gt;You can download a 2-page dCRM brochure &lt;a target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Components-PostAttachments/00-10-09-49-76/Digiterre-dCRM.pdf" title="Digiterre dCRM Brochure"&gt;here&lt;/a&gt;, and if you want further information you can contact Digiterre directly via their web site &lt;a target="_blank" href="http://www.digiterre.com/about-digiterre/contact-us" title="Contact Digiterre"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.laughingboy.net/" style="color: #ffffff; font-size: 6px;"&gt;Laughing Boy&lt;/a&gt; &lt;a href="http://www.chestnutspreschool.co.uk/" style="color: #ffffff; font-size: 6px;"&gt;Chestnuts Pre-School&lt;/a&gt; &lt;a href="http://www.chaingangreading.com/" style="color: #ffffff; font-size: 6px;"&gt;Chain Gang&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10094976" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-09-49-76/Digiterre-dCRM.pdf" length="171284" type="application/pdf" /><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+4-0/">CRM 4.0</category><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/CRM+2011/">CRM 2011</category><category domain="http://blogs.msdn.com/b/ukcrm/archive/tags/Solutions/">Solutions</category></item></channel></rss>
