<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
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/"
><channel><title>Rudi Shumpert : Code By Numbers &#187; ColdFusion</title> <atom:link href="http://www.rudishumpert.com/category/coldfusion/feed/" rel="self" type="application/rss+xml" /><link>http://www.rudishumpert.com</link> <description>Adventures in web development and analytics</description> <lastBuildDate>Wed, 08 Sep 2010 00:13:53 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.0.1</generator> <item><title>Share This Page &#8211; On Your Terms!</title><link>http://www.rudishumpert.com/2010/07/21/share-this-page-on-your-terms/</link> <comments>http://www.rudishumpert.com/2010/07/21/share-this-page-on-your-terms/#comments</comments> <pubDate>Wed, 21 Jul 2010 12:16:00 +0000</pubDate> <dc:creator>Rudi</dc:creator> <category><![CDATA[Code Snipets]]></category> <category><![CDATA[ColdFusion]]></category> <category><![CDATA[Data Collection]]></category> <category><![CDATA[Omniture]]></category> <category><![CDATA[Practical Analytics]]></category> <category><![CDATA[Web Analytics]]></category> <category><![CDATA[Share This Page]]></category> <category><![CDATA[Social Media]]></category><guid
isPermaLink="false">http://www.rudishumpert.com/?p=621</guid> <description><![CDATA[Build your own "Share this page" feature! Not too long ago I added one of the "Share this page" scripts, AddToAny, to our web site.  This seemed like it was going to work fine but this approach had 3 major drawbacks. Most of these services require you to link to their JavaScript file on their [...]]]></description> <content:encoded><![CDATA[<p>Build your own "Share this page" feature!</p><p>Not too long ago I added one of the "Share this page" scripts, AddToAny, to our web site.  This seemed like it was going to work fine but this approach had 3 major drawbacks.</p><ol><li> Most of these services require you to link to their JavaScript file on their servers.  Sure this is fairly reliable but I am not a fan of this approach.</li><li>Limited tracking / analytic capabilities.</li><li>Cookies you can not control.</li></ol><p>The first two issues are not huge issues, but while we were testing the site, we noticed that the scripts were adding a few of their own cookies to our users.  I understand why this is, but I did not like it and the feature was pulled.  So I tested out another one, Share This, and it did the same thing. Not only do they add cookies to your users, but they are also tracking usage of their tool on your site.  I don't blame them for this, after all they are providing this as a free service but I still do not like it.</p><p>After looking at the scripts for a while I decided that it could not be that difficult to write my own "Share this page" feature.</p><p>My goal was to create a widget to let users share the current web page without the limitations listed above.  With just a wee bit of research I found the methods needed to be able to share a page via email, Twitter, Facebook, and LinkedIn.  And then track the usage of data in Omniture SiteCatalyst.</p><pre class="brush: plain;">
&lt;ul&gt;
  &lt;li&gt;&lt;A onClick=&quot;jsFunctionToRecordClick('Email');&quot; HREF=&quot;mailto:?subject=#variables.emailSubject#&amp;body=#variables.emailMessage#&quot;&gt;Email &lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a onClick=&quot;jsFunctionToRecordClick('Twitter');&quot; href=&quot;http://twitter.com/home?status=#variables.twitterLink#&quot; target=&quot;_blank&quot;&gt;Twitter &lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a onClick=&quot;jsFunctionToRecordClick('LinkedIn');&quot; href=&quot;http://www.linkedin.com/shareArticle?mini=true&amp;url=www.rudishumpert.com&amp;title=AmazingArticle&amp;summary=This is the best ever&amp;source=Rudi&quot;  target=&quot;_blank&quot;&gt;LinkedIn &lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a onClick=&quot;jsFunctionToRecordClick('Facebook');&quot; href=&quot;http://www.facebook.com/share.php?src=bm&amp;u=#variables.currentPage#&amp;t=#variables.twitterLink#&amp;v=3&quot; target=&quot;_blank&quot;&gt;Facebook &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</pre><p>Sample links without the tracking added:</p><ul><li><a
onclick="jsFunctionToRecordClick('Email');" href="mailto:?subject=Check this out!&amp;body=Message with Link Goes Here: http://www.rudishumpert.com">Email </a></li><li><a
onclick="jsFunctionToRecordClick('Twitter');" href="http://twitter.com/home?status=Share%20This%20urlhere%20Build%20your%20own!%20measure" target="_blank">Twitter </a></li><li><a
onclick="jsFunctionToRecordClick('LinkedIn');" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=www.rudishumpert.com&amp;title=AmazingArticle&amp;summary=This is the best ever&amp;source=Rudi" target="_blank">LinkedIn </a></li><li><a
onclick="jsFunctionToRecordClick('Facebook');" href="http://www.facebook.com/share.php?src=bm&amp;u=www.rudishumpert.com&amp;t=Share This: http://wp.me/pCbAx-a1 Build your own!&amp;v=3" target="_blank">Facebook </a></li></ul><p>And then the JS Function: Note the JS function is specific to Omniture tracking but this could be leverage for any analytic solution with some minor tweaking.</p><pre class="brush: plain;">
			function jsFunctionToRecordClick(category){
				var s = s_gi(s_account);
				s.linkTrackVars=&quot;events,eVarN,propN,propN&quot;;
				s.linkTrackEvents=&quot;eventN&quot;;
				s.events=&quot;eventN&quot;;
				s.eVarN=''+category+'';
				s.propN=''+category+'';
				s.propN=''+category+' | '+s.pageName+'';
				s.tl();
				s.events=&quot;&quot;;
				s.linkTrackEvents=&quot;&quot;;
				s.linkTrackVars=&quot;&quot;;
				s.eVarN='';
				s.propN='';
				s.propN='';
			}
</pre><p>The feature is added to the page using a jQuery menu script that creates the same mouse-over drop down effect that the free scripts use, but you can use any sort of presentation approach that fits your web site's style.</p><p>And that is it.  You know have your own custom share this web page feature that your can style however you like and maintain complete control over what cookies are used on your site and what level of tracking you would like to get out of the widget.</p><p><a
href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F07%2F21%2Fshare-this-page-on-your-terms%2F&amp;linkname=Share%20This%20Page%20%26%238211%3B%20On%20Your%20Terms%21" title="Twitter" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a
href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F07%2F21%2Fshare-this-page-on-your-terms%2F&amp;linkname=Share%20This%20Page%20%26%238211%3B%20On%20Your%20Terms%21" title="LinkedIn" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a
href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F07%2F21%2Fshare-this-page-on-your-terms%2F&amp;linkname=Share%20This%20Page%20%26%238211%3B%20On%20Your%20Terms%21" title="Delicious" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a
href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F07%2F21%2Fshare-this-page-on-your-terms%2F&amp;linkname=Share%20This%20Page%20%26%238211%3B%20On%20Your%20Terms%21" title="Facebook" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a
class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Share/Save</a></p>]]></content:encoded> <wfw:commentRss>http://www.rudishumpert.com/2010/07/21/share-this-page-on-your-terms/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Creating static URL&#8217;s from dynamic pages for Eloqua</title><link>http://www.rudishumpert.com/2010/07/14/creating-static-urls-for-eloqua/</link> <comments>http://www.rudishumpert.com/2010/07/14/creating-static-urls-for-eloqua/#comments</comments> <pubDate>Wed, 14 Jul 2010 17:48:09 +0000</pubDate> <dc:creator>Rudi</dc:creator> <category><![CDATA[Code Snipets]]></category> <category><![CDATA[ColdFusion]]></category> <category><![CDATA[Data Collection]]></category> <category><![CDATA[Web Analytics]]></category> <category><![CDATA[Eloqua]]></category> <category><![CDATA[Marketing Automation Implementation]]></category><guid
isPermaLink="false">http://www.rudishumpert.com/?p=615</guid> <description><![CDATA[Sometimes the code... it mocks me. This was the case when working with the implementation scripts from Eloqua. I followed the instructions and by default about 98% of the tracking we needed was being accomplished. The issue I encountered was trying to get Eloqua to differentiate the content being served up on a dynamic page. [...]]]></description> <content:encoded><![CDATA[<p>Sometimes the code... it mocks me.  This was the case when working with the implementation scripts from Eloqua.  I followed the instructions and by default about 98% of the tracking we needed was being accomplished.  The issue I encountered was trying to get Eloqua to differentiate the content being served up on a dynamic page.</p><p>One url.  page.cfm?urlVariable=1 , page.cfm?urlVariable=2, page.cfm?urlVariable=3.  They all showed up as page.cfm in the reports.  And while Eloqua does have features that allow you to set up a query string in the admin console, you have to assign each value ahead of time and from what I have been told by folks both inside and outside of Eloqua, you are not able to use those values for certain types of behavioral tracking and filtering.</p><blockquote><p>NOTE:  I claim little knowledge of the inner workings of Eloqua and have had to take the word of the support folks and the documentation I could find.  If you know this to be different, I would love to hear from you.</p></blockquote><p>After much time spent scouring the web I found this article on an Eloqua blog.<br
/> <a
href="http://eloqua.blogspot.com/2010/05/fun-with-eloqua-and-jquery-tracking-pdf.html" target="_blank">http://eloqua.blogspot.com/2010/05/fun-with-eloqua-and-jquery-tracking-pdf.html</a></p><p>The author of this blog, used a secondary tracking script from Eloqua ( elqFCS.js) and leveraged this and jQuery to auto tag links to any pdf on the sample site.  Seeing this approach I was pretty sure I could use this method to meet my goal.</p><p>Step 1:  Add the link to the additional JS file.  It should be part of the standard implementation scripts.</p><pre class="brush: plain;">
 &lt;SCRIPT TYPE='text/javascript' SRC='/elqNow/elqFCS.js'&gt;&lt;/SCRIPT&gt;
 </pre><p>Step 2: Check for the dynamic page, and if found create a "static" url to send to Eloqua.</p><pre class="brush: plain;">
 &lt;cfparam name=&quot;url.urlVariable&quot; default=&quot;&quot;&gt;
&lt;cfif cgi.path_info EQ &quot;/dynamicPageInQuestion.cfm&quot; and LEN(url.urlVariable) GT 0&gt;
	&lt;script&gt;
		$(document).ready(function(){
			var fullurl = '&lt;cfoutput&gt;http://www.yoursite.com/NameOfYourChoosing/#url.urlVariable#&lt;/cfoutput&gt;';
			elqFCS(fullurl);
	 	});
	&lt;/script&gt;
&lt;/cfif&gt;
</pre><p>That's it!  Now inside of Eloqua in addtion to seeing a visit to  /dynamicPageInQuestion.cfm you will also see</p><p>http://www.yoursite.com/NameOfYourChoosing/1</p><p>http://www.yoursite.com/NameOfYourChoosing/2</p><p>http://www.yoursite.com/NameOfYourChoosing/3  etc or whatever value you need to be able to filter on.</p><p>As of now, this is working and meets the goal / need I had.  I'm curious if others have dealt with this, and if so what solutions did they come up with.</p><p><a
href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F07%2F14%2Fcreating-static-urls-for-eloqua%2F&amp;linkname=Creating%20static%20URL%26%238217%3Bs%20from%20dynamic%20pages%20for%20Eloqua" title="Twitter" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a
href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F07%2F14%2Fcreating-static-urls-for-eloqua%2F&amp;linkname=Creating%20static%20URL%26%238217%3Bs%20from%20dynamic%20pages%20for%20Eloqua" title="LinkedIn" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a
href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F07%2F14%2Fcreating-static-urls-for-eloqua%2F&amp;linkname=Creating%20static%20URL%26%238217%3Bs%20from%20dynamic%20pages%20for%20Eloqua" title="Delicious" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a
href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F07%2F14%2Fcreating-static-urls-for-eloqua%2F&amp;linkname=Creating%20static%20URL%26%238217%3Bs%20from%20dynamic%20pages%20for%20Eloqua" title="Facebook" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a
class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Share/Save</a></p>]]></content:encoded> <wfw:commentRss>http://www.rudishumpert.com/2010/07/14/creating-static-urls-for-eloqua/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Omniture &#8211; SalesForce Integration: Take 2</title><link>http://www.rudishumpert.com/2010/05/18/omniture-salesforce-integration-a-different-spin/</link> <comments>http://www.rudishumpert.com/2010/05/18/omniture-salesforce-integration-a-different-spin/#comments</comments> <pubDate>Tue, 18 May 2010 12:48:10 +0000</pubDate> <dc:creator>Rudi</dc:creator> <category><![CDATA[Code Snipets]]></category> <category><![CDATA[ColdFusion]]></category> <category><![CDATA[Data Collection]]></category> <category><![CDATA[Omniture]]></category> <category><![CDATA[Web Analytics]]></category> <category><![CDATA[SalesForce]]></category><guid
isPermaLink="false">http://www.rudishumpert.com/?p=585</guid> <description><![CDATA[In the beginner’s mind there are many possibilities. The developer side of my brain refuses to believe that there is only one way to do things, so after spending a great deal of time and effort to integrate SalesForce data into Omniture using the standard Genesis integration I felt that there had to be another [...]]]></description> <content:encoded><![CDATA[<p><strong>In the beginner’s mind there are many possibilities.</strong></p><p>The developer side of my brain refuses to believe that there is only one way to do things, so after spending a great deal of time and effort to integrate SalesForce data into Omniture using the standard Genesis integration I felt that there had to be another way.  If you have not read the recent posts by Adam Greco on getting <a
href="http://www.the-omni-man.com/sitecatalyst/adamgreco/2010/05/17/crm-integration-2-passing-crm-data-to-web-analytics/" target="_blank">CRM data into Omniture</a>, stop reading this post and go read those first.  Then come back!</p><p>What I needed to do was find a way to get a few data points out of SalesForce and into Omniture SiteCatalyst.  The solution also needed to be automated so that it could run every 3-4 hours.  After thinking over the topics discussed is Adam's blog post I had a plan.</p><p><strong>The Challenge:</strong></p><p>State over time.  That is what this whole exercise comes down to.  How to get Omniture SiteCatalyst to store and measure the state of a data point over a set time.  These data points are up to you and your specific business needs.  Some examples are revenue, leads, etc..</p><p>The granular level of data you can/want to pull over is limited only by your your business objectives.  For the purpose of this post, I will only be talking about getting data at a campaign level.</p><p><strong>The Setup:</strong></p><p>Transaction ID's and a matching key in SalesForce.  If you can, I strongly recommend using the SalesForce campaign id's as your web analytics campaign ID's.  It give you a great 1:1 data point between the two systems.  It also makes it easy to use that campaign ID as your transaction ID.</p><p>Incrementor Events.  (2 for every data point in SalesForce that you want to integrate)  These are needed to accomplish the heavy lifting of the state over time.   If you want to track revenue attributed to a specific campaign for example, you create 2 events.  One revenue_positive event, and one revenue_negative event.   Later you will create a calculated metric to get the delta of these two events to get the actual number.</p><p>State Manager.  You have to have some mechanism to get the data out of SalesForce and then be able to determine the difference in the value of the data points you want to integrate into Omniture.  There are numerous ways that you could accomplish this, but I chose to write a custom ColdFusion / SQL solution.</p><p
style="text-align: center;"><a
href="http://www.rudishumpert.com/wp-content/uploads/2010/05/Omniture-SalesForce-Plan-1.png"><img
class="size-full wp-image-587 aligncenter" title="Omniture-SalesForce Plan" src="http://www.rudishumpert.com/wp-content/uploads/2010/05/Omniture-SalesForce-Plan-1.png" alt="" width="677" height="538" /></a></p><p>The flow chart above shows at a high level all of the steps in the process.</p><p>1) Pull a list of transaction ids/ campaign ids from Omniture and store that list in a new db table.</p><p>2) Loop over that table and query SalesForce to get the data points you want to move, and store that in a second database table.</p><p>3) The very first time you run this process you are creating the state.  This copies the data into the third state database table.  Each time after that, you compare the values in the 3rd table with the data in the 2nd table.   This drives the values you pass into the incrementor events.   If the first time you pull data from SalesForce to find the revenue for a campaign is $100.00 that gets stored in the third table.  You pass 100 to the revenue_positive and 0 to the revenue_negative.  The next data pull the revenue is now 110.  After the comparison, you pass a 10 to the revenue_positive and 0 to the revenue_negative.  Now on a future data pull, you find the revenue is down to 50.  You now send a 0 in the revenue_positive and a 60 to the revenue_negative events.   When you create the calculated metric you will see the new value of 50 for that calculated metric.</p><pre class="brush: plain;">
&lt;cfset variables.revenuewon_str=&quot;#variables.revenue_pos_event#=0|#variables.revenue_neg_event#=0&quot;&gt;
&lt;cfif variables.DIF_revenuewon EQ 0&gt;
	&lt;cfset variables.revenuewon_str=&quot;#variables.revenue_pos_event#=0|#variables.revenue_neg_event#=0&quot;&gt;
&lt;cfelseif variables.DIF_revenuewon GT 0&gt;
	&lt;cfset variables.revenuewon_str=&quot;#variables.revenue_pos_event#=#variables.DIF_revenuewon#|#variables.revenue_neg_event#=0&quot;&gt;
&lt;cfelse&gt;
	&lt;cfset variables.revenuewon_str=&quot;#variables.revenue_pos_event#=0|#variables.revenue_neg_event#=#ABS(variables.DIF_revenuewon)#&quot;&gt;
&lt;/cfif&gt;
</pre><p>The code sample above evaluates the difference in the data point between tables 2 and 3 and generates the string required to send the data to Omniture.</p><p>4) Push the data to Omniture.  After you create the txt file with the transaction id and the values for the events, set up an automatic ftp using the <a
href="http://blogs.omniture.com/2009/01/25/data-sources-inside-omniture-sitecatalyst/" target="_blank">Omniture DataSources</a>.</p><p>5) Automate.  Since the controlling code to power this process was ColdFusion, all that was required was to set up a scheduled task within the ColdFusion admin and done!</p><p><strong>The Result:</strong></p><div
id="attachment_593" class="wp-caption aligncenter" style="width: 529px"><a
href="http://www.rudishumpert.com/wp-content/uploads/2010/05/sf.png"><img
class="size-full wp-image-593" title="sf" src="http://www.rudishumpert.com/wp-content/uploads/2010/05/sf.png" alt="" width="519" height="156" /></a><p
class="wp-caption-text">My Photoshop-fu is weak.</p></div><p
style="text-align: left;">Now, right inside of SiteCatalyst, you can see SalesForce data points that matter to you in your reports.  Of course, the data will look much cleaner that my mocked up image...hopefully.</p><p
style="text-align: left;"><p
style="text-align: left;"><p><a
href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F05%2F18%2Fomniture-salesforce-integration-a-different-spin%2F&amp;linkname=Omniture%20%26%238211%3B%20SalesForce%20Integration%3A%20Take%202" title="Twitter" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a
href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F05%2F18%2Fomniture-salesforce-integration-a-different-spin%2F&amp;linkname=Omniture%20%26%238211%3B%20SalesForce%20Integration%3A%20Take%202" title="LinkedIn" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a
href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F05%2F18%2Fomniture-salesforce-integration-a-different-spin%2F&amp;linkname=Omniture%20%26%238211%3B%20SalesForce%20Integration%3A%20Take%202" title="Delicious" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a
href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F05%2F18%2Fomniture-salesforce-integration-a-different-spin%2F&amp;linkname=Omniture%20%26%238211%3B%20SalesForce%20Integration%3A%20Take%202" title="Facebook" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a
class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Share/Save</a></p>]]></content:encoded> <wfw:commentRss>http://www.rudishumpert.com/2010/05/18/omniture-salesforce-integration-a-different-spin/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Jive + Omniture + Automation = Happiness</title><link>http://www.rudishumpert.com/2010/04/05/jive-omniture-automation-happiness/</link> <comments>http://www.rudishumpert.com/2010/04/05/jive-omniture-automation-happiness/#comments</comments> <pubDate>Mon, 05 Apr 2010 19:15:25 +0000</pubDate> <dc:creator>Rudi</dc:creator> <category><![CDATA[Code Snipets]]></category> <category><![CDATA[ColdFusion]]></category> <category><![CDATA[Data Collection]]></category> <category><![CDATA[Omniture]]></category> <category><![CDATA[Web Analytics]]></category> <category><![CDATA[Jive Software]]></category><guid
isPermaLink="false">http://www.rudishumpert.com/?p=534</guid> <description><![CDATA[I am a true believer in automation, so the last thing I want to do is create a process or work flow that I or someone else has to baby sit.   When I began working on a project to see what type of data I could get from Jive, an online community application, and into Ominture I wanted [...]]]></description> <content:encoded><![CDATA[<p>I am a true believer in automation, so the last thing I want to do is create a process or work flow that I or someone else has to baby sit.   When I began working on a project to see what type of data I could get from <a
href="http://www.jivesoftware.com/" target="_blank">Jive</a>, an online community application, and into Ominture I wanted to make sure that the solution could be automated.</p><p>Before we get into it, there is a key point I want to make about the data.  The data base that you get from Jive is not your typical clickstream data set.  It is an activity database.  You will not get pagenames, or visitor session information.  What you will get is an activity logged for everything a users does on the community site.  Views/creates/modifies  a thread, blog post, question, poll, etc..   If the user is logged in, you get their user id, name, etc..  <em><strong> If the user is not logged in, they all show up as a single user.</strong></em> Even with this limitation, there is still plenty of useful data to be found.</p><p><span
id="more-534"></span></p><p><strong>Configuration requirements/prerequisites: </strong>While the end solution is fully automated, there is a fair amount of  configuration that most be completed.</p><p><strong>ColdFusion Server: </strong> The main controlling files are cfm pages that are called via the CFAdmin / Scheduled tasks.  This process could be accomplished using your scripting/coding language of choice.</p><p><strong><a
href="http://www.postgresql.org/" target="_blank">PostgreSQL:</a></strong> The<strong> </strong>.dmp file that Jive provides is in the PostgreSQL format.  This is a free/open source database solution.  I found that the built in admin works ok for setting up the database and user to be used for the scripts, and for creating any views to assist with the ETL process, but is severely lacking in terms of exporting capabilities.</p><ul><li>Create 2 views to pre-process the data for extract<ul><li>Known Users</li><li>Unknown users / guests</li><li>Define headers of views to align to Omniture - Data Source file requirements.</li></ul></li></ul><p><a
href="http://www.sql-workbench.net/" target="_blank"><strong>SQL WorkBench</strong> </a>:  A free / open source db admin tool with exceptional data export features which are all accessible via the command line interface.  Once you install the tool, you will need to create a connection profile to be used in all scripts.</p><ul><li>Create SQL queries to perform data extract</li><li>Need 1 .sql file for each query<ul><li>creates .txt file with data ready to ftp</li><li>creates matching .fin file to ftp</li></ul></li></ul><p><strong>Command line / batch file access: </strong> While most of the controlling files are ColdFusion pages, the files that perform the restore and data extraction are batch files.  It is up to you to use the format of calling these batch files that you are most comfortable and confident with.</p><p><strong>Omniture Report Suite: </strong>Before uploading any data, make sure you have planned out what data points you want to capture.  Walk through the tables in the .dmp file to see what elements are most important to your business needs.  Once you have this, work with Client Care to set up the report suite.  Below is a list of <em><strong>some </strong></em>of the items you will want to consider.</p><ul><li>Define props / evars / events</li><li>Enable custom visitorID (uses userID from Jive)</li><li>Enable timestamps</li><li>Generic Data Source setup with full processing</li><li>FTP information</li></ul><p><strong>Local Folders: </strong>Working directory to hold batch files, cfml pages, data extracts, and a sub folder to move completed files to.</p><p>Once all of the configuration steps have been completed, you can begin tackle the automation.</p><p><strong>Work Flow - Steps</strong></p><ol><li>Download daily dmp file from Jive of the Analytic / Activity.</li><li>Restore dmp to local postgreSQL db</li><li>Extract data</li><li>FTP data extracts to Omniture</li></ol><p>Only 4 steps!  That is not so bad.  So lets look at what is involved in each step.</p><p><strong>Step 1:</strong> Jive provides an "Analytics" database in either a .sql.gz  or  a.dmp file.  I say "Analytics" because the data does not contain all of the traditional analytics information, page views, etc... What it does hold is activity.  Every time a user views a thread, blog post, poll etc... that is logged.  As is when users create content for the site.   All of this information is held within the myriad of tables in the .dmp file.  The database is a PostgreSQL format</p><p>The challenge is how to automate the download of this file.   I used a CFHTTP call as it allows me to provide a userid/password to authenticate into the Jive Cloud Admin site to retrieve the file.  It is also an easy way to customize the filename to include the date.  Each .dmp file is named in the following format:  accountname-yyyymmdd.dmp</p><pre class="brush: plain;">
		&lt;cfhttp
				username=&quot;yourLogin&quot;
				password=&quot;yourPassword&quot;
				method=&quot;GET&quot;
				url=&quot;#variables.URLLocation#&quot;
				result=&quot;dmpGet&quot;
				resolveURL=&quot;yes&quot;
				getAsBinary=&quot;yes&quot;		/&gt;
</pre><p>Once you have written the script to pull the database you have to schedule the download around the processing that Jive performs.  Each day, they delete the previous day's file and begin the process to create the next day's file.  This can take anywhere from 2-6 hours and during that time the new .dmp file is not there.  Each file is a full dump, so don't worry if you miss a day, you will always be able to go back and retrieve past information.</p><p>If the call to download tries to get the .dmp file when the file is not yet ready I create a  db_download.fail file in the working directory.  This is mostly used for debugging purposes.  Once the file is successfully downloaded I create a db_download.done and a db_download-yyyymmdd.done file.   The db_download.done file serves as a flag to the next step that the dmp file is there an ready to be restored.  The db_download-yyymmdd.done lets the download process know to not attempt to download the dmp file again for that day.</p><p><strong>Step 2:</strong> Restore .dmp to local postgreSQL</p><p>The controlling cfml page checks to see if the db_restore.done exists.  If it does, it executes a batch file that uses a command line command to restore the database and once the restore is finished it creates a db_restore.done file.  It also moves the db_download.done to the processed folder within the working directory and renames it to db_download-yyyymmdd.done.completed</p><pre class="brush: plain;">
&quot;C:\Program Files\PostgreSQL\8.4\bin\pg_restore.exe&quot; --clean --host %server% --port 5432 --username %username% --dbname %database% --verbose D:\WorkingDirectory\db.dmp
</pre><p><strong>Step 3:</strong> Extract Data</p><p>The controlling file checks to see if the db_restore.done file exists.  Once it finds the db_restore.done file, it executes each predefined  .sql file.  These files create a daily-dataset.txt file that is properly formatted to be ftp'd to omniture.  It also creates a .fin file of the same name to be ftp'd as well.   Once all of the .sql files have been processed it moves the db_restore.done file to the processed folder within the working directory and renames it to db_restore-yyyymmdd.done.completed.  The controlling file also creates a db_extract.done file.</p><pre class="brush: plain;">
WbExport -type=text
         -file='d:/workingdirectory/dailyfile.txt'
         -header=True;
// pseudo code
SELECT  Your data
WHERE to_char(data.date,'mm/dd/yyyy') = to_char(current_date-1,'mm/dd/yyyy');
WbExport -type=text
         -file='d:/workingdirectory/dailyfile.fin'
         -header=false;
select * from jivedw_user where user_id = -99;
</pre><p><strong>Step 4:</strong> FTP completed files to Omniture</p><p>The controlling file  checks to see if the db_extract.done file exists.  Once it find this, the I use  CFFTP to open a secure connection to the Omniture FTP server defined in the configuration.  Each file is ftp'd to Omniture along with the matching fin file.  Again these files are also moved to the processed folder in the local working directory and renamed with the time-stamp.</p><div
id="attachment_541" class="wp-caption alignnone" style="width: 659px"><a
href="http://www.rudishumpert.com/wp-content/uploads/2010/04/Jive-Automation.png"><img
class="size-large wp-image-541" title="Workflow" src="http://www.rudishumpert.com/wp-content/uploads/2010/04/Jive-Automation-1024x616.png" alt="" width="649" height="389" /></a><p
class="wp-caption-text">Click to see full size</p></div><p><strong>Next steps? Or as <a
href="http://www.kaushik.net/avinash/" target="_blank">Avinash</a> likes to say... So What?<br
/> </strong></p><p>Now that you have a daily process that will pull, transform, and load the activity data from your Jive installation into Omniture, what else can you do/discover.</p><ul><li>Find out which areas of the community are generating the most content</li><li>Create automated report publications to community administrators / moderators</li><li>Easily identify the most active:<ul><li>Users</li><li>Companies</li><li>Employees</li><li>Topics</li><li>etc.......</li></ul></li></ul><p>These are just a few things you can do with the activity data once you have it inside of Omniture.  What are some of the things you will use the data for?</p><p><a
href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F04%2F05%2Fjive-omniture-automation-happiness%2F&amp;linkname=Jive%20%2B%20Omniture%20%2B%20Automation%20%3D%20Happiness" title="Twitter" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a
href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F04%2F05%2Fjive-omniture-automation-happiness%2F&amp;linkname=Jive%20%2B%20Omniture%20%2B%20Automation%20%3D%20Happiness" title="LinkedIn" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a
href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F04%2F05%2Fjive-omniture-automation-happiness%2F&amp;linkname=Jive%20%2B%20Omniture%20%2B%20Automation%20%3D%20Happiness" title="Delicious" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a
href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F04%2F05%2Fjive-omniture-automation-happiness%2F&amp;linkname=Jive%20%2B%20Omniture%20%2B%20Automation%20%3D%20Happiness" title="Facebook" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a
class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Share/Save</a></p>]]></content:encoded> <wfw:commentRss>http://www.rudishumpert.com/2010/04/05/jive-omniture-automation-happiness/feed/</wfw:commentRss> <slash:comments>12</slash:comments> </item> <item><title>ColdFusion User Group Presentations</title><link>http://www.rudishumpert.com/2010/02/04/acfug/</link> <comments>http://www.rudishumpert.com/2010/02/04/acfug/#comments</comments> <pubDate>Thu, 04 Feb 2010 14:34:01 +0000</pubDate> <dc:creator>Rudi</dc:creator> <category><![CDATA[ColdFusion]]></category> <category><![CDATA[Data Collection]]></category> <category><![CDATA[Omniture]]></category> <category><![CDATA[Web Analytics]]></category> <category><![CDATA[ACFUG]]></category><guid
isPermaLink="false">http://www.rudishumpert.com/?p=481</guid> <description><![CDATA[At the February 2010 Atlanta ColdFusion User Group (ACFUG) meeting  &#38;  at the ColdFusion Meetup I gave a presentation on working with Omniture &#38; ColdFusion.   I based the presentation on a blog post I wrote last September. As promised here are the presentation materials: Presentation Blog Posts with examples from presentation: Form Abandonment Social Media [...]]]></description> <content:encoded><![CDATA[<p>At the February 2010 <a
href="http://www.acfug.com" target="_blank">Atlanta ColdFusion User Group</a> (ACFUG) meeting  &amp;  at the <a
href="http://www.meetup.com/coldfusionmeetup/calendar/12551647/" target="_blank">ColdFusion Meetup</a> I gave a presentation on working with Omniture &amp; ColdFusion.   I based the presentation on a blog post I wrote last <a
href="http://www.rudishumpert.com/2009/09/19/omniture-coldfusion-why-you-should-care/" target="_blank">September</a>.</p><p>As promised here are the presentation materials:</p><ul><li><a
href="http://www.rudishumpert.com/wp-content/uploads/2010/02/ACFUG-2-2010.pdf" target="_blank">Presentation</a><ul><li>Blog Posts with examples from presentation:<ul><li><a
href="http://www.rudishumpert.com/2009/11/11/form-abandonment/" target="_blank">Form Abandonment</a></li><li><a
href="http://www.rudishumpert.com/2009/08/12/pipes-to-omniture/" target="_blank">Social Media</a></li><li><a
href="http://www.rudishumpert.com/2009/08/19/one-player-to-rule-them-all/">Video Tracking</a></li><li><a
href="http://www.rudishumpert.com/2010/01/26/tracking-page-load-times/" target="_blank">Page Load Times</a></li></ul></li></ul></li><li><a
href="http://www.rudishumpert.com/wp-content/uploads/2010/02/acfug-2-2010-code.zip" target="_blank">Code Samples</a></li><li>Tools / Links Referenced:<ul><li><a
href="http://www.longtailvideo.com/" target="_blank">JW  Player (LongTail Video)</a></li><li><a
href="http://webanalyticssolutionprofiler.com/" target="_blank">W.A.S.P.</a></li><li><a
href="https://addons.mozilla.org/en-US/firefox/addon/966">Tamper Data</a></li><li><a
href="http://www.rosssimpson.com/dev/omnibug.html" target="_blank">Omnibug</a></li></ul></li></ul><h4>Bonus Resources:</h4><p>In addition to numerous articles I have posted here on my blog, below are some great resources related to Omniture and web analytics in general.  If you have questions or comments, please leave them below.</p><p>Omniture Resources:</p><ul><li><a
href="http://blogs.omniture.com/" target="_blank">Omniture Blogs</a></li><li><a
href="http://developer.omniture.com" target="_blank">Omniture Developer Forums</a></li><li><a
href="http://www.the-omni-man.com/" target="_blank">The Omni-Man Blog</a></li><li><a
href="http://twitter.com/OmnitureCare" target="_blank">@OmnitureCare</a> on twitter</li></ul><p>Web Analytics Resources:</p><ul><li><a
href="http://www.kaushik.net/avinash/" target="_blank">Occam's Razor</a></li><li><a
href="http://www.webanalyticsassociation.org/" target="_blank">Web Analytics Association</a></li><li><a
href="http://www.beyondwebanalytics.com/" target="_blank">Beyond Web Analytics - Podcast</a></li><li><a
href="http://webanalyticsland.com/" target="_blank">Web Analytics Land</a></li><li><a
href="http://emptymind.org/" target="_blank">The Empty Mind</a></li></ul><p>Books:</p><ul><li><a
href="http://www.amazon.com/Web-Analytics-Hour-Avinash-Kaushik/dp/0470130652/" target="_blank">Web Analytics: An Hour a Day</a></li><li><a
href="http://bit.ly/orwa20" target="_blank">Web Analytics 2.0</a></li><li><a
href="http://www.amazon.com/Competing-Analytics-New-Science-Winning/dp/1422103323" target="_blank">Competing on Analytics</a></li></ul><p>-Rudi</p><p><a
href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F02%2F04%2Facfug%2F&amp;linkname=ColdFusion%20User%20Group%20Presentations" title="Twitter" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a
href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F02%2F04%2Facfug%2F&amp;linkname=ColdFusion%20User%20Group%20Presentations" title="LinkedIn" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a
href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F02%2F04%2Facfug%2F&amp;linkname=ColdFusion%20User%20Group%20Presentations" title="Delicious" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a
href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F02%2F04%2Facfug%2F&amp;linkname=ColdFusion%20User%20Group%20Presentations" title="Facebook" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a
class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Share/Save</a></p>]]></content:encoded> <wfw:commentRss>http://www.rudishumpert.com/2010/02/04/acfug/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Tracking Page Load Times</title><link>http://www.rudishumpert.com/2010/01/26/tracking-page-load-times/</link> <comments>http://www.rudishumpert.com/2010/01/26/tracking-page-load-times/#comments</comments> <pubDate>Wed, 27 Jan 2010 00:01:32 +0000</pubDate> <dc:creator>Rudi</dc:creator> <category><![CDATA[ColdFusion]]></category> <category><![CDATA[Data Collection]]></category> <category><![CDATA[Omniture]]></category> <category><![CDATA[Web Analytics]]></category> <category><![CDATA[Page Load Time]]></category><guid
isPermaLink="false">http://www.rudishumpert.com/?p=457</guid> <description><![CDATA[One of my favorite things about ColdFusion is the level of detail you can get from the debugging information.  The ColdFusion server will provide upon request and the right permissions: variable scopes, sql query information,  server information, and execution / load times.  This is very useful information to have while coding and is invaluable when [...]]]></description> <content:encoded><![CDATA[<p>One of my favorite things about ColdFusion is the level of detail you can get from the debugging information.  The ColdFusion server will provide upon request and the right permissions: variable scopes, sql query information,  server information, and execution / load times.  This is very useful information to have while coding and is invaluable when you are trying to optimize the speed and performance of the site. However, is it hard to get good benchmark for this data over time from the perspective of your end users.</p><p>Earlier this week, I set out to see if there was a way I could get access to the page load data and send it along to Omniture so that I could first get a benchmark of what the performance of the web site was over time, and second be able to tell if changes we made to the site had any impact on performance.</p><p>My first attempt in accomplishing my goal was to try and access the same Java object that the debugging code used to get the execution times.  I thought, well I see it in the output on the screen, it should be easy enough to grab that data element and pass it along.</p><p><span
id="more-457"></span></p><pre class="brush: plain;">    &lt;cfset codeFactory = CreateObject(&quot;java&quot;,&quot;coldfusion.server.ServiceFactory&quot;) /&gt;
    &lt;cfset getDebugDataSet = codeFactory.getDebuggingService()&gt;
    &lt;cfset getDebugData = getDebugDataSet.getDebugger().getData()&gt;</pre><p>This call returned an object that I was able to parse using  the same methods you would use to parse a query object.  It ran great on my development box, but when I moved it to production: Fail.   ColdFusion provided this lovely error message:</p><blockquote><pre>Detail Its possible that a method called on a Java object created by CreateObject  returned null.</pre></blockquote><p>I tried adjusting a few settings and was not able to resolve the issues.  I reached out to the <a
href="http://www.acfug.org" target="_blank">Atlanta ColdFusion</a> community, and received some very good guidance on the matter.  The reason for the error was I had debugging enabled on my development box, but did not on my production server.   And no matter what creative method I could come up with, would not justify enabling debugging on a production ColdFusion server.  The performance loss by doing this would outweigh the data gained.</p><p>The method that turned out to be the best, was also the easiest.   ColdFusion applications can take advantage of a global application file and two great methods within it: onRequestStart() and onRequestEnd().   The functions do exactly as their names would suggest, they will execute the code within each of them at the start and end of every request for every page in the application.</p><p>So inside the onRequestStart() function, you get a start time. And within the onRequestEnd() you get the end time and take the difference to get the page load time in milliseconds.  Pseudo code below:</p><pre class="brush: plain;">
&lt;cfset startTime = getTickCount() /&gt;
&lt;!--- something that you want to measure ---&gt;
&lt;cfoutput&gt;That took #(getTickCount()-startTime)#ms!&lt;/cfoutput&gt;
</pre><blockquote><p><strong>Note:</strong> While the methods I used are specific to ColdFusion, any site that uses a global header and footer, should be able to achieve the data data with javascript or jQuery.</p></blockquote><p>Now I have the the page load times and I began to pass the data into Omniture.  Soon I had results like this.</p><p><a
href="http://www.rudishumpert.com/wp-content/uploads/2010/01/Aviary-sc-omniture-com-Picture-1-pageload.png"><img
class="alignnone size-full wp-image-461" title="Aviary sc-omniture-com Picture 1-pageload" src="http://www.rudishumpert.com/wp-content/uploads/2010/01/Aviary-sc-omniture-com-Picture-1-pageload.png" alt="" width="840" height="253" /></a></p><p>It did not take long to determine that data in this format would not be very useful as I could have values from 0 to in excess of 10,000 milliseconds.   So I created a quick <a
href="http://blogs.omniture.com/2008/09/10/classifications-aka-saint-inside-omniture-sitecatalyst/" target="_blank">SAINT classification</a> and was able to group the data together into more logical sections.</p><p><a
href="http://www.rudishumpert.com/wp-content/uploads/2010/01/Aviary-sc-omniture-com-Picture-1.png"><img
class="alignnone size-full wp-image-462" title="Aviary sc-omniture-com Picture 1" src="http://www.rudishumpert.com/wp-content/uploads/2010/01/Aviary-sc-omniture-com-Picture-1.png" alt="" width="940" height="290" /></a></p><p>Now, this was better, but not perfect and I did not like the data groupings and the time being reported into milliseconds.   After thinking a bit on this, I decided to convert the time to seconds on the ColdFusion side and do the grouping on the web side as well.  I grouped the data into the following sections and passed the data into an sProp:</p><ul><li> &lt; 1 Second</li><li>1-2 Seconds</li><li>2-3 Seconds</li><li>3-5 Seconds</li><li>&gt; 5 Seconds</li></ul><p>I then took this data and concatenated it with the page name to send in a second sProp:  &lt; 1s | Home Page.   Doing this gave me these sets of data.</p><p><a
href="http://www.rudishumpert.com/wp-content/uploads/2010/01/pageLoad.png"><img
class="alignnone size-full wp-image-464" title="pageLoad" src="http://www.rudishumpert.com/wp-content/uploads/2010/01/pageLoad.png" alt="" width="897" height="290" /></a></p><p>....and....</p><p><a
href="http://www.rudishumpert.com/wp-content/uploads/2010/01/pageload2.gif"><img
class="alignnone size-full wp-image-465" title="pageload2" src="http://www.rudishumpert.com/wp-content/uploads/2010/01/pageload2.gif" alt="" width="886" height="451" /></a></p><blockquote><p><strong>Note: </strong>These may not be the absolute accurate page load times, but they will be close enough to get a good idea of overall site performance.</p></blockquote><p>Success!  Now, before and after major code changes to the site we will be able to go and see if the changes we made had an impact on the performance of the site.   So why go through all the effort to put this into Omniture, when there are other methods to get this type of performance data?  Now that you are able to send this data to Omniture, what else could you do with it?</p><ul><li>Send it in an eVar to see how performance impacts conversions.</li><li>Apply a bounce rate metric to see how performance impacts bounce rates.</li><li>Justify the modification or removal of  slow pages/functionality.</li><li>Add pathing to the second concatenated sProp to see how users move through the site with performance</li></ul><p>These are just a few ideas I had.  What would you do with this data inside of your Analytics tool if you could?</p><p>-Rudi</p><p><a
href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F01%2F26%2Ftracking-page-load-times%2F&amp;linkname=Tracking%20Page%20Load%20Times" title="Twitter" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a
href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F01%2F26%2Ftracking-page-load-times%2F&amp;linkname=Tracking%20Page%20Load%20Times" title="LinkedIn" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a
href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F01%2F26%2Ftracking-page-load-times%2F&amp;linkname=Tracking%20Page%20Load%20Times" title="Delicious" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a
href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F01%2F26%2Ftracking-page-load-times%2F&amp;linkname=Tracking%20Page%20Load%20Times" title="Facebook" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a
class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Share/Save</a></p>]]></content:encoded> <wfw:commentRss>http://www.rudishumpert.com/2010/01/26/tracking-page-load-times/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>RIA Podcast</title><link>http://www.rudishumpert.com/2010/01/08/ria-podcast/</link> <comments>http://www.rudishumpert.com/2010/01/08/ria-podcast/#comments</comments> <pubDate>Sat, 09 Jan 2010 03:52:44 +0000</pubDate> <dc:creator>Rudi</dc:creator> <category><![CDATA[ColdFusion]]></category> <category><![CDATA[AOL]]></category> <category><![CDATA[Flex]]></category> <category><![CDATA[Nexus]]></category> <category><![CDATA[RIA Podcast]]></category><guid
isPermaLink="false">http://www.rudishumpert.com/?p=394</guid> <description><![CDATA[This week I had the chance to sit in on the RIA Podcast with a great group of fellow ColdFusion junkies. It was a blast, even if it ran late into the evening and even the next day. The podcast is produced by John Mason from CodFusion fame, and is recorded after the monthly Atlanta [...]]]></description> <content:encoded><![CDATA[<p><a
href="http://www.riapodcast.com/blog/post.cfm/episode-2-1-froman-the-snowman"><img
class="alignleft size-full wp-image-396" style="margin: 5px 10px;" title="RIA Podcast" src="http://www.rudishumpert.com/wp-content/uploads/2010/01/ria.png" alt="" width="126" height="93" /></a>This week I had the chance to sit in on the <a
href="http://www.riapodcast.com/blog/post.cfm/episode-2-1-froman-the-snowman" target="_blank">RIA Podcast </a>with a great group of fellow ColdFusion junkies.  It was a blast, even if it ran late into the evening and even the next day.    The podcast is produced by John Mason from <a
href="http://www.codfusion.com" target="_blank">CodFusion</a> fame, and is recorded after the monthly Atlanta ColdFusion group meeting.</p><p>This episode covered everything from the release of the Flex SDK 3.5 to the new Nexus phone to the recent AOL - Time Warner split.</p><p>So if you are a fan of RIA items with an strong slant towards ColdFusion, Flex and the likes you should check it out!</p><p>-Rudi</p><p><a
href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F01%2F08%2Fria-podcast%2F&amp;linkname=RIA%20Podcast" title="Twitter" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a
href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F01%2F08%2Fria-podcast%2F&amp;linkname=RIA%20Podcast" title="LinkedIn" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a
href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F01%2F08%2Fria-podcast%2F&amp;linkname=RIA%20Podcast" title="Delicious" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a
href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2010%2F01%2F08%2Fria-podcast%2F&amp;linkname=RIA%20Podcast" title="Facebook" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a
class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Share/Save</a></p>]]></content:encoded> <wfw:commentRss>http://www.rudishumpert.com/2010/01/08/ria-podcast/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Who I am&#8230;. for now at least</title><link>http://www.rudishumpert.com/2009/12/23/who-i-am-for-now-at-least/</link> <comments>http://www.rudishumpert.com/2009/12/23/who-i-am-for-now-at-least/#comments</comments> <pubDate>Wed, 23 Dec 2009 21:40:10 +0000</pubDate> <dc:creator>Rudi</dc:creator> <category><![CDATA[ColdFusion]]></category> <category><![CDATA[Fritos]]></category> <category><![CDATA[Omniture]]></category> <category><![CDATA[Web Analytics]]></category> <category><![CDATA[Online Personas]]></category> <category><![CDATA[Persona]]></category> <category><![CDATA[Twitalyzer]]></category><guid
isPermaLink="false">http://www.rudishumpert.com/?p=335</guid> <description><![CDATA[Not long after starting this blog and becoming engrossed with social media and all things analytics, I posted an article "Who are you...at this moment?".  I looked at four social media profiling tools that gave you a rating or personality based on the information that you have posted, tweeted, shared, etc. 1) Persona 2) Twanalysis [...]]]></description> <content:encoded><![CDATA[<p>Not long after starting this blog and becoming engrossed with social media and all things analytics, I posted an article <a
href="http://www.rudishumpert.com/2009/08/29/who-are-you-at-this-moment/">"Who are you...at this moment?"</a>.  I looked at four social media profiling tools that gave you a rating or personality based on the information that you have posted, tweeted, shared, etc.</p><p>1) Persona<br
/> 2) Twanalysis<br
/> 3) Yahoo Mojo<br
/> 4) Twitalyzer</p><p>As the end of the year is nearing, I wanted to go back and run these test again and compare the results from August to see how much my online profile/personality has changed since then.</p><p><span
id="more-335"></span></p><h3><a
title="Personas" href="http://personas.media.mit.edu/" target="_blank">Persona</a></h3><h4>August 2009:</h4><p><img
class="aligncenter size-full wp-image-109" title="persona" src="http://www.rudishumpert.com/wp-content/uploads/2009/08/persona.png" alt="persona" width="674" height="440" /></p><h4>December 2009:</h4><p><img
class="aligncenter size-full wp-image-336" title="CBN-Persona-12-2009" src="http://www.rudishumpert.com/wp-content/uploads/2009/12/CBN-Persona-12-2009.png" alt="CBN-Persona-12-2009" width="674" height="234" />The social portion of my "persona" seems to be unchanged however the other aspects are very different.  Apparently I now have a section for "aggression"  I wonder if this is related to the fact that I have stated many times on twitter how much I hate IE6?</p><h3><a
href="http://twanalyst.com/" target="_blank">Twanalysis</a></h3><h4>August 2009:</h4><blockquote><h1 style="text-align: center;">Your Twitter personality</h1><p
style="text-align: center;"><a
href="http://twitter.com/?status=My+Twitter+personality%3A+likeable+sociable+cautious+My+style%3A+chatty+academic+PARROT+http%3A%2F%2Ftwanalyst.com%2Frrs_atl+%23twanalyst">Personality: likeable sociable cautious<br
/> Style: chatty academic<br
/> PARROT</a></p></blockquote><h4>December 2009:</h4><p><img
class="aligncenter size-full wp-image-338" title="CBN-Twanalytst-12-2009" src="http://www.rudishumpert.com/wp-content/uploads/2009/12/CBN-Twanalytst-12-20091.png" alt="CBN-Twanalytst-12-2009" width="514" height="127" />Twanalysis shows that I am still a "Parrot" ( I do ReTweet stuff a lot) however I have moved from socially cautious to popular inquisitive fair with a new style as well.  Again, there has been a noticeable change in the ratings.</p><h3><a
href="http://yahoo.knowyourmojo.com/" target="_blank">Yahoo Mojo</a></h3><h4>August 2009:</h4><p><img
class="aligncenter size-full wp-image-110" title="My yahoo mojo" src="http://www.rudishumpert.com/wp-content/uploads/2009/08/Picture-2.png" alt="My yahoo mojo" width="417" height="382" /></p><h4>December 2009:</h4><p><img
class="aligncenter size-full wp-image-339" title="CBN-Yahoo-Mojo-12-2009" src="http://www.rudishumpert.com/wp-content/uploads/2009/12/CBN-Yahoo-Mojo-12-2009.png" alt="CBN-Yahoo-Mojo-12-2009" width="408" height="380" /></p><p>There is no change in my Mojo... looks like I need to get some pom pom's.</p><h3><a
href="http://www.twitalyzer.com/" target="_blank">Twitalyzer</a></h3><h4>August 2009:</h4><p><img
class="aligncenter size-full wp-image-111" title="Twitalyzer" src="http://www.rudishumpert.com/wp-content/uploads/2009/08/Picture-3.png" alt="Twitalyzer" width="734" height="398" /></p><h4>December 2009:</h4><p><img
class="aligncenter size-full wp-image-340" title="CBN-twiatalyzer-12-2009" src="http://www.rudishumpert.com/wp-content/uploads/2009/12/CBN-twiatalyzer-12-2009.png" alt="CBN-twiatalyzer-12-2009" width="725" height="200" /></p><p>Twitalyzer shows changes almost across the board.   It seems that the tweets and information I've been sharing are not all rubish.  Woot!</p><p>NOTE:  Twitalyzer has release a fantastic 2.0 version of their tool.  Here is my 2.0 data from Twitalyzer!</p><p><a
href="http://www.rudishumpert.com/wp-content/uploads/2009/12/Twit20.png"><img
class="aligncenter size-full wp-image-375" title="My 2.0 Scores from Twitalyzer" src="http://www.rudishumpert.com/wp-content/uploads/2009/12/Twit20.png" alt="" width="711" height="492" /></a></p><p>It is truly fascinating the impact that being engaged in social media and social networking can have on your online profile or personal brand.  There have been many excellent articles recently on the impact of twitter and social media for individuals and corporations.  The examples above clearly show that with a little effort and engagement, anyone can shape their brand or online personality.</p><p>2010 will bring even more companies and individuals into the social media and they will all have to take the steps needed to shape and create their social media presence, to embrace the power of the 140, and to really interact with not only their friends and customers but the haters and the complainers as well.  It is easy to stand in front of a crowd of your biggest fans and interact, the biggest challenge that companies and people will continue to face is how do you stand in front of a crowd of angry, frustrated, and yes even misinformed people and convert them into your biggest fans.</p><p>If there are companies out there wondering how to do that.  Follow <a
href="http://twitter.com/OmnitureCare" target="_blank">@OmnitureCare</a> on twitter and watch him in action.  Best example I have seen in mastering how to interact with fans, customers, and haters alike.</p><p>Going into the next year I have set a few New Years resolutions that I think will help me as I work towards improving my web analytics and development skills.  (In no particular order)</p><ul><li>Join the <a
href="http://www.webanalyticsassociation.org/" target="_blank">WAA</a> &amp; volunteer</li><li>Continue to produce the <a
href="http://www.beyondwebanalytics.com" target="_blank">Beyond Web Analytics</a> Podcast.  (Shameless plug)</li><li>Join the <a
href="http://www.webanalyticsdemystified.com/ae/index.asp" target="_blank">Analysis Exchange</a></li><li>Take the Omniture SiteCatalyst Certification Test</li><li>Become more involved in the <a
href="Atlanta ColdFusion user group" target="_self">Atlanta ColdFusion user group</a></li><li>Present material at a user group meeting or conference</li></ul><p>I believe that these goals/resolutions will have a major impact on my online persona (and those that know me personally can tell you that what you see online is what you get in real life as well) and help me become more effective in my web application development and with web analytics.</p><p>What steps are you taking to shape your persona?</p><p>-Rudi</p><p><a
href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2009%2F12%2F23%2Fwho-i-am-for-now-at-least%2F&amp;linkname=Who%20I%20am%26%238230%3B.%20for%20now%20at%20least" title="Twitter" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a
href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2009%2F12%2F23%2Fwho-i-am-for-now-at-least%2F&amp;linkname=Who%20I%20am%26%238230%3B.%20for%20now%20at%20least" title="LinkedIn" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a
href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2009%2F12%2F23%2Fwho-i-am-for-now-at-least%2F&amp;linkname=Who%20I%20am%26%238230%3B.%20for%20now%20at%20least" title="Delicious" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a
href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2009%2F12%2F23%2Fwho-i-am-for-now-at-least%2F&amp;linkname=Who%20I%20am%26%238230%3B.%20for%20now%20at%20least" title="Facebook" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a
class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Share/Save</a></p>]]></content:encoded> <wfw:commentRss>http://www.rudishumpert.com/2009/12/23/who-i-am-for-now-at-least/feed/</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>Save the referrals!</title><link>http://www.rudishumpert.com/2009/11/17/referrer-pass-through/</link> <comments>http://www.rudishumpert.com/2009/11/17/referrer-pass-through/#comments</comments> <pubDate>Tue, 17 Nov 2009 19:47:56 +0000</pubDate> <dc:creator>Rudi</dc:creator> <category><![CDATA[Code Snipets]]></category> <category><![CDATA[ColdFusion]]></category> <category><![CDATA[Fritos]]></category> <category><![CDATA[Omniture]]></category> <category><![CDATA[Web Analytics]]></category> <category><![CDATA[Google Analytics]]></category> <category><![CDATA[Redirects]]></category> <category><![CDATA[Referrer]]></category><guid
isPermaLink="false">http://www.rudishumpert.com/?p=306</guid> <description><![CDATA[I ran across an interesting question on the yahoo web analytics group. Paraphrased: If you have a short easy to share/print/send email like www.mysite.com/cool and that redirects to the user to a long ungangly url like www.mysite.com/much/longer/url/to/get/customer/to/admit/that/ie6/is/thedevil.htm. What happens to the referrer data/info? Short answer? Most likely it is lost and your redirect will strip [...]]]></description> <content:encoded><![CDATA[<p>I ran across an interesting question on the yahoo web analytics group.</p><blockquote><p><em>Paraphrased</em>: If you have a short easy to share/print/send email like www.mysite.com/cool  and that redirects to the user to a long ungangly url like www.mysite.com/much/longer/url/to/get/customer/to/admit/that/ie6/is/thedevil.htm.  What happens to the referrer data/info?</p></blockquote><p>Short answer?  Most likely it is lost and your redirect will strip out that precious referrer data.  But, it does not have to depending on how you have your redirects set up.</p><p>For this example lets assume that you use a common redirect folder called "redir" .  So when you print or create a short easy to share email for your new campaign you want to sent out or shared.</p><blockquote><p>www.site.com/redir/ie6isthedevil</p></blockquote><p>And when a user types this in, or clicks on the link from an email they get taken to</p><blockquote><p>www.site.com/its/true/ie6/is/the/devil.ftw</p></blockquote><p>However, as the question above highlights, the referrer data from page to the short url is lost.  Fortunately, this fix to this is easy.  On the page that contains the actual redirect code, place this JavaScript in place.</p><pre class="brush: plain;">
&lt;script language=&quot;javascript&quot;&gt;
document.url = document.referrer;
&lt;/script&gt;
.
.....
(redirect code in language of choice)
</pre><p>It merely copies the referrer data into the DOM URL object on the redirect page to pass it along to the long final url.  Then all of your web analytic tracking code will function as expected.  (I tested this in Omniture &amp; Google Analytics)</p><p>That's it!</p><p>-Rudi</p><p><a
href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2009%2F11%2F17%2Freferrer-pass-through%2F&amp;linkname=Save%20the%20referrals%21" title="Twitter" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a
href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2009%2F11%2F17%2Freferrer-pass-through%2F&amp;linkname=Save%20the%20referrals%21" title="LinkedIn" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a
href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2009%2F11%2F17%2Freferrer-pass-through%2F&amp;linkname=Save%20the%20referrals%21" title="Delicious" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a
href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2009%2F11%2F17%2Freferrer-pass-through%2F&amp;linkname=Save%20the%20referrals%21" title="Facebook" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a
class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Share/Save</a></p>]]></content:encoded> <wfw:commentRss>http://www.rudishumpert.com/2009/11/17/referrer-pass-through/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Form Abandonment</title><link>http://www.rudishumpert.com/2009/11/11/form-abandonment/</link> <comments>http://www.rudishumpert.com/2009/11/11/form-abandonment/#comments</comments> <pubDate>Wed, 11 Nov 2009 19:26:11 +0000</pubDate> <dc:creator>Rudi</dc:creator> <category><![CDATA[Code Snipets]]></category> <category><![CDATA[ColdFusion]]></category> <category><![CDATA[Omniture]]></category> <category><![CDATA[Web Analytics]]></category> <category><![CDATA[jQuery]]></category> <category><![CDATA[Form Abandonment]]></category><guid
isPermaLink="false">http://www.rudishumpert.com/?p=280</guid> <description><![CDATA[NOTE: The code samples below are merely a proof of concept. This solution is not actively in place in any production environmetn that I am involved with. I was talking to a fellow ColdFusion developer about a web site he was working on, specifically a registration form, and what were some of the best practices [...]]]></description> <content:encoded><![CDATA[<blockquote><p><strong>NOTE:</strong> The code samples below are merely a proof of concept.  This solution is not actively in place in any production environmetn that I am involved with.</p></blockquote><p>I was talking to a fellow ColdFusion developer about a web site he was working on, specifically a registration form, and what were some of the best practices with form length and such that would facilitate users filling out the form and submitting.   This is a common issue with web sites that will not be going away anytime soon.  In fact the questions he had are the same ones I have seen in dozens of blog posts trying to figure this out.</p><ul><li>How many questions to put on a form?</li><li>What type of questions work the best?</li><li>What question(s) scared off a user and kept them from completing the form?</li></ul><p>I know that there are a few "Form Abandonment" plug-ins out there for Omniture and the likes, but from what I've seen the data you get is somewhat limited.   If your form has 20 elements on it and the plug-in only lets you know what the last element with focus was, you have to really think about the validity of that data.  How do you know for sure that the user filled out the elements in order?  Did the developer of the form set the tab index correctly?  Did the user glance at the form, click somewhere near the bottom and then bail?  Did the user fill out half the form the shut down the browser?</p><p><span
id="more-280"></span></p><p>From my understanding of the tools out there today, you are not able to get accurate answers to the questions above.     However, this is an very interesting problem that got me thinking on how I could leverage ColdFusion to be able to capture and get more meaningful data from the abandoned forms.</p><p>The Challenge:</p><ul><li>Capture data by users from abandoned forms</li><li>Push that data into Omniture SiteCatalyst</li><li>Create a report with real, actionable data on form abandonment</li></ul><p>The Setup:</p><ul><li>ColdFusion 8</li><li> Client Variables stored in a database (SQL)</li><li> jQuery</li></ul><p><strong>Step 1</strong>:  Capture the form data</p><p>The trick to capturing the data would be to find a way to save the form data in some persistent variable so that the data could be retrieved later.  Right away I thought of the <a
title="More Information on ColdFusion Client Scope" href="http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=sharedVars_08.html" target="_blank">Client Scope</a> .   Then the task was to find a method that could be deployed to multiple forms across a site with minimal re-coding.    For that I wrote this snippet of jQuery:</p><pre class="brush: plain;">
&lt;script language=&quot;JavaScript&quot; type=&quot;text/javascript&quot;&gt;
$(document).ready(function(){
// Form Handling/Analysis Test
$('#Form2BeTracked').children().each(function() {
$(this).bind('change',function (event){
$.post(&quot;/includes/processFormProgress.cfm&quot;, $('#Form2BeTracked').serializeArray() );

});

});

});
&lt;/script&gt;
</pre><p>This jQuery function simply binds an onChange event to every form on the page it finds with the id: Form2BeTracked.   This is an easy to deploy script site wide and has no impact on the normal form behavior.</p><p>The code on the proccessFormProgress.cfm is all of 3 lines :</p><pre class="brush: plain;">
&lt;cfparam name=&quot;client.formProgress&quot; default=&quot;#session.cfid##session.cftoken#&quot;&gt;
&lt;cfwddx action=&quot;cfml2wddx&quot; input=&quot;#form#&quot; output=&quot;wddxSession&quot;&gt;
&lt;cfset client.formProgress = wddxSession&gt;
</pre><p>This code takes the entire Form Struct and saves it into the client scope/database</p><div
id="attachment_293" class="wp-caption aligncenter" style="width: 460px"><img
class="size-full wp-image-293" title="Form Data in the Client Scope" src="http://www.rudishumpert.com/wp-content/uploads/2009/11/clientScope.png" alt="Form data is saved real time in the client scope." width="450" height="358" /><p
class="wp-caption-text">Form data is saved real time in the client scope.</p></div><p>The nice part about this is that by default, ColdFusion saves the list of form elements in the form.fieldnames variable.  Using that we can get a count of the number of variables for this form, and then see that only 2 of the fields were filled out and what the values of those fields are.  All of this without the user clicking submit.</p><p><strong>Step 2</strong>:  Clear data on form submit</p><p>If the user submits the form, we need to clear the data in the client variable.  This is an easy one line of code to be added on the page that handles the normal submitting of the form.</p><pre class="brush: plain;">&lt;cfset client.formProgress = &quot;&quot;&gt;</pre><p>This will clear the form data out of the client variable.  This is an important step that can not be skipped or your count of abandoned forms will be inflated.</p><p><strong>Step 3</strong>:  Check for abandoned form data</p><p>By saving the form data in the client scope it will be held there in the database for as long as the time frame defined in the ColdFusion Administrator.  This setting will determine the frequency that you must check for abandoned form data.</p><pre class="brush: plain;">
select cd.cfid, cd.data, cg.lvisit from
CDATA as cd join CGLOBAL as cg
on cd.cfid = cg.cfid
where cg.lvisit &gt;= (your timeframe here )
and cd.data like 'formprogress%'
</pre><p>This should pull a result set with all the records of form data that has been saved. ie. abandoned.</p><p><img
src="http://www.rudishumpert.com/wp-content/uploads/2009/11/form-abandonedquery.png" alt="form-abandonedquery" title="form-abandonedquery" width="673" height="275" class="aligncenter size-full wp-image-298" /></p><p>With a little ColdFusion magic</p><pre class="brush: plain;">
&lt;cfquery name=&quot;abandoned&quot; datasource=&quot;#REQUEST.dsn#&quot;&gt;
	select cd.cfid, cd.data, cg.lvisit from
	CDATA as cd join CGLOBAL as cg
	on cd.cfid = cg.cfid
	where cg.lvisit &gt;= GETDATE()-1
	and cd.data like 'formprogress%'  

&lt;/cfquery&gt;

&lt;cfset variables.wddx2Convert = abandoned.data&gt;
&lt;cfset variables.wddxLen = len(variables.wddx2Convert)&gt;
&lt;cfset variables.wddx2Convert = right(variables.wddx2Convert,variables.wddxLen-13)&gt;
&lt;cfset variables.wddx2Convert = replacenocase(&quot;#variables.wddx2Convert#&quot;,&quot;##&quot;,&quot;&quot;,&quot;ALL&quot;)&gt;
&lt;cfdump var=&quot;#variables.wddx2Convert#&quot;&gt;

&lt;cfwddx action=&quot;wddx2cfml&quot; input=&quot;#variables.wddx2Convert#&quot; output=&quot;variables.form&quot;&gt;

&lt;cfset variables.formElementList = variables.form[&quot;fieldnames&quot;]&gt;
&lt;cfset variables.formElementCount = listlen(&quot;#variables.formElementList#&quot;)&gt;

&lt;cfset variables.formList = &quot;&quot;&gt;
&lt;cfloop list=&quot;#variables.formElementList#&quot; index=&quot;formItem&quot;&gt;
	&lt;cfset variables.tempValue = variables.form[&quot;#formItem#&quot;] &gt;
	&lt;cfset variables.valuePair = &quot;#formItem#:#variables.tempValue#&quot;&gt;
	&lt;cfset variables.formList = ListAppend(variables.formList,&quot;#variables.valuePair#&quot;,&quot;|&quot;)&gt;
&lt;/cfloop&gt;
</pre><p>You end up with a variable string that you can then submit to Omniture using the Data Insertion API. See this <a
href="http://www.rudishumpert.com/2009/09/11/use-omnitures-data-insertion-api/">post</a> on details if the API.</p><p><img
src="http://www.rudishumpert.com/wp-content/uploads/2009/11/form-dataDetail.png" alt="form-dataDetail" title="form-dataDetail" width="574" height="82" class="aligncenter size-full wp-image-299" /></p><p>As you can see from the image above, you now have the count of the form elements in the form along with the data values from the form elements that were filled out before the user abandoned the form.   With this, you can choose what format would be the most useful for your needs to really dig into abandoned forms.</p><p>-Rudi</p><p><a
href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2009%2F11%2F11%2Fform-abandonment%2F&amp;linkname=Form%20Abandonment" title="Twitter" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a
href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2009%2F11%2F11%2Fform-abandonment%2F&amp;linkname=Form%20Abandonment" title="LinkedIn" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a
href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2009%2F11%2F11%2Fform-abandonment%2F&amp;linkname=Form%20Abandonment" title="Delicious" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a
href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.rudishumpert.com%2F2009%2F11%2F11%2Fform-abandonment%2F&amp;linkname=Form%20Abandonment" title="Facebook" rel="nofollow" target="_blank"><img
src="http://www.rudishumpert.com/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a
class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Share/Save</a></p>]]></content:encoded> <wfw:commentRss>http://www.rudishumpert.com/2009/11/11/form-abandonment/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using disk (user agent is rejected)
Database Caching 18/29 queries in 2.334 seconds using disk

Served from: www.rudishumpert.com @ 2010-09-10 11:34:31 -->