<?xml version="1.0"?>
<rss version="2.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007">
   <channel>
      <title>Sitecore RSS</title>
      <description>Official Sitecore RSS feeds, syndicated, last 30 days, by Lars Fløe Nielsen, Sitecore</description>
      <link>http://pipes.yahoo.com/pipes/pipe.info?_id=ZsFOz4a62xG9Py3Idbq02Q</link>
      <pubDate>Fri, 20 Nov 2009 18:34:50 -0800</pubDate>
      <generator>http://pipes.yahoo.com/pipes/</generator>
      <item>
         <title>Next Generation Web Content Management</title>
         <link>http://sitecorenortheast.wordpress.com/2009/11/20/next-generation-web-content-management/</link>
         <description>Aberdeen&amp;#8217;s report highlights the strategic value of a next generation web content management system integrated with lead scoring, email marketing, customer relationship management, and web analytics. The report links the technology and practices of Best-in-Class organizations to engage customers, provide personalized experiences and manage the lead lifecycle.
Clearly this is something that Sitecore realized many months ago. The [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=sitecorenortheast.wordpress.com&amp;blog=8993105&amp;post=121&amp;subd=sitecorenortheast&amp;ref=&amp;feed=1&quot;/&gt;</description>
         <guid isPermaLink="false">http://sitecorenortheast.wordpress.com/?p=121</guid>
         <pubDate>Fri, 20 Nov 2009 07:32:53 -0800</pubDate>
         <content:encoded><![CDATA[<div class='snap_preview'><br /><p>Aberdeen&#8217;s report highlights the strategic value of a next generation web content management system integrated with lead scoring, email marketing, customer relationship management, and web analytics. The report links the technology and practices of Best-in-Class organizations to engage customers, provide personalized experiences and manage the lead lifecycle.</p>
<p>Clearly this is something that Sitecore realized many months ago. The Sitecore Online Marketing Suite (released approximately 6 months ago), with built in Visitor Experience Analytics, Real-Time Site Personalization, Sales Enablement Reports, Campaign Management, and more, fits perfectly into this category. </p>
<p>To download this whitepaper please visit: <a rel="nofollow" target="_blank" href="http://www.sitecore.net/Products/Resources/whitepapers/Aberdeen-Next-Generation-Web-Content-Management.aspx">http://www.sitecore.net/Products/Resources/whitepapers/Aberdeen-Next-Generation-Web-Content-Management.aspx</a></p>
<p>Below is CNN Money&#8217;s article on Aberdeen&#8217;s study also: <a rel="nofollow" target="_blank" href="http://money.cnn.com/news/newsfeeds/articles/marketwire/0561328.htm">http://money.cnn.com/news/newsfeeds/articles/marketwire/0561328.htm</a></p> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/sitecorenortheast.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sitecorenortheast.wordpress.com/121/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/sitecorenortheast.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sitecorenortheast.wordpress.com/121/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/sitecorenortheast.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sitecorenortheast.wordpress.com/121/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/sitecorenortheast.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sitecorenortheast.wordpress.com/121/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/sitecorenortheast.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sitecorenortheast.wordpress.com/121/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sitecorenortheast.wordpress.com&blog=8993105&post=121&subd=sitecorenortheast&ref=&feed=1"/></div>]]></content:encoded>
         <media:content url="http://0.gravatar.com/avatar/87b8d134ef24b96407eb41b2be96cd33?s=96&amp;amp;d=identicon&amp;amp;r=G" medium="image">
            <media:title>sitecorenortheast</media:title>
         </media:content>
         <category>News</category>
      </item>
      <item>
         <title>PDC09 – What I’ll watch – Day 1</title>
         <link>http://sitecore.alexiasoft.nl/2009/11/19/pdc09-day/</link>
         <description>PDC09 has started. Unfortunatelly I&amp;#8217;m not there. But no worries! Everythings get recorded by the Channel 9 chaps.
I thought: let&amp;#8217;s share my recommended movies / the movies I&amp;#8217;ll watch :).
So here we go: Data Programming and Modeling for the Microsoft .NET Developer
Don Box! The main guy behind Oslo, someone you should always watch!
Microsoft ASP.NET 4 Core Runtime for [...]</description>
         <guid isPermaLink="false">http://sitecore.alexiasoft.nl/?p=312</guid>
         <pubDate>Thu, 19 Nov 2009 05:12:48 -0800</pubDate>
         <content:encoded><![CDATA[<p><a rel="nofollow" target="_blank" href="http://microsoftpdc.com">PDC09</a> has started. Unfortunatelly I&#8217;m not there. But no worries! Everythings get recorded by the <a rel="nofollow" target="_blank" href="http://channel9.msdn.com">Channel 9</a> chaps.<br />
I thought: let&#8217;s share my recommended movies / the movies I&#8217;ll watch :).</p>
<p>So here we go:</p>
<ol>
<li><a rel="nofollow" target="_blank" href="http://microsoftpdc.com/Sessions/P09-04">Data Programming and Modeling for the Microsoft .NET Developer</a><br />
<a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Don_Box">Don Box</a>! The main guy behind Oslo, someone you should always watch!</li>
<li><a rel="nofollow" target="_blank" href="http://microsoftpdc.com/Sessions/FT57">Microsoft ASP.NET 4 Core Runtime for Web Developers</a><br />
That&#8217;s my job isn&#8217;t it? ASP.NET 4 is upcoming, .NET 4 is upcoming, so we as Sitecore should remain running!</li>
<li><a rel="nofollow" target="_blank" href="http://microsoftpdc.com/Sessions/FT08">Code Visualization, UML, and DSLs</a><br />
Very interesting way of looking at code is to Visualize it and make it more human.<br />
Definitelly one to watch.</li>
<li><a rel="nofollow" target="_blank" href="http://microsoftpdc.com/Sessions/P09-09">Manycore and the Microsoft .NET Framework 4: A Match Made in Microsoft Visual Studio 2010</a><br />
Many core is the main issue these days. This video brings a lot of the great work done by MSFT together.</li>
</ol>
<p>All together 4 hours of watching. Have fun <img src='http://sitecore.alexiasoft.nl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley'/> </p>
<p><strong>Updated:</strong> Now with working links. Sorry!</p>]]></content:encoded>
      </item>
      <item>
         <title>Connection Pooling</title>
         <link>http://vasilinenko.blogspot.com/2009/11/connection-pooling.html</link>
         <description>Some things after discovering look trivial and clear, but it takes time to find this simple reason. I found a lot of question in Internet, and almost no useful answers.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After SQL server restart you might get the error in your ASP.NET application: &quot;&lt;i&gt;A transport-level error has occurred when sending the request to the server. (provider: Shared Memory Provider, error: 0 - No process is on the other end of the pipe.) &lt;/i&gt;&quot;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The reason is hiding in SQL Server Connection Pooling&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx&quot;&gt; http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can do a simple test by adding ;Pooling=false to your connection string to Sitecore databases and now your application will not crash whenever SQL restarts.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Impact Connection Pooling on performance for a stand-alone Sitecore installation - is what I will try now to investigate.&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6615446690343095019-8113101789712010592?l=vasilinenko.blogspot.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>dmitry.vasilinenko@gmail.com (Dmitry Vasilinenko)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-6615446690343095019.post-8113101789712010592</guid>
         <pubDate>Wed, 18 Nov 2009 11:24:00 -0800</pubDate>
      </item>
      <item>
         <title>Sitecore performance, too many items read, load times are too long</title>
         <link>http://blog.wojciech.org/?p=88</link>
         <description>Hey guys,
after a couple of hours searching, testing and debugging a complete (pretty nice) international (&amp;#62;20 languages) solution we still experienced a (at this point) strange behaviour by Sitecore.
Imagine that:
Root
- subitem 1
- subitem 2
- subitem 3
- subitem 4
- subitem 5
- subitem 6
All these subitems have no(!) fields. And there are no proxies or any other things [...]</description>
         <guid isPermaLink="false">http://blog.wojciech.org/?p=88</guid>
         <pubDate>Tue, 17 Nov 2009 05:30:41 -0800</pubDate>
         <content:encoded><![CDATA[<p>Hey guys,</p>
<p>after a couple of hours searching, testing and debugging a complete (pretty nice) international (&gt;20 languages) solution we still experienced a (at this point) strange behaviour by Sitecore.</p>
<p>Imagine that:</p>
<p>Root<br />
- subitem 1<br />
- subitem 2<br />
- subitem 3<br />
- subitem 4<br />
- subitem 5<br />
- subitem 6</p>
<p>All these subitems have no(!) fields. And there are no proxies or any other things which can influence the performance. How long does it take to evaluate this xpath statement: ./item (the context node is the root node)?</p>
<p>It takes approx. 19 ms! So long for such a basic operation, wtf? (Also in the profiler view we see approx. 3000 items read)</p>
<p>&#8230; some random time later (after changing the icon as well <img src='http://blog.wojciech.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley'/> ) &#8230;</p>
<p>Check the &#8220;Subitems sorting&#8221; field on <strong>the root item</strong>! In our case the value was &#8220;Created&#8221;, if you set it to default (or nothing) it takes <strong>0,12 ms</strong>!</p>
<p>Checking the code of the &#8220;Created&#8221; method reveals the explanation: By each call of DoCompare() it compares each version as well. Now: 24 languages with 1 version and 8 subitems&#8230;. now it&#8217;s quite understandable why it took so long. Also the items count in the profile are less!</p>
<p>So, be careful when applying &#8220;Created&#8221; as subitems sorting on a large enviroment.</p>
<p>Enjoy the rest of the week.</p>
<p>best chris</p>]]></content:encoded>
      </item>
      <item>
         <title>Extending the Control Panel</title>
         <link>http://adeneys.wordpress.com/2009/11/17/extending-the-control-panel/</link>
         <description>Recently I had a situation where I needed to run a lengthy process inside my Sitecore solution which needed to run some custom code. The actual process itself was to update a separate Lucene index we were using for a user search component on an intranet. I prefer to perform user search against an index [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=adeneys.wordpress.com&amp;blog=3885947&amp;post=138&amp;subd=adeneys&amp;ref=&amp;feed=1&quot;/&gt;</description>
         <guid isPermaLink="false">http://adeneys.wordpress.com/2009/11/17/extending-the-control-panel/</guid>
         <pubDate>Tue, 17 Nov 2009 04:15:04 -0800</pubDate>
         <content:encoded><![CDATA[<div class='snap_preview'><br /><p>Recently I had a situation where I needed to run a lengthy process inside my Sitecore solution which needed to run some custom code. The actual process itself was to update a separate Lucene index we were using for a user search component on an intranet. I prefer to perform user search against an index rather than the user store itself. Primarily for performance and secondly to provide more options for the search.</p>
<p>The normal way I&#8217;ve seen a lot of this kind of thing done is someone will create a very plain looking web form (aspx) and drop it in a folder, then have the admin user hit that page directly. The problem with this approach is that the page is normally quite ugly and doesn&#8217;t feel like part of the solution. And if your process takes a while you would have to custom code the ajax calls to update your UI and provide feedback to the user.</p>
<p align="center"><img alt="ugly util page" src="http://adeneys.files.wordpress.com/2009/11/ugly_util_page-1.png?w=450&#038;h=301" width="450" height="301"/></p>
<p>Can you tell this page was designed by a developer? <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley'/> </p>
<p>Realistically it&#8217;s a sin to burdon your users with this ugly kind of page. Especially when Sitecore is so extensible and already contains a location for these occasional utilities; the control panel.</p>
<p>It&#8217;s very easy to add your own entries into the control panel. All the categories and utilities themselves are defined under <code>/sitecore/content/Applications/Control Panel</code> in the <code>core</code> database. To add your own utility it&#8217;s as simple as adding an item under an existing category (based on the <code>/sitecore/templates/Sitecore Client/Tasks/Task page</code> template) based on the <code>/sitecore/templates/Sitecore Client/Tasks/Task option</code> template. The Header field is just the text displayed on the UI and the Click field is the Sitecore command to execute when the utility link is clicked.</p>
<p>The command is normally in the form of <code>category:command_name</code> such as <code>myproject:updateuserindex</code>. This command needs to be defined either in the <code>App_Config/Commands.config</code> file or in a configuration include file. The command definition contains both the full command name and a .net type to instantiate when the command is executed. The .net type needs to inherit from <code>Sitecore.Shell.Framework.Commands.Command</code> and override the <code>Execute</code> method.</p>
<p>If we have a short process to perform then we could perform that process from this method, then use something like the ClientResponse.Alert method to pop up a javascript alert dialog to let the user know the outcome of the process (success, failure, etc). If it&#8217;s a lengthy process you could also kick off a job here and then start a client pipeline which could make periodic requests to the server to get the status of the job and display. For my example here I&#8217;m going to launch a sheer wizard to kick off the process. Sheer UI also provides a facility to periodically update the user on the progress of the job. Another reason I chose a wizard here is because it&#8217;s what the user would expect. None of the other utilities in the control panel execute the desired process directly, they launch up either a dialog or a wizard. A wizard is also a great idea if you need to collect information from the user to execute the process.</p>
<p>To have my wizard open and display in a modal dialog, launch the dialog with the following from within the Execute method of the command.</p>
<pre>
<code>Context.ClientPage.ClientResponse.Broadcast( Context.ClientPage.ClientResponse.ShowModalDialog( "/sitecore/shell/default.aspx?xmlcontrol=RebuildUserSearchIndex"), "Shell");</code>
</pre>
<p>The <code>xmlcontrol</code> parameter in the url needs to refer to a sheer control. Inside our sheer layout file (XAML like file with XML extension) the control name is given as the child of the root &#8220;control&#8221; element.</p>
<pre>
<code>&lt;control xmlns:def="Definition" xmlns="http://schemas.sitecore.net/Visual-Studio-Intellisense"&gt; &lt;RebuildUserSearchIndex&gt; &lt;/RebuildUserSearchIndex&gt;
&lt;/control&gt;</code>
</pre>
<p>Note that because we&#8217;re not going to use this control in a presentation definition inside Sitecore, then we don&#8217;t need to register the control using the developer centre. We can just write it and as long as the XML file is in the correct location Sitecore will pick it up.</p>
<p>It&#8217;s a little funny how the sheer engine works, but it&#8217;s this element name that matters. Sheer doesn&#8217;t locate controls by filename, so it doesn&#8217;t actually matter what I call the file in which this control is defined, or even where I put it. As long as the location in which it exists is included in the controlSources element in web.config. It&#8217;s pretty safe to put your file below the <code>/sitecore/shell/controls</code> folder as this folder is required by Sitecore itself and is already included.</p>
<p>Sheer UI has built in support for wizards, so immediately inside my control name tag I can define a control of type WizardForm.</p>
<pre>
<code>&lt;WizardForm CodeBeside="MyProject.RebuildUserSearchIndex,MyProject"&gt;
&lt;/WizardForm&gt;</code>
</pre>
<p>Note the CodeBeside attribute in which I define the type which handles the forms behavior. Now I can fill in the pages of the wizard. A wizard form consists of a number of pages including a first page and a last page. The first page normally describes to the user what the wizard does and the last page provides a summary of the process that was executed. The first and last pages are given inside the WizardForm element with WizardFormFirstPage and WizardFormLastPage elements respectively. All the other pages will be given by WizardFormPage elements.</p>
<p>In my simple example above I will have 3 pages. The first page describing that the index will be rebuilt, a progress page to show the user the process is indeed executing, and the final page providing a summary of the operation. I&#8217;ll define my pages (and complete the rest of my XAML file) with the following which is inserted inside the WizardForm element.</p>
<pre>
<code>&lt;WizardFormFirstPage ID="FirstPage" Icon="People/32x32/User1.png"&gt; &lt;Border Class="scWizardWelcomeTitle"&gt; &lt;Literal ID="Welcome" Text="Welcome to the User Search Index Wizard."/&gt; &lt;/Border&gt; &lt;Literal Text="This wizard helps you:"/&gt; &lt;ul&gt; &lt;li class="scWizardBullet"&gt; &lt;Literal Text="Rebuild the user search index."/&gt; &lt;/li&gt; &lt;/ul&gt; &lt;Literal Text="To begin, click the 'rebuild' button below"/&gt;
&lt;/WizardFormFirstPage&gt; &lt;WizardFormPage ID="Rebuild" Header="Rebuilding" Text="This may take a few minutes." Icon="People/32x32/User1.png"&gt; &lt;Edit Mode="Hidden" ID="JobHandle" Width="0" Height="0"/&gt; &lt;GridPanel Width="100%"&gt; &lt;Space Height="64"/&gt; &lt;ThemedImage Src="People/48x48/User1.png" Width="48" Height="48" GridPanel.Align="center"/&gt; &lt;Space Height="16"/&gt; &lt;Border Align="center"&gt; &lt;ThemedImage Src="Images/progress.gif" Width="94" Height="17"/&gt; &lt;/Border&gt; &lt;Space Height="16"/&gt; &lt;Border Align="center" GridPanel.Align="center" GridPanel.Style="font-weight:bold"&gt; &lt;Literal Text="Rebuilding..."/&gt; &lt;/Border&gt; &lt;Space Height="16"/&gt; &lt;Border Align="center"&gt; &lt;Literal ID="StatusMessage"/&gt; &lt;/Border&gt; &lt;/GridPanel&gt;
&lt;/WizardFormPage&gt; &lt;WizardFormLastPage ID="LastPage" Icon="People/32x32/User1.png"&gt; &lt;Border ID="SuccessMessage"&gt; &lt;Literal Text="The index has been rebuilt successfully."/&gt; &lt;/Border&gt; &lt;Border ID="ErrorMessage"&gt; &lt;Literal Text="The index rebuild failed." /&gt; &lt;/Border&gt; &lt;Border&gt; &lt;Literal ID="Status"/&gt; &lt;/Border&gt;
&lt;/WizardFormLastPage&gt;</code>
</pre>
<p>The WizardForm control provides the buttons and handling of switching pages of the wizard. You can also override the ActivePageChanged and ActivePageChanging methods to customise this behavior. By default the pages of the wizard are presented in the order in which they are defined in the XAML file. But using these method overrides you can conditionally skip certain pages. You can also cancel the transition in the ActivePageChanging method so you have opportunity to perform validation on user input.</p>
<p>If you&#8217;ve read the XAML above you&#8217;ll see that instead of having a &#8220;next&#8221; button on the welcome screen, I want to have it labelled &#8220;rebuild&#8221;. I also want to disable the navigate buttons when the index is being rebuilt. The following ActivePageChanged method will achieve this.</p>
<pre>
<code>protected override void ActivePageChanged(string page, string oldPage)
{ base.ActivePageChanged(page, oldPage); NextButton.Header = "Next &gt;"; if (page == "FirstPage") NextButton.Header = "Rebuild"; if (page == "Rebuild") { BackButton.Disabled = true; NextButton.Disabled = true; StartRebuild(); }
}</code>
</pre>
<p>Note I also kick off the rebuild process when we change to the &#8220;Rebuild&#8221; page. I&#8217;ll run the rebuild in a job which is a background thread. This way the job can run asynchronously and my request can return.</p>
<pre>
<code>private void StartRebuild()
{ // Start job for index rebuild var options = new JobOptions("Rebuild User Search Index", "IndexRebuild", Context.Site.Name, this, "RebuildIndex"); var job = JobManager.Start(options); JobHandle.Value = job.Handle.ToString(); // Start client pipeline to check progress Context.ClientPage.ClientResponse.Timer("CheckStatus", 500);
}</code>
</pre>
<p>When creating a JobOptions object you can specify an object to run your process as well as the method to invoke on that object (last 2 parameters in the above call). So the rebuild will be run using this form and calling the &#8220;IndexRebuild&#8221; method on it. The Timer method call down the bottom causes the client to wait the specified time (second parameter, milliseconds) then call the method given in the first parameter. So I&#8217;ll need to define the IndexRebuild and CheckStatus methods.</p>
<p>One of the nice things about Sitecore jobs is that they provide a way to update status across threads through the job&#8217;s Status.Processed property. There are a few ways to find an existing job when the call for CheckStatus comes in but I like to use the job handle of the job returned by the JobManager. I&#8217;ll need to store the handle so I also have access to it on the call to CheckStatus. For this I&#8217;ll use a hidden field and store the handle value in that.</p>
<p>To get access to the controls of the form we have to get a little &#8220;2003 old school&#8221; and define the variables in our code file. The controls come out of the <code>Sitecore.Web.UI.HtmlControls</code> namespace, so include a reference to that namespace at the top of your file, then inside your class define the controls as protected so they can be populated on the postback.</p>
<pre>
<code>protected Edit JobHandle;
protected Literal StatusMessage;
protected Border SuccessMessage;
protected Border ErrorMessage;
protected Literal Status;</code>
</pre>
<p>I won&#8217;t actually build the index in this example, as I&#8217;m only concerned with describing how to create such an application. Instead I&#8217;ll simulate the lengthy operation so we can witness the UI updating while the background thread runs.</p>
<pre>
<code>private void RebuildIndex()
{ // Simulate a lengthy operation so the client pipeline can execute Context.Job.Status.Processed = 0; for (int i = 0; i &lt; 20; i++) { Thread.Sleep(500); Context.Job.Status.Processed++; }
}</code>
</pre>
<p>So I update the processed count in the method above and I&#8217;ll read that status from the client pipeline server method.</p>
<pre>
<code>protected void CheckStatus()
{ var handle = Handle.Parse(JobHandle.Value); if (handle != null) { var job = JobManager.GetJob(handle); if (job != null) { StatusMessage.Text = "Processed: " + job.Status.Processed.ToString(); } if (job.IsDone) { Active = "LastPage"; ErrorMessage.Visible = false; Status.Text = StatusMessage.Text; } else Context.ClientPage.ClientResponse.Timer("CheckStatus", 500); }
}</code>
</pre>
<p>This callback is also where we check on the status of the job and when complete move to the next page of the wizard by setting the &#8220;Active&#8221; property to the ID of the page you want to swap to. If the job isn&#8217;t finished we&#8217;ll tell the client to check the status in another 500 milliseconds.</p>
<p>And after you fill in the proper index creation method, you&#8217;re done! I know that may have been a little more work than the ugly util page that was whacked together above, but this wizard shows a lot of polish and enhances the user&#8217;s experience when using your solution. Not to mention the built in mechanisms for starting a background thread and having the client periodically check on the status of the running job. Once you get the hang of sheer you&#8217;ll be knocking out these wizards for those utils quicker than you can make that UX expert shake his head in dismay.</p>
<p>If you need some help with sheer, keep in mind that the XAML files are not compiled; meaning you can open up the XAML files for any of the Sitecore UI components. Especially when working with dialogs and wizards, the existing Sitecore controls are invaluable as a reference.</p>
<p>And here&#8217;s the final result in all it&#8217;s sheer glory!</p>
<p align="center"><img alt="control panel" src="http://adeneys.files.wordpress.com/2009/11/control_panel.png?w=440&#038;h=462" width="440" height="462"/></p>
<p>Control panel showing my user search index rebuild option.</p>
<p align="center"><img alt="wizard first" src="http://adeneys.files.wordpress.com/2009/11/wizard_first.png?w=450&#038;h=483" width="450" height="483"/></p>
<p>Welcome page of the wizard</p>
<p align="center"><img alt="wizard second" src="http://adeneys.files.wordpress.com/2009/11/wizard_second.png?w=450&#038;h=483" width="450" height="483"/></p>
<p>Processing page of the wizard</p>
<p align="center"><img alt="wizard last" src="http://adeneys.files.wordpress.com/2009/11/wizard_last.png?w=450&#038;h=483" width="450" height="483"/></p>
<p>Summary page of the wizard</p> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/adeneys.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/adeneys.wordpress.com/138/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/adeneys.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/adeneys.wordpress.com/138/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/adeneys.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/adeneys.wordpress.com/138/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/adeneys.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/adeneys.wordpress.com/138/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/adeneys.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/adeneys.wordpress.com/138/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=adeneys.wordpress.com&blog=3885947&post=138&subd=adeneys&ref=&feed=1"/></div>]]></content:encoded>
         <media:content url="http://1.gravatar.com/avatar/b4591048ba49c1111162c1db646f4147?s=96&amp;amp;d=identicon&amp;amp;r=G" medium="image">
            <media:title>Alistair Deneys</media:title>
         </media:content>
         <media:content url="http://adeneys.files.wordpress.com/2009/11/ugly_util_page-1.png" medium="image">
            <media:title>ugly util page</media:title>
         </media:content>
         <media:content url="http://adeneys.files.wordpress.com/2009/11/control_panel.png" medium="image">
            <media:title>control panel</media:title>
         </media:content>
         <media:content url="http://adeneys.files.wordpress.com/2009/11/wizard_first.png" medium="image">
            <media:title>wizard first</media:title>
         </media:content>
         <media:content url="http://adeneys.files.wordpress.com/2009/11/wizard_second.png" medium="image">
            <media:title>wizard second</media:title>
         </media:content>
         <media:content url="http://adeneys.files.wordpress.com/2009/11/wizard_last.png" medium="image">
            <media:title>wizard last</media:title>
         </media:content>
         <category>Sitecore</category>
      </item>
      <item>
         <title>Working with Custom User Profile Properties</title>
         <link>http://learnsitecore.cmsuniverse.net/en/Developers/Articles/2009/11/Custom%20user%20profile%20properties.aspx</link>
         <description>&lt;p&gt; &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;Ever wanted to extend your Sitecore User Profile? This short tutorial provides a quick overview of how to set, retrieve, list, and remove custom profile properties using the Sitecore API.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;</description>
         <guid isPermaLink="false">http://learnsitecore.cmsuniverse.net/en/Developers/Articles/2009/11/Custom%20user%20profile%20properties.aspx</guid>
         <pubDate>Sat, 14 Nov 2009 13:03:20 -0800</pubDate>
      </item>
      <item>
         <title>Sitecore: Linking to Sitecore editor from an .aspx page</title>
         <link>http://briancaos.wordpress.com/2009/11/13/sitecore-linking-to-sitecore-editor-from-an-aspx-page/</link>
         <description>This tip comes from Thomas Stern, who got the tip from the Sitecore support team. I am not very well founded in the Sitecore XAML development, so I often find myself using an .aspx page to extend the Sitecore shell.
And sometimes I need my own .aspx page to open the Sitecore editor at a certain [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=briancaos.wordpress.com&amp;blog=4258391&amp;post=471&amp;subd=briancaos&amp;ref=&amp;feed=1&quot;/&gt;</description>
         <guid isPermaLink="false">http://briancaos.wordpress.com/?p=471</guid>
         <pubDate>Fri, 13 Nov 2009 00:14:32 -0800</pubDate>
         <content:encoded><![CDATA[<div class='snap_preview'><br /><p>This tip comes from <a rel="nofollow" target="_blank" href="http://istern.dk/blog.aspx">Thomas Stern</a>, who got the tip from the Sitecore support team. I am not very well founded in the Sitecore XAML development, so I often find myself using an .aspx page to extend the Sitecore shell.<br />
And sometimes I need my own .aspx page to open the Sitecore editor at a certain Sitecore item. I thought that was impossible, untill Thomas Stern showed me how to do that.</p>
<p>In order to run the Sitecore content editor from an .aspx page, you need to be logged into Sitecore in the shell domain. Then you call the Sitecore client like this:</p>
<pre>/sitecore/shell/Applications/Content Manager/Default.aspx?fo={AA7D559F-ABA5-8F6A-ABCD-0ABDF7E74EE1}</pre>
<p>This opens the Sitecore editor at the item specified in the &#8220;<strong>fo</strong>&#8221; parameter.<br />
There are more parameters:</p>
<pre>/sitecore/shell/Applications/Content%20Manager/default.aspx?fo={id}[&amp;la={language}][&amp;vs={version}]&amp;mo=preview</pre>
<ul>
<li>fo = The item to open the Sitecore editor at</li>
<li>la = The language to open</li>
<li>vs = The version to open</li>
<li>mo=preview. This parameter removes the content tree at the left side.</li>
</ul>
<p>To open the Sitecore editor in a new window by clicking a button from your own .aspx page, you can do the following: Create an ordinary <a rel="nofollow" target="_blank" href="http://www.w3schools.com/ASPNET/aspnet_button.asp">asp:Button</a> control and extend the <a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.onclientclick.aspx">OnClientClick</a> property:</p>
<pre>Item myItem = MySitecoreItemToOpen();
myButton.OnClientClick = "javascript:window.open('/sitecore/shell/Applications/Content Manager/Default.aspx?fo=" + myItem.ID + "'); return false;";</pre>
<p>&nbsp;</p> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/briancaos.wordpress.com/471/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/briancaos.wordpress.com/471/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/briancaos.wordpress.com/471/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/briancaos.wordpress.com/471/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/briancaos.wordpress.com/471/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/briancaos.wordpress.com/471/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/briancaos.wordpress.com/471/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/briancaos.wordpress.com/471/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/briancaos.wordpress.com/471/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/briancaos.wordpress.com/471/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=briancaos.wordpress.com&blog=4258391&post=471&subd=briancaos&ref=&feed=1"/></div>]]></content:encoded>
         <media:content url="http://0.gravatar.com/avatar/25db0dbe9728e65c205cb902b4aa9741?s=96&amp;amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
            <media:title>briancaos</media:title>
         </media:content>
      </item>
      <item>
         <title>Will dynamics in .NET 4 change the way we do Sitecore?</title>
         <link>http://mcore.wordpress.com/2009/11/12/will-dynamics-in-net-4-change-the-way-we-do-sitecore/</link>
         <description>I am spending my time these days walking the halls of Berlin Messe at the Microsoft TechEd 2009. One of the interesting upcoming features of .NET 4 is the introduction of dynamic language support in the .NET Language Runtime. This does not only mean that you can write your .NET code in dynamic languages such as Python (IronPython) and Ruby (IronRuby), but also that you can use some of the dynamic features from C#. &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=mcore.wordpress.com&amp;blog=2983764&amp;post=208&amp;subd=mcore&amp;ref=&amp;feed=1&quot;/&gt;</description>
         <guid isPermaLink="false">http://mcore.wordpress.com/?p=208</guid>
         <pubDate>Thu, 12 Nov 2009 12:20:04 -0800</pubDate>
         <content:encoded><![CDATA[<div class='snap_preview'><br /><p>I am spending my time these days walking the halls of Berlin Messe at the <a rel="nofollow" target="_blank" href="http://www.microsoft.com/europe/TechEd/">Microsoft TechEd 2009</a>. One of the interesting upcoming features of .NET 4 is the introduction of dynamic language support in the .NET Language Runtime. This does not only mean that you can write your .NET code in dynamic languages such as Python (<a rel="nofollow" target="_blank" href="http://www.codeplex.com/wikipage?ProjectName=IronPython">IronPython</a>) and Ruby (<a rel="nofollow" target="_blank" href="http://ironruby.net/">IronRuby</a>), but also that you can use some of the dynamic features from C#. With the introduction of the <em>dynamic</em> type keyword, method calls and member access can be evaluated at runtime instead of at compile time (previously known as late-binding). This does not mean that C# is no longer a type safe language, it merely means that the language now provides a more &#8220;syntax correct&#8221; way of accessing those dynamic types of data, we previously used to access via strings, invokation, reflection etc. Examples of dynamic data models includes COM, the HTML DOM and XML.
</p>
<p>Another one of the dynamic types of data we all works with each day, is Sitecore. The structure, i.e. templates and fields, we are coding up against changes constantly, and Sitecore provides a string based way to access specific items and fields and values in fields. Some of these dynamic types are exposed via classes in the Sitecore API, e.g. the fields type classes in the Sitecore.Data.Fields namespace. In Pentia we have a concept we call Sitecore wrapper classes, i.e. classes which we custom write to provide a proper interface to items of a given template. Writing these classes are tedious and potentially error-prone, which is why we are working on code generator for generating these classes (similar to e.g. LINQ to SQL). But with dynamics in .NET 4, we have a way of eliminating these classes completely, while still maintaining a proper syntax &#8211; and hopefully Sitecore will implement this to our common advantage. Here is an example of how code from the current version could look in a future version of Sitecore:
</p>
<pre> //BEFORE: .NET 3.5 Framework, Sitecore 6
public string GetContextItemDocumentImage() { Item item = Sitecore.Context.Item; ImageField field = ((ImageField)item.Fields["DocumentImage"]); return field.Src;
} //AFTER .NET 4 Framework, Sitecore 7?
public string GetContextItemDocumentImage()
{ dynamic item = Sitecore.Context.Item; return item.DocumentImage.Src;
}
</pre>
<p>Note that although the syntax differs, the actual functionality executed in both example would be the same. So, what does it require from Sitecore to do this? The secret lies in the <a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/system.dynamic.idynamicmetaobjectprovider(VS.100).aspx">System.Dynamics. IDynamicMetaObjectProvider</a> interface or more easily, the <a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject(VS.100).aspx">DynamicObject</a> class. This interface and class allows the derived class to provide its own resolving to e.g. members access and method calls via a number of virtual methods. The methods are Try based, which means that you should return false if the functionality is not supported, or e.g. a method with an invalid method is called. Some of the most important virtual methods which can be implemented via DynamicObject are:
</p>
<div>
<table style="border-collapse:collapse;" border="0">
<col>
<col>
<tbody>
<tr>
<td style="padding-left:7px;padding-right:7px;border-top:solid black .5pt;border-left:solid black .5pt;border-bottom:solid black .5pt;border-right:solid black .5pt;">
<p>TryConvert</p>
</td>
<td style="padding-left:7px;padding-right:7px;border-top:solid black .5pt;border-left:none;border-bottom:solid black .5pt;border-right:solid black .5pt;">
<p>A cast is attempted, trying to convert the dynamic type to a static.</p>
</td>
</tr>
<tr>
<td style="padding-left:7px;padding-right:7px;border-top:none;border-left:solid black .5pt;border-bottom:solid black .5pt;border-right:solid black .5pt;">
<p>TryGetIndex</p>
</td>
<td style="padding-left:7px;padding-right:7px;border-top:none;border-left:none;border-bottom:solid black .5pt;border-right:solid black .5pt;">
<p>An indexer is called, trying to get a value with a given id or index.</p>
</td>
</tr>
<tr>
<td style="padding-left:7px;padding-right:7px;border-top:none;border-left:solid black .5pt;border-bottom:solid black .5pt;border-right:solid black .5pt;">
<p>TryGetMember</p>
</td>
<td style="padding-left:7px;padding-right:7px;border-top:none;border-left:none;border-bottom:solid black .5pt;border-right:solid black .5pt;">
<p>There is an attempt to get the value of a named member (e.g. a field or property)</p>
</td>
</tr>
<tr>
<td style="padding-left:7px;padding-right:7px;border-top:none;border-left:solid black .5pt;border-bottom:solid black .5pt;border-right:solid black .5pt;">
<p>TryInvokeMember</p>
</td>
<td style="padding-left:7px;padding-right:7px;border-top:none;border-left:none;border-bottom:solid black .5pt;border-right:solid black .5pt;">
<p>A method with a given name and parameters is invoked.</p>
</td>
</tr>
<tr>
<td style="padding-left:7px;padding-right:7px;border-top:none;border-left:solid black .5pt;border-bottom:solid black .5pt;border-right:solid black .5pt;">
<p>TrySetIndex</p>
</td>
<td style="padding-left:7px;padding-right:7px;border-top:none;border-left:none;border-bottom:solid black .5pt;border-right:solid black .5pt;">
<p>There is an attempt to set the value in an indexer with the given id or index.</p>
</td>
</tr>
<tr>
<td style="padding-left:7px;padding-right:7px;border-top:none;border-left:solid black .5pt;border-bottom:solid black .5pt;border-right:solid black .5pt;">
<p>TrySetMember</p>
</td>
<td style="padding-left:7px;padding-right:7px;border-top:none;border-left:none;border-bottom:solid black .5pt;border-right:solid black .5pt;">
<p>There is an attempt to get the value of a named member (e.g. a field or property)</p>
</td>
</tr>
</tbody>
</table>
</div>
<p> </p>
<p>An example of the above Sitecore 7 (:-)) implementation could therefore be:
</p>
<pre>
namespace Sitecore.Data.Items
{ public class Item : DynamicObject //...and other interfaces { //... public override bool TryGetMember(GetMemberBinder binder, out object result) { dynamic field = Fields[binder.Name]; if (field != null) { result = field; return true; } return base.TryGetMember(binder, out result); } //... }
}
</pre>
<p>Let this be an inspiration to Sitecore for the next version – I for one truly hope we see something like this in the product.</p> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/mcore.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mcore.wordpress.com/208/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/mcore.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mcore.wordpress.com/208/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/mcore.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mcore.wordpress.com/208/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/mcore.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mcore.wordpress.com/208/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/mcore.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mcore.wordpress.com/208/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mcore.wordpress.com&blog=2983764&post=208&subd=mcore&ref=&feed=1"/></div>]]></content:encoded>
         <media:content url="http://1.gravatar.com/avatar/9ebef7d147872a290a73b7d8d0f4ab52?s=96&amp;amp;d=identicon&amp;amp;r=G" medium="image">
            <media:title>Eldblom</media:title>
         </media:content>
      </item>
      <item>
         <title>How to Evaluate Sitecore as a Developer</title>
         <link>http://sitecorejohn.spaces.live.com/Blog/cns!960125F1D4A59952!505.entry</link>
         <description>&lt;p&gt;Like any Web Content Management System (WCM or CMS), the best way for a developer to evaluate &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.sitecore.net&quot;&gt;Sitecore&lt;/a&gt; is to build a prototype using the product. The best way to learn Sitecore is to attend at least the Sitecore .NET Developer or Sitecore HTML Developer &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.sitecore.net/training.aspx&quot;&gt;training&lt;/a&gt; (the latter focuses on XSL). But first, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.sitecore.net/en/Demonstration/Demonstration-Request.aspx&quot;&gt;schedule a live Web demo&lt;/a&gt; of the product with Sitecore.&lt;/p&gt; &lt;p&gt;Do some research before attending training, working with the technology, or involving any information and system architects, users, business analysts, or other parties in the prototyping process. Spend as much time as you can afford reading about Sitecore. Check out the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.sitecore.net&quot;&gt;Sitecore Web site&lt;/a&gt; and the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sdn.sitecore.net&quot;&gt;Sitecore Developer Network&lt;/a&gt; (SDN), especially the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sdn.sitecore.net/Forum.aspx?&quot;&gt;SDN forums&lt;/a&gt;. Manage your profile and sign up for newsletters on the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://portal.sitecore.net&quot;&gt;Sitecore Portal&lt;/a&gt;. If you are a Sitecore partner, check out the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://spn.sitecore.net&quot;&gt;Sitecore Partner Network&lt;/a&gt; (SPN).&lt;/p&gt; &lt;p&gt;Before architecting a solution, I think that developers should read through at least these in approximately the following order:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sdn.sitecore.net/Reference/Sitecore 6/Content Reference.aspx&quot;&gt;Content Reference&lt;/a&gt; manual. &lt;li&gt;The &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sdn.sitecore.net/Reference/Sitecore 6/Data Definition Reference.aspx&quot;&gt;Data Definition Reference&lt;/a&gt; manual. &lt;li&gt;The &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sdn.sitecore.net/Reference/Sitecore 6/Presentation Component Reference.aspx&quot;&gt;Presentation Component Reference&lt;/a&gt; manual.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Further reading before installing Sitecore:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;I wrote &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sitecorejohn.spaces.live.com/blog/cns!960125F1D4A59952!284.entry&quot;&gt;another post&lt;/a&gt; about installing a local instance of SQL Server, which is the most convenient option. &lt;li&gt;The Sitecore &lt;a rel=&quot;nofollow&quot; title=&quot;Installation&quot; target=&quot;_blank&quot; href=&quot;http://sdn.sitecore.net/Products/Sitecore V5/Sitecore CMS 6/Installation.aspx&quot;&gt;Installation&lt;/a&gt; guide, including system requirements. I would read a little about the .zip installation to learn more about the system components, which include a file system, an IIS ASP.NET Web site, and supporting relational databases. &lt;li&gt;The &lt;a rel=&quot;nofollow&quot; title=&quot;Release Notes&quot; target=&quot;_blank&quot; href=&quot;http://sdn5.sitecore.net/Products/Sitecore V5/Sitecore CMS 6/ReleaseNotes.aspx&quot;&gt;Release Notes&lt;/a&gt;, which address known issues. &lt;li&gt;Sitecore requires specific &lt;a rel=&quot;nofollow&quot; title=&quot;Internet Explorer Configuration&quot; target=&quot;_blank&quot; href=&quot;http://sdn.sitecore.net/reference/sitecore 6/ie configuration reference.aspx&quot;&gt;Internet Explorer Configuration&lt;/a&gt;. &lt;li&gt;If you use Windows XP and have already configured an IIS Web site, then see &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sdn.sitecore.net/Products/Sitecore V5/Sitecore CMS 5,-d-,3/Installation/ZIP installation/Multiple XP Sites.aspx&quot;&gt;this page on SDN&lt;/a&gt;. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;For some reason, organizations often want to start by configuring the production servers. I would first focus on the development environments, then test environments, then production content management, and finally production content delivery.&lt;/p&gt; &lt;p&gt;You can get the latest Sitecore setup executable from &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sdn.sitecore.net/Products/Sitecore V5/Sitecore CMS 6.aspx&quot;&gt;this page&lt;/a&gt; on the Sitecore Developer Network, and you can get the Starter Kit there as well. If you are a Sitecore partner, you can download the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://spn.sitecore.net/Partner Resources/Demo Systems/Nicam Demo.aspx&quot;&gt;Nicam demo site&lt;/a&gt; from the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://spn.sitecore.net&quot;&gt;Sitecore Partner Network&lt;/a&gt;. Customers can &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.sitecore.net/contact.aspx&quot;&gt;contact Sitecore&lt;/a&gt; for access to Nicam. The Starter Kit and Nicam are useful for demonstrations and (to some extent) education, but neither follows best practices, and neither should form any basis for production solutions. If you run into any trouble installing Sitecore, see the &lt;a rel=&quot;nofollow&quot; title=&quot;Installation Troubleshooting&quot; target=&quot;_blank&quot; href=&quot;http://sdn.sitecore.net/Products/Sitecore V5/Sitecore CMS 6/Installation Troubleshooting.aspx&quot;&gt;Installation Troubleshooting&lt;/a&gt; guide, or &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.sitecore.net/contact.aspx&quot;&gt;contact&lt;/a&gt; your regional Sitecore office.&lt;/p&gt; &lt;p&gt;Use the cookbooks to implement what you’ve read:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sdn.sitecore.net/End User/Sitecore 6 Cookbooks.aspx&quot;&gt;Content Author's Cookbook&lt;/a&gt;. &lt;li&gt;The &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sdn.sitecore.net/Reference/Sitecore 6/Data Definition Cookbook.aspx&quot;&gt;Data Definition Cookbook&lt;/a&gt;. &lt;li&gt;The &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sdn.sitecore.net/Reference/Sitecore 6/Presentation Component Cookbook.aspx&quot;&gt;Presentation Component Cookbook&lt;/a&gt; (especially the section, “How to Create a Visual Studio Web Application Project”).&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;If you want to use XSL, see the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sdn.sitecore.net/Reference/Sitecore 6/Presentation Component XSL Reference.aspx&quot;&gt;Presentation Component XSL Reference&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;For information about Sitecore Application Programmer Interfaces (APIs), see:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sdn.sitecore.net/Reference/Sitecore 6/Content API Cookbook.aspx&quot;&gt;Content API Cookbook&lt;/a&gt;. &lt;li&gt;The &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sdn.sitecore.net/Reference/Sitecore 6/Data Definition API Cookbook.aspx&quot;&gt;Data Definition API Cookbook&lt;/a&gt;. &lt;li&gt;The &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sdn.sitecore.net/Reference/Sitecore 6/Presentation Component API Cookbook.aspx&quot;&gt;Presentation Component API Cookbook&lt;/a&gt;. &lt;li&gt;The &lt;a rel=&quot;nofollow&quot; title=&quot;Sitecore 6 API&quot; target=&quot;_blank&quot; href=&quot;http://sdn.sitecore.net/Reference/Sitecore 6/Sitecore_6_API_Reference.aspx&quot;&gt;Sitecore 6 API&lt;/a&gt; documentation.,&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;If the above topics don’t cover what you need, check additional resources listed in &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sitecorejohn.spaces.live.com/blog/cns!960125F1D4A59952!154.entry&quot;&gt;this post &lt;/a&gt;that contains links to the best documentation, common forum topics, and other resources. These should be particularly helpful:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sdn.sitecore.net/Reference/Sitecore 6/Client Configuration Cookbook.aspx&quot;&gt;Client Configuration Cookbook&lt;/a&gt;. &lt;li&gt;The guide to &lt;a rel=&quot;nofollow&quot; title=&quot;Reusing and Sharing Data&quot; target=&quot;_blank&quot; href=&quot;http://sdn.sitecore.net/Reference/Sitecore 6/Reusing and Sharing Data.aspx&quot;&gt;Reusing and Sharing Data&lt;/a&gt;. &lt;li&gt;The &lt;a rel=&quot;nofollow&quot; title=&quot;Rules Engine Cookbook&quot; target=&quot;_blank&quot; href=&quot;http://sdn.sitecore.net/Reference/Sitecore 6/Rules Engine Cookbook.aspx&quot;&gt;Rules Engine Cookbook&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;You might want to review various blogs about Sitecore. Lars Fløe Nielsen maintains &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://larsnielsen.blogspirit.com/archive/2009/09/10/updated-blog-list.html&quot;&gt;this list&lt;/a&gt; of current blogs relevant to Sitecore.&lt;/p&gt; &lt;p&gt;Partners and customers can access the Sitecore Support Portal at &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://support.sitecore.net&quot;&gt;http://support.sitecore.net&lt;/a&gt;.&lt;/p&gt;</description>
         <guid isPermaLink="false">960125F1D4A59952!505</guid>
         <pubDate>Wed, 11 Nov 2009 18:08:06 -0800</pubDate>
      </item>
      <item>
         <title>Sitecore’s Web CMS Now Integrates with Telligent Community</title>
         <link>http://sitecorewest.wordpress.com/2009/11/11/sitecores-web-cms-now-integrates-with-telligent-community/</link>
         <description>Sitecore, the leading provider of .NET Web Content Management System (CMS) software, today announced that its Web CMS solution can be integrated with Telligent CommunityTM. Telligent, a leader in community, collaboration and social analytics software, allows organizations to create interactive communities to listen to and engage internal and external audiences.
Telligent Community enables customers to build [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=sitecorewest.wordpress.com&amp;blog=9388662&amp;post=60&amp;subd=sitecorewest&amp;ref=&amp;feed=1&quot;/&gt;</description>
         <guid isPermaLink="false">http://sitecorewest.wordpress.com/?p=60</guid>
         <pubDate>Wed, 11 Nov 2009 10:31:50 -0800</pubDate>
         <content:encoded><![CDATA[<div class='snap_preview'><br /><p>Sitecore, the leading provider of .NET Web Content Management System (CMS) software, today announced that its Web CMS solution can be integrated with <a rel="nofollow" target="_blank" href="http://telligent.com/">Telligent CommunityTM</a>. <a rel="nofollow" name="_Hlk242774526">Telligent</a>, a leader in community, collaboration and social analytics software, allows organizations to create interactive communities to listen to and engage internal and external audiences.</p>
<p>Telligent Community enables customers to build online social networking platforms where users can blog, share photos and create groups and forums &#8211; for improved online engagement and collaboration. Combining these solutions gives organizations the ability to harness all of their rich, community based content within the rest of their Web properties, quickly and easily, while significantly enhancing their site visitors&#8217; experience.</p>
<p> &#8221;Through this integration with Sitecore, we will enhance the way Telligent Community enables organizations to interact with their customers.&#8221; said Patrick Brandt, Telligent CEO. &#8220;We look forward to strengthening our relationship with Sitecore and continuing to offer organizations a secure, comprehensive Web solution.&#8221;</p>
<p>Telligent Community helps users create channels for direct customer engagement, build brand awareness and loyalty, increase market share and improve customer support. The goal of the Sitecore integration package is to provide seamless, centralized security handling and the ability to interchange the content between Sitecore and Telligent Community solutions. With the security integration providing single sign-on functionality, the user signs into the Sitecore CMS and is simultaneously signed into Telligent Community. The user experiences a fully transparent Web solution. The security integration also simplifies the user creation, so users only need to be created in Sitecore CMS and are automatically transferred to Telligent Community upon first login.</p>
<p>&#8220;From the technical perspective it&#8217;s a great match, since Sitecore and Telligent Community are based on Microsoft .NET technology and both offer flexible integration with extensive APIs and customization options,&#8221; said Darren Guarnaccia, VP Product Marketing, Sitecore. &#8220;Creating more channels for customer engagement is the natural evolution of CMS software. We have already seen results from a number of projects, where customers have reported a significant increase in site traffic, improved SEO and higher lead conversion rates.&#8221;</p>
<p>The content sharing features provide the ability to mix social media applications and Web content seamlessly within a website, giving users a naturally combined experience of both types of content. The integration module supports content repurposing for Telligent Community forums, blogs and media galleries as well membership information. Social content can either be reused directly or it can be filtered based on the current user&#8217;s rights and group memberships.</p> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/sitecorewest.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sitecorewest.wordpress.com/60/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/sitecorewest.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sitecorewest.wordpress.com/60/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/sitecorewest.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sitecorewest.wordpress.com/60/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/sitecorewest.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sitecorewest.wordpress.com/60/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/sitecorewest.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sitecorewest.wordpress.com/60/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sitecorewest.wordpress.com&blog=9388662&post=60&subd=sitecorewest&ref=&feed=1"/></div>]]></content:encoded>
         <media:content url="http://1.gravatar.com/avatar/949e97bb128775df882a4258a7919d09?s=96&amp;amp;d=identicon&amp;amp;r=G" medium="image">
            <media:title>sitecorewest</media:title>
         </media:content>
         <category>News</category>
      </item>
      <item>
         <title>Inherit parent field values in Sitecore</title>
         <link>http://blog.capaxsolutions.co.uk/2009/11/10/inherit-parent-field-values-in-sitecore/</link>
         <description>Fields that inherit the value of their parent items is something I’ve heard asked for before in the past but I’ve always just recommended coding it into the presentation. As an alternative however I’ve created a custom renderField pipeline step that handles it for you. By including “InheritParent” in the name of your field it [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=blog.capaxsolutions.co.uk&amp;blog=9199105&amp;post=132&amp;subd=sitecored&amp;ref=&amp;feed=1&quot;/&gt;</description>
         <guid isPermaLink="false">http://blog.capaxsolutions.co.uk/?p=132</guid>
         <pubDate>Tue, 10 Nov 2009 05:59:04 -0800</pubDate>
         <content:encoded><![CDATA[<div class='snap_preview'><br /><p>Fields that inherit the value of their parent items is something I’ve heard asked for before in the past but I’ve always just recommended coding it into the presentation. As an alternative however I’ve created a custom renderField pipeline step that handles it for you. </p>
<p>By including “InheritParent” in the name of your field it will look for values in parent items when none exists in the current item. Installing it is just a matter of including the code in your project and referencing it in the &lt;renderField&gt; just after GetFieldValue:</p>
<blockquote><p>&lt;renderField&gt;<br /> &lt;processor type=&#8221;Sitecore.Pipelines.RenderField.GetFieldValue, Sitecore.Kernel&#8221; /&gt;<br />
<strong> &lt;processor type=&#8221;Namespace.FieldValueInherit, Assembly&#8221; /&gt;</strong><br />
…</p></blockquote>
<pre style="background-color:#ffffff;width:100%;overflow:scroll;">
<div class="blogButton">
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';color:blue;font-size:10pt;">using</span><span style="font-family:'Courier New';font-size:10pt;"> System;</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';color:blue;font-size:10pt;">using</span><span style="font-family:'Courier New';font-size:10pt;"> Sitecore.Data.Fields;</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';color:blue;font-size:10pt;">using</span><span style="font-family:'Courier New';font-size:10pt;"> Sitecore.Data.Items;</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';color:blue;font-size:10pt;">using</span><span style="font-family:'Courier New';font-size:10pt;"> Sitecore.Pipelines.RenderField;</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"> </span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';color:blue;font-size:10pt;">namespace</span><span style="font-family:'Courier New';font-size:10pt;"> Namespace</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;">{</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&lt;summary&gt;</span></span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:gray;">///</span><span style="color:green;"> Sitecore renderField pipeline for inheriting parent field values recursively.</span></span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&lt;/summary&gt;</span></span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:blue;">public</span> <span style="color:blue;">class</span> <span style="color:#2b91af;">FieldValueInherit</span></span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span>{</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&lt;summary&gt;</span></span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:gray;">///</span><span style="color:green;"> Processes the field value inheritance pipeline.</span></span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&lt;/summary&gt;</span></span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&lt;param name="args"&gt;</span><span style="color:green;">The pipeline arguments.</span><span style="color:gray;">&lt;/param&gt;</span></span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:blue;">public</span> <span style="color:blue;">void</span> Process(<span style="color:#2b91af;">RenderFieldArgs</span> args)</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span>{</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:green;">//Dont run while in page edit mode.</span></span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:blue;">if</span> (Sitecore.<span style="color:#2b91af;">Context</span>.<span style="color:#2b91af;">PageMode</span>.IsPageEditor ||</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span>Sitecore.<span style="color:#2b91af;">Context</span>.<span style="color:#2b91af;">PageMode</span>.IsPageEditorClassic ||</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span>Sitecore.<span style="color:#2b91af;">Context</span>.<span style="color:#2b91af;">PageMode</span>.IsPageEditorDesigning ||</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span>Sitecore.<span style="color:#2b91af;">Context</span>.<span style="color:#2b91af;">PageMode</span>.IsPageEditorEditing ||</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span>Sitecore.<span style="color:#2b91af;">Context</span>.<span style="color:#2b91af;">PageMode</span>.IsPageEditorNavigating)</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span>{</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:blue;">return</span>;</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span>}</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"> </span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:green;">//Check field exists.</span></span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:#2b91af;">Field</span> field = args.GetField();</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:blue;">if</span> (field == <span style="color:blue;">null</span>)</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span>{</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:blue;">return</span>;</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span>}</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"> </span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:green;">//Check field is tagged to inherit parent values.</span></span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:blue;">if</span> (!field.Name.Contains(<span style="color:#a31515;">"InheritParent"</span>))</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span>{</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span> </span><span style="color:blue;">return</span>;</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span>}</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"> </span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:green;">//If field contains standard values then check parent items for fields that have been set.</span></span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:blue;">if</span> (field.ContainsStandardValue || !field.HasValue)</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span>{</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:#2b91af;">Item</span> item = args.Item;</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span> </span><span style="color:blue;">if</span> (item == <span style="color:blue;">null</span>)</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span>{</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:blue;">return</span>;</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span>}</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"> </span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:#2b91af;">Item</span>[] ancestors = item.Axes.GetAncestors();</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:#2b91af;">Array</span>.Reverse(ancestors);</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:blue;">foreach</span> (<span style="color:#2b91af;">Item</span> ancestor <span style="color:blue;">in</span> ancestors)</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span>{</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:blue;">if</span> (ancestor.Fields[field.ID] != <span style="color:blue;">null</span> &amp;&amp; ancestor.Fields[field.ID].HasValue)</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span>{</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span>args.Result.FirstPart = ancestor.Fields[field.ID].Value;</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span><span style="color:blue;">return</span>;</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span>}</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span>}</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span>}</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span>}</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;"><span> </span>}</span>
<p style="line-height:normal;margin:0;" class="MsoNormal"><span style="font-family:'Courier New';font-size:10pt;">}</span>
<p style="margin:0 0 10pt;" class="MsoNormal"><span style="font-family:Calibri;"> </span>
</div>
</pre> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/sitecored.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sitecored.wordpress.com/132/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/sitecored.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sitecored.wordpress.com/132/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/sitecored.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sitecored.wordpress.com/132/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/sitecored.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sitecored.wordpress.com/132/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/sitecored.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sitecored.wordpress.com/132/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.capaxsolutions.co.uk&blog=9199105&post=132&subd=sitecored&ref=&feed=1"/></div>]]></content:encoded>
         <media:content url="http://1.gravatar.com/avatar/da00436ef9beff20d0f70144c9e75385?s=96&amp;amp;d=identicon&amp;amp;r=G" medium="image">
            <media:title>Steve Green</media:title>
         </media:content>
      </item>
      <item>
         <title>Another blog update</title>
         <link>http://larsnielsen.blogspirit.com/archive/2009/11/09/another-blog-update.html</link>
         <description>&lt;p&gt;Uhm, it seems that my life is a constant monitoring of the blogosphere. Here goes a few new blogs&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Morten Ljungberg - Sitecore Whats new - &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://mortenljungberg.blogspot.com/&quot;&gt;http://mortenljungberg.blogspot.com/&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Chris Bushnell - Tips from a Sitecore Technical Writer - &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://cbushnell.wordpress.com/&quot;&gt;http://cbushnell.wordpress.com/&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Paul Markun - Theory in practice - &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://paulmarkun.blogspot.com/&quot;&gt;http://paulmarkun.blogspot.com/&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;</description>
         <author>Lars Fløe Nielsen</author>
         <guid isPermaLink="false">tag:larsnielsen.blogspirit.com,2009-11-09:1850336</guid>
         <pubDate>Mon, 09 Nov 2009 06:23:55 -0800</pubDate>
      </item>
      <item>
         <title>An Example of using Edit Frames in Nicam</title>
         <link>http://mikecaseycms.blogspot.com/2009/11/example-of-using-edit-frames-in-nicam.html</link>
         <description>&lt;p&gt;For those of you that work with, or used to work with, 5.3 Green Dots Web Edit functionality, you might really appreciate the ease with which you can create contextual editing menus.&amp;#160; The 6.0 Page Editor (with all its significant usability features and improvements) might have left you questioning your ability to implement the same contextual functionality.&amp;#160; Enter Edit Frames as of 6.1, a great new feature that should have you dreaming up some incredibly focused Page Editor-based contextual editing functionality.&lt;/p&gt; &lt;p&gt;John West, as always, has a great description of this functionality &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sitecorejohn.spaces.live.com/blog/cns!960125F1D4A59952!384.entry&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;For my discussion today, I wanted to show a couple of quick examples of where this could be used.&amp;#160; As you know, Sitecore Data Templates promote the encapsulation of complex content types.&amp;#160; Some fields in these Data Templates are presentation-driven (Short Description, Image), while others are meta-driven (Rating, Keywords, Category).&amp;#160; The Content Editor interface shows all fields on both sides of this fence in a comprehensive, section-organized form view.&amp;#160; In Page Editor, we get the very handy inline frame editing of all presented fields.&amp;#160; But what about those meta-fields behind the scenes?&amp;#160; Page Editor presents the “Blue Boxes” to split the screen and get to those fields behind the presented page.&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://lh6.ggpht.com/_JjsHfCZ5On8/SvhARggvBYI/AAAAAAAABCs/yJXom4R4hvU/s1600-h/image%5B7%5D.png&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/_JjsHfCZ5On8/SvhASoj8nvI/AAAAAAAABCw/PGkOnQCkQ9U/image_thumb%5B3%5D.png?imgmax=800&quot; width=&quot;476&quot; height=&quot;191&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Clicking on Edit the related item splits the screen and allows us to navigate the sections of fields that make up the News Article Data Template:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://lh4.ggpht.com/_JjsHfCZ5On8/SvhATi2lrPI/AAAAAAAABC0/dKjBuqZQGrI/s1600-h/image%5B3%5D.png&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/_JjsHfCZ5On8/SvhAUiLS9wI/AAAAAAAABC4/MQOTkkj_osc/image_thumb%5B1%5D.png?imgmax=800&quot; width=&quot;581&quot; height=&quot;306&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;While this is intuitive and simple, we’re always striving to make this Page Editor experience as streamlined as possible.&amp;#160; Instead of splitting the screen and having to find a field (within what could be a very complex Data Template), it would certainly be nice to define the field(s) that the editor would be most interested in getting to, and to simplify and focus the editing interface even more.&lt;/p&gt; &lt;p&gt;Edit Frames allow for just that.&amp;#160; Let’s take this same example.&amp;#160; We’re editing a News Article (Nicam Camera K200D) that has fields for Title, Short Description, Image, etc.&amp;#160; Via the Online Marketing Suite, we article authors also want to tag this piece with the appropriate keywords that match up to our profile keys.&amp;#160; Let’s build an Edit Frame around the article’s title that allows us to see the checklist of Keywords with which to tag this article.&lt;/p&gt; &lt;p&gt;First, we need to define the Buttons that will be part of our Edit Frame contextual menu.&amp;#160; Sitecore provides a couple of handy default buttons (Insert and Edit).&amp;#160; For today, we’ll simply use the default behavior of Edit Field, but for you developers, you can already imagine that any command functionality can be invoked here.&amp;#160; The Buttons themselves are defined in the Core database (very much like the commands available to the Rich Text Editor).&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://lh6.ggpht.com/_JjsHfCZ5On8/SvhAV2I6mUI/AAAAAAAABC8/Fy6AFWLOw58/s1600-h/image%5B10%5D.png&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/_JjsHfCZ5On8/SvhAW3kg2cI/AAAAAAAABDA/_XP4AvAh704/image_thumb%5B4%5D.png?imgmax=800&quot; width=&quot;244&quot; height=&quot;161&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Switching to the Core database and navigating to /sitecore/content/Applications/WebEdit/Edit Frame Buttons will show us all Edit Frame toolbars configured for the site.&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://lh6.ggpht.com/_JjsHfCZ5On8/SvhAXju_dsI/AAAAAAAABDE/1T9h46Xk67o/s1600-h/image%5B16%5D.png&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/_JjsHfCZ5On8/SvhAYfZpMYI/AAAAAAAABDI/IXxP9v2kZls/image_thumb%5B6%5D.png?imgmax=800&quot; width=&quot;226&quot; height=&quot;244&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The system is installed with the Default toolbar in place.&amp;#160; If an Edit Frame does not specifically call out a Buttons property, the Default is used.&amp;#160; Let’s copy the Default item, paste it under Edit Frame Buttons, and rename it Keywords.&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://lh6.ggpht.com/_JjsHfCZ5On8/SvhAZUIoujI/AAAAAAAABDM/ugT_y7QPcvE/s1600-h/image%5B20%5D.png&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/_JjsHfCZ5On8/SvhAaaIEXqI/AAAAAAAABDQ/1hVkuh3IqUo/image_thumb%5B8%5D.png?imgmax=800&quot; width=&quot;420&quot; height=&quot;277&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;If you select the newly renamed Keywords item, you’ll see that the Edit Frame toolbar has fields for a Title and Tooltip.&amp;#160; Expand the Keywords item to reveal the default Buttons available to it.&amp;#160; We’re using the Edit Button (you can delete this Insert button), and selecting it shows the fields available to the Field Editor Button template that it is based on.&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://lh6.ggpht.com/_JjsHfCZ5On8/SvhAbMj5f2I/AAAAAAAABDU/gx48ZrSk5eA/s1600-h/image%5B24%5D.png&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/_JjsHfCZ5On8/SvhAcE3I3HI/AAAAAAAABDY/GPyPdjRfHgs/image_thumb%5B10%5D.png?imgmax=800&quot; width=&quot;431&quot; height=&quot;266&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The Fields field allows a pipe-separated list of fields that will become readily available to the Page Editor.&amp;#160; For our example, we’re using only one:&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://lh5.ggpht.com/_JjsHfCZ5On8/SvhAdFKIkLI/AAAAAAAABDc/OJKntG_3isU/s1600-h/image%5B28%5D.png&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/_JjsHfCZ5On8/SvhAd9HIpeI/AAAAAAAABDg/-EefZhQLjuk/image_thumb%5B12%5D.png?imgmax=800&quot; width=&quot;444&quot; height=&quot;189&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Now, with the toolbar in place and configured, we simply need to add the Edit Frame to a presentation control.&amp;#160; This Edit Frame can be added, of course, to a .NET or XSLT control.&amp;#160; Since the news article already has a NewsItem xslt to present its fields, let’s add the frame there:&lt;/p&gt; &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;xsl:template &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;match&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;*&lt;/span&gt;&quot; &lt;span style=&quot;color:red;&quot;&gt;mode&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;main&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;br /&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#a31515;&quot;&gt;sc:editFrame &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;Buttons&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;/sitecore/content/Applications/WebEdit/Edit Frame Buttons/Keywords&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;br /&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#a31515;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;br /&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#a31515;&quot;&gt;sc:text &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;field&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;Title&lt;/span&gt;&quot; &lt;span style=&quot;color:red;&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;.&lt;/span&gt;&quot; &lt;span style=&quot;color:blue;&quot;&gt;/&amp;gt;&lt;br /&gt; &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#a31515;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;br /&gt; &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#a31515;&quot;&gt;sc:editFrame&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt;Notice the Buttons property calls out the path in the Core database to the Keywords toolbar we set up.&amp;#160; The &amp;lt;sc:editFrame&amp;gt; itself will present hover-over region including any HTML we wrap it with:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://lh3.ggpht.com/_JjsHfCZ5On8/SvhAeokU7lI/AAAAAAAABDk/UVJiuVatygk/s1600-h/image%5B32%5D.png&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/_JjsHfCZ5On8/SvhAfrWUjWI/AAAAAAAABDo/4RmFjflA9tY/image_thumb%5B14%5D.png?imgmax=800&quot; width=&quot;453&quot; height=&quot;113&quot;/&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Clicking on the new Keywords (Default Title of the Keywords toolbar itself) drop-down shows us any buttons within the Toolbar.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://lh5.ggpht.com/_JjsHfCZ5On8/SvhAgLLMGcI/AAAAAAAABDs/ooVm1zYW0aY/s1600-h/image%5B36%5D.png&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/_JjsHfCZ5On8/SvhAg4gQ0UI/AAAAAAAABDw/mN6Os14_k-8/image_thumb%5B16%5D.png?imgmax=800&quot; width=&quot;455&quot; height=&quot;80&quot;/&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;And now we can easily edit the Keywords checklist field:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://lh5.ggpht.com/_JjsHfCZ5On8/SvhAh8ClenI/AAAAAAAABD0/0zfOR8vvqRo/s1600-h/image%5B41%5D.png&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/_JjsHfCZ5On8/SvhAiqSPDkI/AAAAAAAABD4/WYecpLgkdYM/image_thumb%5B19%5D.png?imgmax=800&quot; width=&quot;488&quot; height=&quot;322&quot;/&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;That’s all there is to it.&amp;#160; This article simply covered the mechanics…now we can think through the many creative places where this technique makes sense to make the Page Editor even more powerful.&lt;/p&gt; &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8360277440872630202-3576454158001746268?l=mikecaseycms.blogspot.com'/&gt;&lt;/div&gt;</description>
         <author>Michael Casey</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-8360277440872630202.post-3576454158001746268</guid>
         <pubDate>Mon, 09 Nov 2009 03:17:00 -0800</pubDate>
      </item>
      <item>
         <title>New Sitecore 6 blog module released</title>
         <link>http://www.markvanaalst.net/2009/11/07/new-sitecore-6-blog-module-released/</link>
         <description>In the last couple of months I have been working on a new blog module for Sitecore 6.2. It started as a small module just for my own educational purpose but ended up as one of the largest modules I created. The module is a complete rewritten blog module, based upon the functionality of the [...]</description>
         <guid isPermaLink="false">http://www.markvanaalst.net/?p=83</guid>
         <pubDate>Fri, 06 Nov 2009 15:08:38 -0800</pubDate>
      </item>
      <item>
         <title>Sitecore is watching Google- turning the tables.</title>
         <link>http://paulmarkun.blogspot.com/2009/11/sitecore-is-watching-google-turning.html</link>
         <description>Google is everywhere , right? With so many free convenient services, and all they want to do is watch ....over your shoulder and maybe offer ads...Your searches, Gmail, Google Docs, Wave, your mobile, Chrome browser and more.&lt;br /&gt;&lt;br /&gt;Well, who is watching Google? Well in our case at Sitecore, our Online Marketing Suite (OMS) is- and it just saved us some money and time! &lt;br /&gt;&lt;br /&gt;We use Google ads, Bing and Yahoo Ads, and a lot of display ads as well. We have these campaigns feed into our OMS, because beyond the click performance we have visibility into visitor goals success on our website and context of the visitors' experience. We also integrate our email campaigns, PR campaigns, really anything online that ends up on our website.&lt;br /&gt;&lt;br /&gt;A few days ago Ted, our Online marketing Ad specialist, noticed that suddenly our conversions were way down on our Google Ads. The OMS showed that it wasn't consistent across all our many campaigns, specifically the traffic from our Google Adwords wasn't engaged with our website at all, they were bouncing right away without accomplishing any goals.&lt;br /&gt;&lt;br /&gt;Google was showing lotsa clicks, the meter was running but the wheels weren't turning on our website!&lt;br /&gt;&lt;br /&gt;Ted then went into our AdWords campaigns and noticed some strange things about our ads and account.&lt;br /&gt;&lt;br /&gt;Suddenly we were selling iPhone accessories! Instead of offering only our software, we had iPhone Ads popping up everywhere and linking back to our site. No wonder our OMS pointed out our conversions were lousy- other than the fact that our Web CMS allows your website to look great from an iPhone, we have no interesting iPhone accessory info on our site! So these visitors bounced.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://4.bp.blogspot.com/_Ea9UeLAUxnI/SvTUqKFppGI/AAAAAAAAADs/8jiq4qPPM_c/s1600-h/Google+Adwords+chat+screen.jpg&quot;&gt;&lt;img style=&quot;MARGIN:0px 0px 10px 10px;WIDTH:400px;FLOAT:right;HEIGHT:158px;CURSOR:hand;&quot; id=&quot;BLOGGER_PHOTO_ID_5401175673851716706&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;http://4.bp.blogspot.com/_Ea9UeLAUxnI/SvTUqKFppGI/AAAAAAAAADs/8jiq4qPPM_c/s400/Google+Adwords+chat+screen.jpg&quot;/&gt;&lt;/a&gt;Turns out we were hacked, or else Google accidentally merged our account with another company's AdWords account, with a name that is very close to our Sitecore name- literally the same with two letters transposed. Suddenly our ad total budget tripled, we had a new group of ads appear, and campaigns got scrambled.&lt;br /&gt;&lt;br /&gt;Ted quickly got in touch with Google via their chat system and escalated the problem. We had to suspend our campaign, change our credit card info, and update our passwords. Of course all the crazy charges were refunded, although we lost the productivity from 3 days of online Google Ads.&lt;br /&gt;&lt;br /&gt;The good news is by having our OMS system watching Google's system we caught this quickly, and kept the expense from being even higher. That was not our original intent, frankly. We use the OMS to integrate our multi-channel campaign results, since we do so much more than just AdWords. But, as it turned out, the OMS helped protect us as well as see the fuller online picture than presented by Google!&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3675954641007561189-7889789351645543247?l=paulmarkun.blogspot.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Paul Markun</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-3675954641007561189.post-7889789351645543247</guid>
         <pubDate>Fri, 06 Nov 2009 09:42:00 -0800</pubDate>
         <media:thumbnail width="72" url="http://4.bp.blogspot.com/_Ea9UeLAUxnI/SvTUqKFppGI/AAAAAAAAADs/8jiq4qPPM_c/s72-c/Google+Adwords+chat+screen.jpg" height="72" xmlns:media="http://search.yahoo.com/mrss/"/>
      </item>
      <item>
         <title>Sitecore wins Web Idol competition at J Boye Conference</title>
         <link>http://paulmarkun.blogspot.com/2009/11/sitecore-wins-web-idol-competition-at-j.html</link>
         <description>&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://2.bp.blogspot.com/_Ea9UeLAUxnI/SvSi6IxjBKI/AAAAAAAAADk/FWYUIiyFyMc/s1600-h/Sitecore+at+J+Boye.jpg&quot;&gt;&lt;img style=&quot;MARGIN:0px 0px 10px 10px;WIDTH:400px;FLOAT:right;HEIGHT:389px;CURSOR:hand;&quot; id=&quot;BLOGGER_PHOTO_ID_5401120972795479202&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;http://2.bp.blogspot.com/_Ea9UeLAUxnI/SvSi6IxjBKI/AAAAAAAAADk/FWYUIiyFyMc/s400/Sitecore+at+J+Boye.jpg&quot;/&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;The annual J Boye Conference held in Denmark focused on web content management, web strategy and user experience. One highlight was an interactive, crowd pleasing &quot;Web Idol&quot; bake off demo fest with multiple web CMS vendors showing their best 7 minute interactive demo. &lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;For the second year in a row &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.sitecore.net/&quot;&gt;Sitecore&lt;/a&gt; won it all, with an engaging and light-hearted demo of user interaction on a Sitecore website. Lars Petersen of Sitecore, with his two alternate 'personas' rocked the house with a true life personalization-driven web form and landing page for a fun-filled beer party.&lt;br /&gt;&lt;br /&gt;Check it out &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.youtube.com/watch?v=fgSLQDS_xp8&quot;&gt;here on YouTube.&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;If Sitecore can do this is 7 minutes , imagine what a few weeks of work will result in!&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;The opening keynote was deliver by psychologist BJ Fogg, of Stanford University's &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://captology.stanford.edu/&quot;&gt;Persuasive Technology lab. &lt;/a&gt;Fogg is an expert in online persuation and in understanding how technology is used to influence peoples behavior. It is significant that a well known researcher and innovator like Fogg was featured at this conference. Clearly it speaks to how important it is for web CMS systems to have persuasive abilities, adapt to their visitor's needs, and encourage and influence behavior.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3675954641007561189-4754957999827009657?l=paulmarkun.blogspot.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Paul Markun</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-3675954641007561189.post-4754957999827009657</guid>
         <pubDate>Fri, 06 Nov 2009 03:06:00 -0800</pubDate>
         <media:thumbnail width="72" url="http://2.bp.blogspot.com/_Ea9UeLAUxnI/SvSi6IxjBKI/AAAAAAAAADk/FWYUIiyFyMc/s72-c/Sitecore+at+J+Boye.jpg" height="72" xmlns:media="http://search.yahoo.com/mrss/"/>
      </item>
      <item>
         <title>New Sitecore installer</title>
         <link>http://sitecoreexperience.spaces.live.com/Blog/cns!F413DDB1281D6EEA!255.entry</link>
         <description>&lt;p&gt;Kudos to Sitecore for the new installer. I downloaded it today to have a sneak peak at the improvements in the latest version. I was delighted to find out that the installer had been improved as well. Good job Sitecore, I love it.&lt;/p&gt;</description>
         <guid isPermaLink="false">F413DDB1281D6EEA!255</guid>
         <pubDate>Thu, 05 Nov 2009 09:48:44 -0800</pubDate>
      </item>
      <item>
         <title>Sitecore User Group Meeting in Sydney</title>
         <link>http://sitecoreaustralia.wordpress.com/2009/11/05/sitecore-user-group-meeting-in-sydney/</link>
         <description>Thanks to all those whom participated in the Sitecore User Group meeting in Sydney last week. We had a great turn-out and it was good to see a mix of developers, partners and clients. We discussed the new and exciting features of Sitecore 6.2.
We also had a guest presentation from Gruden. Mark and Joel went [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=sitecoreaustralia.wordpress.com&amp;blog=8610513&amp;post=127&amp;subd=sitecoreaustralia&amp;ref=&amp;feed=1&quot;/&gt;</description>
         <guid isPermaLink="false">http://sitecoreaustralia.wordpress.com/?p=127</guid>
         <pubDate>Wed, 04 Nov 2009 21:31:30 -0800</pubDate>
         <content:encoded><![CDATA[<div class='snap_preview'><br /><p>Thanks to all those whom participated in the Sitecore User Group meeting in Sydney last week. We had a great turn-out and it was good to see a mix of developers, partners and clients. We discussed the new and exciting features of Sitecore 6.2.</p>
<p>We also had a guest presentation from <strong><a rel="nofollow" title="Gruden" target="_blank" href="http://www.gruden.com/">Gruden</a></strong>. Mark and Joel went through some of the implementation phases of Sitecore and talked about some of the custom functionality that they built into the Sitecore Desktop. It was really interesting to see that they had built a File-Output application that was able to do things like “Create an ISO file out of content Items”. Once again, thanks to Mark and Joel for taking the time to create their presentation.</p>
<p>We also gave away the prize for our first User Group Module competition and the winner was Steven Lim. Steven create a module that added functionality to the Content Editor for tasks that are often used within Sitecore, but are not built in functionalities. The module is available from the <a rel="nofollow" title="Sitecore Utilities" target="_blank" href="http://trac.sitecore.net/SitecoreUtilities">Shared Source Library</a>. Steven won a Logitech Di Novo Keyboard for creating his module.</p>
<p>We also announced the prize for the next User Group Module competition which is due on the 22<sup>nd</sup> of February 2010. The winner will get <a rel="nofollow" title="Laser Keyboard" target="_blank" href="http://www.thinkgeek.com/computing/keyboards-mice/8193/">this funky laser keyboard</a>, for which practical use is yet to be determined, but on the coolness level is out of this world. I can’t wait to see what new modules come through this time.</p>
<p>Even if it recycling an old module that you have had lying around in Sitecore for a while, I recommend packaging it up and sending it through to myself. (<a rel="nofollow" target="_blank" href="mailto:tiw@sitecore.net">tiw@sitecore.net</a> )</p>
<p>Thanks again to all those whom attended and those whom have a 100% attendance rate!</p>
<p><a rel="nofollow" title="Pictures" target="_blank" href="http://img251.imageshack.us/slideshow/webplayer.php?id=usergroup1.png">Here is a link to some of the pictures from the night</a></p>
<p>&nbsp;</p> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/sitecoreaustralia.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sitecoreaustralia.wordpress.com/127/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/sitecoreaustralia.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sitecoreaustralia.wordpress.com/127/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/sitecoreaustralia.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sitecoreaustralia.wordpress.com/127/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/sitecoreaustralia.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sitecoreaustralia.wordpress.com/127/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/sitecoreaustralia.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sitecoreaustralia.wordpress.com/127/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sitecoreaustralia.wordpress.com&blog=8610513&post=127&subd=sitecoreaustralia&ref=&feed=1"/></div>]]></content:encoded>
         <media:content url="http://0.gravatar.com/avatar/ea950fb7e1594f4a2356df41589e2183?s=96&amp;amp;d=identicon&amp;amp;r=G" medium="image">
            <media:title>jerrong</media:title>
         </media:content>
         <category>Uncategorized</category>
      </item>
      <item>
         <title>Sorting Items</title>
         <link>http://learnsitecore.cmsuniverse.net/en/Editors/Articles/2009/11/SortingItems.aspx</link>
         <description>&lt;p&gt;In this article, I will describe the different possibilities for sorting items that exist in Sitecore.&lt;br /&gt;This includes both manually sorting the items and different automatic sortings.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;</description>
         <guid isPermaLink="false">http://learnsitecore.cmsuniverse.net/en/Editors/Articles/2009/11/SortingItems.aspx</guid>
         <pubDate>Wed, 04 Nov 2009 15:33:49 -0800</pubDate>
      </item>
      <item>
         <title>Sitecore tells you: “Specified cast is not valid” during startup</title>
         <link>http://sitecore.alexiasoft.nl/2009/11/03/sitecore-tells-you-specified-cast-is-not-valid-during-startup/</link>
         <description>An annoying issue which came across twice this week: Sitecore was throwing &amp;#8220;Specified cast is not valid&amp;#8221;-Exceptions: And seriously, if there&amp;#8217;s one thing I hate about .NET in general, it are exceptions. 95% of the time they are non self explaining and sometimes even nonsense. This exception would normally take me 20 minutes to solve at least. But [...]</description>
         <guid isPermaLink="false">http://sitecore.alexiasoft.nl/?p=307</guid>
         <pubDate>Tue, 03 Nov 2009 03:32:31 -0800</pubDate>
         <content:encoded><![CDATA[<p>An annoying issue which came across twice this week: Sitecore was throwing &#8220;Specified cast is not valid&#8221;-Exceptions:</p>
<p><img class="alignnone size-medium wp-image-308" title=""Specified Cast is not valid"-exception" src="http://sitecore.alexiasoft.nl/wp-content/2009/11/Specified-Cast-is-not-valid-300x194.png" alt=""Specified Cast is not valid"-exception" width="300" height="194"/></p>
<p>And seriously, if there&#8217;s one thing I hate about .NET in general, it are exceptions. 95% of the time they are non self explaining and sometimes even nonsense. This exception would normally take me 20 minutes to solve at least. But not this time. So how to solve this one?</p>
<p>Basically, this is nothing more than a Database Connection error&#8230; When I added /sitecore behind my url, I received a generic connection failure exception. I had to do some work on my connection string(or start my SQL Server). That&#8217;s all. But Alex, where did it come from? And why does the login page show something different?</p>
<p>Chicken and the egg issue: when accessing an Item we need a (SQL)-Database, but before allowing to access an Item, we need a User, a User needs a (SQL)-Database. And of course, this dependancy became stronger when we introduced Sitecore v6 with the Membership Providers.</p>
<p>So what can we learn from this? Always consult both pages: / and /sitecore. Often, there&#8217;s a different message. Sitecore is all based on context(yes, Sitecore.Context&#8230;). So when you have a problem, always try different entry points to minimize the Context. For example, Sitecore has by default 2 active websites running: &#8216;website&#8217; and &#8217;shell&#8217;. In this case, I tried to access both of them.</p>
<p>Happy coding out there <img src='http://sitecore.alexiasoft.nl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley'/> </p>]]></content:encoded>
      </item>
      <item>
         <title>Working with Lucene Search Index in Sitecore 6. Part II - How it works</title>
         <link>http://sitecoregadgets.blogspot.com/2009/11/working-with-lucene-search-index-in.html</link>
         <description>Here is second part of the Lucene search index overview for Sitecore 6. In this part we'll take a look at configuration settings and talk about how it works.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sitecore 5 has Lucene engine as well. Let's step one Sitecore version back and see how Lucene works there. In web.config file there is a section &lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;/sitecore/indexes&lt;/span&gt; that contains Lucene index configuration. When index is configured, it should be added to &lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;/sitecore/databases/database/indexes&lt;/span&gt; section.&lt;/div&gt;&lt;div&gt;&lt;div&gt;The &lt;i&gt;web&lt;/i&gt; database does not have a search index by default. Even if you add it to aforementioned section, it won't work. Why? Because index configuration relies on &lt;i&gt;HistoryEngine&lt;/i&gt; functionality. By default the &lt;i&gt;web&lt;/i&gt; database does not have it. It's easy to add it though. Just add the &lt;i&gt;HistoryEngine&lt;/i&gt; configuration section to the database.&lt;/div&gt;&lt;div&gt;You can find more configuration details from &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sdn.sitecore.net/Articles/Administration/Lucene%20Search%20Engine.aspx&quot;&gt;this article&lt;/a&gt; on &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sdn.sitecore.net/&quot;&gt;SDN&lt;/a&gt;. &lt;/div&gt;&lt;div&gt;This index has the same configuration in Sitecore 6. &lt;/div&gt;&lt;div&gt;In addition to it, Sitecore 6 has a new Lucene index functionality. Which is more reliable and has Sitecore level API on top of Lucene one. In some cases you will still have to use Lucene API. For instance to create &lt;i&gt;range&lt;/i&gt; queries.&lt;/div&gt;&lt;div&gt;Configuration settings for &lt;i&gt;new&lt;/i&gt; search index located under &lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;/sitecore/search&lt;/span&gt; section. &lt;/div&gt;&lt;div&gt;The &lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;analyzer&lt;/span&gt; section defines a Lucene analyzer that is used to analyze and index content. &lt;/div&gt;&lt;div&gt;The &lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;categories&lt;/span&gt; section is used to categories search results. It's used for content tree search introduced in Sitecore 6. The search box is located right above the content tree in content editor.&lt;/div&gt;&lt;div&gt;The &lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;configuration&lt;/span&gt; section has indexes definitions with their configurations. An index definition should be created under &lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;/sitecore/search/configuration/indexes&lt;/span&gt; node.&lt;/div&gt;&lt;div&gt;First two parameters describe the index name and folder name where it should be stored:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size:small;&quot;&gt;&amp;lt;param desc=&quot;name&quot;&amp;gt;$(id)&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size:small;&quot;&gt;&amp;lt;param desc=&quot;folder&quot;&amp;gt;my_index_folderName&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Next setting is the analyzer that should be used for the index:&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;&lt;blockquote&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size:small;&quot;&gt;&amp;lt;Analyzer ref=&quot;search/analyzer&quot; /&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Lucene StandardAnalyzer covers most of the case scenarios. But it's possible to use any other analyzer if it's needed.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Following setting defines locations for the index:&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;&lt;blockquote&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size:small;&quot;&gt;&amp;lt;locations hint=&quot;list:AddCrawler&quot;&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;It's possible to have multiple locations for one index. Moreover it's even possible to have content from different databases in the same index. Every child of the &lt;i&gt;locations&lt;/i&gt; node has its own configuration for a particular part of the content. A name of &lt;i&gt;location&lt;/i&gt; node is not predefined. You're welcome to name it the way you want. For example:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size:small;&quot;&gt;&amp;lt;locations hint=&quot;list:AddCrawler&quot;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:rgb(0, 153, 0);font-size:small;&quot;&gt; &lt;span class=&quot;Apple-style-span&quot; style=&quot;color:rgb(0, 0, 0);font-size:16px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size:small;&quot;&gt; &amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#000099;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size:small;&quot;&gt;sdn-site&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size:small;&quot;&gt; type=&quot;Sitecore.Search.Crawlers.DatabaseCrawler, Sitecore.Kernel&quot;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size:small;&quot;&gt; ...&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size:small;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:rgb(0, 153, 0);font-size:small;&quot;&gt; &lt;span class=&quot;Apple-style-span&quot; style=&quot;color:rgb(0, 0, 0);font-size:16px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size:small;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#000099;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size:small;&quot;&gt;sdn-site&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size:small;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size:small;&quot;&gt;&amp;lt;/locations&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Every location has a &lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;database&lt;/span&gt; section. It defines indexing database for the location.&lt;/div&gt;&lt;div&gt;Then &lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;root&lt;/span&gt; section. The database crawler will index content beneath this path.&lt;/div&gt;&lt;div&gt;Next sibling node is the &lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;include&lt;/span&gt; section. Here it's possible to add templates items of which should be included to the index or excluded from it.&lt;/div&gt;&lt;div&gt;Example:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size:small;&quot;&gt;&amp;lt;include hint=&quot;list:IncludeTemplate&quot;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:rgb(0, 153, 0);font-size:small;&quot;&gt; &amp;lt;sampleItem&amp;gt;{76036F5E-CBCE-46D1-AF0A-4143F9B557AA}&amp;lt;/sampleItem&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size:small;&quot;&gt;&amp;lt;/include&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size:small;&quot;&gt;&amp;lt;include hint=&quot;list:ExcludeTemplate&quot;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:rgb(0, 153, 0);font-size:small;&quot;&gt; &amp;lt;layout&amp;gt;{3A45A723-64EE-4919-9D41-02FD40FD1466}&amp;lt;/layout&amp;gt;&lt;/span&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size:small;&quot;&gt;&amp;lt;/include&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;It does not make sense to use both of these settings for the one location. Use only one of them.&lt;/div&gt;&lt;div&gt;Next location setting is &lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;tags&lt;/span&gt; section. Here you can tag indexed content and use it during the search procedure.&lt;/div&gt;&lt;div&gt;Last setting is &lt;span class=&quot;Apple-style-span&quot; style=&quot;color:#009900;&quot;&gt;boost&lt;/span&gt; section. Here you have an ability to boost indexed content among other content that belongs to other locations.&lt;/div&gt;&lt;div&gt;And last but not the least, this search index uses the same &lt;i&gt;HistoryEngine&lt;/i&gt; mechanism as old one. So, don't forget to copy configuration section from master database to a database where you want to add search index facilities to.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;How it all works?&lt;/div&gt;&lt;div&gt;When an action performed on the item, database crawler updates entries in search index for the item. So that information in index is in sync with the one in database. How does it happen if &quot;&lt;i&gt;item:saved&lt;/i&gt;&quot;, &quot;&lt;i&gt;item:deleted&lt;/i&gt;&quot;, &quot;&lt;i&gt;item:renamed&lt;/i&gt;&quot;, &quot;&lt;i&gt;item:copied&lt;/i&gt;&quot;, &quot;&lt;i&gt;item:moved&lt;/i&gt;&quot; do not have event handlers that trigger search index update? Thank to &lt;i&gt;HistoryEngine&lt;/i&gt; that was mentioned several times already.&lt;/div&gt;&lt;div&gt;It is &lt;i&gt;HistoryEngine&lt;/i&gt; that tracks any changes made to the item and fires appropriate event handler to process it.&lt;/div&gt;&lt;div&gt;&lt;i&gt;IndexingManager&lt;/i&gt; is responsible for all operations to the search index. It subscribes to &lt;i&gt;AddEntry&lt;/i&gt; event of &lt;i&gt;HistoryEngine&lt;/i&gt; and as soon as an entry added to the &lt;i&gt;History&lt;/i&gt; table, it triggers a job that updates the search index(es).&lt;/div&gt;&lt;div&gt;In web.config file there are a few settings that belong to indexing functionality.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Indexing.UpdateInterval&lt;/b&gt; - sets the interval between the IndexingManager checking its queue for pending actions. Default value is 5 minutes.&lt;br /&gt;What does it mean? If for whatever reason pending job was not executed, the IndexingManager will re-run it if it finds it in pending state after 5 minutes pass.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Indexing.UpdateJobThrottle&lt;/b&gt; - sets the minimum time to wait between individual index update jobs. Default value 1 second.&lt;br /&gt;When some operation is performed on the item, you can see this entry in Sitecore log file:&lt;br /&gt;&lt;i&gt;INFO Starting update of index for the database '&lt;span class=&quot;Apple-style-span&quot; style=&quot;text-decoration:underline;&quot;&gt;databaseName&lt;/span&gt;' ( pending).&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-style:normal;&quot;&gt;This setting sets the interval between jobs like this. So that it does not overwhelm all CPU time if you're doing massive change to the items.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Indexing.ServerSpecificProperties&lt;/b&gt; - Indicates if server specific keys should be used for property values (such as 'last updated'). It's off by default.&lt;br /&gt;This setting is designed for content delivery environments in web farms. As &lt;i&gt;web&lt;/i&gt; database is shared, there could be a situation when one server has updated its search indexes and changed &lt;i&gt;History&lt;/i&gt; table in the database. Other servers won't update their indexes because &lt;i&gt;HistoryEngine&lt;/i&gt; wouldn't indicate there was a change. This setting prevents situations like this.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Well... this is it for now. In next part we will take a look at Sitecore Lucene API and create some search queries with it.&lt;/div&gt;&lt;div&gt;Enjoy!&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5251195438749660493-2781154286092118419?l=sitecoregadgets.blogspot.com'/&gt;&lt;/div&gt;</description>
         <author>noreply@blogger.com (Ivan)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-5251195438749660493.post-2781154286092118419</guid>
         <pubDate>Mon, 02 Nov 2009 08:00:00 -0800</pubDate>
      </item>
      <item>
         <title>Creating a Top Records Filter in Sitecore OMS</title>
         <link>http://cbushnell.wordpress.com/2009/11/02/creating-a-top-records-filter-in-sitecore-oms-3/</link>
         <description>Step 5: Test the Top Filter&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=cbushnell.wordpress.com&amp;blog=9791478&amp;post=396&amp;subd=cbushnell&amp;ref=&amp;feed=1&quot;/&gt;</description>
         <guid isPermaLink="false">http://cbushnell.wordpress.com/?p=396</guid>
         <pubDate>Mon, 02 Nov 2009 05:16:39 -0800</pubDate>
         <content:encoded><![CDATA[<div class='snap_preview'><br /><h4>Step 5: Test the Top Filter</h4>
<p>View the <em>ProfileKeyFilterTop</em> report and test your new top filter in Sitecore Analytics.</p>
<p>1. In Sitecore Analytics, to refresh your reports, close and then expand the Reports node.</p>
<p>2. Click on your new report: <em>ProfileKeyFilterTop</em></p>
<p>3. Select a profile key such as <em>Semi-pro</em> using the filter created in my previous blog. All records for the chosen profile key are displayed in your report.</p>
<p><a rel="nofollow" target="_blank" href="http://cbushnell.files.wordpress.com/2009/11/filtersemipro.png"><img style="display:inline;border:0;" title="Filter-Semi-pro" src="http://cbushnell.files.wordpress.com/2009/11/filtersemipro_thumb.png?w=508&#038;h=500" border="0" alt="Filter-Semi-pro" width="508" height="500"/></a></p>
<p>4. Open the <strong>Filters Editor</strong> window again. You should see your new top filter displayed in the <strong>Filters Editor</strong> window.</p>
<p>5. Select your top records filter.</p>
<p><a rel="nofollow" target="_blank" href="http://cbushnell.files.wordpress.com/2009/11/topfilter.png"><img style="display:inline;border:0;" title="top filter" src="http://cbushnell.files.wordpress.com/2009/11/topfilter_thumb.png?w=233&#038;h=352" border="0" alt="top filter" width="233" height="352"/></a></p>
<p>6. Click <em>value</em> in the <strong>Filter description</strong> panel and enter a value such as <em>5</em>. Click <strong>OK</strong> to close the <strong>Filters Editor</strong> window. You should now only see the top 5 records returned for the <em>Semi-pro</em> profile key.</p>
<p><a rel="nofollow" target="_blank" href="http://cbushnell.files.wordpress.com/2009/11/semiprotop5.png"><img style="display:inline;border:0;" title="semi-pro top 5" src="http://cbushnell.files.wordpress.com/2009/11/semiprotop5_thumb.png?w=493&#038;h=377" border="0" alt="semi-pro top 5" width="493" height="377"/></a></p> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/cbushnell.wordpress.com/396/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cbushnell.wordpress.com/396/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/cbushnell.wordpress.com/396/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cbushnell.wordpress.com/396/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/cbushnell.wordpress.com/396/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cbushnell.wordpress.com/396/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/cbushnell.wordpress.com/396/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cbushnell.wordpress.com/396/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/cbushnell.wordpress.com/396/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cbushnell.wordpress.com/396/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cbushnell.wordpress.com&blog=9791478&post=396&subd=cbushnell&ref=&feed=1"/></div>]]></content:encoded>
         <media:content url="http://0.gravatar.com/avatar/c5c6495ef08d15440e64b4ec73673844?s=96&amp;amp;d=identicon&amp;amp;r=G" medium="image">
            <media:title>cbushnell</media:title>
         </media:content>
         <media:content url="http://cbushnell.files.wordpress.com/2009/11/filtersemipro_thumb.png" medium="image">
            <media:title>Filter-Semi-pro</media:title>
         </media:content>
         <media:content url="http://cbushnell.files.wordpress.com/2009/11/topfilter_thumb.png" medium="image">
            <media:title>top filter</media:title>
         </media:content>
         <media:content url="http://cbushnell.files.wordpress.com/2009/11/semiprotop5_thumb.png" medium="image">
            <media:title>semi-pro top 5</media:title>
         </media:content>
         <category>Sitecore OMS reports</category>
      </item>
      <item>
         <title>Creating a Top Records Filter in Sitecore OMS</title>
         <link>http://cbushnell.wordpress.com/2009/11/02/creating-a-top-records-filter-in-sitecore-oms-2/</link>
         <description>Step 4: Configure your Sitecore Filter Definition Item&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=cbushnell.wordpress.com&amp;blog=9791478&amp;post=389&amp;subd=cbushnell&amp;ref=&amp;feed=1&quot;/&gt;</description>
         <guid isPermaLink="false">http://cbushnell.wordpress.com/?p=389</guid>
         <pubDate>Mon, 02 Nov 2009 05:11:19 -0800</pubDate>
         <content:encoded><![CDATA[<div class='snap_preview'><br /><h4>Step 4: Configure your Sitecore Filter Definition Item</h4>
<p>When you have created your filter class and updated your SQL query you then configure your Sitecore filter definition item to point to your C# assembly.</p>
<p>1. In the Content Editor, Criteria folder, select your filter definition item.</p>
<p><em>/sitecore/system/Settings/Analytics/Filters/Criteria/WhereTopRecords</em></p>
<p><a rel="nofollow" target="_blank" href="http://cbushnell.files.wordpress.com/2009/11/toprecordscriteriaitem.png"><img style="display:inline;border-width:0;" title="top records criteria item" src="http://cbushnell.files.wordpress.com/2009/11/toprecordscriteriaitem_thumb.png?w=414&#038;h=193" border="0" alt="top records criteria item" width="414" height="193"/></a></p>
<p>2. In the <strong>Type</strong> field, enter the correct path to your C# class and assembly.</p>
<p>ChrisTest.sitecore_modules.Cbtest.WhereTopRecords,ChrisTest</p>
<p>namespace class name assembly</p>
<p>3. Save your changes.</p>
<p>My next post: Step 5 &#8211; <a rel="nofollow" target="_blank" href="http://cbushnell.wordpress.com/2009/11/02/creating-a-top-records-filter-in-sitecore-oms-3/">Test the Top Filter</a></p> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/cbushnell.wordpress.com/389/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cbushnell.wordpress.com/389/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/cbushnell.wordpress.com/389/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cbushnell.wordpress.com/389/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/cbushnell.wordpress.com/389/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cbushnell.wordpress.com/389/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/cbushnell.wordpress.com/389/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cbushnell.wordpress.com/389/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/cbushnell.wordpress.com/389/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cbushnell.wordpress.com/389/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cbushnell.wordpress.com&blog=9791478&post=389&subd=cbushnell&ref=&feed=1"/></div>]]></content:encoded>
         <media:content url="http://0.gravatar.com/avatar/c5c6495ef08d15440e64b4ec73673844?s=96&amp;amp;d=identicon&amp;amp;r=G" medium="image">
            <media:title>cbushnell</media:title>
         </media:content>
         <media:content url="http://cbushnell.files.wordpress.com/2009/11/toprecordscriteriaitem_thumb.png" medium="image">
            <media:title>top records criteria item</media:title>
         </media:content>
         <category>Sitecore OMS reports</category>
      </item>
      <item>
         <title>Creating a Top Records Filter in Sitecore OMS</title>
         <link>http://cbushnell.wordpress.com/2009/11/02/creating-a-top-records-filter-in-sitecore-oms/</link>
         <description>Step 3: Add a TOP Clause to your SQL Query&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=cbushnell.wordpress.com&amp;blog=9791478&amp;post=386&amp;subd=cbushnell&amp;ref=&amp;feed=1&quot;/&gt;</description>
         <guid isPermaLink="false">http://cbushnell.wordpress.com/?p=386</guid>
         <pubDate>Mon, 02 Nov 2009 04:55:11 -0800</pubDate>
         <content:encoded><![CDATA[<div class='snap_preview'><br /><h4>Step 3: Add a TOP Clause to your SQL Query</h4>
<p>To add a filter implementation to a report, you normally add a placeholder to the WHERE clause in your SQL query. However, since the TOP clause appears immediately after the SELECT clause, you need a workaround to implement a Top filter. Use Transact SQL (TSQL) to create a CASE WHEN ELSE statement and embed this into the SELECT clause of your SQL query.</p>
<p>To add a TOP clause to your SQL query.</p>
<p>1. Open your <em>ProfileKeyFilterTop</em> report in the report designer</p>
<p>2. Right click the <em>IPOwners</em> data source and click Edit</p>
<p>3. Copy the following TSQL code into your SQL query directly after the SELECT statement.</p>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:41e3f8b9-fec1-4c8b-9a99-2901561d45c0" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<pre style="background-color:#ffffff;white-space:pre-wrap;overflow:auto;"><span style="color:#0000ff;">top</span><span style="color:#000000;"> ( </span><span style="color:#ff00ff;">CASE</span><span style="color:#000000;"> </span><span style="color:#0000ff;">WHEN</span><span style="color:#000000;"> </span><span style="color:#ff0000;">'</span><span style="color:#ff0000;">{MaxRecords}</span><span style="color:#ff0000;">'</span><span style="color:#000000;"> </span><span style="color:#808080;">=</span><span style="color:#000000;"> </span><span style="color:#ff0000;">''</span><span style="color:#000000;"> </span><span style="color:#0000ff;">THEN</span><span style="color:#000000;"> </span><span style="color:#800000;font-weight:bold;">1000</span><span style="color:#000000;"> </span><span style="color:#0000ff;">ELSE</span><span style="color:#000000;"> </span><span style="color:#ff00ff;">CAST</span><span style="color:#000000;">(</span><span style="color:#ff00ff;">REPLACE</span><span style="color:#000000;">( </span><span style="color:#ff00ff;">REPLACE</span><span style="color:#000000;">( </span><span style="color:#ff0000;">'</span><span style="color:#ff0000;">{MaxRecords}</span><span style="color:#ff0000;">'</span><span style="color:#000000;">, </span><span style="color:#ff0000;">'</span><span style="color:#ff0000;">and (</span><span style="color:#ff0000;">'</span><span style="color:#000000;">, </span><span style="color:#ff0000;">''</span><span style="color:#000000;"> ), </span><span style="color:#ff0000;">'</span><span style="color:#ff0000;">)</span><span style="color:#ff0000;">'</span><span style="color:#000000;">, </span><span style="color:#ff0000;">''</span><span style="color:#000000;">) </span><span style="color:#0000ff;">as</span><span style="color:#000000;"> </span><span style="color:#0000ff;">integer</span><span style="color:#000000;"> ) </span><span style="color:#0000ff;">END</span><span style="color:#000000;"> )
</span></pre>
<p></p>
<p>Notice that the placeholder {MaxRecords} is included as part of this embedded code.</p>
<p><strong>The Workaround</strong></p>
<p>Our placeholder {MaxRecords} contains the three parameters added by the <em>AddWhereClause</em> method call (described in step 2). Our workaround allows us to insert this clause into the SELECT statement at the top of the SQL query even though this is not actually part of the WHERE clause. However, this will only work if we remove some of the unnecessary parameters and characters generated by the <em>AddWhereClause</em> method, because the AddWhereClause method generates text that looks something like:</p>
<p>and (10)</p>
<p>where “10” is the user entered value, but the TOP clause just requires:</p>
<p>10</p>
<p>The code in the parentheses following the TOP statement contains a TSQL CASE WHEN statement. In Transact SQL this can be used instead of the classic IF THEN statement. We use it here to add one of two alternative numerical values to the TOP clause:</p>
<p>· A default value of 1000 (stated in the THEN clause)</p>
<p>OR</p>
<p>· A user entered value (stated in the ELSE clause)</p>
<p>If an end-user fails to enter a value, then the first 1000 records are displayed by default. The ELSE part of the code takes the text generated by the <em>AddWhereClause</em> method, strips out unwanted code generated by the <em>AddWhereClause</em> method using REPLACE, and converts the remaining user entered value to an integer using CAST.</p>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:8d2e1015-b188-4b61-9558-c2201052ec23" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<pre style="background-color:#ffffff;white-space:pre-wrap;overflow:auto;"><span style="color:#ff00ff;">CAST</span><span style="color:#000000;">(</span><span style="color:#ff00ff;">REPLACE</span><span style="color:#000000;">( </span><span style="color:#ff00ff;">REPLACE</span><span style="color:#000000;">( </span><span style="color:#ff0000;">'</span><span style="color:#ff0000;">{MaxRecords}</span><span style="color:#ff0000;">'</span><span style="color:#000000;">, </span><span style="color:#ff0000;">'</span><span style="color:#ff0000;">and (</span><span style="color:#ff0000;">'</span><span style="color:#000000;">, </span><span style="color:#ff0000;">''</span><span style="color:#000000;"> ), </span><span style="color:#ff0000;">'</span><span style="color:#ff0000;">)</span><span style="color:#ff0000;">'</span><span style="color:#000000;">, </span><span style="color:#ff0000;">''</span><span style="color:#000000;">) </span><span style="color:#0000ff;">as</span><span style="color:#000000;"> </span><span style="color:#0000ff;">integer</span><span style="color:#000000;"> )</span></pre>
<p></p>
<p>So if a user enters a value such as “10” then <em>TOP 10</em> is inserted into the SELECT part of the SQL query.</p>
<p>4. Next, create a report designer variable for your placeholder {MaxRecords}. To do this, in the <strong>Dictionary</strong> panel, click <em>New Item</em>, <em>New Variable</em>.</p>
<p>5. In the <strong>Name</strong> field enter <em>MaxRecords </em>and enter the same value in the <strong>Alias </strong>field. Keep the Type as string and click OK.</p>
<p><a rel="nofollow" target="_blank" href="http://cbushnell.files.wordpress.com/2009/11/maxrecordsvariable.png"><img style="display:inline;border:0;" title="MaxRecords variable" src="http://cbushnell.files.wordpress.com/2009/11/maxrecordsvariable_thumb.png?w=244&#038;h=210" border="0" alt="MaxRecords variable" width="244" height="210"/></a></p>
<p>Make sure your full SQL query matches the code below:</p>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:4705e4f5-bf1a-4a82-9838-9b71b63ea663" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<pre style="background-color:#ffffff;white-space:pre-wrap;overflow:auto;"><span style="color:#0000ff;">SELECT</span><span style="color:#000000;"> </span><span style="color:#0000ff;">top</span><span style="color:#000000;"> ( </span><span style="color:#ff00ff;">CASE</span><span style="color:#000000;"> </span><span style="color:#0000ff;">WHEN</span><span style="color:#000000;"> </span><span style="color:#ff0000;">'</span><span style="color:#ff0000;">{MaxRecords}</span><span style="color:#ff0000;">'</span><span style="color:#000000;"> </span><span style="color:#808080;">=</span><span style="color:#000000;"> </span><span style="color:#ff0000;">''</span><span style="color:#000000;"> </span><span style="color:#0000ff;">THEN</span><span style="color:#000000;"> </span><span style="color:#800000;font-weight:bold;">1000</span><span style="color:#000000;"> </span><span style="color:#0000ff;">ELSE</span><span style="color:#000000;"> </span><span style="color:#ff00ff;">CAST</span><span style="color:#000000;">(</span><span style="color:#ff00ff;">REPLACE</span><span style="color:#000000;">( </span><span style="color:#ff00ff;">REPLACE</span><span style="color:#000000;">( </span><span style="color:#ff0000;">'</span><span style="color:#ff0000;">{MaxRecords}</span><span style="color:#ff0000;">'</span><span style="color:#000000;">, </span><span style="color:#ff0000;">'</span><span style="color:#ff0000;">and (</span><span style="color:#ff0000;">'</span><span style="color:#000000;">, </span><span style="color:#ff0000;">''</span><span style="color:#000000;"> ), </span><span style="color:#ff0000;">'</span><span style="color:#ff0000;">)</span><span style="color:#ff0000;">'</span><span style="color:#000000;">, </span><span style="color:#ff0000;">''</span><span style="color:#000000;">) </span><span style="color:#0000ff;">as</span><span style="color:#000000;"> </span><span style="color:#0000ff;">integer</span><span style="color:#000000;"> ) </span><span style="color:#0000ff;">END</span><span style="color:#000000;"> )
</span><span style="color:#ff00ff;">Count</span><span style="color:#000000;">(</span><span style="color:#0000ff;">DISTINCT</span><span style="color:#000000;"> IpOwner.IPOwnerId) </span><span style="color:#0000ff;">AS</span><span style="color:#000000;"> IPOwnerIdObject, IpOwner.Name, IpOwner.Country,
</span><span style="color:#ff00ff;">Count</span><span style="color:#000000;">(</span><span style="color:#0000ff;">DISTINCT</span><span style="color:#000000;"> Session.GlobalSessionId) </span><span style="color:#0000ff;">AS</span><span style="color:#000000;"> VisitorCount,
</span><span style="color:#ff00ff;">Count</span><span style="color:#000000;">(</span><span style="color:#0000ff;">DISTINCT</span><span style="color:#000000;"> Session.SessionId) </span><span style="color:#0000ff;">AS</span><span style="color:#000000;"> VisitCount,
</span><span style="color:#ff00ff;">Sum</span><span style="color:#000000;">(</span><span style="color:#0000ff;">DISTINCT</span><span style="color:#000000;"> ProfileKey.Value) </span><span style="color:#0000ff;">AS</span><span style="color:#000000;"> Score,
ProfileKeyDefinition.Name </span><span style="color:#0000ff;">AS</span><span style="color:#000000;"> Prof </span><span style="color:#0000ff;">FROM</span><span style="color:#000000;"> Session
</span><span style="color:#0000ff;">INNER</span><span style="color:#000000;"> </span><span style="color:#808080;">JOIN</span><span style="color:#000000;"> Profile </span><span style="color:#0000ff;">ON</span><span style="color:#000000;"> Session.SessionId </span><span style="color:#808080;">=</span><span style="color:#000000;"> Profile.SessionId
</span><span style="color:#0000ff;">INNER</span><span style="color:#000000;"> </span><span style="color:#808080;">JOIN</span><span style="color:#000000;"> GlobalSession </span><span style="color:#0000ff;">ON</span><span style="color:#000000;"> GlobalSession.GlobalSessionId </span><span style="color:#808080;">=</span><span style="color:#000000;"> Session.GlobalSessionId
</span><span style="color:#0000ff;">INNER</span><span style="color:#000000;"> </span><span style="color:#808080;">JOIN</span><span style="color:#000000;"> Ip </span><span style="color:#0000ff;">ON</span><span style="color:#000000;"> Ip.IpId </span><span style="color:#808080;">=</span><span style="color:#000000;"> Session.IpId
</span><span style="color:#0000ff;">INNER</span><span style="color:#000000;"> </span><span style="color:#808080;">JOIN</span><span style="color:#000000;"> IpOwner </span><span style="color:#0000ff;">ON</span><span style="color:#000000;"> IpOwner.IpOwnerId </span><span style="color:#808080;">=</span><span style="color:#000000;"> Ip.IpOwnerId
</span><span style="color:#0000ff;">INNER</span><span style="color:#000000;"> </span><span style="color:#808080;">JOIN</span><span style="color:#000000;"> Browser </span><span style="color:#0000ff;">ON</span><span style="color:#000000;"> Browser.BrowserId </span><span style="color:#808080;">=</span><span style="color:#000000;"> Session.BrowserId
</span><span style="color:#0000ff;">INNER</span><span style="color:#000000;"> </span><span style="color:#808080;">JOIN</span><span style="color:#000000;"> ProfileKey </span><span style="color:#0000ff;">ON</span><span style="color:#000000;"> ProfileKey.ProfileId </span><span style="color:#808080;">=</span><span style="color:#000000;"> Profile.ProfileId
</span><span style="color:#0000ff;">INNER</span><span style="color:#000000;"> </span><span style="color:#808080;">JOIN</span><span style="color:#000000;"> ProfileKeyDefinition </span><span style="color:#0000ff;">ON</span><span style="color:#000000;"> ProfileKeyDefinition.ProfileKeyDefinitionId </span><span style="color:#808080;">=</span><span style="color:#000000;"> ProfileKey.ProfileKeyDefinitionId </span><span style="color:#0000ff;">WHERE</span><span style="color:#000000;">
Session.</span><span style="color:#0000ff;">Timestamp</span><span style="color:#000000;"> </span><span style="color:#808080;">&gt;=</span><span style="color:#000000;"> </span><span style="color:#008000;">@StartDate</span><span style="color:#000000;"> </span><span style="color:#808080;">and</span><span style="color:#000000;">
Session.</span><span style="color:#0000ff;">Timestamp</span><span style="color:#000000;"> </span><span style="color:#808080;">&lt;=</span><span style="color:#000000;"> </span><span style="color:#008000;">@EndDate</span><span style="color:#000000;">
{MyProfileKey} </span><span style="color:#0000ff;">GROUP</span><span style="color:#000000;"> </span><span style="color:#0000ff;">BY</span><span style="color:#000000;"> IpOwner.Name, IpOwner.Country, ProfileKeyDefinition.Name </span><span style="color:#0000ff;">ORDER</span><span style="color:#000000;"> </span><span style="color:#0000ff;">BY</span><span style="color:#000000;"> Prof, Score </span><span style="color:#0000ff;">DESC</span><span style="color:#000000;">, IpOwner.Name
</span></pre>
<p></p>
<p><strong>Note:</strong> This query also contains the placeholder for the profile key filter <em>MyProfileKey </em>that I created in my previous blog.</p>
</div>
<p>6. Click <strong>OK</strong> and save your changes in the report designer.</p>
<p>My next post: Step 4 &#8211; <a rel="nofollow" target="_blank" href="http://cbushnell.wordpress.com/2009/11/02/creating-a-top-records-filter-in-sitecore-oms-2/">Configure your Sitecore Filter Definition Item</a></p>
</div>
</div> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/cbushnell.wordpress.com/386/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cbushnell.wordpress.com/386/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/cbushnell.wordpress.com/386/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cbushnell.wordpress.com/386/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/cbushnell.wordpress.com/386/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cbushnell.wordpress.com/386/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/cbushnell.wordpress.com/386/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cbushnell.wordpress.com/386/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/cbushnell.wordpress.com/386/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cbushnell.wordpress.com/386/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cbushnell.wordpress.com&blog=9791478&post=386&subd=cbushnell&ref=&feed=1"/></div>]]></content:encoded>
         <media:content url="http://0.gravatar.com/avatar/c5c6495ef08d15440e64b4ec73673844?s=96&amp;amp;d=identicon&amp;amp;r=G" medium="image">
            <media:title>cbushnell</media:title>
         </media:content>
         <media:content url="http://cbushnell.files.wordpress.com/2009/11/maxrecordsvariable_thumb.png" medium="image">
            <media:title>MaxRecords variable</media:title>
         </media:content>
         <category>Sitecore OMS reports</category>
      </item>
      <item>
         <title>Creating a Top Records Filter in Sitecore OMS</title>
         <link>http://cbushnell.wordpress.com/2009/11/02/creating-a-top-records-report-filter-3/</link>
         <description>Step 2: Create your Filter Implementation in Visual Studio&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=cbushnell.wordpress.com&amp;blog=9791478&amp;post=383&amp;subd=cbushnell&amp;ref=&amp;feed=1&quot;/&gt;</description>
         <guid isPermaLink="false">http://cbushnell.wordpress.com/?p=383</guid>
         <pubDate>Mon, 02 Nov 2009 04:45:33 -0800</pubDate>
         <content:encoded><![CDATA[<div class='snap_preview'><br /><h4>Step 2: Create your Filter Implementation in Visual Studio</h4>
<p>To create a new report filter, you must use Visual Studio and create a new C# class. Alternatively, re-use an existing filter, such as <em>WhereSpecificProfileKey</em> from my last blog. If you do this, re-name and edit the existing C# class file.</p>
<p>· Make sure that your class includes the following references and inherits from the <em>Operator Filter Base </em>class:</p>
<p>· Sitecore.Kernel</p>
<p>· Sitecore.Analytics</p>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:0f54c975-7c01-412d-bca0-0408909eabb0" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<pre style="background-color:#ffffff;white-space:pre-wrap;overflow:auto;"><span style="color:#0000ff;">public</span><span style="color:#000000;"> </span><span style="color:#0000ff;">class</span><span style="color:#000000;"> WhereTopRecords : OperatorFilterBase</span></pre>
<p></p>
<p>· Your filter class, uses the following two methods:</p>
<p><em>a. </em><em>ApplyFilter</em></p>
<p><em>b. </em><em>IsApplicable</em></p>
<p> Use these two methods for all filter implementations.</p>
<h5>C# code used in this filter</h5>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:2222f8e3-20aa-419f-98d1-e42378703225" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<pre style="background-color:#ffffff;white-space:pre-wrap;overflow:auto;"><span style="color:#0000ff;">using</span><span style="color:#000000;"> System;
</span><span style="color:#0000ff;">using</span><span style="color:#000000;"> System.Data;
</span><span style="color:#0000ff;">using</span><span style="color:#000000;"> System.Configuration;
</span><span style="color:#0000ff;">using</span><span style="color:#000000;"> System.Web;
</span><span style="color:#0000ff;">using</span><span style="color:#000000;"> System.Web.Security;
</span><span style="color:#0000ff;">using</span><span style="color:#000000;"> System.Web.UI;
</span><span style="color:#0000ff;">using</span><span style="color:#000000;"> System.Web.UI.WebControls;
</span><span style="color:#0000ff;">using</span><span style="color:#000000;"> System.Web.UI.WebControls.WebParts;
</span><span style="color:#0000ff;">using</span><span style="color:#000000;"> System.Web.UI.HtmlControls;
</span><span style="color:#0000ff;">using</span><span style="color:#000000;"> Sitecore.Analytics.Data.Filters.Filters;
</span><span style="color:#0000ff;">using</span><span style="color:#000000;"> Sitecore.Analytics.Data.Filters;
</span><span style="color:#0000ff;">using</span><span style="color:#000000;"> Sitecore.Diagnostics; </span><span style="color:#0000ff;">namespace</span><span style="color:#000000;"> </span><span style="color:#000000;">&lt;</span><span style="color:#000000;">your project name</span><span style="color:#000000;">&gt;</span><span style="color:#000000;">.sitecore_modules.</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">your project folder</span><span style="color:#000000;">&gt;</span><span style="color:#000000;">
{ </span><span style="color:#0000ff;">public</span><span style="color:#000000;"> </span><span style="color:#0000ff;">class</span><span style="color:#000000;"> WhereTopRecords : OperatorFilterBase { </span><span style="color:#0000ff;">public</span><span style="color:#000000;"> </span><span style="color:#0000ff;">string</span><span style="color:#000000;"> value; </span><span style="color:#008000;">//</span><span style="color:#008000;"> Methods</span><span style="color:#008000;">
</span><span style="color:#000000;"> </span><span style="color:#0000ff;">public</span><span style="color:#000000;"> </span><span style="color:#0000ff;">override</span><span style="color:#000000;"> </span><span style="color:#0000ff;">void</span><span style="color:#000000;"> ApplyFilter(SqlCommand sqlCommand) { Assert.ArgumentNotNull(sqlCommand, </span><span style="color:#800000;">"</span><span style="color:#800000;">sqlCommand</span><span style="color:#800000;">"</span><span style="color:#000000;">); </span><span style="color:#0000ff;">string</span><span style="color:#000000;"> @operator </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#0000ff;">base</span><span style="color:#000000;">.GetOperator(); sqlCommand.AddWhereClause(</span><span style="color:#800000;">"</span><span style="color:#800000;">MaxRecords</span><span style="color:#800000;">"</span><span style="color:#000000;">, Value, </span><span style="color:#0000ff;">false</span><span style="color:#000000;">); } </span><span style="color:#0000ff;">public</span><span style="color:#000000;"> </span><span style="color:#0000ff;">override</span><span style="color:#000000;"> </span><span style="color:#0000ff;">bool</span><span style="color:#000000;"> IsApplicable(SqlCommand sqlCommand) { Assert.ArgumentNotNull(sqlCommand, </span><span style="color:#800000;">"</span><span style="color:#800000;">sqlCommand</span><span style="color:#800000;">"</span><span style="color:#000000;">); </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> (sqlCommand.HasPlaceholder(</span><span style="color:#800000;">"</span><span style="color:#800000;">MaxRecords</span><span style="color:#800000;">"</span><span style="color:#000000;">)); } </span><span style="color:#008000;">//</span><span style="color:#008000;">Properties </span><span style="color:#008000;">
</span><span style="color:#000000;"> </span><span style="color:#0000ff;">public</span><span style="color:#000000;"> </span><span style="color:#0000ff;">string</span><span style="color:#000000;"> Value { </span><span style="color:#0000ff;">get</span><span style="color:#000000;"> { </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> (</span><span style="color:#0000ff;">this</span><span style="color:#000000;">.value </span><span style="color:#000000;">??</span><span style="color:#000000;"> </span><span style="color:#800000;">"</span><span style="color:#800000;">1000</span><span style="color:#800000;">"</span><span style="color:#000000;">); } </span><span style="color:#0000ff;">set</span><span style="color:#000000;"> { Assert.ArgumentNotNull(value, </span><span style="color:#800000;">"</span><span style="color:#800000;">value</span><span style="color:#800000;">"</span><span style="color:#000000;">); </span><span style="color:#0000ff;">int</span><span style="color:#000000;"> defaultValue </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">1000</span><span style="color:#000000;">; Int32.TryParse(value, </span><span style="color:#0000ff;">out</span><span style="color:#000000;"> defaultValue); </span><span style="color:#0000ff;">this</span><span style="color:#000000;">.value </span><span style="color:#000000;">=</span><span style="color:#000000;"> defaultValue.ToString(); } } }
}</span></pre>
<p></p>
<p>You can either copy and paste this code into your C# class file or use the <em>ApplyFilter</em> and <em>IsApplicable</em> methods to construct your own code solution.</p>
<h5>Explaining the code:</h5>
<p>In my previous blog post, I explained the standard code to include in a filter implementation. In this post, I will only include the sections that are important to this filter.</p>
<h5>Variables</h5>
<p>Declare the following variable. This variable is used in the Properties section of your class and holds a value for the TOP clause entered by an end-user.</p>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:d81455f7-9c5b-49ee-9c16-59b5483ad304" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<pre style="background-color:#ffffff;white-space:pre-wrap;overflow:auto;"><span style="color:#008000;">//</span><span style="color:#008000;"> Fields</span><span style="color:#008000;">
</span><span style="color:#000000;"> </span><span style="color:#0000ff;">public</span><span style="color:#000000;"> </span><span style="color:#0000ff;">string</span><span style="color:#000000;"> value;</span></pre>
<p></p>
<h5>Methods</h5>
<p><strong>ApplyFilter</strong></p>
<p>This method inserts your filter into the WHERE clause of your SQL query. It also passes parameters, such as a value for the TOP clause to the report engine.</p>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:04ff65cd-838e-4eed-8d3a-5e99da926901" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<pre style="background-color:#ffffff;white-space:pre-wrap;overflow:auto;"><span style="color:#008000;">//</span><span style="color:#008000;"> Methods</span><span style="color:#008000;">
</span><span style="color:#0000ff;">public</span><span style="color:#000000;"> </span><span style="color:#0000ff;">override</span><span style="color:#000000;"> </span><span style="color:#0000ff;">void</span><span style="color:#000000;"> ApplyFilter(SqlCommand sqlCommand) { Assert.ArgumentNotNull(sqlCommand, </span><span style="color:#800000;">"</span><span style="color:#800000;">sqlCommand</span><span style="color:#800000;">"</span><span style="color:#000000;">); </span><span style="color:#0000ff;">string</span><span style="color:#000000;"> @operator </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#0000ff;">base</span><span style="color:#000000;">.GetOperator(); sqlCommand.AddWhereClause(</span><span style="color:#800000;">"</span><span style="color:#800000;">Top</span><span style="color:#800000;">"</span><span style="color:#000000;">, Value, </span><span style="color:#0000ff;">false</span><span style="color:#000000;">); }
</span></pre>
<p></p>
</div>
<p>Edit the <em>AddWhereClause</em> parameters:</p>
<p>(&lt;Placeholder name&gt;, &lt;where clause&gt;, &lt;isExceptCondition&gt;)</p>
<p>Use the following syntax:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="213" valign="top"><strong>Parameter</strong></td>
<td width="213" valign="top"><strong>Data type</strong></td>
<td width="213" valign="top"><strong>Value</strong></td>
</tr>
<tr>
<td width="213" valign="top">Placeholder name</td>
<td width="213" valign="top">string</td>
<td width="213" valign="top">MaxRecords – Appears in the SQL query as {MaxRecords}.Use MaxRecords to avoid confusion with SQL TOP.</td>
</tr>
<tr>
<td width="213" valign="top">Where clause</td>
<td width="213" valign="top">string</td>
<td width="213" valign="top">Value –This is a variable containing a top value entered by an end-user.</td>
</tr>
<tr>
<td width="213" valign="top">isExceptCondition</td>
<td width="213" valign="top">boolean</td>
<td width="213" valign="top">False – this determines what should be displayed if there is an error.</td>
</tr>
</tbody>
</table>
<p><strong>IsApplicable</strong></p>
<p>This method determines where to insert your filter using a placeholder. The placeholder must be inserted into the WHERE clause of your SQL query using the following syntax:</p>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:8799f3d6-cff9-4506-b9cc-074f86f934a1" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<pre style="background-color:#ffffff;white-space:pre-wrap;overflow:auto;"><span style="color:#000000;">{placeholder}</span></pre>
<p></p>
<p>Normally a SQL TOP clause can only be added to the SELECT part of a SQL query. To make it possible to insert it in the right place, you need to use Transact SQL to create a workaround.</p>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:4451d4cb-bed0-4bd0-8ec3-3d92034e1381" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<pre style="background-color:#ffffff;white-space:pre-wrap;overflow:auto;"><span style="color:#0000ff;">public</span><span style="color:#000000;"> </span><span style="color:#0000ff;">override</span><span style="color:#000000;"> </span><span style="color:#0000ff;">bool</span><span style="color:#000000;"> IsApplicable(SqlCommand sqlCommand) { Assert.ArgumentNotNull(sqlCommand, </span><span style="color:#800000;">"</span><span style="color:#800000;">sqlCommand</span><span style="color:#800000;">"</span><span style="color:#000000;">); </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> (sqlCommand.HasPlaceholder(</span><span style="color:#800000;">"</span><span style="color:#800000;">MaxRecords</span><span style="color:#800000;">"</span><span style="color:#000000;">)); }</span></pre>
<p></p>
<p>You can either use the placeholder name I have used {MaxRecords} or replace this with a placeholder name of your own. Both methods must include the same placeholder name.</p>
<h5>Properties</h5>
<p>Create the following properties.</p>
<p>Use the <em>get</em> and <em>set </em>properties to process user input. If a user enters a value, such as <em>10</em> the filter returns the top 10 records. If the value is left empty then the top 1000 records are returned by default.</p>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:68569ced-85cd-45e9-a21f-f21e7e346a72" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<pre style="background-color:#ffffff;white-space:pre-wrap;overflow:auto;"><span style="color:#008000;">//</span><span style="color:#008000;">Properties </span><span style="color:#008000;">
</span><span style="color:#000000;"> </span><span style="color:#0000ff;">public</span><span style="color:#000000;"> </span><span style="color:#0000ff;">string</span><span style="color:#000000;"> Value { </span><span style="color:#0000ff;">get</span><span style="color:#000000;"> { </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> (</span><span style="color:#0000ff;">this</span><span style="color:#000000;">.value </span><span style="color:#000000;">??</span><span style="color:#000000;"> </span><span style="color:#800000;">"</span><span style="color:#800000;">1000</span><span style="color:#800000;">"</span><span style="color:#000000;">); } </span><span style="color:#0000ff;">set</span><span style="color:#000000;"> { Assert.ArgumentNotNull(value, </span><span style="color:#800000;">"</span><span style="color:#800000;">value</span><span style="color:#800000;">"</span><span style="color:#000000;">); </span><span style="color:#0000ff;">int</span><span style="color:#000000;"> defaultValue </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">1000</span><span style="color:#000000;">; Int32.TryParse(value, </span><span style="color:#0000ff;">out</span><span style="color:#000000;"> defaultValue); </span><span style="color:#0000ff;">this</span><span style="color:#000000;">.value </span><span style="color:#000000;">=</span><span style="color:#000000;"> defaultValue.ToString(); } }</span></pre>
<p></p>
</div>
<p>Compile your code and ensure that it is added to your Sitecore bin folder.</p>
<p><em>C:&#92;Inetpub&#92;wwwroot&#92;&lt;site name&gt;&#92;WebSite&#92;bin</em></p>
<p><em> </em></p>
<p>My next post: Step 3 &#8211; <a rel="nofollow" target="_blank" href="http://cbushnell.wordpress.com/2009/11/02/creating-a-top-records-filter-in-sitecore-oms/">Add a TOP Clause to your SQL Query</a></p>
</div>
</div>
</div>
</div>
</div> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/cbushnell.wordpress.com/383/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cbushnell.wordpress.com/383/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/cbushnell.wordpress.com/383/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cbushnell.wordpress.com/383/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/cbushnell.wordpress.com/383/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cbushnell.wordpress.com/383/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/cbushnell.wordpress.com/383/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cbushnell.wordpress.com/383/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/cbushnell.wordpress.com/383/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cbushnell.wordpress.com/383/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cbushnell.wordpress.com&blog=9791478&post=383&subd=cbushnell&ref=&feed=1"/></div>]]></content:encoded>
         <media:content url="http://0.gravatar.com/avatar/c5c6495ef08d15440e64b4ec73673844?s=96&amp;amp;d=identicon&amp;amp;r=G" medium="image">
            <media:title>cbushnell</media:title>
         </media:content>
         <category>Sitecore OMS reports</category>
      </item>
      <item>
         <title>Creating a Top Records Filter in Sitecore OMS</title>
         <link>http://cbushnell.wordpress.com/2009/11/02/creating-a-top-records-report-filter-2/</link>
         <description>Step 1: Create a Filter Definition Item&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=cbushnell.wordpress.com&amp;blog=9791478&amp;post=382&amp;subd=cbushnell&amp;ref=&amp;feed=1&quot;/&gt;</description>
         <guid isPermaLink="false">http://cbushnell.wordpress.com/?p=382</guid>
         <pubDate>Mon, 02 Nov 2009 02:44:16 -0800</pubDate>
         <content:encoded><![CDATA[<div class='snap_preview'><br /><h4>Step 1: Create a Filter Definition Item</h4>
<p>A Sitecore report filter consists of a filter definition item, stored in the filter criteria folder and a C# class containing the filter implementation.</p>
<p>To create a filter definition item:</p>
<p>1. Open the Content Editor and in the content tree navigate to the following location.</p>
<p><em>/sitecore/system/Settings/Analytics/Filters/Criteria</em></p>
<p>2. In the ribbon, click <em>Insert from Template</em>. Select the filter template: <em>/System/Analytics/Filter</em></p>
<p><a rel="nofollow" target="_blank" href="http://cbushnell.files.wordpress.com/2009/11/filtertemplate.png"><img style="display:inline;border:0;" title="filter template" src="http://cbushnell.files.wordpress.com/2009/11/filtertemplate_thumb.png?w=412&#038;h=424" border="0" alt="filter template" width="412" height="424"/></a></p>
<p>3. Name your filter <em>WhereTopRecords</em>.</p>
<p>4. In the <strong>Header</strong> field, enter:</p>
<p><em>where top records returned</em></p>
<p>5. In the <strong>Text </strong>field, enter:<em> </em></p>
<p><em>where top records returned is equal to [value,,,value]</em></p>
<p><em> </em>6. The <strong>Type</strong> field will contain a reference to your Visual Studio filter implementation. Leave this field blank for the moment.</p>
<p><a rel="nofollow" target="_blank" href="http://cbushnell.files.wordpress.com/2009/11/topfilterdefinitionitem.png"><img style="display:inline;border:0;" title="top filter definition item" src="http://cbushnell.files.wordpress.com/2009/11/topfilterdefinitionitem_thumb.png?w=432&#038;h=245" border="0" alt="top filter definition item" width="432" height="245"/></a></p>
<p>7. Save your changes.</p>
<p>My next post: Step 2 &#8211; <a rel="nofollow" target="_blank" href="http://cbushnell.wordpress.com/2009/11/02/creating-a-top-records-report-filter-3/">Create your Filter Implementation in Visual Studio</a></p> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/cbushnell.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cbushnell.wordpress.com/382/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/cbushnell.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cbushnell.wordpress.com/382/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/cbushnell.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cbushnell.wordpress.com/382/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/cbushnell.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cbushnell.wordpress.com/382/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/cbushnell.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cbushnell.wordpress.com/382/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cbushnell.wordpress.com&blog=9791478&post=382&subd=cbushnell&ref=&feed=1"/></div>]]></content:encoded>
         <media:content url="http://0.gravatar.com/avatar/c5c6495ef08d15440e64b4ec73673844?s=96&amp;amp;d=identicon&amp;amp;r=G" medium="image">
            <media:title>cbushnell</media:title>
         </media:content>
         <media:content url="http://cbushnell.files.wordpress.com/2009/11/filtertemplate_thumb.png" medium="image">
            <media:title>filter template</media:title>
         </media:content>
         <media:content url="http://cbushnell.files.wordpress.com/2009/11/topfilterdefinitionitem_thumb.png" medium="image">
            <media:title>top filter definition item</media:title>
         </media:content>
         <category>Sitecore OMS reports</category>
      </item>
      <item>
         <title>Creating a Top Records Filter in Sitecore OMS</title>
         <link>http://cbushnell.wordpress.com/2009/11/02/creating-a-top-records-report-filter/</link>
         <description>Create a report filter that enables you to limit the records displayed in a report.&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=cbushnell.wordpress.com&amp;blog=9791478&amp;post=377&amp;subd=cbushnell&amp;ref=&amp;feed=1&quot;/&gt;</description>
         <guid isPermaLink="false">http://cbushnell.wordpress.com/?p=377</guid>
         <pubDate>Mon, 02 Nov 2009 02:36:15 -0800</pubDate>
         <content:encoded><![CDATA[<div class='snap_preview'><br /><h4>Introduction</h4>
<p>Welcome to my third Sitecore blog on creating OMS reports.</p>
<p>In this post, I will create a “top” filter that limits the records displayed in a report. To do this you would normally hard code a SQL TOP clause into your SQL query but in this blog I will demonstrate how you can achieve the same result by creating a filter.</p>
<p>A “top” filter could allow an end-user to enter any numerical value of their own, such as top 10 or top 100. This would make it easier for a marketer to see at a glance which leads are the most important to follow up and is better for performance than displaying every record in the database.</p>
<p><a rel="nofollow" target="_blank" href="http://cbushnell.files.wordpress.com/2009/11/topfilterfinished.png"><img style="display:inline;border:0;" title="top filter finished" src="http://cbushnell.files.wordpress.com/2009/11/topfilterfinished_thumb.png?w=455&#038;h=317" border="0" alt="top filter finished" width="455" height="317"/></a> </p>
<p>We realized that this would be something “nice to have” in the product and the solution presented here is one way of achieving this. However, it is not a typical approach. For example, we don’t recommend the use of TSQL in your SQL queries as this can cause problems when migrating from a SQL Server to an Oracle database. This blog merely demonstrates some of the possibilities available to developers when creating Sitecore OMS reports. As a report analyst, if you have enough in-depth knowledge of the SQL query language and some programming experience, you can create almost any filter or report you need. The only limitations are the contents of your database tables and your own imagination!</p>
<h4>Prerequisites</h4>
<p>When you create a new filter, you place the logic behind the filter in a C# class file. Therefore to create new filters it is necessary to have some knowledge of C# and Visual Studio.</p>
<p>You also need to install the following:</p>
<ul>· Sitecore OMS</ul>
<ul>· Stimulsoft Report Designer (Stimulsoft Reports.Net 2009.2)</ul>
<ul>· Visual Studio 2005 or 2008</ul>
<p><strong>Optional step:</strong> You can add a filter to any existing report but in this blog I will duplicate the <em>ProfileKeyFilter</em> report I created in my previous blog and rename it <em>ProfileKeyFilterTop</em>. This is an optional step which makes it easier to test your filter without affecting you other existing reports. It also means that you are working with the same data sources and SQL query.</p>
<h4>Creating a Top Filter</h4>
<p>To create a new filter, you need to complete the following steps:</p>
<ul>· Create a Filter Definition Item</ul>
<ul>· Create your Visual Studio Filter Implementation</ul>
<ul>· Add a Top Clause to your SQL Query· Configure your Sitecore Definition Item</ul>
<ul>· Test your Top Filter</ul>
<ul>My next post: Step 1 &#8211; <a rel="nofollow" target="_blank" href="http://cbushnell.wordpress.com/2009/11/02/creating-a-top-records-report-filter-2/">Create a Filter Definition Item</a></ul> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/cbushnell.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cbushnell.wordpress.com/377/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/cbushnell.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cbushnell.wordpress.com/377/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/cbushnell.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cbushnell.wordpress.com/377/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/cbushnell.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cbushnell.wordpress.com/377/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/cbushnell.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cbushnell.wordpress.com/377/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cbushnell.wordpress.com&blog=9791478&post=377&subd=cbushnell&ref=&feed=1"/></div>]]></content:encoded>
         <media:content url="http://0.gravatar.com/avatar/c5c6495ef08d15440e64b4ec73673844?s=96&amp;amp;d=identicon&amp;amp;r=G" medium="image">
            <media:title>cbushnell</media:title>
         </media:content>
         <media:content url="http://cbushnell.files.wordpress.com/2009/11/topfilterfinished_thumb.png" medium="image">
            <media:title>top filter finished</media:title>
         </media:content>
         <category>Sitecore OMS reports</category>
      </item>
      <item>
         <title>WebDAV in Sitecore 6.2</title>
         <link>http://philheltewig.spaces.live.com/Blog/cns!E339C3F87E43ABC8!378.entry</link>
         <description>&lt;p&gt;Sitecore recently released Sitecore CMS v6.2, which came with an amazing list of new features (read about them on the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.sitecore.net/News/Press-releases/2009/Sitecore-V62.aspx&quot;&gt;sitecore.net&lt;/a&gt;):&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Native RSS Support &lt;li&gt;Outlook based workflow integration &lt;li&gt;Integration of Microsoft Word directly into the Sitecore backend &lt;li&gt;Webforms for Marketers 2 with full OMS integration &lt;li&gt;WebDAV integration&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Whilst all of these features are really useful, the by far coolest feature in my opinion is the WebDAV integration. For most people WebDAV equals to “a newer version of FTP”, which may be somewhat true, but the integration of WebDAV into Sitecore means much more than just extra-convenient file upload. It means full integration of Sitecore Media Library content with your local file system, including file transfer and – more importantly – the ability to edit files in your local applications. Imagine editing images not in the Sitecore Image Editor, but in Photoshop or not having to download Word Documents, but editing them directly inside the Media Library and saving them back to the server, with full versioning and workflow support. Simply awesome! &lt;/p&gt; &lt;p&gt;Let’s have a look at two use cases:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Batch Image Upload&lt;/strong&gt;&lt;br /&gt;Imagine you have a folder in the Sitecore Media Library which serves as the source for an image gallery on your website. Instead of having to upload your images one by one using a standard upload form, you can now drag and drop your images directly from your hard drive into the Media Library and they will appear in your image gallery. It doesn’t get any easier than that.&lt;br /&gt; &lt;li&gt;&lt;strong&gt;Document Management&lt;br /&gt;&lt;/strong&gt;Imagine you have a policy Word document in your Sitecore Media Library, which is displayed on your website. Now a paragraph in the policy has changed. What you needed to do previously was download the document, edit the paragraph and re-upload the document to the Media Library. &lt;br /&gt;&lt;br /&gt;In Sitecore 6.2 this is now a lot easier, thanks to WebDAV. You can simply right click on the document and select “Edit”. Sitecore will open a WebDAV connection to the Media Library and open the Word document in your &lt;strong&gt;local&lt;/strong&gt; Word installation. You can then make your changes and press save, just as if the document was stored on your hard drive. Sitecore will create a new version of the document on the server and thus maintain a full version history. If necessary this can be hooked into a workflow as well, meaning the new version has to be approved before it goes live.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Overall the WebDAV integration will make it a lot easier for content authors to work with media items. &lt;/p&gt; &lt;p&gt;I made a video about the WebDAV integration, which can be viewed here: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.youtube.com/watch?v=5eM84RM2Evs&quot;&gt;http://www.youtube.com/watch?v=5eM84RM2Evs&lt;/a&gt; (watch it in HD and fullscreen).&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;u&gt;Note for Windows 7 users&lt;br /&gt;&lt;/u&gt;Should you experience performance issues in Windows 7 when using WebDAV, try deactivating “Automatically detect settings” under the LAN Settings in IE. That will fix it.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;u&gt;WebDAV installation note&lt;/u&gt;&lt;br /&gt;WebDAV has to be &lt;strong&gt;disabled&lt;/strong&gt; in IIS for this to work. Sitecore is not using Microsoft’s WebDAV implementation.&lt;/em&gt;&lt;/p&gt;</description>
         <guid isPermaLink="false">E339C3F87E43ABC8!378</guid>
         <pubDate>Mon, 02 Nov 2009 00:48:43 -0800</pubDate>
      </item>
      <item>
         <title>WebDav in Sitecore 6.2</title>
         <link>http://sitecoreaustralia.wordpress.com/2009/11/02/webdav-in-sitecore-6-2/</link>
         <description>Hi All,
&amp;#160;
Check out this new blog from Phil on the new WebDav feature within Sitecore 6.2.
http://philheltewig.spaces.live.com/blog/cns!E339C3F87E43ABC8!378.entry &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=sitecoreaustralia.wordpress.com&amp;blog=8610513&amp;post=124&amp;subd=sitecoreaustralia&amp;ref=&amp;feed=1&quot;/&gt;</description>
         <guid isPermaLink="false">http://sitecoreaustralia.wordpress.com/?p=124</guid>
         <pubDate>Sun, 01 Nov 2009 23:40:25 -0800</pubDate>
         <content:encoded><![CDATA[<div class='snap_preview'><br /><p>Hi All,</p>
<p>&nbsp;</p>
<p>Check out this new blog from Phil on the new WebDav feature within Sitecore 6.2.</p>
<p><a rel="nofollow" target="_blank" href="http://philheltewig.spaces.live.com/blog/cns!E339C3F87E43ABC8!378.entry">http://philheltewig.spaces.live.com/blog/cns!E339C3F87E43ABC8!378.entry</a></p> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/sitecoreaustralia.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sitecoreaustralia.wordpress.com/124/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/sitecoreaustralia.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sitecoreaustralia.wordpress.com/124/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/sitecoreaustralia.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sitecoreaustralia.wordpress.com/124/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/sitecoreaustralia.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sitecoreaustralia.wordpress.com/124/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/sitecoreaustralia.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sitecoreaustralia.wordpress.com/124/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sitecoreaustralia.wordpress.com&blog=8610513&post=124&subd=sitecoreaustralia&ref=&feed=1"/></div>]]></content:encoded>
         <media:content url="http://0.gravatar.com/avatar/ea950fb7e1594f4a2356df41589e2183?s=96&amp;amp;d=identicon&amp;amp;r=G" medium="image">
            <media:title>jerrong</media:title>
         </media:content>
         <category>Uncategorized</category>
      </item>
      <item>
         <title>Dedicated image server and Sitecore</title>
         <link>http://mcore.wordpress.com/2009/11/02/dedicated-image-server-and-sitecore/</link>
         <description>A lot of sites which have a large amount of visitors use a dedicated image server. There are several reasons for this, but mostly it is because that most browsers only allow a few simultaneous connections to the same domain, which stalls the download of a page that has more than two resources. For instance [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=mcore.wordpress.com&amp;blog=2983764&amp;post=202&amp;subd=mcore&amp;ref=&amp;feed=1&quot;/&gt;</description>
         <guid isPermaLink="false">http://mcore.wordpress.com/?p=202</guid>
         <pubDate>Sun, 01 Nov 2009 15:56:00 -0800</pubDate>
         <content:encoded><![CDATA[<div class='snap_preview'><br /><p>A lot of sites which have a large amount of visitors use a dedicated image server. There are several reasons for this, but mostly it is because that most browsers only allow a few simultaneous connections to the same domain, which stalls the download of a page that has more than two resources. For instance imagine you have a page consisting of multiple images, stylesheets and javascript files. As the clients only allows a few simultaneous downloads, the browser won’t download all the resources at the same time, but wait for each download to complete and first then start the next download.</p>
<p>The reason of this behavior is that the HTTP standard says that only two simultaneous connections between a client and a server should be allowed. This was specified to save servers from heavy IO load, when files where requested. Browsers like IE7 and Firefox 2 lives up to this standard and only allow 2 connections, while new browsers like IE8 and Firefox 3 allows 6 connections.<br />
To ensure that the HTML can be fully loaded independently and without waiting for other downloads and to remove the load from the primary web server; a dedicated image server can be used. This server holds all files and uses a different domain (for instance images.mydomain.com). All files used on the page can then be fully referenced and thereby be downloaded from a different domain. Eg &lt;img src=”http://images.mydomain.com/image1.jpg alt=”image1”/&gt;. As the images are now on a different domain, these can be requested independently of the server providing the HTML and more simultaneous connections can be opened.</p>
<p>But how is this possible in Sitecore where the media library controls all the images?</p>
<p>One of the easiest ways is to have another publishing target for the media. In that way you will have two frontend servers: One serving the normal requests and one serving all media items. You can easily set up another publishing target and for instance use the staging module to clear the cache. <a rel="nofollow" title="SDN guide" target="_blank" href="http://sdn.sitecore.net/Articles/Administration/Sitecore%20Publishing%20Operations/Publishing%20Targets.aspx">Read more on SDN </a>if you want to know how to set it up.</p>
<p>The remaining problem is: How do we ensure that all media items gets prefixed with another domain? Unfortunately there isn’t a simple setting for this (it will probably come in a future a release of Sitecore &#8211; I hope <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley'/> ). However there is a simple solution to the problem as links are expanded by the LinkProvider, which can be overridden. More precisely the links are expanded in the LinkProvider.ExpandDynamicLink method, so we need to override this replacing the media path:</p>
<p>namespace TestApplication<br />
{<br /> public class CustomLinkProvider : LinkProvider<br /> {<br /> public const string MEDIA_PATH = &#8220;~/media/&#8221;;</p>
<p> public override string ExpandDynamicLinks(string text, bool resolveSites)<br /> {<br /> string baseExpands = base.ExpandDynamicLinks(text, resolveSites);<br /> return baseExpands.Replace(MEDIA_PATH, &#8220;<a rel="nofollow" target="_blank" href="http://images.pentia.dk/">http://images.pentia.dk/</a>&#8221; + MEDIA_PATH);<br /> }<br /> }<br />
}</p>
<p>Here I override the ExpandDynamicLinks in the inherited class CustomLinkProvider. I replace all media paths (identified by the prefix ~/media/) and replace it with the full path to the image server. The remaining thing to do is to replace the LinkProvider type in the web.config:</p>
<p>&lt;linkManager defaultProvider=&#8221;sitecore&#8221;&gt;<br /> &lt;providers&gt;<br /> &lt;clear /&gt;<br /> &lt;add name=&#8221;sitecore&#8221; type=&#8221;<strong><em>TestApplication.CustomLinkProvider, TestApplication</em></strong>&#8221; addAspxExtension=&#8221;true&#8221; alwaysIncludeServerUrl=&#8221;false&#8221; encodeNames=&#8221;true&#8221; languageEmbedding=&#8221;asNeeded&#8221; languageLocation=&#8221;filePath&#8221; shortenUrls=&#8221;true&#8221; useDisplayName=&#8221;false&#8221; /&gt;<br /> &lt;/providers&gt;<br />
&lt;/linkManager&gt;</p>
<p>Here I just point the LinkProvider type to my own implementation.</p>
<p>Now that this is set up, all requests for media items will be handled by the image server. This does not just allow faster load times for the client, but will put less pressure on the main server. Further you can tune the media server to handling media items by increasing the media cache, setting the prefetch cache etc.</p>
<p>Enjoy your new Sitecore media server <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley'/> </p> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/mcore.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mcore.wordpress.com/202/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/mcore.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mcore.wordpress.com/202/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/mcore.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mcore.wordpress.com/202/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/mcore.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mcore.wordpress.com/202/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/mcore.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mcore.wordpress.com/202/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mcore.wordpress.com&blog=2983764&post=202&subd=mcore&ref=&feed=1"/></div>]]></content:encoded>
         <media:content url="http://1.gravatar.com/avatar/df4c1f864ec5c9c21f8e21c6a7cc07d0?s=96&amp;amp;d=identicon&amp;amp;r=G" medium="image">
            <media:title>Jens Mikkelsen</media:title>
         </media:content>
      </item>
      <item>
         <title>Advanced Sitecore Google Maps (WCAG Edition)</title>
         <link>http://briancaos.wordpress.com/2009/10/30/advanced-sitecore-google-maps-wcag-edition/</link>
         <description>Advanced Sitecore Google Maps (WCAG Edition) is a new module for Sitecore. The module provides maps, that are accessible and meet the Section 508 requirements. The module is very easy to use for your Sitecore editors.
Google Maps from Google is a great tool, that you can make to your tool with this module. Users are [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=briancaos.wordpress.com&amp;blog=4258391&amp;post=461&amp;subd=briancaos&amp;ref=&amp;feed=1&quot;/&gt;</description>
         <guid isPermaLink="false">http://briancaos.wordpress.com/?p=461</guid>
         <pubDate>Fri, 30 Oct 2009 05:39:30 -0700</pubDate>
         <content:encoded><![CDATA[<div class='snap_preview'><br /><p><a rel="nofollow" target="_blank" href="http://www.pentia.net/en/Kompetencer_og_produkter/Produkter/Sitecore_Google_Maps_WCAG.aspx?submenu">Advanced Sitecore Google Maps (WCAG Edition)</a> is a new module for <a rel="nofollow" target="_blank" href="http://www.sitecore.net">Sitecore</a>. The module provides maps, that are accessible and meet the Section 508 requirements. The module is very easy to use for your Sitecore editors.</p>
<p>Google Maps from Google is a great tool, that you can make to your tool with this module. Users are familiar with Google Maps, from many other sites. They know how to zoom in and out and switch between various map types. There is a possibility to show the geodesic maps, terrain maps, satellite maps and combinations.</p>
<p>It is becoming increasingly more important that websites are accessible. The Advanced Sitecore Google Maps module expands Google Maps features to also be accessible and meet the requirements of WCAG 2.0 level AA and Section 508. This module is the only map solution for Sitecore, that meets the WCAG 2.0 Level AA.</p>
<p>The module provides multiple ways of viewing a Google Map, including several filters and accessibility lists. As a developer, you can develop your own views:</p>
<div id="attachment_463" class="wp-caption aligncenter" style="width:310px;"><a rel="nofollow" target="_blank" href="http://briancaos.files.wordpress.com/2009/10/googlemaps01.jpg"><img class="size-medium wp-image-463" title="GoogleMaps01" src="http://briancaos.files.wordpress.com/2009/10/googlemaps01.jpg?w=300&#038;h=227" alt="Google Maps view including 3-level filter and accessibility list" width="300" height="227"/></a><p class="wp-caption-text">Google Maps view including 3-level filter and accessibility list</p></div>
<p>The module is configured from Sitecore using custom Sitecore editors directly on the item that show the map. You can <strong>enter an address</strong>, or move the map marker to find the map center:</p>
<div id="attachment_462" class="wp-caption aligncenter" style="width:310px;"><a rel="nofollow" target="_blank" href="http://briancaos.files.wordpress.com/2009/10/googlemapsmap.jpg"><img class="size-medium wp-image-462" title="GoogleMapsMap" src="http://briancaos.files.wordpress.com/2009/10/googlemapsmap.jpg?w=300&#038;h=194" alt="Create a map in Sitecore" width="300" height="194"/></a><p class="wp-caption-text">Create a map in Sitecore</p></div>
<p>When creating a map you have full control over the zoom control, the map types to include (including moon, mars and sky views) and how the map should be displayed. You can even add the overview map and the Google search box to your map.</p>
<p>Markers, polygons and polylines are called &#8220;overlays&#8221;. These overlays can be grouped, and these groups can be used to filter overlays from the map, or to inherit marker icons. All overlays contain titles, text, alternative text and address information that can be used when presenting the overlay.</p>
<p>Markers are created similar to creating a map, by entering an address or moving a marker to the designated position.</p>
<div id="attachment_464" class="wp-caption aligncenter" style="width:310px;"><a rel="nofollow" target="_blank" href="http://briancaos.files.wordpress.com/2009/10/googlemapsmarker.jpg"><img class="size-medium wp-image-464" title="GoogleMapsMarker" src="http://briancaos.files.wordpress.com/2009/10/googlemapsmarker.jpg?w=300&#038;h=207" alt="Creating a marker in Sitecore" width="300" height="207"/></a><p class="wp-caption-text">Creating a marker in Sitecore</p></div>
<p>Polygons and polylines are created in a similar fashion, simply by clicking on the map untill the polygon or polyline is drawn. The polygon and polyline colors, line thickness and transparency are fully controllable:</p>
<div id="attachment_465" class="wp-caption aligncenter" style="width:310px;"><a rel="nofollow" target="_blank" href="http://briancaos.files.wordpress.com/2009/10/googlemapspolygon.jpg"><img class="size-medium wp-image-465" title="GoogleMapsPolygon" src="http://briancaos.files.wordpress.com/2009/10/googlemapspolygon.jpg?w=300&#038;h=213" alt="Adding a polygon to the overlays collection" width="300" height="213"/></a><p class="wp-caption-text">Adding a polygon to the overlays collection</p></div>
<p>In order to use Google Maps, you need to register your URL at Google. If your website has many URL&#8217;s, you need to register each of them, including sub-domains (<a rel="nofollow" target="_blank" href="http://www.mysite.com">www.mysite.com</a> and mysite.com for example). The module contains a key manager where you add all of your Google Maps keys, and the module automatically finds the correct key:</p>
<div id="attachment_466" class="wp-caption aligncenter" style="width:310px;"><a rel="nofollow" target="_blank" href="http://briancaos.files.wordpress.com/2009/10/googlemapskeys.jpg"><img class="size-medium wp-image-466" title="GoogleMapsKeys" src="http://briancaos.files.wordpress.com/2009/10/googlemapskeys.jpg?w=300&#038;h=150" alt="Multiple Google Maps key management" width="300" height="150"/></a><p class="wp-caption-text">Multiple Google Maps key management</p></div>
<p><a rel="nofollow" target="_blank" href="http://www.pentia.net/en/Kompetencer_og_produkter/Produkter/Sitecore_Google_Maps_WCAG.aspx?submenu">Click here to read more about the module</a>, or <a rel="nofollow" target="_blank" href="http://pt.googlemaps.test.pentia.net/">Click here to see a demo of the module</a>.</p> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/briancaos.wordpress.com/461/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/briancaos.wordpress.com/461/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/briancaos.wordpress.com/461/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/briancaos.wordpress.com/461/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/briancaos.wordpress.com/461/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/briancaos.wordpress.com/461/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/briancaos.wordpress.com/461/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/briancaos.wordpress.com/461/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/briancaos.wordpress.com/461/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/briancaos.wordpress.com/461/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=briancaos.wordpress.com&blog=4258391&post=461&subd=briancaos&ref=&feed=1"/></div>]]></content:encoded>
         <media:content url="http://0.gravatar.com/avatar/25db0dbe9728e65c205cb902b4aa9741?s=96&amp;amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
            <media:title>briancaos</media:title>
         </media:content>
         <media:content url="http://briancaos.files.wordpress.com/2009/10/googlemaps01.jpg?w=300" medium="image">
            <media:title>GoogleMaps01</media:title>
         </media:content>
         <media:content url="http://briancaos.files.wordpress.com/2009/10/googlemapsmap.jpg?w=300" medium="image">
            <media:title>GoogleMapsMap</media:title>
         </media:content>
         <media:content url="http://briancaos.files.wordpress.com/2009/10/googlemapsmarker.jpg?w=300" medium="image">
            <media:title>GoogleMapsMarker</media:title>
         </media:content>
         <media:content url="http://briancaos.files.wordpress.com/2009/10/googlemapspolygon.jpg?w=300" medium="image">
            <media:title>GoogleMapsPolygon</media:title>
         </media:content>
         <media:content url="http://briancaos.files.wordpress.com/2009/10/googlemapskeys.jpg?w=300" medium="image">
            <media:title>GoogleMapsKeys</media:title>
         </media:content>
      </item>
      <item>
         <title>Quick tip – remove “Edit HTML” option for the rich text field</title>
         <link>http://sitecoresupport.blogspot.com/2009/10/quick-tip-remove-edit-html-option-for.html</link>
         <description>&lt;p&gt;A while ago&amp;#160; (in 2005 actually), I blogged about &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sitecoresupport.blogspot.com/2005/12/disable-html-tab-in-html-editor.html&quot;&gt;how to disable HTML tab in the HTML Editor&lt;/a&gt;. How it is almost 2010 and it is time to post an update :-) &lt;br /&gt;Well, first thing I would like to point out is that after 4+ years, the approach pretty much has not changed. We changed the rich text editor from &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.cutesoft.net/&quot;&gt;CuteEditor&lt;/a&gt; to &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.telerik.com/products/aspnet-ajax/editor.aspx&quot;&gt;Telerik’s RAD Editor&lt;/a&gt;, released a great deal of new functionality, but still preserved the idea of backward compatibility even in such small things as rich text editor configuration! &lt;br /&gt;Isn’t it amazing?&lt;/p&gt; &lt;p&gt;Enough reminiscing, let me cut to the chase! Today with 6.x, you can still disable HTML tab for the RTE by modifying the security permissions on the “HTML View” item in one of the rich text profiles, for example for the “Rich Text Full”: /sitecore/system/Settings/Html Editor Profiles/Rich Text Full/Buttons/HTML View&lt;/p&gt; &lt;p&gt;Two things changed here. All profile definitions migrated to the “core” database and now the container names are a bit different. &lt;br /&gt; &lt;br /&gt;In addition to this, as one of our partners noticed, there is another button in Content Editor above the RTE field called “Edit HTML” which needs to have the same rules applied to. &lt;br /&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://lh3.ggpht.com/_AIfg6b6IeD0/SusfIuaJ4XI/AAAAAAAAW0g/NM0Y80UVObE/s1600-h/Capture%5B3%5D.png&quot;&gt;&lt;img style=&quot;border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;&quot; title=&quot;Capture&quot; border=&quot;0&quot; alt=&quot;Capture&quot; src=&quot;http://lh3.ggpht.com/_AIfg6b6IeD0/SusfJmWt2tI/AAAAAAAAW0o/6Qc1rLYUCyk/Capture_thumb%5B1%5D.png?imgmax=800&quot; width=&quot;346&quot; height=&quot;134&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;For that, follow the following steps: &lt;br /&gt;1. Go to the core database, locate the field definition item: &lt;br /&gt;/sitecore/system/Field types/Simple Types/Rich Text/Menu/Edit Html &lt;br /&gt;2. On the Security Tab, click “Assign” and select the role you don’t want this option to be available to. Deny inheritance of this item or specify other security settings that make sense for your needs. &lt;br /&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://lh4.ggpht.com/_AIfg6b6IeD0/SuseRYY7L8I/AAAAAAAAW0Q/h2bKcIlV-f8/s1600-h/inheritance%5B3%5D.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;inheritance&quot; border=&quot;0&quot; alt=&quot;inheritance&quot; src=&quot;http://lh3.ggpht.com/_AIfg6b6IeD0/SuseSrxtm4I/AAAAAAAAW0Y/mfQzYH9lqGY/inheritance_thumb%5B1%5D.png?imgmax=800&quot; width=&quot;523&quot; height=&quot;562&quot;/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;That’s it, Folks! Enjoy Sitecore!&lt;/p&gt; &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-4870868505083466403?l=sitecoresupport.blogspot.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Alex Shyba</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-18939862.post-4870868505083466403</guid>
         <pubDate>Fri, 30 Oct 2009 03:11:00 -0700</pubDate>
      </item>
      <item>
         <title>Post DMF 2009</title>
         <link>http://sitecore-on-the-road.blogspot.com/2009/10/post-dmf-2009.html</link>
         <author>noreply@blogger.com (Martin Vikkelsø Madsen)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-1828850681495940256.post-8296045428169096271</guid>
         <pubDate>Thu, 29 Oct 2009 07:56:00 -0700</pubDate>
      </item>
      <item>
         <title>Visual Studio Template for Sitecore Renderings</title>
         <link>http://blog.capaxsolutions.co.uk/2009/10/28/visual-studio-template-for-sitecore-renderings/</link>
         <description>Bit of a mini-post, I saw a writeup on how to create new template types for Visual Studio so I went ahead and created one for the Sitecore XSLT Rendering files. Save the below file to your Visual Studio templates folder (Tools-&amp;#62;Options-&amp;#62;Projects &amp;#38; Solutions) and you&amp;#8217;re done. When you next go to add an xslt [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=blog.capaxsolutions.co.uk&amp;blog=9199105&amp;post=126&amp;subd=sitecored&amp;ref=&amp;feed=1&quot;/&gt;</description>
         <guid isPermaLink="false">http://blog.capaxsolutions.co.uk/?p=126</guid>
         <pubDate>Wed, 28 Oct 2009 09:46:49 -0700</pubDate>
         <content:encoded><![CDATA[<div class='snap_preview'><br /><p>Bit of a mini-post, I <a rel="nofollow" target="_blank" href="http://www.switchonthecode.com/tutorials/visual-studio-how-to-create-item-templates">saw a writeup</a> on how to create new template types for Visual Studio so I went ahead and created one for the Sitecore XSLT Rendering files. Save the below file to your Visual Studio templates folder (Tools-&gt;Options-&gt;Projects &amp; Solutions) and you&#8217;re done. When you next go to add an xslt file you can pick the Sitecore XSLT Rendering (which I got from the latest 6.2 release) listed under my templates.</p>
<p><img class="size-full wp-image-127 alignnone" title="InsertRendering" src="http://sitecored.files.wordpress.com/2009/10/insertrendering.png?w=509&#038;h=307" alt="InsertRendering" width="509" height="307"/></p>
<p>If you wish to modify it you can just make changes to the xsl.xslt file in the zip file.</p>
<p><a rel="nofollow" target="_blank" href="http://sites.google.com/a/capaxsolutions.co.uk/filehost/Home/SitecoreRendering.zip">The File</a></p> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/sitecored.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sitecored.wordpress.com/126/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/sitecored.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sitecored.wordpress.com/126/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/sitecored.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sitecored.wordpress.com/126/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/sitecored.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sitecored.wordpress.com/126/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/sitecored.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sitecored.wordpress.com/126/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.capaxsolutions.co.uk&blog=9199105&post=126&subd=sitecored&ref=&feed=1"/></div>]]></content:encoded>
         <media:content url="http://1.gravatar.com/avatar/da00436ef9beff20d0f70144c9e75385?s=96&amp;amp;d=identicon&amp;amp;r=G" medium="image">
            <media:title>Steve Green</media:title>
         </media:content>
         <media:content url="http://sitecored.files.wordpress.com/2009/10/insertrendering.png" medium="image">
            <media:title>InsertRendering</media:title>
         </media:content>
         <category>Uncategorized</category>
      </item>
      <item>
         <title>Sitecore 6.2!!!</title>
         <link>http://sitecorewest.wordpress.com/2009/10/26/sitecore-6-2/</link>
         <description>SAN FRANCISCO, CA &amp;#8211; 10/26/09 &amp;#8212; Today, Sitecore announced the availability of a new version of its Web Content Management (CMS) software. Sitecore CMS 6.2 offers features including native RSS feeds, Microsoft Outlook-based workflow management, drag and drop media and document management, authoring enhancements and advanced marketing Web forms, offered as part of the CMS solution [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=sitecorewest.wordpress.com&amp;blog=9388662&amp;post=55&amp;subd=sitecorewest&amp;ref=&amp;feed=1&quot;/&gt;</description>
         <guid isPermaLink="false">http://sitecorewest.wordpress.com/?p=55</guid>
         <pubDate>Mon, 26 Oct 2009 09:35:35 -0700</pubDate>
         <content:encoded><![CDATA[<div class='snap_preview'><br /><p>SAN FRANCISCO, CA &#8211; 10/26/09 &#8212; Today, <a rel="nofollow" target="_blank" href="http://sitecore.net/?sc_camp=F34CEC8A8CF3495C82EA1390849B951C">Sitecore</a> announced the availability of a new version of its Web Content Management (CMS) software. Sitecore CMS 6.2 offers features including native RSS feeds, Microsoft Outlook-based workflow management, drag and drop media and document management, authoring enhancements and advanced marketing Web forms, offered as part of the <a rel="nofollow" target="_blank" href="http://sitecore.net/?sc_camp=F34CEC8A8CF3495C82EA1390849B951C">CMS solution</a> with the latest product upgrade.</p>
<p>Many organizations are successfully expanding their revenue, membership and service levels with Sitecore&#8217;s CMS solutions. Sitecore offers the architecture, power and personal usability to work within any organization to deliver results through Web properties and campaigns.</p>
<p>&#8220;To keep pace and excel in today&#8217;s marketplace, websites have to provide more than just content and marketers and content editors demand more capabilities to stay competitive,&#8221; said Darren Guarnaccia, VP Product Marketing, Sitecore. &#8220;The latest version of Sitecore CMS gives our customers the tools to deliver websites that compel visitors to take action.&#8221;</p>
<p>New in Sitecore CMS:</p>
<p>Web Forms for Marketers: The new Web forms puts marketing teams in complete control of the forms creation, campaign integration and optimization processes. The tool allows non-technical users to build rich interactive forms, configure campaigns and conversion goals and provides a suite of reports to better understand user behavior for usability analysis and optimization. The tool also allows marketers to capture incremental data from abandoned forms and track form dropout statistics.</p>
<p>Outlook-Based Workflow Management: New Outlook integration allows users to receive workflow notifications from within Outlook in real-time, and take action on those workflow requests without ever having to log into the CMS. All workflow actions, status and version comparison information is provided to the user, and dynamically adjusts should a workflow state change.</p>
<p><a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/WebDAV">Web-based Distributed Authoring and Versioning</a> (WebDAV) Media and Document Management: Drag and drop image uploads are now available &#8212; upload files to the media library without upload wizards. Files can be uploaded directly in the page editor and can be stored within Sitecore CMS. Files can also be edited with native applications such as Microsoft Word, Photoshop and PowerPoint and version controlled automatically.</p>
<p>Inline Word Editing: Natively edit content inline using full Microsoft Word functionality with full support of rich content pages.</p> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/sitecorewest.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sitecorewest.wordpress.com/55/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/sitecorewest.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sitecorewest.wordpress.com/55/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/sitecorewest.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sitecorewest.wordpress.com/55/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/sitecorewest.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sitecorewest.wordpress.com/55/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/sitecorewest.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sitecorewest.wordpress.com/55/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sitecorewest.wordpress.com&blog=9388662&post=55&subd=sitecorewest&ref=&feed=1"/></div>]]></content:encoded>
         <media:content url="http://1.gravatar.com/avatar/949e97bb128775df882a4258a7919d09?s=96&amp;amp;d=identicon&amp;amp;r=G" medium="image">
            <media:title>sitecorewest</media:title>
         </media:content>
         <category>Uncategorized</category>
      </item>
      <item>
         <title>Registering XSLT Extension Objects with the ASP XML control</title>
         <link>http://www.bolaky.net/post/2009/10/22/Registering-XSLT-Extension-Objects-with-the-ASP-XML-control.aspx</link>
         <description>&lt;p&gt;
I once inherited a sublayout that inlcuded an &lt;strong&gt;asp:xml&lt;/strong&gt; control. The &lt;strong&gt;asp:xml&lt;/strong&gt; control was there to handle and display&amp;nbsp;an xml feed from another system, while the rest of the sublayout concentrated on rendering related feed content from Sitecore. The presentation of the xml feed was handled via an xlst rendering. &lt;/p&gt;
&lt;p&gt;
In this particular situation,&amp;nbsp;I made use&amp;nbsp;use of XSL extensions in the XSLT file.&amp;nbsp;Registering the XSL Extension was fairly easy. &lt;/p&gt;
&lt;pre class=&quot;csharpcode&quot;&gt;
&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;xslExtensions&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;extension&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;mode&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;on&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;Utils.XslHelper, Utils&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;namespace&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;http://www.sitecore.net/Utils&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;singleInstance&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;true&quot;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;.....&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;xslExtensions&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;strong&gt;&lt;br /&gt;
&lt;br /&gt;
Registering the extension in the xsl file&lt;strong&gt; &lt;/strong&gt;&lt;/strong&gt;
&lt;pre class=&quot;csharpcode&quot;&gt;
&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;xsl:stylesheet&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;1.0&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xmlns:xsl&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;http://www.w3.org/1999/XSL/Transform&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;xmlns:MyExtension&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;http://www.sitecore.net/Utils&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;exclude-result-prefixes&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;MyExtension&quot;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;xsl:value-of&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;select&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;MyExtension:HelloWorld()&quot;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;strong&gt;&lt;br /&gt;
&lt;br /&gt;
Binding the XML control to the XML Data&lt;/strong&gt; &lt;/p&gt;
&lt;pre class=&quot;csharpcode&quot;&gt;
&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;asp:Xml&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;Xml1&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;runat&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;server&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;TransformSource&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&quot;~/xsl/CustomFile.xslt&quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;asp:Xml&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;csharpcode&quot;&gt;
&lt;pre&gt;
&lt;span class=&quot;lnum&quot;&gt; 1: &lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;void&lt;/span&gt; OnInit(EventArgs e)
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class=&quot;lnum&quot;&gt; 2: &lt;/span&gt;{ &lt;/pre&gt;
&lt;pre&gt;
&lt;span class=&quot;lnum&quot;&gt; 3: &lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt; (!&lt;span class=&quot;kwrd&quot;&gt;this&lt;/span&gt;.IsPostBack)
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class=&quot;lnum&quot;&gt; 4: &lt;/span&gt; {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class=&quot;lnum&quot;&gt; 5: &lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;string&lt;/span&gt; xmlContent = &lt;span class=&quot;str&quot;&gt;&quot;xml data goes here&quot;&lt;/span&gt; ; &lt;/pre&gt;
&lt;pre&gt;
&lt;span class=&quot;lnum&quot;&gt; 6: &lt;/span&gt; XsltArgumentList list = &lt;span class=&quot;kwrd&quot;&gt;new&lt;/span&gt; XsltArgumentList();
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class=&quot;lnum&quot;&gt; 7: &lt;/span&gt; &lt;/pre&gt;
&lt;pre&gt;
&lt;span class=&quot;lnum&quot;&gt; 8: &lt;/span&gt; Utils.XslHelper ext= &lt;span class=&quot;kwrd&quot;&gt;new&lt;/span&gt; Utils.XslHelper ();
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class=&quot;lnum&quot;&gt; 9: &lt;/span&gt; list.AddExtensionObject(&lt;span class=&quot;str&quot;&gt;&quot;http://www.sitecore.net/Utils&quot;&lt;/span&gt;, ext);
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class=&quot;lnum&quot;&gt; 10: &lt;/span&gt; Xml1.TransformArgumentList = list;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class=&quot;lnum&quot;&gt; 11: &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class=&quot;lnum&quot;&gt; 12: &lt;/span&gt; Xml1.DocumentContent = xmlContent;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class=&quot;lnum&quot;&gt; 13: &lt;/span&gt; }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class=&quot;lnum&quot;&gt; 14: &lt;/span&gt;}
&lt;/pre&gt;
&lt;/div&gt;
&lt;strong&gt;
&lt;p&gt;
&lt;br /&gt;
It turns out that, even though I had previously registered the xsl extension in the xslt file, I also had to register it via code as well. Otherwise,&amp;nbsp;the following&amp;nbsp;exception occurs at runtime. &lt;/p&gt;
&lt;p style=&quot;color:red;&quot;&gt;
&lt;em&gt;&lt;u&gt;Cannot find the script or external object that implements prefix 'MyExtension'.&lt;/u&gt;&lt;/em&gt; &lt;/p&gt;
&lt;/strong&gt;
&lt;p&gt;
&lt;strong&gt;Sorted!&lt;/strong&gt;
&lt;/p&gt;</description>
         <author>Aboo.nospam@nospam.Bolaky.net (Aboo Bolaky)</author>
         <guid isPermaLink="false">http://www.bolaky.net/post.aspx?id=3bf0642c-adb1-47b2-b8ae-b8565d0ff195</guid>
         <pubDate>Thu, 22 Oct 2009 15:01:00 -0700</pubDate>
      </item>
      <item>
         <title>Creating a Report Filter in Sitecore OMS</title>
         <link>http://cbushnell.wordpress.com/2009/10/22/creating-a-report-filter-in-sitecore-oms-6/</link>
         <description>How to create a Sitecore OMS report filter step 5&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=cbushnell.wordpress.com&amp;blog=9791478&amp;post=339&amp;subd=cbushnell&amp;ref=&amp;feed=1&quot;/&gt;</description>
         <guid isPermaLink="false">http://cbushnell.wordpress.com/?p=339</guid>
         <pubDate>Thu, 22 Oct 2009 10:53:14 -0700</pubDate>
         <content:encoded><![CDATA[<div class='snap_preview'><br /><h4>Step 5: Test your Filter</h4>
<p>View your new report and test your filter in Sitecore Analytics.</p>
<p>1. In Sitecore Analytics, to refresh your reports, close and then expand the Reports node.</p>
<p>2. Click on your new report: <em>ProfileKeyFilter</em></p>
<p>3. You should see an unfiltered report that displays all profile keys in the Nicam site.</p>
<p>4. Click Filter. You should see your new filter displayed in the Filter Editor window.</p>
<p><a rel="nofollow" target="_blank" href="http://cbushnell.files.wordpress.com/2009/10/profilekeyfilter1.png"><img style="display:inline;border-width:0;" title="profile key filter" src="http://cbushnell.files.wordpress.com/2009/10/profilekeyfilter_thumb1.png?w=270&#038;h=292" border="0" alt="profile key filter" width="270" height="292"/></a></p>
<p>5. Select the filter and then click <em>specific value</em>.</p>
<p>6. The <strong>Select Profile Key</strong> dialog box, displays all profiles and profile keys. Select a profile key, such as <em>Semi-pro</em>.</p>
<p><a rel="nofollow" target="_blank" href="http://cbushnell.files.wordpress.com/2009/10/selectprofilekey1.png"><img style="display:inline;border-width:0;" title="select profile key" src="http://cbushnell.files.wordpress.com/2009/10/selectprofilekey_thumb1.png?w=187&#038;h=272" border="0" alt="select profile key" width="187" height="272"/></a></p>
<p>7. Click OK in the <strong>Select Profile Key</strong> dialog box and the <strong>Filter Editor</strong> window. You should see the following report filtered by the Semi-pro profile key:</p>
<p><a rel="nofollow" target="_blank" href="http://cbushnell.files.wordpress.com/2009/10/filtersemipro.png"><img style="display:inline;border-width:0;" title="Filter-Semi-pro" src="http://cbushnell.files.wordpress.com/2009/10/filtersemipro_thumb.png?w=428&#038;h=421" border="0" alt="Filter-Semi-pro" width="428" height="421"/></a></p>
<p>You can now use this filter this report to show the top scores and organizations for any given profile key in the Nicam site.</p> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/cbushnell.wordpress.com/339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cbushnell.wordpress.com/339/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/cbushnell.wordpress.com/339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cbushnell.wordpress.com/339/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/cbushnell.wordpress.com/339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cbushnell.wordpress.com/339/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/cbushnell.wordpress.com/339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cbushnell.wordpress.com/339/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/cbushnell.wordpress.com/339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cbushnell.wordpress.com/339/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cbushnell.wordpress.com&blog=9791478&post=339&subd=cbushnell&ref=&feed=1"/></div>]]></content:encoded>
         <media:content url="http://0.gravatar.com/avatar/c5c6495ef08d15440e64b4ec73673844?s=96&amp;amp;d=identicon&amp;amp;r=G" medium="image">
            <media:title>cbushnell</media:title>
         </media:content>
         <media:content url="http://cbushnell.files.wordpress.com/2009/10/profilekeyfilter_thumb1.png" medium="image">
            <media:title>profile key filter</media:title>
         </media:content>
         <media:content url="http://cbushnell.files.wordpress.com/2009/10/selectprofilekey_thumb1.png" medium="image">
            <media:title>select profile key</media:title>
         </media:content>
         <media:content url="http://cbushnell.files.wordpress.com/2009/10/filtersemipro_thumb.png" medium="image">
            <media:title>Filter-Semi-pro</media:title>
         </media:content>
         <category>Sitecore OMS reports</category>
      </item>
      <item>
         <title>Creating a Report Filter in Sitecore OMS</title>
         <link>http://cbushnell.wordpress.com/2009/10/22/creating-a-report-filter-in-sitecore-oms-5/</link>
         <description>How to create a Sitecore OMS report filter step 4&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=cbushnell.wordpress.com&amp;blog=9791478&amp;post=332&amp;subd=cbushnell&amp;ref=&amp;feed=1&quot;/&gt;</description>
         <guid isPermaLink="false">http://cbushnell.wordpress.com/?p=332</guid>
         <pubDate>Thu, 22 Oct 2009 10:50:21 -0700</pubDate>
         <content:encoded><![CDATA[<div class='snap_preview'><br /><h4>Step 4: Configure your Sitecore Filter Definition Item</h4>
<p>When you have created your filter class and added a placeholder variable to your SQL query you then must configure your Sitecore filter definition item to point to your C# assembly.</p>
<p>1. In the Content Editor, Criteria folder, select your filter definition item.</p>
<p><em>/sitecore/system/Settings/Analytics/Filters/Criteria/WhereSpecificProfileKey</em></p>
<p><a rel="nofollow" target="_blank" href="http://cbushnell.files.wordpress.com/2009/10/filtertypefield.png"><img style="display:inline;border-width:0;" title="filter type field" src="http://cbushnell.files.wordpress.com/2009/10/filtertypefield_thumb.png?w=512&#038;h=111" border="0" alt="filter type field" width="512" height="111"/></a></p>
<p>2. In the <strong>Type</strong> field, enter the correct path to your C# class and assembly.</p>
<p>ChrisTest.sitecore_modules.Cbtest.WhereSpecificProfileKey,ChrisTest</p>
<p>namespace class name assembly</p>
<p> </p>
<p>3. Save your changes.</p>
<p> </p>
<p>My next post: Step 5 – <a rel="nofollow" target="_blank" href="http://cbushnell.wordpress.com/2009/10/22/creating-a-report-filter-in-sitecore-oms-6/">Test your Filter</a></p> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/cbushnell.wordpress.com/332/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cbushnell.wordpress.com/332/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/cbushnell.wordpress.com/332/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cbushnell.wordpress.com/332/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/cbushnell.wordpress.com/332/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cbushnell.wordpress.com/332/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/cbushnell.wordpress.com/332/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cbushnell.wordpress.com/332/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/cbushnell.wordpress.com/332/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cbushnell.wordpress.com/332/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cbushnell.wordpress.com&blog=9791478&post=332&subd=cbushnell&ref=&feed=1"/></div>]]></content:encoded>
         <media:content url="http://0.gravatar.com/avatar/c5c6495ef08d15440e64b4ec73673844?s=96&amp;amp;d=identicon&amp;amp;r=G" medium="image">
            <media:title>cbushnell</media:title>
         </media:content>
         <media:content url="http://cbushnell.files.wordpress.com/2009/10/filtertypefield_thumb.png" medium="image">
            <media:title>filter type field</media:title>
         </media:content>
         <category>Sitecore OMS reports</category>
      </item>
      <item>
         <title>Creating a Report Filter in Sitecore OMS</title>
         <link>http://cbushnell.wordpress.com/2009/10/22/creating-a-report-filter-in-sitecore-oms-4/</link>
         <description>How to create a Sitecore OMS report filter step 3&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=cbushnell.wordpress.com&amp;blog=9791478&amp;post=329&amp;subd=cbushnell&amp;ref=&amp;feed=1&quot;/&gt;</description>
         <guid isPermaLink="false">http://cbushnell.wordpress.com/?p=329</guid>
         <pubDate>Thu, 22 Oct 2009 10:48:24 -0700</pubDate>
         <content:encoded><![CDATA[<div class='snap_preview'><br /><h4>Step 3: Add a Placeholder to your SQL Query</h4>
<p>To add a filter to a report, you must add a variable to the SQL query in your report .mrt file that has the same name as the placeholder in your C# class. If you open any Sitecore report that contains filters, you can see all the filter variables below the WHERE clause.</p>
<p><a rel="nofollow" target="_blank" href="http://cbushnell.files.wordpress.com/2009/10/filtersvariables.png"><img style="display:inline;border-width:0;" title="filters variables" border="0" alt="filters variables" src="http://cbushnell.files.wordpress.com/2009/10/filtersvariables_thumb.png?w=186&#038;h=178" width="186" height="178"/></a></p>
<table border="0" cellspacing="0" cellpadding="2" width="499">
<tbody>
<tr>
<td valign="top" width="497"><strong>Tip! <br /></strong>To add an existing Sitecore filter to a report, simply copy the appropriate filter placeholder into the WHERE clause of the report you want to add it to. <br />For example, if you add the {IPOwner} placeholder variable to your report you get all the filters related to visitor country as shown in the example in the introduction.</td>
</tr>
</tbody>
</table>
<p>To add your new filter to the <em>Profile Key Filter</em> report:</p>
<p>1. In the Report Designer, click <em>Open Report</em> and locate the file <em>ProfileKeyFilter.mrt</em>.</p>
<p><em>C:&#92;Inetpub&#92;wwwroot&#92;&lt;your site&gt;&#92;WebSite&#92;sitecore&#92;shell&#92;Applications&#92;Analytics&#92;Reports</em></p>
<p>2. First create a variable for your placeholder. In the <strong>Dictionary</strong> panel, click <em>New Item</em>, <em>New Variable</em>.</p>
<p>3. In the <strong>Name</strong> field enter <em>MyProfileKey</em> and enter the same value in the <strong>Alias </strong>field. Keep the Type as string and click OK.</p>
<p><a rel="nofollow" target="_blank" href="http://cbushnell.files.wordpress.com/2009/10/filterplaceholdervariable.png"><img style="display:inline;border-width:0;" title="filter placeholder variable" border="0" alt="filter placeholder variable" src="http://cbushnell.files.wordpress.com/2009/10/filterplaceholdervariable_thumb.png?w=244&#038;h=226" width="244" height="226"/></a></p>
<p>4. Next, add your variable to the SQL query. Click <em>IPOwners</em> and then click <em>Edit</em> to edit the Data Source. This enables you to make changes directly to your SQL query.</p>
<p>5. Add your placeholder {MyProfileKey} to the WHERE clause of your SQL Query.</p>
<p><a rel="nofollow" target="_blank" href="http://cbushnell.files.wordpress.com/2009/11/filterplaceholderscreenshot.png"><img style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="filter placeholder screenshot" border="0" alt="filter placeholder screenshot" src="http://cbushnell.files.wordpress.com/2009/11/filterplaceholderscreenshot_thumb.png?w=404&#038;h=471" width="404" height="471"/></a> </p>
<p>6. Click OK and save your changes in the report designer.</p>
<p>My next post: Step 4 – <a rel="nofollow" target="_blank" href="http://cbushnell.wordpress.com/2009/10/22/creating-a-report-filter-in-sitecore-oms-5/">Configure your Sitecore Filter Definition Item</a></p> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/cbushnell.wordpress.com/329/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cbushnell.wordpress.com/329/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/cbushnell.wordpress.com/329/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cbushnell.wordpress.com/329/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/cbushnell.wordpress.com/329/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cbushnell.wordpress.com/329/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/cbushnell.wordpress.com/329/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cbushnell.wordpress.com/329/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/cbushnell.wordpress.com/329/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cbushnell.wordpress.com/329/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cbushnell.wordpress.com&blog=9791478&post=329&subd=cbushnell&ref=&feed=1"/></div>]]></content:encoded>
         <media:content url="http://0.gravatar.com/avatar/c5c6495ef08d15440e64b4ec73673844?s=96&amp;amp;d=identicon&amp;amp;r=G" medium="image">
            <media:title>cbushnell</media:title>
         </media:content>
         <media:content url="http://cbushnell.files.wordpress.com/2009/10/filtersvariables_thumb.png" medium="image">
            <media:title>filters variables</media:title>
         </media:content>
         <media:content url="http://cbushnell.files.wordpress.com/2009/10/filterplaceholdervariable_thumb.png" medium="image">
            <media:title>filter placeholder variable</media:title>
         </media:content>
         <media:content url="http://cbushnell.files.wordpress.com/2009/11/filterplaceholderscreenshot_thumb.png" medium="image">
            <media:title>filter placeholder screenshot</media:title>
         </media:content>
         <category>Sitecore OMS reports</category>
      </item>
      <item>
         <title>Creating a Report Filter in Sitecore OMS</title>
         <link>http://cbushnell.wordpress.com/2009/10/22/creating-a-report-filter-in-sitecore-oms-3/</link>
         <description>How to create a Sitecore OMS report filter step 2&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=cbushnell.wordpress.com&amp;blog=9791478&amp;post=322&amp;subd=cbushnell&amp;ref=&amp;feed=1&quot;/&gt;</description>
         <guid isPermaLink="false">http://cbushnell.wordpress.com/?p=322</guid>
         <pubDate>Thu, 22 Oct 2009 08:57:49 -0700</pubDate>
         <content:encoded><![CDATA[<div class='snap_preview'><br /><h4>Step 2: Create your Filter Implementation in Visual Studio</h4>
<p>To create a new report filter you must use Visual Studio and create a new C# class.</p>
<h5>Create a new C# Class file</h5>
<p>1. Create a new C# project.</p>
<p>2. Create a new C# Class .cs file to add to your project.</p>
<p>3. Make sure that you add the following references to your class:</p>
<p>· Sitecore.Kernel</p>
<p>· Sitecore.Analytics</p>
<p>4. Name your class <em>WhereSpecificProfileKey</em>.</p>
<p>5. Ensure that your new class inherits from the <em>Operator Filter Base </em>class.</p>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:575ad883-ed14-4e29-a41e-a9933a11b389" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<pre style="background-color:#FFFFFF;white-space:pre-wrap;overflow:auto;"><span style="color:#0000FF;">public</span><span style="color:#000000;"> </span><span style="color:#0000FF;">class</span><span style="color:#000000;"> WhereSpecificProfileKey : OperatorFilterBase</span></pre>
<p></p>
<p>The Operator filter base contains the functionality you need to create different filter conditions. Filter conditions are like rules that make it easy to create SQL statements to select data from the Analytics database. For example, Sitecore Analytics has a pre-configured filter called <em>Where Profile Key</em> that uses the following operators:</p>
<p>· Select a profile key – From all the keys in the Nicam site.</p>
<p>· Select a comparison – For example, <em>is equal to</em> or <em>is greater than</em></p>
<p>· Enter a value – For example, when score is greater than <em>20</em></p>
<p>To keep things simple, your filter will only contain one condition; the option to choose a profile key from those available in the Nicam site.</p>
<p>The following pop-up window appears when you select this condition in your filter.</p>
<p><a rel="nofollow" target="_blank" href="http://cbushnell.files.wordpress.com/2009/10/selectprofilekey.png"><img style="display:inline;border-width:0;" title="select profile key" src="http://cbushnell.files.wordpress.com/2009/10/selectprofilekey_thumb.png?w=209&#038;h=289" border="0" alt="select profile key" width="209" height="289"/></a></p>
<p>6. In your new class use the following two methods to create your filter:</p>
<p>· <em>ApplyFilter</em></p>
<p>· <em>IsApplicable</em></p>
<h5>C# code used in this filter</h5>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:f7c8d476-207c-42a4-9b90-a899c0da725c" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<pre style="background-color:#FFFFFF;white-space:pre-wrap;overflow:auto;"><span style="color:#0000FF;">using</span><span style="color:#000000;"> System;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> System.Data;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> System.Configuration;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> System.Web;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> System.Web.Security;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> System.Web.UI;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> System.Web.UI.WebControls;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> System.Web.UI.WebControls.WebParts;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> System.Web.UI.HtmlControls;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> Sitecore.Analytics.Data.Filters.Filters;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> Sitecore.Analytics.Data.Filters;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> Sitecore.Diagnostics; </span><span style="color:#0000FF;">namespace</span><span style="color:#000000;"> ChrisTest.sitecore_modules.Cbtest
{
</span><span style="color:#0000FF;">public</span><span style="color:#000000;"> </span><span style="color:#0000FF;">class</span><span style="color:#000000;"> WhereSpecificProfileKey : OperatorFilterBase { </span><span style="color:#008000;">//</span><span style="color:#008000;"> Fields</span><span style="color:#008000;">
</span><span style="color:#000000;"> </span><span style="color:#0000FF;">private</span><span style="color:#000000;"> </span><span style="color:#0000FF;">string</span><span style="color:#000000;"> profileKeyId; </span><span style="color:#008000;">//</span><span style="color:#008000;"> Methods</span><span style="color:#008000;">
</span><span style="color:#000000;"> </span><span style="color:#0000FF;">public</span><span style="color:#000000;"> </span><span style="color:#0000FF;">override</span><span style="color:#000000;"> </span><span style="color:#0000FF;">void</span><span style="color:#000000;"> ApplyFilter(SqlCommand sqlCommand) { Assert.ArgumentNotNull(sqlCommand, </span><span style="color:#800000;">"</span><span style="color:#800000;">sqlCommand</span><span style="color:#800000;">"</span><span style="color:#000000;">); sqlCommand.AddWhereClause(</span><span style="color:#800000;">"</span><span style="color:#800000;">MyProfileKey</span><span style="color:#800000;">"</span><span style="color:#000000;">, </span><span style="color:#800000;">"</span><span style="color:#800000;">ProfileKeyDefinition.ProfileKeyDefinitionId = '</span><span style="color:#800000;">"</span><span style="color:#000000;"> </span><span style="color:#000000;">+</span><span style="color:#000000;"> </span><span style="color:#0000FF;">this</span><span style="color:#000000;">.ProfileKeyId </span><span style="color:#000000;">+</span><span style="color:#000000;"> </span><span style="color:#800000;">"</span><span style="color:#800000;">' </span><span style="color:#800000;">"</span><span style="color:#000000;">, </span><span style="color:#0000FF;">base</span><span style="color:#000000;">.Except); } </span><span style="color:#0000FF;">public</span><span style="color:#000000;"> </span><span style="color:#0000FF;">override</span><span style="color:#000000;"> </span><span style="color:#0000FF;">bool</span><span style="color:#000000;"> IsApplicable(SqlCommand sqlCommand) { Assert.ArgumentNotNull(sqlCommand, </span><span style="color:#800000;">"</span><span style="color:#800000;">sqlCommand</span><span style="color:#800000;">"</span><span style="color:#000000;">); </span><span style="color:#0000FF;">return</span><span style="color:#000000;"> (sqlCommand.HasPlaceholder(</span><span style="color:#800000;">"</span><span style="color:#800000;">MyProfileKey</span><span style="color:#800000;">"</span><span style="color:#000000;">) ); } </span><span style="color:#008000;">//</span><span style="color:#008000;"> Properties</span><span style="color:#008000;">
</span><span style="color:#000000;"> </span><span style="color:#0000FF;">public</span><span style="color:#000000;"> </span><span style="color:#0000FF;">string</span><span style="color:#000000;"> ProfileKeyId { </span><span style="color:#0000FF;">get</span><span style="color:#000000;"> { </span><span style="color:#0000FF;">return</span><span style="color:#000000;"> (</span><span style="color:#0000FF;">this</span><span style="color:#000000;">.profileKeyId </span><span style="color:#000000;">??</span><span style="color:#000000;"> </span><span style="color:#0000FF;">string</span><span style="color:#000000;">.Empty); } </span><span style="color:#0000FF;">set</span><span style="color:#000000;"> { Assert.ArgumentNotNull(value, </span><span style="color:#800000;">"</span><span style="color:#800000;">value</span><span style="color:#800000;">"</span><span style="color:#000000;">); </span><span style="color:#0000FF;">this</span><span style="color:#000000;">.profileKeyId </span><span style="color:#000000;">=</span><span style="color:#000000;"> value; } } }
}</span></pre>
<p></p>
</div>
<p>You can either copy and paste this code into your C# class file or just use these methods to construct your own logic.</p>
<h5>Explaining the code:</h5>
<p>Include the following namespaces at the top of your filter class:</p>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:bfee8d82-2543-46e0-a911-d6091caf755d" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<pre style="background-color:#FFFFFF;white-space:pre-wrap;overflow:auto;"><span style="color:#0000FF;">using</span><span style="color:#000000;"> System;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> System.Data;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> System.Configuration;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> System.Web;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> System.Web.Security;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> System.Web.UI;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> System.Web.UI.WebControls;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> System.Web.UI.WebControls.WebParts;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> System.Web.UI.HtmlControls;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> Sitecore.Analytics.Data.Filters.Filters;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> Sitecore.Analytics.Data.Filters;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> Sitecore.Diagnostics;
</span></pre>
<p></p>
<p>Declare the following variable:</p>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:a0539805-11d0-4360-9ca1-3879feb1ff9f" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<pre style="background-color:#FFFFFF;white-space:pre-wrap;overflow:auto;"><span style="color:#0000FF;">private</span><span style="color:#000000;"> </span><span style="color:#0000FF;">string</span><span style="color:#000000;"> profileKeyId;</span></pre>
<p></p>
<p>This variable is used in the <em>get</em> property of your class.</p>
<p>Use the following two methods:</p>
<h5>ApplyFilter</h5>
<p>The <em>ApplyFilter</em> method allows you to select a profile key from the Nicam site. It then inserts a SQL WHERE clause into the SQL query on your report which retrieves the chosen profile.</p>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:eeb2895e-bb5a-4df4-9a5c-6750feab4fb4" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<pre style="background-color:#FFFFFF;white-space:pre-wrap;overflow:auto;"><span style="color:#0000FF;">public</span><span style="color:#000000;"> </span><span style="color:#0000FF;">override</span><span style="color:#000000;"> </span><span style="color:#0000FF;">void</span><span style="color:#000000;"> ApplyFilter(SqlCommand sqlCommand) { Assert.ArgumentNotNull(sqlCommand, </span><span style="color:#800000;">"</span><span style="color:#800000;">sqlCommand</span><span style="color:#800000;">"</span><span style="color:#000000;">); sqlCommand.AddWhereClause(</span><span style="color:#800000;">"</span><span style="color:#800000;">MyProfileKey</span><span style="color:#800000;">"</span><span style="color:#000000;">, </span><span style="color:#800000;">"</span><span style="color:#800000;">ProfileKeyDefinition.ProfileKeyDefinitionId = '</span><span style="color:#800000;">"</span><span style="color:#000000;"> </span><span style="color:#000000;">+</span><span style="color:#000000;"> </span><span style="color:#0000FF;">this</span><span style="color:#000000;">.ProfileKeyId </span><span style="color:#000000;">+</span><span style="color:#000000;"> </span><span style="color:#800000;">"</span><span style="color:#800000;">' </span><span style="color:#800000;">"</span><span style="color:#000000;">, </span><span style="color:#0000FF;">base</span><span style="color:#000000;">.Except); }</span></pre>
<p></p>
<h5>IsApplicable</h5>
<p>This method tells your class exactly where in your SQL query to insert the WHERE clause by using a placeholder called MyProfileKey.</p>
<p>The only text you need to change in these methods is the placeholder name. You can either use the same name as I have or replace it with a placeholder name of your own. Both methods must have the same placeholder name.</p>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:716b6f23-e3a1-416e-9009-198f82e259fc" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<pre style="background-color:#FFFFFF;white-space:pre-wrap;overflow:auto;"><span style="color:#0000FF;">public</span><span style="color:#000000;"> </span><span style="color:#0000FF;">override</span><span style="color:#000000;"> </span><span style="color:#0000FF;">bool</span><span style="color:#000000;"> IsApplicable(SqlCommand sqlCommand)
{ Assert.ArgumentNotNull(sqlCommand, </span><span style="color:#800000;">"</span><span style="color:#800000;">sqlCommand</span><span style="color:#800000;">"</span><span style="color:#000000;">); </span><span style="color:#0000FF;">return</span><span style="color:#000000;"> (sqlCommand.HasPlaceholder(</span><span style="color:#800000;">"</span><span style="color:#800000;">MyProfileKey</span><span style="color:#800000;">"</span><span style="color:#000000;">) );
}</span></pre>
<p></p>
<h5>Properties</h5>
<p>Create the following properties:</p>
<div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:e6e94087-0616-4a15-bdc4-4ad31919a732" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<pre style="background-color:#FFFFFF;white-space:pre-wrap;overflow:auto;"><span style="color:#008000;">//</span><span style="color:#008000;"> Properties</span><span style="color:#008000;">
</span><span style="color:#0000FF;">public</span><span style="color:#000000;"> </span><span style="color:#0000FF;">string</span><span style="color:#000000;"> ProfileKeyId
{ </span><span style="color:#0000FF;">get</span><span style="color:#000000;"> { </span><span style="color:#0000FF;">return</span><span style="color:#000000;"> (</span><span style="color:#0000FF;">this</span><span style="color:#000000;">.profileKeyId </span><span style="color:#000000;">??</span><span style="color:#000000;"> </span><span style="color:#0000FF;">string</span><span style="color:#000000;">.Empty); } </span><span style="color:#0000FF;">set</span><span style="color:#000000;"> { Assert.ArgumentNotNull(value, </span><span style="color:#800000;">"</span><span style="color:#800000;">value</span><span style="color:#800000;">"</span><span style="color:#000000;">); </span><span style="color:#0000FF;">this</span><span style="color:#000000;">.profileKeyId </span><span style="color:#000000;">=</span><span style="color:#000000;"> value; }
}</span></pre>
<p></p>
<p>Compile your code and ensure that it is added to your Sitecore bin folder.</p>
<p><em>C:&#92;Inetpub&#92;wwwroot&#92;&lt;site name&gt;&#92;WebSite&#92;bin</em></p>
<p>My next post: Step 3 – <a rel="nofollow" target="_blank" href="http://cbushnell.wordpress.com/2009/10/22/creating-a-report-filter-in-sitecore-oms-4/">Add a Placeholder to your SQL Query</a></p>
</div>
</div>
</div>
</div>
</div>
</div> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/cbushnell.wordpress.com/322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cbushnell.wordpress.com/322/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/cbushnell.wordpress.com/322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cbushnell.wordpress.com/322/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/cbushnell.wordpress.com/322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cbushnell.wordpress.com/322/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/cbushnell.wordpress.com/322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cbushnell.wordpress.com/322/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/cbushnell.wordpress.com/322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cbushnell.wordpress.com/322/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cbushnell.wordpress.com&blog=9791478&post=322&subd=cbushnell&ref=&feed=1"/></div>]]></content:encoded>
         <media:content url="http://0.gravatar.com/avatar/c5c6495ef08d15440e64b4ec73673844?s=96&amp;amp;d=identicon&amp;amp;r=G" medium="image">
            <media:title>cbushnell</media:title>
         </media:content>
         <media:content url="http://cbushnell.files.wordpress.com/2009/10/selectprofilekey_thumb.png" medium="image">
            <media:title>select profile key</media:title>
         </media:content>
         <category>Sitecore OMS reports</category>
      </item>
      <item>
         <title>Quietest…Release…Ever</title>
         <link>http://adeneys.wordpress.com/2009/10/22/quietest-release-ever/</link>
         <description>Sitecore 6.2 was released last night in probably the quietest release Sitecore has done in a long time. Why am I saying it was a quiet release? Well I had no idea it was coming and only found out after reading John West&amp;#8217;s blog and finding a reference to the new version hidden in [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=adeneys.wordpress.com&amp;blog=3885947&amp;post=132&amp;subd=adeneys&amp;ref=&amp;feed=1&quot;/&gt;</description>
         <guid isPermaLink="false">http://adeneys.wordpress.com/2009/10/22/quietest-release-ever/</guid>
         <pubDate>Thu, 22 Oct 2009 05:05:18 -0700</pubDate>
         <content:encoded><![CDATA[<div class='snap_preview'><br /><p>Sitecore 6.2 was released last night in probably the quietest release Sitecore has done in a long time. Why am I saying it was a quiet release? Well I had no idea it was coming and only found out after reading <a rel="nofollow" title="John West's blog" target="_blank" href="http://sitecorejohn.spaces.live.com/Blog">John West&#8217;s blog </a> and finding a reference to the new version hidden in <a rel="nofollow" title="Sitecore WebDAV configuration guide announced" target="_blank" href="http://sitecorejohn.spaces.live.com/blog/cns!960125F1D4A59952!451.entry">one of his posts</a>. Normally I should get an email from Sitecore about new releases, but nothing.</p>
<p>So I&#8217;m doing my part for the publicising of Sitecore 6.2. I don&#8217;t normally post to tell you all about a release you probably already know about, but seeing as though I had no idea about 6.2 being released I&#8217;m assuming a lot of you haven&#8217;t heard yet either.</p>
<p>Anyway reading through the <a rel="nofollow" title="Sitecore 6.x release notes" target="_blank" href="http://sdn.sitecore.net/Products/Sitecore%20V5/Sitecore%20CMS%206/ReleaseNotes/ChangeLog.aspx">release notes for 6.2</a> I am filled with excitement. Some of the features I got a sneak peek at during an MVP only preview of Everest earlier this year. Let me point out a few here.</p>
<p><strong>Word field type:</strong> Sitecore 6.2 includes a brand new field type; the word field. This field uses an Active X control to allow the user to use Word 2007 to edit text fields. This means users who are familiar with word can continue to use it. One caveat of this is of course that you&#8217;ll be lumped with Word&#8217;s awful HTML generation. So if you really don&#8217;t care about compliancy, then go for it <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley'/> .</p>
<p><strong>WebDAV for drag and drop support of uploading media files:</strong> Sitecore 6.2 adds support for webDAV which allows users to drag media files straight from their desktop into the IE window and have those files uploaded into the media library. No more clicking around dialogs, just drag your files onto the Sitecore window.</p>
<p><strong>Zipped icon files:</strong> When copying or zipping a Sitecore install folder, what takes the most time? The icon files of course. Sitecore has included since version 5 a very comprehensive library of icon files, all in different resolutions to really provide a good looking UI. Each icon file is only small, but there are so many of them. And the number of files is what slows down those zip and copy operations. From memory a standard install of Sitecore 6.1 contained about 24,000 files. The standard install of Sitecore 6.2 contains only 7,500 files. This should really help when moving Sitecore installs around.</p>
<p><strong>Index folder default location:</strong> This is <a rel="nofollow" title="Sitecore index folder location" target="_blank" href="http://www.cassidy.dk/blog/sitecore/2009/02/session-state-and-integrated-pipeline.html">a little trick </a> I leant from <a rel="nofollow" title="Mark Cassidy's blog" target="_blank" href="http://www.cassidy.dk/blog/sitecore/">Mark Cassidy</a>. Previously in a default Sitecore install the index folder would exist below the web root. Problem was that at times when packages were being installed or publishes being run with the index updates running crazy IIS would restart the application due to too much file activity (or something like that). So to solve this issue you can add a setting named &#8220;indexFolder&#8221; which provides the location of the index folder. With the indexes outside the webroot the index updates no longer affect the stability of the IIS application. Well, Sitecore 6.2 by default has added this setting into web.config and moved the index folder below the data folder.</p>
<p>And of course there are a heap of other updates, enhancements and bug fixes. Just be careful about the breaking chances in the API (mostly to do with the analytics API, check the release notes).</p> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/adeneys.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/adeneys.wordpress.com/132/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/adeneys.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/adeneys.wordpress.com/132/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/adeneys.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/adeneys.wordpress.com/132/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/adeneys.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/adeneys.wordpress.com/132/"/></a> <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/adeneys.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/adeneys.wordpress.com/132/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=adeneys.wordpress.com&blog=3885947&post=132&subd=adeneys&ref=&feed=1"/></div>]]></content:encoded>
         <media:content url="http://1.gravatar.com/avatar/b4591048ba49c1111162c1db646f4147?s=96&amp;amp;d=identicon&amp;amp;r=G" medium="image">
            <media:title>Alistair Deneys</media:title>
         </media:content>
         <category>Sitecore</category>
      </item>
   </channel>
</rss>
<!-- fe10.pipes.sp1.yahoo.com uncompressed/chunked Fri Nov 20 18:34:50 PST 2009 -->
