<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Mitch Milam's Dynamics CRM Discussions</title>
	
	<link>http://blogs.infinite-x.net</link>
	<description>Knowledge found and lost while working with Microsoft Dynamics CRM</description>
	<lastBuildDate>Mon, 06 Jul 2009 23:32:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/MitchMilam" type="application/rss+xml" /><item>
		<title>CRM 4.0 Hotfix Rollup 5 has been released</title>
		<link>http://feedproxy.google.com/~r/MitchMilam/~3/UHFFm0P7M2E/</link>
		<comments>http://blogs.infinite-x.net/2009/07/02/crm-4-0-hotfix-rollup-5-has-been-released/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 20:41:54 +0000</pubDate>
		<dc:creator>mitch</dc:creator>
				<category><![CDATA[Dynamics CRM]]></category>

		<guid isPermaLink="false">http://blogs.infinite-x.net/2009/07/02/crm-4-0-hotfix-rollup-5-has-been-released/</guid>
		<description><![CDATA[&#160;
Here is the KnowledgeBase article.
]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<p>Here is the <a href="http://support.microsoft.com/kb/970141" target="_blank">KnowledgeBase article</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.infinite-x.net/2009/07/02/crm-4-0-hotfix-rollup-5-has-been-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.infinite-x.net/2009/07/02/crm-4-0-hotfix-rollup-5-has-been-released/</feedburner:origLink></item>
		<item>
		<title>Free Utility Released: Export JavaScript from CRM</title>
		<link>http://feedproxy.google.com/~r/MitchMilam/~3/NzV0j2ngfK8/</link>
		<comments>http://blogs.infinite-x.net/2009/06/30/free-utility-released-export-javascript-from-crm/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 23:41:18 +0000</pubDate>
		<dc:creator>mitch</dc:creator>
				<category><![CDATA[Customization]]></category>
		<category><![CDATA[Dynamics CRM]]></category>

		<guid isPermaLink="false">http://blogs.infinite-x.net/2009/06/30/free-utility-released-export-javascript-from-crm/</guid>
		<description><![CDATA[Part of an upcoming commercial utility I am building exports custom JavaScript found in a CRM installation.&#160; I needed that functionality for a current customer project so I decided to go ahead and create a separate utility that performs that one function.
Here is the user interface:
 
&#160;
JavaScript Extraction Rules
The JavaScript found within each entity will [...]]]></description>
			<content:encoded><![CDATA[<p>Part of an upcoming commercial utility I am building exports custom JavaScript found in a CRM installation.&#160; I needed that functionality for a current customer project so I decided to go ahead and create a separate utility that performs that one function.</p>
<p>Here is the user interface:</p>
<p><a href="http://blogs.infinite-x.net/images/FreeUtilityReleasedExportJavaScriptfromC_105F0/image.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="458" alt="image" src="http://blogs.infinite-x.net/images/FreeUtilityReleasedExportJavaScriptfromC_105F0/image_thumb.png" width="504" border="0" /></a> </p>
<p>&#160;</p>
<h3>JavaScript Extraction Rules</h3>
<p>The JavaScript found within each entity will be extracted using the following rules:</p>
<ul>
<li>Only custom JavaScript is extracted. Built-in CRM JavaScript is ignored.</li>
<li>JavaScript for the Form’s OnLoad and OnSave events will be exported.</li>
<li>JavaScript for each Atttribute’s OnChange event will be exported.</li>
<li>Only <b>active</b> JavaScript is exported. If you don’t have the Active checkbox on the event checked, it is ignored.</li>
<li>If the JavaScript is Active but there is no JavaScript in the event, it is ignored.</li>
</ul>
<p>&#160;</p>
<h3>Output Folder</h3>
<p>A sub-folder will be created using the name of the CRM Organization in the folder where the utility is located.</p>
<p>&#160;</p>
<h3>Output Contents</h3>
<p>Each event will be written to a separate file with a .js extension. The naming convention is:</p>
<h5>OnLoad</h5>
<p>&lt;entity&gt;_onload.js</p>
<h5>OnChange</h5>
<p>&lt;entity&gt;_&lt;attribute&gt;_onchange.js</p>
<p>Here is what the new Demo CRM VPC installation’s output looks like:</p>
<p><a href="http://blogs.infinite-x.net/images/FreeUtilityReleasedExportJavaScriptfromC_105F0/image_3.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="379" alt="image" src="http://blogs.infinite-x.net/images/FreeUtilityReleasedExportJavaScriptfromC_105F0/image_thumb_3.png" width="404" border="0" /></a> </p>
<p>&#160;</p>
<p>Download it from the <a href="http://blogs.infinite-x.net/free-utilities/" target="_blank">Free Utilities</a> page.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.infinite-x.net/2009/06/30/free-utility-released-export-javascript-from-crm/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blogs.infinite-x.net/2009/06/30/free-utility-released-export-javascript-from-crm/</feedburner:origLink></item>
		<item>
		<title>Free CRM utilities moved to this blog</title>
		<link>http://feedproxy.google.com/~r/MitchMilam/~3/F5kHASQOEac/</link>
		<comments>http://blogs.infinite-x.net/2009/06/30/free-crm-utilities-moved-to-this-blog/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 17:52:30 +0000</pubDate>
		<dc:creator>mitch</dc:creator>
				<category><![CDATA[Dynamics CRM]]></category>

		<guid isPermaLink="false">http://blogs.infinite-x.net/2009/06/30/free-crm-utilities-moved-to-this-blog/</guid>
		<description><![CDATA[I moved my free CRM utilities to this site today.&#160; They mostly work with CRM 3.0 but I plan to update a couple of them soon to support 4.0.
Check out the following page:
Free Utilities
]]></description>
			<content:encoded><![CDATA[<p>I moved my free CRM utilities to this site today.&#160; They mostly work with CRM 3.0 but I plan to update a couple of them soon to support 4.0.</p>
<p>Check out the following page:</p>
<p><a title="Free Utilities" href="http://blogs.infinite-x.net/free-utilities/">Free Utilities</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.infinite-x.net/2009/06/30/free-crm-utilities-moved-to-this-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.infinite-x.net/2009/06/30/free-crm-utilities-moved-to-this-blog/</feedburner:origLink></item>
		<item>
		<title>Do you use CardScan for CRM?</title>
		<link>http://feedproxy.google.com/~r/MitchMilam/~3/F6u6A2st8Ww/</link>
		<comments>http://blogs.infinite-x.net/2009/06/30/do-you-use-cardscan-for-crm/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 17:17:10 +0000</pubDate>
		<dc:creator>mitch</dc:creator>
				<category><![CDATA[Dynamics CRM]]></category>

		<guid isPermaLink="false">http://blogs.infinite-x.net/2009/06/30/do-you-use-cardscan-for-crm/</guid>
		<description><![CDATA[I have added a new poll to this blog because I’m curious about how many people actually use the CardScan for MSCRM product.
]]></description>
			<content:encoded><![CDATA[<p>I have added a new poll to this blog because I’m curious about how many people actually use the CardScan for MSCRM product.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.infinite-x.net/2009/06/30/do-you-use-cardscan-for-crm/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blogs.infinite-x.net/2009/06/30/do-you-use-cardscan-for-crm/</feedburner:origLink></item>
		<item>
		<title>Working with Currencies, Revisited</title>
		<link>http://feedproxy.google.com/~r/MitchMilam/~3/NLTZGEYgXNg/</link>
		<comments>http://blogs.infinite-x.net/2009/06/13/working-with-currencies-revisited/#comments</comments>
		<pubDate>Sat, 13 Jun 2009 18:43:32 +0000</pubDate>
		<dc:creator>mitch</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://blogs.infinite-x.net/2009/06/13/working-with-currencies-revisited/</guid>
		<description><![CDATA[In a previous article, I reviewed an error I was receiving when performing some JavaScript calculations on a CRM form.&#160; I ran into the same error message this week, but under different circumstances.
The user was receiving the following error message when opening a record of a custom entity we created:
 
Hmm, I thought to myself, [...]]]></description>
			<content:encoded><![CDATA[<p>In a previous <a href="http://blogs.infinite-x.net/2008/06/01/crm-4-currency-calculations/" target="_blank">article</a>, I reviewed an error I was receiving when performing some JavaScript calculations on a CRM form.&#160; I ran into the same error message this week, but under different circumstances.</p>
<p>The user was receiving the following error message when opening a record of a custom entity we created:</p>
<p><a href="http://blogs.infinite-x.net/images/WorkingwithCurrenciesRevisited_C0C6/image.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="156" alt="image" src="http://blogs.infinite-x.net/images/WorkingwithCurrenciesRevisited_C0C6/image_thumb.png" width="404" border="0" /></a> </p>
<p>Hmm, I thought to myself, I’ve seen this before.</p>
<p>It turns out that I was creating this record via a plug-in and had forgotten to include the <strong><em>transactioncurrencyid</em></strong> in the record.</p>
<blockquote><p>Remember: You must <u>always</u> include the transactioncurrencyid attribute on any record you create <u>if</u> there is a money attribute contained <u>anywhere</u> within the entity.</p>
</blockquote>
<p>How do you know you have a problem with the record?&#160; Instead of your money fields looking like this:</p>
<p><a href="http://blogs.infinite-x.net/images/WorkingwithCurrenciesRevisited_C0C6/image_3.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="27" alt="image" src="http://blogs.infinite-x.net/images/WorkingwithCurrenciesRevisited_C0C6/image_thumb_3.png" width="334" border="0" /></a> </p>
<p>They look like this:</p>
<p><a href="http://blogs.infinite-x.net/images/WorkingwithCurrenciesRevisited_C0C6/image_4.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="27" alt="image" src="http://blogs.infinite-x.net/images/WorkingwithCurrenciesRevisited_C0C6/image_thumb_4.png" width="334" border="0" /></a> </p>
<p>Notice the lack of a currency symbol to the left of the edit box?</p>
<p>The only way to correct such a record is to add the transactioncurrencyid attribute to the form and change the value on the form, and either use JavaScript to add the currency or have the user set it manually.</p>
<blockquote><p>Again, the above statement applies to records that have been created programmatically. Records created manually should have the transactioncurrencyid populated automatically. </p>
</blockquote>
<p>So, to keep from having issues, just add the transactioncurrencyid attribute to your list of attributes that are created.</p>
<p>Here is a method in C# that will pull back the information for the US Dollar: </p>
</p>
<pre class="code"><span style="color: blue">public static </span><span style="color: #2b91af">transactioncurrency </span>GetCurrency(<span style="color: #2b91af">ICrmService </span>crmService)
{
    <span style="color: green">// Build a query for US Dollar currency.
    </span><span style="color: #2b91af">QueryByAttribute </span>dollarQuery = <span style="color: blue">new </span><span style="color: #2b91af">QueryByAttribute</span>();
    dollarQuery.EntityName = <span style="color: #2b91af">EntityName</span>.transactioncurrency.ToString();
    dollarQuery.Attributes = <span style="color: blue">new string</span>[] { <span style="color: #a31515">&quot;currencyname&quot; </span>};
    dollarQuery.Values = <span style="color: blue">new string</span>[] { <span style="color: #a31515">&quot;US Dollar&quot; </span>};
    dollarQuery.ColumnSet = <span style="color: blue">new </span><span style="color: #2b91af">AllColumns</span>();

    <span style="color: green">// Create the US currency request.
    </span><span style="color: #2b91af">RetrieveMultipleRequest </span>dollarRequest =
        <span style="color: blue">new </span><span style="color: #2b91af">RetrieveMultipleRequest</span>();

    dollarRequest.Query = dollarQuery;

    <span style="color: #2b91af">RetrieveMultipleResponse </span>dollarResponse =
        (<span style="color: #2b91af">RetrieveMultipleResponse</span>)crmService.Execute(dollarRequest);

    <span style="color: blue">return </span>(<span style="color: #2b91af">transactioncurrency</span>)dollarResponse.BusinessEntityCollection.BusinessEntities[0];
}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>which is used like this:</p>
<pre class="code"><span style="color: #2b91af">transactioncurrency </span>usCurrency = GetCurrency(crmService);

myEntity[<span style="color: #a31515">&quot;transactioncurrencyid&quot;</span>] =
    <span style="color: blue">new </span><span style="color: #2b91af">Lookup</span>(<span style="color: #2b91af">EntityName</span>.transactioncurrency.ToString(),
               usCurrency.transactioncurrencyid.Value);</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<blockquote>
<p>The above assumes you’re working with Dynamic Entities inside the CRM plug-in framework.</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blogs.infinite-x.net/2009/06/13/working-with-currencies-revisited/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.infinite-x.net/2009/06/13/working-with-currencies-revisited/</feedburner:origLink></item>
		<item>
		<title>The Dangers of Repurposing Existing CRM Entities</title>
		<link>http://feedproxy.google.com/~r/MitchMilam/~3/IwtM7-WMWYU/</link>
		<comments>http://blogs.infinite-x.net/2009/06/11/the-dangers-of-repurposing-existing-crm-entities/#comments</comments>
		<pubDate>Thu, 11 Jun 2009 11:43:00 +0000</pubDate>
		<dc:creator>mitch</dc:creator>
				<category><![CDATA[Customization]]></category>
		<category><![CDATA[Dynamics CRM]]></category>

		<guid isPermaLink="false">http://blogs.infinite-x.net/2009/06/11/the-dangers-of-repurposing-existing-crm-entities/</guid>
		<description><![CDATA[Since Dynamics CRM can be so easily customized, one of the traps that CRM developers and architects occasionally find themselves in is using an existing CRM entity for a different purpose.
An example would be using the Case Entity (incident) to track product fulfillment requests.
Usually, when such a decision is made, the entity being repurposed is [...]]]></description>
			<content:encoded><![CDATA[<p>Since Dynamics CRM can be so easily customized, one of the traps that CRM developers and architects occasionally find themselves in is using an existing CRM entity for a different purpose.</p>
<p>An example would be using the Case Entity (incident) to track product fulfillment requests.</p>
<p>Usually, when such a decision is made, the entity being repurposed is not being used and as far as the designers can see, it will never be used.&#160; So, they customize it to fit their needs and, in some cases, completely altering the visual and structural layout of the entity to where you can’t actually determine how it looked and worked before.</p>
<p>Then, as is more the case than not, 6 to 12 months into the future, when Dynamics CRM is running your business, you find yet another need that can be filled by using parts of the system that were previously unused.</p>
<p>The only problem is, you’ve repurposed that part ( the Case Entity, for example ) and it is so customized and heavily used that it would be almost impossible to move the customizations and data to a new entity and revert the original Entity back to it’s original design and purpose.</p>
<h3>Repurpose or Create</h3>
<p>If you are starting down the repurposing path, you need to ask yourself why you are doing so.&#160; What is is about the Entity that makes you think:</p>
<ol>
<li>You will never use it</li>
<li>It has some design feature that can’t be duplicated in a custom entity</li>
</ol>
<p>There are indeed occasions where a standard CRM Entity has a feature that you can’t duplicate on a custom Entity – like the <strong>Customer</strong> data type ( can be Account OR contact ).&#160; But most of the time, you’ll spend as much time removing or hiding the existing functionality as you would have in creating a new Entity from scratch.&#160; </p>
<p>Sometimes even more time is spent customizing the standard Entity and it would be to just create the whole thing from scratch.</p>
<h3>Conclusion</h3>
<p>When your requirements call for a new custom Entity, start from scratch, don’t automatically look for an existing Entity that is not used and change it.&#160; Microsoft spent a lot of time and effort into the design of Dynamics CRM and the relationships between the Entities is pretty well defined and understood.</p>
<p>Have your design add value to CRM, not change CRM in ways that will cause issues later.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.infinite-x.net/2009/06/11/the-dangers-of-repurposing-existing-crm-entities/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.infinite-x.net/2009/06/11/the-dangers-of-repurposing-existing-crm-entities/</feedburner:origLink></item>
		<item>
		<title>JavaScript: Working with Dates Returned from Web Service Calls</title>
		<link>http://feedproxy.google.com/~r/MitchMilam/~3/RFxw4DTh1Zg/</link>
		<comments>http://blogs.infinite-x.net/2009/06/10/javascript-working-with-dates-returned-from-web-service-calls/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 20:33:30 +0000</pubDate>
		<dc:creator>mitch</dc:creator>
				<category><![CDATA[Customization]]></category>
		<category><![CDATA[Dynamics CRM]]></category>

		<guid isPermaLink="false">http://blogs.infinite-x.net/2009/06/10/javascript-working-with-dates-returned-from-web-service-calls/</guid>
		<description><![CDATA[

Revised Thursday, July 11th.
I’ve been doing a lot of work recently using JavaScript to retrieve data from CRM via web service calls.&#160; One of the issues I ran into is the date format returned by CRM is in Coordinated Universal Time ( UTC ) which is not the same format most programming languages use.&#160; This [...]]]></description>
			<content:encoded><![CDATA[<h2></h2>
<h3><font color="#ff0000"></font></h3>
<h3><font color="#ff0000">Revised Thursday, July 11th.</font></h3>
<p>I’ve been doing a lot of work recently using JavaScript to retrieve data from CRM via web service calls.&#160; One of the issues I ran into is the date format returned by CRM is in Coordinated Universal Time ( UTC ) which is not the same format most programming languages use.&#160; This leads to conversion issues or programming exceptions.</p>
<p>To work around any issues, I created a JavaScript function that allows me to parse the UTC date and time string and return a JavaScript Date value.</p>
<p>At this point, the function is only concerned with the date, but if you need the time, you can modify the function to add those additional parameters to the new Date() line. </p>
<p>For more information on the JavaScript Date object, please visit the following <a href="http://www.w3schools.com/jsref/jsref_obj_date.asp" target="_blank">link</a>.</p>
<div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &#39;Courier New&#39;, courier, monospace; background-color: #f4f4f4">
<div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #0000ff">function</span> ConvertDateFromUTC(startDate){</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #008000">// UTC time formatted string</span></pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #008000">//2009-03-25T09:30:00-00:00 // 1 2 //1234567890123456789012345 </span></pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">&#160;</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #0000ff">var</span> year = parseInt(startDate.substr(0, 4),10);</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #0000ff">var</span> month = parseInt(startDate.substr(5, 2),10);</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #0000ff">var</span> day = parseInt(startDate.substr(8, 2),10);</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #0000ff">var</span> hour = parseInt(startDate.substr(11, 2),10);</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #0000ff">var</span> min = parseInt(startDate.substr(14, 2),10); </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">&#160;</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span> Date(year, month - 1, day);</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">}</pre>
</p></div>
</div>
<p align="center"><em>July 11th: Corrected issues as pointed out by Moti, in the comments.</em></p>
<p>&#160;</p>
<h3>Making It Work</h3>
<p>In this example, I’m using the excellent <a href="http://consulting.ascentium.com/blog/crm/Post129.aspx" target="_blank">CrmService library</a> released by Ascentium, to retrieve values from a contact.</p>
<div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &#39;Courier New&#39;, courier, monospace; background-color: #f4f4f4">
<div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #0000ff">var</span> oService = <span style="color: #0000ff">new</span> Ascentium_CrmService();</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">&#160;</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #0000ff">var</span> asCols = [<span style="color: #006080">&quot;fullname&quot;</span>, </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">              <span style="color: #006080">&quot;address1_postalcode&quot;</span>, </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">              <span style="color: #006080">&quot;address1_city&quot;</span>, </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">              <span style="color: #006080">&quot;address1_stateorprovince&quot;</span>, </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">              <span style="color: #006080">&quot;birthdate&quot;</span>];</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">&#160;</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #0000ff">var</span> beRetrievedContact = </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">       oService.Retrieve(<span style="color: #006080">&quot;contact&quot;</span>, </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">       crmForm.all.customerid.DataValue[0].id, </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">       asCols);</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">&#160;</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #0000ff">var</span> birthDateString = beRetrievedContact.attributes[<span style="color: #006080">&quot;birthdate&quot;</span>].value;</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">&#160;</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #0000ff">var</span> birthDate = <span style="color: #0000ff">new</span> Date(ConvertDateFromUTC(birthDateString));</pre>
</p></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blogs.infinite-x.net/2009/06/10/javascript-working-with-dates-returned-from-web-service-calls/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blogs.infinite-x.net/2009/06/10/javascript-working-with-dates-returned-from-web-service-calls/</feedburner:origLink></item>
		<item>
		<title>What keeps your people from selling?</title>
		<link>http://feedproxy.google.com/~r/MitchMilam/~3/ZtQd6UE4uSY/</link>
		<comments>http://blogs.infinite-x.net/2009/06/10/what-keeps-your-people-from-selling/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 11:25:00 +0000</pubDate>
		<dc:creator>mitch</dc:creator>
				<category><![CDATA[Dynamics CRM]]></category>

		<guid isPermaLink="false">http://blogs.infinite-x.net/2009/06/10/what-keeps-your-people-from-selling/</guid>
		<description><![CDATA[This is one of the primary questions I ask when starting the discovery phase of a CRM implementation.
&#160;

Why is this important?
This question is important to everyone because the more distractions that can be eliminated from the life of a sales person, the more time they have to sell.&#160; Hopefully, the following equation fits into your [...]]]></description>
			<content:encoded><![CDATA[<p>This is one of the primary questions I ask when starting the discovery phase of a CRM implementation.</p>
<p>&#160;</p>
<h3></h3>
<h3>Why is this important?</h3>
<p>This question is important to everyone because the more distractions that can be eliminated from the life of a sales person, the more time they have to sell.&#160; Hopefully, the following equation fits into your organization:</p>
<p><a href="http://blogs.infinite-x.net/images/Whatkeepsyourpeoplefromselling_B15B/image.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="83" alt="image" src="http://blogs.infinite-x.net/images/Whatkeepsyourpeoplefromselling_B15B/image_thumb.png" width="260" border="0" /></a> </p>
<p>And more sales generally translates into more money – for everyone.</p>
<p>&#160;</p>
<h3>How do I make a difference?</h3>
<p>During your discovery process, ask these simple questions:</p>
<ol>
<li>What types of reports are your sales people required to produce?</li>
<li>Is any data collected and returned to <em>anyone</em> in an Excel worksheet?</li>
<li>What procedures or processes do your salespeople perform repetitively?</li>
</ol>
<p>Collect these answers, then review the native capabilities found with Dynamics CRM.&#160; Implement out of the box solutions when you can and create custom solutions when you must.</p>
<p>Your changes don’t need to occur all at once, and as always, keep the users involved in the process so they can see where you’re going and how the changes will help them sell. </p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.infinite-x.net/2009/06/10/what-keeps-your-people-from-selling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.infinite-x.net/2009/06/10/what-keeps-your-people-from-selling/</feedburner:origLink></item>
		<item>
		<title>Retrieving State and Status Options via the MetadataService</title>
		<link>http://feedproxy.google.com/~r/MitchMilam/~3/9lkrzSyEurk/</link>
		<comments>http://blogs.infinite-x.net/2009/06/09/retrieving-state-and-status-options-via-the-metadataservice/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 22:39:00 +0000</pubDate>
		<dc:creator>mitch</dc:creator>
				<category><![CDATA[Customization]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Dynamics CRM]]></category>

		<guid isPermaLink="false">http://blogs.infinite-x.net/2009/06/09/retrieving-state-and-status-options-via-the-metadataservice/</guid>
		<description><![CDATA[As you probably know, the State and Status options for a CRM entity are linked together.&#160; You can’t change the State options or values but you can change the Status options ( which are generally shown in a picklist ).
On a recent project, I needed to simulate the Cancel Opportunity dialog through a custom user [...]]]></description>
			<content:encoded><![CDATA[<p>As you probably know, the State and Status options for a CRM entity are linked together.&#160; You can’t change the State options or values but you can change the Status options ( which are generally shown in a picklist ).</p>
<p>On a recent project, I needed to simulate the Cancel Opportunity dialog through a custom user interface.&#160; Rather than build a hard-coded list of reasons for the cancelation, I decided to use the CRM MetadataService to dynamically pull the data using the following method ( in C# ): </p>
<pre class="code"><span style="color: blue">public </span><span style="color: #2b91af">SortedList </span>RetrieveStatusList(
                      <span style="color: blue">string </span>entityName,
                      <span style="color: blue">int </span>statusValue)
{
    <span style="color: #2b91af">SortedList </span>list = <span style="color: blue">new </span><span style="color: #2b91af">SortedList</span>();

    <span style="color: #2b91af">AttributeMetadata </span>attMetaData;
    <span style="color: #2b91af">RetrieveAttributeRequest </span>request =
        <span style="color: blue">new </span><span style="color: #2b91af">RetrieveAttributeRequest</span>();
    request.EntityLogicalName = entityName;
    request.LogicalName = <span style="color: #a31515">&quot;statuscode&quot;</span>;
    <span style="color: #2b91af">RetrieveAttributeResponse </span>response;

    response =
        (<span style="color: #2b91af">RetrieveAttributeResponse</span>)metadataService.Execute(request);
    attMetaData = response.AttributeMetadata;

    <span style="color: #2b91af">StatusAttributeMetadata </span>status =
        (<span style="color: #2b91af">StatusAttributeMetadata</span>)attMetaData;

    <span style="color: blue">foreach </span>(<span style="color: #2b91af">StatusOption </span>o <span style="color: blue">in </span>status.Options)
    {
        <span style="color: blue">if </span>(o.State.Value == statusValue)
        {
            list.Add(o.Label.UserLocLabel.Label,
                     o.Value.Value.ToString());
        }
    }

    <span style="color: blue">return </span>list;
}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>The method takes two parameters:</p>
<ol>
<li>The entity name </li>
<li>The state code value </li>
</ol>
<p>I am using this method to populate a ASP.NET dropdown list box using the following code:</p>
<pre class="code">DropDownList1.DataSource = RetrieveStatusList(<span style="color: #a31515">&quot;opportunity&quot;</span>, 2);
DropDownList1.DataTextField = <span style="color: #a31515">&quot;Key&quot;</span>;
DropDownList1.DataValueField = <span style="color: #a31515">&quot;Value&quot;</span>;
DropDownList1.DataBind();</pre>
<p>In the case of the Opportunity, we have the following State code values:</p>
<table cellspacing="0" cellpadding="2" width="400" border="0">
<tbody>
<tr>
<td valign="top" width="200"><strong>Name</strong></td>
<td valign="top" width="200"><strong>Value</strong></td>
</tr>
<tr>
<td valign="top" width="200">Lost</td>
<td valign="top" width="200">2</td>
</tr>
<tr>
<td valign="top" width="200">Open</td>
<td valign="top" width="200">0</td>
</tr>
<tr>
<td valign="top" width="200">Won</td>
<td valign="top" width="200">1</td>
</tr>
</tbody>
</table>
<p>&#160;</p>
<p>Since we are canceling an Opportunity, we use the <strong>Lost</strong> state, which has a value of 2.</p>
<p>&#160;</p>
<h3>How This Works</h3>
<p>The key to making sense of this process is the <span style="color: #2b91af">StatusOption </span>object.&#160; It contains data for both the Status Reason codes and the State with which are they associated.</p>
<p>Since we are looking for a specific state, we check the State for the Option and if it matches our expected value, we add it to the list.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.infinite-x.net/2009/06/09/retrieving-state-and-status-options-via-the-metadataservice/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.infinite-x.net/2009/06/09/retrieving-state-and-status-options-via-the-metadataservice/</feedburner:origLink></item>
		<item>
		<title>Using the Form OnSave Event</title>
		<link>http://feedproxy.google.com/~r/MitchMilam/~3/lM5ZMHcq0yM/</link>
		<comments>http://blogs.infinite-x.net/2009/05/11/using-the-form-onsave-event/#comments</comments>
		<pubDate>Mon, 11 May 2009 14:50:32 +0000</pubDate>
		<dc:creator>mitch</dc:creator>
				<category><![CDATA[Customization]]></category>
		<category><![CDATA[Dynamics CRM]]></category>

		<guid isPermaLink="false">http://blogs.infinite-x.net/2009/05/11/using-the-form-onsave-event/</guid>
		<description><![CDATA[While working on a customer project recently, we added logic to prevent the user from saving should certain form conditions exist.&#160; During testing, we found that Save events were coming from a variety of unexpected places.
Take for instance the Opportunity Entity.&#160; There are several related entities connected to Opportunity:
 
Clicking on the Orders link on [...]]]></description>
			<content:encoded><![CDATA[<p>While working on a customer project recently, we added logic to prevent the user from saving should certain form conditions exist.&#160; During testing, we found that Save events were coming from a variety of unexpected places.</p>
<p>Take for instance the Opportunity Entity.&#160; There are several related entities connected to Opportunity:</p>
<p><a href="http://blogs.infinite-x.net/images/UsingtheFormOnSaveEvent_84AD/image.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="87" alt="image" src="http://blogs.infinite-x.net/images/UsingtheFormOnSaveEvent_84AD/image_thumb.png" width="160" border="0" /></a> </p>
<p>Clicking on the Orders link on the Opportunity allows you to&#160; review or created new associated Orders.</p>
<p>When you click the New Order button on the Orders pane, one of the first actions it will perform is to save the parent Opportunity with an internal call that looks something like this:</p>
<blockquote><p>crmForm.SubmitCrmForm(21, true, true, false);</p>
</blockquote>
<h3></h3>
<h3>&#160;</h3>
<h3>How This Causes Problems</h3>
<p>This system-originated save caused a problem in our solution because we had actually removed the Save and Save and Close buttons until our approval processes had been completed.&#160; This “save from nowhere” broke our validation processes.</p>
<p>&#160;</p>
<h3>Making Your Save Process Solid</h3>
<p>If you review the <a href="http://msdn.microsoft.com/en-us/library/cc150868.aspx" target="_blank">OnSave</a> event documentation on MSDN ( or or the SDK help file ), you’ll see that you can actually determine from where the save originated.</p>
<p>The property <strong>event.Mode</strong> will contain the origination point for the save activity.&#160; In our case, we only wanted the OnSave event to fire if the event.Mode was 1 ( Save ), or 2 ( Save and Close ).&#160; The code looks like this:</p>
<div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &#39;Courier New&#39;, courier, monospace; background-color: #f4f4f4">
<div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #0000ff">if</span> (<span style="color: #0000ff">event</span>.Mode == 1 || <span style="color: #0000ff">event</span>.Mode == 2)</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">{</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">}</pre>
</p></div>
</div>
<p>&#160;</p>
<p>Finally, if it turns out that you need to watch for a specific save event, the first parameter of the crmForm.SubmitCrmForm will contain value that will be used to set the event.Mode.</p>
<p>&#160;</p>
<h3>Stopping the Save</h3>
<p>As you will see in the SDK <a href="http://msdn.microsoft.com/en-us/library/cc150868.aspx" target="_blank">documentation</a>, you can actually stop the save from occurring, using the following code:</p>
<blockquote>
<p>event.returnValue = false;</p>
</blockquote>
<p>This is useful should you need to inspect the form state and only allow the process to complete if all checks pass.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.infinite-x.net/2009/05/11/using-the-form-onsave-event/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.infinite-x.net/2009/05/11/using-the-form-onsave-event/</feedburner:origLink></item>
	</channel>
</rss>
