<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Kids, don't try this at home!</title><subtitle type="html">Tips &amp; Tricks for C#, ASP.NET and CRM</subtitle><id>http://weblogs.asp.net/gayanperera/atom.aspx</id><link rel="alternate" type="text/html" href="http://weblogs.asp.net/gayanperera/default.aspx" /><link rel="self" type="application/atom+xml" href="http://weblogs.asp.net/gayanperera/atom.aspx" /><generator uri="http://communityserver.org" version="3.0.20510.895">Community Server</generator><updated>2008-09-23T17:34:00Z</updated><entry><title>SSRS Report Show Dynamics CRM Note Attachment</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/gayanperera/archive/2009/10/01/ssrs-report-show-dynamics-crm-note-attachment.aspx" /><id>http://weblogs.asp.net/gayanperera/archive/2009/10/01/ssrs-report-show-dynamics-crm-note-attachment.aspx</id><published>2009-10-01T10:32:00Z</published><updated>2009-10-01T10:32:00Z</updated><content type="html">&lt;P mce_keep="true"&gt;We've had couple of instances where we&amp;nbsp;needed to embed existing image attachments in&amp;nbsp;dynamics crm&amp;nbsp;into sql server reporting services reports. Here are the steps you need to take in order to make it happen. It's pretty straight forward.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Create a new report&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Add a new table&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Drag an image control onto the table and place it into the column that you want, select '&lt;STRONG&gt;Database&lt;/STRONG&gt;' from the options&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Click on the image -&amp;gt; go to the '&lt;STRONG&gt;Properties&lt;/STRONG&gt;' tab -&amp;gt; from the '&lt;STRONG&gt;Value&lt;/STRONG&gt;' dropdownlist select '&lt;STRONG&gt;&amp;lt;Expression...&amp;gt;&lt;/STRONG&gt;' and use the following bit of code&lt;BR&gt;
&lt;DIV style="FONT-FAMILY: Courier New; BACKGROUND: white; COLOR: black; FONT-SIZE: 9pt"&gt;&lt;PRE style="MARGIN: 0px"&gt;=System.&lt;SPAN style="COLOR: #2b91af"&gt;Convert&lt;/SPAN&gt;.FromBase64String(Fields!&lt;STRONG&gt;documentbody&lt;/STRONG&gt;.Value)&lt;/PRE&gt;&lt;/DIV&gt;&lt;!--EndFragment--&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;'&lt;STRONG&gt;documentbody&lt;/STRONG&gt;' is the field from the &lt;STRONG&gt;FilteredAnnotation&lt;/STRONG&gt; view.&lt;BR&gt;&lt;BR&gt;&lt;EM&gt;&lt;STRONG&gt;EXAMPLE&lt;/STRONG&gt;&lt;/EM&gt;&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://weblogs.asp.net/blogs/gayanperera/report.png" mce_src="http://weblogs.asp.net/blogs/gayanperera/report.png"&gt;&lt;BR&gt;&lt;BR&gt;&lt;EM&gt;&lt;STRONG&gt;RESULT&lt;BR&gt;&lt;/STRONG&gt;&lt;/EM&gt;&lt;BR&gt;&lt;IMG src="http://weblogs.asp.net/blogs/gayanperera/result.png" mce_src="http://weblogs.asp.net/blogs/gayanperera/result.png"&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P mce_keep="true"&gt;&lt;BR&gt;Enjoy!&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7220829" width="1" height="1"&gt;</content><author><name>gperera</name><uri>http://weblogs.asp.net/members/gperera.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx" /><category term="SQL Server" scheme="http://weblogs.asp.net/gayanperera/archive/tags/SQL+Server/default.aspx" /><category term="Dynamics CRM" scheme="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx" /></entry><entry><title>Dynamics CRM 4 SDK for the iPhone via MonoTouch</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/gayanperera/archive/2009/09/22/dynamics-crm-4-sdk-for-the-iphone-via-monotouch.aspx" /><id>http://weblogs.asp.net/gayanperera/archive/2009/09/22/dynamics-crm-4-sdk-for-the-iphone-via-monotouch.aspx</id><published>2009-09-21T22:35:00Z</published><updated>2009-09-21T22:35:00Z</updated><content type="html">&lt;P mce_keep="true"&gt;We are working on a version of the Dynamics CRM 4 SDK that will work with the iPhone via MonoTouch. Here is a preview of it creating an account in Dynamics CRM using the MonoTouch C# library. We're creating this to speed up development of xRM solutions that can leverage the power of touch based mobile devices as well as the Dynamics CRM platform.&lt;BR&gt;&lt;BR&gt;&lt;IMG style="WIDTH: 562px; HEIGHT: 410px" align=center src="http://weblogs.asp.net/blogs/gayanperera/iphone-crm.jpg" width=562 height=410 mce_src="http://weblogs.asp.net/blogs/gayanperera/iphone-crm.jpg"&gt;&lt;/P&gt;&lt;BR&gt;
&lt;H3&gt;Challenges so far...&lt;/H3&gt;
&lt;P mce_keep="true"&gt;MonoTouch doesn't support web services natively yet, therefore we had to use the HttpWebRequest class to make raw calls to the crm web service. We also had to duplicate Request, Response, CreateRequest, CreateResponse, TargetCreateDynamic as well as all Dynamics CRM specific data types (CrmDateTime, CrmDateTimeProperty...etc).&lt;BR&gt;&lt;/P&gt;
&lt;H3&gt;Sample Code&lt;/H3&gt;
&lt;DIV style="FONT-FAMILY: Courier New; BACKGROUND: white; COLOR: black; FONT-SIZE: 9pt"&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: green"&gt;// IFD not supported yet&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;CrmAuthenticationToken&lt;/SPAN&gt; token = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;CrmAuthenticationToken&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;{&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AuthenticationType = 0,&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; OrganizationName = &lt;SPAN style="COLOR: #a31515"&gt;"MagnetismLimited"&lt;/SPAN&gt;,&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CallerId = &lt;SPAN style="COLOR: #2b91af"&gt;Guid&lt;/SPAN&gt;.Empty&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;};&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;CrmWebRequest&lt;/SPAN&gt; sdk = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;CrmWebRequest&lt;/SPAN&gt;(&lt;SPAN style="COLOR: #a31515"&gt;"http://virtualcrm03/mscrmservices/2007/crmservice.asmx"&lt;/SPAN&gt;,&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #a31515"&gt;"MAGNETISM"&lt;/SPAN&gt;, &lt;SPAN style="COLOR: #a31515"&gt;"Administrator"&lt;/SPAN&gt;, &lt;SPAN style="COLOR: #a31515"&gt;"h3rew3g0"&lt;/SPAN&gt;, token);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: green"&gt;// only difference here is that entity.Properties is an array instead of type PropertyCollection&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;DynamicEntity&lt;/SPAN&gt; entity = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;DynamicEntity&lt;/SPAN&gt;(&lt;SPAN style="COLOR: #a31515"&gt;"account"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;entity.Properties = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;Property&lt;/SPAN&gt;[] { &lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;StringProperty&lt;/SPAN&gt;(&lt;SPAN style="COLOR: #a31515"&gt;"name"&lt;/SPAN&gt;, accountName),&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;};&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;TargetCreateDynamic&lt;/SPAN&gt; target = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;TargetCreateDynamic&lt;/SPAN&gt; { Entity = entity };&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;CreateRequest&lt;/SPAN&gt; cr = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;CreateRequest&lt;/SPAN&gt; { Target = target };&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;CreateResponse&lt;/SPAN&gt; response = sdk.Execute(cr) &lt;SPAN style="COLOR: blue"&gt;as&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;CreateResponse&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;Console&lt;/SPAN&gt;.WriteLine(response.id);&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;Dynamics CRM SDK for the iPhone is still in its early stages, we plan to release a public beta by the end&amp;nbsp; of October. If you'd like to be part of our test team please &lt;A title=Magnetism href="http://www.magnetism.co.nz/Utility/contact_us.aspx" mce_href="http://www.magnetism.co.nz/Utility/contact_us.aspx"&gt;contact me&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7213560" width="1" height="1"&gt;</content><author><name>gperera</name><uri>http://weblogs.asp.net/members/gperera.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx" /><category term="Dynamics CRM" scheme="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx" /><category term="MonoTouch" scheme="http://weblogs.asp.net/gayanperera/archive/tags/MonoTouch/default.aspx" /><category term="iPhone" scheme="http://weblogs.asp.net/gayanperera/archive/tags/iPhone/default.aspx" /></entry><entry><title>Dynamics CRM - Programmatically Block Outbound Emails</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/gayanperera/archive/2009/07/21/dynamics-crm-programmatically-block-outbound-emails.aspx" /><id>http://weblogs.asp.net/gayanperera/archive/2009/07/21/dynamics-crm-programmatically-block-outbound-emails.aspx</id><published>2009-07-21T05:37:00Z</published><updated>2009-07-21T05:37:00Z</updated><content type="html">&lt;P mce_keep="true"&gt;Time for another crm goodie...&lt;BR&gt;&lt;BR&gt;We've been working on a little project that needed blocking of&amp;nbsp;certain outbound emails, with the Dynamics CRM plugin architecture this made it very very simple. For whatever reason, if you want to block outbound emails from Dynamics CRM programmatically, hook into the &lt;STRONG&gt;Send&lt;/STRONG&gt; message on the &lt;STRONG&gt;email&lt;/STRONG&gt; entity at the &lt;STRONG&gt;Pre&lt;/STRONG&gt; stage&lt;STRONG&gt; synchronously&lt;/STRONG&gt; then set the &lt;STRONG&gt;IssueSend&lt;/STRONG&gt; property to &lt;STRONG&gt;false&lt;/STRONG&gt;.&lt;BR&gt;&lt;BR&gt;A bit of code&lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (context.MessageName.Equals(&lt;SPAN style="COLOR: #a31515"&gt;"Send"&lt;/SPAN&gt;, &lt;SPAN style="COLOR: #2b91af"&gt;StringComparison&lt;/SPAN&gt;.InvariantCultureIgnoreCase))&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; context.InputParameters[&lt;SPAN style="COLOR: #a31515"&gt;"IssueSend"&lt;/SPAN&gt;] = &lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt;;&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;A little gotcha, the system marks the email as &lt;STRONG&gt;Sent&lt;/STRONG&gt; even though we've blocked it, so be careful with that one. Hopefully this is useful to someone else. We've used this technique to write a neat little addon for Dynamics CRM, keep an eye out for it!&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7151921" width="1" height="1"&gt;</content><author><name>gperera</name><uri>http://weblogs.asp.net/members/gperera.aspx</uri></author><category term="Dynamics CRM" scheme="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx" /></entry><entry><title>Dynamics CRM 4 Mobile Express Released!</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/gayanperera/archive/2009/07/10/dynamics-crm-4-mobile-express-released.aspx" /><id>http://weblogs.asp.net/gayanperera/archive/2009/07/10/dynamics-crm-4-mobile-express-released.aspx</id><published>2009-07-10T05:07:00Z</published><updated>2009-07-10T05:07:00Z</updated><content type="html">Mobile Express for Dynamics CRM is now available for free from Microsoft. You can download it from &lt;A href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=f592ec6c-f412-4fd5-9a80-cd3bcbd26d8b" mce_href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=f592ec6c-f412-4fd5-9a80-cd3bcbd26d8b"&gt;http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=f592ec6c-f412-4fd5-9a80-cd3bcbd26d8b&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;Here it is running on the iPhone&lt;BR&gt;&lt;BR&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=5 align=center&gt;
&lt;TBODY&gt;
&lt;TR align=middle&gt;
&lt;TD width="50%"&gt;&lt;STRONG&gt;Main&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="50%"&gt;&lt;STRONG&gt;Accounts&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;&lt;IMG src="http://weblogs.asp.net/blogs/gayanperera/IMG_0238.PNG"&gt;&lt;/TD&gt;
&lt;TD width="50%"&gt;&lt;IMG src="http://weblogs.asp.net/blogs/gayanperera/IMG_0239.PNG"&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR align=middle&gt;
&lt;TD width="50%"&gt;&lt;STRONG&gt;Active Accounts&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="50%"&gt;&lt;STRONG&gt;New Account&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;&lt;IMG src="http://weblogs.asp.net/blogs/gayanperera/IMG_0240.PNG"&gt;&lt;/TD&gt;
&lt;TD width="50%"&gt;&lt;IMG src="http://weblogs.asp.net/blogs/gayanperera/IMG_0241.PNG"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7144410" width="1" height="1"&gt;</content><author><name>gperera</name><uri>http://weblogs.asp.net/members/gperera.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx" /><category term="Dynamics CRM" scheme="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx" /></entry><entry><title>Dynamics CRM - Backup, Restore &amp; Publish Customizations Programmatically</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/gayanperera/archive/2009/07/10/dynamics-crm-backup-restore-amp-publish-customizations-programmatically.aspx" /><id>http://weblogs.asp.net/gayanperera/archive/2009/07/10/dynamics-crm-backup-restore-amp-publish-customizations-programmatically.aspx</id><published>2009-07-10T00:34:00Z</published><updated>2009-07-10T00:34:00Z</updated><content type="html">&lt;P mce_keep="true"&gt;Here is a simple class you can use to backup, restore and publish dynamics crm customizations programmatically. Please keep in mind that dynamics crm customizations are additive, which means, if you import a set of customizations lets say a new attribute on the account entity and you restore a backup of the old customizations the new attribute on the account entity that was imported will not be deleted.&lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;Usage&lt;/STRONG&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #2b91af"&gt;CrmCustomizations&lt;/SPAN&gt; customizations = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;CrmCustomizations&lt;/SPAN&gt;(service);&lt;BR&gt;&lt;BR&gt;You can backup to an xml file or a zip file by calling the Backup method. Backup method takes care of creating the xml or zip file by looking at the output file extension.&lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool&lt;/SPAN&gt; backedup = customizations.Backup(&lt;SPAN style="COLOR: #a31515"&gt;@".\customizations_backup.xml"&lt;/SPAN&gt;);&lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // or to a zip file&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; backedup = customizations.Backup(&lt;SPAN style="COLOR: #a31515"&gt;@".\customizations_backup.zip"&lt;/SPAN&gt;);&lt;BR&gt;&lt;BR&gt;To restore a backup call the Restore method. You can pass it a .zip file or a .xml file path.&lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool&lt;/SPAN&gt; restored = customizations.Restore(&lt;SPAN style="COLOR: #a31515"&gt;@".\customizations.xml"&lt;/SPAN&gt;);&lt;BR&gt;&lt;BR&gt;Once you have restored you need to publish the customizations, to publish call the Publish method. It will publish all customizations.&lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool&lt;/SPAN&gt; published = customizations.Publish();&lt;/P&gt;&lt;!--EndFragment--&gt;
&lt;P mce_keep="true"&gt;&lt;A href="http://weblogs.asp.net/blogs/gayanperera/CrmCustomizations.cs.txt" target=_blank mce_href="http://weblogs.asp.net/blogs/gayanperera/CrmCustomizations.cs.txt"&gt;Download the class file&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Enjoy!&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7144091" width="1" height="1"&gt;</content><author><name>gperera</name><uri>http://weblogs.asp.net/members/gperera.aspx</uri></author><category term="Dynamics CRM" scheme="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx" /></entry><entry><title>Dynamics CRM - Synchronize with Xero Accounting Software</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/gayanperera/archive/2009/07/03/dynamics-crm-synchronize-with-xero-accounting-software.aspx" /><id>http://weblogs.asp.net/gayanperera/archive/2009/07/03/dynamics-crm-synchronize-with-xero-accounting-software.aspx</id><published>2009-07-02T23:49:00Z</published><updated>2009-07-02T23:49:00Z</updated><content type="html">&lt;P mce_keep="true"&gt;Here is a sneak preview of Dynamics CRM integrated with Xero that we have just completed. Yesterdays post (automatically emailing pdf invoices) is part of this whole system we've been working on. If you are using Xero as your accounting software it can now be integrated seemlessly into Dynamics CRM.&lt;BR&gt;&lt;BR&gt;&lt;IMG style="WIDTH: 600px; HEIGHT: 320px" title="Dynamics CRM to Xero" alt="Dynamics CRM to Xero" src="http://weblogs.asp.net/blogs/gayanperera/dynamics-crm-to-xero-2.gif" width=600 height=320 mce_src="http://weblogs.asp.net/blogs/gayanperera/dynamics-crm-to-xero-2.gif"&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Take a look at this &lt;A title="Dynamics CRM to Xero" href="http://www.magnetism.co.nz/clients/media/xeroconnector2.html" target=_blank mce_href="http://www.magnetism.co.nz/clients/media/xeroconnector2.html"&gt;5 minute video&lt;/A&gt; (audio coming soon...) 
&lt;H1&gt;What Can It Do?&lt;/H1&gt;
&lt;P&gt;&lt;BR&gt;In real-time&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Synchronize accounts in Dynamics&amp;nbsp;CRM to and from Xero&lt;/LI&gt;
&lt;LI&gt;Synchronize invoices from Dynamics CRM to Xero&lt;/LI&gt;
&lt;LI&gt;Synchronize invoice payments from Xero to Dynamics CRM&lt;/LI&gt;
&lt;LI&gt;Synchronize account codes from Xero to Dynamics CRM&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;It has been a pleasure working with the Xero API, Xero has done a very nice job. Looking forward to v2 which will provide the ability to synchronize credit notes, currency, additional payment options and more...&lt;BR&gt;&lt;BR&gt;Thanks to Tony Rule from &lt;A href="http://www.xero.com/" target=_blank mce_href="http://www.xero.com"&gt;Xero&lt;/A&gt; for guiding us through the API and Amanda Mattson from &lt;A title="Linq to Dynamics CRM" href="http://www.xrmlinq.com/" target=_blank mce_href="http://www.xrmlinq.com"&gt;XrmLinq&lt;/A&gt; for the LINQ to Dynamics CRM tool.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7138980" width="1" height="1"&gt;</content><author><name>gperera</name><uri>http://weblogs.asp.net/members/gperera.aspx</uri></author><category term="Dynamics CRM" scheme="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx" /></entry><entry><title>Dynamics CRM Workflow - Automatically Email any Report generated in CRM as a PDF attachment</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/gayanperera/archive/2009/07/02/dynamics-crm-workflow-send-pdf-invoice-automatically.aspx" /><id>http://weblogs.asp.net/gayanperera/archive/2009/07/02/dynamics-crm-workflow-send-pdf-invoice-automatically.aspx</id><published>2009-07-02T03:43:00Z</published><updated>2009-07-02T03:43:00Z</updated><content type="html">&lt;P mce_keep="true"&gt;Time for another Dynamics CRM goodie...&lt;BR&gt;&lt;BR&gt;&lt;IMG style="WIDTH: 651px; HEIGHT: 230px" title="Send an invoice to a customer with a pdf attached using a dynamics crm workflow" alt="Send an invoice to a customer with a pdf attached using a dynamics crm workflow" align=middle src="http://weblogs.asp.net/blogs/gayanperera/auto-pdf-invoice-and-send-email.gif" width=651 height=230 mce_src="http://weblogs.asp.net/blogs/gayanperera/auto-pdf-invoice-and-send-email.gif"&gt;&lt;BR&gt;&lt;BR&gt;We try to automate as many things as we can, automatically sending invoices&amp;nbsp;is one of them. Workflow as you know in Dynamics CRM is very powerful, specially the ability to create custom activities and hook into the pipeline. We took advantage of this, we created a custom workflow activity that takes in any entity, Email and a Report, automatically turn it into a PDF, attach it to the email and send the email.&lt;BR&gt;&lt;BR&gt;Take a look at this &lt;A href="http://www.magnetism.co.nz/clients/media/crmreportintopdf.html" target=_blank mce_href="http://www.magnetism.co.nz/clients/media/crmreportintopdf.html"&gt;5 minute video&lt;/A&gt; to see how it works. If you're interested in using this in your organization contact me via&amp;nbsp;&lt;A href="http://www.magnetism.co.nz/contact_us.aspx" target=_blank mce_href="http://www.magnetism.co.nz/contact_us.aspx"&gt;this link&lt;/A&gt;. &lt;BR&gt;&lt;BR&gt;
&lt;H1&gt;Under The Hood&lt;/H1&gt;&lt;BR&gt;&lt;STRONG&gt;Report2Pdf&lt;/STRONG&gt;&lt;BR&gt;This class does the heavy lifting, it has a method called Download, connects to the report server, configures the parameters and renders the report as a PDF then returns a byte array.&lt;BR&gt;
&lt;DIV style="FONT-FAMILY: Courier New; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;&lt;BR&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;Report2Pdf&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;{&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;static&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&gt;[] Download(&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; rsUrl, &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; rseUrl, &lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.Net.&lt;SPAN style="COLOR: #2b91af"&gt;NetworkCredential&lt;/SPAN&gt; credentials, &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; report, &lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;Report2PdfParameter&lt;/SPAN&gt;[] inputParameters, &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; culture)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/PRE&gt;&lt;/DIV&gt;&lt;!--EndFragment--&gt;&lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;Workflow Activity&lt;/STRONG&gt;&lt;BR&gt;Straight forward, read the configuration data, makes a call to the Report2Pdf.Download method, creates an activitymimeattachment then executes a SendEmailRequest.&lt;BR&gt;&lt;BR&gt;
&lt;DIV style="FONT-FAMILY: Courier New; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&gt;[] data = &lt;SPAN style="COLOR: #2b91af"&gt;Report2Pdf&lt;/SPAN&gt;.Download(config.Url, config.ExecutionUrl,&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;NetworkCredential&lt;/SPAN&gt;(config.UserName, config.Password, config.Domain),&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; report.Location, rps.ToArray(), config.Culture);&lt;/PRE&gt;&lt;/DIV&gt;&lt;!--EndFragment--&gt;&lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;LINQ and Dynamics CRM&lt;/STRONG&gt;&lt;BR&gt;Thanks to Amanda and the team at &lt;A title="XrmLinq - Linq to Dynamics CRM" href="http://www.xrmlinq.com/" target=_blank mce_href="http://www.xrmlinq.com"&gt;XrmLinq&lt;/A&gt; for giving us access to their library. This has made data access so much easier. Something that would take atleast&amp;nbsp;10-20 lines of code and a lot of&amp;nbsp;effort messing around with FetchXml&amp;nbsp;has now been reduced to 3 lines and LINQ!&lt;BR&gt;
&lt;DIV style="FONT-FAMILY: Courier New; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;&lt;BR&gt;var&lt;/SPAN&gt; config = (&lt;SPAN style="COLOR: blue"&gt;from&lt;/SPAN&gt; c &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; xrm.ReportServerConfigurations&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;where&lt;/SPAN&gt; c.ReportServerConfigurationId == report.ConfigurationId&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;select&lt;/SPAN&gt; c).SingleOrDefault();&lt;/PRE&gt;&lt;/DIV&gt;&lt;!--EndFragment--&gt;&lt;BR&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7138379" width="1" height="1"&gt;</content><author><name>gperera</name><uri>http://weblogs.asp.net/members/gperera.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx" /><category term="LINQ" scheme="http://weblogs.asp.net/gayanperera/archive/tags/LINQ/default.aspx" /><category term="Dynamics CRM" scheme="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx" /></entry><entry><title>Dynamics CRM 4 - Progress Bar</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/gayanperera/archive/2009/05/05/dynamics-crm-4-progress-bar.aspx" /><id>http://weblogs.asp.net/gayanperera/archive/2009/05/05/dynamics-crm-4-progress-bar.aspx</id><published>2009-05-05T09:27:00Z</published><updated>2009-05-05T09:27:00Z</updated><content type="html">&lt;P mce_keep="true"&gt;I was browsing the dynamics forums the other day and saw a &lt;A href="http://social.microsoft.com/Forums/en-US/crmdevelopment/thread/774173cc-a61d-4dd0-ac78-762480b14d8e" target=_blank mce_href="http://social.microsoft.com/Forums/en-US/crmdevelopment/thread/774173cc-a61d-4dd0-ac78-762480b14d8e"&gt;post&lt;/A&gt; asking about the&amp;nbsp;progress bar&amp;nbsp;in CRM, we created one awhile back, here it is for anyone else that's looking for something similar. &lt;BR&gt;&lt;BR&gt;&lt;A href="http://weblogs.asp.net/blogs/gayanperera/crmprogressbar_sample.zip" target=_blank mce_href="http://weblogs.asp.net/blogs/gayanperera/crmprogressbar_sample.zip"&gt;Click here&lt;/A&gt; to download a working sample.&lt;BR&gt;&lt;BR&gt;&lt;IMG style="WIDTH: 364px; HEIGHT: 29px" title="Dynamics CRM 4 - Progress Bar" alt="Dynamics CRM 4 - Progress Bar" src="http://weblogs.asp.net/blogs/gayanperera/crmprogressbar.jpg" width=364 height=29 mce_src="http://weblogs.asp.net/blogs/gayanperera/crmprogressbar.jpg"&gt;&lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;What you'll need&lt;/STRONG&gt;&lt;/P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://jquery.com/" target=_blank mce_href="http://jquery.com/"&gt;jQuery 1.3.2&lt;/A&gt; 
&lt;DIV&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://weblogs.asp.net/blogs/gayanperera/step.gif" target=_blank mce_href="http://weblogs.asp.net/blogs/gayanperera/step.gif"&gt;step.gif&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;statusbar.gif - You can get this from the /_imgs/ folder in CRM&lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;crmprogressbar.js&lt;BR&gt;&lt;/STRONG&gt;&lt;CODE&gt;&lt;FONT color=black size=2 face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;function&lt;/FONT&gt; crmProgressBar(id) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.bar = $(&lt;FONT color=#a31515&gt;"#"&lt;/FONT&gt; + id);&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.bar.css({&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#a31515&gt;'height'&lt;/FONT&gt;: &lt;FONT color=#a31515&gt;'23px'&lt;/FONT&gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#a31515&gt;'width'&lt;/FONT&gt;: &lt;FONT color=#a31515&gt;'357px'&lt;/FONT&gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#a31515&gt;'background'&lt;/FONT&gt;: &lt;FONT color=#a31515&gt;'transparent url(img/statusbar.gif) no-repeat'&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.bar.find(&lt;FONT color=#a31515&gt;"div"&lt;/FONT&gt;).css({&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#a31515&gt;'height'&lt;/FONT&gt;: &lt;FONT color=#a31515&gt;'19px'&lt;/FONT&gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#a31515&gt;'width'&lt;/FONT&gt;: &lt;FONT color=#a31515&gt;'1px'&lt;/FONT&gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#a31515&gt;'background'&lt;/FONT&gt;: &lt;FONT color=#a31515&gt;'transparent url(img/step.gif) repeat-x'&lt;/FONT&gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#a31515&gt;'position'&lt;/FONT&gt;: &lt;FONT color=#a31515&gt;'relative'&lt;/FONT&gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#a31515&gt;'top'&lt;/FONT&gt;: &lt;FONT color=#a31515&gt;'2px'&lt;/FONT&gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#a31515&gt;'left'&lt;/FONT&gt;: &lt;FONT color=#a31515&gt;'3px'&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.step = &lt;FONT color=#0000ff&gt;function&lt;/FONT&gt;(percentage) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;var&lt;/FONT&gt; width = parseInt((percentage / 100) * 351);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (width &amp;gt; 351) { width = 351; }&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.bar.find(&lt;FONT color=#a31515&gt;"div"&lt;/FONT&gt;).css({ &lt;FONT color=#a31515&gt;'width'&lt;/FONT&gt;: width + &lt;FONT color=#a31515&gt;'px'&lt;/FONT&gt; });&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;/CODE&gt;&lt;BR&gt;&lt;STRONG&gt;Example&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Create a new html file&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Create a new javascript file and copy the above code into it&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Include a reference to the jQuery javascript library&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Include a reference to the javascript in your html file&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Add a "div" tag to the html file and give it an "id"&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Add another "div" tag inside the "div" you created in step 4. and put a blank space&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;To initialize the progress bar; create a new variable to hold the progress bar, then create a new instance of the progress bar by specifying the "id" of the div you created in step 4.&lt;BR&gt;&lt;STRONG&gt;eg: var progressBar1 = new crmProgressBar("id-of-div");&lt;/STRONG&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;To step/increment the progress bar use the step() instance method&lt;BR&gt;&lt;STRONG&gt;eg: progressBar1.step(10);&lt;/STRONG&gt; // will increment to 10%;&lt;/DIV&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P mce_keep="true"&gt;&lt;CODE&gt;&lt;FONT color=black size=2 face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;div&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;id&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="p1"&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;div&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#ff0000&gt;&amp;amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;div&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;div&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;script&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;type&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="text/javascript"&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;var&lt;/FONT&gt; i = 5;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;var&lt;/FONT&gt; cpb = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;FONT color=#0000ff&gt;document&lt;/FONT&gt;).ready(&lt;FONT color=#0000ff&gt;function&lt;/FONT&gt;() {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cpb = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; crmProgressBar(&lt;FONT color=#a31515&gt;"p1"&lt;/FONT&gt;);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;increment();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;function&lt;/FONT&gt; increment() {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (i &amp;lt;= 100) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i += 5;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cpb.step(i);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setTimeout(increment, 1000);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;script&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&lt; CODE&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/CODE&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7073562" width="1" height="1"&gt;</content><author><name>gperera</name><uri>http://weblogs.asp.net/members/gperera.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx" /><category term="Dynamics CRM" scheme="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx" /><category term="jQuery" scheme="http://weblogs.asp.net/gayanperera/archive/tags/jQuery/default.aspx" /></entry><entry><title>Web Form to Dynamics CRM 4</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/gayanperera/archive/2009/03/19/web-form-to-dynamics-crm-4.aspx" /><id>http://weblogs.asp.net/gayanperera/archive/2009/03/19/web-form-to-dynamics-crm-4.aspx</id><published>2009-03-18T11:38:00Z</published><updated>2009-03-18T11:38:00Z</updated><content type="html">
&lt;p&gt;We've decided to release another component we've been using internally. This little webcontrol allows you put pass data from a Web Form to Dynamics CRM 4.&lt;br&gt;&lt;br&gt;&lt;b&gt;How does it work?&lt;/b&gt;&lt;br&gt;Create a UserControl to layout the form.&lt;br&gt;
&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="asp"&gt;&amp;lt;%@ Control Language="C#" %&amp;gt;&lt;/span&gt;&lt;br&gt;Topic:&lt;br&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:TextBox&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="topic"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br&gt;First Name:&lt;br&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:TextBox&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="firstname"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br&gt;Rating:&lt;br&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:DropDownList&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="rating"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:ListItem&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Hot"&lt;/span&gt; &lt;span class="attr"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:ListItem&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:ListItem&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Warm"&lt;/span&gt; &lt;span class="attr"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:ListItem&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:ListItem&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Cold"&lt;/span&gt; &lt;span class="attr"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;="3"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:ListItem&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:DropDownList&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Button&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="submit"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Add to CRM"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;Next we add the Web2EntityControl into our .aspx page and configure the connection settings (Url, Username, Password, Domain ...etc of CRM) as well as Mappings.&lt;br&gt;For example:&lt;br&gt;Which field in Dynamics CRM should the &lt;b&gt;topic field&lt;/b&gt; (from above) map to?&lt;br&gt;&lt;br&gt;Here is a sample configration&lt;br&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;magnetism:Web2EntityControl&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="leadform"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;SkinPath&lt;/span&gt;&lt;span class="kwrd"&gt;="~/lead.ascx"&lt;/span&gt;&lt;br&gt;    &lt;span class="attr"&gt;Async&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Settings&lt;/span&gt; &lt;span class="attr"&gt;Url&lt;/span&gt;&lt;span class="kwrd"&gt;="http://virtualcrm/mscrmservices/2007/crmservice.asmx"&lt;/span&gt; &lt;br&gt;        &lt;span class="attr"&gt;Domain&lt;/span&gt;&lt;span class="kwrd"&gt;="MAGNETISM"&lt;/span&gt; &lt;span class="attr"&gt;OrganizationName&lt;/span&gt;&lt;span class="kwrd"&gt;="Demo"&lt;/span&gt; &lt;span class="attr"&gt;UserName&lt;/span&gt;&lt;span class="kwrd"&gt;="Administrator"&lt;/span&gt; &lt;br&gt;        &lt;span class="attr"&gt;Password&lt;/span&gt;&lt;span class="kwrd"&gt;="itsasecret"&lt;/span&gt; &lt;span class="attr"&gt;EntityName&lt;/span&gt;&lt;span class="kwrd"&gt;="lead"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Mappings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;magnetism:Mapping&lt;/span&gt; &lt;span class="attr"&gt;CrmFieldSchemaName&lt;/span&gt;&lt;span class="kwrd"&gt;="subject"&lt;/span&gt; &lt;span class="attr"&gt;CrmFieldType&lt;/span&gt;&lt;span class="kwrd"&gt;="NVarChar"&lt;/span&gt;&lt;br&gt;        &lt;span class="attr"&gt;ControlID&lt;/span&gt;&lt;span class="kwrd"&gt;="topic"&lt;/span&gt; &lt;span class="attr"&gt;ValuePropertyName&lt;/span&gt;&lt;span class="kwrd"&gt;="Text"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br&gt;             &lt;br&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;magnetism:Mapping&lt;/span&gt; &lt;span class="attr"&gt;CrmFieldSchemaName&lt;/span&gt;&lt;span class="kwrd"&gt;="firstname"&lt;/span&gt; &lt;span class="attr"&gt;CrmFieldType&lt;/span&gt;&lt;span class="kwrd"&gt;="NVarChar"&lt;/span&gt;&lt;br&gt;        &lt;span class="attr"&gt;ControlID&lt;/span&gt;&lt;span class="kwrd"&gt;="firstname"&lt;/span&gt; &lt;span class="attr"&gt;ValuePropertyName&lt;/span&gt;&lt;span class="kwrd"&gt;="Text"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br&gt;        &lt;br&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;magnetism:Mapping&lt;/span&gt; &lt;span class="attr"&gt;CrmFieldSchemaName&lt;/span&gt;&lt;span class="kwrd"&gt;="leadqualitycode"&lt;/span&gt; &lt;span class="attr"&gt;CrmFieldType&lt;/span&gt;&lt;span class="kwrd"&gt;="Picklist"&lt;/span&gt;&lt;br&gt;        &lt;span class="attr"&gt;ControlID&lt;/span&gt;&lt;span class="kwrd"&gt;="rating"&lt;/span&gt; &lt;span class="attr"&gt;ValuePropertyName&lt;/span&gt;&lt;span class="kwrd"&gt;="SelectedValue"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Mappings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;magnetism:Web2EntityControl&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;This form is mapped to the &lt;span style="font-weight: bold;"&gt;Lead&lt;/span&gt; entity (&lt;span style="font-weight: bold;"&gt;EntityName="lead"&lt;/span&gt;)&lt;br&gt;&lt;span style="font-weight: bold;"&gt;Topic&lt;/span&gt; textbox is mapped to the &lt;span style="font-weight: bold;"&gt;"subject"&lt;/span&gt; field in Dynamics CRM&lt;br&gt;&lt;span style="font-weight: bold;"&gt;First Name&lt;/span&gt; textbox is mapped to &lt;span style="font-weight: bold;"&gt;"firstname"&lt;/span&gt; field in CRM&lt;br&gt;&lt;span style="font-weight: bold;"&gt;Rating&lt;/span&gt; dropdownlist is mapped to &lt;span style="font-weight: bold;"&gt;"leadqualitycode"&lt;/span&gt; picklist in Dynamics CRM&lt;br&gt;&lt;br&gt;This control works with On-Premise, Partner Hosted &amp;amp; IFD installations. This works really well for data entry forms, we use it on our &lt;a href="http://www.magnetism.co.nz/contact_us.aspx" title="Magnetism - Contact Us" target="_blank" mce_href="http://www.magnetism.co.nz/contact_us.aspx"&gt;Contact Us&lt;/a&gt; page as well as client contact us pages and hand the data through to leads or cases depending on the customer query.&lt;br&gt;&lt;br&gt;If you'd like a copy &lt;a href="http://www.magnetism.co.nz/contact_us.aspx" title="Contact Gayan at Magnetism" target="_blank" mce_href="http://www.magnetism.co.nz/contact_us.aspx"&gt;contact me.&lt;br&gt;&lt;/a&gt;&lt;br&gt;
Enjoy!
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: Consolas, "Courier New", Courier, Monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6974439" width="1" height="1"&gt;</content><author><name>gperera</name><uri>http://weblogs.asp.net/members/gperera.aspx</uri></author><category term="C#" scheme="http://weblogs.asp.net/gayanperera/archive/tags/C_2300_/default.aspx" /><category term="ASP.NET" scheme="http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx" /><category term="Dynamics CRM" scheme="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx" /></entry><entry><title>Dynamics CRM - Writing FetchXml Queries</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/gayanperera/archive/2009/01/13/dynamics-crm-writing-fetchxml-queries.aspx" /><id>http://weblogs.asp.net/gayanperera/archive/2009/01/13/dynamics-crm-writing-fetchxml-queries.aspx</id><published>2009-01-13T00:45:00Z</published><updated>2009-01-13T00:45:00Z</updated><content type="html">&lt;P mce_keep="true"&gt;While browsing the online Dynamics CRM SDK a while back I noticed that FetchXml had a &lt;A href="http://technet.microsoft.com/en-us/library/aa477320.aspx" target=_blank mce_href="http://technet.microsoft.com/en-us/library/aa477320.aspx"&gt;XSD schema&lt;/A&gt;. So I grabbed the xsd.exe tool from Visual Studio, generated a cs file to see if I can use that to create FetchXml queries. Here are my findings.&lt;BR&gt;&lt;BR&gt;To generate the cs file&lt;BR&gt;&lt;STRONG&gt;xsd.exe /c /n:ExamplNamespace FetchXml.xsd&lt;/STRONG&gt;&lt;BR&gt;&lt;BR&gt;You'll notice that the resulting code file has an object array called &lt;STRONG&gt;Items&lt;/STRONG&gt;, if have a look at the metadata attributes on that field you'll see which elements are supported. For example the "fetch" class Items array will support "entity" and "order"; how do we use it?&lt;/P&gt;
&lt;DIV style="FONT-FAMILY: Courier New; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;fetch&lt;/SPAN&gt; sample = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;fetch&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;{&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Items = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;[] &lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;entity&lt;/SPAN&gt; { name = &lt;SPAN style="COLOR: #a31515"&gt;"account"&lt;/SPAN&gt; },&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;order&lt;/SPAN&gt; { attribute = &lt;SPAN style="COLOR: #a31515"&gt;"name"&lt;/SPAN&gt;, descending = &lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt; }&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;};&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR&gt;Dig a little deeper and you'll see that you are able to generate more complex queryes. For example:&lt;BR&gt;Get the first 10 accounts ordered by account name along with the primary contact.&lt;BR&gt;&lt;BR&gt;
&lt;DIV style="FONT-FAMILY: Courier New; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;fetch&lt;/SPAN&gt; f = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;fetch&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;{&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mapping = &lt;SPAN style="COLOR: #2b91af"&gt;fetchMapping&lt;/SPAN&gt;.logical, &lt;SPAN style="COLOR: green"&gt;// not required&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; aggregate = &lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt;, &lt;SPAN style="COLOR: green"&gt;// not required&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; count = &lt;SPAN style="COLOR: #a31515"&gt;"10"&lt;/SPAN&gt;, &lt;SPAN style="COLOR: green"&gt;// not required&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; distinct = &lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt;, &lt;SPAN style="COLOR: green"&gt;// not required&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; page = &lt;SPAN style="COLOR: #a31515"&gt;"1"&lt;/SPAN&gt;,&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Items = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;[] {&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;entity&lt;/SPAN&gt; { &lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; name = &lt;SPAN style="COLOR: #a31515"&gt;"account"&lt;/SPAN&gt;, &lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Items = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;[] {&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;linkentity&lt;/SPAN&gt; {&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; name = &lt;SPAN style="COLOR: #a31515"&gt;"contact"&lt;/SPAN&gt;, &lt;SPAN style="COLOR: green"&gt;// link entity schema name&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; from = &lt;SPAN style="COLOR: #a31515"&gt;"contactid"&lt;/SPAN&gt;, &lt;SPAN style="COLOR: green"&gt;// link entity key schema name&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; to = &lt;SPAN style="COLOR: #a31515"&gt;"primarycontactid"&lt;/SPAN&gt;, &lt;SPAN style="COLOR: green"&gt;// parent link entity key schema name&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Items = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;[] {&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;attribute&lt;/SPAN&gt; { name = &lt;SPAN style="COLOR: #a31515"&gt;"contactid"&lt;/SPAN&gt; },&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;attribute&lt;/SPAN&gt; { name = &lt;SPAN style="COLOR: #a31515"&gt;"fullname"&lt;/SPAN&gt; },&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;order&lt;/SPAN&gt; { attribute = &lt;SPAN style="COLOR: #a31515"&gt;"fullname"&lt;/SPAN&gt;, descending = &lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt; } &lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; },&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;attribute&lt;/SPAN&gt; { name = &lt;SPAN style="COLOR: #a31515"&gt;"accountid"&lt;/SPAN&gt; }, &lt;SPAN style="COLOR: green"&gt;// or new allattributes { }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;attribute&lt;/SPAN&gt; { name = &lt;SPAN style="COLOR: #a31515"&gt;"name"&lt;/SPAN&gt; }&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; },&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;order&lt;/SPAN&gt; { attribute = &lt;SPAN style="COLOR: #a31515"&gt;"name"&lt;/SPAN&gt;, descending = &lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt; } &lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;};&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR&gt;Now that we have defined the query we need to create a string representation of it so that the crm web service can understand it. To do that we will use the XmlSerializer to serialize this fetch instance.&lt;BR&gt;&lt;BR&gt;
&lt;DIV style="FONT-FAMILY: Courier New; BACKGROUND: white; COLOR: black; FONT-SIZE: 10pt"&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;XmlSerializer&lt;/SPAN&gt; xs = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;XmlSerializer&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;typeof&lt;/SPAN&gt;(&lt;SPAN style="COLOR: #2b91af"&gt;fetch&lt;/SPAN&gt;));&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;StringWriter&lt;/SPAN&gt; sw = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;StringWriter&lt;/SPAN&gt;();&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;xs.Serialize(sw, f);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;sw.Close();&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; fetchXml = sw.ToString();&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; result = sdk.Fetch(fetchXml);&lt;/PRE&gt;&lt;/DIV&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7140385" width="1" height="1"&gt;</content><author><name>gperera</name><uri>http://weblogs.asp.net/members/gperera.aspx</uri></author><category term="Dynamics CRM" scheme="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx" /></entry><entry><title>Dynamics CRM 4 Visio Stencils</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/gayanperera/archive/2008/12/10/dynamics-crm-4-visio-stencils.aspx" /><id>http://weblogs.asp.net/gayanperera/archive/2008/12/10/dynamics-crm-4-visio-stencils.aspx</id><published>2008-12-10T04:38:00Z</published><updated>2008-12-10T04:38:00Z</updated><content type="html">&lt;p&gt;We have decided to release the &lt;a href="http://www.magnetism.co.nz/dynamics_crm/visio_stencil_set.aspx" mce_href="http://www.magnetism.co.nz/dynamics_crm/visio_stencil_set.aspx"&gt;Visio Stencils&lt;/a&gt; we've been using for Dynamics CRM 4 projects, find out more about them &lt;a href="http://www.magnetism.co.nz/dynamics_crm/visio_stencil_set.aspx" mce_href="http://www.magnetism.co.nz/dynamics_crm/visio_stencil_set.aspx"&gt;here.&lt;/a&gt;&lt;br&gt;&lt;br&gt;Sneak peak of the shapes you can use on Create/Update (eg: Popup windows)&lt;br&gt;&lt;br&gt;&lt;img src="http://www.magnetism.co.nz/admin/common/images/custom/All%20items%20pop%20up.jpg" mce_src="http://www.magnetism.co.nz/admin/common/images/custom/All%20items%20pop%20up.jpg" width="600" height="400"&gt;&lt;br&gt;&lt;br&gt;Here is the Account screen duplicated with the stencil set. You'll notice subtle differences, but to the client it looks like the real thing.&lt;br&gt;&lt;br&gt;&lt;img src="http://www.magnetism.co.nz/admin/common/images/custom/Pop%20Up.jpg" mce_src="http://www.magnetism.co.nz/admin/common/images/custom/Pop%20Up.jpg" width="600" height="400"&gt;&lt;br&gt;&lt;br&gt;Enjoy&lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6776148" width="1" height="1"&gt;</content><author><name>gperera</name><uri>http://weblogs.asp.net/members/gperera.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx" /><category term="Dynamics CRM" scheme="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx" /></entry><entry><title>CRM 4 Activity Direction Indicator (experimental)</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/gayanperera/archive/2008/12/04/crm-4-activity-direction-indicator-experimental.aspx" /><id>http://weblogs.asp.net/gayanperera/archive/2008/12/04/crm-4-activity-direction-indicator-experimental.aspx</id><published>2008-12-04T04:40:00Z</published><updated>2008-12-04T04:40:00Z</updated><content type="html">&lt;p&gt;I've been trying to change the icons under History for each entity to show the direction of the email or phone call. &lt;br&gt;&lt;br&gt;Using Fiddler I found out that &lt;b&gt;areas.aspx&lt;/b&gt; was responsible for rendering the grid when you click on History, then when you click on the Refresh button or create a new Activity it automatically refreshes the grid, that call is made into the &lt;b&gt;AppGridWebService.asmx&lt;/b&gt; which returns the formatted html of the grid. &lt;br&gt;&lt;br&gt;Unfortunitely I'm not sure how I can hook into the .asmx and modify the returned html.&lt;br&gt;&lt;br&gt;Leaving &lt;b&gt;AppGridWebService.asmx&lt;/b&gt; aside for now, &lt;b&gt;areas.aspx&lt;/b&gt; was easy to hook into, here is the result.&lt;br&gt;&lt;img src="http://weblogs.asp.net/blogs/gayanperera/activitydirection.jpg" mce_src="http://weblogs.asp.net/blogs/gayanperera/activitydirection.jpg" vspace="5" width="502" align="middle" height="155" hspace="5"&gt;&lt;br&gt;1st Phone call: an outbound call which is displaying the custom outbound phonecall image.&lt;br&gt;2nd; an inbound call, lastly the email is an outbound email with a custom icon.&lt;br&gt;&lt;br&gt;To hook into &lt;span style="font-weight: bold;"&gt;areas.aspx&lt;/span&gt; create a new &lt;span style="font-weight: bold;"&gt;HttpModule&lt;/span&gt; then on &lt;span style="font-weight: bold;"&gt;BeginRequest&lt;/span&gt;&lt;br&gt;
&lt;/p&gt;&lt;div style="background: white none repeat scroll 0% 0%; font-family: Courier New; font-size: 10pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;HttpApplication&lt;/span&gt; app = sender &lt;span style="color: blue;"&gt;as&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;HttpApplication&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: green;"&gt;// make sure we're hooking into the correct page&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (app.Request.AppRelativeCurrentExecutionFilePath.ToLower().Contains(&lt;span style="color: rgb(163, 21, 21);"&gt;"areas.aspx"&lt;/span&gt;))&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (app.Request.QueryString[&lt;span style="color: rgb(163, 21, 21);"&gt;"tabSet"&lt;/span&gt;] != &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// check we're hooking into the history page only&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (app.Request.QueryString[&lt;span style="color: rgb(163, 21, 21);"&gt;"tabSet"&lt;/span&gt;].ToLower().Equals(&lt;span style="color: rgb(163, 21, 21);"&gt;"areaactivityhistory"&lt;/span&gt;))&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; app.Response.Filter = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;DirectionFilter&lt;/span&gt;(app.Response.Filter);&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;}&lt;br&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;span style="font-weight: bold;"&gt;DirectionFilter&lt;/span&gt; will manage replacing of icons. Inherit from Stream and implement the various properties/methods, most important is the Write(...) method.&lt;br&gt;
&lt;/p&gt;&lt;div style="background: white none repeat scroll 0% 0%; font-family: Courier New; font-size: 10pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt; html = System.Text.&lt;span style="color: rgb(43, 145, 175);"&gt;Encoding&lt;/span&gt;.UTF8.GetString(buffer, offset, count);&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: green;"&gt;// find the activity type code&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt; index = html.IndexOf(ACTIVITY_TYPECODE);&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;while&lt;/span&gt; (index &amp;gt; 0)&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; typeCode = 0;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt;.TryParse(html.Substring(index + 7, 4), &lt;span style="color: blue;"&gt;out&lt;/span&gt; typeCode))&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt; activityId = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt;(&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// look back 44 chrs, from 'otype=' (36=guid, } encoded=6, space and "=2 == 44)&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; html.Substring(index - 44, 36));&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;switch&lt;/span&gt; (typeCode)&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;case&lt;/span&gt; 4210: &lt;span style="color: green;"&gt;// phone call&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; html = Replace(sdk, html, index, activityId, &lt;span style="color: rgb(163, 21, 21);"&gt;"phonecall"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"ico_16_4210_1.gif"&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;break&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;case&lt;/span&gt; 4202:&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; html = Replace(sdk, html, index, activityId, &lt;span style="color: rgb(163, 21, 21);"&gt;"email"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"ico_16_4202_1.gif"&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;break&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;default&lt;/span&gt;:&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;break&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; index = html.IndexOf(ACTIVITY_TYPECODE, index + 1);&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;buffer = System.Text.&lt;span style="color: rgb(43, 145, 175);"&gt;Encoding&lt;/span&gt;.UTF8.GetBytes(html);&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;_stream.Write(buffer, 0, buffer.Length);&lt;br&gt;&lt;br&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;span style="font-weight: bold;"&gt;Constants&lt;/span&gt;
&lt;span style="color: blue;"&gt;&lt;br&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; ACTIVITY_TYPECODE = &lt;span style="color: rgb(163, 21, 21);"&gt;"otype=\""&lt;/span&gt;;
&lt;span style="color: blue;"&gt;&lt;br&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; ACTIVITY_IMAGE = &lt;span style="color: rgb(163, 21, 21);"&gt;"src=\"&amp;amp;#47;_imgs&amp;amp;#47;ico_16_"&lt;/span&gt;;&lt;/p&gt;&lt;div style="background: white none repeat scroll 0% 0%; font-family: Courier New; font-size: 10pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;
&lt;/div&gt;

&lt;p&gt;&lt;span style="font-weight: bold;"&gt;Replace function&lt;/span&gt;&lt;br&gt;Activity image is couple of columns away from the "&lt;span style="font-weight: bold;"&gt;otype=&lt;/span&gt;" attribute&lt;br&gt;IsOutgoing is not important, it's just connecting to CRM and making a RetrieveRequest to find out the direction of the activity.&lt;br&gt;&lt;br&gt;We'll leave html encoded, we could use &lt;span style="font-weight: bold;"&gt;HttpUtility.Decode&lt;/span&gt; to avoid having to use "&lt;span style="font-weight: bold;"&gt;ACTIVITY_IMAGE = &lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); font-weight: bold;"&gt;"src=\"&amp;amp;#47;_imgs&amp;amp;#47;ico_16_"&lt;/span&gt;"&lt;/p&gt;&lt;div style="background: white none repeat scroll 0% 0%; font-family: Courier New; font-size: 10pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Replace(&lt;span style="color: rgb(43, 145, 175);"&gt;CrmService&lt;/span&gt; sdk, &lt;span style="color: blue;"&gt;string&lt;/span&gt; html, &lt;span style="color: blue;"&gt;int&lt;/span&gt; currentIndex, &lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt; activityId, &lt;span style="color: blue;"&gt;string&lt;/span&gt; entity, &lt;span style="color: blue;"&gt;string&lt;/span&gt; outgoingImage)&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; imgIndex = html.IndexOf(ACTIVITY_IMAGE, currentIndex);&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (imgIndex &amp;gt; -1)&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// connect to crm, check activity directioncode&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (IsOutgoing(sdk, entity, activityId))&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// remove the existing image if its outgoing&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; html = html.Remove(imgIndex, ACTIVITY_IMAGE.Length + 9); &lt;span style="color: green;"&gt;// ico_xxxx.gif" = 9 chars&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// replace with the newone&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; html = html.Insert(imgIndex, &lt;span style="color: blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: rgb(163, 21, 21);"&gt;"src=\"/_imgs/{0}\""&lt;/span&gt;, outgoingImage));&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; html;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Please note this is experimental, if you'd like the code so you can play around with it flick me an email. Looking forward to hearing comments on how we can get the &lt;span style="font-weight: bold;"&gt;Refresh&lt;/span&gt; icon to retain the changed icons.&lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6765122" width="1" height="1"&gt;</content><author><name>gperera</name><uri>http://weblogs.asp.net/members/gperera.aspx</uri></author><category term="C#" scheme="http://weblogs.asp.net/gayanperera/archive/tags/C_2300_/default.aspx" /><category term="ASP.NET" scheme="http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx" /><category term="Dynamics CRM" scheme="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx" /><category term="CRM 4" scheme="http://weblogs.asp.net/gayanperera/archive/tags/CRM+4/default.aspx" /></entry><entry><title>CRM 4 Incremental Numbering for any Entity</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/gayanperera/archive/2008/10/23/crm-4-incremental-numbering-for-any-entity.aspx" /><id>http://weblogs.asp.net/gayanperera/archive/2008/10/23/crm-4-incremental-numbering-for-any-entity.aspx</id><published>2008-10-23T10:12:00Z</published><updated>2008-10-23T10:12:00Z</updated><content type="html">&lt;p&gt;&lt;b&gt;UPDATE 08/01/2009&lt;/b&gt;&lt;br&gt;- Project is now on CodePlex (&lt;a href="http://www.codeplex.com/crmnumbering/" target="_blank" mce_href="http://www.codeplex.com/crmnumbering/"&gt;http://www.codeplex.com/crmnumbering/&lt;/a&gt;)&lt;br&gt;&lt;br&gt;MYOB can only take 8 characters and accountants don't like seeing cryptic Invoice Numbers that CRM generate, so we ended up writing a custom plugin that automatically incremented each invoice. Keeping extensibility in mind we made it work with any customizable entity. Here is how we did it.&lt;br&gt;&lt;br&gt;&lt;img src="http://weblogs.asp.net/blogs/gayanperera/incremental_numbering_1.jpg" mce_src="http://weblogs.asp.net/blogs/gayanperera/incremental_numbering_1.jpg" vspace="0" hspace="0"&gt;&lt;br&gt;&lt;br&gt;We created a simple organization owned entity that held the type of entity you wanted to increment, the property/field you wanted to increment and the current/starting position.&lt;br&gt;The field to increment must be of type integer.&lt;br&gt;&lt;br&gt;Next we wrote a plugin that hooked into the Pre-Create event synchronously, check the target, get the incremental settings for this entity, make sure the property specified is not in the property bag, increment the current number and update our custom entity with the newest number.&lt;br&gt;&lt;/p&gt;

&lt;div style="background: white none repeat scroll 0% 0%; font-family: Courier New; font-size: 10pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Execute(&lt;span style="color: rgb(43, 145, 175);"&gt;IPluginExecutionContext&lt;/span&gt; context)&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;{&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (context.InputParameters.Properties.Contains(&lt;span style="color: rgb(163, 21, 21);"&gt;"Target"&lt;/span&gt;) &amp;amp;&amp;amp;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; context.InputParameters.Properties[&lt;span style="color: rgb(163, 21, 21);"&gt;"Target"&lt;/span&gt;] &lt;span style="color: blue;"&gt;is&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;DynamicEntity&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(43, 145, 175);"&gt;DynamicEntity&lt;/span&gt; entity = context.InputParameters.Properties[&lt;span style="color: rgb(163, 21, 21);"&gt;"Target"&lt;/span&gt;] &lt;span style="color: blue;"&gt;as&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;DynamicEntity&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// simple query to get incremental settings for this entity&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(43, 145, 175);"&gt;IncrementalNumbering&lt;/span&gt; setting = GetSettings(context, entity.Name);&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// system generated, if its assigned ignore this record&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (setting != &lt;span style="color: blue;"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !entity.Properties.Contains(setting.PropertyName))&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; next = setting.CurrentPosition + 1;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(43, 145, 175);"&gt;CrmNumberProperty&lt;/span&gt; increment = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;CrmNumberProperty&lt;/span&gt;(setting.PropertyName, &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;CrmNumber&lt;/span&gt;(next));&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; entity.Properties.Add(increment);&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// keep track of the latest id inside the custom entity&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; setting.Increment(context, next);&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;br&gt;GetSettings call above finds the matching setting, if it finds one it
calls overloaded constructor below passing it the Dynamic Entity which
then convert the CRM specific types into basic .NET types.&lt;br&gt;&lt;br&gt;Here is the IncrementalNumbering class. 
&lt;div style="background: white none repeat scroll 0% 0%; font-family: Courier New; font-size: 10pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;IncrementalNumbering&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;{&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Fields&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Id = &lt;span style="color: rgb(163, 21, 21);"&gt;"mag_incrementalnumberingid"&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; EntityName = &lt;span style="color: rgb(163, 21, 21);"&gt;"mag_entity_schema_name"&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; PropertyName = &lt;span style="color: rgb(163, 21, 21);"&gt;"mag_property_schema_name"&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; CurrentPosition = &lt;span style="color: rgb(163, 21, 21);"&gt;"mag_currentposition"&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; IncrementalNumbering() { }&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; IncrementalNumbering(&lt;span style="color: rgb(43, 145, 175);"&gt;DynamicEntity&lt;/span&gt; entity) &lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.Id = (entity.Properties[&lt;span style="color: rgb(43, 145, 175);"&gt;Fields&lt;/span&gt;.Id] &lt;span style="color: blue;"&gt;as&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Key&lt;/span&gt;).Value;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.EntityName = entity.Properties[&lt;span style="color: rgb(43, 145, 175);"&gt;Fields&lt;/span&gt;.EntityName].ToString();&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.PropertyName = entity.Properties[&lt;span style="color: rgb(43, 145, 175);"&gt;Fields&lt;/span&gt;.PropertyName].ToString();&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.CurrentPosition = (entity.Properties[&lt;span style="color: rgb(43, 145, 175);"&gt;Fields&lt;/span&gt;.CurrentPosition] &lt;span style="color: blue;"&gt;as&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;CrmNumber&lt;/span&gt;).Value;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Increment(&lt;span style="color: rgb(43, 145, 175);"&gt;IPluginExecutionContext&lt;/span&gt; context, &lt;span style="color: blue;"&gt;int&lt;/span&gt; next)&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;using&lt;/span&gt; (&lt;span style="color: rgb(43, 145, 175);"&gt;ICrmService&lt;/span&gt; service = context.CreateCrmService(&lt;span style="color: blue;"&gt;true&lt;/span&gt;))&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.CurrentPosition = next; &lt;span style="color: green;"&gt;// set before calling ToDynamic&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(43, 145, 175);"&gt;TargetUpdateDynamic&lt;/span&gt; target = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;TargetUpdateDynamic&lt;/span&gt;();&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; target.Entity = &lt;span style="color: blue;"&gt;this&lt;/span&gt;.ToDynamic();&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(43, 145, 175);"&gt;UpdateRequest&lt;/span&gt; request = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;UpdateRequest&lt;/span&gt;();&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; request.Target = target;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; service.Execute(request);&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// include rest of the fields, but leave it for now&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;DynamicEntity&lt;/span&gt; ToDynamic()&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(43, 145, 175);"&gt;DynamicEntity&lt;/span&gt; entity = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;DynamicEntity&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;IncrementalNumbering&lt;/span&gt;.SchemaName);&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(43, 145, 175);"&gt;PropertyCollection&lt;/span&gt; properties = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;PropertyCollection&lt;/span&gt;();&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; properties.Add(&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;KeyProperty&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;Fields&lt;/span&gt;.Id, &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Key&lt;/span&gt;(&lt;span style="color: blue;"&gt;this&lt;/span&gt;.Id)));&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; properties.Add(&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;CrmNumberProperty&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;Fields&lt;/span&gt;.CurrentPosition, &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;CrmNumber&lt;/span&gt;(&lt;span style="color: blue;"&gt;this&lt;/span&gt;.CurrentPosition)));&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; entity.Properties = properties;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; entity;&lt;/pre&gt;
&lt;pre style="margin: 0px; font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;br&gt;Here is the result&lt;br&gt;&lt;img src="http://weblogs.asp.net/blogs/gayanperera/incremental_numbering_2.jpg" mce_src="http://weblogs.asp.net/blogs/gayanperera/incremental_numbering_2.jpg"&gt;&lt;br&gt;&lt;br&gt;Bit of a hack with converting between CRM and .NET types, keep an eye out for another post where I'll be showing you how to wrap CRM entities so that you're only working with .NET types. If you want the full sample including code; send me an email.&lt;br&gt;&lt;br&gt;Enjoy!&lt;br&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6699496" width="1" height="1"&gt;</content><author><name>gperera</name><uri>http://weblogs.asp.net/members/gperera.aspx</uri></author><category term="C#" scheme="http://weblogs.asp.net/gayanperera/archive/tags/C_2300_/default.aspx" /><category term="ASP.NET" scheme="http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx" /><category term="Dynamics CRM" scheme="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx" /></entry><entry><title>CRM 4 Custom Workflow to Validate NZ Bank Account/IRD Number</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/gayanperera/archive/2008/10/07/crm-4-custom-workflow-to-validate-nz-bank-account-ird-number.aspx" /><id>http://weblogs.asp.net/gayanperera/archive/2008/10/07/crm-4-custom-workflow-to-validate-nz-bank-account-ird-number.aspx</id><published>2008-10-07T06:06:00Z</published><updated>2008-10-07T06:06:00Z</updated><content type="html">&lt;p&gt;Recently we created a payroll solution which integrated with Microsoft Dynamics CRM 4, part of that was to validate the Bank Account and IRD Numbers. &lt;br&gt;&lt;br&gt;Here's a screenshot of a sample workflow. You can download the code from &lt;a href="http://www.dotheyknow.net.nz/Magnetism.Crm.Addons.rar" title="Download the code" target="_blank" mce_href="http://www.dotheyknow.net.nz/Magnetism.Crm.Addons.rar"&gt;here&lt;/a&gt;.&lt;br&gt;&lt;br&gt;&lt;a href="http://weblogs.asp.net/blogs/gayanperera/ird.bank.workflow.gif" title="View larger image" target="_blank" mce_href="http://weblogs.asp.net/blogs/gayanperera/ird.bank.workflow.gif"&gt;&lt;img src="http://weblogs.asp.net/blogs/gayanperera/ird.bank.workflow.gif" title="Workflow" alt="Workflow" mce_src="http://weblogs.asp.net/blogs/gayanperera/ird.bank.workflow.gif" border="0" width="455" height="230"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;Solution contains a Util.cs class which you can use on your other projects to validate New Zealand Bank Account &amp;amp; IRD numbers&amp;nbsp; as well as 3 workflow activities:&lt;br&gt;&lt;br&gt;&lt;b&gt;- BankAccountNumberValidator.cs&lt;/b&gt;&lt;br&gt;&amp;nbsp; Validates the bank account number and returns true/false (IsValid property)&lt;br&gt;&lt;br&gt;&lt;b&gt;- CleanBankAccountNumber.cs&lt;/b&gt;&lt;br&gt;&amp;nbsp; Given a bank account number it cleans and formats it to xx-xxxx-xxxxxxx-xxxx&lt;br&gt;&lt;br&gt;&lt;b&gt;- IRDNumberValidator.cs&lt;/b&gt;&lt;br&gt;&amp;nbsp; Validates the ird number and returns true/false (IsValid property)&lt;br&gt;&lt;br&gt;Enjoy, keep and eye out for more CRM goodies...&lt;br&gt;&lt;/p&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6661316" width="1" height="1"&gt;</content><author><name>gperera</name><uri>http://weblogs.asp.net/members/gperera.aspx</uri></author><category term="C#" scheme="http://weblogs.asp.net/gayanperera/archive/tags/C_2300_/default.aspx" /><category term="ASP.NET" scheme="http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx" /><category term="Dynamics CRM" scheme="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx" /></entry><entry><title>CRM 4 Custom Workflow Activity Editor Bug/Fix</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/gayanperera/archive/2008/09/23/crm-4-custom-workflow-activity-editor-bug-fix.aspx" /><id>http://weblogs.asp.net/gayanperera/archive/2008/09/23/crm-4-custom-workflow-activity-editor-bug-fix.aspx</id><published>2008-09-23T04:34:00Z</published><updated>2008-09-23T04:34:00Z</updated><content type="html">
&lt;p&gt;&lt;b&gt;Description&lt;/b&gt;&lt;br&gt;Using the workflow editor, if you open up a custom workflow activity and being to edit a step, if that step contains a dynamic value (slug); it duplicates it. First time you add the dynamic value it works fine, after you save and close then reopen that step you'll see the dynamic value displayed twice.&lt;br&gt;&lt;br&gt;eg: &lt;br&gt;before save and close: &lt;span style="background-color: yellow;"&gt;{SomeField(Entity)}&lt;/span&gt;&lt;br&gt;after save and close: &lt;span style="background-color: yellow;"&gt;{SomeField(Entity)}&lt;/span&gt;&lt;span style="background-color: yellow;"&gt;{SomeField(Entity)}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Reproduce&lt;/b&gt;&lt;br&gt;1. Create a custom workflow activity or compile and register one of the supplied workflows from CrmSdk 4.0*&lt;br&gt;2. Restart IIS&lt;br&gt;3. Create a new Workflow&lt;br&gt;4. Add a new workflow step (The custom activity you created/registered in step 1)&lt;br&gt;5. Assign a dynamic value to one of the properties&lt;br&gt;6. Save &amp;amp; Close&lt;br&gt;7. Reopen the step, you'll see the dynamic value/slug displayed twice&lt;br&gt;&lt;br&gt;&lt;b&gt;Fix&lt;/b&gt;&lt;br&gt;
&lt;span style="color: red; font-weight: bold;"&gt;*Unsupported*&lt;/span&gt;&lt;br&gt;1. Go into the server, SFA\workflow\ folder&lt;br&gt;2. Open customactivityform.aspx in notepad&lt;br&gt;3. Find line 31 and 34, you'll see that the same call is duplicated twice, comment one of them out&lt;br&gt;&lt;/p&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6638487" width="1" height="1"&gt;</content><author><name>gperera</name><uri>http://weblogs.asp.net/members/gperera.aspx</uri></author><category term="Dynamics CRM" scheme="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx" /></entry></feed>