<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Microsoft Dynamics Center of Excellence</title><subtitle type="html" /><id>http://blogs.msdn.com/b/dynamics-coe/atom.aspx</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/dynamics-coe/" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/b/dynamics-coe/atom.aspx" /><generator uri="http://telligent.com" version="5.6.50428.7875">Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><updated>2013-01-13T13:33:00Z</updated><entry><title>Dynamics CRM Performance Optimization II. (Anamnesis)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/dynamics-coe/archive/2013/03/18/dynamics-crm-performance-optimization-ii-anamnesis.aspx" /><id>http://blogs.msdn.com/b/dynamics-coe/archive/2013/03/18/dynamics-crm-performance-optimization-ii-anamnesis.aspx</id><published>2013-03-18T15:05:01Z</published><updated>2013-03-18T15:05:01Z</updated><content type="html">&lt;h3&gt;&lt;span style="font-family:Segoe UI"&gt;Dynamics CRM Performance Optimization Blog Series
&lt;/span&gt;&lt;/h3&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/dynamics-coe/archive/2013/03/09/dynamics-crm-performance-optimization.aspx"&gt;&lt;span style="font-family:Segoe UI"&gt;Introduction&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:Segoe UI"&gt;
			&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/dynamics-coe/archive/2013/03/18/dynamics-crm-performance-optimization-ii-anamnesis.aspx"&gt;&lt;span style="font-family:Segoe UI"&gt;Anamnesis&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:Segoe UI"&gt;
			&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Segoe UI"&gt;Diagnosis
&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Segoe UI"&gt;Therapy
&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Segoe UI"&gt;Control Examination
&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3&gt;&lt;span style="font-family:Segoe UI"&gt;Anamnesis
&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;As I explained in the previous post, the purpose of the "Anamnesis" phase of a Dynamics CRM performance optimization engagement is to understand the essence of the performance complaints. Based on a detailed understanding we can follow with the right diagnosis of the problem. So what does it mean "understanding"? In order to understand, you must do following:
&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:Segoe UI"&gt;Talk to the customer
&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Segoe UI"&gt;Verify the complaints in a hands-on experience
&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;We need to talk to our primary customer contact person, but also to the end users from whom the complaints are coming. We need to see the behavior directly on the computers, where it happens. If the poor performance is observed only on remote locations we need to ask the customer to demonstrate it using whatever technology available – conference call, remote access to the computers etc. Further, it is essential to understand if the behavior is role-specific / user-specific and if yes, what the characteristics of the roles or users having performance issues are.
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;At the end of this "anamnesis" exercise, we will have a list of different findings typically falling in one of following 2 major categories:
&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:Segoe UI"&gt;User Interface (visible) issues
&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Segoe UI"&gt;Backend processing issues
&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;In the following part I will give you an overview of typical performance issues from both categories which should be considered as an guidance for subsequent engagement phases:
&lt;/span&gt;&lt;/p&gt;&lt;h4&gt;&lt;span style="font-family:Segoe UI"&gt;User Interface (visible) issues
&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;In the following table I will present you the most typical user interface performance issues:
&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;table style="border-collapse:collapse" border="0"&gt;&lt;colgroup&gt;&lt;col style="width:213px"/&gt;&lt;col style="width:213px"/&gt;&lt;col style="width:213px"/&gt;&lt;/colgroup&gt;&lt;tbody valign="top"&gt;&lt;tr&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  solid #4f81bd 1.0pt; border-left:  solid #4f81bd 1.0pt; border-bottom:  solid #4f81bd 2.25pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;&lt;strong&gt;Issue&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  solid #4f81bd 1.0pt; border-left:  none; border-bottom:  solid #4f81bd 2.25pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  solid #4f81bd 1.0pt; border-left:  none; border-bottom:  solid #4f81bd 2.25pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;&lt;strong&gt;Conditions&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid #4f81bd 1.0pt; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;Overall poor performance&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;This is a very generic issue and must be further analyzed if it can fall into other – more specific category&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;All users?&lt;br/&gt;Selected user groups?&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid #4f81bd 1.0pt; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;Entity form slow load time&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;This is definitely the number one in all hit-lists and the most frequently complained performance issue of all. The reason for this is, that loading of entity forms is something, the users do most of the time and the expectation for good performance is very high.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;All users?&lt;br/&gt;All entity forms?&lt;br/&gt;Selected users groups?&lt;br/&gt;Selected forms?&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid #4f81bd 1.0pt; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;Entity form slow save time&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;Slow saving time is less frequent due to some specific implementation reasons, but also due to lower performance expectations (Broadly accepted expectation is, that saving does "something" in the background and needs some time for that)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;All users?&lt;br/&gt;All entity forms?&lt;br/&gt;Selected users groups?&lt;br/&gt;Selected entity forms?&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid #4f81bd 1.0pt; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;Entity view slow retrieval / Advanced find slow retrieval&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;If this issue occurs we can observe following:
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;- A waiting time before the view rendering starts
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;- The view rendering runs slower than expected&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;All users?&lt;br/&gt;All entity views?&lt;br/&gt;Selected users groups?&lt;br/&gt;Selected entity views?&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid #4f81bd 1.0pt; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;Slow rendering of reports&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;Typically rendering of reports should not be much slower than a couple of seconds. Everything above is recognized as an issue&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;All users?&lt;br/&gt;All reports?&lt;br/&gt;Selected users groups?&lt;br/&gt;Selected reports?&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid #4f81bd 1.0pt; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;Slow rendering of dashboards&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;Dashboards are composite UI constructions, so a longer rendering time can be expected, but if some of the dashboard elements are rendering too slowly the whole user experience suffers.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;All users?&lt;br/&gt;All dashboards?&lt;br/&gt;Selected users groups?&lt;br/&gt;Selected dashboards?&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid #4f81bd 1.0pt; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;Outlook client starting slowly / freezing&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;In most of the Dynamics CRM implementations the Outlook Client is the preferred client-side solution thanks to the synchronization function and offline capability. It is very annoying if users observe significantly lower Outlook performance or even freezing issues after installing the Dynamics CRM client.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;All users?&lt;br/&gt;Selected user groups?&lt;br/&gt;Dependency on Outlook version?&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid #4f81bd 1.0pt; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;Slow SharePoint integration&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;Typically SharePoint folders integrated on Dynamics CRM forms should not render much slower than any other usual sub-grid.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;All users?&lt;br/&gt;On all entity forms?&lt;br/&gt;Selected users groups?&lt;br/&gt;On selected entity forms?&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;
 &lt;/p&gt;&lt;h4&gt;&lt;span style="font-family:Segoe UI"&gt;Backend processing issues
&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;In the following table I will present you the most typical backend performance issues:
&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;table style="border-collapse:collapse" border="0"&gt;&lt;colgroup&gt;&lt;col style="width:213px"/&gt;&lt;col style="width:213px"/&gt;&lt;col style="width:213px"/&gt;&lt;/colgroup&gt;&lt;tbody valign="top"&gt;&lt;tr&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  solid #4f81bd 1.0pt; border-left:  solid #4f81bd 1.0pt; border-bottom:  solid #4f81bd 2.25pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;&lt;strong&gt;Issue&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  solid #4f81bd 1.0pt; border-left:  none; border-bottom:  solid #4f81bd 2.25pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  solid #4f81bd 1.0pt; border-left:  none; border-bottom:  solid #4f81bd 2.25pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;&lt;strong&gt;Conditions&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid #4f81bd 1.0pt; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;Slow workflow execution&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;Dynamics CRM users typically expect, that the workflow triggered by a user interaction is executed latest "in a couple of minutes". Anything between "more" than a couple of minutes and hours/days may be a serious issue, especially when business processes depend on finished workflows.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;All users?&lt;br/&gt;Selected user groups?&lt;br/&gt;All workflows?&lt;br/&gt;Selected workflows?&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid #4f81bd 1.0pt; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;Slow incoming data integration&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;Almost every large Dynamics CRM implementation contains a large portion of integration with surrounding systems. Incoming integration is mostly implemented as:
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;- Real-time
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;- Batch
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;In both cases users expect the data to be in Dynamics CRM "in time", when they need them.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;All data?&lt;br/&gt;Selected data?&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid #4f81bd 1.0pt; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;Slow outgoing data integration&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;The outgoing integration is mostly implemented as real-time, so the user's expectation is the same as in previous.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;All data?&lt;br/&gt;Selected data?&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid #4f81bd 1.0pt; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;Slow server-side E-Mail integration&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;If server-side integration with a messaging system is implemented, users expect same behavior for Dynamics CRM E-Mail activities as for E-Mails themselves – very fast sending out or delivery.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;All E-Mails?&lt;br/&gt;Sending only?&lt;br/&gt;Receiving only?&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid #4f81bd 1.0pt; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;Slow initial data load&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;This is a very specific issue, which does not directly touch end users, but rather the implementation team and is a one-time issue. But never then less, it can be a major show-stopper, especially if a prescribed time slot is given to the implementation team to import huge amounts of initial data. &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid #4f81bd 1.0pt; border-right:  solid #4f81bd 1.0pt"&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;In the next part I will start the most interesting topics around diagnosing the reasons for poor performance, so stay tuned!
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Segoe UI"&gt;Robert Rybaric is an architect in the Microsoft EMEA Dynamics Center of Excellence
&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10403193" width="1" height="1"&gt;</content><author><name>Robert.Rybaric</name><uri>http://blogs.msdn.com/robert.rybaric_4000_live.de/ProfileUrlRedirect.ashx</uri></author><category term="Dynamics CRM" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/Dynamics+CRM/" /><category term="Performance" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/Performance/" /><category term="Optimization" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/Optimization/" /></entry><entry><title>Dynamics CRM Performance Optimization I. (Introduction)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/dynamics-coe/archive/2013/03/09/dynamics-crm-performance-optimization.aspx" /><id>http://blogs.msdn.com/b/dynamics-coe/archive/2013/03/09/dynamics-crm-performance-optimization.aspx</id><published>2013-03-09T08:34:21Z</published><updated>2013-03-09T08:34:21Z</updated><content type="html">&lt;p&gt;A good performance of a Dynamics CRM solution is one of the key success factors of a successful implementation. Well, I assume no one will argue with this statement, but what does it exactly mean a good performance of a Dynamics CRM solution and how to optimize a solution which is supposed to perform poorly? Exactly these questions I will try to answer in a blog series which starts with this first article. I was thinking for a longer time about a suitable analogy from our everyday's life and hope to found one: a Dynamics CRM performance optimization is like a doctor's treatment of a sick patient. Sounds weird? Well, actually it isn't, as you will see in this and a couple of next articles. Here is the planned table of content of the blog series:
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Dynamics CRM Performance Optimization Blog Series
&lt;/strong&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/dynamics-coe/archive/2013/03/09/dynamics-crm-performance-optimization.aspx"&gt;Introduction&lt;/a&gt;
		&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/dynamics-coe/archive/2013/03/18/dynamics-crm-performance-optimization-ii-anamnesis.aspx"&gt;Anamnesis&lt;/a&gt;
		&lt;/li&gt;&lt;li&gt;Diagnosis
&lt;/li&gt;&lt;li&gt;Therapy
&lt;/li&gt;&lt;li&gt;Control Examination
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;First I would try to explain on a high level how does a way from an unsatisfied customer complaining about "poor performance" to a happy one look like. For this I will use the doctor's analogy from the very beginning.
&lt;/p&gt;&lt;h2&gt;Anamnesis
&lt;/h2&gt;&lt;p&gt;The purpose of the "Anamnesis" phase of a performance optimization engagement is to UNDERSTAND. "Poor performance" is obviously too broad, personal and subjective to be able to give any advisory before the problem is understood. As you will see in the next article, it can be everything between the most typical entity form load time and very specific issues like the integrated SharePoint document management solution is slow, or the Outlook client starts slowly and freezes. I will present you an overview of most common (and less common as well) performance issues, how to categorize and prioritize them and what are the best ways to start diagnosing them.
&lt;/p&gt;&lt;h2&gt;Diagnosis
&lt;/h2&gt;&lt;p&gt;After we have fully understood the problem it is necessary to find the cause, or more typically the causes, as it is not realistic to expect that a poor performance of a Dynamics CRM solution is caused by one single reason. In other words it is never the "magic button" which just needs to be pressed and everything is solved and everyone is happy. In this phase we need deep understanding of the products involved in the solution as well a good toolset to analyze possible performance bottlenecks. I will present you the diagnosis methods, tools and metrics and how to document the findings in a meaningful way. It is not uncommon that this phase can lead to finger-pointing and so a rock-solid documentation is crucial.
&lt;/p&gt;&lt;h2&gt;Therapy
&lt;/h2&gt;&lt;p&gt;Great, problem understood, causes identified and the therapy can begin. Is it really so simple? Unfortunately not. Like in medicine, we have simple performance issues as well as very hard, which cannot be solved by taking Aspirin for a week. But the good news – every Dynamics CRM solution can be performance optimized with the right therapy, just the therapy can be sometimes longer and more expensive. I will show you how to create a "therapy plan", in other words a set of performance optimization recommendations with respect to the customer's individual situation and constraints and cost/value benefits. After the "therapy plan" was presented to the customer, the immediate performance optimization engagement ends. But a good doctor will always see the success of his therapy so a regular contact with the customer in form of "control examinations" is absolutely necessary.
&lt;/p&gt;&lt;h2&gt;Control Examination
&lt;/h2&gt;&lt;p&gt;A doctor is always just an advisor to his patient – in a good hope the patient is willing to follow his advisory. Same applies for a Dynamics CRM performance optimization engagement. The therapy is a set of optimization recommendations and the success depends on the customer's willingness to implement the recommendations. In this article I will show you how to best accompany the customer along the way of implementing the performance optimization recommendations, how to measure the improvements and document the success of the engagement.
&lt;/p&gt;&lt;p&gt;Robert Rybaric is an architect in the Microsoft EMEA Dynamics Center of Excellence
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10400841" width="1" height="1"&gt;</content><author><name>Robert.Rybaric</name><uri>http://blogs.msdn.com/robert.rybaric_4000_live.de/ProfileUrlRedirect.ashx</uri></author><category term="Dynamics CRM" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/Dynamics+CRM/" /><category term="Performance" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/Performance/" /><category term="Optimization" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/Optimization/" /></entry><entry><title>Understanding the data flow process between AX and eCommerce</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/dynamics-coe/archive/2013/03/08/understanding-the-data-flow-process-between-ax-and-ecommerce.aspx" /><id>http://blogs.msdn.com/b/dynamics-coe/archive/2013/03/08/understanding-the-data-flow-process-between-ax-and-ecommerce.aspx</id><published>2013-03-08T17:20:00Z</published><updated>2013-03-08T17:20:00Z</updated><content type="html">&lt;p&gt;&lt;span style="font-size: small;"&gt;In a previous post I walked through how to make changes to your online web catalog directly from Dynamics AX 2012 (&lt;a href="http://blogs.msdn.com/b/dynamics-coe/archive/2013/02/04/updating-your-commerce-catalog-directly-from-dynamics-ax.aspx"&gt;http://blogs.msdn.com/b/dynamics-coe/archive/2013/02/04/updating-your-commerce-catalog-directly-from-dynamics-ax.aspx&lt;/a&gt;).&amp;nbsp; This powerful feature showcases the truly integrated, omni-channel retail solution that is Dynamics AX. In this post, I'm going to look at what's happening in the background and walk through the data flow of this process.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;So to begin, let's have a look at a very simple picture representation of some of the components involved in this process.&amp;nbsp; (and yes there are a number of elements involved that I've left off but this will get us started).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;span style="font-size: small;"&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/2555.Understanding-the-data-flows-between-AX-and-eCommerce-1.png"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/2555.Understanding-the-data-flows-between-AX-and-eCommerce-1.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;So let's step through what's happening when we publish our catalog to the web.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; text-decoration: underline;"&gt;Step 1: Publishing the catalog from Dynamics AX to the Commerce Run Time database&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;When you publish the catalog in Dynamics AX and run the A-1075_OC job, the CRT Synch Service takes channel and catalog data from the Dynamics AX database and puts it into our Common Run Time (CRT) database.&amp;nbsp; [In our demonstration image, this database is the AXRetailSP database].&amp;nbsp; The CRT database is created as part of the Dynamics AX Retail Commerce setup.&amp;nbsp; It can be thought of as another store in the AX for Retail framework, in this case, an online store.&amp;nbsp; It contains data for use by the CRT engine, including products and product hierarchy.&amp;nbsp; For example, in the CRT database, there are the tables ECORESCATEGORY and ECORESPRODUCT (for those who know the Dynamics AX schema they should look familiar).&amp;nbsp;&amp;nbsp;There are also additional tables in there which support other functions such as publishing information, but that's a subject for another day.&amp;nbsp; In short, when you've got data into the CRT DB, you're well on your way.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; text-decoration: underline;"&gt;Step 2: Loading (Publishing) the SharePoint Authoring Site &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;The AX Retail Commerce framework is built using two SharePoint collection sites - one for authoring the content and the other as the external facing published site.&amp;nbsp; This approach is an uptake of Microsoft SharePoint's cross-site publication functionality.&amp;nbsp; Let's first of all look at the authoring site. The authoring site is built to contain the raw product information and attributes as well as the product catalog that we've been looking at.&amp;nbsp; The product master and hierarchy data in this site is contained in lists and the term set and is populated from the CRT DB primarily the 'Retail Publishing Job'.&amp;nbsp; This is a critical job in this process.&amp;nbsp; You can view the status of this job, job history and definition in SharePoint Central Administration - Monitoring.&amp;nbsp; You can see it being scheduled and executed in the below screen: (note: you'll need to be logged in with domain\administrator privileges to run some of the features in here)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/2804.Understanding-the-data-flows-between-AX-and-eCommerce-2.png"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/2804.Understanding-the-data-flows-between-AX-and-eCommerce-2.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;So upon executing this job, what happens is that data is taken from the CRT DB and it's pulled into the product catalog (or authoring) site as lists and the term store.&amp;nbsp; It also does a final status update back to Dynamics AX to keep everyone in the loop as to what's going on.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Now its SharePoint's turn to take over. ..&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; text-decoration: underline;"&gt;Step 3: Publish to the SharePoint Publishing Site&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Cross-site publishing is a feature of SharePoint.&amp;nbsp; The lists that we've populated in the authoring site are crawled (indexed) by SharePoint Search and as a result the data will exist in the SharePoint search DB.&amp;nbsp; When the online store's web site renders the products it is done by querying the SharePoint search (which is internally accessing the SharePoint search DB).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;So there you have it.&amp;nbsp; As mentioned above, our truly integrated, omni-channel retail solution enables retailers to control their website data and hierarchy data directly from Dynamics by securely managing data in a controlled, secure framework as described above.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;And before I sign off, big thanks to Sergey Pikhulya, who is the Yoda of this young Skywalkers' road to commerce enlightenment&amp;hellip;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;em&gt;Peter is a Retail Solution Architect for the Centre of Excellence EMEA team&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10400718" width="1" height="1"&gt;</content><author><name>Pete Ward</name><uri>http://blogs.msdn.com/wardph_4000_hotmail.com/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>Simple “Publish-Subscribe” integration with Dynamics CRM using Azure Service Bus Topics/Subscriptions</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/dynamics-coe/archive/2013/03/05/simple-publish-subscribe-integration-with-dynamics-crm-using-azure-service-bus-topics-subscriptions.aspx" /><id>http://blogs.msdn.com/b/dynamics-coe/archive/2013/03/05/simple-publish-subscribe-integration-with-dynamics-crm-using-azure-service-bus-topics-subscriptions.aspx</id><published>2013-03-05T16:55:00Z</published><updated>2013-03-05T16:55:00Z</updated><content type="html">&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Implementation of &amp;ldquo;publish-subscribe&amp;rdquo; based integration where Dynamics CRM acts as publisher is very common. In this article, I will talk about how &amp;ldquo;Azure Service Bus Topics/Subscriptions&amp;rdquo; can be used with Dynamics CRM to create a &amp;ldquo;publish-subscribe&amp;rdquo; based integration. I will not talk about &amp;ldquo;Azure Service Bus Topics/Subscriptions&amp;rdquo; in detail but focus more on usage scenario and integration. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;&lt;span style="font-family: Calibri;"&gt;What is &amp;ldquo;Publish-Subscribe&amp;rdquo; Integration?&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;First step is to know what is &amp;ldquo;publish-subscribe&amp;rdquo; (commonly known as pub-sub) based integration. It is an integration pattern.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;In simple language, in pub-sub integration, the subscribers are interested in certain messages and they keep looking for the messages at certain place called &amp;ldquo;bus&amp;rdquo;. When the publisher publishes or creates the message in the &amp;ldquo;bus&amp;rdquo;, each subscriber interested in this message gets a copy of it. There could be multiple subscribers for the same message.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;Subscribers could be interested either in a type of message or a message with certain content. When they are interested in message with certain content, content based routing is used to make that message available to the subscriber. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;I recommend you read the following links to learn more about publish-subscribe and content based routing &amp;ndash;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;Publish Subscribe - &lt;/span&gt;&lt;a href="http://www.eaipatterns.com/PublishSubscribeChannel.html"&gt;&lt;span style="color: #0000ff; font-family: Calibri; font-size: small;"&gt;http://www.eaipatterns.com/PublishSubscribeChannel.html&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;Content Based Routing - &lt;/span&gt;&lt;a href="http://www.eaipatterns.com/ContentBasedRouter.html"&gt;&lt;span style="color: #0000ff; font-family: Calibri; font-size: small;"&gt;http://www.eaipatterns.com/ContentBasedRouter.html&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;&lt;span style="font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: Calibri;"&gt;Business Scenario for &amp;ldquo;Publish-Subscribe&amp;rdquo;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Let me share couple of real scenario examples.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;There is a utility company which provides water and waste management service to citizens. It has a CRM system, billing system, messaging system and mapping (GIS) system. When a customer (message) is created in the CRM system (publisher), the billing, messages, GIS systems (Subscribers) need a copy of customer data to perform follow-up tasks and automation. For instance &amp;ndash; billing system will create a billing account for the customer, the messaging system will send welcome message with customer account details on preferred communication channel and GIS system will update customer address in the database for mapping purpose. This is an example where subscribers are interested a message type.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/8171.pub_2D00_sub_2D00_ex1.bmp"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/8171.pub_2D00_sub_2D00_ex1.bmp" alt="" width="493" height="284" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Another example is for content based subscription. There is a Telco company which provided services to a massive geography. It has logically divided the geography into four regions. It has a centralized CRM system but the billing system has been partitioned into four physical instances &amp;ndash; one for each region. When the customer (message) is created or updated in the CRM system (published), it has to be updated into respective billing system (subscriber) based on the region (content) of the customer.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/0702.pub_2D00_sub_2D00_ex2.bmp"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/0702.pub_2D00_sub_2D00_ex2.bmp" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;The following are critical components of the publish-subscribe pattern &amp;ndash;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Publisher&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Message (Which published and Subscribed)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Content Rule (for content based routing)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Bus&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Subscriber&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Last but not least &amp;ldquo;Reliability&amp;rdquo; in terms of secure message handling, guaranteed delivery, retries, error message handling, exception handling etc.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;&lt;span style="font-family: Calibri;"&gt;Azure Service Bus Topics/Subscriptions as &amp;ldquo;Publish-Subscribe&amp;rdquo; Engine&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;The Windows Azure Service Bus Topics/Subscriptions provides a light-weight but reliable and scalable platform for &amp;ldquo;public-subscribe&amp;rdquo; based integration. It has the entire ingredient for such implementation &amp;ndash;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Topic Definition (&amp;ldquo;Bus&amp;rdquo;)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Subscription Definition&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;SqlFilter (content based rule for subscription or routing)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;BrokeredMessage (creating and publishing messages)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Reliability &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;If I map the first scenario from the above with Service Bus Topics/Subscriptions architecture, it looks like the following &amp;ndash;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/7183.pub_2D00_sub_2D00_ex3.bmp"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/7183.pub_2D00_sub_2D00_ex3.bmp" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;We need to do the following for integration &amp;ndash;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Create service bus namespace on Azure Portal&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Create &amp;ldquo;Topic&amp;rdquo; under service bus namespace&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Create &amp;ldquo;Subscriptions&amp;rdquo; under &amp;ldquo;Topic&amp;rdquo; based on number of subscribers&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Write &amp;ldquo;Publisher Code&amp;rdquo; which takes message data (customer in this case) from the publisher, connects with service bus and then publish message to the &amp;ldquo;Topic&amp;rdquo;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&amp;ldquo;Topic&amp;rdquo; will internally create copies of the message into subscription queues based on subscriptions defined &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Write &amp;ldquo;Subscriber Code&amp;rdquo; which is responsible for reading message from subscription queue. It connects with service bus, takes messages from subscription queue, and connects with subscriber system to process the message for the target subscription system.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;If you want to learn about Azure Topics, please refer the following link - &lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/hh367516.aspx"&gt;&lt;span style="color: #0000ff; font-family: Calibri; font-size: small;"&gt;http://msdn.microsoft.com/en-us/library/windowsazure/hh367516.aspx&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;&lt;span style="font-family: Calibri;"&gt;How to use Topics/Subscriptions with Dynamics CRM?&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Finally, let&amp;rsquo;s see how we make Topics/Subscriptions work with Dynamics CRM in simplest form. Let&amp;rsquo;s take a scenario where when contact is created or updated in Dynamics CRM &amp;ndash; the subscribers (billing, messaging, GIS systems etc.) are interested in it.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;First step is to create service bus namespace, Topic and Subscriptions.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Next write &amp;ldquo;Publisher Code&amp;rdquo; in plugin and register plugin for &amp;ldquo;contact&amp;rdquo; entity for create and update events. The code will connect with service bus and publish &amp;ldquo;contact&amp;rdquo; instance to the &amp;ldquo;Topic&amp;rdquo;. The code snippet will look like the following &amp;ndash;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;pre class="scroll"&gt;&lt;code class="csharp"&gt; string _ConnectionString = "Endpoint=sb://demosb-ns.servicebus.windows.net/;SharedSecretIssuer=owner;SharedSecretValue=u5TOVcfSgWC1lKX8+KiHH/7znVP3p3pX23ddwed342edd="; &lt;br /&gt; string topicName = "demotopic"; &lt;br /&gt; public void Execute(IServiceProvider serviceProvider) &lt;br /&gt; { &lt;br /&gt; try &lt;br /&gt; { &lt;br /&gt; IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); &lt;br /&gt; &lt;br /&gt; Entity entity = (Entity)context.InputParameters["Target"]; &lt;br /&gt; &lt;br /&gt; if (entity.LogicalName.Equals("contact")) &lt;br /&gt; { &lt;br /&gt; TopicClient Client = TopicClient.CreateFromConnectionString(_ConnectionString, topicName); &lt;br /&gt; &lt;br /&gt; BrokeredMessage message = new BrokeredMessage(entity); &lt;br /&gt; Client.Send(message); &lt;br /&gt; } &lt;br /&gt; } &lt;br /&gt; catch (Exception) &lt;br /&gt; { &lt;br /&gt; throw; &lt;br /&gt; } &lt;br /&gt; }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Based on subscription definitions under &amp;ldquo;Topic&amp;rdquo;, the topic will create copies of the &amp;ldquo;BrokeredMessage&amp;rdquo; and assign to subscription queues.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Write &amp;ldquo;Subscriber Code&amp;rdquo; which will read &amp;ldquo;BrokeredMessage&amp;rdquo; from the subscription queue and do the message processing. This code is responsible for reading message from subscription and passing to subscriber system for processing purpose. The code snippet look like following -&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;code class="csharp"&gt;string _ConnectionString = "Endpoint=sb://demosb-ns.servicebus.windows.net/;SharedSecretIssuer=owner;SharedSecretValue=u5TOVcfSgWC1lKX8+KiHH/7znVP3p3pX23ddwed342edd=";&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string topicName = "demotopic"; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string subName = "demosubscriptio"; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SubscriptionClient Client = SubscriptionClient.CreateFromConnectionString (_ConnectionString, topicName, subName); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Client.Receive(); &lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Continuously process messages received from the subscription &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (true) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BrokeredMessage message = Client.Receive(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (message != null) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Entity entity = message.GetBody&amp;lt;Entity&amp;gt;(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //TODO: WRITE CODE TO CONSUME THIS ENTITY INSTANCE &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message.Complete();&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (Exception) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message.Abandon(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt; }&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;The big question is where to host the &amp;ldquo;Subscriber Code&amp;rdquo;. You can see that this code snippet runs in loop and looks for any message published. We need a host which can home this code snippet. There are couple of choices for host&lt;/span&gt;&lt;/span&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;SSIS Package executed using SQL Job &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Windows Service&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Console Application scheduled using Windows Scheduler&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;&lt;span style="font-family: Calibri;"&gt;Conclusion&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;You can see it is a simple, elegant but very reliable and powerful way of implementing publish-subscribe pattern with Dynamics CRM. The implementation can have many faces and variant &amp;ndash; I leave that to your design and scenario. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Hope you find this article useful.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10399559" width="1" height="1"&gt;</content><author><name>Brajendra Singh</name><uri>http://blogs.msdn.com/brajens_4000_live.com/ProfileUrlRedirect.ashx</uri></author><category term="Dynamics CRM 2011" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/Dynamics+CRM+2011/" /><category term="Azure" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/Azure/" /><category term="Topics/Subscriptions" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/Topics_2F00_Subscriptions/" /><category term="Service Bus" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/Service+Bus/" /></entry><entry><title>Introducing the SharePoint Product Catalog site for Dynamics AX Retail</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/dynamics-coe/archive/2013/02/12/introducing-the-sharepoint-product-catalog-site-for-dynamics-ax-retail.aspx" /><id>http://blogs.msdn.com/b/dynamics-coe/archive/2013/02/12/introducing-the-sharepoint-product-catalog-site-for-dynamics-ax-retail.aspx</id><published>2013-02-12T22:51:00Z</published><updated>2013-02-12T22:51:00Z</updated><content type="html">&lt;p&gt;&lt;span style="font-size: small;"&gt;In my previous blog, &lt;/span&gt;&lt;span style="font-size: small;"&gt;I looked at how changes made in Dynamics AX are then directly reflected in your &lt;/span&gt;&lt;span style="font-size: small;"&gt;external facing website (&lt;a href="http://blogs.msdn.com/b/dynamics-coe/archive/2013/02/04/updating-your-commerce-catalog-directly-from-dynamics-ax.aspx"&gt;http://blogs.msdn.com/b/dynamics-coe/archive/2013/02/04/updating-your-commerce-catalog-directly-from-dynamics-ax.aspx&lt;/a&gt;).&amp;nbsp; In order to start to understand how this &lt;/span&gt;&lt;span style="font-size: small;"&gt;works, we need to understand some of the components of the Dynamics AX Commerce &lt;/span&gt;&lt;span style="font-size: small;"&gt;platform.&amp;nbsp; Dynamics AX Commerce utilises &lt;/span&gt;&lt;span style="font-size: small;"&gt;two SharePoint site collections, connected through SharePoint 2013's Cross-Site &lt;/span&gt;&lt;span style="font-size: small;"&gt;Collection Publishing feature (&lt;a href="http://technet.microsoft.com/en-us/library/jj656774.aspx"&gt;http://technet.microsoft.com/en-us/library/jj656774.aspx&lt;/a&gt;).&amp;nbsp; One is for publishing content and the other &lt;/span&gt;&lt;span style="font-size: small;"&gt;is for authoring content.&amp;nbsp; The authoring &lt;/span&gt;&lt;span style="font-size: small;"&gt;content component is called the Retail Product Catalog site and it holds &lt;/span&gt;&lt;span style="font-size: small;"&gt;products, product catalogs and associated information that are then used in &lt;/span&gt;&lt;span style="font-size: small;"&gt;your external website. In this post, I will walk you through some of the &lt;/span&gt;&lt;span style="font-size: small;"&gt;features of the Product Catalog and how useful and simple it is to manage your &lt;/span&gt;&lt;span style="font-size: small;"&gt;website data.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Let's get started &lt;/span&gt;&lt;span style="font-size: small;"&gt;with the home page.&amp;nbsp; The home page of the &lt;/span&gt;&lt;span style="font-size: small;"&gt;Product Catalog site looks like this:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/5040.Introducing-the-SharePoint-Product-Catalog-site-for-Dynamics-AX-Retail_2D00_1.png"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/5040.Introducing-the-SharePoint-Product-Catalog-site-for-Dynamics-AX-Retail_2D00_1.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;There is a host of things we can do in this site from viewing your online product data to managing hierarchy information.&amp;nbsp; Let's have a look at these.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; text-decoration: underline;"&gt;1. Viewing&amp;nbsp;products&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;To view the products, click on the Lists menu item on the left and there is a list containing all the products and the associated metadata held against each product for use on the website.&amp;nbsp; You can then drill into each product and view or manage product data.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/0044.Introducing-the-SharePoint-Product-Catalog-site-for-Dynamics-AX-Retail_2D00_2.png"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/0044.Introducing-the-SharePoint-Product-Catalog-site-for-Dynamics-AX-Retail_2D00_2.png" alt="" width="373" height="333" border="0" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; text-decoration: underline;"&gt;2. Viewing&amp;nbsp;the Catalog&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;The Product Hierarchy utilises the standard SharePoint Term Set functionality and can be viewed in the Product Catalog "Term Store" (for more information on Term Sets refer to tech net at &lt;a href="http://technet.microsoft.com/en-us/library/ee519604.aspx"&gt;http://technet.microsoft.com/en-us/library/ee519604.aspx&lt;/a&gt;).&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Access the Term Store from the Product Catalog home page, click on "Manage item hierarchy in Term Store".&amp;nbsp; Expand the Site Collection and the product navigational hierarchy is displayed (you'll notice it matches exactly to the navigational hierarchy we created in Dynamics AX - see my previous blog on updating commerce catalogs).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/0083.Introducing-the-SharePoint-Product-Catalog-site-for-Dynamics-AX-Retail_2D00_3.png"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/0083.Introducing-the-SharePoint-Product-Catalog-site-for-Dynamics-AX-Retail_2D00_3.png" alt="" width="485" height="470" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;So what is the real point of this?&amp;nbsp; Well, first of all, you&amp;rsquo;ve now got a window into all the product data that has come from Dynamics AX and is now sitting in SharePoint.&amp;nbsp;Then, after being pushed into defined SharePoint lists, that data is being used by the powerful SharePoint 2013 search,&amp;nbsp;crawling (indexing) functions used in your external facing website.&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: small;"&gt;In addition, through this site you can run other cool functions such as managing your custom sort options, managing your faceted navigation, defining workflow and general site settings.&amp;nbsp; In fact, the more you start to play with the Product Catalog site, you'll see even more powerful functions to maintain your website data.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;In my next blog, we'll explore one of those additional functions of the Term Store: How to manage your faceted navigation through the Product Catalog site.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;em&gt;Peter is a Retail Solution Architect for the Centre of Excellence EMEA team&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10393139" width="1" height="1"&gt;</content><author><name>Pete Ward</name><uri>http://blogs.msdn.com/wardph_4000_hotmail.com/ProfileUrlRedirect.ashx</uri></author><category term="Dynamics AX 2012" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/Dynamics+AX+2012/" /><category term="Retail" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/Retail/" /></entry><entry><title>Storage requirements for Microsoft Dynamics AX</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/dynamics-coe/archive/2013/02/10/storage-requirements-for-microsoft-dynamics-ax.aspx" /><id>http://blogs.msdn.com/b/dynamics-coe/archive/2013/02/10/storage-requirements-for-microsoft-dynamics-ax.aspx</id><published>2013-02-10T10:22:00Z</published><updated>2013-02-10T10:22:00Z</updated><content type="html">&lt;p class="Publishwithline"&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;&lt;span style="color: #000000;"&gt;&lt;span style="font-family: Calibri;"&gt;Overview&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;There are many misunderstandings about storage requirements for Microsoft Dynamics AX. Microsoft Dynamics AX is an ERP system with mixed workload that mostly looks like typical OLTP with wide range of query types.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Any mistakes in storage implementation increase risks to performance and cost a lot. Microsoft Dynamics AX has an intense use of storage , besides the queries it utilizes Read Committed Snapshot Isolation feature, and may have temporary tables stored in SQL Server TempDB. In addition, the queries can contain complex joins due to the table inheritance that exists in Microsoft Dynamics AX starting from 2012 version. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;It is a common business practice that Microsoft provides storage hardware requirements to the hardware vendor, and then the vendor produces the detailed hardware specifications. Microsoft is not responsible for the third party hardware setup and configuration. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Usually Microsoft and hardware vendor engineers tune the disk storage working together on an implementation phase. The tuning is one of the points of the possible storage re-configuration.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;Microsoft approach in I/O calculation and Best Practices are described in the article available at &lt;/span&gt;&lt;a href="http://technet.microsoft.com/ru-ru/library/cc966412(en-us).aspx"&gt;&lt;span style="color: #0563c1; font-family: Calibri; font-size: small;"&gt;http://technet.microsoft.com/ru-ru/library/cc966412(en-us).aspx&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt; (see requirements for OLTP data and log described in &amp;lsquo;I/O related performance counters and their meanings&amp;rsquo; table).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;strong&gt;&lt;span style="color: #000000; font-size: medium;"&gt;&lt;span style="font-family: Calibri;"&gt;General description&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/h1&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Having no specific storage model to be considered, the storage sizing and suggestions are based on the requirement to utilize RAID 10 or similar RAID type that is recommended in a write-heavy environment. It is recommended to use separate disk array for testing environment and other workloads such as reporting or analysis to minimize an influence on production environment.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;SQL Server database files should be located on physical disks fully dedicated for SQL Server. For better performance, it is recommended to avoid sharing with other applications, Locally attached storage (DAS) may be faster, SANs are usually easier to manage.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Dynamics AX database data file(s), Dynamics AX database log file and TempDB should be on own volumes. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;For the AX database data file(s) you can create multiple data files within a single file group. Table partitioning is supported in Microsoft Dynamics AX 2012 but it is not a general recommendation. If you decide to implement table partitioning for large and heavily used tables you also need to be sure that the underlying infrastructure (disk/controller setup) is capable of giving you the additional performance gains.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;For the sector (stripping) size you should consider 8 to 64 KB or any other value your SAN vendor recommends. The number should be dividable by 8 as SQL Server works with pages of 8 KB in size.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;It is recommended to move analysis and reporting data to dedicated disk set, so that this data &amp;nbsp;has no influence on SQL Server operations and I/O channels. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;Microsoft highly recommends using disk alignment. Disk alignment is a required optimization and must be applied by storage vendor during setup. Disk alignment provides a significant increase in system performance. Failure to perform disk alignment can decrease performance by 10 to 15 percent in RAID array systems. See the article on Microsoft site &lt;/span&gt;&lt;a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;923076&amp;amp;sd=rss&amp;amp;spid=3198"&gt;&lt;span style="color: #0563c1; font-family: Calibri; font-size: small;"&gt;http://support.microsoft.com/default.aspx?scid=kb;en-us;923076&amp;amp;sd=rss&amp;amp;spid=3198&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt; for the details and updated version of the Diskpart tool.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;It is recommended to use maximum number of spindles for I/O operations; for example, for 2 Tb set in RAID 10 it is better to use 30 disks x 144 Gb instead of 4 disks x 1 Tb. &amp;nbsp;SATA disks are not recommended.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;strong&gt;&lt;span style="color: #000000; font-size: medium;"&gt;&lt;span style="font-family: Calibri;"&gt;RAID trade offs&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;We would like to reference whitepaper "Performance Tuning Guidelines for Windows Server 2008" available at &lt;/span&gt;&lt;a href="http://www.microsoft.com/whdc/system/sysperf/perf_tun_srv.mspx"&gt;&lt;span style="color: #0563c1; font-family: Calibri; font-size: small;"&gt;http://www.microsoft.com/whdc/system/sysperf/perf_tun_srv.mspx&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;table class="ListTable4-Accent51" style="width: 100%;" border="1" cellspacing="0" cellpadding="0" align="left"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;td valign="top" width="19%"&gt;
&lt;p class="TableBody"&gt;Configuration&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="20%"&gt;
&lt;p class="TableBody"&gt;Performance&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="19%"&gt;
&lt;p class="TableBody"&gt;Reliability&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="20%"&gt;
&lt;p class="TableBody"&gt;Availability&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="20%"&gt;
&lt;p class="TableBody"&gt;Cost, capacity, and power consumed&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="19%"&gt;
&lt;p class="TableBody"&gt;RAID 0+1 (striped mirrors)&lt;/p&gt;
&lt;p class="TableBody"&gt;Requirements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Two-disk minimum.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="TableBody"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="20%"&gt;
&lt;p class="TableBody"&gt;Pros:&lt;/p&gt;
&lt;ul&gt;
&lt;li style="text-align: left;"&gt;Two data sources for every read request (up to 100% performance improvement).&lt;/li&gt;
&lt;li style="text-align: left;"&gt;Balanced load.&lt;/li&gt;
&lt;li style="text-align: left;"&gt;Potential for better response times, throughput, and concurrency.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="TableBody"&gt;Cons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Writes must update mirrors.&lt;/li&gt;
&lt;li&gt;Difficult stripe unit size choice.&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td valign="top" width="19%"&gt;
&lt;p class="TableBody"&gt;Pros:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Single loss and often multiple losses (in large configurations) that are survivable.&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td valign="top" width="20%"&gt;
&lt;p class="TableBody"&gt;Pros:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Single loss and often multiple losses (in large configurations) that do not prevent access.&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td valign="top" width="20%"&gt;
&lt;p class="TableBody"&gt;Cons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Twice the cost of RAID&amp;nbsp;0 or JBOD.&lt;/li&gt;
&lt;li&gt;Up to 2X power consumption.&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="19%"&gt;
&lt;p class="TableBody"&gt;RAID 5 (rotated parity)&lt;/p&gt;
&lt;p class="TableBody"&gt;Requirements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;One additional disk required.&lt;/li&gt;
&lt;li&gt;Three-disk minimum.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="TableBody"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="20%"&gt;
&lt;p class="TableBody"&gt;Pros:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Balanced load.&lt;/li&gt;
&lt;li&gt;Potential for better read response times, throughput, and concurrency.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="TableBody"&gt;Cons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Up to 75% write performance reduction because of RMW.&lt;/li&gt;
&lt;li&gt;Decreased read performance in failure mode.&lt;/li&gt;
&lt;li&gt;All sectors must be read for reconstruction; major slowdown.&lt;/li&gt;
&lt;li&gt;Danger of data in invalid state after power loss and recovery.&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td valign="top" width="19%"&gt;
&lt;p class="TableBody"&gt;Pros:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Single loss survivable; &amp;ldquo;in-flight&amp;rdquo; write requests might still become corrupted.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="TableBody"&gt;Cons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Multiple losses affect entire array.&lt;/li&gt;
&lt;li&gt;After a single loss, array is vulnerable until reconstructed.&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td valign="top" width="20%"&gt;
&lt;p class="TableBody"&gt;Pros:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Single loss does not prevent access.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="TableBody"&gt;Cons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Multiple losses that prevent access to entire array.&lt;/li&gt;
&lt;li&gt;To speed reconstruction, application access might be slowed or stopped.&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td valign="top" width="20%"&gt;
&lt;p class="TableBody"&gt;Pros:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Only one more disk to power.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="TableBody"&gt;Cons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Up to 4X the power for write requests (excluding the idle power).&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="tabletext"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="19%"&gt;
&lt;p class="TableBody"&gt;RAID 6 (two separate erasure codes)&lt;/p&gt;
&lt;p class="TableBody"&gt;Requirements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Two additional disks required.&lt;/li&gt;
&lt;li&gt;Five-disk minimum.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="TableBody"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="20%"&gt;
&lt;p class="TableBody"&gt;Pros:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Balanced load.&lt;/li&gt;
&lt;li&gt;Potential for better read response times, throughput, and concurrency.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="TableBody"&gt;Cons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Up to 83% write performance reduction because of multiple RMW.&lt;/li&gt;
&lt;li&gt;Decreased read performance in failure mode.&lt;/li&gt;
&lt;li&gt;All sectors must be read for reconstruction: major slowdown.&lt;/li&gt;
&lt;li&gt;Danger of data in invalid state after power loss and recovery.&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td valign="top" width="19%"&gt;
&lt;p class="TableBody"&gt;Pros:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Single loss survivable; &amp;ldquo;in-flight&amp;rdquo; write requests might still be corrupted.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="TableBody"&gt;Cons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;gt;2 losses affect entire array.&lt;/li&gt;
&lt;li&gt;After 2 losses, an array is vulnerable until reconstructed.&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td valign="top" width="20%"&gt;
&lt;p class="TableBody"&gt;Pros:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Single loss that does not prevent access.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="TableBody"&gt;Cons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;gt;2 losses prevent access to entire array.&lt;/li&gt;
&lt;li&gt;To speed reconstruction, application access might be slowed or stopped.&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td valign="top" width="20%"&gt;
&lt;p class="TableBody"&gt;Pros:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Only two more disks to power.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="TableBody"&gt;Cons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Up to 6X the power for write requests (excluding the idle power).&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="TableBody"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="BodyTextLink"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;The following are sample uses for various RAID levels:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;RAID 0+1: A general-purpose combination of performance and reliability for critical data, workloads with hot spots, and high-concurrency workloads.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;RAID 5: Web pages, semi critical data, workloads without small writes, scenarios in which capital and operating costs are an overriding factor, and read-dominated workloads.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;RAID 6: Data mining, critical data (assuming quick replacement or hot spares), workloads without small writes, scenarios in which cost or power is a major factor, and read-dominated workloads.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;&lt;span style="color: #000000;"&gt;&lt;span style="font-family: Calibri;"&gt;Storage configuration&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;The number of spindles required is highly dependent on the hardware configuration and vendor chosen.&amp;nbsp; Since there is no industry standard for the storage subsystem and different vendors choose different disk system architectures, we highly recommend you consult with your hardware vendor to provide suggestions around the disk subsystem such as the number of spindles.&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;For optimal database performance, we suggest you utilize smaller number of spindles per group.&amp;nbsp; In this way, we can achieve higher levels of disk access and thus better read/write times.&amp;nbsp; With a specific vendor&amp;rsquo;s RAID implementation, however, this suggestion may not be always valid.&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;The following graph illustrates an example where amount of IOs is not well supported by spindles. TempDB is the most prominent example. Its high activity (both database files and log) is supported by only 8 spindles.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/1663.IO-total.png"&gt;&lt;img style="margin-right: auto; margin-left: auto; display: block;" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/1663.IO-total.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;With today&amp;rsquo;s vendor specific RAID implementations, various other factors come into play such as the amount of disk drive cache, the cache controller, the particular vendor specific RAID implementation and others. You need to ensure your hardware vendor is involved in the storage design to provide you with a configuration that is specific to the hardware chosen and that provides you with the best cost/performance ratio.&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Additional disk space is required for SSRS/SSAS. If you cannot calculate the disk space required for SSAS/SSRS at the project starting, consider adding about 10-20% of the production database size for the cubes and temporary data.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;strong&gt;&lt;span style="color: #000000; font-size: medium;"&gt;&lt;span style="font-family: Calibri;"&gt;Examples&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/h1&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Now you may say that the theory is not enough to get a clear vision of the requirements.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;We can refer you to the official benchmark reports where storage configurations are listed, and you may correspond it to the tested functionality and workload. The benchmark whitepapers are available at TechNet &lt;/span&gt;&lt;a href="http://technet.microsoft.com/en-us/library/hh536205.aspx"&gt;&lt;span style="color: #0563c1; font-family: Calibri; font-size: small;"&gt;http://technet.microsoft.com/en-us/library/hh536205.aspx&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;, the detailed results can be downloaded from CustomerSource or PartnerSource.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Another example illustrates a storage configuration dependency on performance rather than actual data size, one disk selected by data size cannot support a workload. We may have mid-size company with no specific operations and verticals such as Manufacturing or Retail and without internal CRM module implemented. To calculate the database size we use an assumption that 1 million transactions (in Unicode) in General Ledger may take about 5 GB of storage space in a case of typical environment (including corresponding transactions related to Bank, Account Receivable and Payable, etc.). Next, data growth in accordance to the company strategy should be applied, say 30%. SQL Server 2008 Data Compression feature will be also taken into consideration. Then a suggestion may have approximately 500-600 GB external storage for database server based on RAID 10, 20-24 Disks For data at 180 IOPS per disk, 4 disks for log, 8-10 disks for TempDB. Note that every environment is unique and the example values should not be applied to a real implementation without analysis of the planning functional and technical specifics.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;strong&gt;&lt;span style="color: #000000; font-size: medium;"&gt;&lt;span style="font-family: Calibri;"&gt;Summary&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;It is recommended: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;To have any storage LUN that should have response time not higher than 10-20 Msec.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;To do a storage check according to "Predeployment I/O Best Practices" whitepaper &lt;/span&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc966412.aspx"&gt;&lt;span style="color: #0563c1; font-family: Calibri; font-size: small;"&gt;http://technet.microsoft.com/en-us/library/cc966412.aspx&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;To use RAID 10 if possible for all LUNs or at least for LUNs that host log files, Tempdb, and main database. For example, HP whitepaper "HP StorageWorks 4000/6000/8000 Enterprise Virtual Array configuration best practices white paper" and other documents from Microsoft and storage vendors provide the following guidance: "RAID5 sets need twice as many writes to store data (four writes vs. two for RAID10)" and "RAID10 typically performs better than RAID5 under OLTP or intense write I/O activity scenarios". &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;To support LUNs with as many physical spindles as possible. If it is not possible to configure all disks under RAID 10, create two sets of disks: RAID 5 for data and backup and RAID 10 for logs and TempDB. If several database files are created and LUNs are not spread across all available disk drives, create as many files as the number of LUNs and distribute files evenly across all LUNs.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Pay as much attention to TempDB performance as to performance of main database.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;em&gt;Alexei&lt;/em&gt;&lt;em&gt; is a Technical Architect for the Centre of Excellence EMEA team&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10392438" width="1" height="1"&gt;</content><author><name>Alexei Eremenko</name><uri>http://blogs.msdn.com/aeremenk/ProfileUrlRedirect.ashx</uri></author><category term="Dynamics AX 2012" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/Dynamics+AX+2012/" /></entry><entry><title>Updating your Commerce Catalog directly from Dynamics AX</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/dynamics-coe/archive/2013/02/04/updating-your-commerce-catalog-directly-from-dynamics-ax.aspx" /><id>http://blogs.msdn.com/b/dynamics-coe/archive/2013/02/04/updating-your-commerce-catalog-directly-from-dynamics-ax.aspx</id><published>2013-02-04T20:38:00Z</published><updated>2013-02-04T20:38:00Z</updated><content type="html">&lt;p&gt;&lt;span style="font-size: small;"&gt;Microsoft Dynamics AX2012 R2 included the release of an integrated Commerce platform built on and using Microsoft technologies.&amp;nbsp; If you haven't seen the details and in particular the impact on retailers I suggest you read Michael Griffiths blog here (&lt;a href="http://blogs.msdn.com/b/dax/archive/2012/11/16/the-new-retail-reality-are-you-ready.aspx"&gt;&lt;span style="color: #0000ff;"&gt;http://blogs.msdn.com/b/dax/archive/2012/11/16/the-new-retail-reality-are-you-ready.aspx&lt;/span&gt;&lt;/a&gt;)!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Fundamental to the Dynamics AX solution is a centralised, true omni-channel retail product and catalog management function that drives all your channels including stores and your web.&amp;nbsp; No costly and high risk interface required to be built here.&amp;nbsp; It&amp;rsquo;s a single solution working out of the box with low total cost of ownership.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;In the first of a series of blogs on using the powerful features of this release, here's the quick and easy guide to updating your commerce catalog directly from Dynamics AX.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;Step 1: Make changes to your catalog as required&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;In this example we're going to extend the structure of our web navigational hierarchy.&amp;nbsp; Contoso, our electronics superstore, is no longer going to sell home appliances.&amp;nbsp; As a result, we need to remove "Home appliances" from the website category hierarchy.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;So here's what our website hierarchy looks like before we start:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/0647.Updating-your-Commerce-Catalog-directly-from-Dynamics-AX_2D00_1.png"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/0647.Updating-your-Commerce-Catalog-directly-from-Dynamics-AX_2D00_1.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;If we look in Dynamics AX, we see that the above hierarchy is represented in the retail navigation hierarchy attached to our web channel.&amp;nbsp; In the below screenshot, the hierarchy on the left shows the screen where this hierarchy is maintained in Dynamics AX.&amp;nbsp; As part of our scenario, I need to inactivate the "Home appliances" node.&amp;nbsp; To do this I click Inactivate at the top of the screen and the result is shown below on the right (If you want more detail on changing retail navigation and product hierarchies, stay tuned for a future blog where I'll explore these features).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/3660.Updating-your-Commerce-Catalog-directly-from-Dynamics-AX_2D00_2.png"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/3660.Updating-your-Commerce-Catalog-directly-from-Dynamics-AX_2D00_2.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;Step 2: Publish your online channel&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Once you're happy with the new navigational hierarchy, you need to go to your online channel form in the Retail module.&amp;nbsp; You'll note an existing publishing status of 'Published'.&amp;nbsp; Simply press 'Edit' and then 'Publish' on the ribbon bar and you're ready to roll.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/0456.Updating-your-Commerce-Catalog-directly-from-Dynamics-AX_2D00_3.png"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/0456.Updating-your-Commerce-Catalog-directly-from-Dynamics-AX_2D00_3.png" alt="" width="350" height="499" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;span style="font-size: small;"&gt;Once you do this, you'll note the publishing status turns to "In progress".&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Now if you're impatient like me, you can run a couple of processes to speed up the background work. We can call these steps 2a) and 2b) if you like.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;2a) Run the Create Actions job to analyse any changes made in synchronised data elements, then&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;2b) Run the Commerce Data Exchange process.&amp;nbsp; If you're looking at an out of the box installation, this process is called "A-1075_OC"&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Note the publishing status of our online channel again&amp;hellip;!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;Step 3: Refresh your web page&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;So that's done, go back to your web page and click refresh. Voila!!&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/7103.Updating-your-Commerce-Catalog-directly-from-Dynamics-AX_2D00_4.png"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/7103.Updating-your-Commerce-Catalog-directly-from-Dynamics-AX_2D00_4.png" alt="" border="0" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;T&lt;span style="font-size: small;"&gt;here you go, three easy steps!&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;No web re-programming required, no code changes and therefore no need to call the developers down from upstairs - changes made in Dynamics AX are directly reflected in the web.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;In upcoming blogs, I'll take a deeper dive into each of these components to show how you can drive further productivity improvements in your commerce data management activities.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style="font-size: small;"&gt;Peter is a Retail Solution Architect &lt;/span&gt;&lt;span style="font-size: small;"&gt;for the Centre of Excellence EMEA team&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Times New Roman; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10391002" width="1" height="1"&gt;</content><author><name>Pete Ward</name><uri>http://blogs.msdn.com/wardph_4000_hotmail.com/ProfileUrlRedirect.ashx</uri></author><category term="Dynamics AX 2012" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/Dynamics+AX+2012/" /><category term="Retail" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/Retail/" /></entry><entry><title>Using Windows Azure Blob Storage with Dynamics CRM</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/dynamics-coe/archive/2013/01/30/using-windows-azure-blog-storage-with-dynamics-crm.aspx" /><link rel="enclosure" type="application/zip" length="199062" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-38-94-47/CrmWebBlobClient.zip" /><id>http://blogs.msdn.com/b/dynamics-coe/archive/2013/01/30/using-windows-azure-blog-storage-with-dynamics-crm.aspx</id><published>2013-01-30T10:19:00Z</published><updated>2013-01-30T10:19:00Z</updated><content type="html">&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;In this article we are going to talk how Windows Azure Blob Storage can be used with Microsoft Dynamics CRM. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Business Scenario&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;In many of the CRM implementations, we come across requirement where certain documents are required to be linked with records such as accounts, contacts, cases, activities etc. For example &amp;ndash;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Insurance and Telco companies want to attached scanned copies of contracts, applications, health inspection reports, address/identity proof documents of the customers&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Public sector &amp;ndash; store job orders, inspection reports, citizen document copies etc.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;In cases where these documents are large in number and size, we try to avoid out of box &amp;ldquo;Attachment&amp;rdquo; feature of the Dynamics CRM because it rapidly increases the CRM database size. We prefer using some document management solution such as SharePoint, Documentum and integrate with Dynamics CRM. In many cases, the document management solution comes as overhead because &amp;ndash;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;The need is to just link documents with records &amp;ndash; nothing more&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;No workflow or search required&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Upfront large investment in DMS software as well as storage space&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Operational overhead in terms of backup and maintenance&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;The Windows Azure Blob Storage is an easy and economical option here. The following are merits of using blob storage in place of document management solution in such scenarios -&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Blob is storage focused only&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Provides storage redundancy &amp;ndash; no need for back up, disaster recovery in place.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Secure access provided. The storage data can also be encrypted&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;No upfront investment &amp;ndash; pay as you go (storage size) and it is very low-priced &amp;ndash; check this out - &lt;/span&gt;&lt;a href="http://www.windowsazure.com/en-us/pricing/calculator/"&gt;&lt;span style="color: #0000ff; font-family: Calibri; font-size: small;"&gt;http://www.windowsazure.com/en-us/pricing/calculator/&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;What it takes to mingle both?&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;It is very easy to make both Dynamics CRM and Azure Blob Storage marry. There are well defined and documented APIs for the same. You can custom code integration as per need. I have built a small application (asp.net web application) which can make this integration very simple. The application has a user interface as following &amp;ndash;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/0777.New-Bitmap-Image.bmp"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x500/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/0777.New-Bitmap-Image.bmp" alt="" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;With this application, you can do the following &amp;ndash;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Create a container (folder) for each record using record identifier in Windows Azure Storage. Upload record specific documents in this folder.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;You can upload, download, list and delete documents&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Can upload any type of document and media&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Enable role based access to upload, download, list and delete functions&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Works with both Dynamics CRM on-premise and online&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Installation and Configuration of Sample Application&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;I have attached code of the application in the article. Let me take you through steps to perform installation and configuration of the application.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;1.&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;strong&gt;Create Windows Azure Storage Account&lt;/strong&gt; &amp;ndash; First step is to buy Windows Azure subscription and then create windows Azure Storage Account under your subscription. Please refer the following link - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.windowsazure.com/en-us/manage/services/storage/how-to-create-a-storage-account/"&gt;&lt;span style="color: #0000ff; font-family: Calibri; font-size: small;"&gt;http://www.windowsazure.com/en-us/manage/services/storage/how-to-create-a-storage-account/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;2.&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;If we try to understand Windows Azure Blob Storage structure in simple terms &amp;ndash; &lt;strong&gt;A Windows Azure Storage Accoun&lt;/strong&gt;t can have multiple &lt;strong&gt;Containers&lt;/strong&gt;. Each Container then can store multiple documents and media &amp;ndash; each called one &lt;strong&gt;Blob&lt;/strong&gt;. This application creates one container for each record then stores record specific documents and media in this container.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;3.&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;I assume you already have Dynamics CRM instance (online or on-premise) ready. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;4.&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Download attached application (asp.net web application) code and make changes to connection strings in &lt;strong&gt;web.config&lt;/strong&gt; file &amp;ndash;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;connectionStrings&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;add name="blobstring" connectionString="DefaultEndpointsProtocol=https;AccountName=&amp;lt;STORAGE_NAME&amp;gt;;AccountKey=&amp;lt;ACCOUNT_KEY&amp;gt;"/&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;lt;add name="parentIdentifier" connectionString="&amp;lt;https://CRM_SERVER_NAME&amp;gt;;mainpage.aspx"/&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/connectionStrings&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;Replace &lt;/span&gt;&amp;lt;ACCOUNT_KEY&amp;gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt; with primary key of the storage account (you can find in azure management portal)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;Replace &lt;/span&gt;&amp;lt;https://CRM_SERVER_NAME&amp;gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt; with Dynamics CRM Server name which we want to integrate. &lt;strong&gt;Note: This setting makes sure that you cannot invoke this application from any other place than from Dynamics CRM web site.&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;Please replace &lt;/span&gt;&amp;lt;STORAGE_NAME&amp;gt; &lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;with storage account name created in step-1.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;5.&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;strong&gt;Deploy the application&lt;/strong&gt; &amp;ndash;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;When using with Dynamics CRM online, please publish this application to Windows Azure Web Site. Refer this link - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.windowsazure.com/en-us/home/scenarios/web-sites/"&gt;&lt;span style="color: #0000ff; font-family: Calibri; font-size: small;"&gt;http://www.windowsazure.com/en-us/home/scenarios/web-sites/&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;For Dynamics CRM on-premise, you can publish this application to IIS server or to Windows Azure Web Site.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;6.&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;strong&gt;Integrate with Dynamics CRM &lt;/strong&gt;&amp;ndash; These are two ways to integrate &amp;ndash;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;a.&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;strong&gt;Using IFRAME &amp;ndash; &lt;/strong&gt;The application has been designed to work by default with IFRAME. It can be configured at entity form level. When you configure the application for an entity, you can then link a document or media to entity record using azure blob as storage. Please perform the following steps for the configuration &amp;ndash;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-family: Calibri; font-size: small;"&gt;i.&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Open entity form for customization. It can be any entity such as account, contact, case, order etc.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ii.&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Insert IFRAME on the entity form.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; iii.&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Set URL of the entity as &lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span style="color: #0000ff;"&gt;https://&amp;lt;web_server_name&amp;gt;/mainpage.aspx &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;. &lt;/strong&gt;The &amp;lt;web_server_name&amp;gt; is the IIS server name or azure web site name where application has been hosted.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; iv.&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Please be sure that you have &lt;strong&gt;checked&lt;/strong&gt; &lt;strong&gt;&amp;ldquo;Pass record object-type and unique identifier as parameters&amp;rdquo;&lt;/strong&gt; check box. &lt;strong&gt;It is very important to check this because with this setting the record GUID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; is passed in query string and application uses that to create unique container for the record in the azure storage. Without this setting, the application will not work.&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v.&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Please also ensure to &lt;strong&gt;un-check &amp;ldquo;Restrict cross-frame scripting, where supported&amp;rdquo;&lt;/strong&gt; check box.&lt;strong&gt; It is another important setting because otherwise application form will not post back and it will throw out into popup when posting back.&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vi.&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Finally save and publish the form customizations.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vii.&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;You can now open entity record and link files to the record. &lt;strong&gt;Note:&lt;/strong&gt; In case of new record, the application will not upload files unless the record has been saved. Remember it needs record GUID to create container for the record in the azure blob.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;b.&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;strong&gt;Using Ribbon Button &amp;ndash; &lt;/strong&gt;you can also configure the application with ribbon button but it needs some level of coding. I plan to create a ribbon in next version which will make integration easier. For now &amp;ndash; please do the following &amp;ndash;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i.&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Open entity form for customization. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ii.&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Create a ribbon button. Customize ribbon button to call a JavaScript function. The Java function should open the URL (&lt;span style="text-decoration: underline;"&gt;&lt;span style="color: #0000ff;"&gt;https://&amp;lt;web_server_name&amp;gt;/mainpage.aspx?id=&amp;lt;GUID&lt;/span&gt;&lt;/span&gt;&amp;gt;) using &lt;strong&gt;Window. Open&lt;/strong&gt; method. &amp;nbsp;The &amp;lt;web_server_name&amp;gt; is the IIS server name or azure web site name where application has been hosted. The &amp;lt;GUID&amp;gt; is the GUID of the entity record.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; iii.&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;In the application, please open &amp;ldquo;mainpage.aspx.cs&amp;rdquo; file and remove the method &amp;ldquo;CheckReferalPage&amp;rdquo; and any reference to this method. Please compile and re-host the application.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;7.&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;strong&gt;Configure Role Based Access Control &lt;/strong&gt;&amp;ndash; I have not provided any role based access in the application but there are extensions available to easily configure the same. Please do the following &amp;ndash;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;a.&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;When using with IFRAME &amp;ndash;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i.&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Open entity form for customization. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ii.&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Create a JavaScript code on the &amp;ldquo;Form Load&amp;rdquo; event which passes user roles (Xrm.Page.context.getUserRoles()) in the hidden text box (id=iroles, name=txtroles) of the IFRAME page.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; iii.&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;In the application, please open &amp;ldquo;mainpage.aspx.cs&amp;rdquo; file and write role based access behaviour in private method &amp;ldquo;SetRoleBasedAccess&amp;rdquo;. Essential, you will read user role names passed and enable\disable control as per access provided to the role.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;b.&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;strong&gt;When using with Ribbon button - &lt;/strong&gt;In ribbon button, implement the logic of JavaScript written above using HTTP POST methods.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Conclusion&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;This is a sample implementation to expedite basic integration of Windows Azure Blob with Dynamics CRM. I am sharing code with you; please feel free to make necessary changes in the code as required. Hope you like this article.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10389447" width="1" height="1"&gt;</content><author><name>Brajendra Singh</name><uri>http://blogs.msdn.com/brajens_4000_live.com/ProfileUrlRedirect.ashx</uri></author><category term="Windows Azure Storage" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/Windows+Azure+Storage/" /><category term="Blob" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/Blob/" /><category term="Dynamics CRM 2011" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/Dynamics+CRM+2011/" /><category term="Attachments" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/Attachments/" /><category term="Document Management" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/Document+Management/" /></entry><entry><title>Building Dynamics CRM Applications for Windows 8 – Practical Approaches</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/dynamics-coe/archive/2013/01/21/building-dynamics-crm-applications-for-windows-8-practical-approaches.aspx" /><id>http://blogs.msdn.com/b/dynamics-coe/archive/2013/01/21/building-dynamics-crm-applications-for-windows-8-practical-approaches.aspx</id><published>2013-01-21T20:57:00Z</published><updated>2013-01-21T20:57:00Z</updated><content type="html">&lt;p style="text-align: justify;"&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;We are living in the age of &amp;ldquo;apps&amp;rdquo;. A quick search on internet will show that there are close to 15,000 apps registered in Windows 8 marketplace while Android is sprinting ahead with approximately 600,000 aps and Apple will reach record 1 million anytime now. We have huge opportunity in this space.&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;The Microsoft Dynamics CRM is also evangelizing apps for Windows 8. As per official communication, the Windows 8 app for Dynamics CRM 2011 will be available by mid of 2013. In addition, you can also build your custom app which sources data from Dynamics CRM. I am sure you will come across business scenario (different looks and feel app, app leveraging old versions 3.0/4.0 CRM etc.) where you need to build custom Windows 8 apps for Dynamics CRM.&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;This article is focused to discuss approaches to integrate Dynamics CRM in Windows 8 apps and pros-cons associated with them.&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;Challenges&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;If you try to use CRM SDK with Windows 8 app, you encounter loads of build errors because CRM SDK and Windows 8 app use two different platforms which are not compatible with each other. The CRM SDK classes are built with .Net Framework 4.0 as target while Windows 8 apps use &amp;ldquo;.NET for Windows Store Apps&amp;rdquo;. You find the same type of errors whether using early binding or late binding methods.&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;Solutions&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;So, how do we build Windows 8 apps which can talk to Dynamics CRM? There are roughly three approaches which we can take &amp;ndash; each with their set of pros and cons.&lt;/p&gt;
&lt;ul style="text-align: justify;"&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;Use WinRt compatible CRM Libraries&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: justify;"&gt;The Microsoft Dynamics Team has developed WinRt compatible CRM libraries (&lt;em&gt;WinRt.Microsoft.Crm.Sdk.Proxy&lt;/em&gt; and &lt;em&gt;WinRt.Microsoft.Xrm.Sdk&lt;/em&gt;) which you can use in Windows 8 app. Right now, the libraries are in pre-released state so you can download the code of the libraries along with a sample using them. I presume that the WinRt SDK will be officially released with the release Windows 8 client for Dynamics CRM. You can download WinRt compatible Libraries and sample from the following link &amp;ndash;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;a href="http://download.microsoft.com/download/1/A/A/1AA59217-D571-4E65-B037-FE59DD945A13/CRMSLSample.zip"&gt;http://download.microsoft.com/download/1/A/A/1AA59217-D571-4E65-B037-FE59DD945A13/CRMSLSample.zip&lt;/a&gt;&lt;/p&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="296"&gt;
&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="296"&gt;
&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="296"&gt;
&lt;p&gt;The SDK is the way to go as it will be integral&lt;br /&gt;&amp;nbsp; part of CRM release when it happens.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Works with CRM Online (Live and Office 365) ,&lt;br /&gt;&amp;nbsp; Claim Based and IFD deployment&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="296"&gt;
&lt;p&gt;Does not work with CRM on-premises deployments using&lt;br /&gt;&amp;nbsp; Active Directory authentication. [at present]&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;It is currently in sample stage only.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Will not work with old versions of Dynamics CRM (4.0&lt;br /&gt;&amp;nbsp; and 3.0).&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style="text-align: justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style="text-align: justify;"&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;Use Bridge WCF service&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: justify;"&gt;This is a simple approach which works with the current release of CRM SDK. It uses a WCF service as an intermediate service to normalize platform compatibility between CRM SDK and Windows 8 app. The following are the high level steps to use intermediate service &amp;ndash;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;ul style="text-align: justify;"&gt;
&lt;li&gt;Create a WCF Services project. Set target framework as .NET 4.0. It is important because the WCF service will use CRM SDK which is .NET 4.0 based.&lt;strong&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: justify;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;ul style="text-align: justify;"&gt;
&lt;li&gt;As per business need, create operations (methods) in WCF Service. Use data contracts and parameters which are compatible with &amp;ldquo;.NET for Windows Store Apps&amp;rdquo;. In my personal experience, I used native types (STRING, INT etc.), collections and also data classes without any hassles. Please use the following link to see what data types are compatible - &lt;a href="http://msdn.microsoft.com/en-GB/library/windows/apps/br230232.aspx"&gt;http://msdn.microsoft.com/en-GB/library/windows/apps/br230232.aspx&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: justify;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;ul style="text-align: justify;"&gt;
&lt;li&gt;In WCF operations or methods, use CRM SDK APIs to implement the method. You can use both early and late binding way of coding as per your comfort.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style="text-align: justify;"&gt;
&lt;li&gt;Finally, reference this WCF service in Windows 8 app and make calls to operations. If you are new to this, please refer the following links -&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: justify;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://msdn.microsoft.com/en-us/library/hh556233.aspx"&gt;http://msdn.microsoft.com/en-us/library/hh556233.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.tapanila.net/consuming-wcf-service-with-windows-8/"&gt;http://www.tapanila.net/consuming-wcf-service-with-windows-8/&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="296"&gt;
&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="296"&gt;
&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="296"&gt;
&lt;p&gt;Simple to use. Works with current release of CRM&lt;br /&gt;&amp;nbsp; SDK.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Works with CRM Online (Live and Office 365), IFD&lt;br /&gt;&amp;nbsp; deployment and On-Premise using Windows Authentication&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Possible to make calls to old versions (3.0 and&lt;br /&gt;&amp;nbsp; 4.0) of Dynamics CRM.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="296"&gt;
&lt;p&gt;More development effort due to development of&lt;br /&gt;&amp;nbsp; intermediate WCF method.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;You have to plan for deployment of intermediate WCF&lt;br /&gt;&amp;nbsp; service on some box. Overhead deployment task.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;After the release of CRM SDK for Windows 8 App, this&lt;br /&gt;&amp;nbsp; approach should not be used unless talking to old versions (3.0, 4.0) of&lt;br /&gt;&amp;nbsp; Dynamics CRM.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style="text-align: justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style="text-align: justify;"&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;Tweak Proxy Class in Early Binding&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: justify;"&gt;This approach also uses current release of CRM SDK but works only with early binding method. In brief, you create proxy for CRM web service and then change proxy class code to make it compatible with Windows 8 apps. Here are the steps &amp;ndash;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style="text-align: justify;"&gt;
&lt;li&gt;Use &lt;em&gt;CrmSvUtil &lt;/em&gt;utility to create proxy class for CRM Web Service&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style="text-align: justify;"&gt;
&lt;li&gt;Include proxy class in your Windows 8 app project. When you build the project it will throw close to 500 errors in proxy class due to platform in-compatibility between Windows 8 app and proxy class framework APIs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style="text-align: justify;"&gt;
&lt;li&gt;In proxy class, most of the errors are related to &lt;em&gt;&amp;ldquo;System.ComponentModel&amp;rdquo;&lt;/em&gt; class which does not support members like &lt;em&gt;INotifyPropertyChanging&lt;/em&gt;, &lt;em&gt;PropertyChangingEventHandler&lt;/em&gt; etc. in &amp;ldquo;.NET for Windows Store Apps&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style="text-align: justify;"&gt;
&lt;li&gt;You need to perform marathon task of manually removing and commenting/disabling these member usage and related code in proxy class.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: justify;"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Note: &lt;/strong&gt;Deleting these reference will have no&amp;nbsp;negative impact on the functionality.&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style="text-align: justify;"&gt;
&lt;li&gt;Once all the references are deleted, compile the code. After successful compilation, you are good to use this proxy class like you do in normal .NET client.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style="text-align: justify;"&gt;
&lt;li&gt;It is advisable to include proxy class in Portable Class Library (PCL - targeting .NET Framework 4.0 and above) project in place of Windows 8 client project directly.&amp;nbsp; The PCL project then can be referenced in Windows 8 client project. Please refer the following link to learn more about PCL - &lt;a href="http://msdn.microsoft.com/en-us/library/gg597391.aspx"&gt;http://msdn.microsoft.com/en-us/library/gg597391.aspx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style="text-align: justify;"&gt;
&lt;li&gt;There is a way to generate smaller proxy class by generating only those entities which are required. It simplifies things because then clean-up is performed on a smaller code. Please check the following link for the same - &lt;a href="http://erikpool.blogspot.co.uk/2011/03/filtering-generated-entities-with.html"&gt;http://erikpool.blogspot.co.uk/2011/03/filtering-generated-entities-with.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="296"&gt;
&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="296"&gt;
&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="296"&gt;
&lt;p&gt;Simple to use. Use early binding and strong data types.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Can leverage Event-based Asynchronous Pattern (EAP) &amp;ndash; async /await in Windows 8.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Works with CRM Online (Live and Office 365), IFD&lt;br /&gt;&amp;nbsp; deployment and On-Premise using Windows Authentication&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="296"&gt;
&lt;p&gt;Lengthy clean-up task. If proxy is regenerated due to&lt;br /&gt;&amp;nbsp; change in entity metadata then clean-up has to be performed each time.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Would recommend as intermediate approach till the CRM&lt;br /&gt;&amp;nbsp; SDK for WinRt gets released.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Will not work with old versions of Dynamics CRM.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style="text-align: justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;You have choices to use the approach you want. I would recommend using CRM SDK for WinRt when it is released. Till that happens, you can choose between approach 2 and 3. The approach 2 (Bridge Service) has advantage to work with old CRM versions as well. Hope you find this article useful.&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;Brajendra,&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10386955" width="1" height="1"&gt;</content><author><name>Brajendra Singh</name><uri>http://blogs.msdn.com/brajens_4000_live.com/ProfileUrlRedirect.ashx</uri></author><category term="WinRt" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/WinRt/" /><category term="Dynamics CRM" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/Dynamics+CRM/" /><category term="Windows 8 Apps" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/Windows+8+Apps/" /></entry><entry><title>Using windows AD groups for user management in Dynamics AX 2012</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/dynamics-coe/archive/2013/01/13/using-windows-ad-groups-for-user-management-in-ax2012.aspx" /><id>http://blogs.msdn.com/b/dynamics-coe/archive/2013/01/13/using-windows-ad-groups-for-user-management-in-ax2012.aspx</id><published>2013-01-13T13:33:00Z</published><updated>2013-01-13T13:33:00Z</updated><content type="html">&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;Ax 2012 has an interesting feature for user management. Instead of importing the users one by one and administering in the AX environment you can simply create a user for the Active Directory &amp;nbsp;group in the AX. The system will automatically create an AX user &amp;nbsp;for every member of the group when (s)he tries to access the system. This is a dynamic process, the user rights will be adjusted according to the current group membership at each logon. If a user is added to or removed from an AD group the changes will be applied the next logon.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;If the user who is logged on once is&amp;nbsp;removed from every AD group that has access to the system, we will get a little unintuitive result. The system will &lt;strong&gt;not&lt;/strong&gt; delete the user from the database (good so far), but the user will not be in any role in the system, not even in the default System User role. So (s)he will be able to log on, but nothing will work:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;This is the User screen of an auto imported user (watch the user ID)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/1106.1.jpg"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/1106.1.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;And this is, what the user sees from the system once removed from every user group:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif;"&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/4011.2.jpg"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-32/4011.2.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;This process has quite a few advantages. &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;The main being, that this process takes the burden of user management form the administrators of the AX system. Instead of having to manage hundreds of users they will have to manage a relatively few groups, and management usually means only creating the group and assign the role membership &amp;nbsp;to the groups.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;It will also increase the security of the system, as every functions that related to the authentication (who you are) are managed in their natural place the AD. Ax has only take care of the authorization (OK, given who you are, what are you allowed to do) related to the AX system. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;In enterprises it is quite common to have a central user rights management system, usually connected to the HR system. The majority of these systems handle AD groups, but I have not heard one that has an agent handling AX.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;The only disadvantage of this is, that the users automatically created by the system will have an id starting with $, see above. The other fields like user name and alias are created correctly.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;Because AX seems to be tracking the version of the AD object and modify the user effective roles only if it detects a change there is an interesting side effect you should be aware of (tested it on 2012 CU3). Suppose you have an existing user in the AX and the AD (i.e. the user already logged on to AX). You create a group in the AD and add the user to the group. If you create a user from the AD group in the AX and assigns the roles to it, the user will &lt;strong&gt;not &lt;/strong&gt;get the permissions from the role. What you should do instead is:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;Create the AD group empty&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;Add the group to the AX&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;Put the member to the group after the AX user is already created.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;It will work fine.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;Designing the structure of the groups and roles is very project dependent. What was working for us is:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;Create a group that will contain all the users of the AX system. Create the AX user for the group, only the default System User role should be assigned to it.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;Create an AD&amp;nbsp;group and the corresponding AX user per role. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;And let the AD admins administer your group membership. &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;Ill&amp;eacute;s&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10384535" width="1" height="1"&gt;</content><author><name>Illés Eszterhás</name><uri>http://blogs.msdn.com/illese_4000_hotmail.com/ProfileUrlRedirect.ashx</uri></author><category term="Dynamics AX 2012" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/Dynamics+AX+2012/" /><category term="Active Directory Groups" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/Active+Directory+Groups/" /><category term="User management" scheme="http://blogs.msdn.com/b/dynamics-coe/archive/tags/User+management/" /></entry></feed>