<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;Dk4CQn04cCp7ImA9WhRbEUk.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815</id><updated>2012-02-01T18:09:23.338-07:00</updated><category term="MSCRM Training" /><category term="Off Topic" /><category term="MSCRM Installation" /><category term="Database Normalization" /><category term="Nonsense" /><category term="MSCRM Workflow" /><category term="MSCRM Customization" /><category term="MSCRM Troubleshooting" /><category term="CRM Spell Check" /><category term="CRM Online" /><category term="MSCRM SOAP Endpoint" /><category term="WF" /><category term="MSCRM WCF Service Bindings" /><category term="MSCRM SDK" /><category term="Data Integration" /><category term="Browser Client Debugging" /><category term="JavaScript Snippet" /><category term="SSIS" /><category term="CRM Query Expression" /><category term="MSCRM Deployment Manager" /><category term="Services" /><category term="MSCRM Developer Toolkit" /><category term="IE Addon" /><category term="LINQ" /><category term="MSCRM Data Management" /><category term="MSCRM Plug-in" /><category term="MSCRM 2011" /><category term="MSCRM Client Script" /><category term="Certification" /><category term="IE Spell Check" /><category term="SFTP" /><category term="MVP" /><category term="XML" /><category term="MSCRM Solution Framework" /><category term="MSCRM 4" /><category term="MSCRM Whitepaper" /><category term="Generics" /><category term="MSCRM Ribbon Customization" /><category term="C#" /><category term="MSCRM Customization Export" /><category term="Data Access" /><category term="Jet Database Engine" /><category term="CRM FetchXML" /><category term="C# Snippet" /><category term="MSCRM Web Service Toolkit" /><category term="MSCRM 4 Filtered Lookup" /><category term="CRM MVP" /><category term="CRM Online Trial" /><category term="Serialization" /><title>Daniel Cai's Blog</title><subtitle type="html">An adventure with MSCRM, .NET, JavaScript, Software Engineering, and Enterprise Application Development</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://danielcai.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>65</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/DanielCai" /><feedburner:info uri="danielcai" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>DanielCai</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;DEcFSHg-cCp7ImA9WhRUFkU.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815.post-8974314382231995305</id><published>2012-01-27T09:29:00.000-07:00</published><updated>2012-01-27T10:40:19.658-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-27T10:40:19.658-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM 2011" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM WCF Service Bindings" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM SOAP Endpoint" /><title>Config-less WCF Service Endpoint Binding for CRM 2011 On-Premise</title><content type="html">I previously &lt;a href="http://danielcai.blogspot.com/2011/06/step-by-step-walkthrough-use-crm-2011.html" target="_blank"&gt;blogged&lt;/a&gt; about how to consume CRM 2011 WCF Services through adding service reference in Visual Studio. Sometimes, there might be a need that you want to initialize the service in your code without the config file.&lt;br /&gt;
&lt;br /&gt;
So here is the method that does this job for CRM 2011 on-premise deployment.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="csharp" name="code"&gt;private static CustomBinding GetServiceEndpointBinding(string bindingName)
{
     var endpointBinding = new CustomBinding
                               {
                                   Name = bindingName
                               };

     // Configure security binding
     var securityElement = SecurityBindingElement.CreateSspiNegotiationBindingElement(true);
     securityElement.DefaultAlgorithmSuite = SecurityAlgorithmSuite.Default;
     securityElement.KeyEntropyMode = SecurityKeyEntropyMode.CombinedEntropy;
     securityElement.MessageSecurityVersion = MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10;
     securityElement.MessageProtectionOrder = MessageProtectionOrder.SignBeforeEncryptAndEncryptSignature;
     securityElement.SecurityHeaderLayout = SecurityHeaderLayout.Strict;
     securityElement.IncludeTimestamp = true;

     var messageEncoding = new TextMessageEncodingBindingElement();
     messageEncoding.ReaderQuotas.MaxStringContentLength = int.MaxValue;
     messageEncoding.ReaderQuotas.MaxArrayLength = int.MaxValue;
     messageEncoding.ReaderQuotas.MaxBytesPerRead = int.MaxValue;

     var transport = new HttpTransportBindingElement
                              {
                                   MaxBufferSize = int.MaxValue,
                                   MaxReceivedMessageSize = int.MaxValue
                              };

     // Add the SymmetricSecurityBindingElement to the BindingElementCollection.
     endpointBinding.Elements.Add(securityElement);
     endpointBinding.Elements.Add(messageEncoding);
     endpointBinding.Elements.Add(transport);

     return endpointBinding;
}&lt;/pre&gt;
&lt;br /&gt;
To use the above method, you can wire it up like this.&lt;br /&gt;
&lt;pre class="csharp" name="code"&gt; var endpoint = new EndpointAddress("http://CrmServerName/CrmOrgName/XRMServices/2011/Organization.svc");

 var endpointBinding = GetServiceEndpointBinding("CustomBinding_IOrganizationService");

 var organizationService = new OrganizationServiceClient(endpointBinding, endpoint);

&lt;/pre&gt;
This is a by-product of my &lt;a href="http://www.kingswaysoft.com/products/ssis-integration-toolkit-for-microsoft-dynamics-crm" target="_blank"&gt;SSIS Integration Toolkit&lt;/a&gt; development effort. As you may or may not appreciate, I took me quite some hours to get to the point that the code works for CRM on-premise deployment.&lt;br /&gt;
&lt;br /&gt;
It should be noted that the above snippet works only for CRM on-premise deployment. CRM online or CRM federated deployments have vastly different WCF bindings from on-premise, which require quite some extra effort in order to be able to connect successfully.&lt;br /&gt;
&lt;br /&gt;
Considering the majority of CRM installation is on-premise deployment, I hope this post helps some people in the community who have the same needs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5472436831307966815-8974314382231995305?l=danielcai.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/F9LdfGX3EJogzXMqaBXq2OfjhNM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F9LdfGX3EJogzXMqaBXq2OfjhNM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/F9LdfGX3EJogzXMqaBXq2OfjhNM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F9LdfGX3EJogzXMqaBXq2OfjhNM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DanielCai/~4/tw527eON5GI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/8974314382231995305/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://danielcai.blogspot.com/2012/01/config-less-wcf-service-endpoint.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/8974314382231995305?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/8974314382231995305?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DanielCai/~3/tw527eON5GI/config-less-wcf-service-endpoint.html" title="Config-less WCF Service Endpoint Binding for CRM 2011 On-Premise" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://danielcai.blogspot.com/2012/01/config-less-wcf-service-endpoint.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEFRnozfSp7ImA9WhRUGU0.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815.post-4430384636746308080</id><published>2012-01-20T18:09:00.000-07:00</published><updated>2012-01-29T23:06:57.485-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-29T23:06:57.485-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SSIS" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM 2011" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM 4" /><category scheme="http://www.blogger.com/atom/ns#" term="Data Integration" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM Data Management" /><title>Introducing SSIS Integration Toolkit for Microsoft Dynamics CRM</title><content type="html">Today, I am happy to announce the availability of SSIS Integration Toolkit for Microsoft Dynamics CRM, an easy-to-use and cost-effective data integration library for Microsoft Dynamics CRM and Microsoft SQL Server Integration Services (SSIS).&lt;br /&gt;
&lt;br /&gt;
First of all, this is a commercial offering, which we hope to bring a better solution to the market that can make your data integration job easier.&lt;br /&gt;
&lt;br /&gt;
The toolkit is a set of SSIS adapters that allows you to read data from Microsoft Dynamics CRM server, or write data to it.&lt;br /&gt;
&lt;br /&gt;
Among all the goodnesses, here are some highlighted features that you might be interested.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Native CRM 2011 SOAP interface support&lt;/li&gt;
&lt;li&gt;Support for Microsoft Dynamics CRM 2011 and 4.0&lt;/li&gt;
&lt;li&gt;Support for On-premise, IFD (federated) and Online deployments&lt;/li&gt;
&lt;li&gt;Support for CRM Entity or FetchXML query as data source in CRM source component&lt;/li&gt;
&lt;li&gt;Support for Create/Update/Delete/Upsert actions in CRM destination component. When Upsert action is used, you have three matching options to choose to identify whether it is an existing record in CRM for &lt;b&gt;update&lt;/b&gt;, or it's something not in the system that the component should create for you (&lt;b&gt;insert&lt;/b&gt;). The three options include a combination of manually selected fields, CRM primary key, or CRM duplicate detection&lt;/li&gt;
&lt;li&gt;One-click to toggle whether you want all or none of fields from a CRM entity in source component, which makes you more productive when selecting the only necessary fields to read data from CRM&lt;/li&gt;
&lt;li&gt;Automatic mapping to the CRM fields in the destination component by matching the names from upstream components&lt;/li&gt;
&lt;li&gt;You can set a picklist/optionset field value by either its integer value or its user friendly label&lt;/li&gt;
&lt;li&gt;Native support of CRM many-to-many relationship to associate or disassociate CRM records in CRM destination component by using Create or Delete action&lt;/li&gt;
&lt;/ul&gt;
Here are some more details about the component along with some screen shots.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Overview&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
SSIS Integration Toolkit for Microsoft Dynamics CRM provides a cost-effective solution that helps integrate Microsoft Dynamics CRM with other data sources or applications.&lt;br /&gt;
&lt;br /&gt;
SSIS Integration Toolkit takes advantage of the flexibility and power of Microsoft SQL Server Integration Services (SSIS) platform, which made it possible to integrate with virtually any application or data source that you may need to work with.&lt;br /&gt;
&lt;br /&gt;
SSIS Integration Toolkit is extremely easy to use. It comes with the following three major components to help facilitate the integration development.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Microsoft Dynamics CRM Connection Manager&lt;/li&gt;
&lt;li&gt;Microsoft Dynamics CRM Source Component&lt;/li&gt;
&lt;li&gt;Microsoft Dynamics CRM Destination Component&lt;/li&gt;
&lt;/ul&gt;
The ultimate goal of the toolkit is to simplify the integration development work, so that you can spend more time focusing on resolving business issues. A data migration / integration development can be done as quickly as a few minutes, instead of weeks or months.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Microsoft Dynamics CRM Connection Manager&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Microsoft Dynamics CRM Connection Manager allows you to setup a connection in SSIS so that it can used by Microsoft Dynamics CRM Source Component to retrieve data from Microsoft Dynamics CRM Server, or Microsoft Dynamics CRM Destination Component to write data to Microsoft Dynamics CRM server.&lt;br /&gt;
&lt;br /&gt;
The connection manager offers the capability to connect to a Microsoft Dynamics CRM server which can be either version 2011 (including CRM Online) or 4.0. It supports both CRM 2011 SOAP endpoint and CRM SOAP 2007 Web Service interface.&lt;br /&gt;
&lt;img alt="Microsoft Dynamics CRM Connection Manager (TataSolutions SSIS Integration Toolkit)" src="http://kingswaysoft.com/Frontend/Images/products/ssis-integrationtoolkit/CRM Connection Manager.png" /&gt;&lt;br /&gt;
&lt;br /&gt;
CRM Connection Manager allows you to choose one of the following authentications based on how your CRM server is deployed or managed.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Active Directory (On-Premise)&lt;/li&gt;
&lt;li&gt;Federated (On-Premise, Partner-hosted or Online Federation)&lt;/li&gt;
&lt;li&gt;LiveId (CRM Online)&lt;/li&gt;
&lt;/ul&gt;
&lt;img alt="CRM Connection Manager - Authentication Type" src="http://kingswaysoft.com/Frontend/Images/products/ssis-integrationtoolkit/CRM Connection Manager - Authentication Type.png" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Microsoft Dynamics CRM Source Component&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
Microsoft Dynamics CRM source component is a source component that you can use in SSIS data flow tasks, which allows you to read data from Microsoft Dynamics CRM Server.&lt;br /&gt;
&lt;br /&gt;
Using Microsoft Dynamics CRM source component, you can pick a CRM entity to read data from, after a CRM connection has been chosen.&lt;br /&gt;
&lt;img alt="CRM Source Component - Entity.png" src="http://kingswaysoft.com/Frontend/Images/products/ssis-integrationtoolkit/CRM%20Source%20Component%20-%20Entity.png" /&gt;&lt;br /&gt;
&lt;br /&gt;
Microsoft Dynamics CRM source component also supports reading data from CRM server through using FetchXml queries.&lt;br /&gt;
&lt;img alt="CRM Source Component - FetchXml.png" src="http://kingswaysoft.com/Frontend/Images/products/ssis-integrationtoolkit/CRM%20Source%20Component%20-%20FetchXml.png" /&gt;&lt;br /&gt;
&lt;br /&gt;
When FetchXML option is used as the Source Type, CRM source component can intelligently identify all fields and corresponding metadata including the fields from linked entities.&lt;br /&gt;
&lt;img alt="CRM Source Component - FetchXml Columns" src="http://kingswaysoft.com/Frontend/Images/products/ssis-integrationtoolkit/CRM%20Source%20Component%20-%20FetchXml%20Columns.png" /&gt;&lt;br /&gt;
&lt;br /&gt;
When Entity option is used as the Source Type, Microsoft Dynamics CRM Source Component allows you to select the CRM fields that you want to obtain data, which makes it easy when you have a large number of fields in CRM system, but you only need a small number of them to be used in the downstream pipeline components.&lt;br /&gt;
&lt;img alt="CRM Source Component - Choosing CRM Fields" src="http://kingswaysoft.com/Frontend/Images/products/ssis-integrationtoolkit/CRM%20Source%20Component%20-%20Choosing%20CRM%20Fields.png" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Microsoft Dynamics CRM Destination Component&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Microsoft Dynamics CRM destination component is a destination component that you can use in SSIS data flow tasks, so that you can write data to Microsoft Dynamics CRM Server.&lt;br /&gt;
Using Microsoft Dynamics CRM destination component, you can choose a CRM entity to write data to, and the action of such operation, which could be Create, Update, Delete or Upsert. &lt;br /&gt;
&lt;img alt="CRM Destination Component" src="http://kingswaysoft.com/Frontend/Images/products/ssis-integrationtoolkit/CRM%20Destination%20Component.png" /&gt;&lt;br /&gt;
&lt;br /&gt;
CRM Destination Component can be smart enough to automatically map all available input columns from upstream components to corresponding CRM fields based on their names, and it also allows to change such mapping using a dropdown list.&lt;br /&gt;
&lt;img alt="CRM Destination Component - Column Mapping" src="http://kingswaysoft.com/Frontend/Images/products/ssis-integrationtoolkit/CRM%20Destination%20Component%20-%20Column%20Mapping.png" /&gt;&lt;br /&gt;
&lt;br /&gt;
CRM destination component supports CRM many-to-many relationship entities, in which case, you can use Create action to create associations, use Delete action to disassociate them.&lt;br /&gt;
&lt;br /&gt;
CRM destination component supports upsert action, in which case, the component will first try to check if the provided CRM record exists in CRM system, the component will only create a new record if the matching record doesn't exist. If the component has identified any existing records based on the matching criteria provided, it will update the matching records.&lt;br /&gt;
&lt;br /&gt;
CRM destination component's upsert action can use the following three matching criteria.&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Primary Key&lt;/li&gt;
&lt;li&gt;CRM Duplicate Detection&lt;/li&gt;
&lt;li&gt;Manually Specified Fields&lt;/li&gt;
&lt;/ol&gt;
&lt;img alt="CRM Destination Component - Upsert Action" src="http://kingswaysoft.com/Frontend/Images/products/ssis-integrationtoolkit/CRM%20Destination%20Component%20-%20Upsert%20Action.png" /&gt;&lt;br /&gt;
&lt;br /&gt;
For Create and Update action, CRM destination component allows you to choose "Enable CRM Duplication Detection" option.&lt;br /&gt;
&lt;br /&gt;
When writing data to Microsoft Dynamics CRM, dealing with picklist / optionset imposes quite some challenges since CRM can only take integer numbers for them. Microsoft Dynamics CRM destination component has made this significantly easy, for any picklist  / optionset fields (including statecode and statuscode fields), you can use either internal integer values, or their string values (user localized labels).&lt;br /&gt;
&lt;br /&gt;
&lt;b style="font-size: x-large;"&gt;That's All&lt;/b&gt;&lt;br /&gt;
For more details about the offering, please proceed to my company's website at &lt;a href="http://www.kingswaysoft.com/"&gt;http://www.kingswaysoft.com&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Please give it a try, and let us know how it goes.&lt;br /&gt;
&lt;br /&gt;
A free trial license can be requested after the installation using the accompanied License Manager program.&lt;br /&gt;
&lt;br /&gt;
Hope you like this offering.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5472436831307966815-4430384636746308080?l=danielcai.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/TPeO4ch5pG_byZjA_DSvAbgzmSo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TPeO4ch5pG_byZjA_DSvAbgzmSo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/TPeO4ch5pG_byZjA_DSvAbgzmSo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TPeO4ch5pG_byZjA_DSvAbgzmSo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DanielCai/~4/BjAuH8yK1zw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/4430384636746308080/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://danielcai.blogspot.com/2012/01/introducing-ssis-integration-toolkit.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/4430384636746308080?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/4430384636746308080?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DanielCai/~3/BjAuH8yK1zw/introducing-ssis-integration-toolkit.html" title="Introducing SSIS Integration Toolkit for Microsoft Dynamics CRM" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><thr:total>5</thr:total><feedburner:origLink>http://danielcai.blogspot.com/2012/01/introducing-ssis-integration-toolkit.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEANRXY7eCp7ImA9WhRWFEo.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815.post-2616704627006752542</id><published>2012-01-01T19:24:00.000-07:00</published><updated>2012-01-01T19:53:14.800-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-01T19:53:14.800-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="CRM Online Trial" /><category scheme="http://www.blogger.com/atom/ns#" term="CRM Online" /><category scheme="http://www.blogger.com/atom/ns#" term="Nonsense" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM 2011" /><title>Pass the Captcha Challenge of CRM Online Trial Request</title><content type="html">This is a post that may not be technically interesting, but I thought I should share it in case you run into the same problem.&lt;br /&gt;
&lt;br /&gt;
Yesterday, I was trying to sign up for a CRM online trial account, I was stunned to realize that I couldn't pass the eye test in the second step of the trial request.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-86D5MNpO00E/TwERBuCYySI/AAAAAAAAAlo/IwBITBqguuM/s1600/CRM+Online+Trial+Request.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://3.bp.blogspot.com/-86D5MNpO00E/TwERBuCYySI/AAAAAAAAAlo/IwBITBqguuM/s400/CRM+Online+Trial+Request.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
I failed the eye exam miserably&amp;nbsp;after many attempts including using the audio option.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
The system I was using has an IE9 installed.&amp;nbsp;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
I realized today this could possibly be a problem that happens to unique system environment, since it doesn't seem to be an often reported issue. The only report of this problem is &lt;a href="http://social.microsoft.com/Forums/en/crm/thread/0cd3a981-9736-4ef8-bca3-d00c960396a3"&gt;a post on CRM forum&lt;/a&gt;, but nobody has ever responded since Nov 20, &lt;b&gt;2010&lt;/b&gt;. Based on the above speculation, I tried the same process on a computer with &lt;b&gt;IE8&lt;/b&gt; installed, and I was able to pass the eye test with my first try.&amp;nbsp;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
I was relieved to realize that I was not visually blind or disabled, which I have been questioning myself ever since. PHEW!&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
I cannot explain the reason behind the problem, I have logged this as &lt;a href="https://connect.microsoft.com/dynamicssuggestions/feedback/details/716221/" target="_blank"&gt;an issue on Microsoft connection site&lt;/a&gt;. If you get stuck with this issue, you may want to try a different system with an older version of IE installed.&amp;nbsp;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Hope this helps.&amp;nbsp;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Happy New Year, everyone!&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5472436831307966815-2616704627006752542?l=danielcai.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CU-xqxdCwNTU_M7Z--8y8F_9HX8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CU-xqxdCwNTU_M7Z--8y8F_9HX8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CU-xqxdCwNTU_M7Z--8y8F_9HX8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CU-xqxdCwNTU_M7Z--8y8F_9HX8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DanielCai/~4/pgkrYlqPY04" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/2616704627006752542/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://danielcai.blogspot.com/2012/01/pass-captcha-challenge-of-crm-online.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/2616704627006752542?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/2616704627006752542?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DanielCai/~3/pgkrYlqPY04/pass-captcha-challenge-of-crm-online.html" title="Pass the Captcha Challenge of CRM Online Trial Request" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-86D5MNpO00E/TwERBuCYySI/AAAAAAAAAlo/IwBITBqguuM/s72-c/CRM+Online+Trial+Request.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://danielcai.blogspot.com/2012/01/pass-captcha-challenge-of-crm-online.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEMSX84fCp7ImA9WhRXEEQ.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815.post-7672714940598694100</id><published>2011-12-16T16:26:00.000-07:00</published><updated>2011-12-16T20:31:28.134-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-16T20:31:28.134-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM Developer Toolkit" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM 2011" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM Workflow" /><title>MSCRM 2011: Two Errors When Using CRM Developer Toolkit to Deploy Workflow Library</title><content type="html">While I was trying to develop a custom workflow library using CRM developer toolkit, I run into the following two errors (actually one at a time, but I am trying to keep the long story short). 
&lt;br /&gt;
&lt;pre&gt;Error registering plugins and/or workflows. A validation error occurred. The value of 'isolationmode' on record of type 'pluginassembly' is outside the valid range.&lt;/pre&gt;
&lt;pre&gt;Error registering plugins and/or workflows. Description name must be specified
Parameter name: description
&lt;/pre&gt;
The solution is rather simple. What you need to do is to open RegisterFile.crmregister file (which is essentially an XML file) under CrmPackage project, and make some changes to the file in order to provide enough information for the deployment.&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Locate the &lt;b&gt;Solution &lt;/b&gt;line of the workflow library in the XML file, add an XML attribute called &lt;b&gt;IsolationMode&lt;/b&gt;, and give it a value of "None", so the XML attribute will be IsolationMode="None".&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Located WorkflowType line, and add an XML attribute called &lt;b&gt;Description&lt;/b&gt;,&amp;nbsp;and give it a value which is meaningful.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
The following is the screen shot of the file before the change.&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/-m-LzMODa0qw/TuvPo20QLQI/AAAAAAAAAkM/MEd3RPiN3WI/s1600/RegisterFile.crmregister.png" imageanchor="1"&gt;&lt;img border="0" height="150" src="http://1.bp.blogspot.com/-m-LzMODa0qw/TuvPo20QLQI/AAAAAAAAAkM/MEd3RPiN3WI/s640/RegisterFile.crmregister.png" width="640" /&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/-m-LzMODa0qw/TuvPo20QLQI/AAAAAAAAAkM/MEd3RPiN3WI/s1600/RegisterFile.crmregister.png" imageanchor="1"&gt;&lt;br /&gt;&lt;/a&gt;
After the fixes, the file should look like this.

&lt;a href="http://3.bp.blogspot.com/-A9h1Ldc_Hlo/TuvTR01DT7I/AAAAAAAAAkc/89unybYOTG8/s1600/RegisterFile.crmregister+after+Change.png" imageanchor="1"&gt;&lt;img border="0" height="158" src="http://3.bp.blogspot.com/-A9h1Ldc_Hlo/TuvTR01DT7I/AAAAAAAAAkc/89unybYOTG8/s640/RegisterFile.crmregister+after+Change.png" width="640" /&gt;&lt;/a&gt;
&lt;br /&gt;
After you have made the above changes, you should be able to deploy your CRM workflow library in Visual Studio without problem.&lt;br /&gt;
Hope this helps if you ever run into the same issue.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5472436831307966815-7672714940598694100?l=danielcai.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Zc9tGheOzy6vyxRMkg13RMH1f3A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Zc9tGheOzy6vyxRMkg13RMH1f3A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Zc9tGheOzy6vyxRMkg13RMH1f3A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Zc9tGheOzy6vyxRMkg13RMH1f3A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DanielCai/~4/5tMHylC5XXw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/7672714940598694100/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://danielcai.blogspot.com/2011/12/two-errors-when-using-crm-developer.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/7672714940598694100?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/7672714940598694100?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DanielCai/~3/5tMHylC5XXw/two-errors-when-using-crm-developer.html" title="MSCRM 2011: Two Errors When Using CRM Developer Toolkit to Deploy Workflow Library" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-m-LzMODa0qw/TuvPo20QLQI/AAAAAAAAAkM/MEd3RPiN3WI/s72-c/RegisterFile.crmregister.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://danielcai.blogspot.com/2011/12/two-errors-when-using-crm-developer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAFRXo4fyp7ImA9WhRRGU4.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815.post-3688446665025255777</id><published>2011-12-02T14:33:00.001-07:00</published><updated>2011-12-03T10:35:14.437-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-03T10:35:14.437-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM Developer Toolkit" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM Ribbon Customization" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM Customization" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM 2011" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM Client Script" /><title>MSCRM 2011: Filtered Lookup for "Add Existing..." Button of a CRM N:N View</title><content type="html">I have &lt;a href="http://danielcai.blogspot.com/2011/02/mscrm-40-filtered-lookup-for-existing.html"&gt;previously documented&lt;/a&gt; a way to add lookup filtering capability to MSCRM4 "Add Existing..." button in a CRM N:N view. There was &lt;a href="http://danielcai.blogspot.com/2011/02/mscrm-40-filtered-lookup-for-existing.html?showComment=1322822686806"&gt;a question&lt;/a&gt; in the blog post today about whether this is possible in CRM 2011. So here is this blog post that will walk you through the implementation process. &lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;












Prerequisites&lt;/h3&gt;
To go through the customizations in this blog post, you need to understand how CRM ribbon customization works, and also you need to know how to work with CRM Web Resources and solution export/import functionalities. It should also be noted that this blog post uses CRM Developer Toolkit. In case you are not familiar with the toolkit, you can have a look at &lt;a href="http://danielcai.blogspot.com/2011/07/mscrm-2011-developer-toolkit.html"&gt;my another blog post&lt;/a&gt; that illustrates some typical development scenarios which you might find useful. This blog post might be able to demonstrate you how the toolkit can help improve your productivity when developing CRM scripts.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;













Business Scenario&lt;/h3&gt;
Let's say we have a custom entity called Project, which has a many-to-many relationship to CRM account entity. In Project entity form, I added a sub-grid which points to account entity, as shown below.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-Oeeldmc4JhY/TtmBKUrL4LI/AAAAAAAAAj4/fAU7vdGp3LQ/s1600/Project+-+Account+sub+grid.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="346" src="http://2.bp.blogspot.com/-Oeeldmc4JhY/TtmBKUrL4LI/AAAAAAAAAj4/fAU7vdGp3LQ/s640/Project+-+Account+sub+grid.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
In the above screen, we have a Add Existing Button when the sub-grid is selected. When the button is clicked, we will be prompted the lookup entity's default Lookup View, as shown below.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-dvoP4-_C5SY/TtlF8J8FUYI/AAAAAAAAAio/97u48jrD_mk/s1600/Default+Account+Lookup.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="510" src="http://4.bp.blogspot.com/-dvoP4-_C5SY/TtlF8J8FUYI/AAAAAAAAAio/97u48jrD_mk/s640/Default+Account+Lookup.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
What we are trying to achieve is to add some filtering capability to the "Add Existing ..." button so CRM only shows the account records that we are interested.&lt;br /&gt;
&lt;br /&gt;
Let's get started.&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: 24px; font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: 24px; font-weight: bold;"&gt;Steps&lt;/span&gt;&lt;br /&gt;
&lt;h4&gt;















Step 1: Create CRM JavaScript Web Resources&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;In Visual Studio 2010, create a CRM project. (Please refer to &lt;a href="http://danielcai.blogspot.com/2011/07/mscrm-2011-developer-toolkit.html"&gt;the blog post that I just mentioned&lt;/a&gt; for detailed instructions about how to do this) &lt;/li&gt;
&lt;li&gt;In CrmPackage project, right-click WebResouces –&amp;gt; Script (JScript), and choose "Add" –&amp;gt; "New Item" to create a new JavaScript file. Let's call the file Project.js.      &lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-66Uo84GldbU/TtlHiVb8FDI/AAAAAAAAAiw/0OUXiJ_dsbQ/s1600/Add+new+JS.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="224" src="http://4.bp.blogspot.com/-66Uo84GldbU/TtlHiVb8FDI/AAAAAAAAAiw/0OUXiJ_dsbQ/s640/Add+new+JS.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-pLUTM8sGxH4/TtlHxJ5NL_I/AAAAAAAAAi4/kN8AD7X69yw/s1600/Add+CRM+JavaScript+File.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="360" src="http://3.bp.blogspot.com/-pLUTM8sGxH4/TtlHxJ5NL_I/AAAAAAAAAi4/kN8AD7X69yw/s640/Add+CRM+JavaScript+File.png" width="640" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Add the following script to the JS file (I borrowed the fetchXml and layoutXml combination from SDK document).      &lt;br /&gt;      &lt;pre class="javascript" name="code"&gt;function addExistingFromSubGridCustom(params) {

    var relName = params.gridControl.getParameter("relName"),
        roleOrd = params.gridControl.getParameter("roleOrd"),
        viewId = "{00000000-0000-0000-0000-000000000001}"; // a dummy view ID
    
    var customView = {
        fetchXml: params.fetchXml,
        id: viewId, 
        layoutXml: params.layoutXml,
        name: "Filtered Lookup View",
        recordType: params.gridTypeCode,
        Type: 0
    };

    var lookupItems = LookupObjects(null, "multi", params.gridTypeCode, 0, null, "", null, null, null, null, null, null, viewId, [customView]);
    if (lookupItems &amp;amp;&amp;amp; lookupItems.items.length &amp;gt; 0) {
        AssociateObjects(crmFormSubmit.crmFormSubmitObjectType.value, crmFormSubmit.crmFormSubmitId.value, params.gridTypeCode, lookupItems, IsNull(roleOrd) || roleOrd == 2, "", relName);
    }
}

function addExistingFromSubGridAccount(gridTypeCode, gridControl) {
    addExistingFromSubGridCustom({
        gridTypeCode: gridTypeCode,
        gridControl: gridControl,
        fetchXml: "&amp;lt;fetch version='1.0' " +
                       "output-format='xml-platform' " +
                       "mapping='logical'&amp;gt;" +
                   "&amp;lt;entity name='account'&amp;gt;" +
                   "&amp;lt;attribute name='name' /&amp;gt;" +
                   "&amp;lt;attribute name='address1_city' /&amp;gt;" +
                   "&amp;lt;order attribute='name' " +
                           "descending='false' /&amp;gt;" +
                   "&amp;lt;filter type='and'&amp;gt;" +
                       "&amp;lt;condition attribute='ownerid' " +
                                   "operator='eq-userid' /&amp;gt;" +
                       "&amp;lt;condition attribute='statecode' " +
                                   "operator='eq' " +
                                   "value='0' /&amp;gt;" +
                   "&amp;lt;/filter&amp;gt;" +
                   "&amp;lt;attribute name='primarycontactid' /&amp;gt;" +
                   "&amp;lt;attribute name='telephone1' /&amp;gt;" +
                   "&amp;lt;attribute name='accountid' /&amp;gt;" +
                   "&amp;lt;link-entity alias='accountprimarycontactidcontactcontactid' " +
                                   "name='contact' " +
                                   "from='contactid' " +
                                   "to='primarycontactid' " +
                                   "link-type='outer' " +
                                   "visible='false'&amp;gt;" +
                       "&amp;lt;attribute name='emailaddress1' /&amp;gt;" +
                   "&amp;lt;/link-entity&amp;gt;" +
                   "&amp;lt;/entity&amp;gt;" +
               "&amp;lt;/fetch&amp;gt;",
        layoutXml: "&amp;lt;grid name='resultset' " +
                             "object='1' " +
                             "jump='name' " +
                             "select='1' " +
                             "icon='1' " +
                             "preview='1'&amp;gt;" +
                         "&amp;lt;row name='result' " +
                              "id='accountid'&amp;gt;" +
                           "&amp;lt;cell name='name' " +
                                 "width='300' /&amp;gt;" +
                           "&amp;lt;cell name='telephone1' " +
                                 "width='100' /&amp;gt;" +
                           "&amp;lt;cell name='address1_city' " +
                                 "width='100' /&amp;gt;" +
                           "&amp;lt;cell name='primarycontactid' " +
                                 "width='150' /&amp;gt;" +
                           "&amp;lt;cell name='accountprimarycontactidcontactcontactid.emailaddress1' " +
                                 "width='150' " +
                                 "disableSorting='1' /&amp;gt;" +
                         "&amp;lt;/row&amp;gt;" +
                       "&amp;lt;/grid&amp;gt;"

    });
}&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;After the script has been saved, you can right click CrmPackage project in Visual Studio Solution Explorer window, and choose "Deploy" to deploy the script to CRM Server. In our case, we will have a Web Resource in CRM called new_Project.&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-k-92QZySG4I/TtlOes5W_HI/AAAAAAAAAjo/osGE0Fti9MA/s1600/Deploy+CRM+Scripts.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-k-92QZySG4I/TtlOes5W_HI/AAAAAAAAAjo/osGE0Fti9MA/s1600/Deploy+CRM+Scripts.png" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;















Step 2: Customize CRM Ribbon to Hook up the JS Function&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;In CRM, create a new solution, and add account entity (the entity in the sub-grid) to the solution.&lt;/li&gt;
&lt;li&gt;Export the solution to a .zip file, and extract the file somewhere in your local file system.&lt;/li&gt;
&lt;li&gt;Open the customizations.xml from the extracted file, and locate RibbonDiffXml section in the file, under the account entity. &lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-20UWAl_krSc/TtlI00q-ZoI/AAAAAAAAAjI/7Id6Uol8aCI/s1600/Exported+Customization.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="218" src="http://3.bp.blogspot.com/-20UWAl_krSc/TtlI00q-ZoI/AAAAAAAAAjI/7Id6Uol8aCI/s400/Exported+Customization.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre class="xml" name="code"&gt;      &amp;lt;RibbonDiffXml&amp;gt;
        &amp;lt;CustomActions /&amp;gt;
        &amp;lt;Templates&amp;gt;
          &amp;lt;RibbonTemplates Id="Mscrm.Templates"&amp;gt;&amp;lt;/RibbonTemplates&amp;gt;
        &amp;lt;/Templates&amp;gt;
        &amp;lt;CommandDefinitions /&amp;gt;
        &amp;lt;RuleDefinitions&amp;gt;
          &amp;lt;TabDisplayRules /&amp;gt;
          &amp;lt;DisplayRules /&amp;gt;
          &amp;lt;EnableRules /&amp;gt;
        &amp;lt;/RuleDefinitions&amp;gt;
        &amp;lt;LocLabels /&amp;gt;
      &amp;lt;/RibbonDiffXml&amp;gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;What we need to change is the &lt;b&gt;CommandDefinitions &lt;/b&gt;part, which we can get the template code from applicationribbon.xml file (or &amp;lt;entityname&amp;gt;ribbon.xml if it's a system entity) in CRM SDK's resources\exportedribbonxml folder.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;In applicationribbon.xml file&amp;nbsp;(or &amp;lt;entityname&amp;gt;ribbon.xml), locate &amp;lt;CommandDefinition Id="Mscrm.AddExistingRecordFromSubGridAssociated"&amp;gt; line (You can search by addExistingFromSubGridAssociated to get there). &lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-klBhHLy8O90/TtlIUBR3ZRI/AAAAAAAAAjA/H_yz75VtvB0/s1600/ApplicationRibbon.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="227" src="http://3.bp.blogspot.com/-klBhHLy8O90/TtlIUBR3ZRI/AAAAAAAAAjA/H_yz75VtvB0/s640/ApplicationRibbon.png" width="640" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Copy the xml content under &amp;lt;CommandDefinition Id="Mscrm.AddExistingRecordFromSubGridAssociated"&amp;gt; (including itself and its closing tag as well) to the &lt;b&gt;customizations.xml&lt;/b&gt; file, so it should look like this. &lt;br /&gt;    &lt;a href="http://2.bp.blogspot.com/-G6-ziXOE5eA/TtlJN8SmrAI/AAAAAAAAAjQ/eADioKaSKpI/s1600/Inserted+Customizations+File.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="235" src="http://2.bp.blogspot.com/-G6-ziXOE5eA/TtlJN8SmrAI/AAAAAAAAAjQ/eADioKaSKpI/s640/Inserted+Customizations+File.png" width="640" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Modify the JavaScriptFunction part to point to the custom JS function that we previously developed, so it should be something like this: &lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-XcNvIDKbeck/TtlJpecMb5I/AAAAAAAAAjY/fbqMkjuwr_U/s1600/Final+Customizations.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="325" src="http://4.bp.blogspot.com/-XcNvIDKbeck/TtlJpecMb5I/AAAAAAAAAjY/fbqMkjuwr_U/s640/Final+Customizations.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;    The following is the final customization xml. &lt;br /&gt;&lt;pre class="xml" name="code"&gt;  &amp;lt;CommandDefinition Id="Mscrm.AddExistingRecordFromSubGridAssociated"&amp;gt;
    &amp;lt;EnableRules&amp;gt;
      &amp;lt;EnableRule Id="Mscrm.AppendPrimary" /&amp;gt;
      &amp;lt;EnableRule Id="Mscrm.AppendToPrimary" /&amp;gt;
      &amp;lt;EnableRule Id="Mscrm.EntityFormIsEnabled" /&amp;gt;
    &amp;lt;/EnableRules&amp;gt;
    &amp;lt;DisplayRules&amp;gt;
      &amp;lt;DisplayRule Id="Mscrm.AddExisting" /&amp;gt;
      &amp;lt;DisplayRule Id="Mscrm.ShowForManyToManyGrids" /&amp;gt;
      &amp;lt;DisplayRule Id="Mscrm.AppendPrimary" /&amp;gt;
      &amp;lt;DisplayRule Id="Mscrm.AppendToPrimary" /&amp;gt;
      &amp;lt;DisplayRule Id="Mscrm.AppendSelected" /&amp;gt;
      &amp;lt;DisplayRule Id="Mscrm.AppendToSelected" /&amp;gt;
      &amp;lt;DisplayRule Id="Mscrm.CanWriteSelected" /&amp;gt;
    &amp;lt;/DisplayRules&amp;gt;
    &amp;lt;Actions&amp;gt;
      &amp;lt;JavaScriptFunction FunctionName="addExistingFromSubGridAccount" Library="$webresource:new_Project"&amp;gt;
        &amp;lt;CrmParameter Value="SelectedEntityTypeCode" /&amp;gt;
        &amp;lt;CrmParameter Value="SelectedControl" /&amp;gt;
      &amp;lt;/JavaScriptFunction&amp;gt;
    &amp;lt;/Actions&amp;gt;
  &amp;lt;/CommandDefinition&amp;gt;&lt;/pre&gt;
Note that your JS webresource name could be in different format. You can find out that by openning the web resource in CRM, which tells you the path to the web resource file.&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;Save the file, and zip it back to the original solution export file.&lt;/li&gt;
&lt;li&gt;Import the solution file, and publish changes. If everything goes OK, you will see a filtered lookup like the following. &lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-eY6ZwE_GrRk/Ttl_aYtwE2I/AAAAAAAAAjw/lb3g12Udkus/s1600/Final+Filtered+Lookup.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/-eY6ZwE_GrRk/Ttl_aYtwE2I/AAAAAAAAAjw/lb3g12Udkus/s640/Final+Filtered+Lookup.png" width="640" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Final Notes&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;This is an unsupported customization, since we are using undocumented CRM built-in JS functions.&lt;/li&gt;
&lt;li&gt;addExistingFromSubGridCustom function is a re-usable function which is what you really need. addExistingFromSubGridAccount function is the actual one that's going to be called in your ribbon command button's customization.&lt;/li&gt;
&lt;li&gt;The filter that I have implemented didn't use any context information (such a field value) on the CRM form, you can easily add this in the function when constructing the fetchXml string, if desired.&lt;/li&gt;
&lt;li&gt;The above change will apply to all account subgrid regardless of the hosting entity. It should be possible to handle it differently by getting some context information from the form, or probably pass some extra information to the function.&lt;/li&gt;
&lt;li&gt;The code didn't have much comments, but hopefully the sample has provided enough information for you to start with.&lt;/li&gt;
&lt;li&gt;[&lt;strong&gt;Advertisement&lt;/strong&gt;] If you have any CRM development needs, we are in the field offering full-cycle CRM development and consulting service. You may contact us by dropping an email at &lt;strong&gt;contact&lt;/strong&gt; at &lt;strong&gt;tatasolutions.com&lt;/strong&gt;, we will be happy to provide free assessment for any of your CRM development needs. &lt;/li&gt;
&lt;/ol&gt;
By the way, an off-topic note, this blog has just reached 100K page views today. It took &lt;a href="http://danielcai.blogspot.com/2011/04/reached-50000-page-views.html"&gt;almost two years&lt;/a&gt; to reach 50K pageviews last time, but it only takes a few months to reach another one, although I don't currently produce as many posts as I did in the beginning of my blogging adventure. Good to see the growth of the CRM community.&lt;br /&gt;
&lt;br /&gt;
Hope this helps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5472436831307966815-3688446665025255777?l=danielcai.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/o0BlRsjpvgFsbu3bn9dmEfRw1eA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o0BlRsjpvgFsbu3bn9dmEfRw1eA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/o0BlRsjpvgFsbu3bn9dmEfRw1eA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o0BlRsjpvgFsbu3bn9dmEfRw1eA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DanielCai/~4/1sc5CLodbHw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/3688446665025255777/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://danielcai.blogspot.com/2011/12/filtered-lookup-for-existing-button-of.html#comment-form" title="11 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/3688446665025255777?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/3688446665025255777?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DanielCai/~3/1sc5CLodbHw/filtered-lookup-for-existing-button-of.html" title="MSCRM 2011: Filtered Lookup for &amp;quot;Add Existing...&amp;quot; Button of a CRM N:N View" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-Oeeldmc4JhY/TtmBKUrL4LI/AAAAAAAAAj4/fAU7vdGp3LQ/s72-c/Project+-+Account+sub+grid.png" height="72" width="72" /><thr:total>11</thr:total><feedburner:origLink>http://danielcai.blogspot.com/2011/12/filtered-lookup-for-existing-button-of.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4DSH4zeyp7ImA9WhRTFEk.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815.post-7541399954497618423</id><published>2011-11-03T09:49:00.001-06:00</published><updated>2011-11-04T17:06:19.083-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-04T17:06:19.083-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM Ribbon Customization" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM Customization" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM 2011" /><title>Add Visual Ribbon Editor to Your CRM Toolbox</title><content type="html">Working with CRM ribbon customization could be a very challenging job due to its complexity and the vast options that the CRM platform offers. &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/-v9T8foq6frw/TrMA9MdsZxI/AAAAAAAAAh4/c5FUvzhr3K8/s1600-h/Tools%252520Bag%25255B3%25255D.png"&gt;&lt;img align="left" alt="Tools Bag" border="0" height="150" src="https://lh4.googleusercontent.com/-v9T8foq6frw/TrMA9MdsZxI/AAAAAAAAAh4/c5FUvzhr3K8/s150/Tools%252520Bag%25255B3%25255D.png" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; float: left; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Tools Bag" width="150" /&gt;&lt;/a&gt;&lt;a href="http://erikpool.blogspot.com/"&gt;Erik Pool&lt;/a&gt; has recently released a tool called &lt;a href="http://crmvisualribbonedit.codeplex.com/"&gt;Visual Ribbon Editor&lt;/a&gt;, which I believe you can now add to your toolbox to make yourself a proud and productive CRM developer.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
Enough though I am not practically working on CRM customizations on a day-to-day basis at this moment, I can tell the tool is sophisticated enough to help you conduct your ribbon customization work in a productive way. &lt;br /&gt;
&lt;br /&gt;
Using the tool, you don't have to do all the wild guess about what you can do with your CRM ribbons. You can now instantly add, remove ribbon button and button groups, apply Display and Enabled rules based on your business requirements through its visual interface. &lt;br /&gt;
&lt;br /&gt;
The following is a screen shot that I have copied from Erik's &lt;a href="http://erikpool.blogspot.com/2011/10/new-crm-2011-ribbon-editing-tool.html"&gt;blog post&lt;/a&gt;. &lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/-YDz2Qa-qCOk/TrK4DZcT4fI/AAAAAAAAAhk/zjqgJw3d-Mc/s1600-h/CRM%252520Visual%252520Ribbon%252520Editor%25255B3%25255D.png"&gt;&lt;img alt="CRM Visual Ribbon Editor" border="0" height="449" src="http://lh4.ggpht.com/-5BIMHjIbO9k/TrK4EcaI0_I/AAAAAAAAAhs/nl1Z0Miv-V0/CRM%252520Visual%252520Ribbon%252520Editor_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="CRM Visual Ribbon Editor" width="644" /&gt;&lt;/a&gt;&lt;br /&gt;
Check out the tool, I believe this is the only CRM ribbon customization tool you will ever need. &lt;br /&gt;
&lt;br /&gt;
Hope this helps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5472436831307966815-7541399954497618423?l=danielcai.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fc9b_9e5qqtuFZ-uYVh7AM8V96w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fc9b_9e5qqtuFZ-uYVh7AM8V96w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/fc9b_9e5qqtuFZ-uYVh7AM8V96w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fc9b_9e5qqtuFZ-uYVh7AM8V96w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DanielCai/~4/SyNf9FLpnp4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/7541399954497618423/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://danielcai.blogspot.com/2011/11/add-visual-ribbon-editor-to-your-crm.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/7541399954497618423?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/7541399954497618423?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DanielCai/~3/SyNf9FLpnp4/add-visual-ribbon-editor-to-your-crm.html" title="Add Visual Ribbon Editor to Your CRM Toolbox" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh4.googleusercontent.com/-v9T8foq6frw/TrMA9MdsZxI/AAAAAAAAAh4/c5FUvzhr3K8/s72-c/Tools%252520Bag%25255B3%25255D.png" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://danielcai.blogspot.com/2011/11/add-visual-ribbon-editor-to-your-crm.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQHSH07eip7ImA9WhRTFU8.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815.post-1952686584173937374</id><published>2011-11-02T10:35:00.002-06:00</published><updated>2011-11-05T15:25:39.302-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-05T15:25:39.302-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM 2011" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM Whitepaper" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM Solution Framework" /><title>White Paper - CRM Solution Deployment Released</title><content type="html">Microsoft Dynamics CRM team has just released another white paper yesterday which covers some typical issues that you may encounter when developing, deploying CRM solutions, the whitepaper has also described some best practices that you can leverage when developing your solution components and promoting the changes across environments. &lt;br /&gt;
&lt;br /&gt;
The following is a brief list of the contents of the whitepaper.&lt;br /&gt;
&lt;br /&gt;
Preface&lt;br /&gt;
Introduction&lt;br /&gt;
Maintaining Test Environments   &lt;br /&gt;
&amp;nbsp; &amp;nbsp; Testing Microsoft Dynamics CRM 2011 On-Premises Deployments&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; Testing Microsoft Dynamics CRM Online Deployments     &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Managing Configuration&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Managing Data&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;Using Microsoft Dynamics CRM Online Trials&lt;br /&gt;
Managing Solution Component Dependencies     &lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;Addressing Execution Identity Issues&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;Plug-ins &lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;Workflows &lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;Addressing Workflow Reference Issues&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;Automating the Creation of Users, Teams, and Business Units&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;Creating Business Units and Teams &lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;Creating Users &lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;Automating the Creation of Queues&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;Preparing Configuration Data    &lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;Preparing Solution Reference Data&amp;nbsp; &lt;br /&gt;
Upgrading Solutions     &lt;br /&gt;
Managing Solution Conflicts&amp;nbsp; &lt;br /&gt;
Deploying Solutions&lt;br /&gt;
Conclusion&lt;br /&gt;
&lt;br /&gt;
The whitepaper can be downloaded from the Microsoft Download Center at the following link.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=232288"&gt;http://go.microsoft.com/fwlink/?LinkId=232288&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
The whitepaper has a lot of valuable information about CRM 2011 solution framework, it's an important guideline document that you should check out.&lt;br /&gt;
&lt;br /&gt;
It should be noted that CRM team has given the whitepaper an interesting name which is extremely long, but what has been discussed in the whitepaper is really about solution deployment.&lt;br /&gt;
&lt;br /&gt;
Hope this help.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5472436831307966815-1952686584173937374?l=danielcai.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LsvvBQX0600HcHOYtQ1ejKy1zMY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LsvvBQX0600HcHOYtQ1ejKy1zMY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LsvvBQX0600HcHOYtQ1ejKy1zMY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LsvvBQX0600HcHOYtQ1ejKy1zMY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DanielCai/~4/Ng1bY9ts6UM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/1952686584173937374/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://danielcai.blogspot.com/2011/11/white-paper-crm-solution-deployment.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/1952686584173937374?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/1952686584173937374?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DanielCai/~3/Ng1bY9ts6UM/white-paper-crm-solution-deployment.html" title="White Paper - CRM Solution Deployment Released" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://danielcai.blogspot.com/2011/11/white-paper-crm-solution-deployment.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4BRnk4eip7ImA9WhRTEkk.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815.post-4508158812081814856</id><published>2011-10-26T12:31:00.001-06:00</published><updated>2011-11-02T09:15:57.732-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-02T09:15:57.732-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM SDK" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM Developer Toolkit" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM 2011" /><title>CRM Developer Toolkit is Now  Officially v1.0</title><content type="html">Along with the latest version of &lt;a href="http://go.microsoft.com/fwlink/?LinkID=207027"&gt;CRM SDK&lt;/a&gt; (v5.0.7) released today, Microsoft Dynamics CRM team has released the first official version of CRM Developer Toolkit. &lt;br /&gt;
&lt;br /&gt;
After a rough 10 minutes play, I haven't noticed much difference from the beta version that was released about 3 months ago. But one nice thing is now we can use integrated authentication when connecting to CRM server. &lt;br /&gt;
&lt;b&gt;[UPDATE - Nov 2, 2011]&lt;/b&gt; According to CRM SDK team,one significant change from the beta developer toolkit is the XAML workflow activity project type.&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/-mHGz_T9yrmo/TqhSEzU85eI/AAAAAAAAAg8/ETGeHsA5ysQ/s1600-h/CRM%252520Developer%252520Toolkit%252520-%252520Connection%25255B8%25255D.png"&gt;&lt;img alt="CRM Developer Toolkit - Connection" border="0" height="499" src="http://lh6.ggpht.com/-pySPBYGQHN0/TqhSF0Cu8nI/AAAAAAAAAhE/9mur1emOkFg/CRM%252520Developer%252520Toolkit%252520-%252520Connection_thumb%25255B4%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="CRM Developer Toolkit - Connection" width="418" /&gt;&lt;/a&gt;&lt;br /&gt;
The toolkit is accompanied by a readme file, which you should check out. It described some common issues when working with the toolkit. Here are some of the issues that you may encounter and the workarounds that are currently available (Some typos were fixed from the original file). &lt;br /&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;strong&gt;Visual Basic .NET is not supported (131574)&lt;/strong&gt; &lt;/dt&gt;
&lt;dd&gt;The Developer Toolkit does not support VB.NET. &lt;br /&gt;
&lt;br /&gt;&lt;/dd&gt;&lt;dd&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;No upgrade path for projects created with the Microsoft Dynamics CRM 4.0 Developers Toolkit (121629)&lt;/strong&gt; &lt;/dt&gt;
&lt;dd&gt;The &lt;a href="http://code.msdn.microsoft.com/E2DevTkt"&gt;Microsoft Dynamics CRM Developer’s Toolkit for CRM 4.0&lt;/a&gt;, which provided a sample project and integration with Visual Studio, was released in April 2009 on MSDN Code Gallery. &lt;/dd&gt;&lt;dd&gt;&lt;/dd&gt;&lt;dd&gt;The Developer Toolkit for CRM 2011 has been completely re-written to support native Visual Studio development practices and project templates, to be less dependent on MSBuild, and to improve deployment support for new Microsoft Dynamics CRM development paradigms, including Microsoft Dynamics CRM Solutions and Web Resources. &lt;br /&gt;
&lt;br /&gt;&lt;/dd&gt;&lt;dd&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;Sporadic "Object Reference not set to an instance of an object" errors when using the CRM Explorer (138780)&lt;/strong&gt; &lt;/dt&gt;
&lt;dd&gt;&lt;strong&gt;Issue&lt;/strong&gt;: When using the CRM Explorer "Object Reference not set to an instance of an object" errors occur sporadically. &lt;/dd&gt;&lt;dd&gt;&lt;/dd&gt;&lt;dd&gt;&lt;strong&gt;Workaround&lt;/strong&gt;: If you encounter this error while performing an operation, refresh the organization tree and try the operation again. &lt;br /&gt;
&lt;br /&gt;&lt;/dd&gt;&lt;dd&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;Invalid Project templates for CRM WorkflowLibrary (138374)&lt;/strong&gt; &lt;/dt&gt;
&lt;dd&gt;&lt;strong&gt;Issue&lt;/strong&gt;: After installing the CRM Developer Toolkit, when you create a new project, below the Installed Templates for Visual C# you will see a CRM Workflow Library group containing a number of CRM Workflow Library project templates. &lt;/dd&gt;&lt;dd&gt;&lt;br /&gt;
&lt;strong&gt;Workaround&lt;/strong&gt;: Do not use these project templates. &lt;br /&gt;
&lt;br /&gt;&lt;/dd&gt;&lt;dd&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;When an error occurs while deploying a solution, other solution components will not be deployed. (126277)&lt;/strong&gt; &lt;/dt&gt;
&lt;dd&gt;Any solution components deployed before the error occurs will succeed and will not be rolled back after the error occurs. Any solution components that were not deployed before the error will not be deployed. &lt;br /&gt;
&lt;br /&gt;&lt;/dd&gt;&lt;dd&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;Solution components are added to default solution, if specified unmanaged solution is deleted. (126536)&lt;/strong&gt; &lt;/dt&gt;
&lt;dd&gt;If you configure your Visual Studio solution to connect to a specific unmanaged solution and that solution is later deleted, the solution components will still be deployed to the default solution. &lt;br /&gt;
&lt;br /&gt;&lt;/dd&gt;&lt;dd&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;The RegisterFile.crmregister must be manually edited after a generated class is deleted (139890)&lt;/strong&gt; &lt;/dt&gt;
&lt;dd&gt;&lt;strong&gt;Issue&lt;/strong&gt;: If you attempt to deploy a solution after deleting a class generated for a plugin or workflow you will see the following error:&lt;br /&gt;
&lt;pre&gt;Error registering plugins and/or workflows. Plug-in assembly does not contain the required types or assembly content cannot be updated. &lt;/pre&gt;
&lt;strong&gt;Workaround&lt;/strong&gt;: Open the RegisterFile.crmregister file to remove the &amp;lt;Plugin&amp;gt;,&amp;lt;WorkflowType&amp;gt;, or &amp;lt;XamlWorkflowType&amp;gt; node where the TypeName attribute specifies the fully qualified name of the class that was deleted.&lt;br /&gt;
&lt;br /&gt;&lt;/dd&gt;&lt;dd&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;Invalid error message following any other error when adding a web resource (135124)&lt;/strong&gt; &lt;/dt&gt;
&lt;dd&gt;When a validation error occurs due to a problem adding a web resource the following error message will follow it:&lt;br /&gt;
&lt;pre&gt;The selected file is not a valid type of web resource &lt;/pre&gt;
For example, when adding a web resource with the same name as an existing web resource you will get the expected error "A file with this name already exists. Please give it a unique name." but after clicking OK to close that error you will also get the invalid error incorrectly indicating that the file is not a valid type of web resource.&lt;br /&gt;
&lt;br /&gt;&lt;/dd&gt;&lt;dd&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;RegisterSchema.xsd uses enumeration values for specifying the stage of a plug-in step that are inconsistent or misleading. (136101)&lt;/strong&gt; &lt;/dt&gt;
&lt;dd&gt;&lt;strong&gt;Issue&lt;/strong&gt;: For the &amp;lt;Step&amp;gt; elements within the RegisterFile.crmregister the enumeration defining valid values used by the Stage attribute do not match those used by the Plugin Registration Tool. The following table shows how the equivilent values used in the Plugin Registration tool:&lt;br /&gt;
&lt;br /&gt;
&lt;table border="0" cellpadding="2" cellspacing="0" style="width: 600px;"&gt;&lt;tbody&gt;
&lt;tr&gt;            &lt;td valign="top" width="300"&gt;&lt;strong&gt;RegisterFile.crmregister values&lt;/strong&gt;&lt;/td&gt;            &lt;td valign="top" width="300"&gt;&lt;strong&gt;Plugin Registration Tool values&lt;/strong&gt;&lt;/td&gt;          &lt;/tr&gt;
&lt;tr&gt;            &lt;td valign="top" width="300"&gt;PreOutsideTransaction &lt;/td&gt;            &lt;td valign="top" width="300"&gt;PreValidation&lt;/td&gt;          &lt;/tr&gt;
&lt;tr&gt;            &lt;td valign="top" width="300"&gt;PreInsideTransaction &lt;/td&gt;            &lt;td valign="top" width="300"&gt;PreOperation&lt;/td&gt;          &lt;/tr&gt;
&lt;tr&gt;            &lt;td valign="top" width="300"&gt;PostOutsideTransaction &lt;/td&gt;            &lt;td valign="top" width="300"&gt;PostOperation&lt;/td&gt;          &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
The enumeration value PostOutsideTransaction is misleading. PostInsideTransaction would be a more accurate because this represents Stage 40. See &lt;a href="http://msdn.microsoft.com/en-us/library/gg327941.aspx#bkmk_PipelineStages"&gt;Event Execution Pipeline : Pipeline Stages&lt;/a&gt; for more information.&lt;br /&gt;
&lt;br /&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;Duplicate file extensions added when existing web resources are added to project(138384)&lt;/strong&gt; &lt;/dt&gt;
&lt;dd&gt;&lt;strong&gt;Issue&lt;/strong&gt;: When adding web resources from another solution to the current project in the Developer Toolkit using the Add to Packaging Project command in the CRM Explorer, the web resource files are added to the packaging project and a corresponding file extension is added to the name of the file. For example, an existing web resource named filename.js will be filename.js.js. This has no effect on the behavior of the web resource because the unique name used by the web resource is not necessarily the same as the file name.&lt;/dd&gt;&lt;dd&gt;&lt;br /&gt;
&lt;strong&gt;Workaround&lt;/strong&gt;: You can re-name the file used in the packaging project to remove the duplicate file extension. &lt;br /&gt;
&lt;br /&gt;&lt;/dd&gt;&lt;dd&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;Error building solution that includes XAML Workflow projects (139788)&lt;/strong&gt; &lt;/dt&gt;
&lt;dd&gt;&lt;strong&gt;Issue&lt;/strong&gt;: By default the reference to System.Runtime.Serialization is not included in XAML Workflow projects. If you do not add this reference an error will occur when you attempt to build the project.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Workaround&lt;/strong&gt;: Add a reference to System.Runtime.Serialization to any XAML Workflow projects you add. &lt;br /&gt;
&lt;br /&gt;&lt;/dd&gt;&lt;dd&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;Solutions drop-down displays managed solutions (136003)&lt;/strong&gt; &lt;/dt&gt;
&lt;dd&gt;&lt;strong&gt;Issue&lt;/strong&gt;: When you connect to the Microsoft CRM Server and select and organization you have the option to select a solution. The solutions listed may include managed solutions. If you choose a managed solution when you later try to deploy your solution the following error may occur:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;Error registering plugins and/or workflows. The PluginAssembly entity or component has attempted to transition from an invalid state: ComponentStateName: None; ComponentOperation: Create; ComponentSolutionType: Solution; SolutionOperationContext: None; IsProtected: True; IsBeingPublished: True.&lt;/pre&gt;
&lt;br /&gt;
&lt;strong&gt;Workaround&lt;/strong&gt;: When you choose a solution be sure to choose an unmanaged solution.&lt;/dd&gt;&lt;/dl&gt;
It should be noted that the help file is now part of the entire SDK .chm file.&lt;br /&gt;
&lt;br /&gt;
I have previously &lt;a href="http://danielcai.blogspot.com/2011/07/mscrm-2011-developer-toolkit.html"&gt;blogged&lt;/a&gt; about some typical development scenarios using the toolkit, you may want to check out if you are interested.&lt;br /&gt;
&lt;br /&gt;
Hope this helps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5472436831307966815-4508158812081814856?l=danielcai.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cRfgQqKK6LOa83aSA0GJ0SMc08g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cRfgQqKK6LOa83aSA0GJ0SMc08g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cRfgQqKK6LOa83aSA0GJ0SMc08g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cRfgQqKK6LOa83aSA0GJ0SMc08g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DanielCai/~4/sXIVjwEb-zI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/4508158812081814856/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://danielcai.blogspot.com/2011/10/crm-developer-toolkit-is-officially-v10.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/4508158812081814856?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/4508158812081814856?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DanielCai/~3/sXIVjwEb-zI/crm-developer-toolkit-is-officially-v10.html" title="CRM Developer Toolkit is Now  Officially v1.0" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-pySPBYGQHN0/TqhSF0Cu8nI/AAAAAAAAAhE/9mur1emOkFg/s72-c/CRM%252520Developer%252520Toolkit%252520-%252520Connection_thumb%25255B4%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://danielcai.blogspot.com/2011/10/crm-developer-toolkit-is-officially-v10.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQHRXo5cCp7ImA9WhRUEkg.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815.post-989392939409019604</id><published>2011-10-06T13:25:00.001-06:00</published><updated>2012-01-22T10:45:34.428-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-22T10:45:34.428-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM Training" /><category scheme="http://www.blogger.com/atom/ns#" term="Services" /><title>Back to the Field, Offering MSCRM Training and Other Services</title><content type="html">After spending the last 6 months working on something which was totally not relevant to Microsoft Dynamics CRM, I am pleased to announce that I am now back to the CRM field again. &lt;br /&gt;
&lt;br /&gt;
For this time being, I will be an independent consultant on myself offering full-lifecycle MSCRM consulting services including architecture design, development, consultation, application support/maintenance, training, and etc.&lt;br /&gt;
&lt;br /&gt;
To get the business started, I am currently offering the following 3 MSCRM training services.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.tatasolutions.com/services/training/microsoft-dynamics-crm-2011-boot-camp-application-and-customization/"&gt;Microsoft Dynamics CRM 2011 Boot Camp - Application and Customization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.tatasolutions.com/services/training/microsoft-dynamics-crm-2011-boot-camp-development-crash-course/"&gt;Microsoft Dynamics CRM 2011 Boot Camp - Development Crash Course&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.tatasolutions.com/services/training/microsoft-dynamics-crm-2011-boot-camp-installation-and-deployment/"&gt;Microsoft Dynamics CRM 2011 Boot Camp - Installation and Deployment&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
Out of the 3 training courses, I want to highlight the &lt;a href="http://www.tatasolutions.com/services/training/microsoft-dynamics-crm-2011-boot-camp-development-crash-course/"&gt;development one&lt;/a&gt;. This development boot camp is designed to sharpen your CRM development skills and techniques through an intensive 5-day training courses. The training will include some extensive development exercises, practical hand-on labs in order to help you become familiar with CRM programming models, tools, utilities, and SDKs. It's expected that after the training you will be practically comfortable developing, and designing solutions on top of Microsoft Dynamics CRM platform. If you are serious about being a professional MSCRM developers in your career, this training is for you.&lt;br /&gt;
&lt;br /&gt;
&lt;strike&gt;By the way, I would like to make some clarifications about the business name that I am using. Tata Solutions Inc. was founded 4 years ago by me for my contract work at EnCana in Calgary. It is not the same business that you might have thought of. Here are a little more details about where the business name came from.&lt;/strike&gt;&lt;br /&gt;
&lt;strike&gt;&lt;br /&gt;&lt;/strike&gt;&lt;br /&gt;
&lt;strike&gt;When I landed in Canada 4 years ago, I was offered a contract position after my first job interview. I was asked to setup a business in order to take the contract offer. In all honesty, I didn't have any creative ideas at the time, but a word of Tata just echoed in my head then which really clicked to me. That's how I ended up choosing this business name. In fact, I have loved this business name so far, and I have been hoping that I can do something with it. After all, I just ask you to not confuse yourself with another business in the industry. I think the business name shouldn't really matter that much, what really matters is the quality of the work and services done.&lt;/strike&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strike&gt;Give us a ring at contact at tatasolutions.com to schedule a time for any of the above training services, or check out our website at &lt;a href="http://www.tatasolutions.com/"&gt;http://www.tatasolutions.com/&lt;/a&gt; to find out more about what we can offer you in terms of your Dynamics CRM development needs.&lt;/strike&gt;&lt;br /&gt;
&lt;strike&gt;&lt;br /&gt;&lt;/strike&gt;&lt;br /&gt;
&lt;b&gt;[Update - Jan 12, 2012]&lt;/b&gt; We had a new business name called KingswaySoft to avoid any confusion that we might have had before. The change was motivated by the feedbacks that I have received.&lt;br /&gt;
&lt;br /&gt;
It should be noted that our services offerings are flexible per your business needs. The training services can be tailored to your specific requirements as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5472436831307966815-989392939409019604?l=danielcai.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kQbr55c1e5AyxAuakaSWK6E5bIM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kQbr55c1e5AyxAuakaSWK6E5bIM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kQbr55c1e5AyxAuakaSWK6E5bIM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kQbr55c1e5AyxAuakaSWK6E5bIM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DanielCai/~4/E_kYUcffB-U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/989392939409019604/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://danielcai.blogspot.com/2011/10/offering-mscrm-training-and-other.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/989392939409019604?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/989392939409019604?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DanielCai/~3/E_kYUcffB-U/offering-mscrm-training-and-other.html" title="Back to the Field, Offering MSCRM Training and Other Services" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://danielcai.blogspot.com/2011/10/offering-mscrm-training-and-other.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEICSH06fip7ImA9WhdWF0w.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815.post-119785205378920056</id><published>2011-09-09T23:55:00.001-06:00</published><updated>2011-09-10T22:49:29.316-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-10T22:49:29.316-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM Developer Toolkit" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM 2011" /><title>Switching CRM Developer Toolkit's Target Environment</title><content type="html">It's often the case in our CRM development life that we have the need to change the target development environment from one server to another. Working with the CRM 2011 Developer Toolkit, we can appreciate the productivity that we have gained from the toolkit. However, there wasn't any documentation about how to easily switch target environment using the toolkit. &lt;br /&gt;
&lt;br /&gt;
Here are some little tips that &lt;a href="http://social.microsoft.com/Forums/en-US/crmdevelopment/thread/e7529b41-b806-44b0-8dba-78b9e1c35bba/"&gt;I learned&lt;/a&gt; from &lt;a href="http://social.microsoft.com/Forums/en-US/crmdevelopment/"&gt;CRM Development Forum&lt;/a&gt; today, that can be used to do so without too much hassles. You can use &lt;strong&gt;either&lt;/strong&gt; one of the following to achieve this. &lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;In Visual Studio's Tools menu, there is a menu item called "Connect to Dynamics CRM Server…". You can simply click it in order to launch CRM connection window where you can enter new connection information to be used to connect to a different server or a different CRM organization.      &lt;br /&gt;&lt;a href="http://lh6.ggpht.com/-CPwVJQMFa2s/Tmr76cxaVsI/AAAAAAAAAfk/Et0208M79NY/s1600-h/image%25255B4%25255D.png"&gt;&lt;img alt="image" border="0" height="158" src="http://lh4.ggpht.com/-tV8mlE7T4PI/Tmr767waFhI/AAAAAAAAAfo/6henoW_rZtU/image_thumb%25255B2%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="384" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Delete .suo file from the same folder where your Visual Studio solution file (.sln) resides. After you have done so, the next time you fire up Visual Studio and open the CRM solution again, you will be prompted to enter CRM connection information. What this implies is, the CRM connection settings (including the login credentials) are stored in the .suo file.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
Before knowing the above tricks, I actually &lt;a href="https://connect.microsoft.com/dynamicssuggestions/feedback/details/685511/crm-dev-kit-there-should-be-an-easy-way-to-switch-target-crm-server-and-organization"&gt;raised this as an issue&lt;/a&gt; at Microsoft Connect site. To be very honest with you, I tried a number of wild ways to find out how the CRM connection settings are stored and how they can be changed, I did Windows registry search, and I looked into Windows file system for any suspicious activities, nothing led me to a concrete solution. I even came up an idea to stop IIS service in order to fail the connection that Visual Studio is attempting to make, so that it will prompt you to enter new connection settings after the connection fails. I have never thought of .suo file, neither have I ever looked for such options in the Tools menu of Visual Studio!&lt;br /&gt;
&lt;br /&gt;
Knowing the fact that your CRM login credentials are stored in the .suo file, you should be careful when you want to share the file with others. It should also be noted, many developers tend to check-in all files under the Visual Studio solution folder to source control system, including the .suo file. Those of them should be warned or cautioned. Sending .suo file to others and storing it in source control repository should be avoided for security reason. &lt;br /&gt;
&lt;br /&gt;
The tips came from &lt;a href="http://blogs.msdn.com/b/thecrmguys"&gt;Phil Hand&lt;/a&gt;, credit goes to him. &lt;br /&gt;
&lt;br /&gt;
Hope this helps. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5472436831307966815-119785205378920056?l=danielcai.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dFZX_KsqIhY1sCZtQ59pDm2fGzM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dFZX_KsqIhY1sCZtQ59pDm2fGzM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dFZX_KsqIhY1sCZtQ59pDm2fGzM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dFZX_KsqIhY1sCZtQ59pDm2fGzM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DanielCai/~4/fuELPgHDodo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/119785205378920056/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://danielcai.blogspot.com/2011/09/switching-crm-developer-toolkit-target.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/119785205378920056?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/119785205378920056?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DanielCai/~3/fuELPgHDodo/switching-crm-developer-toolkit-target.html" title="Switching CRM Developer Toolkit&amp;#39;s Target Environment" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-tV8mlE7T4PI/Tmr767waFhI/AAAAAAAAAfo/6henoW_rZtU/s72-c/image_thumb%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://danielcai.blogspot.com/2011/09/switching-crm-developer-toolkit-target.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQBQn8zeyp7ImA9WhdWFUo.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815.post-1626728720986934847</id><published>2011-07-29T23:09:00.023-06:00</published><updated>2011-09-09T08:09:13.183-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-09T08:09:13.183-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM Developer Toolkit" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM 2011" /><title>MSCRM 2011 Developer Toolkit Walkthrough</title><content type="html">As you may have noticed that&amp;nbsp;MSCRM team has released &lt;a href="http://go.microsoft.com/fwlink/?LinkID=207027"&gt;a new version of SDK (v5.0.5)&lt;/a&gt; today. The SDK includes a full functioning Developer Toolkit, which, IMHO, marks a significant milestone in CRM development practice. For the first time, the CRM development community has a first-class solution template within Visual Studio. Using the solution template, we can create, develop and deploy CRM Plug-ins, custom workflows, and web resources without having to leave the Visual Studio environment. The toolkit is designed to be a set of integrated tools within Visual Studio which help improve development productivity for Microsoft Dynamics CRM 2011 and Microsoft Dynamics CRM Online.&lt;br /&gt;
&lt;br /&gt;
This blog post will walk you through some typical CRM development scenarios, which I hope can help you become familiar with the new toolkit, so that you can take full advantage of it.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;


Prerequisites&lt;/h3&gt;
The Developer Toolkit requires the following components   &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Visual Studio 2010 Professional and above &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/download/en/details.aspx?id=18149"&gt;Microsoft Silverlight 4 Tools&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/download/en/details.aspx?id=17331"&gt;Windows Identity Foundation&lt;/a&gt; (If you are working with Microsoft Dynamics CRM Online) &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h3&gt;


Installation of the Toolkit&lt;/h3&gt;
The installation package of the toolkit can be found in the SDK download package at SDK\Tools\DeveloperToolkit. Double click "CrmDeveloperTools_Installer.msi" to install the toolkit. &lt;br /&gt;
&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; If you happen to have a previous version of the toolkit installed, you need to uninstall it first before installing the new version.&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;strong&gt;Note: &lt;/strong&gt;&lt;/em&gt;&lt;em&gt;The Developer Toolkit does not support Visual Basic .NET. If you happen to be a VB.NET developer, you will have to think about switching to C#. I doubt there is any plan to release VB.NET version of the toolkit anytime soon.&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;


Create a New CRM Solution&lt;/h3&gt;
To create a new CRM solution using the solution template provided by the toolkit, please follow the procedures below.   &lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Within Visual Studio 2010, click File –&amp;gt; New –&amp;gt; Project menu. &lt;/li&gt;
&lt;li&gt;In the "New Project" window, navigate to "Dynamics CRM" under "Visual C#", and choose "New Visual Studio Solution Template for Dynamics CRM 2011", and enter a solution name before click "OK" button.&amp;nbsp; &lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/-7USXspsBgfs/TjRU4zBUyTI/AAAAAAAAAcI/aUj3QXJaaYQ/s1600-h/0%252520-%252520New%252520CRM%252520Solution%252520Template%25255B3%25255D.png"&gt;&lt;img alt="0 - New CRM Solution Template" border="0" height="377" src="http://lh4.ggpht.com/-HK6FroRybQA/TjRU6abqpoI/AAAAAAAAAcM/pwyc30-vx9A/0%252520-%252520New%252520CRM%252520Solution%252520Template_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="0 - New CRM Solution Template" width="644" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;You will be prompted to enter CRM server connection information as shown below. Provide the name of your CRM server, and click "Connect" button.&amp;nbsp; &lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/-OY0WdtOXp8c/TjRU7CbN5nI/AAAAAAAAAcQ/_ZNgxGkLzqk/s1600-h/1%252520-%252520Enter%252520CRM%252520Discovery%252520Server%252520Name%252520and%252520Connect%25255B3%25255D.png"&gt;&lt;img alt="1 - Enter CRM Discovery Server Name and Connect" border="0" height="465" src="http://lh6.ggpht.com/-tM75jKpdJ50/TjRU7koDHKI/AAAAAAAAAcU/QUPEWCHOo5I/1%252520-%252520Enter%252520CRM%252520Discovery%252520Server%252520Name%252520and%252520Connect_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="1 - Enter CRM Discovery Server Name and Connect" width="418" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Then you will need to provide authentication information in order to connect to the CRM discovery server. After you have done so, you can click "Log on" button.&amp;nbsp; &lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/-jXxdkH4F9to/TjRU8MIwz-I/AAAAAAAAAcY/jINkDeqLciI/s1600-h/2%252520-%252520Enter%252520Authentication%252520Details%252520to%252520Log%252520on%25255B3%25255D.png"&gt;&lt;img alt="2 - Enter Authentication Details to Log on" border="0" height="465" src="http://lh5.ggpht.com/-3bGB0AjXrMk/TjRU81zdH2I/AAAAAAAAAcc/HGO-mUu_Fpg/2%252520-%252520Enter%252520Authentication%252520Details%252520to%252520Log%252520on_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="2 - Enter Authentication Details to Log on" width="418" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;You will now be asked to choose a CRM organization and a solution that you would like to work on. After you have provided all information required, you may click "OK" button now.&amp;nbsp; &lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/-iqoDJ3PmOtU/TjRU9PaMPhI/AAAAAAAAAcg/6YToMLHIWJw/s1600-h/3%252520-%252520Pick%252520Organization%252520and%252520Solution%252520Name%25255B3%25255D.png"&gt;&lt;img alt="3 - Pick Organization and Solution Name" border="0" height="465" src="http://lh5.ggpht.com/-4u1CZgBqC9Q/TjRU939FgII/AAAAAAAAAck/ktN6C63vCD8/3%252520-%252520Pick%252520Organization%252520and%252520Solution%252520Name_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="3 - Pick Organization and Solution Name" width="418" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;By default, the CRM solution template will create a Silverlight project, and a companion web project for you. Enter the Silverlight web project name and click "OK" button to continue.&amp;nbsp; &lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/-cHCjLKDYkpU/TjRU-RNPEgI/AAAAAAAAAco/NZ8PQttQoLk/s1600-h/4%252520-%252520Create%252520New%252520Silverlight%252520Application%252520by%252520Specifying%252520the%252520Application%252520Name%25255B3%25255D.png"&gt;&lt;img alt="4 - Create New Silverlight Application by Specifying the Application Name" border="0" height="410" src="http://lh5.ggpht.com/-G5VSHiQrkDQ/TjRU-wbdbJI/AAAAAAAAAcs/YpLjMMdpYSc/4%252520-%252520Create%252520New%252520Silverlight%252520Application%252520by%252520Specifying%252520the%252520Application%252520Name_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="4 - Create New Silverlight Application by Specifying the Application Name" width="514" /&gt;&lt;/a&gt;      &lt;br /&gt;
&lt;em&gt;&lt;strong&gt;Note: &lt;/strong&gt;You may not necessarily need Silverlight project in your CRM solution, but you should simply provide a Silverlight web project name in order to make the solution template wizard happy so that it can finish its own job. You can later delete the Silverlight projects if you don't actually need them. &lt;br /&gt;
&lt;em&gt;&lt;strong&gt;&lt;br /&gt;
Note: &lt;/strong&gt;If you don't currently have Silverlight Developer toolkit installed on your computer, you will be prompted the following window.&amp;nbsp;&lt;/em&gt;&lt;/em&gt;&lt;a href="http://lh3.ggpht.com/-MWAvv18jQek/TjRU_Vb5tUI/AAAAAAAAAcw/OvIPnhx4MOk/s1600-h/4%252520-%252520Silverlight%252520Developer%252520runtime%252520required%252520for%252520CRM%252520Developer%252520Toolkit%25255B6%25255D.png"&gt;&lt;img alt="4 - Silverlight Developer runtime required for CRM Developer Toolkit" border="0" height="194" src="http://lh4.ggpht.com/-V7FW11Pv_Co/TjRU_0cgxWI/AAAAAAAAAc0/EWe0myQiwds/4%252520-%252520Silverlight%252520Developer%252520runtime%252520required%252520for%252520CRM%252520Developer%252520Toolkit_thumb%25255B2%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="4 - Silverlight Developer runtime required for CRM Developer Toolkit" width="549" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;If everything goes fine, you will see a screen of Visual Studio as shown below. Notice that the wizard has created a Visual Studio solution which consists of a few projects, including:      &lt;table border="1" cellpadding="0" cellspacing="0" style="width: 862px;"&gt;&lt;tbody&gt;
&lt;tr&gt;           &lt;td valign="top" width="215"&gt;&lt;b&gt;Project&lt;/b&gt;&lt;/td&gt;            &lt;td valign="top" width="645"&gt;&lt;b&gt;Role in Solution&lt;/b&gt;&lt;/td&gt;         &lt;/tr&gt;
&lt;tr&gt;           &lt;td valign="top" width="215"&gt;&lt;b&gt;CrmPackage&lt;/b&gt;&lt;/td&gt;            &lt;td valign="top" width="645"&gt;The manifest project that that contains all assets to be deployed to Microsoft Dynamics CRM, combined with their deployment settings              &lt;br /&gt;
&lt;em&gt;&lt;strong&gt;Note: &lt;/strong&gt;You should never delete this project in your CRM solution. &lt;/em&gt;&lt;/td&gt;         &lt;/tr&gt;
&lt;tr&gt;           &lt;td valign="top" width="215"&gt;&lt;b&gt;Plugins&lt;/b&gt;&lt;/td&gt;            &lt;td valign="top" width="645"&gt;The Plugins project contains a base class named Plugin. All plug-in classes generated through the Create Plug-in option of the CRM Explorer will derive from this class. This class simplifies some of the plumbing code that's required by many plug-ins. &lt;/td&gt;         &lt;/tr&gt;
&lt;tr&gt;           &lt;td valign="top" width="215"&gt;&lt;b&gt;SilverlightApplication&lt;/b&gt;&lt;/td&gt;            &lt;td valign="top" width="645"&gt;A sample Silverlight project that can be used as the starting point to develop your Silverlight web resource.&lt;/td&gt;         &lt;/tr&gt;
&lt;tr&gt;           &lt;td valign="top" width="215"&gt;&lt;b&gt;SilverlightApplication.Web&lt;/b&gt;&lt;/td&gt;            &lt;td valign="top" width="645"&gt;A companion web project that host the above Silverlight project, and can be used to test the Silverlight project. &lt;/td&gt;         &lt;/tr&gt;
&lt;tr&gt;           &lt;td valign="top" width="215"&gt;&lt;b&gt;Workflow&lt;/b&gt;&lt;/td&gt;            &lt;td valign="top" width="645"&gt;The Workflow project provides support for implementing custom workflow activities to be used for your on-premises Microsoft Dynamics CRM instance.              &lt;br /&gt;
&lt;em&gt;&lt;strong&gt;Note: &lt;/strong&gt;Microsoft Dynamics CRM Online does not currently support Custom workflow libraries, so you may delete this project if you are working for Microsoft Dynamics CRM Online.&lt;/em&gt;&lt;/td&gt;         &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;a href="http://lh3.ggpht.com/-n5xqYUYhIkA/TjRVBD1iGAI/AAAAAAAAAc4/OlgGiLTbR5w/s1600-h/5%252520-%252520Generated%252520New%252520CRM%252520Solution%25255B3%25255D.png"&gt;&lt;img alt="5 - Generated New CRM Solution" border="0" height="484" src="http://lh5.ggpht.com/-cLOTLPi0m0E/TjRVDQ3z4HI/AAAAAAAAAc8/bg48JIBjR-8/5%252520-%252520Generated%252520New%252520CRM%252520Solution_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="5 - Generated New CRM Solution" width="623" /&gt;&lt;/a&gt;      &lt;br /&gt;
&lt;em&gt;&lt;strong&gt;Note: &lt;/strong&gt;&lt;/em&gt;In the above screen, you can see a new window called "CRM Explorer", which I will explain in details next. &lt;/li&gt;
&lt;li&gt;Once the CRM solution has been created, the first thing you should do is to sign &lt;strong&gt;both&lt;/strong&gt; your Plugins and Workflow projects with a strong name key file. You may sign your projects with a new key file or an existing one if you already have.&amp;nbsp; &lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/-66fqTIkNRNk/TjRVEMar7_I/AAAAAAAAAdA/HJg5dYHiarM/s1600-h/6%252520-%252520Sign%252520CRM%252520Plug-in%252520and%252520Workflow%252520Projects%252520with%252520Strong%252520Name%252520File%25255B5%25255D.png"&gt;&lt;img alt="6 - Sign CRM Plug-in and Workflow Projects with Strong Name File" border="0" height="422" src="http://lh3.ggpht.com/-rHA7acilaC4/TjRVE_1LUxI/AAAAAAAAAdE/IGMwU_LRlFg/6%252520-%252520Sign%252520CRM%252520Plug-in%252520and%252520Workflow%252520Projects%252520with%252520Strong%252520Name%252520File_thumb%25255B3%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="6 - Sign CRM Plug-in and Workflow Projects with Strong Name File" width="644" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;


Use of "CRM Explorer" Window&lt;/h3&gt;
CRM Explorer is a very useful window that's designed to help you navigate through any customizable components on your CRM server in an organized fashion. &lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/-FupCiyyvxZA/TjRVFWF1X6I/AAAAAAAAAdI/iUFbQvicI9g/s1600-h/6%252520-%252520CRM%252520Explorer%25255B3%25255D.png"&gt;&lt;img alt="6 - CRM Explorer" border="0" height="240" src="http://lh4.ggpht.com/-U22XFPnl_Eg/TjRVF0ZEeqI/AAAAAAAAAdM/MzLZaH3Ar9g/6%252520-%252520CRM%252520Explorer_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="6 - CRM Explorer" width="223" /&gt;&lt;/a&gt;&lt;br /&gt;
As shown above, CRM Explorer presents you a tree window that you can use mouse click to navigate through the solution components that you are interested in. The following is a screen that shows how it looks like when it has been expanded (I truncated some entities in the screen to make it concise). &lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/-6DD6QuawqxM/TjRVGwQCqgI/AAAAAAAAAdQ/020Yzyp_OsM/s1600-h/8%252520-%252520Expanded%252520CRM%252520Explorer%25255B5%25255D.png"&gt;&lt;img alt="8 - Expanded CRM Explorer" border="0" height="484" src="http://lh3.ggpht.com/-Qpq7d3Afof0/TjRVHXqZEkI/AAAAAAAAAdU/LjAQAccp3cA/8%252520-%252520Expanded%252520CRM%252520Explorer_thumb%25255B3%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="8 - Expanded CRM Explorer" width="161" /&gt;&lt;/a&gt;&lt;br /&gt;
In addition to the navigation features, CRM Explorer allows you to open the CRM solution component in Visual Studio browser when you double click the item. The following screen shows how it looks like when you double click a CRM entity (Account entity in this case) in the explorer. &lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/-mG_iTMUwab8/TjRVIOJA-tI/AAAAAAAAAdY/4WqaRWPhkSw/s1600-h/11%252520-%252520Open%252520CRM%252520Customization%252520Page%252520in%252520Visual%252520Studio%25255B3%25255D.png"&gt;&lt;img alt="11 - Open CRM Customization Page in Visual Studio" border="0" height="414" src="http://lh4.ggpht.com/-o1klZXxtrUI/TjRVJvLVG2I/AAAAAAAAAdc/PHDELsFMLTo/11%252520-%252520Open%252520CRM%252520Customization%252520Page%252520in%252520Visual%252520Studio_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="11 - Open CRM Customization Page in Visual Studio" width="644" /&gt;&lt;/a&gt;&lt;br /&gt;
Another great feature offered by CRM Explorer is, you can perform certain tasks by using context menu commands when you right-click on a specific item. The following is a list of some typical scenarios that you would use the right click commands in CRM Explorer. &lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Generate CRM Service Proxy Classes      &lt;table border="1" cellpadding="0" cellspacing="0" style="width: 787px;"&gt;&lt;tbody&gt;
&lt;tr&gt;           &lt;td valign="top" width="105"&gt;&lt;b&gt;Context&lt;/b&gt;&lt;/td&gt;            &lt;td valign="top" width="680"&gt;&lt;b&gt;Entities&lt;/b&gt;&lt;/td&gt;         &lt;/tr&gt;
&lt;tr&gt;           &lt;td valign="top" width="105"&gt;&lt;b&gt;Command&lt;/b&gt;&lt;/td&gt;            &lt;td valign="top" width="680"&gt;&lt;b&gt;Generate Wrapper&lt;/b&gt;&lt;/td&gt;         &lt;/tr&gt;
&lt;tr&gt;           &lt;td valign="top" width="105"&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/td&gt;            &lt;td valign="top" width="680"&gt;Executes CrmSvcUtil.exe to generate the strongly typed proxy classes. If you only have one plug-in project, this class will automatically be added to this project; otherwise, the &lt;b&gt;Generate Entity Wrappers&lt;/b&gt; dialog box will allow you to choose which Project to create the classes in.&lt;/td&gt;         &lt;/tr&gt;
&lt;tr&gt;           &lt;td valign="top" width="105"&gt;&lt;b&gt;Steps&lt;/b&gt;&lt;/td&gt;            &lt;td valign="top" width="680"&gt;&lt;ul&gt;
&lt;li&gt;Right click on "Entities" node in CRM Explorer window                 &lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/-olLf-6uX-9I/TjRVKC4i1eI/AAAAAAAAAdg/h4GdOtTvL4o/s1600-h/13%252520-%252520Generate%252520CRM%252520Service%252520Proxy%252520Classes%252520in%252520CRM%252520Explorer%25255B3%25255D.png"&gt;&lt;img alt="13 - Generate CRM Service Proxy Classes in CRM Explorer" border="0" height="236" src="http://lh6.ggpht.com/-PmN7MQuuC-o/TjRVKkRLHTI/AAAAAAAAAdk/zjTKmqmOtV8/13%252520-%252520Generate%252520CRM%252520Service%252520Proxy%252520Classes%252520in%252520CRM%252520Explorer_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="13 - Generate CRM Service Proxy Classes in CRM Explorer" width="318" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Choose which project that you want the proxy classes to reside in                 &lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/-u560BbpGKpY/TjRVLB7bugI/AAAAAAAAAdo/ZB2Yi6feFcA/s1600-h/14%252520-%252520Choose%252520which%252520Project%252520the%252520CRM%252520Service%252520Proxy%252520Classes%252520Reside%252520In%25255B3%25255D.png"&gt;&lt;img alt="14 - Choose which Project the CRM Service Proxy Classes Reside In" border="0" height="207" src="http://lh4.ggpht.com/-gKQPgmpOtjs/TjRVLrjlh8I/AAAAAAAAAds/Zb6Ejh6aneo/14%252520-%252520Choose%252520which%252520Project%252520the%252520CRM%252520Service%252520Proxy%252520Classes%252520Reside%252520In_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="14 - Choose which Project the CRM Service Proxy Classes Reside In" width="373" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Wait until it finishes generating the proxy classes, this could take a few minutes depending on the complexity of your customizations and your hardware configuration.                  &lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/-xdi_DGHRv-w/TjRVMCOpkzI/AAAAAAAAAdw/dpJaMT84sps/s1600-h/15%252520-%252520Generating%252520CRM%252520Service%252520Proxy%252520Classes%25255B3%25255D.png"&gt;&lt;img alt="15 - Generating CRM Service Proxy Classes" border="0" height="207" src="http://lh4.ggpht.com/-QbNrOjCRPB0/TjRVMge56gI/AAAAAAAAAd0/BWNvIC3Uw5g/15%252520-%252520Generating%252520CRM%252520Service%252520Proxy%252520Classes_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="15 - Generating CRM Service Proxy Classes" width="373" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The following is a screen of the generated code.&amp;nbsp; &lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/-iWWpq9GuSkA/TjRVNLj8FkI/AAAAAAAAAd4/Q5LKgafawVo/s1600-h/16%252520-%252520Generated%252520CRM%252520Service%252520Proxy%252520Classes%25255B3%25255D.png"&gt;&lt;img alt="16 - Generated CRM Service Proxy Classes" border="0" height="364" src="http://lh4.ggpht.com/-K2tYCx51eDM/TjRVOKDbGnI/AAAAAAAAAd8/s4_wIIwLri0/16%252520-%252520Generated%252520CRM%252520Service%252520Proxy%252520Classes_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="16 - Generated CRM Service Proxy Classes" width="644" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;         &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/li&gt;
&lt;li&gt;Create Plugin for CRM entities      &lt;table border="1" cellpadding="0" cellspacing="0" style="width: 787px;"&gt;&lt;tbody&gt;
&lt;tr&gt;           &lt;td valign="top" width="105"&gt;&lt;b&gt;Context&lt;/b&gt;&lt;/td&gt;            &lt;td valign="top" width="680"&gt;&lt;strong&gt;Entities –&amp;gt; Specific Entity&lt;/strong&gt;&lt;/td&gt;         &lt;/tr&gt;
&lt;tr&gt;           &lt;td valign="top" width="105"&gt;&lt;b&gt;Command&lt;/b&gt;&lt;/td&gt;            &lt;td valign="top" width="680"&gt;&lt;strong&gt;Create Plugin&lt;/strong&gt;&lt;/td&gt;         &lt;/tr&gt;
&lt;tr&gt;           &lt;td valign="top" width="105"&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/td&gt;            &lt;td valign="top" width="680"&gt;Opens the &lt;b&gt;Create Plug-in&lt;/b&gt; dialog with the Primary Entity set to the selected entity.&lt;/td&gt;         &lt;/tr&gt;
&lt;tr&gt;           &lt;td valign="top" width="105"&gt;&lt;b&gt;Steps&lt;/b&gt;&lt;/td&gt;            &lt;td valign="top" width="680"&gt;&lt;ul&gt;
&lt;li&gt;Right click a specific entity that you would like to create a plug-in, and choose "Create Plug-in" from the command menu                 &lt;br /&gt;
&amp;nbsp;&lt;a href="http://lh3.ggpht.com/-GbBfP1oSGMc/TjRVOmR8jEI/AAAAAAAAAeA/zEc0_oi1YX4/s1600-h/16%252520-%252520Generate%252520CRM%252520Plug-in%252520in%252520CRM%252520Explorer%25255B3%25255D.png"&gt;&lt;img alt="16 - Generate CRM Plug-in in CRM Explorer" border="0" height="236" src="http://lh6.ggpht.com/-Ub_Z2eq-1Nw/TjRVPIFRZbI/AAAAAAAAAeE/rS18ELfWer4/16%252520-%252520Generate%252520CRM%252520Plug-in%252520in%252520CRM%252520Explorer_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="16 - Generate CRM Plug-in in CRM Explorer" width="323" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Specify the details of the CRM Plugin&amp;nbsp; &lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/-RHGj1bOjZj4/TjRVPgG-YLI/AAAAAAAAAeI/SKdsWLqq6Yc/s1600-h/17%252520-%252520Create%252520CRM%252520Plug-in%25255B5%25255D.png"&gt;&lt;img alt="17 - Create CRM Plug-in" border="0" height="447" src="http://lh5.ggpht.com/-ph9u1xyX0uA/TjRVQkOCkxI/AAAAAAAAAeM/b3P1Oai_cmA/17%252520-%252520Create%252520CRM%252520Plug-in_thumb%25255B3%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="17 - Create CRM Plug-in" width="644" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Once the plugin code has been generated, you can see that the new plugin class inherits from the base Plugin class                 &lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/-ZuAv_IyCfwo/TjRVRUhcnfI/AAAAAAAAAeQ/8qlDLlYYQJ0/s1600-h/18%252520-%252520Generated%252520CRM%252520Plug-in%25255B3%25255D.png"&gt;&lt;img alt="18 - Generated CRM Plug-in" border="0" height="338" src="http://lh4.ggpht.com/-hG6m9I1cCHA/TjRVSs7ZvxI/AAAAAAAAAeU/qx_hrBvGpA4/18%252520-%252520Generated%252520CRM%252520Plug-in_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="18 - Generated CRM Plug-in" width="644" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;         &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/li&gt;
&lt;li&gt;Add Web Resource items from CRM Server to the packaging project      &lt;table border="1" cellpadding="0" cellspacing="0" style="width: 787px;"&gt;&lt;tbody&gt;
&lt;tr&gt;           &lt;td valign="top" width="105"&gt;&lt;b&gt;Context&lt;/b&gt;&lt;/td&gt;            &lt;td valign="top" width="680"&gt;&lt;strong&gt;Web Resources&lt;/strong&gt;&amp;nbsp; or &lt;strong&gt;Web Resources -&amp;gt; Web Resource Type               &lt;/strong&gt;&amp;nbsp; or               &lt;br /&gt;
&lt;strong&gt;Web Resources -&amp;gt; Web Resource Type –&amp;gt; Specific Web Resource&lt;/strong&gt;&lt;/td&gt;         &lt;/tr&gt;
&lt;tr&gt;           &lt;td valign="top" width="105"&gt;&lt;b&gt;Command&lt;/b&gt;&lt;/td&gt;            &lt;td valign="top" width="680"&gt;&lt;strong&gt;Add to packaging project&lt;/strong&gt;&lt;/td&gt;         &lt;/tr&gt;
&lt;tr&gt;           &lt;td valign="top" width="105"&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/td&gt;            &lt;td valign="top" width="680"&gt;Add selected web resources from the CRM organization to the CrmPackage project. &lt;/td&gt;         &lt;/tr&gt;
&lt;tr&gt;           &lt;td valign="top" width="105"&gt;&lt;b&gt;Steps&lt;/b&gt;&lt;/td&gt;            &lt;td valign="top" width="680"&gt;&lt;ul&gt;
&lt;li&gt;Right click specific web resource item, a web resource type, or the Web Resources folder, and choose "Add to packaging project" from the command menu&amp;nbsp; &lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/-V8UR9pomow0/TjRVTLfDrNI/AAAAAAAAAeY/jKELBLIeSKo/s1600-h/9%252520-%252520Add%252520Web%252520Resources%252520to%252520CRM%252520packaging%252520project%25255B6%25255D.png"&gt;&lt;img alt="9 - Add Web Resources to CRM packaging project" border="0" height="484" src="http://lh3.ggpht.com/-8Rb2oZ8zZKY/TjRVT6jjpFI/AAAAAAAAAec/v-DxEGI0FFk/9%252520-%252520Add%252520Web%252520Resources%252520to%252520CRM%252520packaging%252520project_thumb%25255B4%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="9 - Add Web Resources to CRM packaging project" width="341" /&gt;&lt;/a&gt;&amp;nbsp; &lt;/li&gt;
&lt;li&gt;You should be able to see the selected web resources added to your CrmPackage project, from there you can work with the CRM Web Resources just like any other source code files.&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/-PYOuBYXmBbQ/TjRVUo6iFxI/AAAAAAAAAeg/hBU6V4Y_Sqg/s1600-h/10%252520-%252520Added%252520Web%252520Resources%25255B4%25255D.png"&gt;&lt;img alt="10 - Added Web Resources" border="0" height="437" src="http://lh5.ggpht.com/-cw12PgjSBNE/TjRVVeT_fmI/AAAAAAAAAek/w79aQqauxl4/10%252520-%252520Added%252520Web%252520Resources_thumb%25255B2%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="10 - Added Web Resources" width="525" /&gt;&lt;/a&gt;&amp;nbsp; &lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;         &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/li&gt;
&lt;li&gt;Add, Edit, Delete Plugin&amp;nbsp;&amp;nbsp; &lt;table border="1" cellpadding="0" cellspacing="0" style="width: 787px;"&gt;&lt;tbody&gt;
&lt;tr&gt;           &lt;td valign="top" width="105"&gt;&lt;b&gt;Context&lt;/b&gt;&lt;/td&gt;            &lt;td valign="top" width="680"&gt;&lt;b&gt;Plug-in Assemblies -&amp;gt; &lt;/b&gt;&lt;b&gt;Specific Assembly               &lt;/b&gt;&amp;nbsp; or               &lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;b&gt;Plug-in Assemblies -&amp;gt; &lt;/b&gt;&lt;b&gt;Specific Assembly -&amp;gt; &lt;/b&gt;&lt;b&gt;Specific Plugin&lt;/b&gt;&lt;/td&gt;         &lt;/tr&gt;
&lt;tr&gt;           &lt;td valign="top" width="105"&gt;&lt;b&gt;Command&lt;/b&gt;&lt;/td&gt;            &lt;td valign="top" width="680"&gt;&lt;strong&gt;Add Plugin&lt;/strong&gt; &lt;strong&gt;Edit Plugin&lt;/strong&gt; &lt;strong&gt;Delete Plugin&lt;/strong&gt;&lt;/td&gt;         &lt;/tr&gt;
&lt;tr&gt;           &lt;td valign="top" width="105"&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/td&gt;            &lt;td valign="top" width="680"&gt;Add, edit or delete CRM plugins.              &lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/--RfKts7faWk/TjRVVm2NvdI/AAAAAAAAAeo/4pNgEdqTgAY/s1600-h/21%252520-%252520Add%252520plugin%252520in%252520CRM%252520Explorer%25255B4%25255D.png"&gt;&lt;img alt="21 - Add plugin in CRM Explorer" border="0" height="415" src="http://lh5.ggpht.com/-Im-cERwA4mQ/TjRVWTrzrbI/AAAAAAAAAes/X5EUG5M-UfE/21%252520-%252520Add%252520plugin%252520in%252520CRM%252520Explorer_thumb%25255B2%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="21 - Add plugin in CRM Explorer" width="370" /&gt;&lt;/a&gt;              &lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/-Ug19HkeYov0/TjRVWzP8fRI/AAAAAAAAAew/JsxNLjPbWY4/s1600-h/22%252520-%252520Edit%25252C%252520delete%252520plugin%252520in%252520CRM%252520Explorer%25255B3%25255D.png"&gt;&lt;img alt="22 - Edit, delete plugin in CRM Explorer" border="0" height="415" src="http://lh4.ggpht.com/-rwIUhxxanFk/TjRVXcaWCFI/AAAAAAAAAe0/0y0m5pCS01c/22%252520-%252520Edit%25252C%252520delete%252520plugin%252520in%252520CRM%252520Explorer_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="22 - Edit, delete plugin in CRM Explorer" width="471" /&gt;&lt;/a&gt;&lt;/td&gt;         &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/li&gt;
&lt;li&gt;Add, Edit, Delete Plugin Steps&amp;nbsp;&amp;nbsp; &lt;table border="1" cellpadding="0" cellspacing="0" style="width: 787px;"&gt;&lt;tbody&gt;
&lt;tr&gt;           &lt;td valign="top" width="105"&gt;&lt;b&gt;Context&lt;/b&gt;&lt;/td&gt;            &lt;td valign="top" width="680"&gt;&lt;b&gt;Plug-in Assemblies -&amp;gt; &lt;/b&gt;&lt;b&gt;Specific Assembly -&amp;gt; &lt;/b&gt;&lt;b&gt;Specific Plugin               &lt;/b&gt;&amp;nbsp; or               &lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;Plug-in Assemblies -&amp;gt; &lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;Specific Assembly -&amp;gt; &lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;Specific Plugin -&amp;gt; &lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;b&gt;Specific Step&lt;/b&gt;&lt;/b&gt;&lt;/td&gt;         &lt;/tr&gt;
&lt;tr&gt;           &lt;td valign="top" width="105"&gt;&lt;b&gt;Command&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" width="680"&gt;&lt;div style="font-weight: normal; margin: 0px;"&gt;
&lt;b&gt;&lt;strong&gt;Add Step&lt;/strong&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style="font-weight: normal; margin: 0px;"&gt;
&lt;b&gt;&lt;strong&gt;Edit Step&lt;/strong&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style="font-weight: normal; margin: 0px;"&gt;
&lt;b&gt;&lt;strong&gt;Delete Step&lt;/strong&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;         &lt;/tr&gt;
&lt;tr&gt;           &lt;td valign="top" width="105"&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/td&gt;            &lt;td valign="top" width="680"&gt;Add, edit or delete CRM plugin steps.              &lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/-uAkOn_iDItA/TjRVX8-kSrI/AAAAAAAAAe4/s_FPjowhHaw/s1600-h/23%252520-%252520Edit%252520plugin%252520step%252520in%252520CRM%252520Explorer%25255B4%25255D.png"&gt;&lt;img alt="23 - Edit plugin step in CRM Explorer" border="0" height="415" src="http://lh3.ggpht.com/-NKe5mxFwnVE/TjRVYVulgLI/AAAAAAAAAe8/2U2JDkKF79c/23%252520-%252520Edit%252520plugin%252520step%252520in%252520CRM%252520Explorer_thumb%25255B2%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="23 - Edit plugin step in CRM Explorer" width="471" /&gt;&lt;/a&gt;&lt;/td&gt;         &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;


Use of "CrmPackage" Project in "Solution Explorer" Window&lt;/h3&gt;
CrmPackage project is a specially engineered Visual Studio project template designed to manage all CRM solution components within a single place.   &lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Manage CRM Web Resource Metadata Attributes CRM Web Resource has certain metadata attributes associated, which dictate how the web resource items can be accessed and managed in CRM system. To change a web resource item's metadata attributes, you can click any particular web resource item in Solution Explorer window to open its Properties window, where you can change or update any properties as necessary.&amp;nbsp; &lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/-8Yjv5QUyR_k/TjRVY5I1SPI/AAAAAAAAAfA/YST1IyaoB7w/s1600-h/19%252520-%252520Manage%252520Web%252520Resource%252520Properties%25255B4%25255D.png"&gt;&lt;img alt="19 - Manage Web Resource Properties" border="0" height="484" src="http://lh4.ggpht.com/-jbjiXdCE22A/TjRVZmh1F_I/AAAAAAAAAfE/V1NrX3flTn4/19%252520-%252520Manage%252520Web%252520Resource%252520Properties_thumb%25255B2%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="19 - Manage Web Resource Properties" width="295" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Manage Silverlight Web Resource Metadata Attributes Silverlight web resource is a special web resource type which is added to CrmPackage project through project reference. In order to change Silverlight web resource's metadata attributes, you need to expand CrmPackage project's References node, and click on the particular reference item, so that you can change or update any metadata attributes in Properties window as needed.&amp;nbsp; &lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/-7rh2zqEW-Yk/TjRVaaj4ZFI/AAAAAAAAAfI/ClKWX8YYZg4/s1600-h/20%252520-%252520Manage%252520Silverlight%252520Web%252520Resource%252520Properties%25255B3%25255D.png"&gt;&lt;img alt="20 - Manage Silverlight Web Resource Properties" border="0" height="484" src="http://lh3.ggpht.com/-h9EQOQEnZxA/TjRVbPSaeYI/AAAAAAAAAfM/A4IpmtSjGKw/20%252520-%252520Manage%252520Silverlight%252520Web%252520Resource%252520Properties_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="20 - Manage Silverlight Web Resource Properties" width="261" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;/ol&gt;
&lt;em&gt;&lt;strong&gt;Note: &lt;/strong&gt;The above two approaches are particularly useful if you have any source code files that are not currently managed by CRM Server yet, but you want to publish them to CRM Server, in which case, you can use Visual Studio's Add Existing Items command to add them to CrmPackage project, then you would provide necessary metadata attributes before you can actually deploy them to CRM server. &lt;/em&gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;


Publish Changes to CRM Server&lt;/h3&gt;
After you have done all the good hard work on your CRM solution, you are ready to publish your changes back to CRM Server. The CRM Solution template has made this significantly easy, you can right-click the CrmPackage project, and choose "Deploy" from the command menu, all the changes will be published to CRM Server after all referenced projects have been successfully compiled. &lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/-3xdJ9dsIjuU/TjRVbg3CU3I/AAAAAAAAAfQ/_HKxLZyYiIo/s1600-h/24%252520-%252520Deploy%252520CrmPackage%25255B4%25255D.png"&gt;&lt;img alt="24 - Deploy CrmPackage" border="0" height="335" src="http://lh4.ggpht.com/-dRCi2ziaQxk/TjRVcRcuLnI/AAAAAAAAAfU/MFWAbGRFeCg/24%252520-%252520Deploy%252520CrmPackage_thumb%25255B2%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="24 - Deploy CrmPackage" width="496" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;em&gt;&lt;strong&gt;Note: &lt;/strong&gt;&lt;/em&gt;&lt;em&gt;You need to make sure that you have signed all plugin and workflow projects in order for Visual Studio to be able to publish them to CRM Server.&lt;/em&gt; &lt;br /&gt;
&lt;br /&gt;
I have tried to cover some most common development scenarios using the toolkit in this blog post, but I am sure that there are many other things that I haven't covered, which you can explorer by reading the user guide document that you can find from the SDK. &lt;br /&gt;
&lt;br /&gt;
Note that the toolkit is currently a beta version. I have encountered a few minor issues when using it. Overall, it's a great productivity tool for CRM development. Great job by the CRM team. &lt;br /&gt;
&lt;br /&gt;
Please let me know if there are any errors or typos in this post. &lt;br /&gt;
&lt;br /&gt;
Hope this helps. Cheers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5472436831307966815-1626728720986934847?l=danielcai.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QnfZ7MbfhOrkqn_nvkDKjUebMmw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QnfZ7MbfhOrkqn_nvkDKjUebMmw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QnfZ7MbfhOrkqn_nvkDKjUebMmw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QnfZ7MbfhOrkqn_nvkDKjUebMmw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DanielCai/~4/pfZU6IHgi7M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/1626728720986934847/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://danielcai.blogspot.com/2011/07/mscrm-2011-developer-toolkit.html#comment-form" title="30 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/1626728720986934847?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/1626728720986934847?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DanielCai/~3/pfZU6IHgi7M/mscrm-2011-developer-toolkit.html" title="MSCRM 2011 Developer Toolkit Walkthrough" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-HK6FroRybQA/TjRU6abqpoI/AAAAAAAAAcM/pwyc30-vx9A/s72-c/0%252520-%252520New%252520CRM%252520Solution%252520Template_thumb%25255B1%25255D.png?imgmax=800" height="72" width="72" /><thr:total>30</thr:total><feedburner:origLink>http://danielcai.blogspot.com/2011/07/mscrm-2011-developer-toolkit.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIGQX88eSp7ImA9WhdRE00.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815.post-1001184184531750803</id><published>2011-07-29T17:35:00.010-06:00</published><updated>2011-08-02T10:28:40.171-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-02T10:28:40.171-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM SDK" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM 2011" /><title>MSCRM 2011  SDK v5.0.5 Released</title><content type="html">I don't usually blog about any CRM SDK or rollup releases, but here is an exception.&lt;br /&gt;
&lt;br /&gt;
Microsoft Dynamics CRM team has just release &lt;a href="http://go.microsoft.com/fwlink/?LinkID=207027"&gt;CRM 2011 SDK v5.0.5&lt;/a&gt; today. Among many cool other stuff in the new SDK release, I want to highlight two that you should check out.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;There is a Beta version of the &lt;b&gt;Developer Toolkit for CRM 2011 and Online&lt;/b&gt; included in the SDK! The toolkit comes with an installation program and a Developer Toolkit User's Guide.docx for documentation.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;There is a new tool in the SDK release which can be used to analyze the performance of CRM plug-ins. The tool is called the &lt;b&gt;Plugin Profiler&lt;/b&gt;.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
The most important thing is the Developer Toolkit, which, I believe, marks a significant milestone in CRM development practice. I have been very excited today because of the toolkit, since this is the first time that I have actually touched it. Very impressive, great job by CRM team.&lt;br /&gt;
&lt;br /&gt;
Note that there is currently no documentation available for the plugin profiler tool, which will be available in the next release of SDK document, according to the SDK release notes.&lt;br /&gt;
&lt;br /&gt;
Among many other cool stuff, here are a few that might interest you (excerpt of the SDK release notes with some editing).&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Updated the assemblies for Microsoft Dynamics CRM 2011 Update Rollup 3. For Microsoft Dynamics CRM Online, updates are installed for you. For other deployment types, you can get update rollups from the &lt;a href="http://www.microsoft.com/downloads/en/default.aspx"&gt;Microsoft Download Center&lt;/a&gt; or from &lt;a href="http://www.update.microsoft.com/"&gt;Microsoft Update&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Added quite some more sample code for Microsoft Visual Basic .NET.&lt;/li&gt;
&lt;li&gt;Added some new guideline documents&lt;/li&gt;
&lt;li&gt;Added a sample extension for the CrmSvcUtil.exe program that generates a file containing enumerations for all option sets, state codes, and status codes. &lt;/li&gt;
&lt;li&gt;Added some new sample code:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Sample: Associate and Disassociate Records Using the REST Endpoint with JScript&lt;/li&gt;
&lt;li&gt;Sample: Associate and Disassociate Records Using the REST Endpoint with Silverlight&lt;/li&gt;
&lt;li&gt;Sample: Distribute Campaign Activities to Dynamic and Static Lists&lt;/li&gt;
&lt;li&gt;Sample: Work with Activity Party Records&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
A full release history of CRM SDK can be found at &lt;a href="http://msdn.microsoft.com/en-us/library/gg309408.aspx"&gt;the SDK's first page&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Hope this helps.&lt;br /&gt;
&lt;br /&gt;
Cheers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5472436831307966815-1001184184531750803?l=danielcai.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EiFa6rvj1IKqk_c40LRGObLCUEA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EiFa6rvj1IKqk_c40LRGObLCUEA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EiFa6rvj1IKqk_c40LRGObLCUEA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EiFa6rvj1IKqk_c40LRGObLCUEA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DanielCai/~4/Pu-N66D93pg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/1001184184531750803/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://danielcai.blogspot.com/2011/07/mscrm-2011-sdk-v505-released.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/1001184184531750803?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/1001184184531750803?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DanielCai/~3/Pu-N66D93pg/mscrm-2011-sdk-v505-released.html" title="MSCRM 2011  SDK v5.0.5 Released" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://danielcai.blogspot.com/2011/07/mscrm-2011-sdk-v505-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIBSX86cSp7ImA9WhdSEE0.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815.post-6486937026823326560</id><published>2011-07-01T22:13:00.010-06:00</published><updated>2011-07-18T09:55:58.119-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-18T09:55:58.119-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MVP" /><category scheme="http://www.blogger.com/atom/ns#" term="CRM MVP" /><title>Hey, I am a Microsoft MVP now</title><content type="html">I found that it was a very pleasant experience during the last couple of years while I was working with Microsoft Dynamics CRM and related .NET technology. Today there came a new surprise and a privilege that I received an email this morning from Microsoft team which informed me that I have been awarded as a Microsoft Dynamics CRM MVP. &lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/-DY4JzCGsabI/Tg6a4yxssII/AAAAAAAAAU4/22RuVOVIkHk/s1600-h/MVP550x222%25255B2%25255D.png"&gt;&lt;img alt="MVP550x222" border="0" height="101" src="http://lh5.ggpht.com/-DvJ-AhRMdtA/Tg6a5v38uTI/AAAAAAAAAU8/jqo3uQyRO2I/MVP550x222_thumb.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="MVP550x222" width="244" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;I would like to say thanks to the CRM community, it's a very generous community that people really liked to share their working knowledge of Microsoft Dynamics CRM product. Particularly I want to thank the fellow CRM MVPs, &lt;a href="http://a33ik.blogspot.com/"&gt;Andriy Butenko&lt;/a&gt;, &lt;a href="http://crmentropy.blogspot.com/"&gt;Dave Berry&lt;/a&gt;, &lt;a href="http://mscrmuk.blogspot.com/"&gt;David Jennaway&lt;/a&gt;, and also Jim Glass (who is a Microsoft fellow and a CRM community lead), for the tremendous support that I have received from them on &lt;a href="http://social.microsoft.com/Forums/en-US/crmdevelopment/threads"&gt;CRM Development Forum&lt;/a&gt;. I also hope to extend my appreciation to Microsoft Community &amp;amp; Online Support team, and the MVP leads from Microsoft Canada, for their recognition of my contribution in the CRM community, even though I consider my contribution significantly trivial.&lt;br /&gt;
&lt;br /&gt;
I want to thank Microsoft Dynamics CRM team for their hard work to keep evolving the product into a better and better development platform in the past few years. CRM platform has got great potentials in the future, keep up all the good work, folks!&lt;br /&gt;
&lt;br /&gt;
From the community perspective, I have recently noticed some very talented resources in the forums after CRM 2011 has been released, I would like to thank those of you for your hard work and the contributions that you have made to the community. You can be assured that your contributions will be recognized as well one day, we need more MVPs to help grow the community! &lt;br /&gt;
&lt;br /&gt;
Cheers,&lt;br /&gt;
Daniel&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5472436831307966815-6486937026823326560?l=danielcai.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BYSm2BzyFvR8XkSvRr8wL71ocZA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BYSm2BzyFvR8XkSvRr8wL71ocZA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BYSm2BzyFvR8XkSvRr8wL71ocZA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BYSm2BzyFvR8XkSvRr8wL71ocZA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DanielCai/~4/ie-GeQKXIaI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/6486937026823326560/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://danielcai.blogspot.com/2011/07/hey-i-am-microsoft-mvp-now.html#comment-form" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/6486937026823326560?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/6486937026823326560?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DanielCai/~3/ie-GeQKXIaI/hey-i-am-microsoft-mvp-now.html" title="Hey, I am a Microsoft MVP now" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-DvJ-AhRMdtA/Tg6a5v38uTI/AAAAAAAAAU8/jqo3uQyRO2I/s72-c/MVP550x222_thumb.png?imgmax=800" height="72" width="72" /><thr:total>8</thr:total><feedburner:origLink>http://danielcai.blogspot.com/2011/07/hey-i-am-microsoft-mvp-now.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4NQHg7fSp7ImA9WhRUFkU.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815.post-6478455811018554458</id><published>2011-06-28T08:09:00.011-06:00</published><updated>2012-01-27T10:06:31.605-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-27T10:06:31.605-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM 2011" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM WCF Service Bindings" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM SOAP Endpoint" /><title>Step-by-step Walkthrough: Use CRM 2011 Organization (SOAP) Service from a Console Application</title><content type="html">&lt;b&gt;[DISCLAIMER]&lt;/b&gt; This blog post should be used for reference only, I wouldn't recommend using this approach in your production code, since many default options generated by WCF service reference don't actually work for CRM2011, and also it would require significant effort to make it work for CRM Online and IFD deployments. In addition to this blog post, you should check out&amp;nbsp;&lt;a href="http://blogs.msdn.com/b/girishr/" target="_blank"&gt;Girish Raja&lt;/a&gt;'s &lt;a href="http://blogs.msdn.com/b/girishr/archive/2011/06/16/teched-na-2011-session-recording-crm-and-sharepoint.aspx" target="_blank"&gt;TechEd session&lt;/a&gt;.&amp;nbsp;&lt;b&gt;[END OF DISCLAIMER]&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
This blog post describes how to consume CRM 2011 Organization (SOAP) services from a console application, which can also be used for your Windows Service, Windows Form application, and probably even another WCF service that you may want to develop in order to delegate the service calls to CRM Server. This can be considered as a supplementary guideline of CRM SDK document, which is currently missing as of the latest SDK v5.0.4. &lt;br /&gt;
&lt;br /&gt;
This blog post is primarily inspired by and based on &lt;a href="http://msdn.microsoft.com/en-us/library/gg594452.aspx"&gt;CRM document - Walkthrough: Use the SOAP Endpoint for Web Resources with Silverlight&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Let's get started.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Create the Silverlight Project in Visual Studio 2010&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
In Visual Studio 2010 create a Console application. This walkthrough will use the name SoapFromConsoleApp, but you can use whatever name you wish. You will need to make changes as necessary because the name of the project is also the default namespace for the application.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Add a Service Reference to the Organization Service.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
In the SoapFromConsoleApp project, right-click &lt;strong&gt;References&lt;/strong&gt; and select &lt;strong&gt;Add Service Reference&lt;/strong&gt; from the context menu.&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;     In the &lt;strong&gt;Add Service Reference&lt;/strong&gt; dialog box type the URL to the Organization service and click &lt;strong&gt;Go&lt;/strong&gt;.&lt;br /&gt;
The URL to the service is located on the &lt;strong&gt;Developer Resources&lt;/strong&gt; page of Microsoft Dynamics CRM 2011. In the &lt;strong&gt;Settings&lt;/strong&gt; area select &lt;strong&gt;Customizations&lt;/strong&gt; and then select &lt;strong&gt;Developer Resources&lt;/strong&gt;.&lt;br /&gt;
The URL has the format &amp;lt;organization URL&amp;gt;/XRMServices/2011/Organization.svc       &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;     Enter a namespace in the &lt;strong&gt;Namespace&lt;/strong&gt; field and then click &lt;strong&gt;OK&lt;/strong&gt;.&lt;br /&gt;
This walkthrough will use the namespace &lt;strong&gt;CrmSdk&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Add Supporting Classes and Edit files&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;     In the SoapFromConsoleApp project, add a new file with a class called XrmExtensionMethods.cs with the following code. The namespace for this class must match the namespace of your project.       &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="csharp" name="code"&gt;using System;
using System.Collections.Generic;
using System.Runtime.Serialization;

namespace SoapFromConsoleApp.CrmSdk
{
    partial class Entity
    {
        public Entity()
        {
            this.FormattedValuesField = new FormattedValueCollection();
            this.RelatedEntitiesField = new RelatedEntityCollection();
        }

        public T GetAttributeValue&amp;lt;T&amp;gt;(string attributeLogicalName)
        {
            if (null == this.Attributes) { this.Attributes = new AttributeCollection(); };

            object value;
            if (this.Attributes.TryGetValue(attributeLogicalName, out value))
            {
                return (T)value;
            }

            return default(T);
        }

        public object this[string attributeName]
        {
            get
            {
                if (null == this.Attributes) { this.Attributes = new AttributeCollection(); };
                return this.Attributes.GetItem(attributeName);
            }

            set
            {
                if (null == this.Attributes) { this.Attributes = new AttributeCollection(); };
                this.Attributes.SetItem(attributeName, value);
            }
        }
    }

    [KnownType(typeof(AppointmentRequest))]
    [KnownType(typeof(AttributeMetadata))]
    [KnownType(typeof(ColumnSet))]
    [KnownType(typeof(DateTime))]
    [KnownType(typeof(Entity))]
    [KnownType(typeof(EntityCollection))]
    [KnownType(typeof(EntityFilters))]
    [KnownType(typeof(EntityMetadata))]
    [KnownType(typeof(EntityReference))]
    [KnownType(typeof(EntityReferenceCollection))]
    [KnownType(typeof(Label))]
    [KnownType(typeof(LookupAttributeMetadata))]
    [KnownType(typeof(ManyToManyRelationshipMetadata))]
    [KnownType(typeof(OneToManyRelationshipMetadata))]
    [KnownType(typeof(OptionSetMetadataBase))]
    [KnownType(typeof(OptionSetValue))]
    [KnownType(typeof(PagingInfo))]
    [KnownType(typeof(ParameterCollection))]
    [KnownType(typeof(PrincipalAccess))]
    [KnownType(typeof(PropagationOwnershipOptions))]
    [KnownType(typeof(QueryBase))]
    [KnownType(typeof(Relationship))]
    [KnownType(typeof(RelationshipMetadataBase))]
    [KnownType(typeof(RelationshipQueryCollection))]
    [KnownType(typeof(RibbonLocationFilters))]
    [KnownType(typeof(RollupType))]
    [KnownType(typeof(StringAttributeMetadata))]
    [KnownType(typeof(TargetFieldType))]
    partial class OrganizationRequest
    {
        public object this[string key]
        {
            get
            {
                if (null == this.Parameters) { this.Parameters = new ParameterCollection(); };

                return this.Parameters.GetItem(key);
            }

            set
            {
                if (null == this.Parameters) { this.Parameters = new ParameterCollection(); };

                this.Parameters.SetItem(key, value);
            }
        }
    }

    [KnownType(typeof(AccessRights))]
    [KnownType(typeof(AttributeMetadata))]
    [KnownType(typeof(AttributePrivilegeCollection))]
    [KnownType(typeof(AuditDetail))]
    [KnownType(typeof(AuditDetailCollection))]
    [KnownType(typeof(AuditPartitionDetailCollection))]
    [KnownType(typeof(DateTime))]
    [KnownType(typeof(Entity))]
    [KnownType(typeof(EntityCollection))]
    [KnownType(typeof(EntityMetadata))]
    [KnownType(typeof(EntityReferenceCollection))]
    [KnownType(typeof(Guid))]
    [KnownType(typeof(Label))]
    [KnownType(typeof(ManagedPropertyMetadata))]
    [KnownType(typeof(OptionSetMetadataBase))]
    [KnownType(typeof(OrganizationResources))]
    [KnownType(typeof(ParameterCollection))]
    [KnownType(typeof(QueryExpression))]
    [KnownType(typeof(RelationshipMetadataBase))]
    [KnownType(typeof(SearchResults))]
    [KnownType(typeof(ValidationResult))]
    partial class OrganizationResponse
    {
        public object this[string key]
        {
            get
            {
                if (null == this.Results) { this.Results = new ParameterCollection(); };

                return this.Results.GetItem(key);
            }
        }
    }

    public static class CollectionExtensions
    {
        public static TValue GetItem&amp;lt;TKey, TValue&amp;gt;(this IList&amp;lt;KeyValuePair&amp;lt;TKey, TValue&amp;gt;&amp;gt; collection, TKey key)
        {
            TValue value;
            if (TryGetValue(collection, key, out value))
            {
                return value;
            }

            throw new KeyNotFoundException("Key = " + key);
        }

        public static void SetItem&amp;lt;TKey, TValue&amp;gt;(this IList&amp;lt;KeyValuePair&amp;lt;TKey, TValue&amp;gt;&amp;gt; collection, TKey key, TValue value)
        {
            int index;
            if (TryGetIndex&amp;lt;TKey, TValue&amp;gt;(collection, key, out index))
            {
                collection.RemoveAt(index);
            }

            //If the value is an array, it needs to be converted into a List. This is due to how Silverlight serializes
            //Arrays and IList&amp;lt;T&amp;gt; objects (they are both serialized with the same namespace). Any collection objects will
            //already add the KnownType for IList&amp;lt;T&amp;gt;, which means that any parameters that are arrays cannot be added
            //as a KnownType (or it will throw an exception).
            Array array = value as Array;
            if (null != array)
            {
                Type listType = typeof(List&amp;lt;&amp;gt;).GetGenericTypeDefinition().MakeGenericType(array.GetType().GetElementType());
                object list = Activator.CreateInstance(listType, array);
                try
                {
                    value = (TValue)list;
                }
                catch (InvalidCastException)
                {
                    //Don't do the conversion because the types are not compatible
                }
            }

            collection.Add(new KeyValuePair&amp;lt;TKey, TValue&amp;gt;() { Key = key, Value = value });
        }

        public static bool ContainsKey&amp;lt;TKey, TValue&amp;gt;(this IList&amp;lt;KeyValuePair&amp;lt;TKey, TValue&amp;gt;&amp;gt; collection, TKey key)
        {
            int index;
            return TryGetIndex&amp;lt;TKey, TValue&amp;gt;(collection, key, out index);
        }

        public static bool TryGetValue&amp;lt;TKey, TValue&amp;gt;(this IList&amp;lt;KeyValuePair&amp;lt;TKey, TValue&amp;gt;&amp;gt; collection, TKey key, out TValue value)
        {
            int index;
            if (TryGetIndex&amp;lt;TKey, TValue&amp;gt;(collection, key, out index))
            {
                value = collection[index].Value;
                return true;
            }

            value = default(TValue);
            return false;
        }

        private static bool TryGetIndex&amp;lt;TKey, TValue&amp;gt;(IList&amp;lt;KeyValuePair&amp;lt;TKey, TValue&amp;gt;&amp;gt; collection, TKey key, out int index)
        {
            if (null == collection || null == key)
            {
                index = -1;
                return false;
            }

            index = -1;
            for (int i = 0; i &amp;lt; collection.Count; i++)
            {
                if (key.Equals(collection[i].Key))
                {
                    index = i;
                    return true;
                }
            }

            return false;
        }
    }

    [KnownType(typeof(QueryBase))]
    [KnownType(typeof(Relationship))]
    [KnownType(typeof(EntityCollection))]
    [DataContract(Namespace = "http://schemas.datacontract.org/2004/07/System.Collections.Generic")]
    public sealed class KeyValuePair&amp;lt;TKey, TValue&amp;gt;
    {
        #region Properties
        [DataMember(Name = "key")]
        public TKey Key { get; set; }

        [DataMember(Name = "value")]
        public TValue Value { get; set; }
        #endregion
    }

    #region Collection Instantiation
    partial class EntityCollection
    {
        public EntityCollection()
        {
            this.EntitiesField = new Entity[]{};
        }
    }

    partial class Label
    {
        public Label()
        {
            this.LocalizedLabelsField = new LocalizedLabelCollection();
        }
    }

    #endregion
}

&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;     Edit the SoapFromConsoleApp\Service References\CrmSdk\Reference.svcmap\Reference.cs file. Change each instance of "&lt;code&gt;System.Collections.Generic.KeyValuePair&amp;lt;"&lt;/code&gt; to "&lt;code&gt;KeyValuePair&amp;lt;"&lt;/code&gt;. This will change the reference from &lt;strong&gt;System.Collections.Generic.KeyValuePair&lt;/strong&gt; to the class defined in the XrmExtensionMethods.cs file.        &lt;br /&gt;
&lt;br /&gt;
You should find 22 instances.        &lt;br /&gt;
&lt;br /&gt;
If you do not see the Reference.cs file, in the &lt;strong&gt;Solution Explorer&lt;/strong&gt;, click the &lt;strong&gt;Show All Files&lt;/strong&gt; button.&lt;/li&gt;
&lt;/ol&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Consume the Organization Services
&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Double click Program.cs to open the file.&lt;/li&gt;
&lt;li&gt;Paste the following code to the file.      &lt;br /&gt;
&lt;pre class="csharp" name="code"&gt;using System;
using SoapFromConsoleApp.CrmSdk;

namespace SoapFromConsoleApp
{
    class Program
    {
        static int MaxRecordsToReturn = 1;

        static void Main(string[] args)
        {
            using (var xrmServiceClient = InstantiateXrmService())
            {
                var accountId = CreateCrmAccount(xrmServiceClient);

                var account = QueryCrmAccount(xrmServiceClient, accountId);

                UpdateCrmAccount(xrmServiceClient, account);

                DeleteCrmAccount(xrmServiceClient, accountId);
            }
        }

        private static Guid CreateCrmAccount(OrganizationServiceClient xrmServiceClient)
        {
            var account = new Entity
            {
                LogicalName = "account"
            };

            account["name"] = "ABC Inc.";
            account["telephone1"] = "111-222-3333";

            return xrmServiceClient.Create(account);
        }

        private static Entity QueryCrmAccount(OrganizationServiceClient xrmServiceClient, Guid accountId)
        {
            var query = new QueryExpression
                            {
                                EntityName = "account",
                                ColumnSet = new ColumnSet { Columns = new string[] {"name"}},
                                Orders = new []
                                             {
                                                 new OrderExpression() {AttributeName = "name", OrderType = OrderType.Ascending}
                                             },
                                Criteria = new FilterExpression()
                                               {
                                                   Conditions = new []
                                                                    {
                                                                        new ConditionExpression
                                                                            {
                                                                                AttributeName = "accountid",
                                                                                Operator = ConditionOperator.Equal,
                                                                                Values = new object[] {accountId}
                                                                            }
                                                                    }
                                               },
                                PageInfo = new PagingInfo {Count = MaxRecordsToReturn, PageNumber = 1, PagingCookie = null},
                            };

            var request = new OrganizationRequest() { RequestName = "RetrieveMultiple" };
            request["Query"] = query;

            OrganizationResponse response = xrmServiceClient.Execute(request);
            var results = (EntityCollection)response["EntityCollection"];

            return results.Entities[0];
        }

        private static void UpdateCrmAccount(OrganizationServiceClient xrmServiceClient, Entity account)
        {
            account["name"] = "ABC Ltd.";
            xrmServiceClient.Update(account);
        }

        private static void DeleteCrmAccount(OrganizationServiceClient xrmServiceClient, Guid accountId)
        {
            xrmServiceClient.Delete("account", accountId);
        }

        private static OrganizationServiceClient InstantiateXrmService()
        {
            var xrmServiceClient = new OrganizationServiceClient();

            // Uncomment the following line if you want to use an explicit CRM account to make the service calls
            // xrmServiceClient.ClientCredentials.Windows.ClientCredential = new NetworkCredential("administrator", "admin", "Contoso");

            return xrmServiceClient;
        }
    }
}&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Compile and run the application. &lt;/li&gt;
&lt;/ol&gt;
In the above console application, I have shown you how to CRM account record, query it, then update it by change its name, and delete it at last. &lt;br /&gt;
&lt;br /&gt;
Note that this is an old-fashioned way to make service calls to CRM server (which might be the reason that this is not in CRM SDK document), but I believe there are scenarios that you might need this approach. &lt;br /&gt;
Finally, if you run into any problem using the code, please let me know. I realized that I might need to look into the SetItem method a little further to make sure the serialization is done properly, since the code was taken from CRM SDK Silverlight project. If you have already spotted any problem, please kindly let me know. &lt;br /&gt;
&lt;br /&gt;
I have also provided a download link of the entire project that I compiled (on SkyDrive). &lt;br /&gt;
&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://skydrive.live.com/embedicon.aspx/.Public/CRMBlogFiles/SoapFromConsoleApp%20^5CRM2011^6.zip?cid=f12f30f89a11f618&amp;amp;sc=documents" style="background-color: #fcfcfc; height: 115px; padding: 0; width: 98px;" title="Preview"&gt;&lt;/iframe&gt;&lt;br /&gt;
Hope this helps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5472436831307966815-6478455811018554458?l=danielcai.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FqGH3kbyOWfn3NheaH5zRdvgCrQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FqGH3kbyOWfn3NheaH5zRdvgCrQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FqGH3kbyOWfn3NheaH5zRdvgCrQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FqGH3kbyOWfn3NheaH5zRdvgCrQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DanielCai/~4/fqP_bmyUhf0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/6478455811018554458/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://danielcai.blogspot.com/2011/06/step-by-step-walkthrough-use-crm-2011.html#comment-form" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/6478455811018554458?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/6478455811018554458?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DanielCai/~3/fqP_bmyUhf0/step-by-step-walkthrough-use-crm-2011.html" title="Step-by-step Walkthrough: Use CRM 2011 Organization (SOAP) Service from a Console Application" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><thr:total>6</thr:total><feedburner:origLink>http://danielcai.blogspot.com/2011/06/step-by-step-walkthrough-use-crm-2011.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkENQ3w9eSp7ImA9WhZbGUk.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815.post-3748283991902030919</id><published>2011-04-09T22:57:00.023-06:00</published><updated>2011-06-24T13:44:52.261-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-24T13:44:52.261-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM 2011" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM Client Script" /><title>Microsoft Dynamics CRM 2011 JavaScript Development Cheat Sheet</title><content type="html">&lt;p&gt;Microsoft Dynamics CRM 2011 has dramatically changed the JavaScript programming experience when compared to CRM4. So I thought a cheat sheet (or a quick reference document) would help myself get familiar with the latest programming interface. You may download it from the following link on &lt;a href="https://skydrive.live.com/?cid=f12f30f89a11f618#cid=F12F30F89A11F618&amp;id=F12F30F89A11F618%21129"&gt;my Windows Live SkyDrive&lt;/a&gt;. (Also available at &lt;a href="https://sites.google.com/site/danielwcai/crmblog/MSCRM2011JavaScriptDevelopmentCheatSheet.pdf"&gt;Google Site&lt;/a&gt;). &lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;iframe title ="Preview" scrolling="no" marginheight="0" marginwidth="0" frameborder="0" style="width:98px;height:115px;padding:0;background-color:#fcfcfc;" src="https://skydrive.live.com/embedicon.aspx/.Public/CRMBlogFiles/MSCRM%202011%20JavaScript%20Development%20Cheat%20Sheet.pdf?cid=f12f30f89a11f618&amp;sc=documents"&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;p&gt;On a side note, some of you may have been curious about (or possibly somehow frustrated by) such API level changes made by MSCRM team in CRM v2011. I think the changes are made for good reasons. &lt;/p&gt;&lt;ol&gt;&lt;li&gt;The first motivation is really about the industry standard of JavaScript development. In CRM 4, we use crmForm.all.xxx syntax everywhere, which is really convenient. But it is actually against the best practice in JavaScript development, as this technique is not supported by any other browsers. You may think that CRM2011 is only supported by IE at this moment anyway, why would I care about any other browsers. You are right, CRM2011 is not a cross-browser application, but it doesn't mean that is going to be the case forever. I am relatively confident that the next MSCRM will be a cross-browser one. In fact, I had a close look of some CRM 2011 JavaScript code the other day, I was under the impression that CRM team (probably part of the team) might have tried to make MSCRM 2011 a cross-browser one, but they didn't make the cut for some reasons. &lt;/li&gt;
&lt;li&gt;The new CRM 2011 library provides a lot more richer API than CRM4. So we shall require less hacking code if we can take full advantage of the new library, which makes our code more compatible with the future versions. &lt;/li&gt;
&lt;/ol&gt;Note that this cheat sheet primarily focused on the development of CRM &lt;b&gt;form&lt;/b&gt; scripts. It didn't cover all aspects of CRM client development practice. If you need a more comprehensive reference of CRM 2011 development practice, &lt;a href="http://msdn.microsoft.com/en-us/library/gg309408.aspx"&gt;SDK document&lt;/a&gt; (&lt;a href="http://www.microsoft.com/download/en/details.aspx?id=24004"&gt;Download Link&lt;/a&gt;) is the best resource available. &lt;br /&gt;
&lt;br /&gt;
As a final note, you should quit using crmForm.all.xxx syntax in CRM 2011 if you are still doing so. ;-)&lt;br /&gt;
&lt;br /&gt;
I hope the cheat sheet useful, and it worths a small spot on your cubicle wall(s). ;-)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;[Update - Jun 6, 2011]&lt;/b&gt; I uploaded a new version with many fixes of the problems caused by copy/previous version. I didn't realize the problems until last week, mainly because I don't work with CRM on day-to-day basis. Sorry for the inconvenience.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5472436831307966815-3748283991902030919?l=danielcai.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UoseWFL08SqUXcGZpAe2jxTIADg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UoseWFL08SqUXcGZpAe2jxTIADg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UoseWFL08SqUXcGZpAe2jxTIADg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UoseWFL08SqUXcGZpAe2jxTIADg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DanielCai/~4/04-f7LKSlVs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/3748283991902030919/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://danielcai.blogspot.com/2011/04/microsoft-dynamics-crm-2011-javascript.html#comment-form" title="18 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/3748283991902030919?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/3748283991902030919?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DanielCai/~3/04-f7LKSlVs/microsoft-dynamics-crm-2011-javascript.html" title="Microsoft Dynamics CRM 2011 JavaScript Development Cheat Sheet" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><thr:total>18</thr:total><feedburner:origLink>http://danielcai.blogspot.com/2011/04/microsoft-dynamics-crm-2011-javascript.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IBSXs_fip7ImA9WhZRFEw.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815.post-8872929208971786671</id><published>2011-04-09T09:52:00.000-06:00</published><updated>2011-04-09T22:59:18.546-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-09T22:59:18.546-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="CRM Spell Check" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM 2011" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM 4" /><category scheme="http://www.blogger.com/atom/ns#" term="IE Addon" /><category scheme="http://www.blogger.com/atom/ns#" term="IE Spell Check" /><title>Add Spell Checker to Microsoft Dynamics CRM Application</title><content type="html">&lt;p&gt;In CRM projects, I often hear the complaints about the lack of spell checking feature in CRM application. Most business users tend to believe it's the application's fault for not having such important feature. In fact, spell checking should be something offered by browser. If you have ever tried any other browsers in the market, you may have noticed that most browsers (Chrome, Opera, Firefox, Safari) nowadays are offering spell checking feature out-of-the-box. IE has been pretty much the only exception among those modern browsers in this perspective. &lt;/p&gt;&lt;p&gt;I was previously aware of an IE addon called ieSpell which offers spell checking solution in IE. But it is far from being an ideal solution because it doesn't instantly highlight any wrong spellings, which in my opinion makes it almost useless. &lt;/p&gt;&lt;p&gt;I happened to come across another free IE addon called &lt;a href="http://www.speckie.com/"&gt;Speckie&lt;/a&gt; this week which I believe provides a much better spell checking solution in IE. So I thought I should share with everyone here. &lt;/p&gt;&lt;p&gt;After you have installed Speckie, you may notice that Speckie doesn't perform spell check for single line textbox field by default. If you want to enable this option, you can go to IE &lt;strong&gt;Tools&lt;/strong&gt; menu, and click &amp;quot;&lt;strong&gt;Speckie Options&lt;/strong&gt;&amp;quot;. &lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_kr8_hSygrMo/TaCdg3qxXsI/AAAAAAAAAT0/2a8Ef76ltvI/s1600-h/Speckie%20Options%5B3%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Speckie Options" border="0" alt="Speckie Options" src="http://lh3.ggpht.com/_kr8_hSygrMo/TaCdhMNaZKI/AAAAAAAAAT4/ls9So6q3hX4/Speckie%20Options_thumb%5B1%5D.png?imgmax=800" width="248" height="398" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Then you can check &amp;quot;&lt;strong&gt;Enable spell check in single line edit fields&lt;/strong&gt;&amp;quot; option, and click &amp;quot;&lt;strong&gt;Apply&lt;/strong&gt;&amp;quot; button. &lt;/p&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_kr8_hSygrMo/TaCdh9PITJI/AAAAAAAAAT8/97hRBvHlVQ0/s1600-h/Configure%20Speckie%5B3%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Configure Speckie" border="0" alt="Configure Speckie" src="http://lh6.ggpht.com/_kr8_hSygrMo/TaCdiTrA8zI/AAAAAAAAAUA/76KtI7qeD7s/Configure%20Speckie_thumb%5B1%5D.png?imgmax=800" width="565" height="652" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;After you have done so, you should restart your browser in order for the option to take effect. &lt;/p&gt;&lt;p&gt;The following are a few screenshots in action. &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Speckie spell checking for MSCRM4 textbox field&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_kr8_hSygrMo/TaCf-qZKGII/AAAAAAAAAUI/zXoWk2V3HGg/s1600-h/Spell%20Check%20for%20CRM4%20Textbox%20Field%5B3%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Spell Check for CRM4 Textbox Field" border="0" alt="Spell Check for CRM4 Textbox Field" src="http://lh5.ggpht.com/_kr8_hSygrMo/TaCf_OEIwhI/AAAAAAAAAUM/AnuhP0G9EeE/Spell%20Check%20for%20CRM4%20Textbox%20Field_thumb%5B1%5D.png?imgmax=800" width="636" height="410" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Speckie spell checking for MSCRM4 notes field&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_kr8_hSygrMo/TaCf_aM65RI/AAAAAAAAAUQ/QZZT0AKeeZo/s1600-h/Spell%20Check%20for%20CRM4%20Notes%20Field%5B3%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Spell Check for CRM4 Notes Field" border="0" alt="Spell Check for CRM4 Notes Field" src="http://lh3.ggpht.com/_kr8_hSygrMo/TaCf_5xDwLI/AAAAAAAAAUU/op0hq5MCwzk/Spell%20Check%20for%20CRM4%20Notes%20Field_thumb%5B1%5D.png?imgmax=800" width="474" height="203" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Speckie spell checking for MSCRM4 textbox field&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_kr8_hSygrMo/TaCgACAwsWI/AAAAAAAAAUY/dm8CJNOdups/s1600-h/Spell%20Check%20for%20CRM2011%20Textbox%20Field%5B3%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Spell Check for CRM2011 Textbox Field" border="0" alt="Spell Check for CRM2011 Textbox Field" src="http://lh4.ggpht.com/_kr8_hSygrMo/TaCgAlSRo6I/AAAAAAAAAUc/sbfN6hGko9M/Spell%20Check%20for%20CRM2011%20Textbox%20Field_thumb%5B1%5D.png?imgmax=800" width="499" height="376" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I have only been using this addon for a couple of days, I cannot endorse the quality and reliability of this addon. But I am so far very happy with it. &lt;/p&gt;&lt;p&gt;Hope this helps. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5472436831307966815-8872929208971786671?l=danielcai.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/u-KBJNO-7XIhTxgkmNOQlBLZ5iM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/u-KBJNO-7XIhTxgkmNOQlBLZ5iM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/u-KBJNO-7XIhTxgkmNOQlBLZ5iM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/u-KBJNO-7XIhTxgkmNOQlBLZ5iM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DanielCai/~4/Qt8UGbwn5Aw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/8872929208971786671/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://danielcai.blogspot.com/2011/04/add-spell-checker-to-microsoft-dynamics.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/8872929208971786671?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/8872929208971786671?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DanielCai/~3/Qt8UGbwn5Aw/add-spell-checker-to-microsoft-dynamics.html" title="Add Spell Checker to Microsoft Dynamics CRM Application" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_kr8_hSygrMo/TaCdhMNaZKI/AAAAAAAAAT4/ls9So6q3hX4/s72-c/Speckie%20Options_thumb%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://danielcai.blogspot.com/2011/04/add-spell-checker-to-microsoft-dynamics.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEFQ3kyeSp7ImA9WhdQF0U.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815.post-8704446430403520296</id><published>2011-04-07T21:21:00.015-06:00</published><updated>2011-08-19T13:03:32.791-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-19T13:03:32.791-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Off Topic" /><title>Reached 50,000 Page Views!</title><content type="html">I happened to have noticed today that my blog has just reached 50,000 page views this week, based on the data from Google Analytics. You may have noticed that I have a Blogger pageview widget which is only counting to about 43,500 views as of today. The reason for the difference is, PageView stats function was not available on Blogger platform in the very beginning. Believe me, I didn't lie to you, the following is the Google Analytics stats information that I took the screenshot about 90 minutes ago.  &lt;a href="http://lh3.ggpht.com/_kr8_hSygrMo/TZ5_GkV-2zI/AAAAAAAAATo/O2bmEzpXssI/s1600-h/50000PageViews%5B3%5D.png"&gt;&lt;img alt="50000PageViews" border="0" height="345" src="http://lh4.ggpht.com/_kr8_hSygrMo/TZ5_HRSwcKI/AAAAAAAAATs/YXBlpcQnl6g/50000PageViews_thumb%5B1%5D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="50000PageViews" width="644" /&gt;&lt;/a&gt; &lt;br /&gt;
Please don't think that I'm trying to show off here. With only 50,000 Page Views in total in one and half years, there is nothing to show off about. IMHO, I am nowhere close to the page views of &lt;a href="http://ladygaga.blogspot.com/"&gt;any&lt;/a&gt; &lt;a href="http://www.ladygagamusicblog.com/"&gt;Lady&lt;/a&gt; &lt;a href="http://ladygaga.blog.cz/"&gt;Gaga&lt;/a&gt; &lt;a href="http://gagajournal.blogspot.com/"&gt;fan blogs&lt;/a&gt;, and I don't think that I would ever be able to make this blog as popular as they are any time soon. &lt;br /&gt;&lt;br /&gt;
About two years ago (Apr 29, 2009 to be exact), I felt a little bored so I started the journey of writing a technical blog. Did I just sound very politic? YES, I suppose that I was a bit. In fact, one of the important reason is, I don't usually keep track of every details in a very organized way, sometimes I can lose track of what I just did a few days ago or probably a few months ago. In China, we have a say, "The palest ink is better than the best memory". So writing a technical blog not only helps challenges myself, but also has helped me keep track of such details. However, there is another important motivation, which should be kept just between you and me, I have been sick of walking into an interview room with a piece of resume in my hand, which doesn't prove anything nowadays. So I thought writing a technical blog would prove that I am capable of doing some little things, that was just the selfish part of myself. However, I didn't realize in the beginning that writing a blog was actually quite a challenge. As you may not appreciate, it did take me quite a lot of personal spare time to keep this blog updated, even though I am well aware that I haven't actually written much so far. I have to admit, my writing was terribly slow and my English was often broken (thanks for bearing with me all the time), and often times I had to revise my blog posts again and again just trying to make them readable. On a side note, I have quite a lot other topics in my mind that I just haven't got the time to write them down, including some pretty cool (only in my own opinion though) ideas that I wanted to implement on MSCRM platform. &lt;br /&gt;&lt;br /&gt;
My blog has been mostly focused on MSCRM development practice to this date. I might be switching to some other topics in the future, as MSCRM is no longer something that I am working on daily basis. But I will try to write some CRM posts when I can find time. &lt;br /&gt;&lt;br /&gt;

Thanks to the CRM community for your support all the time, and more importantly your patience while listening to my mumblings. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5472436831307966815-8704446430403520296?l=danielcai.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FtavDxSzIe6dyRdLpo-MN5NR3rI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FtavDxSzIe6dyRdLpo-MN5NR3rI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FtavDxSzIe6dyRdLpo-MN5NR3rI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FtavDxSzIe6dyRdLpo-MN5NR3rI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DanielCai/~4/z5JMfu6PdSE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/8704446430403520296/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://danielcai.blogspot.com/2011/04/reached-50000-page-views.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/8704446430403520296?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/8704446430403520296?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DanielCai/~3/z5JMfu6PdSE/reached-50000-page-views.html" title="Reached 50,000 Page Views!" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_kr8_hSygrMo/TZ5_HRSwcKI/AAAAAAAAATs/YXBlpcQnl6g/s72-c/50000PageViews_thumb%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://danielcai.blogspot.com/2011/04/reached-50000-page-views.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUEQ3c7eCp7ImA9WhZSGEg.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815.post-6768133320451210041</id><published>2011-04-03T11:29:00.005-06:00</published><updated>2011-04-03T11:36:42.900-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-03T11:36:42.900-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM Troubleshooting" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM 4" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM Deployment Manager" /><title>MSCRM 4.0 Error: "Record is Unavailable" after CRM Organization Import</title><content type="html">I recently ran into an interesting CRM error after I imported a CRM organization. I got the following error when I was trying to navigate to CRM homepage, after the CRM organization was &lt;b&gt;successfully&lt;/b&gt; imported. &lt;br /&gt;
&lt;pre&gt;Record is Unavailable
The requested record was not found or you do not have sufficient permissions to view it. &lt;/pre&gt;&lt;a href="http://lh5.ggpht.com/_kr8_hSygrMo/TZiuhOiIvWI/AAAAAAAAATY/5nJeLNycnls/s1600-h/CMIS%20Import%20Organization%20Error%5B3%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="CMIS Import Organization Error" border="0" alt="CMIS Import Organization Error" src="http://lh6.ggpht.com/_kr8_hSygrMo/TZiuhmQ3arI/AAAAAAAAATc/cxGrTq2edVU/CMIS%20Import%20Organization%20Error_thumb%5B1%5D.png?imgmax=800" width="467" height="236" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The solution was actually quite simple, you just have to reboot your server after you have imported a CRM organization. I got stumbled upon this error at least twice recently, so I thought I should blog it in case that in the case that you happen to run into this error too. &lt;br /&gt;
&lt;br /&gt;
I believe the error happens when you try to refresh your CRM environment using the same CRM organization name in Deployment Manager before and after the import. My situation is, I had a CRM organization name called &lt;strong&gt;ABC&lt;/strong&gt; previously. But I need to refresh this particular environment (UAT) by using a full db backup from another environment (Production). So I have to create a temporary CRM organization in my UAT server's Deployment Manager, and then I can import the production db backup in order to use the same CRM organization name (&lt;strong&gt;ABC&lt;/strong&gt;). My sense is the CRM organization name was not changed during the ABC –&amp;gt; Temp –&amp;gt; ABC import process, CRM Web application was on the assumption that nothing has changed, so it didn't try to refresh all cached CRM application data including CRM organization information, metadata, etc., which pitifully caused this error. &lt;br /&gt;
&lt;br /&gt;
I believe you could also resolve this problem by restarting all CRM related services on the CRM server, including IIS, CRM Asynchronous Service, and possibly Email Router, etc. But rebooting is always the easiest solution to try first when we have problems with our computers, isn't it? &lt;br /&gt;
&lt;br /&gt;
Hope this helps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5472436831307966815-6768133320451210041?l=danielcai.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XDTSZt-ut-2YpwHRGlncsiWnMwc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XDTSZt-ut-2YpwHRGlncsiWnMwc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XDTSZt-ut-2YpwHRGlncsiWnMwc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XDTSZt-ut-2YpwHRGlncsiWnMwc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DanielCai/~4/rgFD89AziJ8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/6768133320451210041/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://danielcai.blogspot.com/2011/04/mscrm-40-error-is-unavailable-after-crm.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/6768133320451210041?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/6768133320451210041?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DanielCai/~3/rgFD89AziJ8/mscrm-40-error-is-unavailable-after-crm.html" title="MSCRM 4.0 Error: &amp;quot;Record is Unavailable&amp;quot; after CRM Organization Import" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_kr8_hSygrMo/TZiuhmQ3arI/AAAAAAAAATc/cxGrTq2edVU/s72-c/CMIS%20Import%20Organization%20Error_thumb%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://danielcai.blogspot.com/2011/04/mscrm-40-error-is-unavailable-after-crm.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cGQH0-cSp7ImA9WhZRFUs.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815.post-7876260542835652887</id><published>2011-03-07T22:47:00.012-07:00</published><updated>2011-04-11T16:30:21.359-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-11T16:30:21.359-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM Customization" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM 4" /><title>MSCRM 4.0: Customize the Lookup View of Role Entity</title><content type="html">In my current project, I developed a custom workflow called IsUserInRole which helps determine whether a user is in a particular role. It all worked fine, until we deployed the workflows to our UAT and production environments.   &lt;br /&gt;
&lt;br /&gt;
Let me try to explain what the problem is. The custom workflow has a lookup input parameter for Role entity which allows the business user to specify a CRM role to test whether the current user or a specified user has that particular role. In our local VPC development environment, we tried to keep everything simple, we only had a root business unit for the CRM installation. So the IsUserInRole workflow can show all the roles in the CRM system without any confusion. But in our UAT and production environments, we had more than one business unit, so all the roles that we created in the root business unit were automatically copied to the child business units, which caused significant confusion for the CRM workflows that used IsUserInRole workflow. When we were trying to use CRM lookup to pick a role, we got something like the following screen shot, which you could see a number of roles in the same name but they actually belonged to different business units. This created a challenge for us, as we could easily pick a wrong role, so that the custom workflow would not function in the way that we expected.   &lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/_kr8_hSygrMo/TYYqT2i2bGI/AAAAAAAAAS4/9jpxL03zFAw/s1600-h/CRM%20Default%20Role%20Lookup%20View%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="CRM Default Role Lookup View" border="0" alt="CRM Default Role Lookup View" src="http://lh3.ggpht.com/_kr8_hSygrMo/TYYqUdrz1FI/AAAAAAAAAS8/hx0mzvApF4U/CRM%20Default%20Role%20Lookup%20View_thumb%5B1%5D.png?imgmax=800" width="509" height="506" /&gt;&lt;/a&gt;   &lt;br /&gt;
I first thought this would be an easy job, as CRM allows us to define almost any views. But when I fired up the customization page of Role entity, I realized that is a totally different story, CRM didn't provide a way that allows me to customize any view for role entity. I went on thinking about using exported role entity customization xml file, but I hit a wall again as I noticed that the role entity customization XML file was almost empty, it had no view information or whatsoever in the export xml file.   &lt;br /&gt;
&lt;br /&gt;
After a little struggle, I realized that I might be able to take a shortcut by directly typing in CRM view customization page's URL with the view's ID. So I took a peek of CRM database using the following SQL query.   &lt;br /&gt;
&amp;#160;&lt;a href="http://lh6.ggpht.com/_kr8_hSygrMo/TXWyjG9APpI/AAAAAAAAASI/3Btv_eLMvUA/s1600-h/SQLQueryforRoleLookupView7.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="SQL Query for Role Lookup View" border="0" alt="SQL Query for Role Lookup View" src="http://lh3.ggpht.com/_kr8_hSygrMo/TXWyjvlHG6I/AAAAAAAAASM/_xugfSvDb08/SQLQueryforRoleLookupView_thumb5.png?imgmax=800" width="623" height="329" /&gt;&lt;/a&gt;  &lt;br /&gt;
After running the above SQL script, I have got the view's ID. What I need to do next is, go to a customizable entity, and double click one of its views to launch a view customization page, and I press Ctrl+N key to launch the page in a new window so that I can have IE address bar. Then I replace the ID parameter in the address bar with the view ID I have just got from previous SQL query, so that I have a URL in the following format.   &lt;br /&gt;
&lt;br /&gt;
http://&amp;lt;CrmServer&amp;gt;/&amp;lt;CrmOrganizationName&amp;gt;/tools/vieweditor/viewManager.aspx?id={61F8D435-8E25-4751-8330-5969506EF536}  &lt;br /&gt;
&lt;br /&gt;
As soon as I have the above URL typed in and hit my browser's Go button, I get just a regular view customization screen. Whew!   &lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/_kr8_hSygrMo/TYYqVIdbHLI/AAAAAAAAATA/oKuYj88Hq8k/s1600-h/Edit%20CRM%20Role%20Lookup%20View%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Edit CRM Role Lookup View" border="0" alt="Edit CRM Role Lookup View" src="http://lh3.ggpht.com/_kr8_hSygrMo/TYYqVrl-90I/AAAAAAAAATE/OmJONhkrBas/Edit%20CRM%20Role%20Lookup%20View_thumb%5B1%5D.png?imgmax=800" width="672" height="421" /&gt;&lt;/a&gt;   &lt;br /&gt;
You might already know, as soon as we get to this point, the rest is fairly easy. I added &amp;quot;Business Unit&amp;quot; column to the view using &amp;quot;&lt;b&gt;Add View Columns&lt;/b&gt;&amp;quot; button on the right, and then published all CRM customization changes. After that, I came back to my custom workflow and I noticed that I could see the Business Unit column in the lookup view.&amp;#160; &lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/_kr8_hSygrMo/TYYqWdRktUI/AAAAAAAAATI/r9zPF27vRfw/s1600-h/CRM%20Role%20Lookup%20View%20with%20Business%20Unit%20Column%5B7%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="CRM Role Lookup View with Business Unit Column" border="0" alt="CRM Role Lookup View with Business Unit Column" src="http://lh3.ggpht.com/_kr8_hSygrMo/TYYqWowieNI/AAAAAAAAATM/iFqz5K8nD3M/CRM%20Role%20Lookup%20View%20with%20Business%20Unit%20Column_thumb%5B3%5D.png?imgmax=800" width="487" height="509" /&gt;&lt;/a&gt;   &lt;br /&gt;
I believe this technique not only applies to the views of CRM role entity, you should also be able to use it to customize almost all views of core CRM entities such as Team, Queue, Workflow, etc., if you ever happen to have this kind of needs.&amp;#160;&amp;#160; &lt;br /&gt;
&lt;br /&gt;
Hope this helps. &lt;br /&gt;
&lt;br /&gt;
P.S. I would have used a different solution for my custom workflow if I foresaw the problem of using Role lookup that I have mentioned, but I do hope this blog post helps if you ever come across similar needs in your project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5472436831307966815-7876260542835652887?l=danielcai.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/v9_flRM0-EQ9sdu-hUPxX6Uf-Gk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/v9_flRM0-EQ9sdu-hUPxX6Uf-Gk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/v9_flRM0-EQ9sdu-hUPxX6Uf-Gk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/v9_flRM0-EQ9sdu-hUPxX6Uf-Gk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DanielCai/~4/9GitkjK8p2w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/7876260542835652887/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://danielcai.blogspot.com/2011/03/mscrm-40-customize-crm-role-lookup-view.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/7876260542835652887?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/7876260542835652887?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DanielCai/~3/9GitkjK8p2w/mscrm-40-customize-crm-role-lookup-view.html" title="MSCRM 4.0: Customize the Lookup View of Role Entity" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_kr8_hSygrMo/TYYqUdrz1FI/AAAAAAAAAS8/hx0mzvApF4U/s72-c/CRM%20Default%20Role%20Lookup%20View_thumb%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://danielcai.blogspot.com/2011/03/mscrm-40-customize-crm-role-lookup-view.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkABRXo5eyp7ImA9WhZQEEQ.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815.post-936285629159270407</id><published>2011-03-06T19:19:00.026-07:00</published><updated>2011-04-17T21:52:34.423-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-17T21:52:34.423-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Off Topic" /><title>Taking a Break, and Looking for Business Opportunities</title><content type="html">After three years (3 years and 5 months to be accurate) of hard working days with my current employer, I decided to take a short break and give myself a little bit time to think about what I am going to do next.&lt;br /&gt;
&lt;br /&gt;
As a quick retrospect of the last 3 years, I believe I have gained significant experience with Microsoft Dynamics CRM, SharePoint, .NET, and Enterprise Application Development. I worked hard, thought hard, and made sure that I have been doing the right thing for my project and the applications that I was developing. I tried to discipline myself by leveraging the best practices that I have learned from the community, which has been a great achieving 3 years.&lt;br /&gt;
&lt;br /&gt;
March 31 is going to be my last day with my current employer, which means on April 1st, I will be jobless (What a April fool's day!).&lt;br /&gt;
&lt;br /&gt;
We have a small local community of Microsoft Dynamics CRM development work in the city where I live. What this means is, I might have to go with different development practice, such as .NET, SharePoint (admittedly, I much prefer MSCRM when comparing to SharePoint) or even something totally different (maybe Ruby or Python). In other words, I might be leaving MSCRM community for a short period of time. But I will still try to keep an eye on Microsoft Dynamics CRM, particularly I will stay on &lt;a href="http://social.microsoft.com/Forums/en-US/crmdevelopment/threads"&gt;Microsoft Dynamics CRM Development Forum&lt;/a&gt;&amp;nbsp;by helping the community whenever I can find time.&lt;br /&gt;
&lt;br /&gt;
Speaking about the business opportunities that I am looking for, I am listing what I can offer to help for MSCRM platform.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Microsoft Dynamics CRM Development&lt;/li&gt;
&lt;li&gt;Microsoft Dynamics CRM Solution Architecting&lt;/li&gt;
&lt;li&gt;Microsoft Dynamics CRM Planning and Implementation&lt;/li&gt;
&lt;li&gt;Microsoft Dynamics CRM Data Migration and Data Integration&lt;/li&gt;
&lt;li&gt;Microsoft Dynamics CRM Document Automation and SharePoint Integration Solution&lt;/li&gt;
&lt;li&gt;Microsoft Dynamics CRM Development Training&lt;/li&gt;
&lt;/ol&gt;When it comes to training, most people tend to overlook its importance. Microsoft Dynamics CRM is a complex business application platform, which requires quite steep learning curve. Training not only helps you save your investment, but also helps you get the job done faster with better quality. I have an extreme passion about writing quality software code (you may argue that I am actually writing poor code, but at least I am trying to be better everyday), so I think I can help build up your team resource in one way or another, by sharing the lessons and experiences that I have learned during the past years.&lt;br /&gt;
&lt;br /&gt;
If you want to offer me a job or a contract work (it doesn't have to be MSCRM), please do so, I am very positive that I can help in certain ways. If in any case that you may want to offer me a technical executive position, you will have to buy me a cup of coffee so that we can sit down and have a talk. ;-)&lt;br /&gt;
&lt;br /&gt;
You may reach me by my personal email at (danielwcai at gmail dot com).&lt;br /&gt;
&lt;br /&gt;
Cheers!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;[Update - Mar 23, 2011]&lt;/b&gt; I have decided to pursue a local contract position, which is not relevant to MSCRM. Thanks for your time. I apologize if this blog post has caused any confusions in the community.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5472436831307966815-936285629159270407?l=danielcai.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/k1D3q8L3GzfxwgInOgvpz19qB8I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k1D3q8L3GzfxwgInOgvpz19qB8I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/k1D3q8L3GzfxwgInOgvpz19qB8I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k1D3q8L3GzfxwgInOgvpz19qB8I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DanielCai/~4/8lMMk2rRc6I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/936285629159270407/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://danielcai.blogspot.com/2011/03/taking-break-looking-for-business.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/936285629159270407?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/936285629159270407?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DanielCai/~3/8lMMk2rRc6I/taking-break-looking-for-business.html" title="Taking a Break, and Looking for Business Opportunities" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://danielcai.blogspot.com/2011/03/taking-break-looking-for-business.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcHRXg9fip7ImA9WhZSGUo.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815.post-5467063847370963907</id><published>2011-02-16T22:54:00.017-07:00</published><updated>2011-04-04T21:27:14.666-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-04T21:27:14.666-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM 4" /><category scheme="http://www.blogger.com/atom/ns#" term="Database Normalization" /><title>MSCRM vs Normalization?</title><content type="html">Today I ran into a silly discussion about Microsoft Dynamics CRM and normalization in a meeting. A senior consultant in my team made a statement that "MSCRM database is not normalized" during the meeting. I was astonished and shocked when I heard this statement. I challenged him and asked him to prove where his point stands. He claimed that CRM picklist metadata is not normalized. Well, that's sort of true, we cannot re-use a picklist across entities in CRM 4.0, and I told him that's not going to be the case in CRM 2011 which has the support of global option set so that you can define reusable picklist options. He didn't give in to that because the project we were discussing is still using CRM 4.0. The silly part of the discussion was, I firmly believed that MSCRM platform supports and encourages normalization in every possible aspect, but his point was that MSCRM is totally the opposite of database normalization (just because of the picklist options),&amp;nbsp;which was so wrong.&lt;br /&gt;
&lt;br /&gt;
Let me have a quick summary about my points:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Microsoft Dynamics CRM database itself has respected database normalization principle in general. But some CRM metadata tables and some few business entities are not fully normalized for either performance reasons, or due to constraints of the platform. &lt;/li&gt;
&lt;li&gt;Microsoft Dynamics CRM fully utilizes relational data model which is the foundation of the platform. &lt;/li&gt;
&lt;li&gt;Microsoft Dynamics CRM fully encourages normalization through its flexible entity relationship models including one to many, and many to many. Those relationships are not only available to two different entities, but also can be applied to the same entity through self-referential relationship. What level of normalization that your custom application can achieve on CRM platform really depends on how you design your CRM entities and their relationships. You use the relationships between entities to normalize your data, which is an almost identical approach to what you would do in any traditional data modeling practice, where a CRM entity can be seen as a database table, while a CRM field (or attribute) can be seen as a table column. In this sense, CRM entity &amp;amp; database table are pretty much a pair of interchangeable terms, so are CRM field &amp;amp; table column. &lt;/li&gt;
&lt;li&gt;If you are currently using CRM 4.0, and you want to reuse some picklists. An alternative solution would be using a lookup entity, which contains all the options, so they can be re-used and referenced by different entities. If you want to provide better usability, you can use &lt;a href="http://danielcai.blogspot.com/2009/10/crm-40-convert-lookup-field-to-picklist.html"&gt;a script from one of my other blog posts&lt;/a&gt; to convert the lookups into picklists.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;When it comes to the discussion about the level of database normalization that we should be actually pursuing in the real-world project, I have seen some people really become religious simply because that's what they have been told from the textbook. I don't want to start a war here, but I do want to make my points quickly, my take or solution to this issue is, normalize to the point that your data model looks logic enough so that it reflects and satisfies your business requirements, while not sacrificing the scalability and&amp;nbsp;maintainability of your application.&lt;br /&gt;
&lt;br /&gt;
Cheers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5472436831307966815-5467063847370963907?l=danielcai.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/G0IllEFNyLvEopDafw-nhRYJZt0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G0IllEFNyLvEopDafw-nhRYJZt0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/G0IllEFNyLvEopDafw-nhRYJZt0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G0IllEFNyLvEopDafw-nhRYJZt0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DanielCai/~4/nRbJOOfqgzI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/5467063847370963907/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://danielcai.blogspot.com/2011/02/mscrm-vs-normalization.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/5467063847370963907?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/5467063847370963907?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DanielCai/~3/nRbJOOfqgzI/mscrm-vs-normalization.html" title="MSCRM vs Normalization?" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><thr:total>5</thr:total><feedburner:origLink>http://danielcai.blogspot.com/2011/02/mscrm-vs-normalization.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMNQn07eip7ImA9Wx9UGEU.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815.post-6651711223104633493</id><published>2011-02-14T21:37:00.006-07:00</published><updated>2011-02-16T12:11:33.302-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-16T12:11:33.302-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Jet Database Engine" /><category scheme="http://www.blogger.com/atom/ns#" term="Data Access" /><title>Solution: The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine</title><content type="html">Today, after I uploaded one of my ETL data integration components (written in C#) from local 32-bit Windows System to our server environment which is running on Windows 2008 R2 64-bit system, my application blew up with the following error message: &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The reason for this error is, I used Jet database engine in my ETL component to read Excel file, but the Jet library was not designed for 64-bit system. The community has been suggesting to compile the code to target to x86 platform in order to cope with this issue, which is something I was reluctant to do for the obvious reasons. It's also the primary motivation that I am blogging about this issue. &lt;br /&gt;
&lt;br /&gt;
Further Google search indicates that Microsoft has released a 64-bit compatible Jet database engine last year. The following is the procedure that you may use to fix this issue if you have: &lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Download &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c06b8369-60dd-4b64-a44b-84b371ede16d&amp;amp;displaylang=en"&gt;Microsoft Access Database Engine 2010 Redistributable&lt;/a&gt; (of course you'll need to choose the right bit for your server), and install it on your server&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Change your connection string in your code or configuration file from&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;Provider=Microsoft.Jet.OLEDB.4.0;&lt;/b&gt;&lt;/span&gt; &lt;br /&gt;
to &lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;Provider=Microsoft.ACE.OLEDB.12.0;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
After I have done the above, my ETL component worked fine on the 64-bit system. &lt;br /&gt;
&lt;br /&gt;
Hope this helps if you ever run into this issue.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5472436831307966815-6651711223104633493?l=danielcai.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IjSgOKz9ZmNLfgYgO02Jb1D_eZk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IjSgOKz9ZmNLfgYgO02Jb1D_eZk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IjSgOKz9ZmNLfgYgO02Jb1D_eZk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IjSgOKz9ZmNLfgYgO02Jb1D_eZk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DanielCai/~4/J9wXgZMWbPQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/6651711223104633493/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://danielcai.blogspot.com/2011/02/solution-run-jet-database-engine-on-64.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/6651711223104633493?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/6651711223104633493?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DanielCai/~3/J9wXgZMWbPQ/solution-run-jet-database-engine-on-64.html" title="Solution: The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><thr:total>5</thr:total><feedburner:origLink>http://danielcai.blogspot.com/2011/02/solution-run-jet-database-engine-on-64.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IHQHs-eyp7ImA9WhZREEs.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815.post-5647251288614034721</id><published>2011-02-08T22:31:00.012-07:00</published><updated>2011-04-05T21:45:31.553-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-05T21:45:31.553-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM 4" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM Client Script" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM 4 Filtered Lookup" /><title>MSCRM 4.0: Filtered Lookup for "Add Existing..." Button of a CRM N:N View</title><content type="html">There has been &lt;a href="http://social.microsoft.com/Forums/en-US/crmdevelopment/thread/21e1f16f-e695-48d5-adab-0c40346bcbfe/#7f81d4b9-7c51-4450-90ae-518726f0e952"&gt;a question&lt;/a&gt; on &lt;a href="http://social.microsoft.com/Forums/en-US/crmdevelopment/threads"&gt;CRM Development Forum&lt;/a&gt; today about whether it's possible to implement a many to many filter lookup functionality.   &lt;br /&gt;
&lt;br /&gt;
About one and half years ago, I blogged &lt;a href="http://danielcai.blogspot.com/2009/09/crm4-filtered-lookup.html"&gt;an approach to implement filtering functionality for lookup fields on CRM form&lt;/a&gt;, using &lt;a href="http://crm.georged.id.au/"&gt;George Doubinski&lt;/a&gt;'s &lt;a href="http://crm.georged.id.au/post/2008/02/16/Filtering-lookup-data-in-CRM-4.aspx"&gt;invention&lt;/a&gt;. Today, I am going to take this approach one step further, and show you how to apply the same technique to achieve our purpose for a CRM associated view that represents a many-to-many relationship. The CRM form and its associated view could be something similar to the following screenshot.   &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_kr8_hSygrMo/TVIgnpm7_sI/AAAAAAAAARg/BEpvipOr2hc/s1600-h/NN%20Lookup%20Filter%20Form%5B3%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="NN Lookup Filter Form" border="0" alt="NN Lookup Filter Form" src="http://lh5.ggpht.com/_kr8_hSygrMo/TVIgobZ9m1I/AAAAAAAAARk/UfdvWtk2Wl8/NN%20Lookup%20Filter%20Form_thumb%5B1%5D.png?imgmax=800" width="644" height="340" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;In the above scrren, I made up a custom entity called &lt;strong&gt;Project&lt;/strong&gt;, which has a N:N relationship with &lt;b&gt;Account&lt;/b&gt; entity. My requirement is to only show the account records that have an industry code of &amp;quot;Service Retail&amp;quot; (Again, this is what I came up, your story could be entirely different). &lt;/p&gt;&lt;p&gt;Since I have previously documented &lt;a href="http://danielcai.blogspot.com/2009/09/crm-4-show-entitys-associated-view-in.html"&gt;how to load CRM associated view in an iframe&lt;/a&gt;, I am not going to repeat the same code here. &lt;/p&gt;&lt;p&gt;The following is the procedure that you may follow to implement the aforementioned N:N filtering lookup, which is fairly similar to &lt;a href="http://danielcai.blogspot.com/2009/09/crm4-filtered-lookup.html"&gt;the filtering functionality for lookup fields on CRM form&lt;/a&gt;: &lt;/p&gt;&lt;ol&gt;&lt;li&gt;Create a subfolder called &lt;b&gt;CustomLookup &lt;/b&gt;under your CRMWeb's &lt;b&gt;ISV &lt;/b&gt;folder. &lt;/li&gt;
&lt;li&gt;Copy &lt;b&gt;&amp;lt;crmweb folder&amp;gt;\_controls\lookup\lookupsingle.aspx&lt;/b&gt; page to your &lt;b&gt;ISV\CustomLookup &lt;/b&gt;folder which you have just created, and renamed the file to lookupmulti.aspx. &lt;/li&gt;
&lt;li&gt;Add the following script tag to &amp;lt;crmweb folder&amp;gt;\ISV\CustomLookup\lookupmulti.aspx (Please thank George for his code, this is basically a copy from his snippet with one extra line that I added to enable multi-select).&amp;#160;&amp;#160;&amp;#160; &lt;pre class="javascript" name="code"&gt;&amp;lt;%--
********************************** BEGIN: Custom Changes **********************************
This page is a copy of &amp;lt;crmweb folder&amp;gt;\_controls\lookup\lookupsingle.aspx file 
with the following custom change. 
--%&amp;gt;
&amp;lt;script runat="server"&amp;gt; 
protected override void OnLoad( EventArgs e ) 
{ 
      base.OnLoad(e); 
      crmGrid.PreRender += new EventHandler( crmgrid_PreRender ); 
} 

void crmgrid_PreRender( object sender , EventArgs e ) 
{
    // As we don't want to break any other lookups, ensure that we use workaround only if
    // search parameter set to fetch xml.
    if (crmGrid.Parameters["search"] != null &amp;amp;&amp;amp; crmGrid.Parameters["search"].StartsWith("&amp;lt;fetch")) 
    { 
        crmGrid.Parameters.Add("fetchxml", crmGrid.Parameters["search"]);  

        // searchvalue needs to be removed as it's typically set to a wildcard '*' 
        crmGrid.Parameters.Remove("searchvalue");

        // Allow multi-select
        crmGrid.MaximumSelectableItems = -1;

        // Icing on a cake - ensure that user cannot create new new record from the lookup window
        this._showNewButton = false; 
    } 
}
&amp;lt;/script&amp;gt; 
&amp;lt;%--
********************************** END: Custom Changes **********************************
--%&amp;gt;&lt;/pre&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Use the script in &lt;a href="http://danielcai.blogspot.com/2009/09/crm-4-show-entitys-associated-view-in.html"&gt;my previous blog post&lt;/a&gt; to load the associated view in iframe. The script should be added to your CRM form's onload event. &lt;/li&gt;
&lt;li&gt;Then you are ready to add filtering criteria to your many-to-many associated view lookup button. In my case, my requirement is to only show the account records that have an industry code of &amp;quot;Service Retail&amp;quot; (its picklist integer value is 25) as I have just mentioned above. &lt;br /&gt;
&lt;pre class="javascript" name="code"&gt;getFilteredUrlForAddExistingAccountButton = function(lookupUrl) {
    var iframe = crmForm.all.IFRAME_Accounts; // Change IFRAME_Accounts to your iframe&amp;#39;s ID
    var crmGrid = iframe.contentWindow.document.all[&amp;#39;crmGrid&amp;#39;];
    
    // If it&amp;#39;s not N:N lookup dialog, we skip it. 
    if (lookupUrl.toLowerCase().match(/\/_controls\/lookup\/lookupmulti.aspx/i) == null)
        return lookupUrl;
    
    // If the lookup window is not concerned with the entity that we are interested in, we skip as well
    if (GetQueryString(lookupUrl, &amp;#39;objecttypes&amp;#39;) !== crmGrid.GetParameter(&amp;#39;otc&amp;#39;))
        return lookupUrl;

    lookupUrl = lookupUrl.replace(/\/_controls\/lookup\/lookupmulti.aspx/i, &amp;#39;/ISV/CustomLookup/lookupmulti.aspx&amp;#39;); 
    
    var filterXml =
&amp;#39;&amp;lt;fetch mapping=&amp;quot;logical&amp;quot;&amp;gt;&amp;#39; +
   &amp;#39;&amp;lt;entity name=&amp;quot;account&amp;quot;&amp;gt;&amp;#39; +
      &amp;#39;&amp;lt;filter&amp;gt;&amp;#39; +
         &amp;#39;&amp;lt;condition attribute=&amp;quot;industrycode&amp;quot; operator=&amp;quot;eq&amp;quot; value=&amp;quot;25&amp;quot; /&amp;gt;&amp;#39; + // Industry: Service Retail
      &amp;#39;&amp;lt;/filter&amp;gt;&amp;#39; +
   &amp;#39;&amp;lt;/entity&amp;gt;&amp;#39; +
&amp;#39;&amp;lt;/fetch&amp;gt;&amp;#39;;

    // Ensure that search box is not available in the lookup dialog
    lookupUrl = SetQueryString(lookupUrl, &amp;#39;browse&amp;#39;, 1);
    lookupUrl = SetQueryString(lookupUrl, &amp;#39;ShowNewButton&amp;#39;, 0);
    lookupUrl = SetQueryString(lookupUrl, &amp;#39;search&amp;#39;, filterXml);

    return lookupUrl;
};&lt;/pre&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Add the following immediate JavaScript function to your form's onload event, following the above script &lt;br /&gt;
&lt;pre class="javascript" name="code"&gt;(function replaceCrmLookups() {
    window.oldOpenStdDlg = window.oldOpenStdDlg || window.openStdDlg;
    window.openStdDlg = function() {
        arguments[0] = getFilteredUrlForAddExistingAccountButton(arguments[0]);
        return oldOpenStdDlg.apply(this, arguments);
    };
})();&lt;/pre&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Save your form and publish your entity, you are good to go now. &lt;br /&gt;
&lt;br /&gt;
In my case, after I have everything published, my &amp;quot;Add Existing Account&amp;quot; now prompts me the following screen. As you can tell, I intentionally changed the default many-to-may lookup dialog to the single lookup dialog, which is usually considered to be much more user friendly. I believe we have just shot two birds with one stone, isn't that something beautiful? &lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/_kr8_hSygrMo/TVImKIQXmcI/AAAAAAAAARs/o7yVS46C3fI/s1600-h/CRM%20Single%20Lookup%20Dialog%5B5%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="CRM Single Lookup Dialog" border="0" alt="CRM Single Lookup Dialog" src="http://lh5.ggpht.com/_kr8_hSygrMo/TVImKok079I/AAAAAAAAARw/YIBGjagoX3o/CRM%20Single%20Lookup%20Dialog_thumb%5B3%5D.png?imgmax=800" width="612" height="511" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Note that you should change the iframe ID in the first line of &lt;b&gt;getFilteredUrlForAddExistingAccountButton&lt;/b&gt;() function, also ensure that you have constructed &lt;b&gt;filterXml&lt;/b&gt; string correctly in the same function. &lt;/p&gt;&lt;p&gt;I hope this helps. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5472436831307966815-5647251288614034721?l=danielcai.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/taqLyttJiInGFOlw1j_WIc6Q_VY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/taqLyttJiInGFOlw1j_WIc6Q_VY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/taqLyttJiInGFOlw1j_WIc6Q_VY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/taqLyttJiInGFOlw1j_WIc6Q_VY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DanielCai/~4/5gkuCVRjupE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/5647251288614034721/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://danielcai.blogspot.com/2011/02/mscrm-40-filtered-lookup-for-existing.html#comment-form" title="18 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/5647251288614034721?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/5647251288614034721?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DanielCai/~3/5gkuCVRjupE/mscrm-40-filtered-lookup-for-existing.html" title="MSCRM 4.0: Filtered Lookup for &amp;quot;Add Existing...&amp;quot; Button of a CRM N:N View" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_kr8_hSygrMo/TVIgobZ9m1I/AAAAAAAAARk/UfdvWtk2Wl8/s72-c/NN%20Lookup%20Filter%20Form_thumb%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>18</thr:total><feedburner:origLink>http://danielcai.blogspot.com/2011/02/mscrm-40-filtered-lookup-for-existing.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQCSH89cCp7ImA9Wx9UEU4.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815.post-5811425508150376000</id><published>2011-02-07T20:14:00.020-07:00</published><updated>2011-02-07T20:39:29.168-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-07T20:39:29.168-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM Troubleshooting" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM 4" /><title>Error When a Picklist Option Deleted but with Data Referenced</title><content type="html">&lt;p&gt;Today I ran into a strange error when I was trying to open a CRM view. I got a screen shown as below (In case you are curious, I have CRM &lt;b&gt;DevErrors&lt;/b&gt; option turned &lt;b&gt;On&lt;/b&gt; in my web.config file in order to show CRM error in the following fashion): &lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_kr8_hSygrMo/TVCBR5c7c5I/AAAAAAAAARU/T-Q6AQFAya8/s1600-h/image%5B3%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_kr8_hSygrMo/TVCBThiMhoI/AAAAAAAAARY/Rv2vwMJqoQ0/image_thumb%5B1%5D.png?imgmax=800" width="644" height="434" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Basically CRM was complaining with the following message:&amp;#160; &lt;/p&gt;&lt;pre&gt;Microsoft CRM Error Report: 
Error Description: 
An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Error Details: 
Exception of type 'System.Web.HttpUnhandledException' was thrown.

Full Stack: 
[KeyNotFoundException: The given key was not present in the dictionary.]
at System.ThrowHelper.ThrowKeyNotFoundException()
at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
at Microsoft.Crm.BusinessEntities.PagingHelper.GetValueAsString(AttributeInfo attribute, ExecutionContext context)
at Microsoft.Crm.BusinessEntities.PagingHelper.Serialize(OrderExpressionCollection orderCollection, BusinessEntityCollection entities, Int32 pageNum, ExecutionContext context)
at Microsoft.Crm.BusinessEntities.PagingHelper.CreatePagingCookie(BusinessEntityCollection entities, EntityExpression entityExpression, ExecutionContext context)
at Microsoft.Crm.BusinessEntities.QueryProcessObject.AppendPagingCookie(XmlTextWriter xmlWriter, BusinessEntityCollection entities, EntityExpression entityExpression, ExecutionContext context)
at Microsoft.Crm.BusinessEntities.QueryProcessObject.CreateResultSetXmlFromResultEntities(List`1 resultEntities, EntityExpression entityExpression, Boolean moreRecords, ExecutionContext context)
at Microsoft.Crm.BusinessEntities.QueryProcessObject.RetrieveDataQueryAsResultXml(EntityExpression entityExpression, QueryStrategyType strategyType, ExecutionContext context)
at Microsoft.Crm.BusinessEntities.QueryProcessObject.RetrieveQueryAsResultXml(EntityExpression entityExpression, QueryStrategyType strategyType, ExecutionContext context)
at Microsoft.Crm.ObjectModel.SavedQueryService.Execute(String fetchXml, ExecutionContext context)

[TargetInvocationException: Exception has been thrown by the target of an invocation.]
at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct&amp;amp; sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
at System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Web.Services.Protocols.LogicalMethodInfo.Invoke(Object target, Object[] values)
at Microsoft.Crm.Extensibility.InternalOperationPlugin.Execute(IPluginExecutionContext context)
at Microsoft.Crm.Extensibility.PluginStep.Execute(PipelineExecutionContext context)
at Microsoft.Crm.Extensibility.Pipeline.Execute(PipelineExecutionContext context)
at Microsoft.Crm.Extensibility.MessageProcessor.Execute(PipelineExecutionContext context)
at Microsoft.Crm.Extensibility.InternalMessageDispatcher.Execute(PipelineExecutionContext context)
at Microsoft.Crm.Extensibility.ExternalMessageDispatcher.Execute(String messageName, Int32 primaryObjectTypeCode, Int32 secondaryObjectTypeCode, PropertyBag fields, CorrelationToken correlationToken, CallerOriginToken originToken, UserAuth userAuth, Guid callerId)
at Microsoft.Crm.Sdk.RequestBase.Process(Int32 primaryObjectTypeCode, Int32 secondaryObjectTypeCode, CorrelationToken correlationToken, CallerOriginToken originToken, UserAuth userAuth, Guid callerId)
at Microsoft.Crm.Sdk.RequestBase.Process(CorrelationToken correlationToken, CallerOriginToken originToken, UserAuth userAuth, Guid callerId)
at Microsoft.Crm.Sdk.CrmServiceInternal.Execute(RequestBase request, CorrelationToken correlationToken, CallerOriginToken originToken, UserAuth userAuth, Guid callerId)
at Microsoft.Crm.Sdk.InProcessCrmService.Execute(Object request)
at Microsoft.Crm.Application.Platform.ServiceCommands.PlatformCommand.ExecuteInternal()
at Microsoft.Crm.Application.Platform.ServiceCommands.ExecuteFetchCommand.Execute()
at Microsoft.Crm.ApplicationQuery.GetViewData()
at Microsoft.Crm.Application.Controls.AppGridDataProvider.GetDataXml(QueryBuilder qb)
at Microsoft.Crm.Application.Controls.AppGridDataProvider.Execute()
at Microsoft.Crm.Application.Controls.AppGridUIProvider.Render(HtmlTextWriter output)
at Microsoft.Crm.Application.Components.UI.DataGrid.RenderData(HtmlTextWriter output)
at Microsoft.Crm.Application.Components.UI.DataGrid.RenderInnerHtml(HtmlTextWriter output)
at Microsoft.Crm.Application.Components.UI.DataGrid.Render(HtmlTextWriter output)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at Microsoft.Crm.Application.Components.UI.CrmUIControlBase.RenderControl(HtmlTextWriter writer)
at ASP.cmis__root_homepage_aspx.__Render__control1(HtmlTextWriter __w, Control parameterContainer)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.Page.Render(HtmlTextWriter writer)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

[HttpUnhandledException: Exception of type 'System.Web.HttpUnhandledException' was thrown.]
at System.Web.UI.Page.HandleError(Exception e)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest()
at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)
at System.Web.UI.Page.ProcessRequest(HttpContext context)
at ASP.cmis__root_homepage_aspx.ProcessRequest(HttpContext context)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&amp;amp; completedSynchronously)
&lt;/pre&gt;&lt;p&gt;The problem was almost impossible to identify. Even I tried to turn on trace log, I cannot see any helpful message. But fortunately I quickly realized that our business analyst folks have recently deleted an option from a picklist field of this entity. However, there are some data in the system that are still referencing that option. As soon as I realized the cause, it wasn't too hard to fix this issue. What I did was, add back the option that we previously deleted using the same integer option value, publish the entity customization change, and then delete all data referencing that picklist option, and then I can safely delete the same picklist option. &lt;/p&gt;&lt;p&gt;There could be a hundred of different scenarios that could lead to &amp;quot;&lt;b&gt;The given key was not present in the dictionary&lt;/b&gt;&amp;quot;, the key to determine whether the solution applies to you, is to check that you have &amp;quot;&lt;b&gt;Microsoft.Crm.BusinessEntities.PagingHelper.GetValueAsString(AttributeInfo attribute, ExecutionContext context)&lt;/b&gt;&amp;quot; message in the error log, and the error happens when you click to open a CRM view. &lt;/p&gt;&lt;p&gt;I was hoping that CRM platform could have handled this more gracefully, but not a big deal if you know the solution. &lt;/p&gt;&lt;p&gt;Hope this helps if you ever come across the same issue. &lt;/p&gt;&lt;p&gt;Cheers!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5472436831307966815-5811425508150376000?l=danielcai.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XRUKMTqayF4l7tS-SZzMwEfe4wI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XRUKMTqayF4l7tS-SZzMwEfe4wI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XRUKMTqayF4l7tS-SZzMwEfe4wI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XRUKMTqayF4l7tS-SZzMwEfe4wI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DanielCai/~4/6EU0HP-KkuY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/5811425508150376000/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://danielcai.blogspot.com/2011/02/error-when-picklist-option-deleted-but.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/5811425508150376000?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/5811425508150376000?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DanielCai/~3/6EU0HP-KkuY/error-when-picklist-option-deleted-but.html" title="Error When a Picklist Option Deleted but with Data Referenced" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_kr8_hSygrMo/TVCBThiMhoI/AAAAAAAAARY/Rv2vwMJqoQ0/s72-c/image_thumb%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://danielcai.blogspot.com/2011/02/error-when-picklist-option-deleted-but.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YGQX8yeyp7ImA9Wx9VEk8.&quot;"><id>tag:blogger.com,1999:blog-5472436831307966815.post-3774579979160339399</id><published>2011-01-27T21:41:00.002-07:00</published><updated>2011-01-28T07:32:00.193-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-28T07:32:00.193-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM Web Service Toolkit" /><category scheme="http://www.blogger.com/atom/ns#" term="MSCRM 2011" /><title>CRM Web Service Toolkit Works for CRM 2011</title><content type="html">&lt;p&gt;This is a quick update with regard to &lt;a href="http://crmtoolkit.codeplex.com/"&gt;CRM Web Service Toolkit&lt;/a&gt;. I had a chance to play around with the toolkit on CRM 2011 today, it turns out to be a surprise that the toolkit just works fine on CRM 2011 without requiring any modification. I tried to run all the unit tests that I developed in CrmServiceToolkitTest.aspx page, all tests have passed without any problems. &lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_kr8_hSygrMo/TULQoNe8RQI/AAAAAAAAARE/cVyDGFIRKz8/s1600-h/CRM%20Web%20Service%20Toolkit%20on%20CRM%202011%5B13%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="CRM Web Service Toolkit on CRM 2011" border="0" alt="CRM Web Service Toolkit on CRM 2011" src="http://lh6.ggpht.com/_kr8_hSygrMo/TULQpQXWRfI/AAAAAAAAARI/VFicmJYioaQ/CRM%20Web%20Service%20Toolkit%20on%20CRM%202011_thumb%5B9%5D.png?imgmax=800" width="644" height="483" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;It's not me who has made this magic, but because CRM 2011 provided full backward compatibility with its web service interfaces. However, it's not my recommendation to use the CRM4 style web service interfaces, neither is this the best practice. But since &lt;a href="http://msdn.microsoft.com/en-us/library/gg490657.aspx"&gt;CRM2011 SOAP Endpoint documentation&lt;/a&gt; is still under construction (shown below), I think it's not a terribly bad idea to keep using the CRM4 style web service interfaces for the time being, until the SOAP Endpoint details have been fully revealed. &lt;/p&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_kr8_hSygrMo/TUJT1em4jwI/AAAAAAAAAQY/aYxkcicR0_M/s1600-h/CRM2011%20SOAP%20EndPoint%20Doc.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="CRM2011 SOAP EndPoint Doc" border="0" alt="CRM2011 SOAP EndPoint Doc" src="http://lh4.ggpht.com/_kr8_hSygrMo/TUJT2ElxBtI/AAAAAAAAAQg/KYdSwOfqGL8/CRM2011%20SOAP%20EndPoint%20Doc_thumb.png?imgmax=800" width="644" height="411" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Some may argue that we should all use CRM2011's &lt;a href="http://msdn.microsoft.com/en-us/library/gg334279.aspx"&gt;REST endpoint&lt;/a&gt; instead since it's a new approach which may be more efficient, but be advised that the REST endpoint is not a full implementation of all CRM services. You are limited to only Create, Retrieve, Update, and Delete actions when you use REST endpoint.     &lt;br /&gt;
&lt;br /&gt;
I only tested on CRM2011 Beta, but I am relatively positive that the toolkit will work just fine for RC version, most likely the RTM version as well.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5472436831307966815-3774579979160339399?l=danielcai.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/s9pFD9cak8HRgHXire42WRwkYAg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/s9pFD9cak8HRgHXire42WRwkYAg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/s9pFD9cak8HRgHXire42WRwkYAg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/s9pFD9cak8HRgHXire42WRwkYAg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DanielCai/~4/EYJ9gEzIXWA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://danielcai.blogspot.com/feeds/3774579979160339399/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://danielcai.blogspot.com/2011/01/crm-web-service-toolkit-works-for-crm.html#comment-form" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/3774579979160339399?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5472436831307966815/posts/default/3774579979160339399?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DanielCai/~3/EYJ9gEzIXWA/crm-web-service-toolkit-works-for-crm.html" title="CRM Web Service Toolkit Works for CRM 2011" /><author><name>Daniel Cai</name><uri>https://profiles.google.com/115440641969940382242</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-UHDzNis4QYI/AAAAAAAAAAI/AAAAAAAAAlc/Vz-5HnqKE6A/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_kr8_hSygrMo/TULQpQXWRfI/AAAAAAAAARI/VFicmJYioaQ/s72-c/CRM%20Web%20Service%20Toolkit%20on%20CRM%202011_thumb%5B9%5D.png?imgmax=800" height="72" width="72" /><thr:total>6</thr:total><feedburner:origLink>http://danielcai.blogspot.com/2011/01/crm-web-service-toolkit-works-for-crm.html</feedburner:origLink></entry></feed>

