<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Kids, don't try this at home! : ASP.NET</title><link>http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx</link><description>Tags: ASP.NET</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>Dynamics CRM SDK for the iPhone</title><link>http://weblogs.asp.net/gayanperera/archive/2009/12/30/dynamics-crm-sdk-for-the-iphone.aspx</link><pubDate>Tue, 29 Dec 2009 21:01:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7294467</guid><dc:creator>gperera</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/gayanperera/rsscomments.aspx?PostID=7294467</wfw:commentRss><comments>http://weblogs.asp.net/gayanperera/archive/2009/12/30/dynamics-crm-sdk-for-the-iphone.aspx#comments</comments><description>&lt;P&gt;About 3 months ago I wrote that we were working on making the Dynamics CRM SDK available to the iPhone via MonoTouch. We have finally completed porting the crm sdk to the iPhone.&lt;/P&gt;
&lt;P&gt;If you look closely at the previous blog entry you'll notice we used a "CrmWebRequest" class to perform operations on the crm server, we decided to scrap that idea and make the code consistant, what this means for you is that the code you write is exactly the same for Windows and the iPhone, you can take existing code samples from msdn, forums, blogs ...etc and copy paste them directly into an iPhone project.&lt;/P&gt;
&lt;P style="TEXT-ALIGN: center"&gt;&lt;IMG style="WIDTH: 600px; HEIGHT: 350px" title="Dynamics CRM for the iPhone" border=0 alt="Dynamics CRM for the iPhone" vspace=10 src="http://weblogs.asp.net/blogs/gayanperera/dynamics-crm-iphone-complete-small.png" width=600 height=350 mce_src="http://weblogs.asp.net/blogs/gayanperera/dynamics-crm-iphone-complete-small.png"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;A title="Dynamics CRM SDK for the iPhone" href="http://weblogs.asp.net/blogs/gayanperera/dynamics-crm-iphone-complete.png" target=_blank mce_href="http://weblogs.asp.net/blogs/gayanperera/dynamics-crm-iphone-complete.png"&gt;Click here&lt;/A&gt; to see the full screenshot.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7294467" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx">Dynamics CRM</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/iPhone/default.aspx">iPhone</category></item><item><title>SSRS Report Show Dynamics CRM Note Attachment</title><link>http://weblogs.asp.net/gayanperera/archive/2009/10/01/ssrs-report-show-dynamics-crm-note-attachment.aspx</link><pubDate>Thu, 01 Oct 2009 10:32:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7220829</guid><dc:creator>gperera</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/gayanperera/rsscomments.aspx?PostID=7220829</wfw:commentRss><comments>http://weblogs.asp.net/gayanperera/archive/2009/10/01/ssrs-report-show-dynamics-crm-note-attachment.aspx#comments</comments><description>&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;</description><category domain="http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx">Dynamics CRM</category></item><item><title>Dynamics CRM 4 SDK for the iPhone via MonoTouch</title><link>http://weblogs.asp.net/gayanperera/archive/2009/09/22/dynamics-crm-4-sdk-for-the-iphone-via-monotouch.aspx</link><pubDate>Mon, 21 Sep 2009 22:35:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7213560</guid><dc:creator>gperera</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/gayanperera/rsscomments.aspx?PostID=7213560</wfw:commentRss><comments>http://weblogs.asp.net/gayanperera/archive/2009/09/22/dynamics-crm-4-sdk-for-the-iphone-via-monotouch.aspx#comments</comments><description>&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;</description><category domain="http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx">Dynamics CRM</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/MonoTouch/default.aspx">MonoTouch</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/iPhone/default.aspx">iPhone</category></item><item><title>Dynamics CRM 4 Mobile Express Released!</title><link>http://weblogs.asp.net/gayanperera/archive/2009/07/10/dynamics-crm-4-mobile-express-released.aspx</link><pubDate>Fri, 10 Jul 2009 05:07:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7144410</guid><dc:creator>gperera</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/gayanperera/rsscomments.aspx?PostID=7144410</wfw:commentRss><comments>http://weblogs.asp.net/gayanperera/archive/2009/07/10/dynamics-crm-4-mobile-express-released.aspx#comments</comments><description>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;</description><category domain="http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx">Dynamics CRM</category></item><item><title>Dynamics CRM Workflow - Automatically Email any Report generated in CRM as a PDF attachment</title><link>http://weblogs.asp.net/gayanperera/archive/2009/07/02/dynamics-crm-workflow-send-pdf-invoice-automatically.aspx</link><pubDate>Thu, 02 Jul 2009 03:43:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7138379</guid><dc:creator>gperera</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/gayanperera/rsscomments.aspx?PostID=7138379</wfw:commentRss><comments>http://weblogs.asp.net/gayanperera/archive/2009/07/02/dynamics-crm-workflow-send-pdf-invoice-automatically.aspx#comments</comments><description>&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/_backup/clients/media/crmreportintopdf.html" target=_blank mce_href="http://www.magnetism.co.nz/_backup/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;</description><category domain="http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx">Dynamics CRM</category></item><item><title>Dynamics CRM 4 - Progress Bar</title><link>http://weblogs.asp.net/gayanperera/archive/2009/05/05/dynamics-crm-4-progress-bar.aspx</link><pubDate>Tue, 05 May 2009 09:27:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7073562</guid><dc:creator>gperera</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/gayanperera/rsscomments.aspx?PostID=7073562</wfw:commentRss><comments>http://weblogs.asp.net/gayanperera/archive/2009/05/05/dynamics-crm-4-progress-bar.aspx#comments</comments><description>&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;</description><category domain="http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx">Dynamics CRM</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/jQuery/default.aspx">jQuery</category></item><item><title>Web Form to Dynamics CRM 4</title><link>http://weblogs.asp.net/gayanperera/archive/2009/03/19/web-form-to-dynamics-crm-4.aspx</link><pubDate>Wed, 18 Mar 2009 11:38:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6974439</guid><dc:creator>gperera</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/gayanperera/rsscomments.aspx?PostID=6974439</wfw:commentRss><comments>http://weblogs.asp.net/gayanperera/archive/2009/03/19/web-form-to-dynamics-crm-4.aspx#comments</comments><description>
&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;</description><category domain="http://weblogs.asp.net/gayanperera/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx">Dynamics CRM</category></item><item><title>Dynamics CRM 4 Visio Stencils</title><link>http://weblogs.asp.net/gayanperera/archive/2008/12/10/dynamics-crm-4-visio-stencils.aspx</link><pubDate>Wed, 10 Dec 2008 04:38:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6776148</guid><dc:creator>gperera</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/gayanperera/rsscomments.aspx?PostID=6776148</wfw:commentRss><comments>http://weblogs.asp.net/gayanperera/archive/2008/12/10/dynamics-crm-4-visio-stencils.aspx#comments</comments><description>&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;</description><category domain="http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx">Dynamics CRM</category></item><item><title>CRM 4 Activity Direction Indicator (experimental)</title><link>http://weblogs.asp.net/gayanperera/archive/2008/12/04/crm-4-activity-direction-indicator-experimental.aspx</link><pubDate>Thu, 04 Dec 2008 04:40:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6765122</guid><dc:creator>gperera</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/gayanperera/rsscomments.aspx?PostID=6765122</wfw:commentRss><comments>http://weblogs.asp.net/gayanperera/archive/2008/12/04/crm-4-activity-direction-indicator-experimental.aspx#comments</comments><description>&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;</description><category domain="http://weblogs.asp.net/gayanperera/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx">Dynamics CRM</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/CRM+4/default.aspx">CRM 4</category></item><item><title>CRM 4 Incremental Numbering for any Entity</title><link>http://weblogs.asp.net/gayanperera/archive/2008/10/23/crm-4-incremental-numbering-for-any-entity.aspx</link><pubDate>Thu, 23 Oct 2008 10:12:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6699496</guid><dc:creator>gperera</dc:creator><slash:comments>9</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/gayanperera/rsscomments.aspx?PostID=6699496</wfw:commentRss><comments>http://weblogs.asp.net/gayanperera/archive/2008/10/23/crm-4-incremental-numbering-for-any-entity.aspx#comments</comments><description>&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;</description><category domain="http://weblogs.asp.net/gayanperera/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx">Dynamics CRM</category></item><item><title>CRM 4 Custom Workflow to Validate NZ Bank Account/IRD Number</title><link>http://weblogs.asp.net/gayanperera/archive/2008/10/07/crm-4-custom-workflow-to-validate-nz-bank-account-ird-number.aspx</link><pubDate>Tue, 07 Oct 2008 06:06:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6661316</guid><dc:creator>gperera</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/gayanperera/rsscomments.aspx?PostID=6661316</wfw:commentRss><comments>http://weblogs.asp.net/gayanperera/archive/2008/10/07/crm-4-custom-workflow-to-validate-nz-bank-account-ird-number.aspx#comments</comments><description>&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;</description><category domain="http://weblogs.asp.net/gayanperera/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx">Dynamics CRM</category></item><item><title>CRM 4 Preview view render custom content</title><link>http://weblogs.asp.net/gayanperera/archive/2008/09/19/crm-4-preview-view-render-custom-content.aspx</link><pubDate>Fri, 19 Sep 2008 03:50:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6633471</guid><dc:creator>gperera</dc:creator><slash:comments>8</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/gayanperera/rsscomments.aspx?PostID=6633471</wfw:commentRss><comments>http://weblogs.asp.net/gayanperera/archive/2008/09/19/crm-4-preview-view-render-custom-content.aspx#comments</comments><description>&lt;p&gt;We needed to display related entities in the preview view of a custom entity grid, there is no supported way of doing this, so we created a httpmodule, trapped the calls to \_grid\preview.aspx and altered the rendered html.&lt;br&gt;&lt;br&gt;&lt;img src="http://weblogs.asp.net/blogs/gayanperera/preview_view.jpg" mce_src="http://weblogs.asp.net/blogs/gayanperera/preview_view.jpg"&gt;&lt;br&gt;&lt;br&gt;Here is a snippet of code. You can &lt;a href="http://www.dotheyknow.net.nz/crm.previewfilter.rar" target="_blank" title="CRM 4 Preview Filter" mce_href="http://www.dotheyknow.net.nz/crm.previewfilter.rar"&gt;download&lt;/a&gt; the skeleton solution from &lt;a href="http://www.dotheyknow.net.nz/crm.previewfilter.rar" target="_blank" title="CRM 4 Preview Filter" mce_href="http://www.dotheyknow.net.nz/crm.previewfilter.rar"&gt;here&lt;/a&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;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;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; context_BeginRequest(&lt;span style="color: blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color: rgb(43, 145, 175);"&gt;EventArgs&lt;/span&gt; e)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (_isEnabled)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p 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;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;/p&gt;
&lt;p 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.AppRelativeCurrentExecutionFilePath.ToLower().EndsWith(&lt;span style="color: rgb(163, 21, 21);"&gt;"preview.aspx"&lt;/span&gt;))&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p 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;int&lt;/span&gt; type = (app.Request.QueryString[&lt;span style="color: rgb(163, 21, 21);"&gt;"type"&lt;/span&gt;] != &lt;span style="color: blue;"&gt;null&lt;/span&gt;) ? &lt;span style="color: blue;"&gt;int&lt;/span&gt;.Parse(app.Request.QueryString[&lt;span style="color: rgb(163, 21, 21);"&gt;"type"&lt;/span&gt;]) : -1;&lt;/p&gt;
&lt;p 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: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt; id = (app.Request.QueryString[&lt;span style="color: rgb(163, 21, 21);"&gt;"id"&lt;/span&gt;] != &lt;span style="color: blue;"&gt;null&lt;/span&gt;) ? &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt;(app.Request.QueryString[&lt;span style="color: rgb(163, 21, 21);"&gt;"id"&lt;/span&gt;]) : &lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt;.Empty;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p 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;if&lt;/span&gt; (type &amp;gt; 0 &amp;amp;&amp;amp; id != &lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt;.Empty)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p 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; app.Response.ContentType = &lt;span style="color: rgb(163, 21, 21);"&gt;"text/xml"&lt;/span&gt;;&lt;/p&gt;
&lt;p 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; app.Response.Filter = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;PreviewFilter&lt;/span&gt;(app.Response.Filter, type, id);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;br&gt;PreviewFilter.cs&lt;br&gt;&lt;br&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 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;p style="margin: 0px;"&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;PreviewFilter&lt;/span&gt; : &lt;span style="color: rgb(43, 145, 175);"&gt;Stream&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Stream&lt;/span&gt; _stream;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;long&lt;/span&gt; _position;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; _entityId;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt; _objectId;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; PreviewFilter(&lt;span style="color: rgb(43, 145, 175);"&gt;Stream&lt;/span&gt; stream, &lt;span style="color: blue;"&gt;int&lt;/span&gt; entityId, &lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt; objectId)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _stream = stream;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _entityId = entityId;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _objectId = objectId;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p 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;int&lt;/span&gt; EntityId&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; _entityId; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&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;Guid&lt;/span&gt; ObjectId&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; _objectId; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p 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;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Write(&lt;span style="color: blue;"&gt;byte&lt;/span&gt;[] buffer, &lt;span style="color: blue;"&gt;int&lt;/span&gt; offset, &lt;span style="color: blue;"&gt;int&lt;/span&gt; count)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &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;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; html = &lt;span style="color: rgb(163, 21, 21);"&gt;"&amp;lt;preview&amp;gt;Hello World!&amp;lt;/preview&amp;gt;"&lt;/span&gt;; &lt;span style="color: green;"&gt;// enjoy!&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; buffer = System.Text.&lt;span style="color: rgb(43, 145, 175);"&gt;Encoding&lt;/span&gt;.UTF8.GetBytes(html);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _stream.Write(buffer, 0, buffer.Length);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;

&lt;/div&gt;&lt;br&gt;
Compile, copy to the \bin\ directory on the server, open up web.config and add it to the HttpModules section.&lt;br&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6633471" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/gayanperera/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx">Dynamics CRM</category></item><item><title>CRM 4 FilteredViews, LINQ &amp; WCF</title><link>http://weblogs.asp.net/gayanperera/archive/2008/07/20/crm-4-filteredviews-linq-amp-wcf.aspx</link><pubDate>Sun, 20 Jul 2008 08:20:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6423243</guid><dc:creator>gperera</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/gayanperera/rsscomments.aspx?PostID=6423243</wfw:commentRss><comments>http://weblogs.asp.net/gayanperera/archive/2008/07/20/crm-4-filteredviews-linq-amp-wcf.aspx#comments</comments><description>&lt;p mce_keep="true"&gt;We decided to use FilteredViews instead of FetchXml for an internal project, but we ran into couple of problems. You can't access data from&amp;nbsp;the FilteredViews using ASP.NET since it runs under NETWORK SERVICE (by default (app pool)), FilteredViews filter the data by Users.&lt;br&gt;&lt;br&gt;If you set the &amp;lt;identity&amp;gt; settings on the WCF service you'll notice it has no effect, you need to tell WCF to run in&amp;nbsp;asp compatibility mode, check &lt;a href="http://msdn.microsoft.com/en-us/library/bb332338.aspx" class="" title="Hosting and Consuming WCF Services" mce_href="http://msdn.microsoft.com/en-us/library/bb332338.aspx"&gt;this link&lt;/a&gt; for more details.&lt;br&gt;&lt;br&gt;&lt;b&gt;Impersonation needed for FilteredViews&lt;/b&gt;&lt;br&gt;- EXECUTE AS doesn't work, some forums suggested we enable DB_CHAINING, TRUSTWORTHY &amp;amp;&amp;nbsp;grant NETWORK SERVICE Impersonate for each User, we decided to take a different route since these database changes are unsupported by Microsoft.&lt;br&gt;&lt;br&gt;- Configuring the Application Pool to run as a different user gave a "Service Unavailable" error, changing the User that runs when an anonymous request comes into IIS didn't seem to work either.&lt;br&gt;&lt;br&gt;&lt;b&gt;Solution&lt;/b&gt;&lt;br&gt;&lt;b&gt;web.config&lt;/b&gt;&lt;br&gt;&lt;font color="#0000ff" size="2"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;authentication&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt; &lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;mode&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;=&lt;/font&gt;&lt;font size="2"&gt;"&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;Windows&lt;/font&gt;&lt;font size="2"&gt;"&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt; /&amp;gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;identity&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt; &lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;impersonate&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;=&lt;/font&gt;&lt;font size="2"&gt;"&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;true&lt;/font&gt;&lt;font size="2"&gt;"&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt; &lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;userName&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;=&lt;/font&gt;&lt;font size="2"&gt;"&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;...&lt;/font&gt;&lt;font size="2"&gt;"&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt; &lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;password&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;=&lt;/font&gt;&lt;font size="2"&gt;"&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;...&lt;/font&gt;&lt;font size="2"&gt;"&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;/&amp;gt;&lt;br&gt;&lt;font color="#0000ff" size="2"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;system.serviceModel&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;serviceHostingEnvironment&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt; &lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;aspNetCompatibilityEnabled&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;=&lt;/font&gt;&lt;font size="2"&gt;"&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;true&lt;/font&gt;&lt;font size="2"&gt;"&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;serviceHostingEnvironment&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&amp;gt;&lt;br&gt;&amp;lt;/&lt;font color="#a31515" size="2"&gt;system.serviceModel&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#000000"&gt;&lt;br&gt;&lt;b&gt;*.svc.cs &lt;/b&gt;&lt;br&gt;Set this attribute on your service class&lt;br&gt;&lt;font size="2"&gt;[&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;AspNetCompatibilityRequirements&lt;/font&gt;&lt;font size="2"&gt;(RequirementsMode=&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;AspNetCompatibilityRequirementsMode&lt;/font&gt;&lt;font size="2"&gt;.Allowed)]&lt;br&gt;&lt;br&gt;That'll allow you to use FilteredViews in your asp.net application, as you can see there are downsides to this solution. Impersonating username/password is inside the web.config file (unencrypted), only allows us to filter by that user.&lt;br&gt;&lt;br&gt;Check out &lt;a href="http://www.codeplex.com/LinqtoCRM" class="" title="LINQ to CRM" mce_href="http://www.codeplex.com/LinqtoCRM"&gt;LinqtoCRM on codeplex&lt;/a&gt;, this tool will be great once all the LINQ funtionality is implemented.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#000000"&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6423243" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/gayanperera/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/WCF/default.aspx">WCF</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/Dynamics+CRM/default.aspx">Dynamics CRM</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/SQL/default.aspx">SQL</category></item><item><title>Working with Dynamic Controls</title><link>http://weblogs.asp.net/gayanperera/archive/2008/01/29/working-with-dynamic-controls.aspx</link><pubDate>Tue, 29 Jan 2008 01:56:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5668347</guid><dc:creator>gperera</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/gayanperera/rsscomments.aspx?PostID=5668347</wfw:commentRss><comments>http://weblogs.asp.net/gayanperera/archive/2008/01/29/working-with-dynamic-controls.aspx#comments</comments><description>I wanted to find a better way to work with dynamic controls. This is what I was doing before.&lt;br&gt;&lt;br&gt;
&lt;div style="background: white none repeat scroll 0% 50%; font-family: Courier New; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-weight: bold;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: teal; font-weight: normal;"&gt;Control&lt;/span&gt; c = &lt;span style="color: blue; font-weight: normal;"&gt;this&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;.wrapper.FindControl(&lt;/span&gt;&lt;span style="color: maroon; font-weight: normal;"&gt;"dynamictextbox"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: teal; font-weight: normal;"&gt;TextBox&lt;/span&gt; tb = c &lt;span style="color: blue; font-weight: normal;"&gt;as&lt;/span&gt; &lt;span style="color: teal; font-weight: normal;"&gt;TextBox&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; font-weight: normal;"&gt;if&lt;/span&gt; (tb != &lt;span style="color: blue; font-weight: normal;"&gt;null&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Write(tb.Text);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;&lt;br&gt;as you can see doing this for multiple dynamic controls gets a bit tedious, specially&amp;nbsp; if you need to access the same control from different methods, so after some refactoring and with the help of generics this is what I came up with.&lt;br&gt;&lt;br&gt;
&lt;div style="background: white none repeat scroll 0% 50%; font-family: Courier New; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-weight: bold;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; font-weight: normal;"&gt;public&lt;/span&gt; T FindControl&amp;lt;T&amp;gt;(&lt;span style="color: teal; font-weight: normal;"&gt;Control&lt;/span&gt; container, &lt;span style="color: blue; font-weight: normal;"&gt;string&lt;/span&gt; id) &lt;span style="color: blue; font-weight: normal;"&gt;where&lt;/span&gt; T : &lt;span style="color: teal; font-weight: normal;"&gt;Control&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue; font-weight: normal;"&gt;return&lt;/span&gt; (container.FindControl(id) &lt;span style="color: blue; font-weight: normal;"&gt;as&lt;/span&gt; T);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;br&gt;pretty simple, takes the id of the control you want to find and the control it's in, casts it to the type you specify and returns. This is how you would use this function:&lt;br&gt;&lt;br&gt;
&lt;div style="background: white none repeat scroll 0% 50%; font-family: Courier New; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-weight: bold;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: teal; font-weight: normal;"&gt;TextBox&lt;/span&gt; tb = FindControl&amp;lt;&lt;span style="color: teal; font-weight: normal;"&gt;TextBox&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;&amp;gt;(&lt;/span&gt;&lt;span style="color: blue; font-weight: normal;"&gt;this&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;.wrapper, &lt;/span&gt;&lt;span style="color: maroon; font-weight: normal;"&gt;"dynamictextbox"&lt;/span&gt;);&lt;/p&gt;
&lt;/div&gt;&lt;br&gt;we still haven't solved the issue of using this control within multiple methods, so what we should do is create a property.&lt;br&gt;&lt;br&gt;
&lt;div style="background: white none repeat scroll 0% 50%; font-family: Courier New; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-weight: bold;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: teal; font-weight: normal;"&gt;TextBox&lt;/span&gt; _dynamicTextBox;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: teal; font-weight: normal;"&gt;TextBox&lt;/span&gt; DynamicTextBox&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue; font-weight: normal;"&gt;get&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue; font-weight: normal;"&gt;if&lt;/span&gt; (_dynamicTextBox == &lt;span style="color: blue; font-weight: normal;"&gt;null&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _dynamicTextBox = FindControl&amp;lt;&lt;span style="color: teal; font-weight: normal;"&gt;TextBox&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;&amp;gt;(&lt;/span&gt;&lt;span style="color: blue; font-weight: normal;"&gt;this&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;.wrapper, &lt;/span&gt;&lt;span style="color: maroon; font-weight: normal;"&gt;"dynamictextbox"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue; font-weight: normal;"&gt;return&lt;/span&gt; _dynamicTextBox;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;br&gt;
Now you can use this like any other control.&lt;br&gt;
&lt;div style="background: white none repeat scroll 0% 50%; font-family: Courier New; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-weight: bold;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="font-weight: normal;"&gt;Response.Write(&lt;/span&gt;&lt;span style="color: maroon; font-weight: normal;"&gt;&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;&lt;/span&gt;&lt;span style="color: blue; font-weight: normal;"&gt;this&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;.DynamicTextBox.Text);&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5668347" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/gayanperera/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>Storing ViewState in SQL</title><link>http://weblogs.asp.net/gayanperera/archive/2008/01/29/storing-viewstate-in-sql.aspx</link><pubDate>Tue, 29 Jan 2008 01:52:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5668341</guid><dc:creator>gperera</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/gayanperera/rsscomments.aspx?PostID=5668341</wfw:commentRss><comments>http://weblogs.asp.net/gayanperera/archive/2008/01/29/storing-viewstate-in-sql.aspx#comments</comments><description>The new adapter architecture of ASP.NET v2.0 allows you to do some amazing things, We'll use this new feature to store viewstate in sql.&lt;br&gt;&lt;br&gt;Firstly you must add the special folder App_Browsers to your project, then create a new .browser file and add the following&lt;br&gt;&lt;br&gt;&lt;div style="background: white none repeat scroll 0% 50%; font-family: Courier New; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-weight: bold;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; font-weight: normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon; font-weight: normal;"&gt;browsers&lt;/span&gt;&lt;span style="color: blue; font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; font-weight: normal;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon; font-weight: normal;"&gt;browser&lt;/span&gt;&lt;span style="color: blue; font-weight: normal;"&gt; &lt;/span&gt;&lt;span style="color: red; font-weight: normal;"&gt;refID&lt;/span&gt;&lt;span style="color: blue; font-weight: normal;"&gt;=&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;"&lt;/span&gt;&lt;span style="color: blue; font-weight: normal;"&gt;Default&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;"&lt;/span&gt;&lt;span style="color: blue; font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; font-weight: normal;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon; font-weight: normal;"&gt;controlAdapters&lt;/span&gt;&lt;span style="color: blue; font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; font-weight: normal;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon; font-weight: normal;"&gt;adapter&lt;/span&gt;&lt;span style="color: blue; font-weight: normal;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; font-weight: normal;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red; font-weight: normal;"&gt;controlType&lt;/span&gt;&lt;span style="color: blue; font-weight: normal;"&gt;=&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;"&lt;/span&gt;&lt;span style="color: blue; font-weight: normal;"&gt;System.Web.UI.Page&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;"&lt;/span&gt;&lt;span style="color: blue; font-weight: normal;"&gt;&lt;br&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; font-weight: normal;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red; font-weight: normal;"&gt;adapterType&lt;/span&gt;&lt;span style="color: blue; font-weight: normal;"&gt;=&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;"&lt;/span&gt;&lt;span style="color: blue; font-weight: normal;"&gt;Sample.Web.UI.SqlPageAdapter&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;"&lt;/span&gt;&lt;span style="color: blue; font-weight: normal;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; font-weight: normal;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon; font-weight: normal;"&gt;controlAdapters&lt;/span&gt;&lt;span style="color: blue; font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; font-weight: normal;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon; font-weight: normal;"&gt;browser&lt;/span&gt;&lt;span style="color: blue; font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; font-weight: normal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon; font-weight: normal;"&gt;browsers&lt;/span&gt;&lt;span style="color: blue; font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;br&gt;by doing this we are telling the runtime to use Sample.Web.UI.SqlPageAdapter instead of the default System.Web.UI.Page&lt;br&gt;&lt;br&gt;Then we create a new class called SqlPageAdapter that inerits from PageAdapter and override the GetStatePersister method, by default PageAdapter returns PageStatePersister, we will return our own class (SqlPageStatePersister).&lt;br&gt;&lt;br&gt;
&lt;div style="background: white none repeat scroll 0% 50%; font-family: Courier New; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-weight: bold;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; font-weight: normal;"&gt;namespace&lt;/span&gt; Sample.Web.UI&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue; font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: blue; font-weight: normal;"&gt;class&lt;/span&gt; &lt;span style="color: teal; font-weight: normal;"&gt;SqlPageAdapter&lt;/span&gt; : &lt;span style="color: teal; font-weight: normal;"&gt;PageAdapter&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue; font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: blue; font-weight: normal;"&gt;override&lt;/span&gt; &lt;span style="color: teal; font-weight: normal;"&gt;PageStatePersister&lt;/span&gt; GetStatePersister()&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p 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; font-weight: normal;"&gt;return&lt;/span&gt; &lt;span style="color: blue; font-weight: normal;"&gt;new&lt;/span&gt; &lt;span style="color: teal; font-weight: normal;"&gt;SqlPageStatePersister&lt;/span&gt;(Page);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;br&gt;in our SqlPageStatePersister class we override the Load and Save methods. In ASP.NET v1.1 we only had to worry about viewstate, but now there is control state, so we need to serialize/deserialize both, we can do this by using the StateFormatter.&lt;br&gt;&lt;br&gt;
&lt;div style="background: white none repeat scroll 0% 50%; font-family: Courier New; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-weight: bold;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: teal; font-weight: normal;"&gt;IStateFormatter&lt;/span&gt; isf = &lt;span style="color: blue; font-weight: normal;"&gt;this&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;.StateFormatter;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: teal; font-weight: normal;"&gt;Pair&lt;/span&gt; p = &lt;span style="color: blue; font-weight: normal;"&gt;new&lt;/span&gt; &lt;span style="color: teal; font-weight: normal;"&gt;Pair&lt;/span&gt;(&lt;span style="color: blue; font-weight: normal;"&gt;this&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;.ViewState, &lt;/span&gt;&lt;span style="color: blue; font-weight: normal;"&gt;this&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;.ControlState);&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; font-weight: normal;"&gt;string&lt;/span&gt; encoded = isf.Serialize(p);&lt;/p&gt;
&lt;/div&gt;
&lt;br&gt;encoded is a Base64 encoded string.&lt;br&gt;&lt;br&gt;Next we need a key that saves/loads viewstate on each postback. To do this we can store a uniqueidentifier in a hidden field on the page.&lt;br&gt;&lt;br&gt;
&lt;div style="background: white none repeat scroll 0% 50%; font-family: Courier New; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-weight: bold;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: teal; font-weight: normal;"&gt;Guid&lt;/span&gt; GetViewStateKey()&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue; font-weight: normal;"&gt;string&lt;/span&gt; key = &lt;span style="color: blue; font-weight: normal;"&gt;this&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;.Page.Request.Form[&lt;/span&gt;&lt;span style="color: maroon; font-weight: normal;"&gt;"__VIEWSTATEGUID"&lt;/span&gt;];&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue; font-weight: normal;"&gt;if&lt;/span&gt; (&lt;span style="color: blue; font-weight: normal;"&gt;string&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;.IsNullOrEmpty(key) || key.Length &amp;lt; 1)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue; font-weight: normal;"&gt;return&lt;/span&gt; &lt;span style="color: blue; font-weight: normal;"&gt;new&lt;/span&gt; &lt;span style="color: teal; font-weight: normal;"&gt;Guid&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue; font-weight: normal;"&gt;try&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue; font-weight: normal;"&gt;return&lt;/span&gt; &lt;span style="color: blue; font-weight: normal;"&gt;new&lt;/span&gt; &lt;span style="color: teal; font-weight: normal;"&gt;Guid&lt;/span&gt;(key);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue; font-weight: normal;"&gt;catch&lt;/span&gt; (&lt;span style="color: teal; font-weight: normal;"&gt;FormatException&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue; font-weight: normal;"&gt;return&lt;/span&gt; &lt;span style="color: blue; font-weight: normal;"&gt;new&lt;/span&gt; &lt;span style="color: teal; font-weight: normal;"&gt;Guid&lt;/span&gt;();&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;br&gt;Then on the save method we check if the hidden field exists on the page, if not we add it to the page using:&lt;br&gt;&lt;br&gt;
&lt;div style="background: white none repeat scroll 0% 50%; font-family: Courier New; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-weight: bold;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; font-weight: normal;"&gt;this&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;.Page.ClientScript.RegisterHiddenField(&lt;/span&gt;&lt;span style="color: maroon; font-weight: normal;"&gt;"__VIEWSTATEGUID"&lt;/span&gt;, GetViewStateKey().ToString());&lt;/p&gt;
&lt;/div&gt;
&lt;br&gt;Now on our Load method we make another call to the GetViewStateKey() method, use this key to retrieve the base64 encoded viewstate, deserialize into a Pair then assign the Pair.First to ViewState and Pair.Second to ControlState. (we assigned ViewState to first and ControlState to second in our Save method).&lt;br&gt;&lt;br&gt;
&lt;div style="background: white none repeat scroll 0% 50%; font-family: Courier New; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-weight: bold;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: teal; font-weight: normal;"&gt;IStateFormatter&lt;/span&gt; isf = &lt;span style="color: blue; font-weight: normal;"&gt;this&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;.StateFormatter;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: teal; font-weight: normal;"&gt;Pair&lt;/span&gt; p = (&lt;span style="color: teal; font-weight: normal;"&gt;Pair&lt;/span&gt;)isf.Deserialize(dr[&lt;span style="color: maroon; font-weight: normal;"&gt;"Value"&lt;/span&gt;].ToString());&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; font-weight: normal;"&gt;this&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;.ViewState = p.First;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; font-weight: normal;"&gt;this&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;.ControlState = p.Second;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;br&gt;assume dr is a SqlDataReader. Thats it!&lt;br&gt;&lt;br&gt;If you have lots of controls on a page with viewstate enabled, specially datagrids this will reduce the page size considerably, but your pages will be slightly slower because you are hitting sql all the time, so do some tests and find out if viewstate on the page is better or sql is better.&lt;br&gt;&lt;br&gt;Enjoy&lt;br&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5668341" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/gayanperera/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/gayanperera/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item></channel></rss>