<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
   <channel>
      <title>C5 Insight: Dynamics CRM - Technical</title>
      <description>Technical topics related to Dynamics CRM. Intended for power users, administrators, or developers.</description>
      <link>http://pipes.yahoo.com/pipes/pipe.info?_id=61fe4b8edaabd2531afede3ac42be088</link>
      <atom:link rel="next" href="http://pipes.yahoo.com/pipes/pipe.run?_id=61fe4b8edaabd2531afede3ac42be088&amp;_render=rss&amp;page=2" />
      <pubDate>Sun, 26 Feb 2012 02:04:41 +0000</pubDate>
      <generator>http://pipes.yahoo.com/pipes/</generator>
      <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/C5DynamicsCRM/Technical" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="c5dynamicscrm/technical" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">C5DynamicsCRM/Technical</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><item>
         <title>Check-out our on-demand events at C5Tube.com</title>
         <link>http://feedproxy.google.com/~r/successacceleratorsdynamicscrm/~3/MkIYojVbrCE/</link>
         <description>Available 24/7, watch on-demand events about Microsoft SharePoint, Dynamics CRM, and Salesforce at &lt;a rel="nofollow" target="_blank" href='http://tube.c5insight.com'&gt;C5Tube.com&lt;/a&gt; and check successaccelerators.com often for updated events and webcasts.&lt;img src="http://feeds.feedburner.com/~r/successacceleratorsdynamicscrm/~4/MkIYojVbrCE" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">00000000-0000-0000-0000-000000000000</guid>
         <pubDate>Sat, 25 Feb 2012 00:00:00 +0000</pubDate>
      </item>
      <item>
         <title>Role Based Business Logic Strategy for CRM 2011</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/243/Role-Based-Business-Logic-Strategy-for-CRM-2011.aspx</link>
         <description>&lt;p&gt;Security roles are inherited by child business units in Microsoft Dynamics. As I mentioned in a previous blog &lt;a rel="nofollow" title="Sneaky Cylon Copies of Your CRM Security Roles" target="_blank" href="http://blogs.c5insight.com/Home/tabid/40/entryid/238/Sneaky-Cylon-Copies-of-Your-CRM-Security-Roles.aspx"&gt;Sneaky Cylon Copies of Your CRM Security Roles&lt;/a&gt;, security roles have linked copies that have the same name but are separate entries with their own unique guids for each business unit. This creates an interesting situation when you want to base business logic on a user’s security role memberships. Since the only thing that is effectively guaranteed to be the same between parent and inherited security roles is the name you need to enact some design patterns to use them in a consistent manor in your code. &lt;br /&gt;
  &lt;br /&gt;
I’ve mentioned this before but I’ll reiterate that according to Microsoft it is best practice to define your roles at the root business unit. Also mentioned as best practice is if you decide to create security roles below the root business unit that they have unique names across business units. An example of this is if you were to create a security role called Customer Service Manager in business unit A. The premise of this security role may be valid in other business units but you should not create security roles in the other business units with the same exact name. (FYI – You can’t use a security role defined in one business unit for another business unit unless they both inherit that role from a parent business unit). The reason for this rule will become apparent as we continue the discussion. &lt;br /&gt;
  &lt;br /&gt;
It stands to reason that when creating business rules based on security roles that you implement those rules using the name of the security role or roles. The security role names are the only thing guaranteed to be the same down the business unit hierarchy. This is one of the reasons why you want to make sure that if you decide to create security roles below the parent business unit that the names are different else you will not only have to check for the security role name, but also the business unit it applies to. Yeah sure you could probably get away with it but I’m all about making life easier. &lt;br /&gt;
  &lt;br /&gt;
Unfortunately I have seen places where security role business logic is baked into code with hard coded names of security roles. This just feels like a crime because if anything about those security roles change (like the name) then the logic in who knows how many places has to be updated to match. When the time comes and changes need to be made to a system I don’t want to have to worry about stepping on land mines if I change anything about the system. I have a real pet peeve about hard coded attribute names and such because it causes some poor person later on more work in order to update and maintain the code. The following is what I believe is a better way to go. &lt;br /&gt;
&lt;br /&gt;
If we assume that the name is what we have to key off of for security roles then we should obfuscate the name out of our code so that if it was to change then we don’t have to worry about all the places it is referenced. I’m thinking more in terms of JavaScript because that is where I’ve felt the most pain. In order to do this you could create the reference to the security role in a global variable in a JavaScript file that is global to the organization. I mentioned a methodology of doing this in a previous blog named &lt;a rel="nofollow" title="CRM 2011 JavaScript Library Methodology" target="_blank" href="http://blogs.c5insight.com/Home/tabid/40/entryid/232/CRM-2011-JavaScript-Library-Methodology.aspx"&gt;CRM 2011 JavaScript Library Methodology&lt;/a&gt;. This would give you a way to update the security role name if it ever changed and take care of its reference in other places in the code. A second way way to do this would be to obfuscate the role names would be to use a configuration entity to store the security role references (reference my previous blog on the configuration entity titled &lt;a rel="nofollow" title="Two Custom Entities that Are Useful in Every CRM Solution" target="_blank" href="http://blogs.c5insight.com/Home/tabid/40/entryid/208/Two-Custom-Entities-that-Are-Useful-in-Every-CRM-Solution.aspx"&gt;Two Custom Entities that Are Useful in Every CRM Solution&lt;/a&gt;. The cons to using the configuration entity as you might imagine is that it requires a service call to get the values. The thing that you have to evaluate when decided how to implement this is performance versus maintainability. If you store information in the configuration entity you at least have access to it from both JavaScript, plugins and workflow assemblies. This is really nice but when you have a system with a large number of users it just may not be practical. &lt;br /&gt;
&lt;br /&gt;
Just FYI, I have not yet had an opportunity to implement this in a project yet. I came up with this the other week when dealing with security role business logic. I don’t see why this design pattern wouldn’t work but I’ll certainly let you know when I get to try it out. The tactic seems sound at face value. Easy to implement and makes code easier to maintain. The day I get to see a project with code that has a proper level of obfuscation I will jump for joy, but I have a feeling I may be waiting a little while before that happens.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/243/Role-Based-Business-Logic-Strategy-for-CRM-2011.aspx</guid>
         <pubDate>Thu, 09 Feb 2012 20:00:00 +0000</pubDate>
      </item>
      <item>
         <title>Dynamics CRM Security Role Harvey Balls</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/242/Dynamics-CRM-Security-Role-Harvey-Balls.aspx</link>
         <description>&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Dynamics-CRMs-Harvey-Balls_116E6/Harvey%20Balls_2.png"&gt;&lt;img align="left" width="112" height="112" border="0" title="Harvey Balls" alt="Harvey Balls" style="background-image:none;border-right-width:0px;margin:0px 5px 0px 0px;padding-left:0px;padding-right:0px;display:inline;float:left;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Dynamics-CRMs-Harvey-Balls_116E6/Harvey%20Balls_thumb.png"/&gt;&lt;/a&gt;I was on a conference call the other week when Jack Bender, a Senior Consultant from Microsoft, mentioned Harvey Balls in reference to security role privileges. Later on I asked him what the heck he was talking about with this Harvey Ball stuff. If you already know the whole  Harvey Ball story then feel free to roll your eyes and give me the gas face. I just thought it was a somewhat odd description of the little balls used to adjust security permissions. For those of you who don't know what Harvey Balls are here is a brief summary so that when the time comes and you hear about Harvey Balls or you just want to impress someone by talking about them you'll be in the know. &lt;br /&gt;
&lt;br /&gt;
Harvey Balls, also known as Booz Balls as it pertains to CRM are the little round circles when you pull up a security role for adjusting user privileges. Harvey Balls are used for visual communication of qualitative information. In plain English they depict a relative state that makes sense for the context of what they are applied to. For example, I could apply Harvey Balls to depict my relative anger when a user calls to complain about something. The more filled the ball is the more frustrated I am the that this user just doesn’t understand that I am always right and he just doesn’t know what he is talking about. I’m kidding of course…&lt;/p&gt;
&lt;p&gt;When it comes to CRM, as it is shown at the bottom of the security roles window an empty ball means the security role has no rights to the entity or privilege. As you click on an individual ball it changes to increase the level of access for that particular access until finally the role has organization access to that privilege.&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Dynamics-CRMs-Harvey-Balls_116E6/clip_image001_2.jpg"&gt;&lt;img width="244" height="192" border="0" title="clip_image001" alt="clip_image001" style="background-image:none;border-right-width:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Dynamics-CRMs-Harvey-Balls_116E6/clip_image001_thumb.jpg"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Just for a bit of history, Harvey Poppel is credited with inventing Harvey Balls back in 1970 while working as a consultant for Booz Allen Hamilton. The fact that he was currently working for Booz Allen Hamilton is why they are sometimes referred to as Booz Balls. Mr. Poppel was known as the go-to guy when it came to increasing office productivity, and these balls struck him as a time saver. They were such a hit that quickly all Booz consultants were using them, and the rest is history. Harvey Balls are used in quite a number of application for obvious reasons. Personally I had seen them before I just never knew what they were actually called or the history behind them. Now I know, and so do you.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/242/Dynamics-CRM-Security-Role-Harvey-Balls.aspx</guid>
         <pubDate>Wed, 08 Feb 2012 20:00:00 +0000</pubDate>
      </item>
      <item>
         <title>The Hush Hush Way to Implement a Custom CRM 2011 Web Application</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/240/The-Hush-Hush-Way-to-Impliment-a-Custom-CRM-2011-Web-Application.aspx</link>
         <description>&lt;p&gt;There is something to be said for simplicity. When writing custom web application for CRM you can get fancy with Infragistics or Telerik controls and do all kinds of interesting and fun things. There are situations where using third party controls is certainly warranted. In the past I've always leaned towards using third party controls because they can make my life easier. I like being able to just throw a grid on a web form and update a few properties and have most of the work for display of data taken care of for me. As of late I have seen the value of bare bones custom web applications for CRM. As always it just depends on what you are doing and what you need to accomplish as to the need for the overhead of third party controls. But if possible it can be better to try and use vanilla HTML, JavaScript and CSS to accomplish your goal.&lt;/p&gt;
&lt;div&gt;The benefits of using vanilla web development technologies is fairly obvious.&lt;/div&gt;
&lt;ul&gt;
    &lt;li&gt;If you can accomplish everything in standard web tech you can include everything as web resources in your solution.&lt;/li&gt;
    &lt;li&gt;If you don't need third party controls you don't have to worry about the dependency of having those controls installed on the CRM servers. If you are implementing a server farm then you have to install the same controls X times based on the number of servers in your farm.&lt;/li&gt;
    &lt;li&gt;If you aren't using third party controls it makes it easier implement a custom web application as I will explain shortly.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;b&gt;The Hush Hush Way to Implement a Custom CRM Web Application&lt;/b&gt;    &lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;The official documentation states that when implementing a custom web application that it should be a separate web site and that the ISV folder has been deprecated. I understand where Microsoft is going with this because obviously they don't want your unknown code to be running within the same application pool and potentially cause issues with the CRM web service. The documentation also mentioned that this method of custom web application also takes into consideration that cross site scripting will not be an issue.   &lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;The interesting thing is that even thought the official documentation says create your apps externally depending on who you talk to at Microsoft the back door way of doing it is using an IIS virtual directory. There can be situations where certain things need to done using cross chatter between custom web apps and the CRM form. Microsoft consulting is actually using virtual directories themselves but it's more of a hush hush thing. They don't want to go and tell everyone to do this but it can be done.   &lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;The way to do it properly is when you create your virtual directory underneath the CRM web service you set it as an application and create a seperate application pool for it. This way you still avoid causing problems for the CRM web service while still being able to run your applications in the same "domain". The biggest things that this buys you is that you don't have to worry about cross site scripting so you get the ability to talk directly to the parent form in your web application. One thing to remember is that even if you include the ClientGlobalContext.js.aspx in your web page that it will not have the context of the form being that your app is running in an iFrame. You get the context of the organization but you can do things like ask the Xrm object what the Id of the form you are on. You need to go ask the parent window thing of that nature. Being in the same context as the parent window you can run any JavaScript method in the parent form too.   &lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;This method of creating custom web applications had worked out well. Even though it's sort of the undocumented way of doing it, I don't see off hand any real danger doing this. Yes things will change when updates come out but this seems to be a valid back door way of making web applications work with CRM.&lt;/div&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/240/The-Hush-Hush-Way-to-Impliment-a-Custom-CRM-2011-Web-Application.aspx</guid>
         <pubDate>Tue, 07 Feb 2012 20:00:00 +0000</pubDate>
      </item>
      <item>
         <title>Bad OData Calls Potentially Causes CRM Service Problems</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/239/Bad-OData-Calls-Potentially-Causes-CRM-Service-Problems.aspx</link>
         <description>&lt;p&gt;&lt;img hspace="5" alt="" align="left" style="width:71px;height:69px;" src="http://blogs.c5insight.com/Portals/0/BlogImages/Stephan/220px-Palpatine_ROTJ.jpg"/&gt;In the movie Star Wars Chancellor Palpatine outwardly appears to be a well-intentioned and loyal public servant and supporter of democracy, yet underneath his affable public persona lurks his true identity. His Sith name was Darth Sidious and accurately describes his true hidden nature. In a CRM project of any size you may end up with a decent amount of JavaScript to implement client side form customizations. Most likely there will be a need to make web service calls to get certain pieces of information about things such as the user, his/her roles, etc. You have to make sure your web service calls are being made correctly or else you could run into some "insidious" problems on your server.&lt;/p&gt;
&lt;p&gt;The nature of how we have to write JavaScript today leaves the door open to inadvertently make small mistakes that may not be obviously apparent. I ran across one such issue that appeared to be a minor issue with a JavaScript call to get a user's business units using the OData service. For a project I'm working on we have been dealing with issues when deploying to our UAT server environment. We share the box with another team and they have complained that our solution is bringing down the server somehow. The problem was not obvious but I had talked with someone on that team the other day and they mentioned they suspected it had something to do with web service calls. I shrugged my shoulders not really knowing how that would cause the CRM service to go down and went about my business. The problem was something other people were working on so I was focused on the tasks I had on my plate when I made an interesting discovery.&lt;br /&gt;
&lt;br /&gt;
Last night I was working on a custom web application and had left Fiddler open to watch what kind of calls Internet Explorer was making to the server. I was working on the opportunity form when I happened to look over and see red log entries passing by on the Fiddler display window. As it turns out, every time I opened the opportunity form it was making bad OData calls to get the business unit of the logged in user. What was happening is the method that was making the call to get the user's business was passing a null parameter to the method which was attempting to pass an invalid guid in the OData call.&lt;br /&gt;
&lt;br /&gt;
As it turns out this bad OData call apparently has been crashing our UAT server environment. We haven't confirmed this as yet but right now we believe that while yes we were making a bad OData call, the server should just return an error like it does in our development environment. What seems to be happening in our UAT environment is the bad OData call crashes the CRM service so there is potentially something on the Microsoft side going on too. This issue is under investigation but the evidence seems pretty compelling at the moment. The Microsoft guys are working to figure out how this is happening but in the meantime we are going to fix our bad OData calls and see if that corrects the issue.&lt;br /&gt;
&lt;br /&gt;
The bottom line is that it appears that if you end up making bad OData calls it could potentially cause server problems on the back end. If you find yourself in the situation use your Jedi powers and make sure to check your web service calls with a tool like Fiddler to make sure everything is as it should be...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Latest Update:&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
It appears that the problem may stem from the service account user being used not being properly setup with the correct permissions. When an error occurs in the system CRM may be attepting to write trace files and such that it can't access which cause the service to hang. This investigation is ongoing but this is the path being followed at the moment.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/239/Bad-OData-Calls-Potentially-Causes-CRM-Service-Problems.aspx</guid>
         <pubDate>Thu, 02 Feb 2012 20:00:00 +0000</pubDate>
      </item>
      <item>
         <title>Sneaky Cylon Copies of Your CRM Security Roles</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/238/Sneaky-Cylon-Copies-of-Your-CRM-Security-Roles.aspx</link>
         <description>&lt;div&gt; &lt;/div&gt;
&lt;div style="line-height:normal;margin-bottom:0pt;"&gt; &lt;/div&gt;
&lt;div&gt;&lt;img width="88" hspace="5" height="126" align="left" alt="" src="http://blogs.c5insight.com/Portals/0/BlogImages/Stephan/Cylon.jpg"/&gt;The best practice stated by Microsoft when dealing with security roles is not to create security roles underneath the root business unit of your organization. Each security role defined at the root is inherited by its child business units. In the case of a new organization the roles you get will be the out of the box security roles. The interesting thing about this is as a developer is that the UI deceives you into thinking that when you are looking at security roles that there is only one when in fact much like the Cylons in Battlestar Galatica there are multiple copies. What is happening behind the scenes is that for each child business unit the security role is being duplicated down the business unit hierarchy. If you are asking yourself why you should care then you have to consider instances when you want to know information about certain security roles in the system. If you are ever in a situation where you are looking for a security role by its guid like in a configuration setting you'll have to keep in mind that you can't just copy the guid you find in the interface and expect that it applies to all business units because they are all unique records with their own guids in the database.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;As of right now I would say the best way to grab security roles is somewhat unfortunately by name. At least the name is guaranteed to be the same in all the child business units. The problem with this approach is of course if you ever change the name of the role you are screwed with any code that relies on that name to be something specific. Just to prove the point I conducted a little experiment with a user to see what happens when I moved them from one business unit to another and reassigned them the same exact security roles.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;In the following example I have user Kara Thrace who is a member of a business unit that is changed to a second unit. You would expect that her security role guids would remain the same, but as you will see even though she was assigned to what appears to be the same exact security roles in the CRM interface they are actually Cylon copies that only appear to be the same thing.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;b&gt;Security role guids as member of business unit Galactica&lt;/b&gt;&lt;br /&gt;
Viper Pilot: &lt;span style="color:rgb(0,0,255);"&gt;086F539E-46B4-DF11-B769-005056A97446&lt;/span&gt;&lt;br /&gt;
Lieutenant: &lt;span style="color:rgb(0,0,255);"&gt;A62D06E2-43B4-DF11-B769-005056A97446&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;b&gt;Security role guids &lt;/b&gt;&lt;b&gt;as member of business unit Pegasus &lt;/b&gt;&lt;span&gt; (Hey these aren't the same security roles!)&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;Viper Pilot&lt;/span&gt;: &lt;span style="color:rgb(255,0,0);"&gt;325585EC-E71F-4FF2-B419-3AAF9C3690AF&lt;/span&gt;&lt;br /&gt;
Lieutenant: &lt;span style="color:rgb(255,0,0);"&gt;bF6E95E97-7BC8-41D3-B1ED-F172D51752D6&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The bottom line is keep in mind how security roles are implimented in the database so that you don't get caught trusting a Cylon security role and wonder why your code isn't working correctly.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/238/Sneaky-Cylon-Copies-of-Your-CRM-Security-Roles.aspx</guid>
         <pubDate>Wed, 01 Feb 2012 20:00:00 +0000</pubDate>
      </item>
      <item>
         <title>Adding a Twitter Feed to CRM Leads</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/231/Adding-a-Twitter-Feed-to-CRM-Leads.aspx</link>
         <description>&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Adding-a-Twitter-Feed-to-CRM-Leads_BDB7/image_2.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px 12px 0px 0px;padding-left:0px;padding-right:0px;display:inline;float:left;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Twitter Feed on CRM Form" border="0" alt="Twitter Feed on CRM Form" align="left" width="244" height="178" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Adding-a-Twitter-Feed-to-CRM-Leads_BDB7/image_thumb.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When reviewing a lead, account or contact prior to a sales call, it is always helpful to have as much context about a company prior to making the call.  Putting a Twitter feed on the CRM record for a lead can put this information in a place where it is easy for a sales person to quickly see it.  By passing in the name of the company dynamically, the feed can show relevant information about the specific company.&lt;/p&gt;
&lt;p&gt;Twitter makes it pretty easy to generate the “base” code for integrating with CRM (or any website) as a widget.  You can find their tools for generating widgets &lt;a rel="nofollow" title="Twitter CRM 2011 Widgets" target="_blank" href="https://twitter.com/about/resources/widgets"&gt;here&lt;/a&gt;.  Even if you use my code, below, as a starting point, you’ll likely find this link helpful as you start to fine-tune your code a bit.&lt;/p&gt;
&lt;p&gt;On the technical side, this post uses an HTML web resources to setup the Twitter integration on the Dynamics CRM 2011 lead form.  In general, this appears to be fairly straight forward, but there are a few ‘gotchas’ to work around.  Notably, ensuring that the script in inserted into the correct portion of the HTML code and structuring how you reference fields on your parent CRM form can be a bit tricky.&lt;/p&gt;
&lt;p&gt;Here is a step-by-step guide to setting up the Twitter feed.  This assumes some basic knowledge of creating Web Resources in CRM.&lt;/p&gt;
&lt;p&gt;1. Create a new Web Resource in the customizations area of CRM.  Use the following settings on it:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Name: Twitter&lt;/li&gt;
    &lt;li&gt;Display Name: Twitter Mash-Up by C5 Insight&lt;/li&gt;
    &lt;li&gt;Description: Displays a Twitter feed for the company on the Lead entity.&lt;/li&gt;
    &lt;li&gt;Type: Web Page (HTML)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;2. Click Text Editor.&lt;/p&gt;
&lt;p&gt;3. Click the source tab and enter or copy/paste the code from below.  IMPORTANT NOTE: Do &lt;u&gt;not&lt;/u&gt; paste this code into the rich text editor – be sure  you are on the source tab.&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;HTML&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;HEAD&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SCRIPT&lt;/span&gt; &lt;span class="attr"&gt;charset&lt;/span&gt;=&lt;span class="attr"&gt;utf-8&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;="http://widgets.twimg.com/j/2/widget.js"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;SCRIPT&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt; &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;/head&gt;&lt;/pre&gt; 
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt; true&amp;gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/231/Adding-a-Twitter-Feed-to-CRM-Leads.aspx</guid>
         <pubDate>Mon, 30 Jan 2012 22:10:00 +0000</pubDate>
      </item>
      <item>
         <title>CRM 2011 Date Oriented Solution Versioning</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/234/CRM-2011-Date-Oriented-Solution-Versioning.aspx</link>
         <description>&lt;p&gt;When working with solutions in a project often times I come across a few exports that I made previously. The probably I have is most people never update the version numbers on a solution. You end up with two or more solutions not really knowing what is in one versus another. Granted not knowing exactly what is in one solution versus another is still a problem, but the issue can at least be minimized.&lt;/p&gt;
&lt;p&gt;What I have started doing is setting the solution version numbers based on date timestamps. So for example after working on a WIP (work in progress) solution on my VM I'll set the solution version as a reversed date with the army time such as 2012.01.01.1500. Part of the reason I use this format instead of sequential solutoin versioning is that as far as I can tell there isn't an easy when to know when a solution as last updated. The date next to a solution in an organization shows the first import of the solution. If you make another import that date doesn't change.&lt;/p&gt;
&lt;p&gt;Using reverse date versioning not only do you know when the last time the solution was imported, but when you export the solution the file name will automatically be in a format that sorts in windows explorer. I've seen that there are a couple solutions out on codeplex for automatical versioning of solutions. I haven't tried those out for myself yet. I do know that it is kind of a pain to always have to manually update the solution version manually though.&lt;/p&gt;
&lt;p&gt;In a perfect world there would be a much tighter integration between CRM solutions and TFS so that the seperate components could be tracked and only those things a developer changes are locked/updated in the master tenant solution. This process could also handle the updating of component versions and also solutions as well. I'm sure we'll see some very interesting solutions to these problems as time goes by.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/234/CRM-2011-Date-Oriented-Solution-Versioning.aspx</guid>
         <pubDate>Mon, 30 Jan 2012 03:19:00 +0000</pubDate>
      </item>
      <item>
         <title>The CRM 2011 Multi-Developer Dilemma</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/233/The-CRM-2011-Multi-Developer-Dilemma.aspx</link>
         <description>&lt;p&gt;&lt;b&gt;&lt;font size="5"&gt;&lt;font size="4"&gt;&lt;font color="#4f81bd"&gt;Introduction&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div style="line-height:normal;margin:0in 0in 0pt;"&gt;&lt;span style="color:black;"&gt;Working on a project with multiple developers can be challenging. It requires collaborate and organization in order to take advantage of tasks that can be done in parallel and keep everyone on the same page. If you’ve ever tried to do this on CRM project you’ll find that as you add more developers to the project you quickly reach a tipping point where it becomes very difficult for them to not step on each other’s toes. &lt;/span&gt;&lt;/div&gt;
&lt;div style="margin:10pt 0in 0pt;"&gt;&lt;b&gt;&lt;font size="5"&gt;&lt;font size="4"&gt;&lt;font color="#4f81bd"&gt;Dancing on someone else’s toes&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style="line-height:normal;margin:0in 0in 0pt;"&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;
If you’ve ever heard anything like “Hey I made that form customization yesterday and now it’s gone!” then you know what it’s like trying to work with multiple developers on the same CRM solution. The additive nature of CRM solutions makes it very easy to overlay changes from one WIP (work in progress) solution on top of another developers work. &lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:normal;margin:0in 0in 0pt;"&gt; &lt;/div&gt;
&lt;div style="line-height:normal;margin:0in 0in 0pt;"&gt;&lt;span style="color:black;"&gt;The typical environment setup is to have a master tenant solution organization and then each developer receive a working copy of that solution on their on VM. As each developer completes a task that work is imported into the master tenant. In some situations work is best done directly on the master tenant out of the risk of work being lost during a WIP solution import.&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin:0in 0in 10pt;"&gt;&lt;b&gt;Task Based Division of Work&lt;br /&gt;
&lt;/b&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;
It makes sense that when working with multiple developers on a project that they ultimately end up taking on certain duties in the project in order to allow them to become more proficient and familiar with that area.&lt;/span&gt; &lt;span style="color:black;"&gt;For example there may be a developer that is assigned with making all the ribbon changes, another dev in charge of upgrading JavaScript from a previous version to the current version, perhaps another developer working on custom web apps. By doing this you also provide for a mechanism to diminish the conflicts that can arise when something that one developer does overwrites something that another developer is working on.&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
Entity Based Division of Work&lt;/b&gt;&lt;/div&gt;
&lt;div style="line-height:normal;margin:0in 0in 0pt;"&gt;&lt;span style="color:black;"&gt;When multiple developers are working on the same entity there are a couple of ways to help prevent developers from overwriting each other’s changes. If the option is available with multiple lines of business then if multiple user forms are an option then each developer can focus their work on a particular form versus having a single form while showing and hiding tabs/sections based on the user’s role/business unit. The downside of this method is that most likely there will be common elements between each form which will have to be duplicated between the various forms available.&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:normal;margin:0in 0in 0pt;"&gt; &lt;/div&gt;
&lt;div style="line-height:normal;margin:0in 0in 0pt;"&gt;&lt;span style="color:black;"&gt;&lt;strong&gt;Technology Based Division of Work&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:normal;margin:0in 0in 0pt;"&gt;&lt;span style="color:black;"&gt;&lt;span&gt;&lt;br /&gt;
Another way to segment the work on a CRM project is for specialized functionality to be encapsulated into Silverlight or ASP.NET components. These components can be worked on by developers independently while minimizing form customizations. This also can be useful if you have developer on your team that are not highly profecient at CRM. This allows them to focus on their core knowledge base which may be ASP.NET or Silverlight while being assisted by CRM knowledgable developers.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin:10pt 0in 0pt;"&gt;&lt;b&gt;&lt;font size="5"&gt;&lt;font size="4"&gt;&lt;font color="#4f81bd"&gt;Summary&lt;br /&gt;
&lt;br /&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style="margin:0in 0in 10pt;"&gt;In my mind if there was a better way to specifically target a solution component and have that work be more closely tied to TFS then it would be easier for developers to work without fear of overwriting . someone else’s changes. The problem is of course that you can export an entity for example, but you can’t just say I want one of its forms , views, reports, etc. If this were possible then the work could be more granularly assigned. Maybe that day will come sometime in the future. For now we have to just be careful and developers need to make sure to stay out of each other’s way.&lt;/div&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/233/The-CRM-2011-Multi-Developer-Dilemma.aspx</guid>
         <pubDate>Mon, 30 Jan 2012 03:09:00 +0000</pubDate>
      </item>
      <item>
         <title>CRM 2011 JavaScript Library Methodology</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/232/CRM-2011-JavaScript-Library-Methodology.aspx</link>
         <description>&lt;p&gt;&lt;b&gt;&lt;font size="5"&gt;&lt;font size="4"&gt;&lt;font color="#4f81bd"&gt;Introduction&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
If you've ever worked on a large CRM project or had to deal with a CRM 4 upgrade of any size you may quickly find yourself in a sea of JavaScript that can begin to look a little overwhelming. Personally I loathe most JavaScript that comes my way because you tend to get these 5 page long methods that do everything, all the field names are hard coded strings and option sets/form event mode constants are all numeric values so you can't just read the code and quickly understand what it is doing. To make matters worse JavaScript is not like coding in C# so there are so many more opportunities for things to go wrong. Since JavaScript is very loose and the tools available at the moment aren't very strong in design time error and dependency checking are not up to par with managed code it will pay big dividends to try and be a little stricter up front when it comes to writing your client side code and keeping those libraries organized.  &lt;/p&gt;
&lt;div&gt;The following is my conceptual working model that I'm working on as I've had to deal with development issues during my travels. Mind you I have not yet had an opportunity to implement this in an actual project yet so let's just call this an philosophical discussion for now.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;font size="5"&gt;&lt;font size="4"&gt;&lt;font color="#4f81bd"&gt;JavaScript Web Resource Functional Breakdown Structure&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;It is helpful to look at your JavaScript library from a top down hierarchical perspective. There is more investment up front in taking the time to organize this way because it requires more strategic thinking about the actual implementation but it pays dividend when the time comes to upgrade or maintain the solution code.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;1 -&amp;gt;Organization -&amp;gt; 2) Entity -&amp;gt; 3) Form -&amp;gt; 4) Function Area&lt;br /&gt;
&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;&lt;img alt="" width="396" height="248" src="http://blogs.c5insight.com/Portals/0/BlogImages/Stephan/JavaScript Structure.PNG"/&gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;Splitting the JavaScript files down in this way has several advantages:&lt;/div&gt;
&lt;ol type="1"&gt;
    &lt;li&gt;Keeps the code organized by functional concern and helps to reduce code duplication.&lt;br /&gt;
     &lt;/li&gt;
    &lt;li&gt;Splitting the code into files in this way allows for easier concurrent development in a multi-developer environment. When everything is in a few files then developers have to wait until the file is checked back in by someone else.&lt;br /&gt;
     &lt;/li&gt;
    &lt;li&gt;Reduces conceptual complexity by breaking down the functionality by area of concern. How easy is to read a 2 mile long JavaScript file?&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;As you can imagine the premise with this structure is that any code that is applicable to all entities should be put into the organization level file. Any code that is specific to a particular entity is put into the entity specific file and so on. The break down structure is really more of an tactical ideal than "the way" to do it. I'm not saying break all files down to the absolute bottom. It just depends on the side the problem you are trying to solve. I know in certain situations for example on the opportunity entity that there can be so much code that it made sense to break down the code into the bottom most layer of functional area.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;font size="5"&gt;&lt;font size="4"&gt;&lt;font color="#4f81bd"&gt;JavaScript Library Organization and Standards&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;span style="font-size:small;"&gt;&lt;b&gt;C# coding standards versus JavaScript coding standards&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;It has been very tempting to just use C# coding standards when it comes to method and variable naming. For example in JavaScript you’re your method names are supposed to start in lower case letters whereas in C# method names begin with Upper case letters. Since we are dealing with JavaScript I would say it’s best to stick with JavaScript coding practice. It doesn’t help though that when you go to add an event to a form field that the event names are camel case such as OnChange versus onchange.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;span style="font-size:small;"&gt;&lt;b&gt;Use of JavaScript name spaces to encapsulate solution code&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;If you look at the CRM JavaScript object model you’ll notice that the root object Xrm is actually just a JavaScript namespace. Underneath Xrm you get down to the methods that Microsoft has created to obfuscate you away from the actually code implementation. I think that it would be helpful to do the same when writing code for a solution. Instead of just having a file with a bunch of methods in it why not organize it similar to how you would in C#. This also has the added advantage of giving you the ability to use Visual Studio’s intellisense.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;span style="font-size:small;"&gt;&lt;b&gt;Don’t hard code everything&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;JavaScript is a pain as it is since it doesn’t have the same compile time error checking as C#. So if you’ve ever come across a large library with field names hardcoded everywhere you know what I’m talking about. I believe in keeping the same standard for your JavaScript as your C# code. Hard coded field names, option set values and form event enumerations are not very friendly to the developer that has to come in behind you to make code changes. As it is called in Agile terminology this is what is referred to as “technical debt”. There is a mess on the floor in the kitchen. Everyone can see the mess but no one want to clean it up out of fear they may break something that “already works”. Just don’t make the mess in the first place and no one has to worry about it later.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;font size="5"&gt;&lt;font size="4"&gt;&lt;font color="#4f81bd"&gt;Summary&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;JavaScript libraries in CRM can quickly become a beast to manage. While the amount of JavaScript necessary in solution for CRM 2011 is much less than it was in CRM 4 it can still be a force to be reckoned with and shouldn’t be taken lightly. As I continue down this path of JavaScript philosophy I’ll probably post a more detailed account of actually implementing this in practice.&lt;/div&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/232/CRM-2011-JavaScript-Library-Methodology.aspx</guid>
         <pubDate>Mon, 30 Jan 2012 02:25:00 +0000</pubDate>
      </item>
      <item>
         <title>A Slice of CRM Coding Philosophy</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/226/A-Slice-of-CRM-Coding-Philosophy.aspx</link>
         <description>&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/My-CRM-Coding-Philosophy_1299C/images_2.jpg"&gt;&lt;img title="images" border="0" alt="images" align="left" width="152" height="120" style="background-image:none;border-right-width:0px;margin:0px 5px 1px 0px;padding-left:0px;padding-right:0px;display:inline;float:left;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/My-CRM-Coding-Philosophy_1299C/images_thumb.jpg"/&gt;&lt;/a&gt;Every developer has their own style of writing code. I'm sure I'm not the only person that has inherited code from someone else only to make grimacing faces when you open it up in Visual Studio. I will admit that sometimes I want to slap people for what they have handed over to me but I'm sure someone has wanted to slap me a time or two as well. If you are like most developers you will have the immediate urge to "fix" this code to bring it up to your "standards". I'm no different. Not that I claim to be the swami of coding standards. I'm always learning and getting better but I think I am not bad compared to stuff I've seen. Here are a few of my philosophies. I have to say that a book that I read called Clean Code by &lt;a rel="nofollow" target="_blank" href="http://www.amazon.com/Robert-C.-Martin/e/B000APG87E/ref=sr_ntt_srch_lnk_1?qid=1325382072&amp;sr=8-1"&gt;Robert C. Martin&lt;/a&gt; has really made an impact on my thought process. I think in general we get so caught up in the work of writing code that we step back and think about how we are writing code. When it comes to coding with CRM 2011 I have some basic thoughts on what things should look like.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Let the code tell the story&lt;/b&gt;&lt;b&gt; &lt;br /&gt;
&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Unfortunately when I inherit someone else's code I see one huge method that requires me to hit the page down button a few times to see it all. This is one of my big gripes and plan on running for president of stop doing that crap to other people... organization. Even if you have comments in your code which is rare, if you are doing 50 different things all in one method then its harder to read when the poor smuck that gets stuck with your work after you are gone. Don't do that to them (or me)! Here is my main guideline for code:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Every method has a job and only one job. If you have to hit page down to see the whole method you either need a bigger monitor or you are doing too much.&lt;/li&gt;
    &lt;li&gt;Use verbose names that actually mean something and tell the story. Variable x doesn't mean jack to me or anyone else. Name your methods with the thing it's actually doing even if it tends to get long. I should be able to go into a main method and "read" what the application is doing. Let the variables and the method names become part of your documentation. If you do this then comments become less of a necessity, but I still don't mind if you leave me some.&lt;/li&gt;
    &lt;li&gt;Don't do all your work in your plugin Execute method or JavaScript event methods. I don't like to do my work in the event methods because that is where I want to start telling my code story. Event methods should call other methods to do the work. If you do it this way then when the next person that comes along needs to do something else they just have to add a new method call above or below yours. Does that make sense?&lt;/li&gt;
    &lt;li&gt;Don't hard code attribute names in your plugins or custom applications. If you are going to use late binding then at least declare your attributes names as constants. I absolutely can't stand looking at a custom app or plugin with 50 million hard coded attribute names all over the place.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;b&gt;Keep It Simple Stupid (KISS)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Every problem has more than one solution. If you don't think so then you either don't understand the problem well enough or you don't have a full grasp of the possible solutions. Perhaps the problem isn't even defined correctly in the first place. The point is don't make things more complicated than it needs to be. I inherited an application where the previous developer had written a custom ASP.NET application that was hosted in an iFrame of a form. In the host web page the developer retrieved an XML web resource from the server that contain a list of servers and then this was used to compile a URL to redirect the current page to the custom web application. Not only that but the developer invoked an ActiveX control to parse the XML file to get the settings. This seemed a little overly complex for just pointing the user at the right URL for the custom application besides the fact that the custom web app shouldn't be dependent on what CRM server we are on.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Question Your Conclusions (at least once)&lt;/b&gt;&lt;b&gt; &lt;br /&gt;
&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Like I said there are multiple solutions to a problem. You may come up with some good ones, but there are always more. Maybe the best way to go is with an ASP.NET application. It's probably better to go with a Silverlight solution but sure I'll take go with it. The more complex your solution the less likely it is the most appropriate solution. Ask yourself and someone else who you know won't sugar coat their opinions. If you're in a team situation then this problem won't be too much of a problem.&lt;/p&gt;
&lt;p&gt;This is just some of the things that go through my mind on projects. I'm in the process of coming with a more formalized development philosophy and strategy when it comes to multiple developer CRM projects so stay tuned and I'll float something out there shortly. Hope that this little byte of thought was at the least something to get you through your morning cup of coffee/hot pocket.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/226/A-Slice-of-CRM-Coding-Philosophy.aspx</guid>
         <pubDate>Sun, 01 Jan 2012 08:09:00 +0000</pubDate>
      </item>
      <item>
         <title>Dynamics CRM 2011 Custom Applications - Silverlight vs. ASP.NET</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/225/Dynamics-CRM-2011-Custom-Applications-Silverlight-vs-ASP-NET.aspx</link>
         <description>&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Microsoft-Dynamics-CRM-2011-Custom-A.NET_120FF/images_2.jpg"&gt;&lt;img title="images" border="0" alt="images" align="left" width="92" height="69" style="background-image:none;border-right-width:0px;margin:0px 5px 0px 0px;padding-left:0px;padding-right:0px;display:inline;float:left;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Microsoft-Dynamics-CRM-2011-Custom-A.NET_120FF/images_thumb.jpg"/&gt;&lt;/a&gt;If you've done any kind of customization work on Dynamics you've probably run into a situation at some point where the needs arises to create a custom application to suit the need. The debate that I always here is should it be done in ASP.NET or Silverlight. When I first started getting involved in CRM projects I didn't really have a strong opinion either way. I wasn't really up to speed on Silverlight either so I had a knowledge gap influencing my “shoulder shrug” treatment of the issue. Now that I know a thing or two more my opinion has shifted.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;ASP.NET&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;The thing that bugs me the most about custom ASP.NET application is the fact that it really needs to run in a separate website. You can play around with running your ASP.NET directly inside the CRM website (perhaps using the ISV folder or a virtual directory), but this usage has been deprecated by Microsoft. To make matters worse if you want to try and use third party controls in your ASP.NET application like Infragistics or Telerik inside the CRM application pool you can pretty much kiss that idea goodbye. The CRM application pool runs in Classic managed pipeline mode so unless you know something I don't (which is certainly possible) the third party controls had problems when I attempted this myself. Granted maybe there was a way to get them working but it wasn't a battle I needed to fight at the time.&lt;/p&gt;
&lt;p&gt;So when you do these external apps Microsoft wants you to create a whole new website and run it in a different application pool. This process in itself just doesn't feel clean to me. I understand the premise but the fact that I have to go out of my way is irritating. The other thing that is problematic is that by running your app on a separate port you introduce cross site scripting issues.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Silverlight&lt;/b&gt;&lt;b&gt; &lt;br /&gt;
&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Admittedly I avoided Silverlight in the beginning because I felt like it was more fluff and it wasn't something I wanted to bother having to learn. I kept hearing about XAML and I thought that was just one more thing to have to learn as well. But then I came across a situation where I had no choice but to dive in with both feet and get it under my belt. My learning curve was surprisingly low. I had done some Windows Forms development in the past and found Silverlight was very similar. Also the project I was working on used Infragistics and I was already familiar with the object model of their controls for Windows Forms so picking up the Silverlight version wasn't too bad. This is all fine, but that's not what got me on Silverlight.&lt;/p&gt;
&lt;p&gt;I have written ASP.NET for Dynamics and now that I have written Silverlight for Dynamics I don't think that in most situations that I would go with ASP.NET. So what are the benefits of using Silverlight over ASP.NET? Here are a few of the pros I can think of off the top of my head.&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Silverlight application it can be added to the solution as a web resource which is huge.&lt;/li&gt;
    &lt;li&gt;Your Silverlight application runs when the user is running offline from the CRM system.&lt;/li&gt;
    &lt;li&gt;Silverlight applications run within the CRM web service so you get access to the form context.&lt;/li&gt;
    &lt;li&gt;The complexity of an automated build process is reduced by not having to worry about setting up external web sites.&lt;/li&gt;
    &lt;li&gt;Silverlight running in the context of the web service makes your cross site scripting issues go away.&lt;/li&gt;
    &lt;li&gt;You don't have to install any third party tools on your servers.&lt;/li&gt;
    &lt;li&gt;Silverlight can run in browser or out of browser and with some policy adjustments gain access to client side resources.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;The Argument against Silverlight&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;So even though Silverlight is great and cool there are still people who hesitate to deploy it in their solution for different reasons. One reason I've heard is "We don't have anyone on staff that knows Silverlight.". Okay that's fine. But it's not so hard to learn to make it impossible to use it. The more interesting reason I've heard comes from the question of Silverlight's future. What is going to happen? Is Microsoft going to abandon the Silverlight baby and we'll all be stuck with a dead technology?!!!! No I don't see that happening. Besides Microsoft just came out and said they are supporting Silverlight for the next 10 years.&lt;/p&gt;
&lt;p&gt;No I don't think Silverlight is going to die. Yes I know about HTML5. While it certainly will be a nice enhancement to us all it still isn't a real technology yet. I still don't see how HTML5 is going to replace our RIA technologies completely especially for line of business type applications. It is very nice to be able to write managed code with a powerful editor such as Visual Studio. Believe me I've toyed around with the idea of writing custom web apps with just HTML, CSS and JavaScript, but I like my run time error checking.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Summing it up&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Silverlight is awesome. ASP.NET is fine, but in the case of custom application I will have to lean towards Silverlight unless there is some institutional or compelling reason not to. I think there are too many benefits that outweigh the cons. In my humble opinion you should go for Silverlight apps in your solutions and go for ASP.NET apps only if it becomes necessary.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/225/Dynamics-CRM-2011-Custom-Applications-Silverlight-vs-ASP-NET.aspx</guid>
         <pubDate>Sun, 01 Jan 2012 07:35:00 +0000</pubDate>
      </item>
      <item>
         <title>A Slightly Tricky CRM 2011 SDK Silverlight Deployment Anomaly</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/223/A-Slightly-Tricky-CRM-2011-SDK-Silverlight-Deployment-Anomaly.aspx</link>
         <description>&lt;p&gt;&lt;img align="left" width="138" height="190" style="margin:0px 5px 0px 0px;display:inline;float:left;" alt="" src="http://jammcoaching.com/wp-content/uploads/2011/06/mr-bill-ohh-nooo1.jpg"/&gt;So imagine you’ve created this awesome Silverlight application. The app works great and everyone’s happy. In this particular case the client was using an automated build tool called Anthill which is how they deploy their CRM solutions. The later versions of the CRM SDK have a deploy function where you can have your code in TFS and deploy your plugins and web resources straight from your project after pointing the Visual Studio CRM Explorer add-in to a specified server and organization. This all sounds great until I get a call saying that my wonderful Silverlight application isn’t working.&lt;/p&gt;
&lt;p&gt;Distraught and aggravated I start contemplating would could have possible gone wrong. What could I have possibly done wrong? As it turns out when I go to the deployment server the Silverlight control decided to not show up in a matter of speaking. Just to give some background this is a Silverlight control hosted in an HTML web resource displayed in the form content iFrame from a navigation link. The page shows up just fine, but my control isn’t loading. Weird…&lt;/p&gt;
&lt;p&gt;CRM stores web resources in its SQL Server database. When you create an HTML web resource it changes the Silverlight object tag and encodes the parameter information so it isn’t the same as what you may have uploaded. After a conversation with a Microsoft engineer I became concerned thinking that either the XAP file could be corrupted in the database or the encoding was somehow was messed up in my object tag. At first I couldn’t see anything wrong. Everything appeared to be in order.&lt;/p&gt;
&lt;p&gt;The following is the process I underwent to discover the problem:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Checked to see if the Silverlight control was functioning correctly:
    &lt;ol&gt;
        &lt;li&gt;Placed the Silverlight control directly on the form.&lt;/li&gt;
        &lt;li&gt;Opened the Silverlight control directly from the web resource dialog.&lt;/li&gt;
    &lt;/ol&gt;
    &lt;/li&gt;
    &lt;li&gt;Check to see if the host web page was displaying correctly:
    &lt;ol&gt;
        &lt;li&gt;Updated the HTML to view changes were updating in iFrame.&lt;/li&gt;
        &lt;li&gt;Debugged the Silverlight object tag to ensure that the parameters were still set correctly and they appeared to be good.&lt;/li&gt;
        &lt;li&gt;Overwrote the HTML with a known working copy to check if something was corrupted.&lt;/li&gt;
        &lt;li&gt;Used Fiddler to see if anything stood out watching IE’s server calls.&lt;/li&gt;
    &lt;/ol&gt;
    &lt;/li&gt;
    &lt;li&gt;Check to see if I could reproduce the problem on another system:
    &lt;ol&gt;
        &lt;li&gt;Imported the solution to my test VM and everything worked fine.&lt;/li&gt;
        &lt;li&gt;Created new test org on my VM and used the Visual Studio deploy operation and BOOM! Nadda.&lt;/li&gt;
    &lt;/ol&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As it turns out when I used the deploy function my control would never display on the host page. This was particularly perplexing because it was a difficult to determine the problem. I recalled one of my coworkers stating a problem he had using the deploy mechanism to reload an existing org. He mentioned that another developer had manually unregistered and reregistered a plugin assembly and that he couldn’t use the deploy process anymore because it was complaining that the guid’s were not the same. In TFS we keep a copy of the org customizations that we import separately before we use the deploy function. When I looked in this solution I couldn’t find my host web page or my Silverlight control although the deploy process was creating them on it’s own. I added my host web page and Silverlight control to that solution and everything started working.&lt;/p&gt;
&lt;p&gt;Don’t take this to the bank but, here is my observation and conclusion. The host HTML page and Silverlight control were not in the solution that was being imported into the target organization. The deployment process would take what it saw needed to be on the server and deploy them as new web resources. I believe the problem has something to do with the Silverlight XAP file being stored in the database with a specified id. The encoded HTML page was pointing at that particular Id, but the Id changed because the XAP file was not part of the solution. After adding the necessary files the Id’s remained the same thereby keeping the pointers correct when the solution was deployed using the SDK tool.&lt;/p&gt;
&lt;p&gt;I know this is probably a unique problem and is less likely to happen, but this is what I discovered to correct the problem I was having with my Silverlight app. Now I have regained my former glory as master of Silverlight.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/223/A-Slightly-Tricky-CRM-2011-SDK-Silverlight-Deployment-Anomaly.aspx</guid>
         <pubDate>Wed, 21 Dec 2011 09:16:00 +0000</pubDate>
      </item>
      <item>
         <title>Quick Tip: Deactivating and Archiving CRM E-Mail Templates</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/221/Quick-Tip-Deactivating-and-Archiving-CRM-E-Mail-Templates.aspx</link>
         <description>&lt;p&gt;Email templates are a great feature in Microsoft Dynamics CRM 2011.  The problem is that, over time, administrators and users may create a lot of these templates.  Then, when a user goes to select a template for an outbound email, they need to put on their boots to wade through dozens of templates to find the one that they’re looking for.  Unfortunately, there is no option to deactivate an email template record to mitigate this problem without deleting the old e-mail templates.&lt;/p&gt;
&lt;p&gt;What do most users do when they are overwhelmed by so many things to choose from?  They give up and don’t use the templates at all!&lt;/p&gt;
&lt;p&gt;What do most system administrators do about this problem?  Nothing.  Because they’re afraid they might need one of those old templates (or that some user out there may still be using it).&lt;/p&gt;
&lt;p&gt;So how can you have the best of both worlds?  How can you have access to all of your email templates, but hide the ones that no one is using anymore without deleting them?  Here is one approach you can use that leverages Solutions in CRM.&lt;/p&gt;
&lt;p&gt;1. First of all, create a new solution called “Email Templates”.  To do this, you will navigate to Settings | Solutions, click the New button and create a new solution.  The values in the fields here don’t matter too much.&lt;/p&gt;
&lt;p&gt;2. Next, you’ll put all of the old e-mail templates into the solution.  Open the solution (if it isn’t already), navigate to E-mail Templates in the side navigation bar, click the Add Existing button, and select all of the e-mails that you want in the solution.  Save and Close the solution when you’re done.  Check out the picture, below, for more information.&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/64462822eff6_1043C/SNAGHTMLf672ccb.png"&gt;&lt;img title="Microsoft Dynamics CRM 2011 E-Mail Template Solution" border="0" alt="E-Mail Templates Solution in CRM 2011" width="240" height="228" style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/64462822eff6_1043C/SNAGHTMLf672ccb_thumb.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3. Then you will export the solution.  When you export the solution, it will create an external copy of all your templates that you can save elsewhere.  That way you can get them back when you need them.  In the Settings | Solutions area, select the solution that you just created and click the Export button.  Save the file somewhere that it is safe.&lt;/p&gt;
&lt;p&gt;4. Lastly, you can delete the old templates from CRM knowing that you can get them back later if needed.&lt;/p&gt;
&lt;p&gt;Unfortunately, if you decide you need one of these templates back in the future, CRM 2011 will not allow you to import just one template – you will have to import the entire solution.  We deal with this by keeping the templates in a development environment so that we can easily create a new solution with just the template(s) that are needed, export it from the development instance of CRM 2011 and import it into our production instance.  If you do not have a second CRM environment for this purpose, you can quickly create a new CRM Online instance (Microsoft gives you 30 day trials for free), import your solution there, create a new solution with just the templates that you need, export it, and re-import it into CRM.  If you need to create a trial account, &lt;a rel="nofollow" title="CRM Online for E-Mail Template Solutions" target="_blank" href="http://crm.dynamics.com/en-us/trial-overview"&gt;click here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Now go clean up all those old templates so that it will be easier for users to find the templates that they need!&lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/221/Quick-Tip-Deactivating-and-Archiving-CRM-E-Mail-Templates.aspx</guid>
         <pubDate>Thu, 08 Dec 2011 06:28:00 +0000</pubDate>
      </item>
      <item>
         <title>Managing Web Resources and Plug-ins with the CRM Developer Toolkit</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/220/Managing-Web-Resources-and-Plug-ins-with-the-CRM-Developer-Toolkit.aspx</link>
         <description>&lt;p&gt;I’ve been watching the &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/hh372957.aspx"&gt;CRM Developer Toolkit&lt;/a&gt; since it was in CodePlex for CRM 4.0 and, while it had some nice features, it came at the price of requiring too many changes to my team’s methodology. With the most recent release in SDK 5.0.7 however, the toolkit has become a productivity enhancing add-on that I can’t live without. The CRM Solution template does a fantastic job of managing and deploying the Web Resources, Plug-ins, Workflows and Silverlight in my solutions. As great as it is, there are still a few pitfalls to watch out for so here is a list of do’s and don’ts when it comes to using the toolkit.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h5&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;Only create Web Resources in CRM&lt;/b&gt;&lt;/h5&gt;
&lt;p&gt;The developer toolkit makes it very easy to add new Jscript files to your solution, so you may be tempted to do so, but there’s a problem here. Visual Studio doesn’t know about your solution’s provider prefix, so that gets added to the Web Resource when you deploy. This makes your solution appear out-of-sync with CRM since the file name in Visual Studio remains the same un-prefixed name you created it with. The safest and most consistent approach is to create new Web Resources in CRM and then use the &lt;b&gt;Add to packaging project&lt;/b&gt; feature of the CRM explorer. This also works well if you want to start using the toolkit on an existing CRM solution.&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Managing-Web-Resources-and-Plug-ins-with_761E/clip_image001%5B4%5D.png"&gt;&lt;img title="clip_image001[4]" border="0" alt="clip_image001[4]" width="244" height="73" style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Managing-Web-Resources-and-Plug-ins-with_761E/clip_image001%5B4%5D_thumb.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Note: Microsoft has a &lt;/i&gt;&lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/8c947e83-6765-41d9-b4b7-c078a68257eb#BKMK_ReferencingWebResources"&gt;&lt;i&gt;recommended naming convention&lt;/i&gt;&lt;/a&gt;&lt;i&gt; that includes slashes (/) in the resource names for Web Resources. This will cause an error ins Visual Studio when you attempt to import them, so you may want to consider that before using that approach.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h5&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;Solution Deploy Updates Jscript – almost&lt;/b&gt;&lt;/h5&gt;
&lt;p&gt;If you make a change to a Jscript file in your solution and then deploy it, the changes will be sent to the CRM server as though you edited the Web Resource file directly, however you still must Publish the change before it will take effect. The same goes for other Web Resources like web pages, images and stylesheets. This is most efficiently accomplished by opening the Entity form in Visual Studio from the Entity Browser of the CRM Explorer. &lt;br /&gt;
&lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Managing-Web-Resources-and-Plug-ins-with_761E/clip_image002%5B4%5D.png"&gt;&lt;img title="clip_image002[4]" border="0" alt="clip_image002[4]" width="244" height="80" style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Managing-Web-Resources-and-Plug-ins-with_761E/clip_image002%5B4%5D_thumb.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h5&gt;&lt;b&gt;3. &lt;/b&gt;&lt;b&gt;Plug-in Creation and Debugging&lt;/b&gt;&lt;/h5&gt;
&lt;p&gt;The Create Plug-in wizard is reason enough to use the Developer Toolkit. All of the Messages for each Entity can be selected and depending on the Message and Pipeline Stage selected, the Pre/Post Image options become editable. The Select Attributes screen can even function as a rudimentary CRM browser! &lt;br /&gt;
&lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Managing-Web-Resources-and-Plug-ins-with_761E/clip_image003%5B4%5D.png"&gt;&lt;img title="clip_image003[4]" border="0" alt="clip_image003[4]" width="228" height="244" style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Managing-Web-Resources-and-Plug-ins-with_761E/clip_image003%5B4%5D_thumb.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you do create an Image Alias, the plug-in class created by Visual Studio has code inserted to make your image available to you automatically:&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Managing-Web-Resources-and-Plug-ins-with_761E/clip_image005%5B4%5D.jpg"&gt;&lt;img title="clip_image005[4]" border="0" alt="clip_image005[4]" width="244" height="67" style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Managing-Web-Resources-and-Plug-ins-with_761E/clip_image005%5B4%5D_thumb.jpg"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When the wizard finishes, the plug-in class is created for you and is added to the RegisterFile.crmregister (make sure it is checked out &lt;u&gt;before&lt;/u&gt; you start the wizard). If you need to make any changes to your plug-in’s registration attributes, you will have to edit the RegisterFile manually.&lt;/p&gt;
&lt;p&gt;Another feature in the Developer Toolkit is the plug-in superclass.  All plug-ins created extend a new class that provides “helpful” context, tracing and event registration in the constructor. Take a look at the Plugin.cs file included in the Plug-in project for more details.&lt;/p&gt;
&lt;p&gt;Debugging works well once you follow &lt;a rel="nofollow" target="_blank" href="http://erikpool.blogspot.com/2011/02/crm-2011-plug-in-tips-and-tricks-part-1.html"&gt;the setup instructions&lt;/a&gt;, though copying the PDB file remains a manual step. Also note, the sandbox process (Microsoft.Crm.Sandbox.WorkerProcess) is not started until after a plug-in is run, so you will have to invoke it (or another one) at least once before you will be able to debug.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/220/Managing-Web-Resources-and-Plug-ins-with-the-CRM-Developer-Toolkit.aspx</guid>
         <pubDate>Tue, 29 Nov 2011 19:34:00 +0000</pubDate>
      </item>
      <item>
         <title>Lessons on the CRM 2011 Customer Address Entity</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/213/Lessons-on-the-CRM-2011-Customer-Address-Entity.aspx</link>
         <description>&lt;p&gt;The Customer Address entity is one of those special entities in CRM. As you probably know it stores address and shipping information for accounts and contacts. I had worked on a project where we had hoped that we could attach a custom entity to the address entity like any other entity. We found out that customer address is special. It’s one of those entities where Microsoft slaps your hands and says only we can use it so keep out, but that’s another story.   &lt;br /&gt;    &lt;br /&gt;The interesting thing about the address entity is that as you look at an account or contact form fields you’ll notice that there are fields for address1 and address2 addresses. You can add as many additional addresses as you want, but the first two are special. On the same project I mentioned previously we were synchronizing information between Microsoft CRM and ERP systems. We had an issue in that the ERP systems were not giving me a unique way of identifying an address. Every time I would get an update I did the easiest thing which was to remove all addresses and then add them back according to what the ERP said they should be. I found this to be problematic as for some records (specifically contacts) I was unable to save the record anymore in the interface getting an error of Generic SQL error which I love so much.     &lt;br /&gt;    &lt;br /&gt;After some theories and tests I discovered the issue. Despite the fact that you see both address1 and address2 fields on the contact form the addresses are not actually stored on that entity. All the addresses are stored in the customer address entity. The fields you see on account and contact are really pointers to these records. The problem saving I had was partially my fault and partially Microsoft’s. I don’t believe Microsoft ever intended for anyone to actually remove the first two addresses even though it was perfectly “legal” to do in code. I noticed that when I did this and try to add new addresses that my new addresses were pushed back to start with address 3 instead of 1. I found that behind the scenes Microsoft was automatically recreating the addresses that I deleted at least for address 1. Address 2 was never recreated (pre-rollup releases) and there was a pointer to this address 2 record that was supposed to be there for the entity. After I stopped removing address1 and 2 and instead chose to update these two addresses instead my problems went away.    &lt;br /&gt;    &lt;br /&gt;So the premise of this blog is that if you are going to do anything special with addresses do not ever remove address 1 or 2. These are built in and should only be updated else you may find yourself looking at a generic SQL error message that tells you nothing about what is actually happening.     &lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/213/Lessons-on-the-CRM-2011-Customer-Address-Entity.aspx</guid>
         <pubDate>Wed, 16 Nov 2011 09:39:05 +0000</pubDate>
      </item>
      <item>
         <title>Microsoft Dynamics CRM 2011 Solution Management Strategy Review</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/209/Microsoft-Dynamics-CRM-2011-Solution-Management-Strategy-Review.aspx</link>
         <description>&lt;p&gt;I recently read the &lt;a rel="nofollow" target="_blank" href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;id=27824"&gt;Microsoft Whitepaper&lt;/a&gt; that was released a few days ago titled “Deploying Microsoft Dynamics CRM 2011 and CRM Online Solutions from Development through Test and Production Environments”. From what I saw the authors are recommending the same thought process I had about solution management in the software development life cycle. &lt;/p&gt;  &lt;p&gt;For development purposes you slice up the project into component layers. The layers are composed by functionality and also to allow for less contention by members of a development team. In a discussion with some Microsoft consultants they split up a project into 6 solutions as follows:&lt;/p&gt;  &lt;p&gt;1. Security Roles&lt;/p&gt;  &lt;p&gt;2. Web Resources&lt;/p&gt;  &lt;p&gt;3. Customizations&lt;/p&gt;  &lt;p&gt;4. Plugin Assemblies&lt;/p&gt;  &lt;p&gt;5. Plugin Steps&lt;/p&gt;  &lt;p&gt;6. Workflows&lt;/p&gt;  &lt;p&gt;Security roles came first on the stack because you may have forms that are dependent on role based security. If the roles aren’t included in that solution they must exist already for the solution to import correctly. The rest of the layers are pretty self-describing. The only other question I asked was why have separate solutions for plugins and then for the plugin steps. They just said that it was more of a logical separation so that one could be updated without affecting the other. Once the development phase is completed the solutions are merged into a unified managed solution that is then deployed to a test environment and then ultimately into a production environment.&lt;/p&gt;  &lt;p&gt;In my opinion, one of the pros of having a single managed release solution is that you don’t have to worry about dependencies. I’ve heard that there can sometimes be issues with managed solutions with dependencies where you can get into an uninstallable state. For example, say you have managed solution A that has a dependency on managed solution B. Somehow those solutions can get into a deadlocked state that could cause one or more of the solutions to be stuck. Personally I haven’t seen this happen yet, but I don’t doubt that it is possible.&lt;/p&gt;  &lt;p&gt;One con of a single managed solution is that if it is very large you could run into time out errors when importing the solution. My thought on this to try to mitigate this by perform the import directly on the server itself and if necessary decide how to slice the solution into more than one layer from there.&lt;/p&gt;  &lt;p&gt;If you can deploy a single managed solution then some of the pros are as follows: &lt;/p&gt;  &lt;p&gt;· Real version control (Deleting unmanaged solutions doesn’t remove anything)&lt;/p&gt;  &lt;p&gt;· Rollback capability (Deleting unmanaged solutions doesn’t roll anything back)&lt;/p&gt;  &lt;p&gt;· A way to prevent accidental tinkering with the production solution&lt;/p&gt;  &lt;p&gt;Another con you may have with managed solutions in a production environment is the loss of data for custom entities and fields in the solution. I understand the warm and fuzzy feeling of it, but I don’t think that this is a show stopper assuming proper backups are being made of the CRM server and the database. Obviously you would take the data loss into consideration before performing an uninstall. I think the main purposes of having a managed solution is exactly the ability to roll the system back to a previous state. I would think that ideally (if you can call it that) your worst case scenario should be to restore from backups to return the system to a previous state. You don’t have this option if you are running CRM online. Since you don’t have direct access to the database you are pretty much stuck having to do everything manually with unmanaged online solutions.&lt;/p&gt;  &lt;p&gt;In his blog on solutions &amp; release management &lt;a rel="nofollow" target="_blank" href="http://ayazahmad.wordpress.com/"&gt;Ayaz Ahmad&lt;/a&gt; shows a scenario where you deploy managed releases on top of each other in the production environment. &lt;/p&gt;  &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Microsoft-Dynamics-CRM-2011-Solution-Man_14A9E/image_2.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Microsoft-Dynamics-CRM-2011-Solution-Man_14A9E/image_thumb.png" width="244" height="183"/&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;I particularly like his methodology because I think it reduces unnecessary complexity of having X different solutions to maintain. I am having a hard time seeing what having so many solutions is going to buy you in the end. In this scenario you can then deploy hotfixes on top of the release solutions for any incremental changes that need to be made.&lt;/p&gt;  &lt;p&gt;I think we all get Microsoft’s intent behind managed solutions. Maybe the model isn’t mature quite yet? I don’t know. I think you do have to keep reconsidering it as new rollup updates are being released. Managed solutions are what you are meant to use in a production environment and ultimately is the way to go for both online and on-premise solutions. &lt;/p&gt;  &lt;p&gt;Let me conclude that I say all of this with a grain of salt. Not every company will be able to implement managed solutions. There may be IT policies in place that make using this solution methodology impractical or not possible at all. Having a multiple layered development solution and then a single test and production managed solution also makes for more work when it comes to automated builds as well.&lt;/p&gt;  &lt;p&gt;As far as I can tell the CRM minds are still at work trying to formulate what the best practices are for managing solutions in the development life cycle. I do believe that ultimately the managed solution route is what was intended for production environments and not just for ISV’s. I expect that there will be continued improvement and contributions to the solution management philosophy in the near future.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/209/Microsoft-Dynamics-CRM-2011-Solution-Management-Strategy-Review.aspx</guid>
         <pubDate>Tue, 01 Nov 2011 08:31:40 +0000</pubDate>
      </item>
      <item>
         <title>Two Custom Entities that Are Useful in Every CRM Solution</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/208/Two-Custom-Entities-that-Are-Useful-in-Every-CRM-Solution.aspx</link>
         <description>&lt;p&gt;I know you are probably waiting with anticipation as to what two entities I’m referring to in my title. Well without keeping you in such suspense I’ll go ahead and tell you. The two entities are very common things that we find in our everyday development lives which are the Event Log and Configuration entities. Yes I know this is amazingly obvious but I can’t say that every project I’ve worked on had these two entities. Maybe it’s not so obvious. If you aren’t a believer let me talk about my logic for having these.&lt;/p&gt;  &lt;h4&gt;The Event Log&lt;/h4&gt;  &lt;p&gt;So we all know there is the Windows event log viewer that we can use to go see various system events that have happened. This is always a nice tool to have when something more amorphous is happening behind the scenes and you want to try to find out more information about what is happening in the system.&lt;/p&gt;  &lt;p&gt;Figure 1&lt;/p&gt;  &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Two-Custom-Entities-that-Are-Useful-in-E_149DE/clip_image002_2.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="clip_image002" border="0" alt="clip_image002" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Two-Custom-Entities-that-Are-Useful-in-E_149DE/clip_image002_thumb.jpg" width="244" height="104"/&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In your CRM system you have background workflows and plug-ins executing and sometimes things happen or a user complains about an error they keep seeing. Wouldn’t it be nice if you could just go to your Event Log entity to see what is happening? In fact it is very nice because since it is a custom entity you get all the advantages of it being configurable the way you want it to be and it doesn’t require physical access to the CRM server or the database. The one thing to note about the Event Log entity is that users do need to have access permissions to write to it since the plugins firing will run under their context by default. The entity can be put into the setting navigation area where only administrators can access it and this is all done within the CRM interface for maximum convenience. &lt;/p&gt;  &lt;p&gt;I modeled my Event Log after the Windows event log so it has similar fields:&lt;/p&gt;  &lt;p&gt;· Computer Name (String) – The server name where the event originated.&lt;/p&gt;  &lt;p&gt;· Event Id (Integer) – An event Id number&lt;/p&gt;  &lt;p&gt;· Keywords (String) – Keywords relevant to the event&lt;/p&gt;  &lt;p&gt;· Level (Option Set: Error, Warning, Information, Debug) – Option set defining the message levels&lt;/p&gt;  &lt;p&gt;· Message (String) – The body of the event entry.&lt;/p&gt;  &lt;p&gt;· Stack Trace (String) – Stack trace of the event method&lt;/p&gt;  &lt;p&gt;· Task Category (String) – The task category if applicable&lt;/p&gt;  &lt;p&gt;· User Name (String) – The username of the user when the event occurred&lt;/p&gt;  &lt;p&gt;I am not suggesting that this event log entity total replace the use of tracing. If you are working with an on-premise version of CRM then you can use both to track down hard to solve problems. You could use the event log to give you additional information while writing out a trace log to the server’s file system using both in conjunction with each other.&lt;/p&gt;  &lt;p&gt;As far as maintenance I would recommend just having a bulk delete job the runs every so often so that this entity doesn’t continue to grow. How much history you want to keep is up to you, but at least you don’t have to worry about running out of space with an out of control event log.&lt;/p&gt;  &lt;h4&gt;The Configuration Entity&lt;/h4&gt;  &lt;p&gt;The configuration entity is the next useful entity. It contains settings information very similar to what you would store in web.config file in ASP.NET. It is basically an entity that contains key value pairs with the exception that I added an Application Id so that multiple plugins could have their own unique settings.&lt;/p&gt;  &lt;p&gt;This entity simply consists of the following fields:&lt;/p&gt;  &lt;p&gt;· Application Id (String) – The Id given to a specific program component.&lt;/p&gt;  &lt;p&gt;· Description (String) – Option description of the setting.&lt;/p&gt;  &lt;p&gt;· Key (String) – The key value of the setting.&lt;/p&gt;  &lt;p&gt;· Value (String) – The value of the setting.&lt;/p&gt;  &lt;p&gt;A case in point of using the configuration entity is when I want to control what messages are being put into the event log. All you need is a setting that says what level of information you would like to see. In the event of problems you can change the logging level to give more detailed information than under normal levels.&lt;/p&gt;  &lt;p&gt;It is true that you could effectively do something to configure settings like create a custom XML file that you place in your solution web resources. I find it easier to work within the system and just have a custom entity that does the job for me. I typically make the Value field very large just in case I want to store a XML document that could have some size to it.&lt;/p&gt;  &lt;h4&gt;Summary&lt;/h4&gt;  &lt;p&gt;I know I didn’t blow your mind or tell you anything that you probably couldn’t have thought of on your own. At least it’s something to think about on your next project. It’s always easier if you have things like this in place as a project is starting instead of trying to add things after the fact. All I can say is these two entities have already proven themselves value to me. Maybe you can say the same.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/208/Two-Custom-Entities-that-Are-Useful-in-Every-CRM-Solution.aspx</guid>
         <pubDate>Tue, 01 Nov 2011 08:28:00 +0000</pubDate>
      </item>
      <item>
         <title>Disable All Fields in a Section Based on the Value of Another Field (CRM 2011)</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/202/Disable-All-Fields-in-a-Section-Based-on-the-Value-of-Another-Field-CRM-2011.aspx</link>
         <description>&lt;p&gt;There are SDK and web examples of how to disable or hide an entire tab on a form in Microsoft CRM 2011, but I was unable to find an example of how to just disable all the fields in a given section on the form based on the selection of a boolean option ("Two Option" field).&lt;/p&gt;
&lt;p&gt;The scenario is useful if, for example, you want to disable data entry in the fields of a section under certain conditions, but you want to still display the disabled fields (rather than change their visibility and hide them). You could reference each field in the section by name and add the .setDisabled(true) method to the end of the control. But this is messy - what happens if later on the fields in the section are changed by adding new ones or removing others?&lt;/p&gt;
&lt;p&gt;The script I came up with below handles this pretty nicely. All you need to know is the label of the section you're concerned with. In this example, I have a boolean field on another section (that's important - you don't want to disable this field and then the user can't change it back!).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;//THIS FUNCTION DISABLES ALL THE FIELDS IN THE SECTION LABELED "PRODUCT INFO"&lt;br /&gt;
//IF A BOOLEAN OPTION FIELD IN ANOTHER SECTION CALLED new_toggleSectionFlds = TRUE&lt;br /&gt;
&lt;br /&gt;
function DisableSectionAttributes() {&lt;br /&gt;
    function setFldDisabled(ctrl) {&lt;br /&gt;
        ctrl.setDisabled(true);&lt;br /&gt;
    }&lt;br /&gt;
    function setFldEnabled(ctrl) {&lt;br /&gt;
        ctrl.setDisabled(false);&lt;br /&gt;
    }&lt;br /&gt;
    var toggleSectionFlds = Xrm.Page.getAttribute('new_toggleSectionFlds').getValue();&lt;br /&gt;
    var ctrlName = Xrm.Page.ui.controls.get();&lt;br /&gt;
    for (var i in ctrlName) {&lt;br /&gt;
        var ctrl = ctrlName[i];&lt;br /&gt;
        var ctrlSection = ctrl.getParent().getLabel();&lt;br /&gt;
        if (toggleSectionFlds == true) {&lt;br /&gt;
            if (ctrlSection == "Product Info") {&lt;br /&gt;
                setFldDisabled(ctrl);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            if (ctrlSection == "Product Info") {&lt;br /&gt;
                setFldEnabled(ctrl);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Put this function in a web resource and then reference it from your form. Call the "DisableSectionAttributes" function in the OnLoad of your form, and in the OnChange of the new_toggleSectionFlds field. Notice that the section name "Product Info" is specified in both the "if" and the "else" part of the function - otherwise you would end up disabling all the other fields on the form!&lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/202/Disable-All-Fields-in-a-Section-Based-on-the-Value-of-Another-Field-CRM-2011.aspx</guid>
         <pubDate>Wed, 07 Sep 2011 17:48:00 +0000</pubDate>
      </item>
      <item>
         <title>Using SQL Server Full-Text Search Services with Microsoft Dynamics CRM</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/199/Using-SQL-Server-Full-Text-Search-Services-with-Microsoft-Dynamics-CRM.aspx</link>
         <description>&lt;h2&gt;Introduction&lt;/h2&gt;  &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/SQL-Server-Full-Text-SearchThe-undiscove_84E8/imagesCANRN13K_2.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px 7px 0px 0px;padding-left:0px;padding-right:0px;display:inline;float:left;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="imagesCANRN13K" border="0" alt="imagesCANRN13K" align="left" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/SQL-Server-Full-Text-SearchThe-undiscove_84E8/imagesCANRN13K_thumb.jpg" width="186" height="152"/&gt;&lt;/a&gt;You’ve probably seen the option to install Full-Text Search during a SQL Server installation without really understanding what it is and how it can be used. As with other database systems SQL Server has a full spectrum of features that typically reaches far beyond what is needed in any one software development project. I look at Full-Text Search Services as one of those step child type features I never felt was worth spending time on since it seemed so trivial at first glance. I couldn’t ever really recall a time when I had a problem searching text per say. If you are like me you probably thought about why would you need that feature for a second and then went on your merry way. Honestly I didn’t really know what the full-text search feature was in the scheme of things and never really had a situation where I felt like it was something I really needed. &lt;/p&gt;  &lt;p&gt;Recently this feature became a topic of interest to me for a project I was working on for a client who wanted to create an intermediate interface for creating new CRM accounts. They didn’t want CRM to be just another system of independently created and maintained account information which would only add to their existing problem. The solution was to create a system that managed and linked duplicate customer account information together from various systems. The premise behind this system was to allow a user to look for an existing company record before creating a new CRM account. Instead of displaying the standard CRM new account form, the intermediate interface would be shown allowing the user to search for an existing company. If that company already existing in the CRM system they would simply be redirected to that record else the user could elect to create a new record either based on an existing record or from scratch. While it is true that the company information itself would effectively be duplicated in CRM for a new record, it would automatically be linked to existing company records in other systems while also reducing the amount of keying required to add the account information to CRM. In addition to the internal account information being this system they also added public databases of company information from other sources such as the Dun &amp; Bradstreet database. By including public sources of company information the user could search for a company that may not be found in their existing systems but still allowing the user to create a new CRM account without having to rekey all that data in manually. &lt;/p&gt;  &lt;p&gt;In theory this sounds great until I came to see the amount of data that needed to be searched. I ended up having upwards of 17 million rows to start off in my primary table. The user needed to be able to search on not only company name, but any information related to a company such as address, tax Id, duns number, etc. I couldn’t just simply throw an index on the company name field and call it a day. I also didn’t want to try creating a covering indexes across tables. I needed something much more comprehensive. As I found myself having to search through this significant amount of text data than normal I felt like I had to pursue another option. I wanted to research any opportunities to increase search performance of text fields in my database feeling that normal indexes were not going to cut it. With a full-text index I could create a new kind of index that would cover all the fields in my company table that indexed the things I wanted to search on in the first place – the words, not the character data in the fields themselves. Using full-text search I created an interface that allowed the user to perform their company searches over millions of rows for data that could be in one of a number of fields in my table.&lt;/p&gt;  &lt;p&gt;If you think about the world we live in today we are increasingly storing more textual data in databases as we move towards a paperless society. You can expect that the amount of text database systems are going to be required to search through will only increase over time and standard indexes are not going to get the job done. This being the case it makes sense for you to have the ability create a special kind of index that can provide better performance and functionality on the level of words and phrases rather than simply on the characters that make up the words themselves.&lt;/p&gt;  &lt;h2&gt;Full-Text Search Overview&lt;/h2&gt;  &lt;p&gt;If you take a cursory look at what you can find online about full-text search you’ll most likely find at the top of your search some MSDN documentation from Microsoft on how to setup full-text search. At this point I wasn’t so much interested in knowing how to set it up versus why I would want to setup it in the first place. &lt;/p&gt;  &lt;p&gt;So what is this full-text search feature? The name itself seems rather descriptive but it doesn’t give you a glance into how it can actually benefit you. Let’s think of this special type of index in terms of a book. A book will typically have a table of contents containing an index of chapters and possibly an appendix containing supplementary information on words or phrases and where to find them within the book. The table of contents index is typically based on the context of subject matter found in each chapter. This makes sense from a reader’s perspective who may want to skip ahead to read a particular topic. This is not easy to do if the reader only had an appendix which would be used more for a specific lookup of a word or phrase of interest. &lt;/p&gt;  &lt;p&gt;I like to think of a typical index on a text field like the appendix of a book. The appendix is simply based on the content of the book which is valid for certain purposes but not necessarily the context. Full-text search from my perspective provides a higher level of indexing as compared to an appendix. A typical index on a text field indexes character data whereas a full-text index tracks the occurrences of words and word-forms in the blocks of unstructured text which makes a full-text index structure very different from standard indexes. &lt;/p&gt;  &lt;p&gt;When it comes to searching text you can think of full-text search as a super index. Most developers are probably most familiar with searching through text data using the LIKE operator. Depending on the amount of data being searched the LIKE operator will often times give good enough performance, but if you think about it how often are you actually searching text data by the character? Most likely you are probably looking for a word or phrase. The biggest performance gains with a full-text index over a standard index comes when as you find yourself having to search larger datasets. This is because the full-text index is based on words and not simply on the individual characters that make up the words. When the full-text search engine indexes text it breaks the words into tokens which become the basis of the index.&lt;/p&gt;  &lt;p&gt;Here’s what Microsoft has to say about full-text index performance: &lt;/p&gt;  &lt;p&gt;&lt;em&gt;“The performance benefit of using full-text search can be best realized when querying against a large amount of unstructured text data. A LIKE query against millions of rows of text data can take minutes to return; whereas a full-text query can take only seconds or less against the same data, depending on the number of rows that are returned. “&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Besides the performance gains the full-text search engine allows you to not only search on words, but phrases, and inflectional forms of words. You can search for a word such as “drive” and specify that other forms of the word should quality in the search like “drives”, “driving” or “driven”. You also can specify searches on synonymous forms of a specific word as well as a word or phrase that begin with specific text. &lt;/p&gt;  &lt;p&gt;You can think of full-text search as SQL Server’s own little search text search engine. You have the ability to rank results and limit the results returned. As a matter of fact a blog post by Microsoft MVP Michael Coles gives an example of how to create your own Google type search using the full-text search engine at &lt;a rel="nofollow" title="http://www.sqlservercentral.com/articles/Full-Text+Search+(2008)/64248/" target="_blank" href="http://www.sqlservercentral.com/articles/Full-Text+Search+(2008)/64248/"&gt;http://www.sqlservercentral.com/articles/Full-Text+Search+(2008)/64248/&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;In his blog Michael describes how to construct a query engine that uses similar syntax to Google for searching text inside SQL Server. One of the benefits to this is that most people are already familiar with using search engines so you can parlay this experience to reduce the learning curve of an application.&lt;/p&gt;  &lt;p&gt;Some of the other nice things you can do with a full-text search are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Search for all the difference tenses of a verb or the singular and plural forms of a noun. In the example from MSDN the forms of “foot” or “feet” are given as a possible search pattern.      &lt;br /&gt;  &lt;/li&gt;    &lt;li&gt;The ability to search for words or phrases in close proximity to another word or phrase.      &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Search for words or phrases and specify a weighting value. &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Differentiating Characteristics of a Full-Text Index&lt;/h2&gt;  &lt;p&gt;So you may still be asking yourself, but what are the actual characteristics of a full-text search index that make it unique? Here are a few features of full-text search that goes beyond a normal index:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Search Filters&lt;/strong&gt;       &lt;br /&gt;Search filters are full-text components that interpret binary data based on the structure and format. By creating a special column in your table that will store an identifier for the data in the form of a file extension the Full-Text engine can use it as a context for processing the data. An example would be a type column that stores a value of “doc” which would indicate that the engine is processing a Microsoft Word document and therefore use an MSWord Filter.       &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Stop Words&lt;/strong&gt;       &lt;br /&gt;There are common words in languages that provide no meaningful benefit for the search process. Words in the English language that meet this criteria are "the”, “a”, and “an”. These types of words are called stop words because they bloat the index and can interfere with the query processing. Excluding stop words makes the index more efficient.       &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Stop Lists&lt;/strong&gt;       &lt;br /&gt;A stop lists is a collection of stop words. Previous to SQL Server 2008 you were limited to a predefined English language stop word list. Starting in SQL Server 2008 you have the ability to create your own customized stop lists. This is useful if there are words outside of the normal language stop words that you would like to prevent from being indexed. A use case for creating your own stop list could be that for a particular industry there are common words used that you may consider a stop word that you would like to excluding from indexing. In this case you could create your own customized stop word list and add these words.       &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Word Breakers&lt;/strong&gt;       &lt;br /&gt;Languages contain certain characters or structures that delimit words and are considered word breakers. SQL Server uses word breakers to determine how to identify individual words while indexing. These characters or structures are particular to a language and are automatically loaded for each supposed language in SQL Server (NOTE: Multiple languages for full-text search is not supported previous to SQL Server 2008).       &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Word Stemmer&lt;/strong&gt;       &lt;br /&gt;Most language comes from a base of common words or concepts and through word forms can can be created into new words. A word stem example would be the word “repair” with variants such as “repairing” or “repaired”. Finding the common stems of words is critical for determining context. The set of rules that determine how these word forms are identified are called stemmers. Word stemmers can be especially handy when you would like to do a search including all variants of a particular word you may be looking for in a search. If I wanted to find all text containing the word stem of “repair” I could specify this in my query.       &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Population        &lt;br /&gt;&lt;/strong&gt;The process of loading a full-text index structure is called population. There are three modes of population which are full, incremental and update. Full population repopulates the entire index, incremental populates only the incremental changes based on timestamp values and update populates the index using a change tracking record of modified data since the last index population. Full-text search indexes can be populated in batch using Transact-SQL or on a scheduled job to alleviate real-time performance hits. &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Summary&lt;/h2&gt;  &lt;p&gt;SQL Server’s full-text search engine is a great feature that helps you when dealing with large amounts of text data. I admittedly took it for granted thinking that it was just some fluffy feature that I didn’t really see as a necessity in my development efforts. Now that I know what full-text search is and what it can do for me I will always consider if the solution I’m working on can benefit from a full-text search index. Now you can do the same.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Resources:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;MSDN Full-Text Search Documentation: &lt;a rel="nofollow" title="http://msdn.microsoft.com/en-us/library/ms142571(v=SQL.90).aspx" target="_blank" href="http://msdn.microsoft.com/en-us/library/ms142571(v=SQL.90).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms142571(v=SQL.90).aspx&lt;/a&gt;&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:13d6f0a7-ef53-4eee-9c38-57b076bc6f84" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a rel="nofollow" target="_blank" href="http://technorati.com/tags/Microsoft"&gt;Microsoft&lt;/a&gt;,&lt;a rel="nofollow" target="_blank" href="http://technorati.com/tags/SQL+Server"&gt;SQL Server&lt;/a&gt;,&lt;a rel="nofollow" target="_blank" href="http://technorati.com/tags/Full-Text+Search"&gt;Full-Text Search&lt;/a&gt;&lt;/div&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/199/Using-SQL-Server-Full-Text-Search-Services-with-Microsoft-Dynamics-CRM.aspx</guid>
         <pubDate>Thu, 14 Jul 2011 21:55:30 +0000</pubDate>
      </item>
      <item>
         <title>A Not-So-Common Web Service Found in SharePoint (2007 and 2010)</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/191/A-Not-So-Common-Web-Service-Found-in-SharePoint-2007-and-2010.aspx</link>
         <description>&lt;p&gt;In our day-to-day client work, we recently stumbled upon a web service that is installed with SharePoint, but honestly had never implemented.  In fact, the web service is not listed on either MSDN page for SharePoint 2007 or 2010.  However, we have now tested this web service (and plan to use it very soon), so I wanted to share our findings with the community.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[Note: This post will not focus on how to call a web service or work with the results]&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The web service is aptly named the &lt;em&gt;Spelling Service &lt;/em&gt;and actually leverages code from the &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.publishing.aspx"&gt;Microsoft.SharePoint.Publishing&lt;/a&gt; namespace.  The web service can be found at the following URL: &lt;font face="Courier New"&gt;http://sharepointsite/_vti_bin/spellcheck.asmx&lt;/font&gt;.  In a nutshell, you simply pass the web service 'chunks' of text, and it will identify whether or not any of the words are misspelled.  Additionally, you can also specify the language (LCID) or a Boolean flag to auto-detect the language based on the word(s) submitted. &lt;/p&gt;
&lt;p&gt;When the response is returned, the XML will contain various nodes (as seen in the screenshots below), which include the index of the text 'chunk' where spelling errors appear, the words 'flagged' and the type of spelling error that occurred (&lt;em&gt;RepeatWord &lt;/em&gt;or &lt;em&gt;UnknownWord&lt;/em&gt;).  An additional node that you will notice is the &lt;em&gt;offset&lt;/em&gt; field, which identifies the location in the input where the misspelled word begins.  Lastly, a &lt;em&gt;spellingSuggestions &lt;/em&gt;node is also returned which includes the misspelled word and a list of suggestions in the &lt;em&gt;sug&lt;/em&gt; node.&lt;/p&gt;
&lt;p&gt;Sure, there are other spelling web services out there, but we can see endless possibilities with this, especially if you already own SharePoint (Standard or higher).  I can easily see us leveraging this for Dynamics CRM as well as many other integration projects in the future.&lt;/p&gt;
&lt;p&gt;Enough of the details, here are some screenshots from our own internal tests of this web service.&lt;/p&gt;
&lt;table border="0" cellspacing="0" cellpadding="2" width="400"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="200"&gt;&lt;strong&gt;SOAP Message: &lt;br /&gt;
            &lt;/strong&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/A-Not-So-Common-Web-Service-in-SharePoin_C1D8/image_2.png"&gt;&lt;img title="image" border="0" alt="image" width="505" height="219" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/A-Not-So-Common-Web-Service-in-SharePoin_C1D8/image_thumb.png"/&gt;&lt;/a&gt;&lt;/td&gt;
            &lt;td valign="top" width="200"&gt;&lt;strong&gt;SOAP Response: &lt;br /&gt;
            &lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/A-Not-So-Common-Web-Service-in-SharePoin_C1D8/image_4.png"&gt;&lt;img title="image" border="0" alt="image" width="505" height="383" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/A-Not-So-Common-Web-Service-in-SharePoin_C1D8/image_thumb_1.png"/&gt;&lt;/a&gt; &lt;br /&gt;
            &lt;/strong&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td bgcolor="#aeaeae" height="4" valign="top" colspan="2"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="200"&gt;&lt;strong&gt;&lt;br /&gt;
            SOAP Message: &lt;br /&gt;
            &lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/A-Not-So-Common-Web-Service-in-SharePoin_C1D8/image_6.png"&gt;&lt;img title="image" border="0" alt="image" width="505" height="213" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/A-Not-So-Common-Web-Service-in-SharePoin_C1D8/image_thumb_2.png"/&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
            &lt;td valign="top" width="200"&gt;&lt;strong&gt;&lt;br /&gt;
            SOAP Response: &lt;br /&gt;
            &lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/A-Not-So-Common-Web-Service-in-SharePoin_C1D8/image_10.png"&gt;&lt;img title="image" border="0" alt="image" width="505" height="511" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/A-Not-So-Common-Web-Service-in-SharePoin_C1D8/image_thumb_4.png"/&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/191/A-Not-So-Common-Web-Service-Found-in-SharePoint-2007-and-2010.aspx</guid>
         <pubDate>Fri, 01 Jul 2011 18:18:00 +0000</pubDate>
      </item>
      <item>
         <title>CRM 2011 Outlook Client Tracing 101</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/188/CRM-2011-Outlook-Client-Tracing-101.aspx</link>
         <description>&lt;p&gt;Have you run into a problem with the Outlook client and someone suggested, “Hey, turn on tracing and let me know what you find”?&lt;/p&gt;
&lt;p&gt;Gee, thanks. That’s helpful, right?&lt;/p&gt;
&lt;p&gt;Here’s what you need to know about tracing for the Outlook client:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;What is tracing?
    &lt;ol&gt;
        &lt;li&gt;Tracing is a way to gather a list of the information passed back and forth between a program and a computer. For the CRM Outlook client, tracing will show a chronological, readable play-by-play of what the add-in is trying to do, including error messages that are often more helpful than “An error occurred. Please contact your System Administrator.” (Side note: Microsoft has done an admirable job in CRM 2011 of minimizing these generic error messages, so no digs implied, Microsoft!)       &lt;/li&gt;
    &lt;/ol&gt;
    &lt;/li&gt;
    &lt;li&gt;How do I turn tracing on?
    &lt;ol&gt;
        &lt;li&gt;If you encounter weird errors and there’s no apparent cause (like a SwagBucks browser add-on perusing all your web traffic – c’mon, people!), you can enable tracing by going to the Start menu &amp;gt; All Programs &amp;gt; Microsoft Dynamics CRM 2011 &amp;gt; Diagnostics. Click on the Advanced Troubleshooting tab, and place a checkmark next to “Tracing”. Then click Save.       &lt;br /&gt;
        &lt;br /&gt;
        &lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/CRM-2011-Outlook-Client-Tracing-101_E5AA/diag-adv_trblshooting_4.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="diag-adv_trblshooting" border="0" alt="diag-adv_trblshooting" width="542" height="484" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/CRM-2011-Outlook-Client-Tracing-101_E5AA/diag-adv_trblshooting_thumb_1.png"/&gt;&lt;/a&gt;        &lt;br /&gt;
        &lt;/li&gt;
    &lt;/ol&gt;
    &lt;/li&gt;
    &lt;li&gt;Where do I find the results?
    &lt;ol&gt;
        &lt;li&gt;Aaah, you actually want to see what happens?! The trace files (simple text files) are saved on your hard drive. By default (in Windows 7) they can be found at:        &lt;br /&gt;
        &lt;font face="Courier New"&gt;         &lt;br /&gt;
        C:&amp;#92;Users&amp;#92;JohnTravolta&amp;#92;AppData&amp;#92;Local&amp;#92;Microsoft&amp;#92;MSCRM&amp;#92;Traces&lt;/font&gt;        &lt;br /&gt;
        &lt;br /&gt;
        (Obviously, unless you’re the star of Get Shorty, you need to change the name in the path above.)        &lt;/li&gt;
    &lt;/ol&gt;
    &lt;/li&gt;
    &lt;li&gt;What else should I know?
    &lt;ol&gt;
        &lt;li&gt;Turn tracing off when you’re done playing around. Collecting all that information can slow your Outlook client down. Then send the files to your friendly neighborhood support type person.&lt;/li&gt;
        &lt;li&gt;I’m not going to go into the meaning of the information in the trace files here because this is a post about Tracing 101, and that’s a 200-level topic, and that’s what &lt;strike&gt;Google&lt;/strike&gt; Bing is for (and it’s been a long day!).&lt;/li&gt;
    &lt;/ol&gt;
    &lt;/li&gt;
&lt;/ol&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/188/CRM-2011-Outlook-Client-Tracing-101.aspx</guid>
         <pubDate>Thu, 09 Jun 2011 01:43:00 +0000</pubDate>
      </item>
      <item>
         <title>Join us at Decisions Spring 2011 (Virtual Conference)</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/179/Join-us-at-Decisions-Spring-2011-Virtual-Conference.aspx</link>
         <description>&lt;p&gt;I'll be presenting a session for CRM administrators at the upcoming Decisions Spring 2011 virtual conference on June 17, hosted by MSDynamicsWorld.com: &lt;span class="italic"&gt;&lt;a rel="nofollow" title="What CRM Administrators Need to Know About CRM 2011" target="_blank" href="http://decisions.msdynamicsworld.com/session/decisions-event-how-about-if-i-do-session-what-crm-administrators-need-know-about-crm-2011"&gt;What CRM Administrators Need to Know About CRM 2011&lt;/a&gt;. I'll cover the most important technical considerations that administrators need to be familiar with when considering implementing or upgrading to CRM 2011.&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;span class="italic"&gt;&lt;a rel="nofollow" target="_blank" href="https://presentations.inxpo.com/Shows/MSDynamics/06_11/Registration/Decisions06_11RegistrationPage.html?AffiliateKey=13512&amp;AffiliateData=BLOG"&gt;&lt;img alt="MSDynamicsWorld.com Decisions Spring 2011" width="533" height="172" src="http://blogs.c5insight.com/Portals/0/BlogImages/Matt/spring_template_header_01.jpg"/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="italic"&gt;MSDynamicsWorld.com has been hosting these semiannual events for a couple of years now, and they are tremendous, free resources for learning and networking. The conference kicks off on Tuesday, June 14, with sessions dedicated to Dynamics AX. The 15th is focused on GP, the 16th on NAV, and the 17th on CRM.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="italic"&gt;You'll have the opportunity to ask questions of the presenters via live chat, and interact with other attendees and experts in a virtual networking lounge.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="italic"&gt;To register: &lt;span style="color:black;font-size:10pt;"&gt;&lt;a rel="nofollow" target="_blank" href="https://presentations.inxpo.com/Shows/MSDynamics/06_11/Registration/Decisions06_11RegistrationPage.html?AffiliateKey=13512&amp;AffiliateData=BLOG"&gt;&lt;font color="#0000ff"&gt;https://presentations.inxpo.com/Shows/MSDynamics/06_11/Registration/Decisions06_11RegistrationPage.html?AffiliateKey=13512&amp;AffiliateData=BLOG&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/179/Join-us-at-Decisions-Spring-2011-Virtual-Conference.aspx</guid>
         <pubDate>Tue, 03 May 2011 19:36:00 +0000</pubDate>
      </item>
      <item>
         <title>Trouble connecting to CRM 2011 from Scribe Insight</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/178/Trouble-connecting-to-CRM-2011-from-Scribe-Insight.aspx</link>
         <description>&lt;p&gt;Scribe recently released their adapter for CRM 2011. I was very excited when I saw this release and wanted to test it out ASAP. After downloading and installing the adapter I ran into a few snags on the connection. The issues I ran into were my fault so I thought I would pass my lessons learned out to you. My issues revolved around connections to CRM 4 On-Line and CRM 2011 On-Line and what should be supplied for the “Organization” connection parameter.&lt;/p&gt;
&lt;p&gt;For CRM 4 you need to supply the “Unique Organization Name” to find this in CRM 4 On-Line you will need to browse to: "Settings &amp;gt; Customization &amp;gt; Developer Resources.” Once in the Developer Resources area you will see the Unique Organization Name.&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Trouble-connecting-to-CRM-2011-from-Scri_88B1/CRM_4_Unique_Online_Name_2.png"&gt;&lt;img title="CRM_4_Unique_Online_Name" border="0" alt="CRM_4_Unique_Online_Name" width="611" height="146" style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;padding-top:0px;" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Trouble-connecting-to-CRM-2011-from-Scri_88B1/CRM_4_Unique_Online_Name_thumb.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For CRM 2011 you need to supply the “Friendly Organization Name.” To find this name all you have to do is login to your CRM 2011 Org and look in the top menu bar on the right hand side. The name will be listed directly under your user name. Make sure you include any spaces or punctuation.&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Trouble-connecting-to-CRM-2011-from-Scri_88B1/CRM_2011_Friendly_Name_2.png"&gt;&lt;img title="CRM_2011_Friendly_Name" border="0" alt="CRM_2011_Friendly_Name" width="220" height="61" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;margin-left:auto;border-left-width:0px;margin-right:auto;padding-top:0px;" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Trouble-connecting-to-CRM-2011-from-Scri_88B1/CRM_2011_Friendly_Name_thumb.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I hope this helps you out when making your CRM connections! Good luck with your DTS creations!&lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/178/Trouble-connecting-to-CRM-2011-from-Scribe-Insight.aspx</guid>
         <pubDate>Mon, 25 Apr 2011 22:40:00 +0000</pubDate>
      </item>
      <item>
         <title>Released: Update Rollup 1 for Microsoft Dynamics CRM 2011</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/174/Released-Update-Rollup-1-for-Microsoft-Dynamics-CRM-2011.aspx</link>
         <description>&lt;p&gt;Microsoft has released the first Update Rollup for CRM 2011. The knowledgebase article is located &lt;a rel="nofollow" target="_blank" href="http://support.microsoft.com/kb/2466084"&gt;here&lt;/a&gt;, and the rollup can be download &lt;a rel="nofollow" target="_blank" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=8cd2384e-e06a-4cf1-800d-303aec37f40b&amp;displaylang=en"&gt;here&lt;/a&gt;. (Note that there are separate downloads for the server, clients, BIDS extension, E-mail Router, and SRS Data Extension.)&lt;/p&gt;
&lt;p&gt;This update rollup includes fixes for a number of items as the KB article details. In particular, there are a few fixes that I've been looking for:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;One that fixes a script error that is thrown frequently when switch rapidly between areas of the CRM web UI&lt;/li&gt;
    &lt;li&gt;Another that enables intranet access to CRM when it is configured for Internet-facing deployment.&lt;/li&gt;
    &lt;li&gt;Another big one that I'm eager to get past is a problem that occurred configuring the Outlook client if the client machine also had the Windows Live Sign-in Assistant installed.:&lt;/li&gt;
    &lt;li&gt;"Assume that you create an email address for a queue that is owned by a team entity. In this situation, you cannot approve the email address." (This one had me stumped until I assigned ownership of the offending queue to a user. Glad to see this is fixed.)&lt;/li&gt;
    &lt;li&gt;There was a minor bug with upgraded orgs that caused sitemap icons to sometimes not display correctly. This has been fixed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Update Rollup will be available through Windows Updates by the end of the month, but you can download and apply it now manually.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/174/Released-Update-Rollup-1-for-Microsoft-Dynamics-CRM-2011.aspx</guid>
         <pubDate>Fri, 08 Apr 2011 01:53:00 +0000</pubDate>
      </item>
      <item>
         <title>CRM 2011 for Outlook: Next Generation Outlook Email Integration</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/165/CRM-2011-for-Outlook-Next-Generation-Outlook-Email-Integration.aspx</link>
         <description>&lt;p&gt;&lt;img title="Microsoft Office Outlook 2010 and Dynamics CRM 2011" border="0" alt="Microsoft Office Outlook 2010 and Dynamics CRM 2011" align="left" width="128" height="128" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;float:left;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/CRM-2011-Next-Generation-Outlook-Email-I_1146B/Microsoft%20Office%20Outlook%202010%20and%20Dynamics%20CRM%202011_3.png"/&gt;Everybody knows that Microsoft Dynamics CRM has always been the leader of the pack when it comes to integration with Microsoft Outlook.  So nobody was expecting to see significant changes in this area with the introduction of CRM 2011.  But Microsoft delivered a very nice surprise to their customers when they not only improved the Outlook integration – but in fact gave it a complete overhaul.  In fact, the upgrades to CRM for Outlook are so extensive, that we expect to see fewer-and-fewer users accessing the Web version of Dynamics CRM at all.  Many of our clients are providing user training only in CRM 2011 for Outlook.&lt;/p&gt;
&lt;p&gt;There are so many different improvements in CRM for Outlook that it’s impossible to cover all of them in a single article, so I am going to focus on my favorite new CRM/Outlook functionality – good old email!&lt;/p&gt;
&lt;h1&gt;How Important is Outlook Integration with CRM?&lt;/h1&gt;
&lt;p&gt;I don’t have any official figures – but it’s a pretty safe bet that over 80% of written business communication is handled by email these days (and that number is likely to be a lot higher). So a small gain in efficiency related to email can result in a tremendous productivity gain across your business. With that in mind, it’s critically important that users be able to function in a “friction free” environment when it comes to using their CRM solution with their email software.  So how does CRM 2011 deliver on that?  I’m glad you asked…&lt;/p&gt;
&lt;h1&gt;CRM and Email: The Old and The New&lt;/h1&gt;
&lt;p&gt;In virtually all CRM solutions (including Dynamics CRM 4.0 and earlier), if you wanted to send an email from the CRM solution, then you suffered through a somewhat clunky interface that didn’t work the way you were comfortable working in Outlook.  You couldn’t have as much control over the formatting, your signature line worked differently, and the steps for adding recipients wasn’t as intuitive.  Business managers didn’t like this approach any better than users because they could not control corporate branding and compliance standards as easily as they could in Outlook.&lt;/p&gt;
&lt;p&gt;On the other hand, if you used Outlook to send your emails, you didn’t have access to some of the rich email template, sales literature and knowledge base article integration that is available in CRM. Being able to quickly create email content using these CRM tools is an important benefit that can save users a lot of time.&lt;/p&gt;
&lt;p&gt;In the new world of Dynamics CRM 2011, you manage your email in the place that you’re most comfortable – right inside of Outlook.  But you also access all of your CRM email functionality in the same place.  While creating your email in Outlook, you can quickly link the email to records in Dynamics CRM, insert templates, KB articles and sales literature.  Branding and compliance standards are enforced through the Exchange and Outlook experience, and users communicate with customers while collaborating internally in the most efficient manner.&lt;/p&gt;
&lt;h1&gt;Getting Started with CRM 2011 for Outlook with Email&lt;/h1&gt;
&lt;p&gt;Getting started with using the email integration is a familiar and natural experience.  You can follow along with the video and/or by following the step-by-step instructions below the video.  Note that the video is part of the CRM 2011 World Premiere series of videos that we published on &lt;a rel="nofollow" target="_blank" href="http://tube.c5insight.com"&gt;C5 Tube&lt;/a&gt; – feel free to check those videos out to learn more about the new capabilities of Dynamics CRM 2011.  Please note that I am assuming that you are using Microsoft Outlook 2010 for this.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt; &lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Begin by opening Microsoft Outlook (this assumes that CRM for Outlook has already been installed).&lt;/li&gt;
    &lt;li&gt;Create a new email as you normally would in Microsoft Outlook.  You can send it to anyone that you like (but, since this is a trial run, make sure you send it to yourself or someone who won’t mind getting a test message).&lt;/li&gt;
    &lt;li&gt;Click either the “Track in CRM” or the “Set Regarding” button (if you choose Set Regarding, then choose the record that you want to link to).  After you complete this step, you’ll notice several things:
    &lt;ol&gt;
        &lt;li&gt;A list of links is available below the email.  This list will link to not only the record that the email is regarding, but also to all of the contacts that are receiving the email.  This makes it natural and simple to navigate to any records in CRM that are associated with the email.&lt;/li&gt;
        &lt;li&gt;In the CRM area of the ribbon menu, you can now click on buttons for Insert Template, Insert Article or Attach Sales Literature – which will we be doing in step …&lt;/li&gt;
    &lt;/ol&gt;
    &lt;/li&gt;
    &lt;li&gt;Click on Insert Template (I am assuming that you have at least one email template available in Dynamics CRM).  At this point you may need to select which record should be used for the mail/merge with the template.  When prompted, choose the template that you would like to use.  CRM will insert the subject line, attachments and email body from the template – including any mail/merge fields.  The signature line that Outlook automatically generates will be retained at the bottom of the message.&lt;/li&gt;
    &lt;li&gt;Now all that’s left is to click the Send button.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Boom!  You’ve just sent an email in a friction free CRM environment.  You can send sales literature and knowledge base articles using the same process.  Multiply the amount of time you saved by the number of emails you send each year, and then by the number of Dynamics CRM users in your organization … how much productivity did you just gain?&lt;/p&gt;
&lt;h1&gt;What Else Can I Do?&lt;/h1&gt;
&lt;p&gt;The email integration only scratches the surface of the overall Outlook experience that is available to users of Dynamics CRM 2011.  &lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.comwww.c5insight.com/follow"&gt;Follow us&lt;/a&gt; to keep up to date on additional blogs and videos that we’ll be rolling out in the coming weeks to provide a deeper dive into CRM for Microsoft Outlook.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/165/CRM-2011-for-Outlook-Next-Generation-Outlook-Email-Integration.aspx</guid>
         <pubDate>Tue, 22 Mar 2011 21:30:00 +0000</pubDate>
      </item>
      <item>
         <title>CRM 4 On-Premise to CRM 2011 Online Data Migration – C5 Insight Is LIVE!</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/172/Migrated-from-Dynamics-CRM-On-Premise-to-CRM-2011-Online.aspx</link>
         <description>&lt;p&gt;Well it’s official, C5 Insight has officially migrated our data from CRM 4 On-Premise to CRM 2011 ONLINE!! I am sure a lot of you are asking well how did you do this? As you may or may not know Microsoft has not released any upgrade path for current or any new Dynamics CRM customers to move their data to cloud hosted.&lt;/p&gt;
&lt;p&gt;When we first started thinking about doing this we wanted to be on the forefront of this new release and go “Online” as quick as possible. However we also wondered how we would get our data migrated since Microsoft did not have any published avenue for us to follow. As a Scribe MVP, &lt;a rel="nofollow" target="_blank" href="http://www.scribesoft.com"&gt;Scribe Insight (www.ScribeSoft.com)&lt;/a&gt; was the product of choice to get this migration successfully completed. With that said we did have to overcome a few obstacles throughout the way which I will mention later on, but overall we had great success. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why move to Dynamics CRM 2011 now?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;With Dynamics 2011 being cloud hosted this now allows for us to have the same code-base as being on-premise which is great news because with Dynamics CRM 4 this was not the case. We are very excited about this and can’t wait to get all our users live with it next week.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;First Steps&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The first thing we started thinking about was how to get our customizations upgraded so that we could move them to the cloud. Matt Wittemann, a colleague of mine who wrote the &lt;a rel="nofollow" target="_blank" href="http://www.amazon.com/Microsoft-Dynamics-2011-Administration-Bible/dp/0470568143#_"&gt;Microsoft Dynamics CRM 2011 Bible&lt;/a&gt;, took on this task. He previously wrote a blog on different &lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Home/tabid/40/entryid/162/Upgrade-Paths-for-Microsoft-Dynamics-CRM-2011.aspx"&gt;Upgrade Paths for Microsoft Dynamics CRM 2011&lt;/a&gt; which you can review to determine what might be the best path for your organization. We chose to upgrade via the import process and then transfer the customizations to CRM Online using solutions.&lt;/p&gt;
&lt;p&gt;Now that we had our customizations fully deployed to CRM 2011 Online, we then focused our efforts on the migration. The overall migration design / implementation process took about a week and half to design and test all the different components. It did take a good amount of knowledge on how the Dynamics CRM database was structured along with different gotchas that could cause a failure along the way.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Challenges&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As far as challenges go, we did have a few thorny issues that we were able to overcome or work around.&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;The first challenge we ran into was around capturing the original created by user on the records. Unfortunately this was one that we couldn't overcome, however I did suggest this feature enhancement to Scribe for a future release of their adapter. For us this was not such a big issue because we were still able to maintain the record ownership and that is what we were most concerned with. If we really wanted to we could have run through the entire migration separately for each user in our organization, thus maintaining the created by user. But we decided that losing the original created by user was an acceptable exchange for the time savings for us.&lt;/li&gt;
    &lt;li&gt;The next hang up we ran into was with Quick Campaigns. After reviewing the API SDK, it appears that Quick Campaigns do not live in a “Quick Campaigns” entity, they live in the bulkoperations tables. It wasn't clear to me when talking with Scribe Support if it was a Dynamics CRM limitation or a Scribe limitation that was keeping us from creating Quick Campaigns.  From what I could tell though it does look like Dynamics 2011 might have support for creating quick campaigns through the API, but still unknown if Scribe will expose it through there adapter.** Unfortunately, because the entity was unavailable to me, those records could not be migrated. I will say though that is not the case for regular Campaigns, those were able to be migrated.&lt;/li&gt;
    &lt;li&gt;Support Contracts were the next roadblock I hit. This issue was the result of a limitation of Dynamics CRM. What happened here is that contracts start and end on a specific date and once that contract is closed no additional data can be added to that contract. We developed a path to move over our history and then create new active projects for existing contracts that were still active. Yes the data was able to be migrated, but it was not 100% accurate. If you're using the contract entity in CRM, this is an area for careful evaluation before you perform your migration.&lt;/li&gt;
    &lt;li&gt;Finally the last issue that caused us pain was unresolved recipients in activities. As you know you could send an email to a contact that is tracked by CRM and not necessarily related to a record in CRM . This causes unresolved contacts to be displayed with the red exclamation mark next to the person's email address.  &lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/CRM-4-to-CRM-2011-Online-Data-Migration_D35C/2011-03-18_1444_2.png"&gt;&lt;img title="Unresolved Activity Contacts - Dynamics CRM 4 - CRM 2011" border="0" alt="Unresolved Activity Contacts - Dynamics CRM 4 - CRM 2011" width="72" height="22" style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/CRM-4-to-CRM-2011-Online-Data-Migration_D35C/2011-03-18_1444_thumb.png"/&gt;&lt;/a&gt; We struggled with this for a while but finally figured out how to successfully convert these from our 4.0 environment to CRM 2011. HUGE SUCCESS!! This data is extremely important because you need to know every recipient on every activity.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Overall I think we had a great success with our migration and can’t wait for all our clients to move to CRM 2011. In my next blog I will talk about a new product being released from &lt;a rel="nofollow" target="_blank" href="http://www.scribesoft.com/"&gt;Scribe Software&lt;/a&gt; which is called “&lt;a rel="nofollow" target="_blank" href="http://www.ScribeSoft.com/Online"&gt;Scribe Online&lt;/a&gt;” - this is a service that allows you to replicate your Dynamics CRM 2011 database locally. Stayed tuned and I hope you enjoy CRM 2011!&lt;/p&gt;
&lt;p&gt;**Scribe is currently developing the Dynamics CRM 2011 adapter but they have emphasized that the current CRM 4.0 adapter does successfully connect and use most of the same calls as CRM 2011.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/172/Migrated-from-Dynamics-CRM-On-Premise-to-CRM-2011-Online.aspx</guid>
         <pubDate>Sat, 19 Mar 2011 00:05:00 +0000</pubDate>
      </item>
      <item>
         <title>Getting a value from a Lookup field - the Xrm.Page way</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/170/Getting-a-value-from-a-Lookup-field-the-Xrm-Page-way.aspx</link>
         <description>&lt;p&gt;CRM 2011 introduced a new page model for JScript and it has thrown some people for a bit of a loop because it is so different from the model in CRM 4.0. The SDK has a lot of examples, but they are often over-kill when you're just trying to figure things out.&lt;/p&gt;
&lt;p&gt;As a simple example to get started, let's say that you just want to get the GUID from a lookup field on a form. First, create a web resource with the following JScript function and then call the web resource and the function from your form's OnLoad event.&lt;/p&gt;
&lt;p&gt;In this example, we want to get the GUID from the Potential Customer lookup on an Opportunity (assuming it's already there - this code doesn't include any checks to see if it has been set yet):&lt;/p&gt;
&lt;p&gt;&lt;code&gt;function showGUID() {&lt;br /&gt;
var Customer = Xrm.Page.getAttribute('customerid').getValue();&lt;br /&gt;
var CustomerId = Customer[0].id;&lt;br /&gt;
alert(CustomerId);&lt;br /&gt;
}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The trick is the second variable. A lookup is actually an array. It contains three values: a name, an entity type, and the GUID (or id). If you wanted to know if the Potential Customer was set to an Account or Contact, you could change the second variable to &lt;code&gt;Customer[0].entityType&lt;/code&gt;.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/170/Getting-a-value-from-a-Lookup-field-the-Xrm-Page-way.aspx</guid>
         <pubDate>Tue, 15 Mar 2011 02:33:00 +0000</pubDate>
      </item>
      <item>
         <title>Visualizations: How to Create Charts and Dashboards in Dynamics CRM 2011</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/164/Visualizations-How-to-Create-Charts-and-Dashboards-in-Dynamics-CRM-2011.aspx</link>
         <description>&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Visualizations-How-to-Create-Charts-and-_C250/image4.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px 15px 0px 0px;padding-left:0px;padding-right:0px;display:inline;float:left;border-top:0px;border-right:0px;padding-top:0px;" title="CRM 2011 Chart - Cases by Satisfaction Rating" border="0" alt="CRM 2011 Chart - Cases by Satisfaction Rating" align="left" width="82" height="130" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Visualizations-How-to-Create-Charts-and-_C250/image4_thumb.png"/&gt;&lt;/a&gt;One of Microsoft’s goals with Dynamics CRM 2011 was to deliver intelligent experiences across the enterprise. Some of the most important items that Microsoft included in the CRM 2011 toolbox for that are charts and dashboards – collectively referred to as visualizations. Visualizations not only provide a way to rapidly boil a lot of data down into a chart or graph; they also allow managers and users drill down on data and move from analysis to action very quickly. Visualizations can be created at the “system” level (for distribution across your enterprise), and users can create them at the “personal” level (for their own individual use, or to share selectively with colleagues).  In this entry, I’ll take a look at how to create personal Charts and Dashboards in 5 easy steps.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h1&gt;First a Few Assumptions&lt;/h1&gt;
&lt;p&gt;When creating personal charts and dashboards, you should generally have a pretty strong understanding of using views and filters.  In addition, if you create a particularly useful dashboard, you may want to share it with your peers – so understanding how to share items in CRM 2011 is also a good idea.  A colleague of mine has promised to blog on both of those topics soon, so if you’re not yet comfortable with those concepts, make sure you &lt;a rel="nofollow" target="_blank" href="http://www.c5insight.com/follow"&gt;follow us&lt;/a&gt; to keep up with the latest posts on those topics.&lt;/p&gt;
&lt;h1&gt;Would You Like Your Blog with a Side Dish of Video?&lt;/h1&gt;
&lt;p&gt;I covered this same topic in a recent video posting.  If you’d like to get the overview in 4 minutes (or less) then check out the video.  Or you can read on to have step-by-step instructions.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt; 
&lt;div style="width:448px;clear:both;font-size:.8em;"&gt; &lt;/div&gt;
&lt;h1&gt;How To: CRM 2011 Charts in 5 Steps&lt;/h1&gt;
&lt;p&gt;Creating a personal chart in Dynamics CRM has been designed to be a simple process. After you’ve created you first chart, you’ll find that creating charts feels familiar and natural. Here are the steps to take:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;First, call a high paid CRM consultant…&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Only joking.&lt;/p&gt;
&lt;p&gt;First of all, you’ll want to make sure that you’re on the list that you want to create a chart for. For example, if you want to create a pie chart of closed cases broken out by customer satisfaction, then start by navigating to the list of cases. Next, make sure that charts are currently displayed for the cases. To do this, click on the Charts tab in the ribbon menu, click on the Chart Pane button and choose either Right or Top.&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Visualizations-How-to-Create-Charts-and-_C250/image_2.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="Charts Menu in Dynamics CRM 2011" border="0" alt="Charts Menu in Dynamics CRM 2011" width="240" height="84" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Visualizations-How-to-Create-Charts-and-_C250/image_thumb.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And here, at last, are the 5 steps:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Click the Charts tab in the ribbon menu.&lt;/li&gt;
    &lt;li&gt;Click the New Chart button.&lt;/li&gt;
    &lt;li&gt;Select the type of chart that you want (such as a pie chart).&lt;/li&gt;
    &lt;li&gt;Fill out the fields in the chart area to tell CRM how to construct the chart.&lt;/li&gt;
    &lt;li&gt;Once your chart looks the way that you want, click Save and Close in the Ribbon menu.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Hover over the interactive image, below, for step-by-step instructions.&lt;/p&gt;
&lt;p&gt; &lt;embed type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" width="606" height="757"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;Just like that, you’ve created a chart that appears “in line” next to your list! Tell your boss you slaved away all night creating that chart and ask for a day off next week.&lt;/p&gt;
&lt;h1&gt;How To: CRM 2011 Dashboards in 5 Steps&lt;/h1&gt;
&lt;p&gt;Okay you got me, it doesn’t EXACTLY take 5 steps to create a dashboard. To create a dashboard you have to create a chart.  And to create a chart you need to go to the list and make charts visible next to it. And you might want to create a view to use for your chart. But c’mon, would you have really read a blog titled “how to create a dashboard in 73 simple steps?” BUT, assuming that you’ve come this far with me, then there really are only about 5 more steps left to put your newly created chart inside of a personal dashboard. &lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Navigate to the view of Dashboards and select a personal dashboard that you will modify. If you don’t have any personal dashboards, then find a system dashboard that you like and click the “Save As” button in the ribbon menu – now you can save it under a different name and it becomes a personal dashboard.&lt;/li&gt;
    &lt;li&gt;Click the Edit button in the ribbon menu.&lt;/li&gt;
    &lt;li&gt;In the Insert area of the ribbon menu, click the Chart button.&lt;/li&gt;
    &lt;li&gt;Choose the record type, view and chart that you want to insert and click the OK button.&lt;/li&gt;
    &lt;li&gt;Using drag-and-drop, move the chart to the desired location in the dashboard, then click save and close (clicking save and close is actually step #6, but for some unknown reason I wanted to keep the number of steps to 5 for both charts and dashboards).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Once you’ve done this a time or two, you should be able to create new charts and modify your dashboards in just a few minutes.&lt;/p&gt;
&lt;h1&gt;Pimp My Dashboards&lt;/h1&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Visualizations-How-to-Create-Charts-and-_C250/image_6.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;float:right;border-top:0px;border-right:0px;padding-top:0px;" title="Dashboard Including Map Charts Grid Iframe Web Resource Custom XML in Dynamics CRM 2011" border="0" alt="Dashboard Including Map Charts Grid Iframe Web Resource Custom XML in Dynamics CRM 2011" align="right" width="244" height="184" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Visualizations-How-to-Create-Charts-and-_C250/image_thumb_2.png"/&gt;&lt;/a&gt;What else can you do with charts and dashboards?  Plenty. It’s very easy to add a grid to a dashboard, for example. You can also edit the “code” behind charts to customize them even further. And, dashboards include custom elements called Iframes and Web Resources. Using these more technical tools, you can create highly customized dashboards that deliver tailored intelligence to users across your enterprise.  The nearby illustration is just one example of what you can achieve when you start to pimp out your dashboards.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/164/Visualizations-How-to-Create-Charts-and-Dashboards-in-Dynamics-CRM-2011.aspx</guid>
         <pubDate>Mon, 14 Mar 2011 20:00:00 +0000</pubDate>
      </item>
      <item>
         <title>Manage Dynamics CRM 2011 with PowerShell!</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/169/Manage-Dynamics-CRM-2011-with-PowerShell.aspx</link>
         <description>&lt;p&gt;&lt;img height="36" width="47" border="0" align="left" style="background-image:none;border:0px none;margin:0px 15px 0px 0px;padding-left:0px;padding-right:0px;display:inline;float:left;padding-top:0px;" title="powershell_icon_thumb6_thumb" alt="powershell_icon_thumb6_thumb" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/f1c3e4b84aff_138D4/powershell_icon_thumb6_thumb_3.jpg"/&gt;With the recent highly anticipated release of CRM 2011, you now have the ability to manage some parts of Dynamics CRM 2011 with PowerShell!  Ok not entirely, but it is a great start from Microsoft to providing the incredible flexibility of PowerShell to Dynamics CRM.  More specifically, you are able to script deployment management tasks only.  For the time being, you can only run PowerShell with CRM on-premise, NOT CRM Online.  Currently the functionality of PowerShell for CRM 2011 is limited, so this mostly would pertain to either to large organizations, or companies that do CRM hosting through SPLA agreements.  With these new PowerShell cmdlets, you are able to do things like:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Create/Remove Deployment Administrators&lt;/li&gt;
    &lt;li&gt;Create/Import CRM Organizations&lt;/li&gt;
    &lt;li&gt;Review and configure CRM Organization settings&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;A Side Note on PowerShell ISE&lt;/h1&gt;
&lt;p&gt;When working with PowerShell, I will always recommend using the PowerShell ISE application.  It's a feature included in PowerShell 2.0, which is in Windows Server 2008 R2 and Windows 7 (or if you &lt;a rel="nofollow" target="_blank" href="http://support.microsoft.com/kb/968929"&gt;download PowerShell 2.0&lt;/a&gt;).  It beats the regular PowerShell command window by a mile.  In Windows Server, go to Server Manager –&amp;gt; Features –&amp;gt; and check the box for Windows PowerShell Integrated Scripting Environment (ISE).&lt;/p&gt;
&lt;p&gt;&lt;img height="121" width="244" border="0" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="Installing PowerShell ISE" alt="Installing PowerShell ISE" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/f1c3e4b84aff_138D4/image11_thumb1_thumb.png"/&gt;&lt;/p&gt;
&lt;p&gt;Once installed, it’s accessible under Start –&amp;gt; Accessories –&amp;gt; Windows PowerShell –&amp;gt; Windows PowerShell ISE.  There’s loads of good info already out there on PowerShell in general, so I won’t reiterate them here.  Now that we have that out of the way … on to CRM!&lt;/p&gt;
&lt;h1&gt;CRM 2011 and PowerShell – Better Together!&lt;/h1&gt;
&lt;p&gt;Now you’ve got your powerful ISE application open, let’s see what we can do.  As with SharePoint, you need to load the CRM PowerShell snapin dll file into the PowerShell console.  This snapin is what provides all of the cmdlets you will use in your commands and scripts.  Let’s load the snapin:&lt;/p&gt;
&lt;div style="border:1px solid silver;text-align:left;padding:4px;line-height:12pt;background-color:rgb(244, 244, 244);margin:20px 0px 10px;width:97.5%;font-family:courier, monospace;direction:ltr;height:35px;max-height:200px;font-size:8pt;overflow:auto;cursor:text;" id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:rgb(244, 244, 244);width:100%;font-family:courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;
Add-PSSnapin Microsoft.Crm.PowerShell&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Let’s see what commands we have.  The first command will return all cmdlets, and format it in a simple table view showing only the name.  If you want more detail, try the second command:&lt;/p&gt;
&lt;div style="border:1px solid silver;text-align:left;padding:4px;line-height:12pt;background-color:rgb(244, 244, 244);margin:20px 0px 10px;width:97.5%;font-family:courier, monospace;direction:ltr;height:67px;max-height:200px;font-size:8pt;overflow:auto;cursor:text;" id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:rgb(244, 244, 244);width:100%;font-family:courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;
Get-Command -PSSnapin "Microsoft.Crm.PowerShell" | format-table name&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:rgb(244, 244, 244);margin:0em;width:100%;font-family:courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;
 &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;
Get-Command -PSSnapin "Microsoft.Crm.PowerShell" | select name, definition | format-list&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;It returns a simple list of all the cmdlets as below:&lt;/p&gt;
&lt;div style="border:1px solid silver;text-align:left;padding:4px;line-height:12pt;background-color:rgb(244, 244, 244);margin:20px 0px 10px;width:97.5%;font-family:courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;cursor:text;" id="codeSnippetWrapper"&gt;
&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:rgb(244, 244, 244);margin:0em;width:100%;font-family:courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;" id="codeSnippet"&gt;
Name
----
Disable-CrmOrganization
Disable-CrmServer
Edit-CrmOrganization
Enable-CrmOrganization
Enable-CrmServer
Get-CrmCertificate
Get-CrmDefaultOrganization
Get-CrmDeploymentAdministrator
Get-CrmEtmSettings
Get-CrmLicenseProperty
Get-CrmOrganization
Get-CrmServer
Get-CrmSetting
Get-CrmThrottleSettings
Import-CrmOrganization
New-CrmDeploymentAdministrator
New-CrmOrganization
Remove-CrmCertificate
Remove-CrmDeploymentAdministrator
Remove-CrmOrganization
Remove-CrmServer
Set-CrmCertificate
Set-CrmEtmSettings
Set-CrmProductKey
Set-CrmSetting
Set-CrmThrottleSettings
Update-CrmOrganization&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;How many is that?  Count it!&lt;/p&gt;
&lt;div style="border:1px solid silver;text-align:left;padding:4px;line-height:12pt;background-color:rgb(244, 244, 244);margin:20px 0px 10px;width:97.5%;font-family:courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;cursor:text;" id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:rgb(244, 244, 244);width:100%;font-family:courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;
(Get-Command -PSSnapin "Microsoft.Crm.PowerShell").count&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you want more information on any command, you can use the following:&lt;/p&gt;
&lt;div style="border:1px solid silver;text-align:left;padding:4px;line-height:12pt;background-color:rgb(244, 244, 244);margin:20px 0px 10px;width:97.5%;font-family:courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;cursor:text;" id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:rgb(244, 244, 244);width:100%;font-family:courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;
Get-Help  –detailed&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Unlike other products however, they neglected to type out an explanation of the command or give examples.  To get some explanations of the commands, you can refer to the newly updated &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/gg328563.aspx"&gt;CRM 2011 SDK&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So what can we do with these cmdlets?  Let’s look at some possibilities:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Refresh your test environment from your production environment.  You could use SQL PowerShell commands to backup and restore the database, then import the organization. For more on PowerShell for SQL, see &lt;a rel="nofollow" target="_blank" href="http://technet.microsoft.com/en-us/library/cc281847.aspx"&gt;TechNet&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;Create / Delete / Enable / Disable / Import CRM Organizations&lt;/li&gt;
    &lt;li&gt;Enable Tracing&lt;/li&gt;
    &lt;li&gt;Add / Remove Deployment Administrators&lt;/li&gt;
    &lt;li&gt;Set a new product key&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Another reason to download the SDK is to get the sample PowerShell scripts that are included.  Here’s what provided:&lt;/p&gt;
&lt;p&gt;&lt;img height="244" width="176" border="0" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="Dynamics CRM 2011 SDK PowerShell Sample Scripts" alt="Dynamics CRM 2011 SDK PowerShell Sample Scripts" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/f1c3e4b84aff_138D4/image2_thumb_thumb.png"/&gt;&lt;/p&gt;
&lt;p&gt;I noticed 2 in particular, configure claims and configure IFD.  Nice!  I highly encourage you to get in there and dig in for yourself.  The PowerShell goodness only gets better from here!  Here are some more PowerShell resources:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://technet.microsoft.com/en-us/library/ee221100.aspx"&gt;PowerShell Owner’s Manual (TechNet)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://technet.microsoft.com/en-us/scriptcenter/dd742419"&gt;Scripting with Windows PowerShell (TechNet Scripting Center)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://tfl09.blogspot.com/"&gt;Lee’s Holmes Blog Under the Stairs (PowerShell MVP)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://www.powershellpro.com/powershell-tutorial-introduction/"&gt;PowerShell Tutorials for Beginners&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://www.powershell.nu/"&gt;PowerShell MVP Niklas Goude’s Blog&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.msdn.com/b/powershell/"&gt;MS PowerShell Team MSDN Blog&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://www.powergui.org"&gt;PowerGUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Be sure to check out our recent webcast on CRM 2011 for Administrators on our &lt;a rel="nofollow" target="_blank" href="http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/60/CRM-For-Administrators.aspx"&gt;C5 tube channel&lt;/a&gt;!&lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/169/Manage-Dynamics-CRM-2011-with-PowerShell.aspx</guid>
         <pubDate>Thu, 10 Mar 2011 09:26:00 +0000</pubDate>
      </item>
      <item>
         <title>CRM - For Administrators</title>
         <link>http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/60/CRM-For-Administrators.aspx</link>
         <description>&lt;a rel="nofollow" target="_blank" href='http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/60/CRM-For-Administrators.aspx'&gt;&lt;img src='http://c5insight_tube.s3.amazonaws.com/host/634352777822505980.jpg' align='left' border='0' hspace='5'&gt;&lt;/a&gt;CRM Administrators will find an almost overwhelming number of improvements to their experience in Dynamics CRM 2011.  This on-demand video focuses specifically on how Dynamics CRM 2011 will put greater capabilities into the hands of administrators, and what it means to your business. Presented by one of the authors of the Microsoft Dynamics Administration Bible.</description>
         <author>SuperUser Account</author>
         <guid isPermaLink="false">60</guid>
         <pubDate>Wed, 09 Mar 2011 14:29:43 +0000</pubDate>
         <category>Dynamics CRM</category>
      </item>
      <item>
         <title>CRM 2011 - The Upgrades</title>
         <link>http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/59/CRM-2011-The-Upgrades.aspx</link>
         <description>&lt;a rel="nofollow" target="_blank" href='http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/59/CRM-2011-The-Upgrades.aspx'&gt;&lt;img src='http://c5insight_tube.s3.amazonaws.com/host/634352772899319257.jpg' align='left' border='0' hspace='5'&gt;&lt;/a&gt;Microsoft has included dozens of upgrades in Dynamics CRM 2011 that accelerate user efficiency, improve management reporting and extend administrator capabilities. This on-demand video is focused on businesses that are considering an upgrade from CRM 4.0 to CRM 2011 and want to understand the potential.</description>
         <author>SuperUser Account</author>
         <guid isPermaLink="false">59</guid>
         <pubDate>Wed, 09 Mar 2011 14:21:30 +0000</pubDate>
         <category>Dynamics CRM</category>
      </item>
      <item>
         <title>Upgrade Paths for Microsoft Dynamics CRM 2011</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/162/Upgrade-Paths-for-Microsoft-Dynamics-CRM-2011.aspx</link>
         <description>&lt;p&gt;You may have heard that Dynamics CRM 2011 requires 64-bit architecture. This is true and is giving some folks some heartburn when they start to think about upgrading their CRM 4.0 deployments, many of which are still living in a 32-bit world.&lt;/p&gt;
&lt;p&gt;There are three potential upgrade paths, as well as another alternative that I would urge you to consider. Let’s take a look.&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Upgrade-Paths-for-Microsoft-Dynamics-CRM_C537/2011upgradepaths_6.png"&gt;&lt;img title="2011upgradepaths" border="0" alt="2011upgradepaths" width="600" height="328" style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" src="http://blogs.c5insight.com/Portals/0/SunBlogNuke/1/Windows-Live-Writer/Upgrade-Paths-for-Microsoft-Dynamics-CRM_C537/2011upgradepaths_thumb_2.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;In-Place Upgrade&lt;/h1&gt;
&lt;p&gt;An in-place upgrade is pretty straightforward: You’ve got an existing CRM 4.0 system that is running on hardware and software that is supported for CRM 2011. You fire up the setup.exe for CRM 2011 and it detects that CRM 4.0 is in place and asks if you want to proceed with an upgrade.&lt;/p&gt;
&lt;p&gt;PROS: Straightforward, no need to lay out money for new hardware.&lt;/p&gt;
&lt;p&gt;CONS: Risky – if the upgrade fails, you need to know how to roll back to your backups; Disruptive – while you’re upgrading, your users won’t be able to access CRM.&lt;/p&gt;
&lt;h1&gt;Upgrade Database During Install&lt;/h1&gt;
&lt;p&gt;In this scenario, you install CRM 2011 to a new 64-bit application server, and connect to a SQL server with an existing CRM 4.0 database. The 4.0 database will be upgraded during the install. This is a decent option if you’ve already got your SQL database on support hardware and SQL versions. It’s a little easier to recover from in case of failure than an in-place upgrade, since all you need to do is restore your databases.&lt;/p&gt;
&lt;p&gt;PROS: Leverages your investment in 64-bit SQL hardware/software; once-and-done installation if you succeed.&lt;/p&gt;
&lt;p&gt;CONS: Similar risks to the in-place upgrade though perhaps slightly less disruptive to end users.&lt;/p&gt;
&lt;h1&gt;Upgrade via Import&lt;/h1&gt;
&lt;p&gt;This is my preferred manner for upgrade. Essentially you build a new 64-bit environment for a clean install of CRM 2011 – the application servers and database servers are brand new and without remnants of CRM 4.0. After you’re satisfied with your new CRM 2011 environment, you simply restore a backup of your 4.0 database to the 2011 SQL Server, and then, using the CRM 2011 Deployment Manager, import the 4.0 org database into your new deployment. I’ve done this several times now, and it works like a charm, upgrading the org during the import process.&lt;/p&gt;
&lt;p&gt;PROS: Nice, new, bug-free 2011 environment; opportunity to perform upgrade tests multiple times before your “go-live” upgrade; no disruption to users.&lt;/p&gt;
&lt;p&gt;CONS: This is the most expensive scenario, requiring new hardware (or at least separate hardware) for the 2011 deployment. Also, you need to manually copy over things like supporting ISV files and applications that you may have had in place in your 4.0 environment.&lt;/p&gt;
&lt;h1&gt;Consider This&lt;/h1&gt;
&lt;p&gt;Lastly, I’d recommend that you evaluate CRM Online while considering your upgrade options. Now is a great time to take advantage of the improved functionality, affordability, and ease-of-maintenance that CRM Online provides.  If you have been managing a CRM 4.0 on-premises deployment, and want to move to the latest version of CRM, there are many good reasons to consider the cloud. C5 Insight can upgrade your database for you and then migrate your customizations and data to Microsoft’s data centers, allowing you to go back to running your business instead of running servers. Think about it!&lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/162/Upgrade-Paths-for-Microsoft-Dynamics-CRM-2011.aspx</guid>
         <pubDate>Wed, 09 Mar 2011 02:33:00 +0000</pubDate>
      </item>
      <item>
         <title>Using Connections with Dynamics CRM 2011</title>
         <link>http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/58/Using-Connections-With-Dynamics-CRM-2011.aspx</link>
         <description>&lt;a rel="nofollow" target="_blank" href='http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/58/Using-Connections-With-Dynamics-CRM-2011.aspx'&gt;&lt;img src='http://img.youtube.com/vi/Q3Tm_UsF_Co/default.jpg' align='left' border='0' hspace='5'&gt;&lt;/a&gt;This on-demand video is an excerpt from the video: CRM 2011 - The Upgrades. Social media is changing the way that businesses connect with their customers. Part of the way that Microsoft is addressing social collaboration in Dynamics CRM 2011 is through the usage of Connections. Connections allow you to link any records together to form a web of connected information. The result is customers that are more thrilled with their experiences, better closing rates with prospects, and more productive employees. 

To learn more about the upgrades available in Microsoft Dynamics CRM 2011, view the CRM 2011 - The Upgrades video on this website.</description>
         <author>SuperUser Account</author>
         <guid isPermaLink="false">58</guid>
         <pubDate>Tue, 08 Mar 2011 12:05:23 +0000</pubDate>
         <category>Dynamics CRM</category>
      </item>
      <item>
         <title>5 Steps to Create Charts, Dashboards and Visualizations in Dynamics CRM 2011</title>
         <link>http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/57/5-Steps-To-Create-Charts-Dashboards-And-Visualizations-In-Dynamics-CRM-2011.aspx</link>
         <description>&lt;a rel="nofollow" target="_blank" href='http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/57/5-Steps-To-Create-Charts-Dashboards-And-Visualizations-In-Dynamics-CRM-2011.aspx'&gt;&lt;img src='http://img.youtube.com/vi/Iz_lARcO-VA/default.jpg' align='left' border='0' hspace='5'&gt;&lt;/a&gt;This on-demand video is an excerpt from the full CRM 2011 - The Upgrades video on this site. CRM 2011 includes new functionality to intelligently visualize your customers, prospects, partners and processes. This video presents a how to guide for creating charts and dashboards.</description>
         <author>SuperUser Account</author>
         <guid isPermaLink="false">57</guid>
         <pubDate>Tue, 08 Mar 2011 12:03:07 +0000</pubDate>
         <category>Dynamics CRM</category>
      </item>
      <item>
         <title>Using Outlook Email Integration with Dynamics CRM 2011</title>
         <link>http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/56/Using-Outlook-Email-Integration-With-Dynamics-CRM-2011.aspx</link>
         <description>&lt;a rel="nofollow" target="_blank" href='http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/56/Using-Outlook-Email-Integration-With-Dynamics-CRM-2011.aspx'&gt;&lt;img src='http://img.youtube.com/vi/94JuXdnPXNQ/default.jpg' align='left' border='0' hspace='5'&gt;&lt;/a&gt;Dynamics CRM was already the leader in Outlook integration - but CRM 2011 delivers the next generation of integration. This video presents the new email integration tools including the ability to use native Outlook email with Dynamics CRM Templates, KnowledgeBase Articles and Sales Literature.

To see other upgrades, watch the full CRM 2011 - The Upgrades video on this site.</description>
         <author>SuperUser Account</author>
         <guid isPermaLink="false">56</guid>
         <pubDate>Tue, 08 Mar 2011 12:00:00 +0000</pubDate>
         <category>Dynamics CRM</category>
      </item>
      <item>
         <title>“An error has occurred” When Changing a Dynamics CRM User’s Business Unit</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/161/-An-error-has-occurred-When-Changing-a-Dynamics-CRM-User-s-Business-Unit.aspx</link>
         <description>&lt;p&gt;Recently while working on a client engagement, we needed to move users around to different business units in Dynamics CRM 4.0.  No problem right?  Well we very quickly determined things weren’t going to go smoothly.  When we attempted to change a user’s business unit, it would sit for 30 seconds and throw the lovely unhelpful generic message “An error has occurred”.  Gotta love Microsoft developer’s strong attention to error messages.  A lot of users have apparently run into this with no real good resolution.  We were able to find the true cause (at least in our case), so I wanted to share it to hopefully help others struggling with this.&lt;/p&gt;
&lt;p&gt;The cause for this error relates to SQL.  So when a you change a user’s business unit, this fires off many many SQL UPDATE statements that have to process across many tables in the CRM database.  This is to ensure all records owned by the user are changed to reflect the new business unit.  The problem comes in when these tables are very large, which causes the UPDATE commands to timeout and throw the error.  By default, the timeout values are at 30 seconds.  Microsoft typically sees these issues relating to tables with millions of records, but we saw them at 600,000 records.  Another issue is if there are not good indexes on the tables.  The &lt;strong&gt;AsyncOperationsBase&lt;/strong&gt; table stores information about system jobs.  However, this table can get very bloated.  CRM currently does not perform any logic on the entries, it just blindly tries to UPDATE all of them.  Microsoft is fixing this with update rollup 17 I believe that adds logic so it will only try and run the UPDATE SQL statements on records it finds that the user owns.  You could verify this by enabling tracing, and in the logs you will see it regarding an expired timeout.&lt;/p&gt;
&lt;p&gt;How do you fix this timeout issue?  Microsoft wrote &lt;a rel="nofollow" target="_blank" href="http://support.microsoft.com/kb/968520"&gt;KB article 968520&lt;/a&gt; that pretty much tells you what to do.  Obviously there could be multiple causes for this error, so gather some information:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;What update rollup are you running?  Make sure you are running on a recent update rollup where possible. &lt;/li&gt;
    &lt;li&gt;How big is the CRM SQL database? &lt;/li&gt;
    &lt;li&gt;Are you running regular SQL maintenance (rebuilding indexes, updating statistics, etc)&lt;/li&gt;
    &lt;li&gt;Did you move users from another domain?&lt;/li&gt;
    &lt;li&gt;Is there a difference between HTTP and HTTPS?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Some people have found what I call workarounds by adjusting the timeout values in the registry.  I made these changes, and it just made it take 15 minutes before I got the error.  But, for those who would like to try, you can follow the steps on MS KB 918609 for &lt;strong&gt;OLEDBTimeout &lt;/strong&gt;and &lt;strong&gt;ExtendedTimeout&lt;/strong&gt;.  Try that and the fix below before messing with the web.config. &lt;/p&gt;
&lt;p&gt;Our database was not huge at 33GB, but there was room for improvement.  Just shrinking the database got it down to 18GB.  We then proceeded to follow the Microsoft article which ultimately allowed us to change a user’s business unit.  You can read it for yourself, but I’ll outline the steps.   &lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Open SQL Mgmt Studio and click to run a new query on the CRM database, and run the command to determine how many records really are in the AyncOperationsBase table We had over 600,000 records. &lt;/li&gt;
    &lt;li&gt;Run the script to create the three indexes.&lt;/li&gt;
    &lt;li&gt;Run the script to rebuild the indexes and update statistics.&lt;/li&gt;
    &lt;li&gt;Run the script to update statistics with FULL SCAN.&lt;/li&gt;
    &lt;li&gt;Change the Recovery Model of the CRM database from Full to Simple (don’t forget to change back after complete).&lt;/li&gt;
    &lt;li&gt;STOP the Microsoft CRM Asynchronous Processing Service (start after cleanup complete).&lt;/li&gt;
    &lt;li&gt;Run the main cleanup script.&lt;/li&gt;
    &lt;li&gt;Shrink the CRM database (optional).&lt;/li&gt;
    &lt;li&gt;Re-run the script from step 1, and the return should 0 or almost 0 records now.&lt;/li&gt;
    &lt;li&gt;Try to change a user’s business unit again.  This should literally take less than 5 seconds for 1 user.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is a one-time operation, so you should NOT need to perform this on a regular basis. &lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/161/-An-error-has-occurred-When-Changing-a-Dynamics-CRM-User-s-Business-Unit.aspx</guid>
         <pubDate>Sat, 05 Mar 2011 02:51:00 +0000</pubDate>
      </item>
      <item>
         <title>Dynamics CRM 2011 – Reading Attribute Values Inside Your Plug-In</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/160/Dynamics-CRM-2011-Reading-Attribute-Values-Inside-Your-Plug-In.aspx</link>
         <description>&lt;p&gt;As the Dynamics CRM product evolves to provide more flexibility and extensibility for the user, changes to the underlying object model are inevitable. Microsoft must provide more robust and flexible entity attributes that allow users to customize CRM 2011 to meet their specific needs. Fortunately for developers, the programming model has been changed to use native .NET types whenever possible.  The net result is that many of the specific attributes from CRM 4.0 have been replaced with more “generic” types in CRM 2011. For a summary of these changes, take a peek here: &lt;a rel="nofollow" title="http://technet.microsoft.com/en-us/library/gg328507.aspx" target="_blank" href="http://technet.microsoft.com/en-us/library/gg328507.aspx"&gt;http://technet.microsoft.com/en-us/library/gg328507.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Often, developers need to capture an entity's attribute values to perform some custom function or action using a plugin. This might include updating other entities or even creating new entities based on the values derived from the base entity.&lt;/p&gt;
&lt;p&gt;This article deals with the new &lt;strong&gt;OptionSetValue &lt;/strong&gt;type, which replaces the &lt;strong&gt;PickList &lt;/strong&gt;type in 4.0. It also replaces the “&lt;strong&gt;State&lt;/strong&gt;” and “&lt;strong&gt;Status&lt;/strong&gt;” entity attributes, which are specific PickList types. We will also read the other attributes, including the new &lt;strong&gt;EntityReference&lt;/strong&gt; type which replaces a number of CRM 4.0 types such as &lt;strong&gt;Lookup, Customer,&lt;/strong&gt; and &lt;strong&gt;Owner.&lt;/strong&gt;  You will note that the CRM 2011 UI still refers to the “LookUp” data type, but the Attribute object model uses the &lt;strong&gt;EntityReference.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For examples of how we construct a plug-in and get our entity and attribute data, download the Microsoft Dynamics CRM 2011 SDK here: &lt;a rel="nofollow" title="http://msdn.microsoft.com/en-us/dynamics/crm/default" target="_blank" href="http://msdn.microsoft.com/en-us/dynamics/crm/default"&gt;http://msdn.microsoft.com/en-us/dynamics/crm/default&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The code below assumes we have created our service proxy from our context and implemented the &lt;strong&gt;Retrieve&lt;/strong&gt; method to retrieve our entity and metadata column information. An example can be found here: &lt;a rel="nofollow" title="http://msdn.microsoft.com/en-us/library/microsoft.xrm.sdk.iorganizationservice.retrieve.aspx" target="_blank" href="http://msdn.microsoft.com/en-us/library/microsoft.xrm.sdk.iorganizationservice.retrieve.aspx"&gt;http://msdn.microsoft.com/en-us/library/microsoft.xrm.sdk.iorganizationservice.retrieve.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In the example reference above, and for our purposes, we will use the “Account” entity type as our basis. As in the example, we will call our account entity “retrievedAccount”.  We can iterate through the attributes of our entity as shown below. This snippet will call our custom function to read and return the value of each attribute. Note that we must call RetrieveAttributeRequest to get the metadata for our attribute itself.&lt;/p&gt;
&lt;div id="codeSnippetWrapper" style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;"&gt;
&lt;div id="codeSnippet" style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;
&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// Iterate the metadata columns collection&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum2" style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (KeyValuePair&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt;&amp;gt; metaAttribute &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; retrievedAccount.Attributes)&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum3" style="color:#606060;"&gt;   3:&lt;/span&gt;      {&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum4" style="color:#606060;"&gt;   4:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;// Get our property object&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum5" style="color:#606060;"&gt;   5:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; myProp = retrievedAccount.Attributes[metaAttribute.Key];&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum6" style="color:#606060;"&gt;   6:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;//&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum7" style="color:#606060;"&gt;   7:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;// Get the attribute metadata for the state attribute using RetrieveAttributeRequest.&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum8" style="color:#606060;"&gt;   8:&lt;/span&gt;         RetrieveAttributeRequest attribReq = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; RetrieveAttributeRequest();&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum9" style="color:#606060;"&gt;   9:&lt;/span&gt;         attribReq.EntityLogicalName = retrievedAccount.LogicalName;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum10" style="color:#606060;"&gt;  10:&lt;/span&gt;         attribReq.LogicalName = metaAttribute.Key;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum11" style="color:#606060;"&gt;  11:&lt;/span&gt;         attribReq.RetrieveAsIfPublished = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum12" style="color:#606060;"&gt;  12:&lt;/span&gt;         RetrieveAttributeResponse amRes = (RetrieveAttributeResponse)_serviceProxy.Execute(attribReq);&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum13" style="color:#606060;"&gt;  13:&lt;/span&gt;         AttributeMetadata attmetadata = amRes.AttributeMetadata;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum14" style="color:#606060;"&gt;  14:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;// Now we call our function to read the attribute value for our entity&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum15" style="color:#606060;"&gt;  15:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; sMyValue = GetMetadataValue(myProp , amRes);&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum16" style="color:#606060;"&gt;  16:&lt;/span&gt;         Console.Write(&lt;span style="color:#006080;"&gt;"Value of {0} is {1} "&lt;/span&gt;, metaAttribute.Key, sMyValue);&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum17" style="color:#606060;"&gt;  17:&lt;/span&gt;  &lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum18" style="color:#606060;"&gt;  18:&lt;/span&gt;     }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Finally, here is our function to read and return the actual attribute value. Note that it uses attribute metadata from the RetrieveAttributeRequest to determine just how to read the value. For our OptionSetValue type, we simply put the possible values from the RetrieveAttributeRequest into an array and then find a match to the numeric value stored in our Entity’s metadata. We want to return the matching string value. For our &lt;strong&gt;EntityReference &lt;/strong&gt;type, we simply return the &lt;strong&gt;Name &lt;/strong&gt;property. For many attribute types we only have to return the objects string value.&lt;/p&gt;
&lt;div id="codeSnippetWrapper" style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;"&gt;
&lt;div id="codeSnippet" style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;
&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; GetMetadataValue(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; oAttribute, RetrieveAttributeResponse attMetadata)&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum2" style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum3" style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; sReturn = &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Empty;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum4" style="color:#606060;"&gt;   4:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (oAttribute.GetType().Equals(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(Microsoft.Xrm.Sdk.OptionSetValue)))&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum5" style="color:#606060;"&gt;   5:&lt;/span&gt;     {&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum6" style="color:#606060;"&gt;   6:&lt;/span&gt;  &lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum7" style="color:#606060;"&gt;   7:&lt;/span&gt;         OptionMetadata[] optionList = &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum8" style="color:#606060;"&gt;   8:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;// Access the retrieved attribute.&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum9" style="color:#606060;"&gt;   9:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;//'Microsoft.Xrm.Sdk.Metadata.PicklistAttributeMetadata' &lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum10" style="color:#606060;"&gt;  10:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (attMetadata.AttributeMetadata.GetType().FullName.Contains(&lt;span style="color:#006080;"&gt;"PicklistAttributeMetadata"&lt;/span&gt;))&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum11" style="color:#606060;"&gt;  11:&lt;/span&gt;         {&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum12" style="color:#606060;"&gt;  12:&lt;/span&gt;             PicklistAttributeMetadata retrievedPicklistAttributeMetadata =&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum13" style="color:#606060;"&gt;  13:&lt;/span&gt;                 (PicklistAttributeMetadata)attMetadata.AttributeMetadata;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum14" style="color:#606060;"&gt;  14:&lt;/span&gt;             &lt;span style="color:#008000;"&gt;// Get the current options list for the retrieved attribute.&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum15" style="color:#606060;"&gt;  15:&lt;/span&gt;             optionList = retrievedPicklistAttributeMetadata.OptionSet.Options.ToArray();&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum16" style="color:#606060;"&gt;  16:&lt;/span&gt;         }&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum17" style="color:#606060;"&gt;  17:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (attMetadata.AttributeMetadata.GetType().FullName.Contains(&lt;span style="color:#006080;"&gt;"StatusAttributeMetadata"&lt;/span&gt;))&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum18" style="color:#606060;"&gt;  18:&lt;/span&gt;         {&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum19" style="color:#606060;"&gt;  19:&lt;/span&gt;             StatusAttributeMetadata retrievedPicklistAttributeMetadata =&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum20" style="color:#606060;"&gt;  20:&lt;/span&gt;                 (StatusAttributeMetadata)attMetadata.AttributeMetadata;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum21" style="color:#606060;"&gt;  21:&lt;/span&gt;             &lt;span style="color:#008000;"&gt;// Get the current options list for the retrieved attribute.&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum22" style="color:#606060;"&gt;  22:&lt;/span&gt;             optionList = retrievedPicklistAttributeMetadata.OptionSet.Options.ToArray();&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum23" style="color:#606060;"&gt;  23:&lt;/span&gt;         }&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum24" style="color:#606060;"&gt;  24:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (attMetadata.AttributeMetadata.GetType().FullName.Contains(&lt;span style="color:#006080;"&gt;"StateAttributeMetadata"&lt;/span&gt;))&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum25" style="color:#606060;"&gt;  25:&lt;/span&gt;         {&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum26" style="color:#606060;"&gt;  26:&lt;/span&gt;             StateAttributeMetadata retrievedPicklistAttributeMetadata =&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum27" style="color:#606060;"&gt;  27:&lt;/span&gt;                 (StateAttributeMetadata)attMetadata.AttributeMetadata;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum28" style="color:#606060;"&gt;  28:&lt;/span&gt;             &lt;span style="color:#008000;"&gt;// Get the current options list for the retrieved attribute.&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum29" style="color:#606060;"&gt;  29:&lt;/span&gt;             optionList = retrievedPicklistAttributeMetadata.OptionSet.Options.ToArray();&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum30" style="color:#606060;"&gt;  30:&lt;/span&gt;         }&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum31" style="color:#606060;"&gt;  31:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum32" style="color:#606060;"&gt;  32:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Empty;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum33" style="color:#606060;"&gt;  33:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;// get the text values&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum34" style="color:#606060;"&gt;  34:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; i = &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;.Parse((oAttribute &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Microsoft.Xrm.Sdk.OptionSetValue).Value.ToString());&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum35" style="color:#606060;"&gt;  35:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; c = 0; c &amp;lt; optionList.Length; c++)&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum36" style="color:#606060;"&gt;  36:&lt;/span&gt;         {&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum37" style="color:#606060;"&gt;  37:&lt;/span&gt;             OptionMetadata opmetadata = (OptionMetadata)optionList.GetValue(c);&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum38" style="color:#606060;"&gt;  38:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (opmetadata.Value == i)&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum39" style="color:#606060;"&gt;  39:&lt;/span&gt;             {&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum40" style="color:#606060;"&gt;  40:&lt;/span&gt;                 sReturn = opmetadata.Label.UserLocalizedLabel.Label;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum41" style="color:#606060;"&gt;  41:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;break&lt;/span&gt;;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum42" style="color:#606060;"&gt;  42:&lt;/span&gt;             }&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum43" style="color:#606060;"&gt;  43:&lt;/span&gt;         }&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum44" style="color:#606060;"&gt;  44:&lt;/span&gt;  &lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum45" style="color:#606060;"&gt;  45:&lt;/span&gt;     }&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum46" style="color:#606060;"&gt;  46:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (oAttribute.GetType().Equals(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(Microsoft.Xrm.Sdk.Money)))&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum47" style="color:#606060;"&gt;  47:&lt;/span&gt;     {&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum48" style="color:#606060;"&gt;  48:&lt;/span&gt;         sReturn = (oAttribute &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Microsoft.Xrm.Sdk.Money).Value.ToString();&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum49" style="color:#606060;"&gt;  49:&lt;/span&gt;     }&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum50" style="color:#606060;"&gt;  50:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (oAttribute.GetType().Equals(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(Microsoft.Xrm.Sdk.EntityReference)))&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum51" style="color:#606060;"&gt;  51:&lt;/span&gt;     {&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum52" style="color:#606060;"&gt;  52:&lt;/span&gt;         sReturn = (oAttribute &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; Microsoft.Xrm.Sdk.EntityReference).Name;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum53" style="color:#606060;"&gt;  53:&lt;/span&gt;     }&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum54" style="color:#606060;"&gt;  54:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum55" style="color:#606060;"&gt;  55:&lt;/span&gt;     {&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum56" style="color:#606060;"&gt;  56:&lt;/span&gt;         sReturn = oAttribute.ToString();&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum57" style="color:#606060;"&gt;  57:&lt;/span&gt;     }&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum58" style="color:#606060;"&gt;  58:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (sReturn == &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt; || sReturn.Length == 0)&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum59" style="color:#606060;"&gt;  59:&lt;/span&gt;         sReturn = &lt;span style="color:#006080;"&gt;"No Value"&lt;/span&gt;;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum60" style="color:#606060;"&gt;  60:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; sReturn;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span id="lnum61" style="color:#606060;"&gt;  61:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt; In the above function I have tried to cover most of the common attribute types including the &lt;strong&gt;Money&lt;/strong&gt; type. You will see that there is opportunity for an empty string to be returned if we run into an unexpected type. I also have it returning the string “No Value” if the attribute exists, but is not valued. This seems to be working pretty well thus far, but if I find additional functionality to add, I will post an update. Meanwhile, feel free to experiment with this a offer comments and enhancements.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/160/Dynamics-CRM-2011-Reading-Attribute-Values-Inside-Your-Plug-In.aspx</guid>
         <pubDate>Fri, 04 Mar 2011 21:20:00 +0000</pubDate>
      </item>
      <item>
         <title>Dynamics CRM 2011 Released for On-Premise Installation</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/156/Dynamics-CRM-2011-Released-for-On-Premise-Installation.aspx</link>
         <description>&lt;p&gt;The hits are coming fast and furious this morning. I previously &lt;a rel="nofollow" target="_blank" href="http://blogs.c5insight.com/Home/tabid/40/entryid/155/Microsoft-Dynamics-CRM-2011-SDK-Implementation-Guide-Planning-Tools-Now-Available.aspx"&gt;blogged&lt;/a&gt; about the release of the Implementation Guide for CRM 2011, and only minutes later had to update the post to account for the release of the SDK. Now it seems Microsoft has also released the download for on-premise and partner-hosted installations of CRM 2011. It's available &lt;a rel="nofollow" target="_blank" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c3f82c6f-c123-4e80-b9b2-ee422a16b91d"&gt;here&lt;/a&gt;. Information about upgrading from an RC installation will be forthcoming.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/156/Dynamics-CRM-2011-Released-for-On-Premise-Installation.aspx</guid>
         <pubDate>Wed, 16 Feb 2011 20:18:00 +0000</pubDate>
      </item>
      <item>
         <title>Microsoft Dynamics CRM 2011 SDK, Implementation Guide &amp; Planning Tools Now Available</title>
         <link>http://blogs.c5insight.com/Home/tabid/40/entryid/155/Microsoft-Dynamics-CRM-2011-SDK-Implementation-Guide-Planning-Tools-Now-Available.aspx</link>
         <description>&lt;p&gt;Microsoft has released the SDK (Software Development Kit), Implementation Guide (IG), and Planning Tools for Dynamics CRM 2011. These tools are indispensable references that cover customizing and extending CRM, system architecture, process design, installation of the CRM server and related components, and much more. The SDK is available &lt;a rel="nofollow" target="_blank" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=420f0f05-c226-4194-b7e1-f23ceaa83b69"&gt;here&lt;/a&gt;. The IG and Planning Tools are available for download &lt;a rel="nofollow" target="_blank" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=9886ab96-3571-420f-83ad-246899482fb4&amp;displaylang=en"&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://blogs.c5insight.com/Home/tabid/40/entryid/155/Microsoft-Dynamics-CRM-2011-SDK-Implementation-Guide-Planning-Tools-Now-Available.aspx</guid>
         <pubDate>Wed, 16 Feb 2011 19:18:00 +0000</pubDate>
      </item>
      <item>
         <title>Grant Management</title>
         <link>http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/54/Grant-Management.aspx</link>
         <description>&lt;a rel="nofollow" target="_blank" href='http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/54/Grant-Management.aspx'&gt;&lt;img src='http://c5insight_tube.s3.amazonaws.com/host/634328416552187500.jpg' align='left' border='0' hspace='5'&gt;&lt;/a&gt;Grants Manager is designed to help educational institutions and government organizations to quickly deploy a new grant management  system or compliment an existing one. The solution addresses vital business needs in the PS grants and financial aid management space.  This video provides an overview of the Grants Management solution.  Contact C5 Insight for more information or a live demo.</description>
         <author>SuperUser Account</author>
         <guid isPermaLink="false">54</guid>
         <pubDate>Wed, 09 Feb 2011 09:47:36 +0000</pubDate>
         <category>All Microsoft (MSCRM and SP)</category>
      </item>
      <item>
         <title>Accelerated Sales with Dynamics CRM 2011 and SharePoint 2010</title>
         <link>http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/53/Accelerated-Sales-With-Dynamics-CRM-2011-And-SharePoint-2010.aspx</link>
         <description>&lt;a rel="nofollow" target="_blank" href='http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/53/Accelerated-Sales-With-Dynamics-CRM-2011-And-SharePoint-2010.aspx'&gt;&lt;img src='http://img.youtube.com/vi/dtJ3fH1khLQ/default.jpg' align='left' border='0' hspace='5'&gt;&lt;/a&gt;Combing the power of Dynamics CRM 2011 and SharePoint 2010 can significantly accelerate sales processes. This video includes an overview of dashboards, goal management, SharePoint integration and quote management.</description>
         <author>SuperUser Account</author>
         <guid isPermaLink="false">53</guid>
         <pubDate>Tue, 01 Feb 2011 22:59:29 +0000</pubDate>
         <category>All Microsoft (MSCRM and SP)</category>
      </item>
      <item>
         <title>Social Media and Dynamics CRM</title>
         <link>http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/52/Social-Media-And-Dynamics-CRM.aspx</link>
         <description>&lt;a rel="nofollow" target="_blank" href='http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/52/Social-Media-And-Dynamics-CRM.aspx'&gt;&lt;img src='http://c5insight_tube.s3.amazonaws.com/host/634316630556257176.jpg' align='left' border='0' hspace='5'&gt;&lt;/a&gt;Social networking is changing how customer relationships are formed and maintained.  Not only is this new paradigm affecting how businesses work with customers, but it is also changing the way that employees collaborate with one another.  But the core principals of social networking (decentralized, customer or stakeholder driven, opt-in) are often at odds with the way most businesses structure their CRM solution (centralized, company control driven, targeted).  This session provides a strategic framework for integrating your website, CRM and social channels. It includes 3 examples of how to integrate Dynamics CRM with social networking for improved marketing, customer service and collaboration.</description>
         <author>SuperUser Account</author>
         <guid isPermaLink="false">52</guid>
         <pubDate>Wed, 26 Jan 2011 18:24:16 +0000</pubDate>
         <category>All Microsoft (MSCRM and SP)</category>
      </item>
      <item>
         <title>May 2010 - Side-by-Side: What Makes Microsoft CRM and Salesforce.com Different?</title>
         <link>http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/37/May-2010-SidebySide-What-Makes-Microsoft-CRM-And-Salesforcecom-Different.aspx</link>
         <description>&lt;a rel="nofollow" target="_blank" href='http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/37/May-2010-SidebySide-What-Makes-Microsoft-CRM-And-Salesforcecom-Different.aspx'&gt;&lt;img src='http://c5insight_tube.s3.amazonaws.com/host/634148325637922119.gif' align='left' border='0' hspace='5'&gt;&lt;/a&gt;A unique opportunity to see an objective comparison of the two most popular and most powerful CRM applications on the market today.</description>
         <author>SuperUser Account</author>
         <guid isPermaLink="false">37</guid>
         <pubDate>Sun, 23 May 2010 23:16:36 +0000</pubDate>
         <category>All CRM (MSCRM and SFDC)</category>
      </item>
      <item>
         <title>Back to the Basics with Microsoft CRM</title>
         <link>http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/22/Back-To-The-Basics-With-Microsoft-CRM.aspx</link>
         <description>&lt;a rel="nofollow" target="_blank" href='http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/22/Back-To-The-Basics-With-Microsoft-CRM.aspx'&gt;&lt;img src='http://c5insight_tube.s3.amazonaws.com/host/634143446727712654.gif' align='left' border='0' hspace='5'&gt;&lt;/a&gt;Dynamics CRM offers a broad array of functionality. But many organizations are not fully using the fundamentals. This is a great video for those who need a refresher on the basics.</description>
         <author>SuperUser Account</author>
         <guid isPermaLink="false">22</guid>
         <pubDate>Wed, 01 Jul 2009 00:00:00 +0000</pubDate>
         <category>Dynamics CRM</category>
      </item>
      <item>
         <title>Better Together: Microsoft CRM and SharePoint</title>
         <link>http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/28/Better-Together-Microsoft-CRM-And-SharePoint.aspx</link>
         <description>&lt;a rel="nofollow" target="_blank" href='http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/28/Better-Together-Microsoft-CRM-And-SharePoint.aspx'&gt;&lt;img src='http://c5insight_tube.s3.amazonaws.com/host/634143458768104345.gif' align='left' border='0' hspace='5'&gt;&lt;/a&gt;SharePoint and Dynamics CRM are both powerful development platforms. This video takes a look at how these tools are being combined to accelerate performance.</description>
         <author>SuperUser Account</author>
         <guid isPermaLink="false">28</guid>
         <pubDate>Thu, 18 Jun 2009 00:00:00 +0000</pubDate>
         <category>All Microsoft (MSCRM and SP)</category>
      </item>
      <item>
         <title>Salesforce.com and Microsoft CRM: Side-by-Side Demo</title>
         <link>http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/27/Salesforcecom-And-Microsoft-CRM-SidebySide-Demo.aspx</link>
         <description>&lt;a rel="nofollow" target="_blank" href='http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/27/Salesforcecom-And-Microsoft-CRM-SidebySide-Demo.aspx'&gt;&lt;img src='http://c5insight_tube.s3.amazonaws.com/host/634143457566705784.gif' align='left' border='0' hspace='5'&gt;&lt;/a&gt;An exclusive side-by-side demo of Microsoft Dynamics CRM and Salesforce.com! If you're considering a CRM solution, this is a can't miss session. Be sure to the second version of this unique webinar - delivered in May of 2010!</description>
         <author>SuperUser Account</author>
         <guid isPermaLink="false">27</guid>
         <pubDate>Sun, 24 May 2009 00:00:00 +0000</pubDate>
         <category>All CRM (MSCRM and SFDC)</category>
      </item>
      <item>
         <title>What's New with Dynamics CRM 4.0</title>
         <link>http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/32/Whats-New-With-Dynamics-CRM-40.aspx</link>
         <description>&lt;a rel="nofollow" target="_blank" href='http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/32/Whats-New-With-Dynamics-CRM-40.aspx'&gt;&lt;img src='http://c5insight_tube.s3.amazonaws.com/host/634143463941352486.gif' align='left' border='0' hspace='5'&gt;&lt;/a&gt;Microsoft continues to roll out improvements to their leading CRM platform. This session takes a look at the latest add-ons and accelerators for Dynamics CRM 4.0</description>
         <author>SuperUser Account</author>
         <guid isPermaLink="false">32</guid>
         <pubDate>Wed, 08 Apr 2009 00:00:00 +0000</pubDate>
         <category>Dynamics CRM</category>
      </item>
      <item>
         <title>The Dynamics CRM 4.0 Demo</title>
         <link>http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/24/The-Dynamics-CRM-40-Demo.aspx</link>
         <description>&lt;a rel="nofollow" target="_blank" href='http://tube.c5insight.com/Home/WatchVideo/TabId/66/VideoId/24/The-Dynamics-CRM-40-Demo.aspx'&gt;&lt;img src='http://c5insight_tube.s3.amazonaws.com/host/634143453694855564.gif' align='left' border='0' hspace='5'&gt;&lt;/a&gt;The fundamentals of CRM and a demo of Microsoft Dynamics CRM 4.0.</description>
         <author>SuperUser Account</author>
         <guid isPermaLink="false">24</guid>
         <pubDate>Sun, 15 Mar 2009 00:00:00 +0000</pubDate>
         <category>Dynamics CRM</category>
      </item>
   </channel>
</rss><!-- fe13.pipes.sp1.yahoo.com compressed/chunked Sun Feb 26 02:04:40 UTC 2012 -->

