<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-18939862</id><updated>2012-01-24T06:32:19.009-08:00</updated><category term='media'/><category term='coveo'/><category term='active directory'/><category term='installation'/><category term='cache'/><category term='news'/><category term='dreamcore'/><category term='new'/><category term='new stuff'/><category term='diagnostics'/><category term='windows server'/><category term='api'/><category term='Sitecore 6.0'/><category term='upgrade'/><category term='presentation'/><category term='browsers'/><category term='exceptions'/><category term='troubleshooting'/><category term='RTE'/><category term='announcement'/><category term='user group'/><category term='Sitecore 6.2'/><category term='ldap'/><category term='configuration'/><category term='enterprise'/><category term='tips'/><category term='Sitecore 6.1'/><category term='performance'/><category term='PartialLanguageFallback'/><category term='integrations'/><category term='staging'/><category term='better know sitecore'/><category term='workflows'/><category term='template manager'/><category term='reporting'/><category term='customization'/><category term='shared source'/><category term='silverlight'/><category term='wysiwyg editor'/><category term='Dreamcore 2011'/><category term='security'/><category term='deployment'/><category term='best practices'/><category term='Sitecore 6'/><category term='proxy items'/><category term='lucene'/><category term='modules'/><category term='sitecore cms'/><category term='monitoring'/><category term='web services'/><category term='common errors'/><category term='sql server'/><category term='sdn'/><category term='ie'/><category term='publishing'/><category term='OMS'/><category term='ui'/><category term='WFFM'/><category term='packager'/><category term='multilingual'/><category term='languages'/><category term='checklist'/><category term='mozilla'/><category term='friday case'/><category term='Page Editor'/><category term='Sitecore 6.4'/><category term='.NET'/><category term='Issues'/><category term='scheduling'/><title type='text'>Sitecore CMS Blog</title><subtitle type='html'>Helping developers build better solutions with Sitecore.
Sharing ideas and best practices with the growing developer community.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default?start-index=101&amp;max-results=100'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>182</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-18939862.post-973622079739866054</id><published>2011-12-19T17:10:00.001-08:00</published><updated>2011-12-19T17:13:04.423-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='installation'/><title type='text'>Installing Sitecore with PowerShell</title><content type='html'>&lt;p&gt;I have more than 30 Sitecore instances on my laptop, and I often need to have a clean of a specific version/revision of the product done quick.&lt;/p&gt;  &lt;p&gt;With all the love PowerShell is having around Sitecore community, I have dreamed up a quick install script that performs the following actions:&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt; &lt;ul&gt; &lt;li&gt;reads incoming parameters (you can just say –latest or –recommended) and parses versions.config file to validate the version  &lt;li&gt;downloads a manual distributive from a local network share to a temp folder  &lt;li&gt;unzips it in a target web root dir  &lt;li&gt;creates an app pool  &lt;li&gt;creates an IIS site  &lt;li&gt;modifies hosts file  &lt;li&gt;modifies web.config and connectionStrings.config  &lt;li&gt;attaches the databases  &lt;li&gt;opens IE with the newly installed instance&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Check out this quick demo:&lt;/p&gt; &lt;div style="padding-bottom: 0px; padding-left: 0px; width: 425px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:53357c8b-5919-4e32-8c25-305d27c17a37:df34abc1-fc86-4090-98f1-baaf2c87f71c" class="wlWriterEditableSmartContent"&gt;&lt;embed src="http://www.youtube.com/v/h7z5slf82gU&amp;amp;rel=0" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/div&gt; &lt;p&gt;What I really like about this script is that it simply demonstrates how easy it is to install Sitecore in a basic dev environment. It is a rather straightforward and transparent process.&lt;/p&gt; &lt;p&gt;How do you install Sitecore on your machines?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-973622079739866054?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/973622079739866054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=973622079739866054' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/973622079739866054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/973622079739866054'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/12/installing-sitecore-with-powershell.html' title='Installing Sitecore with PowerShell'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-4523191526050489318</id><published>2011-11-27T16:44:00.001-08:00</published><updated>2011-11-27T16:44:51.754-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='Page Editor'/><title type='text'>Hidden Gem of Sitecore Page Editor</title><content type='html'>During performance profiling of Page Editor I’ve noticed that the “My Items” button was taking a lot of CPU time to render. &lt;a href="http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/"&gt;ANTS Performance Profiler&lt;/a&gt; was very kind to tell me that with no hesitation.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
If you don’t know what I am talking about, this “My Items” button shows the number of items locked by the context user:&lt;a href="http://lh6.ggpht.com/-zdDmxuxV3Dc/TtLZUm2NOmI/AAAAAAAAg_Q/BxCpy6VWiag/s1600-h/image3.png"&gt;&lt;br /&gt;&lt;img alt="image" border="0" height="77" src="http://lh3.ggpht.com/-kwh-EY1ISBc/TtLZUxgdz3I/AAAAAAAAg_Y/4mTauwovHnM/image_thumb1.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;
and basically runs the following query:&lt;br /&gt;
&lt;pre class="csharpcode"&gt;Database.SelectItems(&lt;span class="str"&gt;"fast://*[@__lock='%\""&lt;/span&gt; + Context.User.Name + &lt;span class="str"&gt;"\"%']"&lt;/span&gt;);&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
 font-size: small;
 color: black;
 font-family: consolas, "Courier New", courier, monospace;
 background-color: #ffffff;
 /*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
 background-color: #f4f4f4;
 width: 100%;
 margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;br /&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
 font-size: small;
 color: black;
 font-family: consolas, "Courier New", courier, monospace;
 background-color: #ffffff;
 /*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
 background-color: #f4f4f4;
 width: 100%;
 margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;br /&gt;
Since I was running on a fairly large customer database, this was quite expensive, specifically, taking more than 200ms.&lt;br /&gt;
One of my colleagues helped me discover that this behavior actually depends on the following setting which is not defined in web.config by default: “WebEdit.ShowNumberOfLockedItemsOnButton” and thus defaults to “true” always.&lt;br /&gt;
So in order to avoid such overhead on every Ribbon.Render, simply introduce this setting in web.config (even better in auto-include config file) and set it to “false”:&lt;br /&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;setting&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="WebEdit.ShowNumberOfLockedItemsOnButton"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="false"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
 font-size: small;
 color: black;
 font-family: consolas, "Courier New", courier, monospace;
 background-color: #ffffff;
 /*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
 background-color: #f4f4f4;
 width: 100%;
 margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;br /&gt;
This should definitely speed things up for everyone in Page Editor.&lt;br /&gt;Please share if this made the difference for your installation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-4523191526050489318?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/4523191526050489318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=4523191526050489318' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/4523191526050489318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/4523191526050489318'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/11/hidden-gem-of-sitecore-page-editor.html' title='Hidden Gem of Sitecore Page Editor'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-kwh-EY1ISBc/TtLZUxgdz3I/AAAAAAAAg_Y/4mTauwovHnM/s72-c/image_thumb1.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-5922924486411045476</id><published>2011-11-11T14:43:00.001-08:00</published><updated>2011-11-11T14:49:42.861-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='announcement'/><title type='text'>Sitecore Analytics Database Manager</title><content type='html'>Great news! Our brilliant engineers from the Customer Service Department developed a very useful and, I would say, critically important tool that helps Sitecore administrators in maintenance activities on the OMS 1.x database. &lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
First off, it is well integrated into Sitecore’s Control Panel:  &lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/-vkS7hIrSFl4/Tr2mVDxpqlI/AAAAAAAAf5Q/Uge6hxEy60w/s1600-h/SNAGHTML15cd752%25255B4%25255D.png"&gt;&lt;img alt="SNAGHTML15cd752" border="0" height="218" src="http://lh6.ggpht.com/-ZGE5FlbI_lM/Tr2mVpTChpI/AAAAAAAAf5Y/43C9poQhHlQ/SNAGHTML15cd752_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="SNAGHTML15cd752" width="431" /&gt;&lt;/a&gt; &lt;br /&gt;
and provides a really nice wizard based interface that guides the user through main admin and maintenance tasks: &lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/-8LIM24MCAbg/Tr2mWXFyrvI/AAAAAAAAf5g/tiG4tsf3bJI/s1600-h/image%25255B15%25255D.png"&gt;&lt;img alt="image" border="0" height="476" src="http://lh5.ggpht.com/-MWR0obWbvo8/Tr2mW4Wg-wI/AAAAAAAAf5o/_-6ePCSLqNs/image_thumb%25255B9%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="528" /&gt;&lt;/a&gt; &lt;br /&gt;
Looks very native if you ask me. &lt;br /&gt;
Here is where you can find more about it:&lt;br /&gt;&lt;a href="http://trac.sitecore.net/AnalyticsDatabaseManager"&gt;http://trac.sitecore.net/AnalyticsDatabaseManager&lt;/a&gt;  &lt;br /&gt;
And here is a snippet from the project’s description:  &lt;br /&gt;
&lt;em&gt;This module provides a set of tasks that might be helpful to optimize the using of Sitecore Analytics…&lt;/em&gt;  &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Clean up the unnecessary data from the Analytics database.&lt;/em&gt;  &lt;/li&gt;
&lt;li&gt;&lt;em&gt;Remove BOTs sessions.&lt;/em&gt;  &lt;/li&gt;
&lt;li&gt;&lt;em&gt;Perform the indexes rebuilding of the Analytics database.&lt;/em&gt;  &lt;/li&gt;
&lt;li&gt;&lt;em&gt;Quickly create a backup of the analytics data.&lt;/em&gt;  &lt;/li&gt;
&lt;li&gt;&lt;em&gt;Synchronize the Analytics Definitions to use the clean Analytics database on the existing solution.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
An absolute must have for any Sitecore implementations with OMS enabled.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-5922924486411045476?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/5922924486411045476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=5922924486411045476' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/5922924486411045476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/5922924486411045476'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/11/sitecore-analytics-database-manager.html' title='Sitecore Analytics Database Manager'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/-ZGE5FlbI_lM/Tr2mVpTChpI/AAAAAAAAf5Y/43C9poQhHlQ/s72-c/SNAGHTML15cd752_thumb%25255B1%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-9113583389268117256</id><published>2011-10-31T15:40:00.001-07:00</published><updated>2011-10-31T15:40:36.893-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='user group'/><title type='text'>Sitecore Virtual User Group Recording</title><content type='html'>&lt;p&gt;A bit over a week ago I had a pleasure speaking at the &lt;a href="http://sitecoreug.org/"&gt;Sitecore Virtual User Group&lt;/a&gt;, here is the recording for the ones who missed it.&lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:8af96e40-a6b9-4e78-b040-37a7f2d88e36" class="wlWriterEditableSmartContent"&gt;&lt;div id="e44e255b-0bd1-4b12-b984-c278b7d51969" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=m9av3C_tPH8#!" target="_new"&gt;&lt;img src="http://lh6.ggpht.com/-3gMbAHSHCXY/Tq8j5PySVnI/AAAAAAAAf2k/9fLB--bEHKw/videoab75ada094ac%25255B14%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('e44e255b-0bd1-4b12-b984-c278b7d51969'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/m9av3C_tPH8#!?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/m9av3C_tPH8#!?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="width:448px;clear:both;font-size:.8em"&gt;My Sitecore Virtual User Group Presentation&lt;/div&gt;&lt;/div&gt; &lt;p&gt;I will be following up with a blog post series containing some of the code samples.&lt;/p&gt; &lt;p&gt;Let me know what you think!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-9113583389268117256?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/9113583389268117256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=9113583389268117256' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/9113583389268117256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/9113583389268117256'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/10/sitecore-virtual-user-group-recording.html' title='Sitecore Virtual User Group Recording'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/-3gMbAHSHCXY/Tq8j5PySVnI/AAAAAAAAf2k/9fLB--bEHKw/s72-c/videoab75ada094ac%25255B14%25255D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-4927389348987732232</id><published>2011-10-17T13:19:00.000-07:00</published><updated>2011-10-17T13:20:41.541-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='best practices'/><title type='text'>Sitecore Media Library Performance Optimization Checklist</title><content type='html'>Here is a quick checklist that you can use in order to get more performance out of your Sitecore Media Library’s delivery.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/-Y_IP05wJao4/TpyNERqlo4I/AAAAAAAAf14/4V67Umy9zw0/s1600-h/media_library%25255B14%25255D.png"&gt;&lt;img alt="media_library" border="0" height="180" src="http://lh3.ggpht.com/-D3ExSvsD0lk/TpyNE86LUWI/AAAAAAAAf2A/xbVSs_0CBMk/media_library_thumb%25255B8%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="media_library" width="377" /&gt;&lt;/a&gt;&lt;br /&gt;
1. Ensure data/item/prefetch caches are of a sufficient size.&lt;br /&gt;
&lt;ul&gt; &lt;ul&gt;
&lt;li&gt;Check our &lt;a href="http://%20http//sdn.sitecore.net/upload/sitecore6/sc62keywords/cache_configuration_reference_a4.pdf"&gt;cache configuration reference&lt;/a&gt;  &lt;/li&gt;
&lt;li&gt;The following shared source modules should be useful in this exercise:&lt;br /&gt;&lt;a href="http://trac.sitecore.net/CachingManager"&gt;http://trac.sitecore.net/CachingManager&lt;/a&gt;&lt;br /&gt;&lt;a href="http://trac.sitecore.net/CacheTuner"&gt;http://trac.sitecore.net/CacheTuner&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
2. Ensure client caching is properly configured (MediaResponse.XXX settings).&lt;br /&gt;
3. Media Library structure – make sure the tree is balanced.&lt;br /&gt;
4. Change MediaLinkPrefix from ~/media to something else, for example "-/media":&lt;br /&gt;
&lt;blockquote&gt;
- set the value of the “Media.MediaLinkPrefix” to alternative prefix: &lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;div&gt;
&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;setting&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;="Media.MediaLinkPrefix"&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;="-/media"&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
-add the following line to the customHandlers section: &lt;br /&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;customHandlers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; 
   &lt;strong&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;handler&lt;/span&gt; &lt;span class="attr"&gt;trigger&lt;/span&gt;&lt;span class="kwrd"&gt;="-/media/"&lt;/span&gt; &lt;span class="attr"&gt;handler&lt;/span&gt;&lt;span class="kwrd"&gt;="sitecore_media.ashx"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/strong&gt; 
   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;handler&lt;/span&gt; &lt;span class="attr"&gt;trigger&lt;/span&gt;&lt;span class="kwrd"&gt;="~/media/"&lt;/span&gt; &lt;span class="attr"&gt;handler&lt;/span&gt;&lt;span class="kwrd"&gt;="sitecore_api.ashx"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
   …
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;customHandlers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
 font-size: small;
 color: black;
 font-family: consolas, "Courier New", courier, monospace;
 background-color: #ffffff;
 /*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
 background-color: #f4f4f4;
 width: 100%;
 margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;div&gt;
This really helps for high traffic websites. Apparently tilde in the path forces different way of resolving the system permissions on a resource on Windows Server.&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div&gt;
5. Consider IIS kernel and/or output caching, but keep in mind &lt;a href="http://sdn.sitecore.net/Products/Sitecore%20V5/Sitecore%20CMS%206/ReleaseNotes/KnownIssues%20Recommended/ASP%20NET%20Output%20Caching.aspx"&gt;this consideration&lt;/a&gt;.&lt;/div&gt;
6. Consider adding other edge caching options in front of the web servers.&lt;br /&gt;
7. Leverage CDN like AKAMAI.&lt;br /&gt;
&lt;blockquote&gt;
Some links and food for thought:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://sdn.sitecore.net/Scrapbook/Changing%20media%20URLs%20in%20Sitecore%206.aspx"&gt;http://sdn.sitecore.net/Scrapbook/Changing%20media%20URLs%20in%20Sitecore%206.aspx&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sitecoredevelopment.com/en/MarkGraber/Using-Akamai-Net-Storage-for-Sitecore-Media-Items.aspx"&gt;http://www.sitecoredevelopment.com/en/MarkGraber/Using-Akamai-Net-Storage-for-Sitecore-Media-Items.aspx&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://sdn.sitecore.net/Forum/ShowPost.aspx?postid=18768"&gt;http://sdn.sitecore.net/Forum/ShowPost.aspx?postid=18768&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://sdn.sitecore.net/SDN5/Forum/ShowPost.aspx?postid=27646"&gt;http://sdn.sitecore.net/SDN5/Forum/ShowPost.aspx?postid=27646&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://sdn.sitecore.net/SDN5/Forum/ShowPost.aspx?postid=15132"&gt;http://sdn.sitecore.net/SDN5/Forum/ShowPost.aspx?postid=15132&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://sdn.sitecore.net/SDN5/Forum/ShowPost.aspx?postid=26647"&gt;http://sdn.sitecore.net/SDN5/Forum/ShowPost.aspx?postid=26647&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
8. Use dedicated “Sitecore media server” (e.g. replace hostname in media links to point to another Sitecore instance; would require some customization).&lt;br /&gt;
&lt;blockquote&gt;
Some great stuff here:&lt;/blockquote&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://mcore.wordpress.com/2009/11/02/dedicated-image-server-and-sitecore/"&gt;http://mcore.wordpress.com/2009/11/02/dedicated-image-server-and-sitecore/&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mcore.wordpress.com/2011/01/02/dedicated-image-server-in-sitecore-part-2/"&gt;http://mcore.wordpress.com/2011/01/02/dedicated-image-server-in-sitecore-part-2/&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
Thanks to the guys from our brilliant customer service for helping me to come up with a more complete list.&lt;br /&gt;
&lt;hr /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-4927389348987732232?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/4927389348987732232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=4927389348987732232' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/4927389348987732232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/4927389348987732232'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/10/sitecore-media-library-performance.html' title='Sitecore Media Library Performance Optimization Checklist'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-D3ExSvsD0lk/TpyNE86LUWI/AAAAAAAAf2A/xbVSs_0CBMk/s72-c/media_library_thumb%25255B8%25255D.png?imgmax=800' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-4404085680443152965</id><published>2011-10-14T08:56:00.001-07:00</published><updated>2011-10-14T09:06:48.056-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='announcement'/><title type='text'>Upcoming Sitecore Users’ Virtual Group</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-l4wWDQ1KLWo/TpheAkhpH-I/AAAAAAAAf1Y/n5amgZ7_kgI/s1600/ug_logo.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="126" src="http://3.bp.blogspot.com/-l4wWDQ1KLWo/TpheAkhpH-I/AAAAAAAAf1Y/n5amgZ7_kgI/s320/ug_logo.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
Exciting news! I was invited to present at the upcoming Sitecore Users’ Virtual Group which will be held next week on Wednesday (Oct 19th) at Noon Pacific, 3:00 PM Eastern, 8:00 PM UK. &lt;a href="http://hhogdev.com/"&gt;Thanks guys&lt;/a&gt;!&lt;br /&gt;
So the topic would be quite random, “&lt;a href="http://sitecoreug.org/events/Latest%20Prototypes%20from%20Sitecore%20US"&gt;Latest cool prototypes from Sitecore US lab&lt;/a&gt;”. Since I am not in product development, rather “on-the-field” kind of Sitecorian, don’t expect any of the new MVC, Sitecore 7, but expect the demos of the following components produced for the customer needs I witness during my consulting engagements with partners and customers:&lt;br /&gt;
- Updates on the following two hottest modules produced. Both contain some major enhancements based on &lt;em&gt;your&lt;/em&gt; feedback (thank you)!&lt;br /&gt;
&lt;blockquote&gt;
Sitecore.Search extension aka AdvancedDatabaseCrawler&lt;br /&gt;
Partial Language Fallback&lt;/blockquote&gt;
- Other prototypes and super experimental stuff like ContentSilo, NameValueEx field, WorkflowBundle and more (if we have time)!&lt;br /&gt;
If this sounds interesting, see &lt;a href="http://sitecoreug.org/events/Latest%20Prototypes%20from%20Sitecore%20US"&gt;this event page&lt;/a&gt; for more details and click &lt;a href="http://sitecoreug.org/registration"&gt;here&lt;/a&gt; to register. Space is limited.&lt;br /&gt;
Hope it will be informative and fun! See you soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-4404085680443152965?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/4404085680443152965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=4404085680443152965' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/4404085680443152965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/4404085680443152965'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/10/upcoming-sitecore-users-virtual-group.html' title='Upcoming Sitecore Users’ Virtual Group'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-l4wWDQ1KLWo/TpheAkhpH-I/AAAAAAAAf1Y/n5amgZ7_kgI/s72-c/ug_logo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-2098879421313452059</id><published>2011-10-11T10:00:00.000-07:00</published><updated>2011-10-14T09:00:11.570-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='multilingual'/><title type='text'>Changing Field Sharing Settings in Sitecore</title><content type='html'>So I’ve been working on a C# script which job is to change field value sharing settings on a Sitecore template field from &lt;em&gt;Versioned&lt;/em&gt; to &lt;em&gt;Shared,&lt;/em&gt; something you can do in the Template Manager application by checking the &lt;em&gt;Shared &lt;/em&gt;checkbox and saving.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;a href="http://lh5.ggpht.com/-CfYw855OpGI/TpN8HbQ8pCI/AAAAAAAAf1E/TMNf-4RZp8o/s1600-h/image%25255B7%25255D.png"&gt;&lt;img alt="image" border="0" height="242" src="http://lh5.ggpht.com/-5gyYyhEvNYI/TpN8ImgP57I/AAAAAAAAf1I/SkO0cjETq18/image_thumb%25255B3%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="615" /&gt;&lt;/a&gt;&lt;br /&gt;
One thought came to me. What will actually happen if I have two language versions of single item with two different values?&amp;nbsp;Consider the following example. I have a versioned image field with two different values in en-US and es-ES:&lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/-j3eR9aJGt6E/TpN8JuswuxI/AAAAAAAAf1M/OnK1Y20SF14/s1600-h/SNAGHTML20110fe0%25255B4%25255D.png"&gt;&lt;img alt="SNAGHTML20110fe0" border="0" height="256" src="http://lh6.ggpht.com/-zzCnu720t0g/TpN8K1hzq3I/AAAAAAAAf1Q/r77u-EjgU2A/SNAGHTML20110fe0_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="SNAGHTML20110fe0" width="661" /&gt;&lt;/a&gt;&lt;br /&gt;
So what would be the end result of making the “Image” field shared?&amp;nbsp;It’s actually pretty interesting what happens after you save an item that is a template field definition.&lt;br /&gt;
&lt;br /&gt;
So when a field definition item is saved, DataEngine is firing “ItemSaved” event, and the TemplateEngine has a handler for it which basically checks if either “Unversioned” or “Shared” attributes of the field definition item were changed. If there were, it runs the process of updating the field sharing settings which eventually trickles down to the data provider level where the call is made to a specially designed “FieldSharingConveter” class.&lt;br /&gt;&lt;br /&gt;If we are making a versioned field shared, the following method is called:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;MakeSharedFromVersioned(ID fieldId)&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;MoveDataToSharedFromVersioned(ID fieldId, ID itemId)&lt;/span&gt;&lt;br /&gt;within here there is a SQL query that basically selects the field value from the most recently updated version of the same item.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;
So basically in order to minimize data loss situations, Sitecore will always use the most recent field value for new shared value.&amp;nbsp;Thought it’s rather interesting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-2098879421313452059?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/2098879421313452059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=2098879421313452059' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/2098879421313452059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/2098879421313452059'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/10/changing-field-sharing-settings-in.html' title='Changing Field Sharing Settings in Sitecore'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/-5gyYyhEvNYI/TpN8ImgP57I/AAAAAAAAf1I/SkO0cjETq18/s72-c/image_thumb%25255B3%25255D.png?imgmax=800' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-8722355359221517137</id><published>2011-09-07T10:33:00.001-07:00</published><updated>2011-09-07T11:35:50.765-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='announcement'/><title type='text'>Sitecore North America Technical Insider Call</title><content type='html'>&lt;a href="http://lh4.ggpht.com/-JEShHYtQXhQ/TmevMiIatdI/AAAAAAAAfw4/P-6E_llCs6Y/s1600-h/top%252520secret%252520folder%25255B7%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 20px 8px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="top secret folder" border="0" alt="top secret folder" align="left" src="http://lh6.ggpht.com/-WR_7iX_ne-E/TmevSoyQmdI/AAAAAAAAfw8/i8wPvOtQUYQ/top%252520secret%252520folder_thumb%25255B5%25255D.png?imgmax=800" width="147" height="118"&gt;&lt;/a&gt;Sitecore USA will be conducting a brief 30 minute call for Sitecore Certified Developers tomorrow at 10 AM Pacific. Here is what we will be covering:&lt;br&gt;- Some quick announcements&lt;br&gt;- State of the Union on Sitecore recommended version (new stuff)&lt;br&gt;- Sneak preview of the brand new and completely awesome Data Access Training&lt;br&gt;- Update to Search Extension Shared Source Project aka AdvancedDatabaseCrawler v2&lt;br&gt;&lt;br&gt; &lt;a name='more'&gt;&lt;/a&gt; &lt;p&gt;If you are interested and not yet registered, follow this &lt;a href="https://sitecore.webex.com/sitecore/onstage/g.php?t=a&amp;amp;d=804392746"&gt;link&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;In order to register for all future NA Technical Insider Calls, use the following landing page:&lt;br&gt;&lt;a href="http://www.sitecore.net/Landing/Sitecore_Insider"&gt;http://www.sitecore.net/Landing/Sitecore_Insider&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-8722355359221517137?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/8722355359221517137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=8722355359221517137' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/8722355359221517137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/8722355359221517137'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/09/sitecore-north-america-technical.html' title='Sitecore North America Technical Insider Call'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/-WR_7iX_ne-E/TmevSoyQmdI/AAAAAAAAfw8/i8wPvOtQUYQ/s72-c/top%252520secret%252520folder_thumb%25255B5%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-2809226392499569969</id><published>2011-08-26T10:00:00.000-07:00</published><updated>2011-09-08T10:40:16.476-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='friday case'/><title type='text'>Unapproved content gets published [Friday Case]</title><content type='html'>Today in a &lt;a href="http://sitecoreblog.alexshyba.com/search/label/friday%20case"&gt;Friday Case&lt;/a&gt; category, which features support cases causing to pull my hair out, a very interesting issue I’ve had with a customer reporting that unapproved content was going live quite unexpectedly.&lt;br /&gt;
After witnessing the issue with my own eyes when an item just created and not pushed via workflow was magically showing up in production after a few minutes, I decided to investigation Sitecore configuration. This revealed a PublishAgent that was enabled to run frequently, but nothing else.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;agent&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="Sitecore.Tasks.PublishAgent"&lt;/span&gt; &lt;span class="attr"&gt;method&lt;/span&gt;&lt;span class="kwrd"&gt;="Run"&lt;/span&gt; &lt;span class="attr"&gt;interval&lt;/span&gt;&lt;span class="kwrd"&gt;="00:01:00"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;desc&lt;/span&gt;&lt;span class="kwrd"&gt;="source database"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;master&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;desc&lt;/span&gt;&lt;span class="kwrd"&gt;="target database"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;web&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;desc&lt;/span&gt;&lt;span class="kwrd"&gt;="mode (full or incremental)"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;incremental&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;desc&lt;/span&gt;&lt;span class="kwrd"&gt;="languages"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;en, da&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;agent&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;br /&gt;
After reproducing this on a local single server instance, I’ve narrowed it down to the “languages” parameter being the issue.&lt;br /&gt;By default all PublishAgents configured with both “English” and “Danish” languages processed. What happens within the PublishAgent is pretty interesting.&lt;br /&gt;
1. The “languages” parameter (“en, da”) is parsed with the following code:&lt;br /&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; List&amp;lt;Language&amp;gt; ParseLanguages(&lt;span class="kwrd"&gt;string&lt;/span&gt; languages)
{
    List&amp;lt;Language&amp;gt; list = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;Language&amp;gt;();
    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; str &lt;span class="kwrd"&gt;in&lt;/span&gt; languages.Split(&lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;char&lt;/span&gt;[] { &lt;span class="str"&gt;','&lt;/span&gt; }))
    {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (str.Length &amp;gt; 0)
        {
            &lt;strong&gt;&lt;u&gt;list.Add(Language.Parse(str.Trim()));
&lt;/u&gt;&lt;/strong&gt;        }
    }
    &lt;span class="kwrd"&gt;return&lt;/span&gt; list;
}&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;br /&gt;
2. Down below, the Parse() method calls Language.TryParse() which basically boils down to the following checks:&lt;br /&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (LanguageManager.IsValidLanguageName(name))

&lt;span class="kwrd"&gt;if&lt;/span&gt; (LanguageManager.LanguageRegistered(name))

&lt;span class="kwrd"&gt;if&lt;/span&gt; (LanguageManager.RegisterLanguage(name))&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;br /&gt;
If all these checks pass, the language name is considered to be valid. What’s interesting here is that even languages that are not created/registered within Sitecore under /system/languages will be parsed successfully. In our case there is no language with ISO code “da” created/registered in Sitecore, however, as far as Language.TryParse() is concerned, this language is valid and will be passed onto the publisher.&lt;br /&gt;
The publisher will try and get an item in “da” language from ItemManager for further processing. Due to the nature of Sitecore to decouple items from versions, this operation will actually return an item. This item will be returned as “empty” or “naked” with no versions, but there will be an instance.&lt;br /&gt;
So the publisher will process this item and treat it as “approved” and publish it to the target database.&lt;br /&gt;
While we can speculate on whether this is expected behavior or not, there is an easy solution for this problem. Simply make sure your PublishAgent is not configured to process any languages that do not exist within Sitecore. For our example this means modifying the “languages” parameter:&lt;br /&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;agent&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="Sitecore.Tasks.PublishAgent"&lt;/span&gt; &lt;span class="attr"&gt;method&lt;/span&gt;&lt;span class="kwrd"&gt;="Run"&lt;/span&gt; &lt;span class="attr"&gt;interval&lt;/span&gt;&lt;span class="kwrd"&gt;="00:01:00"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;desc&lt;/span&gt;&lt;span class="kwrd"&gt;="source database"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;master&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;desc&lt;/span&gt;&lt;span class="kwrd"&gt;="target database"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;web&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;desc&lt;/span&gt;&lt;span class="kwrd"&gt;="mode (full or incremental)"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;incremental&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;strong&gt;&lt;u&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;desc&lt;/span&gt;&lt;span class="kwrd"&gt;="languages"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;en&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;agent&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;br /&gt;
Hope this helps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-2809226392499569969?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/2809226392499569969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=2809226392499569969' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/2809226392499569969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/2809226392499569969'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/08/unapproved-content-gets-published.html' title='Unapproved content gets published [Friday Case]'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-6678865323709992934</id><published>2011-08-24T17:21:00.001-07:00</published><updated>2011-08-25T13:06:46.637-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shared source'/><category scheme='http://www.blogger.com/atom/ns#' term='PartialLanguageFallback'/><title type='text'>Partial Language Fallback Module Update</title><content type='html'>Today I pushed a small update to the &lt;a href="http://trac.sitecore.net/LanguageFallback/browser/Trunk/Sitecore.SharedSource.PartialLanguageFallback"&gt;Partial Language Fallback&lt;/a&gt; module which I introduced &lt;a href="http://sitecoreblog.alexshyba.com/2010/11/approaching-language-fallback-with.html"&gt;a while back&lt;/a&gt;. Check out this quick screencast below. For the full list of changes hit “&lt;a href="http://sitecoreblog.alexshyba.com/2011/08/partial-language-fallback-module-update.html"&gt;read more&lt;/a&gt;”.&lt;br /&gt;
&lt;a href="http://resources.alexshyba.com/screencasts/fallback/"&gt;&lt;img alt="image" border="0" height="197" src="http://lh4.ggpht.com/-oKK4aOS21gg/TlWhUcO9_9I/AAAAAAAAfvg/AiuAUBQo3so/image%25255B5%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Included changes:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Instead of weird looking yellow valid bar that is meant to highlight a fallback field value is now deprecated in favor of a much better integrated label next to the field title: &lt;/li&gt;
&lt;/ul&gt;
&lt;a href="http://lh4.ggpht.com/-RTgAf0ZENfk/TlWVhyQDxvI/AAAAAAAAfvY/T7Mj6GHiI6g/s1600-h/image%25255B3%25255D.png"&gt;&lt;img alt="image" border="0" height="82" src="http://lh3.ggpht.com/-DJQwrGp0Vwk/TlWVjbsMJdI/AAAAAAAAfvc/RoC2XPzWICU/image_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="156" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Default configuration changes:  &lt;ul&gt;
&lt;li&gt;The “enableFallback” parameter on the "website" is now set to “true” by default  &lt;/li&gt;
&lt;li&gt;renderContentEditor pipeline changes for the grayed out label to work. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Fixed a problem with fallback values picked up from SV when fallback item had no versions (thanks Steve)  &lt;/li&gt;
&lt;li&gt;Misc code refactoring  &lt;/li&gt;
&lt;li&gt;Sitecore package for 6.4 is now included. Thanks &lt;a href="http://www.techphoria414.com/Blog.aspx"&gt;Nick&lt;/a&gt;! &lt;/li&gt;
&lt;/ul&gt;
Enjoy!    &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-6678865323709992934?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/6678865323709992934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=6678865323709992934' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/6678865323709992934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/6678865323709992934'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/08/partial-language-fallback-module-update.html' title='Partial Language Fallback Module Update'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/-oKK4aOS21gg/TlWhUcO9_9I/AAAAAAAAfvg/AiuAUBQo3so/s72-c/image%25255B5%25255D.png?imgmax=800' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-3564857922773390449</id><published>2011-08-19T14:59:00.001-07:00</published><updated>2011-08-19T15:50:59.140-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='customization'/><title type='text'>Sitecore Output Caching: Kick it up a Notch</title><content type='html'>&lt;a href="http://lh6.ggpht.com/-Ie9y8alf5Nc/Tk7cfjEtdaI/AAAAAAAAftE/ZXSs02Gg5AA/s1600-h/image3.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 17px 1px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://lh6.ggpht.com/-UHQVl-TuFAY/Tk7cg9xUsjI/AAAAAAAAftI/l58TlrVHuvM/image_thumb1.png?imgmax=800" width="203" height="242"&gt;&lt;/a&gt; Ever wondered how Sitecore caches works? It is pretty cool, actually. Sitecore can cache the output of any presentation component that it is aware of (Sublayout, WebControl, XSL Rendering). Basically, this output may vary on data context (Context Item or Datasource), device, whether user is logged in or not, parameters passed to the rendering, query string and Context user: &lt;br&gt;This gives a ton of options and in most cases this is sufficient, but what if the output of your rendering depends on inner logic embedded within the control? Sometimes you could solve this with VaryByParm and by passing different parameters to the rendering, but what if that’s not the case?&lt;br&gt;This is exactly the use case I have been presented during another onsite visit with a customer.&lt;br&gt;Here is a very simple way of extending the cache variation logic for a Sublayout.&lt;br&gt; &lt;a name='more'&gt;&lt;/a&gt;&lt;em&gt;If you are Sitecore blackbelt, consider moving on to the “&lt;strong&gt;Solution&lt;/strong&gt;” part below.&lt;/em&gt;&lt;br&gt;Consider the following example.&lt;br&gt;We have a new list control which we want to personalize by “audience”. When user is authenticated, we imagine a process that “attaches” the current user session with a particular “audience type” and saves this in a cookie. In order to simulate this, I’ve created a control called “AudienceSwitcher” which sets the current “Audience Type” explicitly for this sake of this example:&lt;br&gt;&lt;a href="http://lh5.ggpht.com/-LmII0JxM0BE/Tk7chyfTu_I/AAAAAAAAftM/lFS-gDCS3wc/s1600-h/SNAGHTML155c400%25255B5%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML155c400" border="0" alt="SNAGHTML155c400" src="http://lh6.ggpht.com/-34jFF1x95PU/Tk7ciwWYu3I/AAAAAAAAftQ/ZyhcUXXYFv4/SNAGHTML155c400_thumb%25255B2%25255D.png?imgmax=800" width="355" height="237"&gt;&lt;/a&gt;&lt;br&gt;Whenever “Audience Type” changes, the following method is called:&lt;br&gt;&lt;br&gt; &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;AudienceManager.SetCurrentAudience(selectedAudience);&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;br&gt;AudienceManager is a custom class that incorporates all audience related actions, very simple:&lt;br&gt;
&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; AudienceManager {&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;  &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;const&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; Key = &lt;span style="color: #006080"&gt;"audience"&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;  &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; CurrentAudienceName {&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;      get&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;      {&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;         var key = CurrentAudienceKey;&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;         &lt;span style="color: blue"&gt;if&lt;/span&gt; (ID.IsID(key)){&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            var audienceItem = Sitecore.Context.Database.GetItem(key);&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: blue"&gt;if&lt;/span&gt; (audienceItem != &lt;span style="color: blue"&gt;null&lt;/span&gt;) &lt;span style="color: blue"&gt;return&lt;/span&gt; audienceItem.DisplayName;&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;         }&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt;.Empty;&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;         }&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;      }&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;      &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; CurrentAudienceKey {&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;         get { &lt;span style="color: blue"&gt;return&lt;/span&gt; WebUtil.GetCookieValue(Key) ?? AudienceTypes.Consumer; }&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;      }&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;      &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; SetCurrentAudience(&lt;span style="color: blue"&gt;string&lt;/span&gt; audience){ &lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        WebUtil.SetCookieValue(Key, audience);&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;      }&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;This has an effect on the NewsList control, which renders only the news items that are targeted to a specific audience type:&lt;br&gt;
&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: blue"&gt;&amp;amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;asp:Repeater&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="NewsRepeater"&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;   &lt;span style="color: blue"&gt;&amp;amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;ItemTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;      &lt;span style="color: blue"&gt;&amp;amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;li&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;amp;gt;&lt;/span&gt;&lt;span style="background-color: yellow"&gt;&amp;amp;lt;% DataBinder.Eval(Container.DataItem, "Name") &lt;/span&gt;&lt;span style="background-color: yellow"&gt;%&amp;amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;li&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;   &lt;span style="color: blue"&gt;&amp;amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;ItemTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: blue"&gt;&amp;amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;asp:Repeater&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;   &lt;span style="color: blue"&gt;if&lt;/span&gt;(!IsPostBack)&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;   {&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;      var news = Sitecore.Context.Database.SelectItems(&lt;span style="color: #006080"&gt;"/sitecore/content/home/news//*[contains(@audiencetype, '{0}')]"&lt;/span&gt;.FormatWith(AudienceManager.CurrentAudienceKey));&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;      NewsRepeater.DataSource = news;&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;      NewsRepeater.DataBind();&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;   }&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;All news items are stored under /home/news and tagged to an audience via a multilist:&lt;br&gt;&lt;a href="http://lh3.ggpht.com/-Qa5KF6UBl_s/Tk7ckGSQiMI/AAAAAAAAftU/kiUcJei41uE/s1600-h/image%25255B5%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-tAgJ-NfmdgY/Tk7cluG3OPI/AAAAAAAAftY/sSYbK-YNH8U/image_thumb%25255B2%25255D.png?imgmax=800" width="585" height="138"&gt;&lt;/a&gt;&lt;br&gt;The “Audience Types” referenced from the multilist above are stored in a separate area in the content tree:&lt;br&gt;&lt;a href="http://lh4.ggpht.com/-tz2S6tl56QE/Tk7cm8Hm5FI/AAAAAAAAftc/w2XRJ54fo5k/s1600-h/image%25255B9%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-BfXinbpX8c8/Tk7cnUHNiWI/AAAAAAAAftg/2TpVP6IXP7I/image_thumb%25255B4%25255D.png?imgmax=800" width="160" height="100"&gt;&lt;/a&gt;&lt;br&gt;After verifying that our NewsList control is working correctly and displaying different news for different audiences:&lt;br&gt;&lt;em&gt;for consumer:&lt;/em&gt;&lt;br&gt;&lt;a href="http://lh6.ggpht.com/-ALk5wnwE_vU/Tk7coOAPKKI/AAAAAAAAftk/c9BbI63LSYk/s1600-h/image%25255B13%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-nKe0BSDbg6Y/Tk7cpfiyYTI/AAAAAAAAfto/w2VsCzy6y_0/image_thumb%25255B6%25255D.png?imgmax=800" width="358" height="254"&gt;&lt;/a&gt;&lt;br&gt;&lt;em&gt;for travel agent&lt;/em&gt;&lt;br&gt;&lt;a href="http://lh4.ggpht.com/--B6s-K6rIX4/Tk7cp5guk9I/AAAAAAAAfts/i3QrwaoZzow/s1600-h/SNAGHTML1647516%25255B4%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML1647516" border="0" alt="SNAGHTML1647516" src="http://lh4.ggpht.com/-YXhJ8KSe1CM/Tk7cqqXHbqI/AAAAAAAAftw/MhnQbhSQrAc/SNAGHTML1647516_thumb%25255B1%25255D.png?imgmax=800" width="344" height="250"&gt;&lt;/a&gt;&lt;br&gt;Let’s try and cache it this rendering by checking &lt;em&gt;Cacheable&lt;/em&gt; and &lt;em&gt;VaryByData&lt;/em&gt;.&lt;br&gt;&lt;a href="http://lh6.ggpht.com/-tjwoAlPKPxo/Tk7crRJyPZI/AAAAAAAAft0/QkiJzcf5b8U/s1600-h/image%25255B17%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-YCYBQ6TaZ74/Tk7csBX8LYI/AAAAAAAAft4/duP89zc52OI/image_thumb%25255B8%25255D.png?imgmax=800" width="486" height="305"&gt;&lt;/a&gt;&lt;br&gt;If you don’t run live mode, you would need to publish after this.&lt;br&gt;The expected result of this configuration will not be satisfactory. The same output of the NewsList control will be cached once and served up from memory every time it is rendered, no matter what the current “Audience Type” is.&lt;br&gt;&lt;strong&gt;Here is the solution.&lt;/strong&gt;&lt;br&gt;1. Subclass the default Sublayout implementation:&lt;br&gt;
&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; AudienceSublayout : Sitecore.Web.UI.WebControls.Sublayout&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;    &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; GetCacheKey()&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;    {&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;       SiteContext site = Sitecore.Context.Site;&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;       &lt;span style="color: blue"&gt;if&lt;/span&gt; ((Cacheable &amp;amp;amp;&amp;amp;amp; ((site == &lt;span style="color: blue"&gt;null&lt;/span&gt;) || site.CacheHtml)) &amp;amp;amp;&amp;amp;amp; !SkipCaching())&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;       {&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;          &lt;span style="color: blue"&gt;if&lt;/span&gt; (VaryByParm)&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;          {&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;             &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;base&lt;/span&gt;.GetCacheKey() + &lt;span style="color: #006080"&gt;"_#audience:"&lt;/span&gt; + AudienceManager.CurrentAudienceKey;&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;          }&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;  &lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;          &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;base&lt;/span&gt;.GetCacheKey();&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt;       }&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt;  &lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt;  16:&lt;/span&gt;       &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt;.Empty;&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum17"&gt;  17:&lt;/span&gt;    }&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum18"&gt;  18:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;Very basic what we do here. We override the default implementation of the GetCacheKey method which is evaluated by Sitecore’s output caching mechanism every time a control needs to get cached. The key returned by this method needs to uniquely identify the control’s output in the cache collection.&lt;br&gt;Line 10 is the most important, this is where we call our friend AudienceManager and reading the current audience key (basically a value from cookie).&lt;br&gt;2. It’s important to note that this is done only if “VaryByParm” is checked on the control definition item in Sitecore, so we need to make sure it is checked:&lt;br&gt;&lt;a href="http://lh4.ggpht.com/-BeiHLuTUSJY/Tk7csw16BmI/AAAAAAAAft8/f_oC7AMYsdk/s1600-h/image%25255B22%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-CUZU2yTlhFU/Tk7ctUoOl2I/AAAAAAAAfuA/kqzNnLNt2pI/image_thumb%25255B11%25255D.png?imgmax=800" width="202" height="232"&gt;&lt;/a&gt;&lt;br&gt;The last thing you need to do is to wire in the custom AudienceSublayout by overriding the “SublayoutRenderingType” component:&lt;br&gt;3. Compile the following class:&lt;br&gt;
&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; SublayoutRenderingType : Sitecore.Web.UI.SublayoutRenderingType&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;    &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; System.Web.UI.Control GetControl(NameValueCollection parameters, &lt;span style="color: blue"&gt;bool&lt;/span&gt; assert)&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;    {&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;       var sublayout = &lt;span style="color: blue"&gt;new&lt;/span&gt; AudienceSublayout();&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;       &lt;span style="color: blue"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue"&gt;string&lt;/span&gt; key &lt;span style="color: blue"&gt;in&lt;/span&gt; parameters.Keys)&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;       {&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;          ReflectionUtil.SetProperty(sublayout, key, parameters[key]);&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;       }&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;       &lt;span style="color: blue"&gt;return&lt;/span&gt; sublayout;&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;    }&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;The only think we change here is line 5. Instead of the default Sublayout we instantiate our custom AudienceSublayout.&lt;br&gt;4. Define custom SublayoutRenderingType in web.config, line 3:&lt;br&gt;
&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: blue"&gt;&amp;amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;renderingControls&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;  &lt;span style="color: blue"&gt;&amp;amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;control&lt;/span&gt; &lt;span style="color: red"&gt;template&lt;/span&gt;&lt;span style="color: blue"&gt;="method rendering"&lt;/span&gt; &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;="Sitecore.Web.UI.WebControls.Method, Sitecore.Kernel"&lt;/span&gt; &lt;span style="color: red"&gt;propertyMap&lt;/span&gt;&lt;span style="color: blue"&gt;="AssemblyName=assembly, ClassName=class, MethodName=method"&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;strong&gt;&lt;span style="color: #606060" id="lnum3"&gt;   &lt;u&gt;3:&lt;/u&gt;&lt;/span&gt;&lt;u&gt;  &lt;span style="color: blue"&gt;&amp;amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;control&lt;/span&gt; &lt;span style="color: red"&gt;template&lt;/span&gt;&lt;span style="color: blue"&gt;="sublayout"&lt;/span&gt; &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;="SearchDemo.SublayoutRenderingType, SearchDemo"&lt;/span&gt; &lt;span style="color: red"&gt;propertyMap&lt;/span&gt;&lt;span style="color: blue"&gt;="Path=path"&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;amp;gt;&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;  &lt;span style="color: blue"&gt;&amp;amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;control&lt;/span&gt; &lt;span style="color: red"&gt;template&lt;/span&gt;&lt;span style="color: blue"&gt;="url rendering"&lt;/span&gt; &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;="Sitecore.Web.UI.WebControls.WebPage, Sitecore.Kernel"&lt;/span&gt; &lt;span style="color: red"&gt;propertyMap&lt;/span&gt;&lt;span style="color: blue"&gt;="Url=url"&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;  &lt;span style="color: blue"&gt;&amp;amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;control&lt;/span&gt; &lt;span style="color: red"&gt;template&lt;/span&gt;&lt;span style="color: blue"&gt;="xsl rendering"&lt;/span&gt; &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;="Sitecore.Web.UI.XslControlRenderingType, Sitecore.Kernel"&lt;/span&gt; &lt;span style="color: red"&gt;propertyMap&lt;/span&gt;&lt;span style="color: blue"&gt;="Path=path"&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;  &lt;span style="color: blue"&gt;&amp;amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;control&lt;/span&gt; &lt;span style="color: red"&gt;template&lt;/span&gt;&lt;span style="color: blue"&gt;="webcontrol"&lt;/span&gt; &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;="Sitecore.Web.UI.WebControlRenderingType, Sitecore.Kernel"&lt;/span&gt; &lt;span style="color: red"&gt;propertyMap&lt;/span&gt;&lt;span style="color: blue"&gt;="assembly=assembly, namespace=namespace, class=tag, properties=parameters"&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;  &lt;span style="color: blue"&gt;&amp;amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;control&lt;/span&gt; &lt;span style="color: red"&gt;template&lt;/span&gt;&lt;span style="color: blue"&gt;="xmlcontrol"&lt;/span&gt; &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;="Sitecore.Web.UI.XmlControlRenderingType, Sitecore.Kernel"&lt;/span&gt; &lt;span style="color: red"&gt;propertyMap&lt;/span&gt;&lt;span style="color: blue"&gt;="controlName=control name, properties=parameters"&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt; &lt;span style="color: blue"&gt;&amp;amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;renderingControls&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;That’s all you need to do. Now the output of the NewsList control will vary depending on the current “Audience Type”.&lt;br&gt;Here is where you can download all the sources for this post:&lt;br&gt;&lt;a href="http://resources.alexshyba.com/blog/CustomVaryByCaching.zip"&gt;http://resources.alexshyba.com/blog/CustomVaryByCaching.zip&lt;/a&gt;&lt;br&gt;Obviously, this is only one way of doing it. If you have other ideas, please share in the comments below.&lt;br&gt;Have a great weekend! &lt;br&gt;&lt;strong&gt;Further reading&lt;/strong&gt;:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://sdn.sitecore.net/upload/sitecore6/sc62keywords/cache_configuration_reference_a4.pdf"&gt;Official Sitecore guide on caching&lt;/a&gt; 
&lt;li&gt;&lt;a href="http://sitecoreblog.alexshyba.com/2011/05/how-to-verify-html-cache-is-working.html"&gt;How to troubleshoot Output/HTML cache&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-3564857922773390449?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/3564857922773390449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=3564857922773390449' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/3564857922773390449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/3564857922773390449'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/08/sitecore-output-caching-kick-it-up.html' title='Sitecore Output Caching: Kick it up a Notch'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/-UHQVl-TuFAY/Tk7cg9xUsjI/AAAAAAAAftI/l58TlrVHuvM/s72-c/image_thumb1.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-6924327281433112876</id><published>2011-08-01T19:28:00.000-07:00</published><updated>2011-08-19T15:48:27.353-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='common errors'/><category scheme='http://www.blogger.com/atom/ns#' term='WFFM'/><title type='text'>Web Forms File Upload: 2 Exceptions [Common Errors]</title><content type='html'>If you are having trouble with the File Upload field within the Web Forms for Marketers module, specifically the form submission fails with a generic error, check your Sitecore log file. If you see either of the following two exceptions, there is a solution! Read on.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h3&gt;
First exception:&lt;/h3&gt;
&lt;blockquote&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;em&gt;4624 11:31:12 WARN&amp;nbsp; Object reference not set to an instance of an object.&lt;br /&gt;Exception: System.NullReferenceException&lt;br /&gt;Message: Object reference not set to an instance of an object.&lt;br /&gt;Source: Sitecore.Forms.Custom&lt;br /&gt;at Sitecore.Form.UI.Adapters.FileUploadAdapter.AdaptResult(Object value)&lt;br /&gt;at Sitecore.Form.Core.Utility.FieldReflectionUtil.GetAdaptedResult(ID fieldID, Object value)&lt;br /&gt;at Sitecore.Form.Core.Controls.Data.AdaptedControlResult..ctor(ControlResult result, Boolean simpleAdapt)&lt;br /&gt;at Sitecore.Form.Core.Submit.SubmitActionManager.AdaptResult(IEnumerable`1 list, Boolean simpleAdapt)&lt;br /&gt;at Sitecore.Form.Core.Submit.SubmitActionManager.ExecuteSaving(ID formID, ControlResult[] list, ActionDefinition[] actions, Boolean simpleAdapt, ID sessionID)&lt;br /&gt;at Sitecore.Form.Core.FormDataHandler.ProcessData(SimpleForm form, ControlResult[] fields, ActionDefinition[] actions)&lt;/em&gt; &lt;/span&gt;&lt;br /&gt;
&lt;em&gt;&lt;span style="font-size: xx-small;"&gt;4624 11:31:12 WARN&amp;nbsp; Web Forms for Marketers: an exception: Object reference not set to an instance of an object. has occured while trying to execute an action.&lt;/span&gt;&lt;/em&gt; &lt;/blockquote&gt;
This is most likely happening because you have two server configuration (separated CD from CM) and master database removed as per the Scaling Guide. The error happens in case if you did not configure the remote WFM service as per section 2.11 &lt;strong&gt;“Multiple Sitecore Instances”&lt;/strong&gt; within the reference doc: &lt;a href="http://sdn.sitecore.net/upload/sdn5/products/web_forms2/web%20forms%20for%20marketers%20v2_2%20reference-a4.pdf"&gt;http://sdn.sitecore.net/upload/sdn5/products/web_forms2/web%20forms%20for%20marketers%20v2_2%20reference-a4.pdf&lt;/a&gt;&lt;br /&gt;
Simply add the connection string to the web service and make sure that the following setting on CD instance(s) is set to "web". This setting is defined within /App_Config/Include/forms.config file.&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border-bottom: silver 1px solid; border-left: silver 1px solid; border-right: silver 1px solid; border-top: silver 1px solid; cursor: text; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: left; width: 97.5%;"&gt;
&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span style="color: green;"&gt;&amp;lt;!-- Sets the name of the master database  --&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;setting&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;="WFM.MasterDatabase"&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;="web"&lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;

Second exception:&lt;/h3&gt;
&lt;blockquote&gt;
&lt;em&gt;&lt;span style="font-size: xx-small;"&gt;2780 14:55:48 ERROR Could not save posted file: Desert.jpg&lt;br /&gt;Exception: System.InvalidOperationException&lt;br /&gt;Message: An instance of Sitecore.Data.Items.Item was null. Additional information: Could not create media folder: 'D/Sitecores/WFFM 21/Website/sitecore/media library'.&lt;br /&gt;Source: Sitecore.Kernel&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Sitecore.Diagnostics.Assert.IsNotNull(Object value, Type type, String format, Object[] args)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Sitecore.Resources.Media.MediaCreator.CreateFolder(String itemPath, MediaCreatorOptions options)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Sitecore.Resources.Media.MediaCreator.CreateItem(String itemPath, String filePath, MediaCreatorOptions options)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Sitecore.Resources.Media.MediaCreator.CreateFromStream(Stream stream, String filePath, Boolean setStreamIfEmpty, MediaCreatorOptions options)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Sitecore.Resources.Media.MediaCreator.CreateFromStream(Stream stream, String filePath, MediaCreatorOptions options)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Sitecore.Form.Core.Media.MediaUploaderEx.UploadToDatabase(ICollection`1 list)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Sitecore.Form.Core.Media.MediaUploaderEx.Upload()&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Sitecore.Form.Core.Pipelines.FormUploadFile.Save.Process(FormUploadFileArgs args)&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;&lt;span style="font-size: xx-small;"&gt;2780 14:55:48 WARN&amp;nbsp; An instance of Sitecore.Data.Items.Item was null. Additional information: Could not create media folder: 'D/Sitecores/WFFM 21/Website/sitecore/media library'.&lt;br /&gt;Exception: System.InvalidOperationException&lt;br /&gt;Message: An instance of Sitecore.Data.Items.Item was null. Additional information: Could not create media folder: 'D/Sitecores/WFFM 21/Website/sitecore/media library'.&lt;br /&gt;Source: Sitecore.Kernel&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Sitecore.Diagnostics.Assert.IsNotNull(Object value, Type type, String format, Object[] args)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Sitecore.Resources.Media.MediaCreator.CreateFolder(String itemPath, MediaCreatorOptions options)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Sitecore.Resources.Media.MediaCreator.CreateItem(String itemPath, String filePath, MediaCreatorOptions options)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Sitecore.Resources.Media.MediaCreator.CreateFromStream(Stream stream, String filePath, Boolean setStreamIfEmpty, MediaCreatorOptions options)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Sitecore.Resources.Media.MediaCreator.CreateFromStream(Stream stream, String filePath, MediaCreatorOptions options)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Sitecore.Form.Core.Media.MediaUploaderEx.UploadToDatabase(ICollection`1 list)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Sitecore.Form.Core.Media.MediaUploaderEx.Upload()&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Sitecore.Form.Core.Pipelines.FormUploadFile.Save.Process(FormUploadFileArgs args)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at (Object , Object[] )&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Sitecore.Form.UI.Adapters.FileUploadAdapter.AdaptResult(Object value)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Sitecore.Form.Core.Utility.FieldReflectionUtil.GetAdaptedResult(ID fieldID, Object value)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Sitecore.Form.Core.Controls.Data.AdaptedControlResult..ctor(ControlResult result, Boolean simpleAdapt)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Sitecore.Form.Core.Submit.SubmitActionManager.AdaptResult(IEnumerable`1 list, Boolean simpleAdapt)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Sitecore.Form.Core.Submit.SubmitActionManager.ExecuteSaving(ID formID, ControlResult[] list, ActionDefinition[] actions, Boolean simpleAdapt, ID sessionID)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Sitecore.Form.Core.FormDataHandler.ProcessData(SimpleForm form, ControlResult[] fields, ActionDefinition[] actions)&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;&lt;span style="font-size: xx-small;"&gt;2780 14:55:48 WARN&amp;nbsp; Web Forms for Marketers: an exception: An instance of Sitecore.Data.Items.Item was null. Additional information: Could not create media folder: 'D/Sitecores/WFFM 21/Website/sitecore/media library'. has occured while trying to execute an action.&lt;/span&gt;&lt;/em&gt;&lt;/blockquote&gt;
&lt;em&gt;&lt;/em&gt;&lt;br /&gt;
This error may happen if:
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;You are running WFM earlier than 2.2.0 rev. 110303 
&lt;/li&gt;
&lt;li&gt;"Media.UploadAsFiles" setting is set to "true"&lt;/li&gt;
&lt;/ul&gt;
As you may have guessed, this issue was fixed in 2.2.0 rev. 110303.&lt;br /&gt;
Hope this helps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-6924327281433112876?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/6924327281433112876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=6924327281433112876' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/6924327281433112876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/6924327281433112876'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/08/web-forms-file-upload-2-exceptions.html' title='Web Forms File Upload: 2 Exceptions [Common Errors]'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-966044001381925629</id><published>2011-07-30T18:35:00.001-07:00</published><updated>2011-07-30T18:35:02.099-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='announcement'/><title type='text'>Sitecore Developer Network Search just got a bit better</title><content type='html'>&lt;p&gt;We just pushed an update to the &lt;a href="http://sdn.sitecore.net/searchresults.aspx"&gt;SDN search&lt;/a&gt;, which included greatly enhanced search within Sitecore Community Blogs, and integrated SDN Forum. Now you should be able to search against any &lt;a href="http://www.sitecore.net/"&gt;Sitecore&lt;/a&gt; resource from one place!&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-NEP1JQncdrs/TjSxQ0N9bOI/AAAAAAAAeZI/MeOJpZxaiaY/s1600-h/image%25255B11%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-5wVmuSt73W8/TjSxRQYfFtI/AAAAAAAAeZM/CKvKM1tvmqo/image_thumb%25255B5%25255D.png?imgmax=800" width="697" height="63"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Among other enhancements, we’ve improved search relevancy by tweaking a few settings and ignoring landing pages.&lt;/p&gt; &lt;p&gt;Hope you see the difference.&lt;/p&gt; &lt;p&gt;Feel free to provide feedback, especially if your own blog is not getting indexed by us.&lt;/p&gt; &lt;p&gt;Enjoy!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-966044001381925629?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/966044001381925629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=966044001381925629' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/966044001381925629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/966044001381925629'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/07/sitecore-developer-network-search-just.html' title='Sitecore Developer Network Search just got a bit better'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/-5wVmuSt73W8/TjSxRQYfFtI/AAAAAAAAeZM/CKvKM1tvmqo/s72-c/image_thumb%25255B5%25255D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-3204043473473635826</id><published>2011-07-07T10:26:00.001-07:00</published><updated>2011-07-30T15:33:03.014-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='best practices'/><category scheme='http://www.blogger.com/atom/ns#' term='configuration'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise'/><title type='text'>Windows Authentication for Sitecore. Repost</title><content type='html'>Back in 08 I &lt;a href="http://sitecoreblog.alexshyba.com/2008/12/changing-application-pool-identity-for.html"&gt;posted this walkthrough&lt;/a&gt; on how to configure Sitecore to use Windows Authentication for SQL connection and effectively remove the username and password from the connectionStrings.config file.&lt;br /&gt;
Here is a quick repost of the walkthrough with a few tweaks for &lt;strong&gt;SQL 2008&lt;/strong&gt; / &lt;strong&gt;Windows 2008 (R2)&lt;/strong&gt; and &lt;strong&gt;Sitecore 6.4.x/6.5 &lt;/strong&gt;(some steps are not required any more):&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Find the application pool that your Sitecore is running under. Open Properties and set the identity to the domain user on the corresponding tab.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;On the SQL Server box register the domain user and grant security permissions on Sitecore databases for the domain user according to the section “4.4.1 Creating a Database Account for Sitecore CMS Databases on SQL Server 2008” of the &lt;a href="http://sdn.sitecore.net/upload/sitecore6/65/installation_guide_sc65-a4.pdf"&gt;Installation Guide&lt;/a&gt;.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;On the machine that hosts Sitecore add this domain user to the &lt;strong&gt;IIS_IUSRS&lt;/strong&gt; group.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Adjust the permissions for the &lt;strong&gt;IIS_IUSRS&lt;/strong&gt; group according to these sections of the &lt;a href="http://sdn.sitecore.net/upload/sitecore6/65/installation_guide_sc65-a4.pdf"&gt;Installation Guide&lt;/a&gt;“:&lt;br /&gt;
4.2.2 File System Permissions for ASP.NET Requests”&lt;br /&gt;
“4.2.3 File System Permissions for System Folders”.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Edit the /App_Config/ConnectionStrings.config file and replace the &lt;i&gt;user id &lt;/i&gt;and &lt;i&gt;password&lt;/i&gt; parameters with the &lt;i&gt;trusted_connection=yes&lt;/i&gt; option:  &lt;div style="background-color: #f4f4f4; border-bottom: gray 1px solid; border-left: gray 1px solid; border-right: gray 1px solid; border-top: gray 1px solid; cursor: text; font-family: consolas, 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; width: 97.5%;"&gt;&lt;div style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; font-family: consolas, 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 100%;"&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; font-family: consolas, 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 100%;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: maroon;"&gt;xml&lt;/span&gt; &lt;span style="color: red;"&gt;version&lt;/span&gt;&lt;span style="color: blue;"&gt;="1.0"&lt;/span&gt; &lt;span style="color: red;"&gt;encoding&lt;/span&gt;&lt;span style="color: blue;"&gt;="utf-8"&lt;/span&gt;?&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; font-family: consolas, 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 100%;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;connectionStrings&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; font-family: consolas, 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 100%;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;add&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;="core"&lt;/span&gt; &lt;span style="color: red;"&gt;connectionString&lt;/span&gt;&lt;span style="color: blue;"&gt;="Data Source=.\sql2008;Database=Sandbox6_Core;Trusted_Connection=Yes"&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; font-family: consolas, 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 100%;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;add&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;="master"&lt;/span&gt; &lt;span style="color: red;"&gt;connectionString&lt;/span&gt;&lt;span style="color: blue;"&gt;="Data Source=.\sql2008;Database=Sandbox6_Master;Trusted_Connection=Yes"&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; font-family: consolas, 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 100%;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;add&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;="web"&lt;/span&gt; &lt;span style="color: red;"&gt;connectionString&lt;/span&gt;&lt;span style="color: blue;"&gt;="Data Source=.\sql2008;Database=Sandbox6_Web;Trusted_Connection=Yes"&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; font-family: consolas, 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 100%;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;connectionStrings&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Prepare your identity so it can be used as a service account with “aspnet_regiis.exe” and the &lt;a href="http://msdn.microsoft.com/en-us/library/ms998297.aspx"&gt;-ga switch&lt;/a&gt;.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Add your domain service account to the local “Performance Monitor Users” group as per this section: “4.2.5 Windows Registry Permissions”&lt;/li&gt;

&lt;/ol&gt;&lt;strong&gt;Important note:&lt;/strong&gt;&lt;br /&gt;
This walkthrough describes &lt;em&gt;basic &lt;/em&gt;Sitecore configuration with no modules or OMS/DMS installed. Additional security permissions are required for the modules and other components that carry their own databases.&lt;br /&gt;
HTH.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-3204043473473635826?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/3204043473473635826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=3204043473473635826' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/3204043473473635826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/3204043473473635826'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/07/windows-authentication-for-sitecore.html' title='Windows Authentication for Sitecore. Repost'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-7743410435990346527</id><published>2011-06-13T16:25:00.001-07:00</published><updated>2011-07-30T15:36:48.812-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lucene'/><title type='text'>Old Search is deprecated in Sitecore 6.5</title><content type='html'>I’ve &lt;a href="http://sitecoreblog.alexshyba.com/2011/02/8-reasons-to-use-new-search-in-sitecore.html"&gt;blogged about this&lt;/a&gt; before, now it’s official. If you have not seen this before, you can find the following in the &lt;a href="http://sdn.sitecore.net/Products/Sitecore%20V5/Sitecore%20CMS%206/ReleaseNotes/ChangeLog.aspx"&gt;Release Notes&lt;/a&gt; for 6.5:&lt;br /&gt;
&lt;em&gt;The Sitecore.Data.Indexing namespace has been deprecated and will be removed in a future version of the CMS in favor of the more powerful and flexible Sitecore.Search classes and corresponding index definitions.&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;&lt;/em&gt;&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Now it’s a good time to revisit the functionality build on top of “old” search and re-implement it with Sitecore.Search namespace.&lt;br /&gt;
Related documentation:&lt;br /&gt;
&lt;a href="http://sdn.sitecore.net/upload/sitecore6/sitecore_search_and_indexing-a4.pdf"&gt;http://sdn.sitecore.net/upload/sitecore6/sitecore_search_and_indexing-a4.pdf&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-7743410435990346527?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/7743410435990346527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=7743410435990346527' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/7743410435990346527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/7743410435990346527'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/06/old-search-is-deprecated-in-sitecore-65.html' title='Old Search is deprecated in Sitecore 6.5'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-3967530805670143700</id><published>2011-06-02T10:57:00.001-07:00</published><updated>2011-07-30T15:37:28.396-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='announcement'/><title type='text'>Sitecore USA is looking for more brain power</title><content type='html'>Do you wake up in the morning and pop up &lt;a href="http://sitecorerocks.net/"&gt;Sitecore Rocks&lt;/a&gt; before getting your first cup of coffee? Can’t live without &lt;a href="http://www.sitecore.net/"&gt;Sitecore&lt;/a&gt;? Here is your chance to join us in this continuing thrilling journey to success. We are looking for an experienced &lt;a href="http://www.sitecore.net/Company/Job-Opportunities/North-America/Solution-Engineer.aspx"&gt;Solution Engineer&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Here is a short extract from the job description:&lt;br /&gt;
&lt;h3&gt;&lt;em&gt;Solution Engineer&lt;/em&gt;&lt;/h3&gt;&lt;em&gt;Sitecore USA is looking for an ASP.NET solution engineer to assist our implementation partners with best practices guidance, troubleshooting and complex customizations. &lt;/em&gt; &lt;br /&gt;
&lt;em&gt;Sitecore is the leading Enterprise .NET Web Content Management System on the market today. The Solution Engineer will work from our Mill Valley, California office (just 10 minutes north of San Francisco) or our Northeast US office. &lt;/em&gt; &lt;br /&gt;
&lt;em&gt;Sitecore implementations are handled by our network of partners. Because of the complex nature of the Sitecore system, however, our partners often need assistance in mapping customer requirements to implementation best practices. The Solution Engineer will work with partners to understand customer requirements and determine the proper implementation approach. The Solution Engineer may also create prototypes of these requirements. In addition, the Solution Engineer may troubleshoot implementations that are experiencing performance or functional issues.&lt;/em&gt;  &lt;br /&gt;
&lt;a href="http://www.sitecore.net/Company/Job-Opportunities/North-America/Solution-Engineer.aspx"&gt;Full job description here.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-3967530805670143700?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/3967530805670143700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=3967530805670143700' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/3967530805670143700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/3967530805670143700'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/06/sitecore-usa-is-looking-for-more-brain.html' title='Sitecore USA is looking for more brain power'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-5706826110193191227</id><published>2011-05-16T08:18:00.001-07:00</published><updated>2011-05-16T08:18:20.178-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='announcement'/><title type='text'>Sitecore Users Virtual Group</title><content type='html'>&lt;p&gt;If you guys have not seen this initiative, check it out: &lt;a href="http://www.sitecoreug.org/"&gt;http://www.sitecoreug.org&lt;/a&gt;  &lt;p&gt;The Sitecore Users' Virtual Group is dedicated to supporting the &lt;a href="http://www.sitecore.net"&gt;Sitecore&lt;/a&gt; community wherever they exist across the globe. There are some great speakers lined up for our first sessions and all sessions are free of charge and conducted over the web. Here is the &lt;a href="http://www.sitecoreug.org/"&gt;schedule&lt;/a&gt;.  &lt;p&gt;The first presentation will take place next Wednesday, May 18, at 9:00 AM Pacific, Noon Eastern, or 5:00 PM UK time. John West, CTO of Sitecore North America, will discuss the state of Sitecore and the CMS marketplace. John has graciously agreed to answer &lt;a href="http://www.sitecoreug.org/question.aspx"&gt;your questions&lt;/a&gt;.  &lt;p&gt;If you would like to attend, please register &lt;a href="http://www.sitecoreug.org/registration.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-5706826110193191227?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/5706826110193191227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=5706826110193191227' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/5706826110193191227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/5706826110193191227'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/05/sitecore-users-virtual-group.html' title='Sitecore Users Virtual Group'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-7794920551797279903</id><published>2011-05-09T14:56:00.001-07:00</published><updated>2011-07-30T15:38:06.093-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Sitecore Support: Help us help you!</title><content type='html'>Greetings,&lt;br /&gt;
Quite an unusual post from me today. I spent last week working on a few support issues via the helpdesk, and must say, I enjoyed being so close to the customer and partners. I’ve been doing this for more than 5 years now and still remember the fun old days where we had email based support and a shared spreadsheet with the tickets. But we’ve come long ways, and product support is no exception. In April, actually, we hit a record of 859 support tickets filed by our customers and partners across the globe. That’s no walk in the park!&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
I perceive Sitecore Support as a two way street. While we constantly work on improving the quality of our support services, tools and documentation, I believe that our customers and partners are getting better in filing those support tickets, which I have witnessed over the course of last days.&lt;br /&gt;
In order to help us help you, our team came up with a “&lt;a href="http://sdn.sitecore.net/Support/Helpdesk%20Best%20Practices.aspx"&gt;Helpdesk Best Practices&lt;/a&gt;” document which is a really good read.&lt;br /&gt;
Also, here is the list of items that I personally would like to recommend. Some of them are already included into the aforementioned document.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Always attach your web.config along with the output from /sitecore/admin/showconfig.aspx&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Always attach latest logs.&lt;br /&gt;
If you are reporting a bug, verify that your log actually reflects the activity of your scenario.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Feel free to package up some content to reproduce.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Bullet lists are way better to understand than long unstructured sentences.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Sticking to the point and brevity helps tremendously.&lt;br /&gt;
Try re-reading your support ticket at least once before sending it over.&lt;br /&gt;
At the same time, some background information would not hurt.&lt;br /&gt;
For example: &lt;br /&gt;
&lt;em&gt;we are having an issue with X. BTW, we recently upgraded from 6.0.0 to 6.2. Update-5. The problem was not happening before.&lt;/em&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Support people love screenshots!&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Walkthrough video or a short screencast is even better!&lt;br /&gt;
There are a few free products that would help with that.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Keep in mind that it may take hours to respond while search takes seconds: &lt;/li&gt;

&lt;ul&gt;&lt;li&gt;Have you checked SDN recently? &lt;/li&gt;
&lt;ul&gt;&lt;li&gt;Our search is better than before. It actually finds stuff ;-)&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Have you looked on the Forum? &lt;/li&gt;
&lt;ul&gt;&lt;li&gt;There is a high chance someone had the same problem.&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Have you looked on the blogs? &lt;/li&gt;
&lt;ul&gt;&lt;li&gt;I use Google Reader sometimes to search within the Sitecore RSS pipe. Works great!&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;Licensing question? &lt;/li&gt;

&lt;ul&gt;&lt;li&gt;Better to ask the regional Sitecore representative&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Running old version of Sitecore? &lt;/li&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://sdn.sitecore.net/Products/Sitecore%20V5/Sitecore%20CMS%206/ReleaseNotes/ChangeLog.aspx"&gt;Check the release notes&lt;/a&gt;, your issue may already be addressed.&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Help us rule out possible options: &lt;/li&gt;

&lt;ul&gt;&lt;li&gt;Try another browser&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Try isolating custom code&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Try isolating custom configuration &lt;br /&gt;
It often helps to plug in clean web.config and see if the problem is configuration.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Try the same scenario on another item &lt;/li&gt;

&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Try another machine&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Try another server/environment&lt;/li&gt;

&lt;/ul&gt;&lt;li&gt;And finally, remember that the support technician can’t see your screen, doesn’t know the error message you are getting and doesn’t know what UI you are logged into.&lt;br /&gt;
The more relevant information you provide, the clearer a picture the supporter has and the faster they can help you. &lt;/li&gt;
&lt;/ul&gt;I sincerely hope that this helps having the conversation via the support portal more efficiently.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-7794920551797279903?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/7794920551797279903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=7794920551797279903' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/7794920551797279903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/7794920551797279903'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/05/sitecore-support-help-us-help-you.html' title='Sitecore Support: Help us help you!'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-1719244241353675186</id><published>2011-05-05T10:23:00.001-07:00</published><updated>2011-05-05T10:23:22.850-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='configuration'/><title type='text'>Teach Sitecore to ignore a directory</title><content type='html'>&lt;p&gt;This is a really quick post dedicated to the following scenario. You have either a standalone asp.net web app or legacy website. You want to host it underneath the web root with Sitecore instance configured and have Sitecore completely ignore the whole path (“/webapp”).&lt;/p&gt; &lt;p&gt;The issue you may be having is that during the request, Sitecore would try to “take over” and resolve a dynamic item “webapp” from the content tree which obviously does not exist. So you would get a “document not found” error*:&lt;a href="http://lh6.ggpht.com/_AIfg6b6IeD0/TcLdAMd30LI/AAAAAAAAbno/YLYLaSEA81E/s1600-h/image%5B3%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_AIfg6b6IeD0/TcLdBP5-7pI/AAAAAAAAbns/YsGg2G2xTSc/image_thumb%5B1%5D.png?imgmax=800" width="634" height="216"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;*Depending on the version of IIS, you may be experiencing different behavior.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;There is a quick way to resolve this. Simply add the path to your standalone website to the “IgnoreUrlPrefixes” list:&lt;/p&gt; &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt; &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;lt;!--  IGNORE URLS&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #008000"&gt;      Set IgnoreUrlPrefixes to a '|' separated list of url prefixes that should not be&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color: #008000"&gt;      regarded and processed as friendly urls (ie. forms etc.)&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; &lt;span style="color: #008000"&gt;--&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;p&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;setting&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="IgnoreUrlPrefixes"&lt;/span&gt; &lt;br&gt;               &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="/sitecore/default.aspx|/trace.axd|.....&lt;strong&gt;&lt;u&gt;|/webapp&lt;/u&gt;&lt;/strong&gt;"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Now if your are not feeling nerdy today, stop reading and go fix it!&lt;/p&gt;
&lt;p&gt;For the ones who continue reading, I can tell that the “ignore url magic” happens within the &amp;lt;httpRequestBegin /&amp;gt; pipeline which is invoked when the request goes through Sitecore.&lt;/p&gt;
&lt;p&gt;So before the ItemResolver is hit, the “IgnoreList” processor would read the value of the “IgnoreUrlPrefixes” setting and figure out whether the pipeline needs to be aborted or not:&lt;/p&gt;
&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;httpRequestBegin&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;    ...&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;strong&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;processor&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Sitecore.Pipelines.HttpRequest.IgnoreList, Sitecore.Kernel"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;processor&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Sitecore.Pipelines.HttpRequest.SiteResolver, Sitecore.Kernel"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;    ...&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;processor&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Sitecore.Pipelines.HttpRequest.ItemResolver, Sitecore.Kernel"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;httpRequestBegin&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;That’s all folks!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-1719244241353675186?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/1719244241353675186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=1719244241353675186' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/1719244241353675186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/1719244241353675186'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/05/teach-sitecore-to-ignore-directory.html' title='Teach Sitecore to ignore a directory'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_AIfg6b6IeD0/TcLdBP5-7pI/AAAAAAAAbns/YsGg2G2xTSc/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-810650995001717521</id><published>2011-05-02T17:15:00.001-07:00</published><updated>2011-05-02T17:15:54.602-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='troubleshooting'/><category scheme='http://www.blogger.com/atom/ns#' term='configuration'/><category scheme='http://www.blogger.com/atom/ns#' term='cache'/><title type='text'>How to verify HTML cache is working</title><content type='html'>&lt;p&gt;Greetings,&lt;/p&gt; &lt;p&gt;Here is a quick guide about how to verify that your presentation components (XSLTs, WebControls or Sublayouts) are getting cached.&lt;/p&gt; &lt;p&gt;For more details on how the HTML caching works, see section “3.4.2 Managed Web Site Caches” within &lt;a href="http://sdn.sitecore.net/upload/sitecore6/sc62keywords/cache_configuration_reference_a4.pdf"&gt;Cache Configuration Reference&lt;/a&gt; and Chapter 4 within “&lt;a href="http://sdn.sitecore.net/upload/sitecore6/64/presentation_component_reference-a4.pdf"&gt;Presentation Component Reference&lt;/a&gt;”.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;1. Enable caching settings for your presentation control&lt;/strong&gt; &lt;p&gt;Depending on your needs and implementation specifics, you can apply caching on different levels: &lt;p&gt;- via Layout Details dialog:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_AIfg6b6IeD0/Tb9JGbp26SI/AAAAAAAAbmA/RxLeO_kjzn0/s1600-h/image%5B3%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_AIfg6b6IeD0/Tb9JGs3fHiI/AAAAAAAAbmE/PhWYUxTPBfc/image_thumb%5B1%5D.png?imgmax=800" width="522" height="434"&gt;&lt;/a&gt;&lt;br&gt;- on the definition item of the presentation control:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_AIfg6b6IeD0/Tb9JHF21TtI/AAAAAAAAbmI/8-bvYAsORMw/s1600-h/SNAGHTML1cd434f%5B4%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML1cd434f" border="0" alt="SNAGHTML1cd434f" src="http://lh6.ggpht.com/_AIfg6b6IeD0/Tb9JHWOFYLI/AAAAAAAAbmM/EpQmG30kcsc/SNAGHTML1cd434f_thumb%5B1%5D.png?imgmax=800" width="596" height="395"&gt;&lt;/a&gt;&lt;br&gt;- within the markup on the control itself if it is bound statically:&lt;/p&gt; &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt; &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;form&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="mainform"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;method&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="post"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="MainPanel"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;sc:XslFile&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="sampleXsl"&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;                   &lt;span style="color: #ff0000"&gt;Path&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="/xsl/sample rendering.xslt"&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;strong&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;                   &lt;span style="color: #ff0000"&gt;Cacheable&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="true"&lt;/span&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;strong&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;                   &lt;span style="color: #ff0000"&gt;VaryByData&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="true"&lt;/span&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;                   &lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;sc:placeholder&lt;/span&gt; &lt;span style="color: #ff0000"&gt;key&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="content"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;form&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;More details about it can be found within Chapter 4 of the “&lt;a href="http://sdn.sitecore.net/upload/sitecore6/64/presentation_component_reference-a4.pdf"&gt;Presentation Component Reference&lt;/a&gt;” document. Here is one important snippet from this doc:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;When you dynamically bind a rendering to a placeholder using layout details, cache settings explicitly defined in layout details &lt;strong&gt;&lt;u&gt;override&lt;/u&gt;&lt;/strong&gt; cache settings defined in the rendering definition item.&lt;br&gt;Cache settings defined in the definition item apply only when no caching settings exist in the Caching section in the Control Properties dialog.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;This post does not explain the difference between cache variation settings like VaryByData or VaryByDevice. Consult the official documentation mentioned above in order to find appropriate strategy for your site.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Verify that the change to the cache setting got published to the “web” database.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For that, you can use the database selector at the bottom right corner and then open Content Editor to browse the content of the published database.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_AIfg6b6IeD0/Tb9JIHnzXdI/AAAAAAAAbmQ/lV6pPmPDkyk/s1600-h/SNAGHTML1d452ab%5B4%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML1d452ab" border="0" alt="SNAGHTML1d452ab" src="http://lh4.ggpht.com/_AIfg6b6IeD0/Tb9JIsp6LUI/AAAAAAAAbmU/KvRgH55QmkE/SNAGHTML1d452ab_thumb%5B1%5D.png?imgmax=800" width="147" height="124"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In a distributed server scenario, such things as cache clearing may be factoring in. So make sure that the data cache is properly cleared after publishing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Use Sitecore Debugger to explore Trace&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;After you confirm that the cache setting were published, verify that Sitecore is caching it using &lt;a href="http://sdn.sitecore.net/Developer/Developer%20Center/The%20Sitecore%20Debugger/Using%20the%20Debugger.aspx"&gt;Sitecore Debugger&lt;/a&gt;. The article is for Sitecore 5.3 but most concepts are still valid for your version.&lt;/p&gt;
&lt;p&gt;3.1 To start the debugger, click on the “Debug” item in the menu:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_AIfg6b6IeD0/Tb9JJHf4C0I/AAAAAAAAbmY/-MOIYDlF6lY/s1600-h/image%5B7%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_AIfg6b6IeD0/Tb9JJwnPKBI/AAAAAAAAbmc/f6ka8uET2jg/image_thumb%5B3%5D.png?imgmax=800" width="384" height="500"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3.2 When the debugger is launched, make sure to disable “Rendering Information” feature, otherwise caching won’t work within the debugger:
&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_AIfg6b6IeD0/Tb9JKaDZiKI/AAAAAAAAbmg/9SkvX61InIQ/s1600-h/image%5B11%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_AIfg6b6IeD0/Tb9JK8mtcVI/AAAAAAAAbmk/bgJz6WX3snk/image_thumb%5B5%5D.png?imgmax=800" width="626" height="102"&gt;&lt;/a&gt;
&lt;p&gt;3.3. Locate the page where the presentation component is placed.
&lt;p&gt;3.4. Refresh the page a couple of times.
&lt;p&gt;3.5. Scroll down to the “Trace” section and locate your rendering:
&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_AIfg6b6IeD0/Tb9JLXQs8BI/AAAAAAAAbmo/fb3Vtrn2myU/s1600-h/image%5B19%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_AIfg6b6IeD0/Tb9JL8L9upI/AAAAAAAAbms/aUmLZeSv38E/image_thumb%5B9%5D.png?imgmax=800" width="533" height="91"&gt;&lt;/a&gt;
&lt;p&gt;If the control is cached, you should see the highlighted (using cache) string.
&lt;p&gt;&lt;strong&gt;4. Rendering Statistics page&lt;/strong&gt;
&lt;p&gt;Another way to confirm is to launch the “Rendering Statistics” page: /sitecore/admin/stats.aspx where you can see the number of times your rendering is fetched from cache vs. total render count:
&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_AIfg6b6IeD0/Tb9JMcmXNQI/AAAAAAAAbmw/3dBXUxruBCA/s1600-h/image%5B23%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_AIfg6b6IeD0/Tb9JM-8ARjI/AAAAAAAAbm0/fvSE5F5TCco/image_thumb%5B11%5D.png?imgmax=800" width="498" height="360"&gt;&lt;/a&gt;
&lt;p&gt;As you may have guessed, the value within the “From cache” column should not be zero.
&lt;p&gt;&lt;strong&gt;5. Verify that HTML caching is turned on.&lt;/strong&gt;
&lt;p&gt;If the steps above indicate that presentation component is not getting cached, consult you’re the cache page: /sitecore/admin/cache.aspx
&lt;p&gt;5.1 Find the current site that you’re running. By default, it should be “website”.&lt;br&gt;5.2 Find the column for html cache of your website.&lt;br&gt;5.3 Verify that the MaxSize column is not set to zero.
&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_AIfg6b6IeD0/Tb9JNa_K2KI/AAAAAAAAbm4/4DJdOrEKWGk/s1600-h/SNAGHTML1dfb62e%5B4%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML1dfb62e" border="0" alt="SNAGHTML1dfb62e" src="http://lh5.ggpht.com/_AIfg6b6IeD0/Tb9JNzKSXLI/AAAAAAAAbm8/PBo0W_SVJRE/SNAGHTML1dfb62e_thumb%5B1%5D.png?imgmax=800" width="496" height="190"&gt;&lt;/a&gt;

&lt;p&gt;&lt;strong&gt;6. Verify the configuration&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If the cache page shows zero, then it’s time to review your configuration.&lt;/p&gt;
&lt;p&gt;Within web.config, make sure that:&lt;/p&gt;
&lt;p&gt;6.1 Default HTML cache size is not set to zero:&lt;/p&gt;
&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;setting&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Caching.DefaultHtmlCacheSize"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="5MB"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;6.2 Locate your website definition within the &amp;lt;sites /&amp;gt; section and make sure that cacheHtml is set to “true” and the value of “htmlCacheSize” is not set to zero: &lt;/p&gt;
&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;site&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="website"&lt;/span&gt; ... &lt;span style="color: #ff0000"&gt;cacheHtml&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="true"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;htmlCacheSize&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="10MB"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;6.3 Locate the &amp;lt;cacheSizes /&amp;gt; section next to the &amp;lt;sites /&amp;gt; section. Make sure that the html cache is not set to zero here too:&lt;/p&gt;
&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;cacheSizes&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;sites&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;website&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;strong&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;10MB&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;          ...&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;website&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;sites&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;cacheSizes&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This should be more or less sufficient in order to troubleshoot html cache issues.&lt;/p&gt;
&lt;p&gt;HTH.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-810650995001717521?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/810650995001717521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=810650995001717521' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/810650995001717521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/810650995001717521'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/05/how-to-verify-html-cache-is-working.html' title='How to verify HTML cache is working'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_AIfg6b6IeD0/Tb9JGs3fHiI/AAAAAAAAbmE/PhWYUxTPBfc/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-7995062323361234393</id><published>2011-04-27T11:12:00.001-07:00</published><updated>2011-05-09T12:06:02.691-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lucene'/><title type='text'>Search Index Troubleshooting</title><content type='html'>&lt;p&gt;I have a rule of thumb. If I am being asked the same question twice a week, I am writing a blog post.&lt;br&gt;Today I have been asked the same question twice, so here you go.  &lt;p&gt;I’ve blogged about search &lt;a href="http://sitecoreblog.alexshyba.com/search/label/lucene"&gt;a lot&lt;/a&gt;, but one important thing still needs to be covered. Once you are convinced that going with &lt;a href="http://sitecoreblog.alexshyba.com/2011/02/8-reasons-to-use-new-search-in-sitecore.html"&gt;the “new” search is the right way to go&lt;/a&gt;, you may have to deal with its configuration. On a two or more server environment, without proper configuration, the search index may not be rebuilt after publishing.  &lt;p&gt;The main reason for that is the way this functionality is architected. In a distributed system with at least one Content Management (CM) and one Content Delivery (CD) instance index rebuild works similarly to the way caching worked in pre 6.3 days. The CD instance maintains its own copy of search index and does not know anything that happened on the CM side (publishing).  &lt;p&gt;Your job is to make sure it does.  &lt;p&gt;First of all, as the documentation suggests, make sure you have the following:  &lt;p&gt;0. Make sure that the application pool account has read/write/modify over the /data/indexes folder or other location where you have indexes stored (thanks for the hint, Joel).&lt;/p&gt; &lt;p&gt;1. HistoryEngine is enabled on the web database*&lt;/p&gt; &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt; &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;database&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="web"&lt;/span&gt; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Engines.HistoryEngine.Storage&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;obj&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Sitecore.Data.$(database).$(database)HistoryStorage, Sitecore.Kernel"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;param&lt;/span&gt; &lt;span style="color: #ff0000"&gt;connectionStringName&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="$(id)"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;EntryLifeTime&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;30.00:00:00&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;EntryLifeTime&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;obj&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Engines.HistoryEngine.Storage&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;    …&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;database&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;* This needs to be done on both CM and CD side. 
&lt;p&gt;You may also have a number of “web” databases configured, “stage-web”, “pub-web”, “prod-web”, etc. As the names of the databases may be different from one environment to another, you need to apply this to the “web” database you use to &lt;u&gt;deliver content in production&lt;/u&gt;. 
&lt;p&gt;2. The update interval setting is not set to “00:00:00” as this disables the live index rebuild functionality completely:&lt;br&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;setting&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Indexing.UpdateInterval"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="00:05:00"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;If this is set to the following default value, this means that the remote server will check if anything needs to be added into the index every 5 minutes. This should be taken into account. Everything may be working, but you may be experiencing the delay in the rebuild process, which may cause confusion. Feel free to adjust it to a shorter timeframe. Perfect timing depends on the environment, frequency of content change, etc. In my experience, I would not set it to anything less than 30 seconds. 
&lt;p&gt;3. Enable “Indexing.ServerSpecificProperties” in web.config:&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;setting&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Indexing.ServerSpecificProperties"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;In most cases, you need this value to be set to “true”. Specifically, this is needed in the following cases which apply to most installations: 
&lt;p&gt;- more than one CD server in a web farm&lt;br&gt;- CM environment points to the same physical web database as the CD environment. 
&lt;p&gt;In a clustered CM environment this setting is overridden and set to “true” automatically due to the EventQueues functionality that has to be enabled in such case. 
&lt;p&gt;If this setting is set to “false” and you have one of the configurations mentioned above, the CD server(s) will never know that it needs to update the indexes.&lt;br&gt;After each index update operation, Sitecore writes a timestamp to the &lt;i&gt;Properties &lt;/i&gt;table of the currently processed database. This helps the IndexingProvider, that is responsible for index update process, understand what items to pull out from the history table when doing next index update. With “Indexing.ServerSpecificProperties” set to “false", the timestamp is not unique to the environment, so you may be having an issue when CD is confused regarding what items to process from the history store. 
&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_AIfg6b6IeD0/TbhccB_K6II/AAAAAAAAa_c/Yu6FpGdDe7A/s1600-h/image%5B3%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_AIfg6b6IeD0/TbhcdJFWg9I/AAAAAAAAa_g/UAJoe_b7qbQ/image_thumb%5B1%5D.png?imgmax=800" width="490" height="111"&gt;&lt;/a&gt; 
&lt;p&gt;The instance name can either be explicitly set in the web.config or created from a combination of the machine name + site name. This grants the uniqueness of the key within an environment. 
&lt;p&gt;4. Check your index configuration. 
&lt;p&gt;4.1 Your search index configuration in CD may be referencing the “master” database instead of “web”. 
&lt;p&gt;4.2 Check if the root the index is configured to be pointing to actually exists in the “web” database:&lt;/p&gt;
&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;search&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;configuration&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;indexes&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;                &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;index&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="test"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Sitecore.Search.Index, Sitecore.Kernel"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;                   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;param&lt;/span&gt; &lt;span style="color: #ff0000"&gt;desc&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="name"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;$(id)&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;param&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;                   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;param&lt;/span&gt; &lt;span style="color: #ff0000"&gt;desc&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="folder"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;test&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;param&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;                   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Analyzer&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ref&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="search/analyzer"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;                   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;locations&lt;/span&gt; &lt;span style="color: #ff0000"&gt;hint&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="list:AddCrawler"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;                      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;master&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="..."&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;                         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Database&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;master&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Database&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;                         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Root&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;/sitecore/content/test&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Root&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;4.3 If you are leveraging template filters within the configuration, make sure that every tag within the &amp;lt;include /&amp;gt; section should be unique as it is used as a key:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;include&lt;/span&gt; &lt;span class="attr"&gt;hint&lt;/span&gt;&lt;span class="kwrd"&gt;="list:IncludeTemplate"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;         &amp;lt;&lt;/span&gt;&lt;span class="html"&gt;residential&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;{71D42CF2-CE89-4030-9EB1-0065B35B78C4}&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;residential&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;business&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;{ED9F466B-D436-4A3F-B22F-EA6E8097085D}&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;business&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;industry&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;{78166FE4-EDFB-4B0D-A3ED-860AEB44CD40}&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;industry&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;include&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Otherwise only the last item is getting into the filter if you define it like this:&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;include&lt;/span&gt; &lt;span class="attr"&gt;hint&lt;/span&gt;&lt;span class="kwrd"&gt;="list:IncludeTemplate"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;template&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;{71D42CF2-CE89-4030-9EB1-0065B35B78C4}&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;template&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;template&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;{ED9F466B-D436-4A3F-B22F-EA6E8097085D}&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;template&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;template&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;{78166FE4-EDFB-4B0D-A3ED-860AEB44CD40}&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;template&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;include&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;If you went through all these steps and still can’t get the indexing to work, here is what you can do.&lt;/p&gt;
&lt;p&gt;Since there are a few things that can go wrong, we need to rule out “live indexing” functionality that relies on history store and update intervals and the index configuration itself. 
&lt;p&gt;To find out whether your index is properly configured at all, follow these steps to run a full index rebuild process on the CD side. 
&lt;p&gt;1. Download &lt;strong&gt;&lt;u&gt;&lt;a href="http://resources.alexshyba.com/blog/RebuildDatabaseCrawlers.zip"&gt;this script&lt;/a&gt;&lt;/u&gt;&lt;/strong&gt; and copy it to the /layouts folder of your CD instance. 
&lt;p&gt;2. Execute it in the browser by going to &lt;strong&gt;http://&amp;lt;your_site&amp;gt;/layouts/RebuildDatabaseCrawlers.aspx&lt;/strong&gt; 
&lt;p&gt;3. Toggle the index you want to rebuild and hit rebuild. 
&lt;p&gt;This will launch a background process so there will be no immediate indication whether the index is rebuilt or not. I suggest looking into the log file to confirm this actually worked. 
&lt;p&gt;If you do not see your custom index in the list, this means that your index is not properly registered in the system. This is a configuration problem. Review your configuration files and make sure the index is there. 
&lt;p&gt;If after the index is fully rebuilt, you start getting hits and the search index contains expected number of documents (you can use either &lt;a href="http://trac.sitecore.net/IndexViewer"&gt;IndexViewer&lt;/a&gt; or &lt;a href="http://www.getopt.org/luke/"&gt;Luke&lt;/a&gt; to confirm that), then the index itself is configured properly and what you need to make sure is that the “live indexing” portion works right. 
&lt;p&gt;In order to do that, follow these steps: 
&lt;p&gt;1. Login to CM instance. 
&lt;p&gt;2. Modify an item (change the title field for ex.) that you know is definitely included into the search index. 
&lt;p&gt;3. Save. 
&lt;p&gt;4. See if the item change got reflected within the index on the master/CM side. 
&lt;p&gt;5. Publish. 
&lt;p&gt;6. Verify that the item change got published and cache cleared. 
&lt;p&gt;7. Within SQL Management studio query the History table of the web database: 
&lt;p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; Category, &lt;span class="kwrd"&gt;Action&lt;/span&gt;, ItemId, ItemLanguage, ItemVersion, ItemPath, UserName, Created&lt;br&gt;&lt;span class="kwrd"&gt;FROM&lt;/span&gt; [Sitecore_web].[dbo].[History] &lt;span class="kwrd"&gt;order&lt;/span&gt; &lt;span class="kwrd"&gt;by&lt;/span&gt; created desc&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;a href="http://lh3.ggpht.com/_AIfg6b6IeD0/TbhceNZir3I/AAAAAAAAa_k/2nIal7etNcU/s1600-h/image%5B7%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_AIfg6b6IeD0/Tbhce2GYksI/AAAAAAAAa_o/c-9xtmXQQTw/image_thumb%5B3%5D.png?imgmax=800" width="628" height="65"&gt;&lt;/a&gt;&lt;/pre&gt;
&lt;p&gt;You should be able to see a few entries related to your item change. 
&lt;p&gt;8. Now query the Properties table of the Web database:&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; [&lt;span class="kwrd"&gt;Key&lt;/span&gt;], [&lt;span class="kwrd"&gt;Value&lt;/span&gt;] &lt;span class="kwrd"&gt;FROM&lt;/span&gt; [Sitecore_web].[dbo].[Properties]&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;a href="http://lh4.ggpht.com/_AIfg6b6IeD0/TbhcfsXhBdI/AAAAAAAAa_s/J7QpK0hZlj4/s1600-h/image%5B11%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_AIfg6b6IeD0/TbhcgqGo5WI/AAAAAAAAa_w/vcxP1dx8Fn0/image_thumb%5B5%5D.png?imgmax=800" width="230" height="86"&gt;&lt;/a&gt;&lt;/pre&gt;
&lt;p&gt;You should see two “IndexProvider” related entries for each of the environments.&lt;br&gt;Note that the actual key names could be different, depending on your configuration. 
&lt;p&gt;As previously indicated, these UTC based timestamps help IndexingProvider understand what items to pull out from the history table when doing next index update. 
&lt;p&gt;So naturally, the timestamp for the CD environment should be later than the one for CM. 
&lt;p&gt;If you do not see an entry for the CD environment, then something is wrong with the configuration. Double check the UpdateInterval setting, history table and index configuration. 
&lt;p&gt;9. Open up the most recent log file on CD and look for the following entries: 
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;ManagedPoolThread #12 16:39:58 INFO Starting update of index for the database 'web' (1 pending).&lt;br&gt;ManagedPoolThread #12 16:39:58 INFO Update of index for the database 'web' done.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;These entries indicate that the IndexingProvider was kicked in and processed the changed items (1 in this case). The item should be in the physical index file as document now. 
&lt;p&gt;If you do not see these messages, then something is wrong with the actual crawler piece. Look out for any exceptions that appear in this timeframe. The DatabaseCrawler component may not be processing your items properly. So you may have to override it and step into the code to figure out what’s going on. 
&lt;p&gt;10. Finally, as a final checkup, take a deep look into the search index files themselves. 
&lt;p&gt;The following tools will help you browse the contents of the index and search: 
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://trac.sitecore.net/IndexViewer"&gt;IndexViewer&lt;/a&gt; 
&lt;li&gt;&lt;a href="http://www.getopt.org/luke/"&gt;Luke&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;If you get through this checklist and reading this, my hope is that your search is already working properly.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-7995062323361234393?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/7995062323361234393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=7995062323361234393' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/7995062323361234393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/7995062323361234393'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/04/search-index-troubleshooting.html' title='Search Index Troubleshooting'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_AIfg6b6IeD0/TbhcdJFWg9I/AAAAAAAAa_g/UAJoe_b7qbQ/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-6729552627830144837</id><published>2011-04-14T08:23:00.001-07:00</published><updated>2011-04-14T08:23:44.934-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dreamcore 2011'/><category scheme='http://www.blogger.com/atom/ns#' term='announcement'/><title type='text'>My Dreamcore Presentation</title><content type='html'>&lt;p&gt;&lt;a href="http://www.sitecore.net/Events/Dreamcore2011/Home.aspx"&gt;Dreamcore&lt;/a&gt; is just around the corner and I am fully immersed in my presentation.&lt;br&gt;The topic is “Building Successful and Efficient Multilingual Solutions with &lt;a href="http://www.sitecore.net/"&gt;Sitecore&lt;/a&gt;”.&lt;/p&gt; &lt;p&gt;My plan is to spend a few minutes showing the fundamentals of multilingual support in &lt;a href="http://www.sitecore.net/"&gt;Sitecore&lt;/a&gt; and then drill down into the use cases and some real world scenarios I’ve witnessed over a few years.&lt;/p&gt; &lt;p&gt;I believe this format will be suitable for the beginners who are thinking about a multilingual implementation and also for the experienced folks as I have a few secret tricks up my sleeve!&lt;/p&gt; &lt;p&gt;If there anything specific you would expect from my presentation, please keep the comments coming.&lt;/p&gt; &lt;p&gt;By the way, full &lt;a href="http://www.sitecore.net/Events/Dreamcore2011/Home.aspx"&gt;Dreamcore 2011&lt;/a&gt; agenda can be found here:&lt;br&gt;&lt;a href="http://www.sitecore.net/en/Events/Dreamcore2011/Agenda.aspx"&gt;http://www.sitecore.net/en/Events/Dreamcore2011/Agenda.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Hope to see you there!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-6729552627830144837?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/6729552627830144837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=6729552627830144837' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/6729552627830144837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/6729552627830144837'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/04/my-dreamcore-presentation.html' title='My Dreamcore Presentation'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-8328235920166096003</id><published>2011-04-13T07:47:00.001-07:00</published><updated>2011-04-13T07:49:00.654-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='configuration'/><title type='text'>Disable WebDAV in Sitecore</title><content type='html'>&lt;p&gt;If you are not sure what WebDAV is, please refer to &lt;a href="http://sdn.sitecore.net/Reference/Sitecore%206/WebDAV%20Configuration.aspx"&gt;this document&lt;/a&gt; on Sitecore Developer Network.&lt;br&gt;Briefly, quoting this doc: &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;WebDAV allows users of Web clients such as browsers to manage files on Web servers using Web protocols such as HTTP or HTTPS. With WebDAV, users can drag-and-drop files between the Windows desktop and the browser.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;I would recommend disabling this feature on the Content Delivery side as WebDAV is not expected to be used there. &lt;p&gt;It also makes sense disabling this feature on the CMS side if you are not planning on leveraging this feature at all. This will reduce the number of log files written to the /data/logs folder and get rid of the errors in the main log files generated if WebDAV is misconfigured.  &lt;p&gt;&lt;strong&gt;Here are the steps:&lt;/strong&gt; &lt;p&gt;1. Remove WebDAV config references within &amp;lt;log4net /&amp;gt;:&lt;/p&gt; &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt; &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;log4net&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;appender&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="LogFileAppender"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="log4net.Appender.SitecoreLogFileAppender, Sitecore.Logging"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;file&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="$(dataFolder)/logs/log.{date}.txt"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;appendToFile&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="true"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;layout&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="log4net.Layout.PatternLayout"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;conversionPattern&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="%4t %d{ABSOLUTE} %-5p %m%n"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;layout&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;appender&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;lt;!--&amp;lt;appender name="WebDAVLogFileAppender" type="log4net.Appender.SitecoreLogFileAppender, Sitecore.Logging"&amp;gt; &lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;lt;file value="$(dataFolder)/logs/WebDAV.log.{date}.txt" /&amp;gt; &lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;lt;appendToFile value="true" /&amp;gt; &lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;lt;layout type="log4net.Layout.PatternLayout"&amp;gt; &lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;lt;conversionPattern value="%4t %d{ABSOLUTE} %-5p %m%n" /&amp;gt; &lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;lt;/layout&amp;gt; &lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;lt;/appender&amp;gt;--&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt;  16:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;root&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum17"&gt;  17:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;priority&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="INFO"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum18"&gt;  18:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;appender-ref&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ref&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="LogFileAppender"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum19"&gt;  19:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;root&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum20"&gt;  20:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;lt;!--&amp;lt;logger name="Sitecore.Diagnostics.WebDAV" additivity="false"&amp;gt; &lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum21"&gt;  21:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;lt;level value="INFO" /&amp;gt; &lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum22"&gt;  22:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;lt;appender-ref ref="WebDAVLogFileAppender" /&amp;gt; &lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum23"&gt;  23:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;lt;/logger&amp;gt;--&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum24"&gt;  24:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;log4net&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;2. Remove WebDAV config references within &amp;lt;system.webServer /&amp;gt;:&lt;/p&gt;
&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;lt;!--&amp;lt;remove name="WebDAVModule" /&amp;gt;--&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;  &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;lt;!--&amp;lt;add name="WebDAVRoot" path="*" verb="OPTIONS,PROPFIND" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" preCondition="classicMode,runtimeVersionv2.0,bitness32" /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;lt;add name="WebDAVRoot64" path="*" verb="OPTIONS,PROPFIND" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" preCondition="classicMode,runtimeVersionv2.0,bitness64" /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;lt;add verb="*" path="sitecore_webDAV.ashx" type="Sitecore.Resources.Media.WebDAVMediaRequestHandler, Sitecore.Kernel" name="Sitecore.WebDAVMediaRequestHandler" /&amp;gt;--&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;3. Remove WebDAV config references within &amp;lt;httpHandlers&amp;gt;/&amp;gt;:&lt;/p&gt;
&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;lt;!--&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;lt;add verb="*" path="sitecore_webDAV.ashx" type="Sitecore.Resources.Media.WebDAVMediaRequestHandler, Sitecore.Kernel" /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color: #008000"&gt;--&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;4. Finally, you can delete the Sitecore.WebDAV.config file from webroot/App_Config/Include. 
&lt;p&gt;There you go!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-8328235920166096003?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/8328235920166096003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=8328235920166096003' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/8328235920166096003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/8328235920166096003'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/04/disable-webdav-in-sitecore.html' title='Disable WebDAV in Sitecore'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-7621985283170147344</id><published>2011-02-09T09:26:00.000-08:00</published><updated>2011-02-11T09:22:15.446-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='upgrade'/><title type='text'>To upgrade or not to upgrade * updated</title><content type='html'>&lt;div align="justify"&gt;&lt;p&gt;Greetings!&lt;/p&gt;&lt;p&gt;One of our partners asked me yesterday about my thoughts on upgrading. Whether &lt;a href="http://www.sitecore.net/"&gt;Sitecore&lt;/a&gt; recommends upgrading to 6.4 as of now or not. Also, just stumbled upon this great discussion &lt;a href="http://sitecorekh.blogspot.com/2011/01/using-non-recommended-releases-in.html"&gt;here on Kim Hornung’s blog&lt;/a&gt;!&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;This is quite an interesting and thought provoking question, and I don’t think there could be a single answer to that and I also think that Sitecore has been doing a great job not forcing customer’s to upgrade. At the end of the day, it is your customer’s requirements and expectations that should drive the decision. With Sitecore’s successful hotfix process, if you have an issue that is a showstopper, you can request a quick hotfix from the Customer Service rather than upgrading your whole infrastructure!&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;a href="https://lh4.googleusercontent.com/_AIfg6b6IeD0/TVVvFqr8FII/AAAAAAAAa8U/1gW-uxPnYUg/upgrade%20decision%20tree.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 16px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="upgrade decision tree" border="0" alt="upgrade decision tree" align="left" src="https://lh4.googleusercontent.com/_AIfg6b6IeD0/TVVvFqr8FII/AAAAAAAAa8U/1gW-uxPnYUg/upgrade%20decision%20tree.png?imgmax=500" width="235" height="244"&gt;&lt;/a&gt;Here is a decision tree that encompass everything that I generally suggest to customers and partners.&lt;/p&gt;&lt;p&gt;Click on the image to expand.&lt;/p&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;p&gt;&lt;i&gt;Please note that this is not an official recommendation from Sitecore. Rather, these are my personal thoughts on the subject.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;With 6.3.1 being recommended, I’ve updated the image.&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-7621985283170147344?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/7621985283170147344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=7621985283170147344' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/7621985283170147344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/7621985283170147344'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/02/to-upgrade-or-not-upgrade.html' title='To upgrade or not to upgrade * updated'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh4.googleusercontent.com/_AIfg6b6IeD0/TVVvFqr8FII/AAAAAAAAa8U/1gW-uxPnYUg/s72-c/upgrade%20decision%20tree.png?imgmax=500' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-6975456661541228437</id><published>2011-02-04T08:56:00.001-08:00</published><updated>2011-02-04T08:56:14.872-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='announcement'/><title type='text'>New Year, New Sitecore Blog</title><content type='html'>&lt;p&gt;I have been thinking about this for a while, and finally decided to create another &lt;a href="http://www.sitecore.net/"&gt;Sitecore&lt;/a&gt; blog on our Community area dedicated to sharing my experiences in the field working closely with implementation partners:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.sitecore.net/AlexShyba"&gt;http://www.sitecore.net/AlexShyba&lt;/a&gt;&lt;/p&gt; &lt;p&gt;My ambitious plan is too continue sharing anything deeply technical here while the new blog would be a place where technical meets business half way.&lt;/p&gt; &lt;p&gt;Hope you enjoy it!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-6975456661541228437?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/6975456661541228437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=6975456661541228437' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/6975456661541228437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/6975456661541228437'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/02/new-year-new-sitecore-blog.html' title='New Year, New Sitecore Blog'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-135144440826808718</id><published>2011-02-03T12:06:00.001-08:00</published><updated>2011-02-03T12:06:04.749-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='announcement'/><category scheme='http://www.blogger.com/atom/ns#' term='user group'/><title type='text'>Sitecore User Group in San Francisco / Bay Area</title><content type='html'>&lt;p align="justify"&gt;I would like to announce the formation of the first and only &lt;a href="http://www.meetup.com/Sitecore-Bay-Area/"&gt;Sitecore User Group&lt;/a&gt; in the Bay Area.&lt;/p&gt; &lt;p align="justify"&gt;My vision is to create a dedicated community for passionate &lt;a href="http://www.sitecore.net/"&gt;Sitecore&lt;/a&gt; developers and end users devoted to learning new things and sharing experience about everything related to &lt;a href="http://www.sitecore.net/"&gt;Sitecore CMS&lt;/a&gt;. Anybody can join. You can be either a beginner or experienced &lt;a href="http://www.sitecore.net/"&gt;Sitecore&lt;/a&gt; developer, or end user.&lt;/p&gt; &lt;p align="justify"&gt;Since Sitecore USA is headquartered in San Francisco, you have an amazing opportunity to get new information about the product directly from the vendor and get to meet the &lt;a href="http://www.sitecore.net/"&gt;Sitecore&lt;/a&gt; folks! &lt;p align="justify"&gt;The user group’s home is &lt;a href="http://www.meetup.com/Sitecore-Bay-Area/"&gt;here&lt;/a&gt;. Join us!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-135144440826808718?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/135144440826808718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=135144440826808718' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/135144440826808718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/135144440826808718'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/02/sitecore-user-group-in-san-francisco.html' title='Sitecore User Group in San Francisco / Bay Area'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-2296621833804224034</id><published>2011-02-02T16:21:00.001-08:00</published><updated>2011-02-02T16:21:53.981-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lucene'/><title type='text'>8 Reasons to Use New Search in Sitecore</title><content type='html'>&lt;p&gt;Greetings, &lt;p align="justify"&gt;Back in 2010 at the first &lt;a href="http://dreamcore.sitecore.net/"&gt;Dreamcore&lt;/a&gt; conference, I was honored to present on two topics: ”&lt;a href="http://resources.alexshyba.com/dreamcore/Data-Retrieval-Techniques.zip"&gt;Data Retrieval Techniques with Sitecore&lt;/a&gt;” and “&lt;a href="http://resources.alexshyba.com/dreamcore/Using-Lucene.NET.zip"&gt;Using Lucene.NET with Sitecore&lt;/a&gt;”.&lt;br&gt;If you have not seen any of those, download the slides and check them out. I consider myself being a data guy, so that’s why I really enjoyed presenting on these topics. Not sure why, but I love everything about data access, and absolutely adore what Microsoft did with Entity Framework 4, especially the oData stuff. There is something truly exciting in seeing your data flow and materialize in one shape or another.&lt;/p&gt; &lt;p align="justify"&gt;Anyways, back to the topic. During my presentation on Lucene/Sitecore marriage, I was showing that Sitecore actually has two (!!!) implementation of Lucene.NET. One is a legacy, what we call “old” search. Everything within Sitecore.Data.Indexing namespace is considered to be “old” search. It is configured and implemented differently, though it uses the same Lucene.NET dll. There is also the “new” search which is represented by a few classes within Sitecore.Search namespace. &lt;p align="justify"&gt;The main point of the presentation was to show that you should not really use the “old” search if you develop on Sitecore 6. &lt;p&gt;Here are some extracts from the presentation explaining why:&lt;/p&gt; &lt;p&gt;1. Much richer out of the box:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;a. one can specify locations, templates, etc.&lt;br&gt;b. indexes all fields&lt;br&gt;c. supports tagging&lt;br&gt;d. automatic prioritization&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;2. More extensible, more flexible and “overridable” &lt;blockquote&gt; &lt;p&gt;a. Configuration is separated from database&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;3. Better API &lt;blockquote&gt; &lt;p&gt;a. enforcing programming best practices&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;b. friendlier and easier to work with &lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;c. external integration is possible&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;d. supports of “context of search operation“&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;4. Faster and more dependable. &lt;p&gt;Convinced yet? &lt;p align="justify"&gt;Both “old” and “new” search index are being maintained by Sitecore in a similar fashion. However, they present different APIs to interact with them. &lt;p align="justify"&gt;There is got to be a reason, but I frequently witness Sitecore implementers favor “old” over the “new” one. My only explanation is that we did not fully document the “new” search with the release of Sitecore 6, and that SDN was not steering developers in the right direction. &lt;p align="justify"&gt;My humble hope is to address this shortcoming. &lt;p align="justify"&gt;&lt;strong&gt;Here are 8 reasons why I should consider using “new” search.&lt;/strong&gt; &lt;p align="justify"&gt;1. All the good stuff about the “new” search listed above. &lt;p align="justify"&gt;2. There is already a very comprehensive &lt;a href="http://sdn.sitecore.net/Reference/Sitecore%206/Sitecore%20Search%20and%20Indexing.aspx"&gt;document&lt;/a&gt; on the “new” search on SDN. It should explain most of what the “new” search is about. &lt;p align="justify"&gt;3. There is a &lt;a href="http://trac.sitecore.net/AdvancedDatabaseCrawler"&gt;shared source project called “Advanced Database Crawler”&lt;/a&gt; which leverages the “new” search and pushes its limits further introducing such things as field filters, dynamically computed fields, extended field crawler factory, plus includes an easy to use Searcher APIs that should abstract complexities of building search queries. &lt;p align="justify"&gt;4. I have also &lt;a href="http://sitecoreblog.alexshyba.com/2010/11/sitecore-searcher-and-advanced-database.html"&gt;blogged about it&lt;/a&gt; and recorded a very long and boring screencast showcasing this component. &lt;p align="justify"&gt;5. Ivan blogged about it for quite a bit &lt;a href="http://sitecoregadgets.blogspot.com/search/label/lucene"&gt;here&lt;/a&gt; and showed a few code snippets and workarounds. &lt;p align="justify"&gt;6. The “new” Sitecore.Search namespace has a high chance of being the data access technique of choice, since that’s all you need to effectively query Sitecore data repository. &lt;p align="justify"&gt;7. The “old” implementation &lt;i&gt;may &lt;/i&gt;be deprecated in next major release, so it is important not to miss the early opportunity and migrate as soon as you can. &lt;p align="justify"&gt;8. It is tried out in production by many already.&lt;br&gt;Just recently I actually was able to help a partner who decided to completely revamp their Sitecore Query based data access implementation with the “new” search. The results were reportedly dramatic and are already paying off.&lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;One important note:&lt;/strong&gt; please make sure to use either of the following &lt;a href="http://www.sitecore.net/"&gt;Sitecore CMS&lt;/a&gt; versions if you go with it:&lt;br&gt;- 6.4.1 rev.101221&lt;br&gt;- 6.3.1 rev.110112&lt;br&gt;- 6.2.0 rev.101105 (Update-5)&lt;/p&gt; &lt;p align="justify"&gt;They all contain some critical enhancements that will make your experience with the “new” search much smoother. &lt;p align="justify"&gt;Enjoy it!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-2296621833804224034?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/2296621833804224034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=2296621833804224034' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/2296621833804224034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/2296621833804224034'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/02/8-reasons-to-use-new-search-in-sitecore.html' title='8 Reasons to Use New Search in Sitecore'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-2703926748729959115</id><published>2011-02-01T08:44:00.000-08:00</published><updated>2011-02-02T14:53:18.658-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='customization'/><title type='text'>Sitecore Product URLs Amazon Style</title><content type='html'>&lt;p&gt;If you are a &lt;a href="http://www.sitecore.net/"&gt;Sitecore CMS&lt;/a&gt; developer and you love shopping on &lt;a href="http://www.amazon.com/"&gt;Amazon&lt;/a&gt;, you probably had the same thought: what would it take to re-create &lt;a href="http://draft.blogger.com/www.amazon.com"&gt;Amazon.com&lt;/a&gt; in Sitecore? Completely from scratch. Ok, maybe it’s just me.&lt;br&gt;So you will need to think about how to architect your content tree properly. Luckily, Derek has &lt;a href="http://contenttree.blogspot.com/"&gt;a blog&lt;/a&gt; dedicated solely to content tree architecture so I don’t need to go into much detail here.&lt;br&gt;Let’s say you have your content tree already designed. We are going to take Nicam demo site as an example:&lt;a href="http://lh5.ggpht.com/_AIfg6b6IeD0/TUdYuiqXLzI/AAAAAAAAa58/MjxUgRELNGg/s1600-h/image%5B3%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 8px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://lh3.ggpht.com/_AIfg6b6IeD0/TUg6QS4dbMI/AAAAAAAAa6E/JA8qd4-WLwc/image_thumb%5B2%5D.png?imgmax=800" width="151" height="264"&gt;&lt;/a&gt;&lt;br&gt;So all the camera products are structured in categories, that’s nice.&lt;br&gt;Since we talk about URLs in this post, everything is set there too. Each product has a content path which more or less serves as product URL on the public facing side.&lt;br&gt;In other words, I would be able to access my D3X camera using the following URL:&lt;br&gt;&lt;a title="http://nicam141/en/Products/Digital_SLR/Full_featured/D3X.aspx" href="http://localhost/en/Products/Digital_SLR/Full_featured/D3X.aspx"&gt;http://localhost/en/Products/Digital_SLR/Full_featured/D3X.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;One of the things you need to know is that Sitecore is constructing those URLs on the fly based on LinkManager configuration in web.config. And it is actually doing a pretty great job out of the box by giving you a number of options when it comes to URL construction. You can prepend language ISO code in URL, use display name instead of item name, etc. You can learn more about it &lt;a href="http://sdn.sitecore.net/Reference/Sitecore%206/Dynamic%20Links.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;But what if we want to have fluid URLs that are constructed based on product attributes, meta data or some other criteria? Just as on &lt;a href="http://amazon.com/"&gt;Amazon.com&lt;/a&gt;, where the product URL is clearly driven by product attributes:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_AIfg6b6IeD0/TUg5olTbqwI/AAAAAAAAa5s/PGiFrXmGglo/s1600-h/SNAGHTMLaa324b6%5B4%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="SNAGHTMLaa324b6" border="0" alt="SNAGHTMLaa324b6" src="http://lh4.ggpht.com/_AIfg6b6IeD0/TUg5tN0P9gI/AAAAAAAAa50/8fINC2D9JI4/SNAGHTMLaa324b6_thumb%5B3%5D.png?imgmax=800" width="436" height="309"&gt;&lt;/a&gt;For example, for all of our SLR cameras, use the following URL pattern: &lt;a href="http://localhost/{SLR}/{Name}/{SKU"&gt;http://localhost/{SLR}/{Name}/{SKU&lt;/a&gt;}, where SKU is an attribute on the product itself:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_AIfg6b6IeD0/TUngUoYfTbI/AAAAAAAAa6U/9-2hiM_D1ak/s1600-h/image%5B4%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_AIfg6b6IeD0/TUngW2mvqJI/AAAAAAAAa6c/ek0wqd3acFM/image_thumb%5B1%5D.png?imgmax=800" width="421" height="300"&gt;&lt;/a&gt;Well, as it turns out, it is quite straightforward to do.&lt;br&gt;When it comes to handling any custom URL handling requirements, there are mainly two components you have to deal with.&lt;br&gt;1. Custom Item Resolver.&lt;br&gt;The custom logic here will attempt to resolve a valid item in the content tree by the custom URL.&lt;br&gt;2. Custom Link Provider.&lt;br&gt;This is the flip side of the solution. We need to teach Sitecore to generate product URLs based on our custom rules.&lt;br&gt;In addition, you would generally need a component to process such custom URL rules. In my example I would simply use IDTable, which allows to store any mapping to an item in a flat table. For the sake of simplicity I will be updating my IDTable based mapping table every time an item is saved via a handler.&lt;br&gt;The result will look something like this:&lt;br&gt;&lt;a href="http://lh6.ggpht.com/_AIfg6b6IeD0/TUdbHv0cr9I/AAAAAAAAa5Y/RBffbd0dc-g/s1600-h/image%5B11%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_AIfg6b6IeD0/TUdbKoawpnI/AAAAAAAAa5g/yPGfhCykidc/image_thumb%5B5%5D.png?imgmax=800" width="610" height="560"&gt;&lt;/a&gt;&lt;br&gt;So here are all the pieces:&lt;br&gt;1. Custom Item Resolver:&lt;br&gt;&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ProductUrlResolver : HttpRequestProcessor
{
   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Process(HttpRequestArgs args)
   {
      Assert.ArgumentNotNull(args, &lt;span class="str"&gt;"args"&lt;/span&gt;);
      &lt;span class="kwrd"&gt;if&lt;/span&gt; (Context.Item != &lt;span class="kwrd"&gt;null&lt;/span&gt; || Context.Database == &lt;span class="kwrd"&gt;null&lt;/span&gt; || args.Url.ItemPath.Length == 0) &lt;span class="kwrd"&gt;return&lt;/span&gt;;
      Context.Item = ProductUrlManager.GetProductItemByFilePath(args.Url.FilePath);
   }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
 font-size: small;
 color: black;
 font-family: consolas, "Courier New", courier, monospace;
 background-color: #ffffff;
 /*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
 background-color: #f4f4f4;
 width: 100%;
 margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
 font-size: small;
 color: black;
 font-family: consolas, "Courier New", courier, monospace;
 background-color: #ffffff;
 /*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
 background-color: #f4f4f4;
 width: 100%;
 margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;br&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;processor&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="Sitecore.Pipelines.HttpRequest.ItemResolver, Sitecore.Kernel"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;&amp;lt;!-- the proper order is important --&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;processor&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="Custom.ProductUrlResolver, ProductUrlResolver"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;processor&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="Sitecore.Pipelines.HttpRequest.LayoutResolver, Sitecore.Kernel"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
 font-size: small;
 color: black;
 font-family: consolas, "Courier New", courier, monospace;
 background-color: #ffffff;
 /*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
 background-color: #f4f4f4;
 width: 100%;
 margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;br&gt;2. Custom Link Provider:&lt;br&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ProductLinkProvider : LinkProvider
{
   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetItemUrl(Item item, UrlOptions options)
   {
     Assert.ArgumentNotNull(item, &lt;span class="str"&gt;"item"&lt;/span&gt;);
     Assert.ArgumentNotNull(options, &lt;span class="str"&gt;"options"&lt;/span&gt;);
     &lt;span class="kwrd"&gt;return&lt;/span&gt; item.IsProduct() ? item.ProductUrl() : &lt;span class="kwrd"&gt;base&lt;/span&gt;.GetItemUrl(item, options);
   }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
 font-size: small;
 color: black;
 font-family: consolas, "Courier New", courier, monospace;
 background-color: #ffffff;
 /*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
 background-color: #f4f4f4;
 width: 100%;
 margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;br&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;linkManager&lt;/span&gt; &lt;span class="attr"&gt;defaultProvider&lt;/span&gt;&lt;span class="kwrd"&gt;="sitecore"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;providers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;clear&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="sitecore"
&lt;/span&gt;&lt;span class="attr"&gt;              type&lt;/span&gt;&lt;span class="kwrd"&gt;="Custom.ProductLinkProvider, ProductUrlResolver"
&lt;/span&gt;&lt;span class="attr"&gt;              ...&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;providers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;linkManager&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
 font-size: small;
 color: black;
 font-family: consolas, "Courier New", courier, monospace;
 background-color: #ffffff;
 /*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
 background-color: #f4f4f4;
 width: 100%;
 margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;br&gt;3. ItemSaved event handler:&lt;br&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ProductHandler
{
      &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnItemSaved(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs args)
      {
         &lt;span class="kwrd"&gt;if&lt;/span&gt; (args == &lt;span class="kwrd"&gt;null&lt;/span&gt;) &lt;span class="kwrd"&gt;return&lt;/span&gt;;

         var item = Event.ExtractParameter(args, 0) &lt;span class="kwrd"&gt;as&lt;/span&gt; Item;

         &lt;span class="kwrd"&gt;if&lt;/span&gt; (item == &lt;span class="kwrd"&gt;null&lt;/span&gt;) &lt;span class="kwrd"&gt;return&lt;/span&gt;;

         &lt;span class="kwrd"&gt;if&lt;/span&gt; (item.IsProduct())
         {
            item.RegisterMapping();
         }
      }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
 font-size: small;
 color: black;
 font-family: consolas, "Courier New", courier, monospace;
 background-color: #ffffff;
 /*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
 background-color: #f4f4f4;
 width: 100%;
 margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;br&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;event&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="item:saved"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    ...
   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;handler&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="Custom.ProductHandler,ProductUrlResolver"&lt;/span&gt; &lt;span class="attr"&gt;method&lt;/span&gt;&lt;span class="kwrd"&gt;="OnItemSaved"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;event&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
 font-size: small;
 color: black;
 font-family: consolas, "Courier New", courier, monospace;
 background-color: #ffffff;
 /*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
 background-color: #f4f4f4;
 width: 100%;
 margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
 font-size: small;
 color: black;
 font-family: consolas, "Courier New", courier, monospace;
 background-color: #ffffff;
 /*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
 background-color: #f4f4f4;
 width: 100%;
 margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;br&gt;4. Utility Manager where all the logic is handled:&lt;br&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ProductUrlManager
   {
      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; IdTableKey
      {
         get { &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;"ProductResolver"&lt;/span&gt;; }
      }

      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsProduct(&lt;span class="kwrd"&gt;this&lt;/span&gt; Item item)
      {
         var template = TemplateManager.GetTemplate(item);
         &lt;span class="kwrd"&gt;return&lt;/span&gt; template != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp;
template.DescendsFromOrEquals(ID.Parse(&lt;span class="str"&gt;"{B87EFAE7-D3D5-4E07-A6FC-012AAA13A6CF}"&lt;/span&gt;));
      }

      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ProductUrl(&lt;span class="kwrd"&gt;this&lt;/span&gt; Item item)
      {
         &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;"/{0}/{1}/{2}"&lt;/span&gt;.FormatWith(item.TemplateName.ToLowerInvariant(), 
item.Name.ToLowerInvariant(),
item[&lt;span class="str"&gt;"SKU"&lt;/span&gt;]);
      }

      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Item GetProductItemByFilePath(&lt;span class="kwrd"&gt;string&lt;/span&gt; filePath)
      {
         var id = IDTable.GetID(ProductUrlManager.IdTableKey, filePath);

         &lt;span class="kwrd"&gt;if&lt;/span&gt; (id != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !ID.IsNullOrEmpty(id.ID))
         {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; Context.Database.GetItem(id.ID);
         }

         &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;;
      }

      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; RegisterMapping(&lt;span class="kwrd"&gt;this&lt;/span&gt; Item item)
      {
         IDTable.RemoveID(ProductUrlManager.IdTableKey, item.ID);
         IDTable.Add(ProductUrlManager.IdTableKey, item.ProductUrl(), item.ID);
      }
   }&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
 font-size: small;
 color: black;
 font-family: consolas, "Courier New", courier, monospace;
 background-color: #ffffff;
 /*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
 background-color: #f4f4f4;
 width: 100%;
 margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
 font-size: small;
 color: black;
 font-family: consolas, "Courier New", courier, monospace;
 background-color: #ffffff;
 /*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
 background-color: #f4f4f4;
 width: 100%;
 margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;br&gt;Conceptually, what do you think about this?&lt;br&gt;Note that this is a pretty hardcoded way of implementing such requirement. Please consider this as a prototype rather than a solution ready for production. 

  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-2703926748729959115?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/2703926748729959115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=2703926748729959115' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/2703926748729959115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/2703926748729959115'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/02/sitecore-product-urls-amazon-style.html' title='Sitecore Product URLs Amazon Style'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_AIfg6b6IeD0/TUg6QS4dbMI/AAAAAAAAa6E/JA8qd4-WLwc/s72-c/image_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-2495587104337262490</id><published>2011-01-31T10:26:00.001-08:00</published><updated>2011-01-31T11:02:18.575-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dreamcore 2011'/><title type='text'>Dreamcore is going to be even more fun this year!</title><content type='html'>&lt;p align="justify"&gt;What could be more fun than meeting your fellow Sitecore Enthusiasts and visiting beautiful Boston, especially in springtime? Learning about what’s new coming out, share ideas and best practices.&lt;br&gt;Well, you must have heard, we are doing it again! &lt;/p&gt; &lt;p align="justify"&gt;As we still working hard on the agenda, but here are two known facts:&lt;/p&gt; &lt;p align="justify"&gt;1. Yes, I will be speaking about common implementation scenarios. Specifics are coming soon.&lt;/p&gt; &lt;p align="justify"&gt;2. Now exclusive information…just overheard it in the corridors of the marketing department.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://www.dotnetrocks.com/"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 9px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" border="0" align="left" src="http://www.franklins.net/images/carl.jpg" width="109" height="144"&gt;&lt;/a&gt;This time we are going to have a special guest speaker: &lt;a href="http://www.franklins.net/carl.aspx"&gt;Carl Franklin&lt;/a&gt;!&lt;br&gt;In the world of technology, you know Carl as one of the first VB programmers, an extra famous Microsoft enthusiast, and of course, a founder and co-host of &lt;a href="http://www.dotnetrocks.com/"&gt;.NET Rocks!&lt;/a&gt;, an Internet audio talk show for people like you an me.&lt;/p&gt; &lt;p align="justify"&gt;Again, specifics will be coming later, but rest assured that Carl’s inspirational message will leave no doubt that .NET Rocks! Along with that, we will be doing our own part, and show you exactly why Sitecore Rocks!&lt;/p&gt; &lt;p align="justify"&gt;It is going to be so much fun! See you all in Boston!&lt;/p&gt; &lt;p align="justify"&gt; &lt;a title="Dreamcore" href="http://www.sitecore.net/dreamcore"&gt;Dreamcore&lt;/a&gt; 2011 is coming April 19-20, 2011 in Boston. Sign up now! &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-2495587104337262490?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/2495587104337262490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=2495587104337262490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/2495587104337262490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/2495587104337262490'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/01/dreamcore-is-going-to-be-even-more-fun.html' title='Dreamcore is going to be even more fun this year!'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-4248807385068412341</id><published>2011-01-06T16:10:00.001-08:00</published><updated>2011-01-09T11:00:34.648-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sitecore 6.4'/><category scheme='http://www.blogger.com/atom/ns#' term='shared source'/><category scheme='http://www.blogger.com/atom/ns#' term='customization'/><title type='text'>Color Picker Field for Sitecore</title><content type='html'>&lt;p&gt;Here is a late Christmas present for the &lt;a href="http://www.sitecore.net/"&gt;Sitecore&lt;/a&gt; community. A “ColorPicker” custom field that helps storing color codes in &lt;a href="http://www.sitecore.net/"&gt;Sitecore&lt;/a&gt;.  &lt;p&gt;The idea is simple: have a single line text box for color code storage and present the user with a good looking dialog to pick the color.  &lt;p&gt;Technically speaking, there are two ways of color picking implemented.&lt;br&gt;The first approach is using native Internet Explorer’s color picker dialog and it is getting called via JavaScript.&lt;br&gt;The second one is using a custom built XamlSharp dialog with a ColorPicker control from ComponentArt. If you are using non IE browsers, the second dialog will be called.  &lt;p&gt;Here is a short video about how it works. Turn those mics on!&lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px auto; padding-left: 0px; width: 448px; padding-right: 0px; display: block; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:ed4e4678-363b-4eda-86e2-7115feff7919" class="wlWriterEditableSmartContent"&gt;&lt;div id="f223d448-d752-47a9-a9d0-de693bb04a6f" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=uwX_tsw2EjY&amp;amp;feature=youtube_gdata_player" target="_new"&gt;&lt;img src="http://lh4.ggpht.com/_AIfg6b6IeD0/TSoF0FpdgEI/AAAAAAAAax4/OhMQpmmeBxI/video8f57ac72e970%5B5%5D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('f223d448-d752-47a9-a9d0-de693bb04a6f'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/uwX_tsw2EjY?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/uwX_tsw2EjY?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="width:448px;clear:both;font-size:.8em"&gt;Color Picker Module for Sitecore&lt;/div&gt;&lt;/div&gt; &lt;p&gt;&lt;b&gt;Here are the installation steps:&lt;/b&gt;  &lt;p&gt;1. Download the appropriate Sitecore package.&lt;br&gt;If you are planning on building the project yourself, use the “ColorPicker field items only” package.  &lt;p&gt;2. Install it via Sitecore desktop.  &lt;p&gt;3. After the installation, new custom field called “Color Picker” should be registered with the system.  &lt;p&gt;To verify it, switch to “core” database and go to the following location: “/sitecore/system/Field types/Simple Types”  &lt;p&gt;The “Color Picker” field should be there and should look like this:  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_AIfg6b6IeD0/TSZZ8BlmhzI/AAAAAAAAaxE/dTl_KVrAIrs/s1600-h/clip_image001%5B9%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://lh4.ggpht.com/_AIfg6b6IeD0/TSZZ8_m6giI/AAAAAAAAaxM/tEDtk-dAVNc/clip_image001_thumb%5B6%5D.png?imgmax=800" width="144" height="120"&gt;&lt;/a&gt;  &lt;p&gt;&lt;b&gt;Short user guide:&lt;/b&gt;  &lt;p&gt;1. If the installation was successful, you can start using it.  &lt;p&gt;2. Find the template you want to play with.  &lt;p&gt;3. Create a field of type “Color Picker”  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_AIfg6b6IeD0/TSZZ9UroohI/AAAAAAAAaxU/l5V_SuwAals/s1600-h/image%5B3%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_AIfg6b6IeD0/TSZZ9yLUBJI/AAAAAAAAaxc/UqTsZXNSM2k/image_thumb%5B1%5D.png?imgmax=800" width="343" height="257"&gt;&lt;/a&gt;  &lt;p&gt;4. Create an item from this template.  &lt;p&gt;5. Enjoy.  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_AIfg6b6IeD0/TSZZ-jx5q0I/AAAAAAAAaxk/ZY_z3Y8_d8o/s1600-h/image%5B7%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_AIfg6b6IeD0/TSZZ_5tACDI/AAAAAAAAaxs/5oRgqechaGw/image_thumb%5B3%5D.png?imgmax=800" width="619" height="408"&gt;&lt;/a&gt;  &lt;p&gt;This shared source module has been implemented in collaboration with Artem Loboda (&lt;a href="http://www.compent.dk/"&gt;compent.dk&lt;/a&gt;).  &lt;p&gt;Developed and tested on 6.4 Update-1. Expected to work with 6.3. There could be compatibility issues with earlier releases.  &lt;p&gt;All the sources are published to our Shared Source Library. Thanks for the help, Jimmie :-)&lt;br&gt;&lt;a href="http://trac.sitecore.net/ColorPicker/browser/Trunk"&gt;http://trac.sitecore.net/ColorPicker/browser/Trunk&lt;/a&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-4248807385068412341?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/4248807385068412341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=4248807385068412341' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/4248807385068412341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/4248807385068412341'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2011/01/color-picker-field-for-sitecore.html' title='Color Picker Field for Sitecore'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_AIfg6b6IeD0/TSoF0FpdgEI/AAAAAAAAax4/OhMQpmmeBxI/s72-c/video8f57ac72e970%5B5%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-2291751344087460075</id><published>2010-12-09T08:53:00.001-08:00</published><updated>2010-12-09T09:16:12.389-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='troubleshooting'/><category scheme='http://www.blogger.com/atom/ns#' term='Sitecore 6.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Sitecore 6.1'/><category scheme='http://www.blogger.com/atom/ns#' term='Sitecore 6.2'/><title type='text'>Assembly Version Conflicts for Newtonsoft.Json, Telerik, ComponentArt, etc.</title><content type='html'>&lt;p&gt;Hi there,&lt;/p&gt; &lt;p&gt;Most of you know that &lt;a href="http://www.sitecore.net/"&gt;Sitecore CMS&lt;/a&gt; relies on a few 3rd party components that help providing compelling web experience. A few come to mind: Telerik’s RTE, ComponentArt’s grids, JSON for .NET utility from Newtonsoft, Lucene.NET, etc.&lt;/p&gt; &lt;p&gt;Since earlier Sitecore versions (pre 6.3) rely on older versions of these 3rd party assemblies and most implementers are logically striving for using latest and greatest, conflicts of assembly versions arise. And strangely enough, I am hearing about these issues quite frequently now.&lt;/p&gt; &lt;p&gt;So how can these conflicts can be resolved?&lt;/p&gt; &lt;p&gt;Well, since an option of registering those in GAC is almost always a big NO-NO, the following technique proved to be workable for a few customers. It is called assembly version redirection.&lt;/p&gt; &lt;p&gt;What you need to do is add the following into the web.config’s &amp;lt;assemblyBinding&amp;gt;. The following example covers the “Newtonsoft.Json” assembly, however this is applicable to any other 3rd party assembly:&lt;br&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dependentAssembly&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;assemblyIdentity&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Newtonsoft.Json"&lt;/span&gt; &lt;span class="attr"&gt;publicKeyToken&lt;/span&gt;&lt;span class="kwrd"&gt;="30ad4fe6b2a6aeed"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;codeBase&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="3.5.0.0"&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="C:\wwwroot\Sitecore\WebSite\new_bin\Newtonsoft.Json.dll"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;dependentAssembly&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;Afterwards, feel free to reference the newer version in your Visual Studio project, just remember to set the &lt;em&gt;“Copy Local”&lt;/em&gt; property to &lt;em&gt;False&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Note that since the release of Sitecore 6.3, most of those 3rd party assemblies were updated, so this article may be completely useless to you. Just make sure to check the exact &lt;a href="http://www.sitecore.net/"&gt;Sitecore&lt;/a&gt; version you are using on the login page!&lt;/p&gt;
&lt;p&gt;As always, thanks goes to our tech support for finding such a plausible alternative.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-2291751344087460075?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/2291751344087460075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=2291751344087460075' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/2291751344087460075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/2291751344087460075'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2010/12/assembly-version-conflicts-for.html' title='Assembly Version Conflicts for Newtonsoft.Json, Telerik, ComponentArt, etc.'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-3581048745400753633</id><published>2010-12-08T10:24:00.001-08:00</published><updated>2010-12-08T10:24:48.981-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Issues'/><title type='text'>Treelist Not Registering Links in Sitecore</title><content type='html'>&lt;p&gt;Greetings,  &lt;p&gt;If you work with the Treelist field extensively like I do, you may notice that it is not registering links under certain conditions. You may experience this when search is not coming back with results, when working with Link Database, etc. Also the issue is happening when you have a complex source parameter passed to your treelist field on the template:  &lt;p&gt;&lt;em&gt;DataSource=/sitecore/content/Home&amp;amp;IncludeTemplatesForDisplay=PrimaryPage&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Luckly, there are two solutions from our brilliant tech support.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;1&lt;sup&gt;st&lt;/sup&gt; option: &lt;br&gt;&lt;/strong&gt;Add “databasename=master” attribute to every treelist field source:&lt;br&gt;&lt;i&gt;&lt;em&gt;DataSource=/sitecore/content/Home&amp;amp;IncludeTemplatesForDisplay=PrimaryPage&lt;/em&gt;&lt;b&gt;&lt;u&gt;&amp;amp;databasename=master&lt;/u&gt;&lt;/b&gt;&lt;/i&gt;  &lt;p&gt;&lt;strong&gt;2&lt;sup&gt;nd&lt;/sup&gt; option: &lt;br&gt;&lt;/strong&gt;Override the Sitecore.Data.Fields.MultilistField class:  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1) Compile the following class and put the built assembly to the “/bin” folder:&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MultilistField : MultilistField
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; MultilistField(Field innerField) : &lt;span class="kwrd"&gt;base&lt;/span&gt;(innerField) { }

    &lt;span class="kwrd"&gt;private&lt;/span&gt; Database GetDatabase()
    {
        &lt;span class="kwrd"&gt;string&lt;/span&gt; source = &lt;span class="kwrd"&gt;base&lt;/span&gt;.InnerField.Source;
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (!&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(source))
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!LookupSources.IsComplex(source))
            {
                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;base&lt;/span&gt;.InnerField.Database;
            }
            Database database = LookupSources.GetDatabase(source);
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (database != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                &lt;span class="kwrd"&gt;return&lt;/span&gt; database;
            }
        }
        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;base&lt;/span&gt;.InnerField.Database;
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ValidateLinks(LinksValidationResult result)
    {
        Database database = &lt;span class="kwrd"&gt;this&lt;/span&gt;.GetDatabase();
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (database != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
        {
            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; str &lt;span class="kwrd"&gt;in&lt;/span&gt; &lt;span class="kwrd"&gt;base&lt;/span&gt;.Items)
            {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (ID.IsID(str))
                {
                    ID id = ID.Parse(str);
                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (!ItemUtil.IsNull(id) &amp;amp;&amp;amp; !id.IsNull)
                    {
                        Item targetItem = database.GetItem(id);
                        &lt;span class="kwrd"&gt;if&lt;/span&gt; (targetItem != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                        {
                            result.AddValidLink(targetItem, &lt;span class="kwrd"&gt;base&lt;/span&gt;.Value);
                        }
                        &lt;span class="kwrd"&gt;else&lt;/span&gt;
                        {
                            result.AddBrokenLink(&lt;span class="kwrd"&gt;base&lt;/span&gt;.Value);
                        }
                    }
                }
            }
        }
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;2) Modify the \App_Config\FieldTypes.config file, specifically the Treelist field type definition:&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;fieldType&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Treelist"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="Custom.MultilistField,Custom"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-3581048745400753633?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/3581048745400753633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=3581048745400753633' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/3581048745400753633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/3581048745400753633'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2010/12/treelist-not-registering-links-in.html' title='Treelist Not Registering Links in Sitecore'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-9096784936049826935</id><published>2010-11-17T13:38:00.001-08:00</published><updated>2010-11-17T13:38:10.654-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='troubleshooting'/><category scheme='http://www.blogger.com/atom/ns#' term='OMS'/><title type='text'>Previewing Sitecore Reports with Windows Report Designer</title><content type='html'>&lt;p&gt;You probably know that you can edit &lt;a href="http://www.sitecore.net/en/Products/Sitecore-Online-Marketing-Suite.aspx"&gt;Sitecore OMS&lt;/a&gt; reports outside of the browser with Windows based tools from &lt;a href="http://www.stimulsoft.com/"&gt;Stimulsoft&lt;/a&gt; available for download &lt;a href="http://www.stimulsoft.com/Downloads.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Our &lt;a href="http://sdn.sitecore.net/Reference/Sitecore%206/Report%20Designer%20Cookbook.aspx"&gt;Report Designer Cookbook on SDN&lt;/a&gt; documents the following benefits of the Windows based Designer:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Create new reports from scratch  &lt;li&gt;Use wizards to quickly create new reports  &lt;li&gt;Reports load quickly (the client does not run in a browser window)  &lt;li&gt;Use a number of keyboard shortcuts (including Ctrl Z)  &lt;li&gt;Preview functionality  &lt;li&gt;Create complex SQL queries using the Query Builder  &lt;li&gt;Import and export formatting styles&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;It turns out that the “Preview” functionality does not, you may be seeing the following errors when trying to preview:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_AIfg6b6IeD0/TORLM9D0MII/AAAAAAAAalQ/D9WSOh2-k_0/s1600-h/image%5B9%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_AIfg6b6IeD0/TORLN6X1yAI/AAAAAAAAalY/TLc94yW8UsM/image_thumb%5B5%5D.png?imgmax=800" width="601" height="269"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;What you need is to copy the following DLLs from your Sitecore &lt;em&gt;bin &lt;/em&gt;folder into the &lt;em&gt;bin &lt;/em&gt;directory where Report Designer is installed on your workstation (C:\Program Files (x86)\Stimulsoft Reports.Net 2010.2 Trial\Bin):&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Sitecore.Oracle.dll&lt;/li&gt; &lt;li&gt;Sitecore.Analytics.dll&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;After you do that, you will be able to preview the reports just fine:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_AIfg6b6IeD0/TORLO9ro93I/AAAAAAAAalg/1Lu9wbZFG0U/s1600-h/image%5B5%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_AIfg6b6IeD0/TORLQFRjfZI/AAAAAAAAalo/I7yYLHXtzqI/image_thumb%5B3%5D.png?imgmax=800" width="554" height="310"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Happy reporting!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-9096784936049826935?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/9096784936049826935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=9096784936049826935' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/9096784936049826935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/9096784936049826935'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2010/11/previewing-sitecore-reports-with.html' title='Previewing Sitecore Reports with Windows Report Designer'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_AIfg6b6IeD0/TORLN6X1yAI/AAAAAAAAalY/TLc94yW8UsM/s72-c/image_thumb%5B5%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-5800770261256681917</id><published>2010-11-12T13:31:00.001-08:00</published><updated>2010-11-12T15:14:27.058-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shared source'/><category scheme='http://www.blogger.com/atom/ns#' term='lucene'/><category scheme='http://www.blogger.com/atom/ns#' term='customization'/><title type='text'>Sitecore Searcher and Advanced Database Crawler</title><content type='html'>&lt;p&gt;Hi there,&lt;/p&gt; &lt;p&gt;Today I am proud to announce a preview release of a component that extends the standard &lt;a href="http://www.sitecore.net/" target="_blank"&gt;Sitecore&lt;/a&gt; Searching mechanisms, specifically, the relatively “new” Sitecore.Search namespace introduced in 6.0 and provides easy search querying APIs. If you are not sure what I am talking about, check out &lt;a href="http://sdn.sitecore.net/Reference/Sitecore%206/Sitecore%20Search%20and%20Indexing.aspx" target="_blank"&gt;this recently published document on SDN&lt;/a&gt; and also &lt;a href="http://sitecoregadgets.blogspot.com/2010/08/adding-custom-fields-to-index.html" target="_blank"&gt;Ivan’s blog posts&lt;/a&gt; about it.&lt;/p&gt; &lt;p&gt;As an example, I am walking through 5 generic data extraction scenarios and show you how this component can help you in daily development work while still leveraging standard Sitecore functionality.&lt;/p&gt; &lt;p&gt;The session is broken down into demos and code walkthrough. If you are not excited about the code, you can skip those parts.&lt;/p&gt; &lt;p&gt;There is no documentation available yet, but I do plan to come up with a blog series covering the recorded scenarios in more details.&lt;/p&gt; &lt;p&gt;&lt;a href="http://mediacontent.sitecore.net/Support/Search/"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_AIfg6b6IeD0/TN2yRKIm29I/AAAAAAAAalE/s0JxYqzUmos/image%5B4%5D.png?imgmax=800" width="655" height="372"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The code has been published to the &lt;a href="http://trac.sitecore.net/AdvancedDatabaseCrawler/" target="_blank"&gt;Shared Source Library&lt;/a&gt;. You can check it out.&lt;br&gt;Please let me know how it works, I appreciate any kind of feedback.&lt;/p&gt; &lt;p&gt;Shortened video is posted to &lt;a href="http://www.youtube.com/watch?v=cLof_lhvvq8"&gt;YouTube&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-5800770261256681917?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/5800770261256681917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=5800770261256681917' title='33 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/5800770261256681917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/5800770261256681917'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2010/11/sitecore-searcher-and-advanced-database.html' title='Sitecore Searcher and Advanced Database Crawler'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_AIfg6b6IeD0/TN2yRKIm29I/AAAAAAAAalE/s0JxYqzUmos/s72-c/image%5B4%5D.png?imgmax=800' height='72' width='72'/><thr:total>33</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-4375617414441582077</id><published>2010-11-05T14:31:00.001-07:00</published><updated>2010-11-05T14:33:11.564-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='staging'/><category scheme='http://www.blogger.com/atom/ns#' term='troubleshooting'/><category scheme='http://www.blogger.com/atom/ns#' term='publishing'/><title type='text'>Resetting Sitecore Staging Module</title><content type='html'>&lt;p&gt;Greetings,&lt;br&gt;A quick troubleshooting post on Friday to wrap up the work week &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://lh4.ggpht.com/_AIfg6b6IeD0/TNR3jzmUXAI/AAAAAAAAaj8/rSr2QMbHtek/wlEmoticon-winkingsmile%5B2%5D.png?imgmax=800"&gt;&lt;/p&gt; &lt;p&gt;This time about our favorite Staging module. This applies to all pre &lt;a href="http://www.sitecore.net/" target="_blank"&gt;Sitecore&lt;/a&gt; 6.3 installations as the latest version does not require this module.&lt;/p&gt; &lt;p&gt;So I have recently witnessed a problem that our customer was facing. The module being stuck during file upload process, giving out a pretty generic error from the Staging log files:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;11/2/2010 1:20:29 PM (ER): Could not Execute file upload: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.&lt;/strong&gt;  &lt;p&gt;It turns out that sometimes the module may not output the most meaningful information to the logs, so the error may not be really helpful here.&lt;br&gt;For example, this could be caused by missing ACL permissions on the files that the module is synchronizing, etc. By the way, a useful thing to double check – make sure the application pool account has read/write/modify on the folder which are configured to be synchronized.  &lt;p&gt;Here are some quick things you can do fairly to “reset” the module configuration:  &lt;p&gt;1. Delete any files under upload, download and cache sub-folders within the working directory (/sitecore modules/staging/workdir). These are the temp files automatically generated, so it is safe to do this.&lt;br&gt;2. Clear the value of the “Last updated” field on the appropriate StagingServer item in your master db:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_AIfg6b6IeD0/TNR3k6io2-I/AAAAAAAAakE/AgDyWCnzv4c/s1600-h/image%5B3%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_AIfg6b6IeD0/TNR3qYoP0EI/AAAAAAAAakM/3cGUixBbFG8/image_thumb%5B1%5D.png?imgmax=800" width="445" height="348"&gt;&lt;/a&gt;3. Run any type of publishing to trigger the Staging operation again.&lt;br&gt;4. Monitor Staging logs which are located within the working directory. &lt;/p&gt; &lt;p&gt;Also, check out &lt;a href="http://sdn.sitecore.net/Products/Staging/Documentation%20SC5/Troubleshooting.aspx" target="_blank"&gt;this&lt;/a&gt; useful troubleshooting resource on Staging module troubleshooting.  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-4375617414441582077?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/4375617414441582077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=4375617414441582077' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/4375617414441582077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/4375617414441582077'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2010/11/resetting-sitecore-staging-module.html' title='Resetting Sitecore Staging Module'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_AIfg6b6IeD0/TNR3jzmUXAI/AAAAAAAAaj8/rSr2QMbHtek/s72-c/wlEmoticon-winkingsmile%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-7163664961271730034</id><published>2010-11-04T16:40:00.001-07:00</published><updated>2011-08-24T17:24:31.950-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shared source'/><category scheme='http://www.blogger.com/atom/ns#' term='PartialLanguageFallback'/><title type='text'>Approaching Language Fallback with Sitecore</title><content type='html'>Greetings,&lt;br /&gt;
Today I would like to present to you a prototype I have been working over past couple of weeks. This solution is built around a story about language fallback requirements of a fictitious multinational company. This is just an example of how you can approach similar requirement.&lt;br /&gt;There is a number of alternative solutions that the &lt;a href="http://www.sitecore.net/"&gt;Sitecore&lt;/a&gt; gurus from all over the world came up with, so you could naturally ask me: what is so special about this approach?&lt;br /&gt;
Well, here is a couple of things coming to my mind:&lt;br /&gt;1. It is granular, field based solution.&lt;br /&gt;2. It is consistent with the product architecture, relying on proven technologies such as Standard Values provider.&lt;br /&gt;3. It is friendly to business users as they can clearly see what attributes falls back using familiar Content Editor UI.&lt;br /&gt;4. This solution covers all major data access methods: direct API, Sitecore Query, Search via in-built Lucene engine.&lt;br /&gt;I should mention, that Fast Query, is not respecting these settings, because this data access technology is simply not language aware. No language fallback solution that I’ve seen works with Fast Query.&lt;br /&gt;5. It has minor impact on performance – I ran a few performance tests and confirmed it.&lt;br /&gt;6. It is quite generic.&lt;br /&gt;7. It is flexible.&lt;br /&gt;8. It is plug and play.&lt;br /&gt;
Anyways, hope you find this useful. Any feedback (good or bad) is always welcome. Enjoy!&lt;br /&gt;
&lt;a href="http://mediacontent.sitecore.net/Support/LanguageFallbackSolution/" target="_blank"&gt;&lt;img alt="image" border="0" height="370" src="http://lh3.ggpht.com/_AIfg6b6IeD0/TNNEczYg4GI/AAAAAAAAajw/pkdIWr2Oomo/image%5B5%5D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="653" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-7163664961271730034?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/7163664961271730034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=7163664961271730034' title='33 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/7163664961271730034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/7163664961271730034'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2010/11/approaching-language-fallback-with.html' title='Approaching Language Fallback with Sitecore'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_AIfg6b6IeD0/TNNEczYg4GI/AAAAAAAAajw/pkdIWr2Oomo/s72-c/image%5B5%5D.png?imgmax=800' height='72' width='72'/><thr:total>33</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-4420673706454590201</id><published>2010-10-27T14:19:00.001-07:00</published><updated>2010-10-27T14:19:58.410-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='configuration'/><category scheme='http://www.blogger.com/atom/ns#' term='installation'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Securing Sitecore Admin</title><content type='html'>&lt;p&gt;Greetings,&lt;/p&gt;  &lt;p&gt;One of the frequent questions I am hearing besides development related stuff is configuration related. In &lt;a href="http://www.sitecore.net/"&gt;Sitecore&lt;/a&gt; world, there is always plenty of options available for you in terms of configuring your production environment. Not to get carried away, but this is really a critical aspect, especial for large enterprises. When your product cannot be flexible enough to be decoupled in components, this may represent quite a challenge. Systems forcing large footprint are more difficult to maintain, backup, secure, etc.     &lt;br /&gt;With &lt;a href="http://www.sitecore.net/"&gt;Sitecore&lt;/a&gt;, you can pretty much create a lightweight Content Delivery instance by cutting down the configuration and files to mere 50 Mb quite with a little bit of effort. This will create a more manageable and secure environment, but what if you don’t want to go through this exercise?&lt;/p&gt;  &lt;p&gt;A quick and proven way to handle this it rely on native IIS securing features. With IIS7 you can do that even easier. What you can do is simply deny access to /sitecore folder based on IP restrictions.&lt;/p&gt;  &lt;p&gt;1. Make sure you have “IP Security” feature installed for IIS:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_AIfg6b6IeD0/TMiXaMwTSHI/AAAAAAAAah0/C1cR3oMMYG4/s1600-h/image%5B3%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_AIfg6b6IeD0/TMiXbpG-cmI/AAAAAAAAah8/4o6xkzAf8Qk/image_thumb%5B1%5D.png?imgmax=800" width="354" height="384" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2. Locate your site in IIS, select /sitecore folder:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_AIfg6b6IeD0/TMiXca4UFEI/AAAAAAAAaiE/wNyBAbu7lAI/s1600-h/image%5B7%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_AIfg6b6IeD0/TMiXc_QRubI/AAAAAAAAaiM/Wc6c8x-mHxo/image_thumb%5B3%5D.png?imgmax=800" width="210" height="383" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;3. On the &lt;em&gt;Features &lt;/em&gt;view, select “IP Address and Domain Restrictions”:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_AIfg6b6IeD0/TMiXdlNUciI/AAAAAAAAaiU/zIwVMVMtv3Q/s1600-h/image%5B11%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_AIfg6b6IeD0/TMiXeIfkJCI/AAAAAAAAaic/bzT3EXyXB5s/image_thumb%5B5%5D.png?imgmax=800" width="389" height="262" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;4. Configure any allow/deny rules you want:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_AIfg6b6IeD0/TMiXejfy7SI/AAAAAAAAaik/QLwdfJkqSrQ/s1600-h/image%5B15%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_AIfg6b6IeD0/TMiXfcLFdTI/AAAAAAAAais/sgJWzUFTco0/image_thumb%5B7%5D.png?imgmax=800" width="635" height="187" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Isn’t it easy?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-4420673706454590201?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/4420673706454590201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=4420673706454590201' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/4420673706454590201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/4420673706454590201'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2010/10/securing-sitecore-admin.html' title='Securing Sitecore Admin'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_AIfg6b6IeD0/TMiXbpG-cmI/AAAAAAAAah8/4o6xkzAf8Qk/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-4818839327734454905</id><published>2010-10-25T09:25:00.001-07:00</published><updated>2010-10-25T09:25:15.333-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Page Editor'/><category scheme='http://www.blogger.com/atom/ns#' term='Issues'/><title type='text'>Undefined text in Page Editor when clearing field</title><content type='html'>&lt;p&gt;Greetings!&lt;/p&gt;  &lt;p&gt;You may be experiencing an issue with Page Editor in &lt;a href="http://www.sitecore.net/"&gt;Sitecore&lt;/a&gt; 6.1/6.2 releases when clearing a field results in “Undefined” text being written back to your item.&lt;/p&gt;  &lt;p&gt;To work this around, follow these 3 easy steps.&lt;/p&gt;  &lt;p&gt;1. Locate the following file: &amp;lt;web root&amp;gt;\sitecore\shell\Applications\WebEdit\WebEditElement.js    &lt;br /&gt;Create a backup copy of it.&lt;/p&gt;  &lt;p&gt;2. Find the following function: &lt;em&gt;Sitecore.WebEdit.Element.prototype.load = function() &lt;/em&gt;and replace it with this:&lt;/p&gt;  &lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;Sitecore.WebEdit.Element.&lt;span style="color: #0000ff"&gt;prototype&lt;/span&gt;.load = &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;() {
&lt;/pre&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.element.getAttribute(&amp;quot;&lt;span style="color: #8b0000"&gt;scWatermark&lt;/span&gt;&amp;quot;) == &amp;quot;&lt;span style="color: #8b0000"&gt;true&lt;/span&gt;&amp;quot;) {
&lt;/pre&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.element.removeAttribute(&amp;quot;&lt;span style="color: #8b0000"&gt;scWatermark&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.watermarkHTML = &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.element.innerHTML;
&lt;/pre&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  }&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;
&lt;/pre&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  {
&lt;/pre&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.watermarkHTML = &amp;quot;&lt;span style="color: #8b0000"&gt;[No text in field]&lt;/span&gt;&amp;quot;;
&lt;/pre&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  }
&lt;/pre&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.buttons.select(&amp;quot;&lt;span style="color: #8b0000"&gt;.scWebEditFrameButtonIcon&lt;/span&gt;&amp;quot;).each(&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(icon) {
&lt;/pre&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    icon.observe(&amp;quot;&lt;span style="color: #8b0000"&gt;dragstart&lt;/span&gt;&amp;quot;, &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(e) { e.&lt;span style="color: #0000ff"&gt;stop&lt;/span&gt;(); });
&lt;/pre&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  });
&lt;/pre&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.element.observe(&amp;quot;&lt;span style="color: #8b0000"&gt;click&lt;/span&gt;&amp;quot;, &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.onClick.bind(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;));
&lt;/pre&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.element.observe(&amp;quot;&lt;span style="color: #8b0000"&gt;blur&lt;/span&gt;&amp;quot;, &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.onBlur.bind(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;));
&lt;/pre&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;}
&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;3. Then locate this function: &lt;em&gt;Sitecore.WebEdit.Element.prototype.isWatermark = function() {&lt;/em&gt; 

  &lt;br /&gt;and replace it with this: 

  &lt;br /&gt;&lt;/p&gt;

&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;Sitecore.WebEdit.Element.&lt;span style="color: #0000ff"&gt;prototype&lt;/span&gt;.isWatermark = &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;() {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  fl=&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;((&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.watermarkHTML == &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.element.innerHTML)||(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.element.innerHTML==&amp;quot;&lt;span style="color: #8b0000"&gt;[No text in field]&lt;/span&gt;&amp;quot;))
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;               {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;               fl=&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;               }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; fl;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;}&lt;/pre&gt;&lt;/pre&gt;



&lt;p&gt;Quick disclaimer: this proved working on my local 6.2.0 (rev. 100831) installation, however, this is not a fully tested solution, so there may be conflicts depending on exact version of your Sitecore instance and level of customization.&lt;/p&gt;

&lt;p&gt;Thanks goes to Sitecore Customer Service for quick solution!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-4818839327734454905?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/4818839327734454905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=4818839327734454905' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/4818839327734454905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/4818839327734454905'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2010/10/undefined-text-in-page-editor-when.html' title='Undefined text in Page Editor when clearing field'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-2748403935054612512</id><published>2010-10-18T09:51:00.001-07:00</published><updated>2010-10-18T09:52:34.672-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='new stuff'/><title type='text'>Sitecore 6.4 in Technical Preview</title><content type='html'>&lt;p align="justify"&gt;&lt;a href="http://lh3.ggpht.com/_AIfg6b6IeD0/TLx69erpyvI/AAAAAAAAaco/lDDcbhlxfI4/s1600-h/mill%20valley_resized%5B17%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="mill valley_resized" border="0" alt="mill valley_resized" src="http://lh3.ggpht.com/_AIfg6b6IeD0/TLx6-HrqXwI/AAAAAAAAacw/8Iachdy3M8Q/mill%20valley_resized_thumb%5B9%5D.jpg?imgmax=800" width="654" height="489" /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;Monday…it is a wonderful day in our Mill Valley office…I am in the mood of writing something non-technical for once, so no pipelines, custom commands or event handlers today. &lt;/p&gt;  &lt;p align="justify"&gt;That’s because a truly great piece of news hit the web today. &lt;a href="http://sdn.sitecore.net/Products/Sitecore%20V5/Sitecore%20CMS%206/Technical%20Preview.aspx"&gt;Sitecore 6.4 is out&lt;/a&gt; in Technical Preview. If you have not seen Alistair’s early &lt;a href="http://adeneys.wordpress.com/2010/10/13/sneak-peek-at-sitecore-6-4/"&gt;Sneak Peak on 6.4&lt;/a&gt; post and &lt;a href="http://www.sitecore.net/Community/Technical-Blogs/John-West-Sitecore-Blog.aspx"&gt;John West’s blog series&lt;/a&gt; on new features, here is a quick teaser for you on what’s in the box:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Updated Page Editor merged with Page Designer. Try it out on your iPad! &lt;/li&gt;    &lt;li&gt;Cross browser support &lt;/li&gt;    &lt;li&gt;New Rich Text Editor &lt;/li&gt;    &lt;li&gt;Proxies deprecated in favor of Item Cloning &lt;/li&gt;    &lt;li&gt;.NET 4.0 &lt;/li&gt;    &lt;li&gt;Initial support for MVC &lt;/li&gt;    &lt;li&gt;More extensibility through additional pipelines &lt;/li&gt;    &lt;li&gt;Much more &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Check out &lt;a href="http://sdn.sitecore.net/SDN5/Products/Sitecore%20V5/Sitecore%20CMS%206/Technical%20Preview/Disclaimer.aspx"&gt;Release disclaimer.&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Besides all the technological goodies included in this release, I believe that the next coolest thing about it is how &lt;a href="http://www.sitecore.net/"&gt;Sitecore&lt;/a&gt; approached it. Every single feature or enhancement is purely based on &lt;strong&gt;&lt;u&gt;your&lt;/u&gt;&lt;/strong&gt; feedback. Developers wanted .NET 4.0 and MVC, even more freedom in customizing the software. Business Users wanted better behaving Rich Text Editor and enhanced Page Editor/Design experience. Everyone wanted to work in favorite browser.    &lt;br /&gt;&lt;a href="http://www.sitecore.net/"&gt;Sitecore&lt;/a&gt; listened and executed.&lt;/p&gt;  &lt;p&gt;So what does it mean for you, fellow Sitecorian? Now it is your chance – &lt;a href="http://sdn.sitecore.net/Products/Sitecore%20V5/Sitecore%20CMS%206/Technical%20Preview/Download%20CMS%206,-d-,4.aspx"&gt;download&lt;/a&gt;, &lt;a href="http://sdn.sitecore.net/upload/sitecore6/63/installation_guide_a4.pdf"&gt;install&lt;/a&gt; and &lt;a href="http://support.sitecore.net/"&gt;provide&lt;/a&gt; that valuable feedback as early as possible.     &lt;br /&gt;6.4 will be one of the coolest versions we’ve ever had, there is no doubt about that!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-2748403935054612512?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/2748403935054612512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=2748403935054612512' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/2748403935054612512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/2748403935054612512'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2010/10/sitecore-64-in-technical-preview.html' title='Sitecore 6.4 in Technical Preview'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_AIfg6b6IeD0/TLx6-HrqXwI/AAAAAAAAacw/8Iachdy3M8Q/s72-c/mill%20valley_resized_thumb%5B9%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-406412933058481317</id><published>2010-10-15T10:30:00.001-07:00</published><updated>2010-10-15T10:30:17.438-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='customization'/><title type='text'>How to Sort your Multilist Field</title><content type='html'>&lt;p&gt;Greetings!&lt;/p&gt;  &lt;p&gt;Just recently one of the &lt;a href="http://www.sitecore.net/"&gt;Sitecore&lt;/a&gt; implementation partners asked me whether there is a way to have the list of available items on a Multilist field sorted by updated date.     &lt;br /&gt;To clarify, by default, the left side is sorted by item name, it is by design.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_AIfg6b6IeD0/TLiPnAi6_hI/AAAAAAAAab0/5kG_SyMatOw/s1600-h/image%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_AIfg6b6IeD0/TLiPnzpX88I/AAAAAAAAab8/PDKcS3wvifc/image_thumb%5B2%5D.png?imgmax=800" width="610" height="202" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;So I did some digging, and have found that it is a very frequent feature request. Another thing I’ve found is that since Sitecore 6 it is actually pretty easy to change this behavior.&lt;/p&gt;  &lt;p&gt;First thing I need for that is subclass &lt;em&gt;&lt;strong&gt;MultilistEx&lt;/strong&gt;&lt;/em&gt; class which implements is UI part of the Multilist field. This class has a method called &lt;b&gt;&lt;em&gt;GetSelectedItems&lt;/em&gt;&lt;/b&gt; (introduced since Sitecore 6 release) where the list of unselected items is constructed. Since this method is marked as &lt;em&gt;protected virtual&lt;/em&gt;, I can easily override it:&lt;/p&gt;  &lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; Sitecore.SharedSource.CustomFields
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;{
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; SortedMultilist : Sitecore.Shell.Applications.ContentEditor.MultilistEx
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; GetSelectedItems(Item[] sources, &lt;span style="color: #0000ff"&gt;out&lt;/span&gt; ArrayList selected, &lt;span style="color: #0000ff"&gt;out&lt;/span&gt; IDictionary unselected)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         Assert.ArgumentNotNull(sources, &amp;quot;&lt;span style="color: #8b0000"&gt;sources&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         ListString str = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ListString(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.Value);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         unselected = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SortedList(StringComparer.Ordinal);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         selected = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ArrayList(str.Count);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; index = 0;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;while&lt;/span&gt; (index &amp;lt; str.Count)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            selected.Add(str[index]);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            index++;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (Item item &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; sources)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; str2 = item.ID.ToString();
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            index = str.IndexOf(str2);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (index &amp;gt;= 0)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;               selected[index] = item;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;strong&gt;               unselected.Add(&lt;u&gt;GetItemKey(item),&lt;/u&gt; item);&lt;/strong&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;virtual&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; &lt;strong&gt;GetItemKey&lt;/strong&gt;(Item item)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; MainUtil.GetSortKey(item[FieldIDs.Created]);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;}
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;The only thing I change, actually, is the line where items are added to the “unselected” list. Since the key is used for sorting, I move this outside to a separate method “&lt;strong&gt;GetItemKey&lt;/strong&gt;” where instead of constructing sort key by item.Name as in default implementation, I simply read the “created” date.&lt;/p&gt;

&lt;p&gt;After this class is compiled, all I need to define the new “Sorted Multilist” field under core:/sitecore/system/Field types/List Types:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_AIfg6b6IeD0/TLiPoYEEPqI/AAAAAAAAacE/TxwZ3uuN1h8/s1600-h/image%5B8%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_AIfg6b6IeD0/TLiPo5PzONI/AAAAAAAAacM/_invzqLUYx4/image_thumb%5B4%5D.png?imgmax=800" width="579" height="257" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The easiest way to do it is to duplicate the existing Multilist item ;-)&lt;/p&gt;

&lt;p&gt;I should mention that adding complex sorting rules will definitely slow down you multilist, so you have to be very careful.&lt;/p&gt;

&lt;p&gt;Also, there is a very handy &lt;a href="http://trac.sitecore.net/FieldTypes/wiki/FilteredMultiList"&gt;FilteredMultilist&lt;/a&gt; that is already on shared source. It gives you ability to refine the left side of Multilist, so you may never need it sorted at all.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_AIfg6b6IeD0/TLiPpeSC6yI/AAAAAAAAacU/hLpuEvYF-9g/s1600-h/no_filter%5B1%5D%5B4%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="no_filter[1]" border="0" alt="no_filter[1]" src="http://lh3.ggpht.com/_AIfg6b6IeD0/TLiPqAiOpZI/AAAAAAAAacc/JD6jNI5NK1Y/no_filter%5B1%5D_thumb%5B2%5D.png?imgmax=800" width="644" height="184" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-406412933058481317?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/406412933058481317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=406412933058481317' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/406412933058481317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/406412933058481317'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2010/10/how-to-sort-your-multilist-field.html' title='How to Sort your Multilist Field'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_AIfg6b6IeD0/TLiPnzpX88I/AAAAAAAAab8/PDKcS3wvifc/s72-c/image_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-788932630363852733</id><published>2010-10-01T15:33:00.001-07:00</published><updated>2010-10-01T15:33:50.596-07:00</updated><title type='text'>Sitecore Bloggers take over the world</title><content type='html'>&lt;p&gt;I just want to give a quick shout-out to all &lt;a href="http://www.sitecore.net/"&gt;Sitecore&lt;/a&gt; bloggers out there who bring new fresh ideas to the surface, provoke discussions and constantly provide food for thought. The best thing about it is that you get different perspective from different levels: end user’s, developer’s (either customer or partner) and Sitecore employee’s.    &lt;br /&gt;I am absolutely confident that information space around &lt;a href="http://www.sitecore.net/"&gt;Sitecore&lt;/a&gt; would never be as active and relevant without you guys.&lt;/p&gt;  &lt;p&gt;Also I want to take this opportunity and urge my readers to check out our new &lt;a href="http://www.sitecore.net/community"&gt;Sitecore Community Blogs&lt;/a&gt; section on &lt;a href="http://www.sitecore.net/"&gt;sitecore.net&lt;/a&gt;. If you are leaning towards more technical stuff, the place to go would be our &lt;a href="http://www.sitecore.net/Community/Technical-Blogs.aspx"&gt;Technical Blogs area&lt;/a&gt;.    &lt;br /&gt;    &lt;br /&gt;Of course, if you have not subscribed to our &lt;a href="http://pipes.yahoo.com/pipes/pipe.run?_id=ZsFOz4a62xG9Py3Idbq02Q&amp;amp;_render=rss"&gt;RSS channel&lt;/a&gt; that aggregates all &lt;a href="http://www.sitecore.net/"&gt;Sitecore&lt;/a&gt; related blogs, you are really missing out!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-788932630363852733?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/788932630363852733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=788932630363852733' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/788932630363852733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/788932630363852733'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2010/10/sitecore-bloggers-take-over-world.html' title='Sitecore Bloggers take over the world'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-7528607279687187748</id><published>2010-09-27T08:29:00.001-07:00</published><updated>2010-09-27T08:29:32.577-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='common errors'/><title type='text'>Image Field in Page Editor [Common Errors]</title><content type='html'>&lt;p&gt;This issue is related to the latest *6.2 rev.100831 (Update-4)* only.&lt;/p&gt;  &lt;p&gt;You may be getting the following error when launching Page Editor on a page with an image field rendered via &lt;em&gt;&amp;lt;sc:image /&amp;gt;&lt;/em&gt; Web or XSL Control:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;at Sitecore.Diagnostics.Assert.ArgumentNotNull(Object argument, String argumentName)     &lt;br /&gt;&amp;#160; at Sitecore.Resources.Media.MediaProvider.GetMediaUrl(MediaItem item, MediaUrlOptions options)      &lt;br /&gt;&amp;#160; at Sitecore.Xml.Xsl.ImageRenderer.GetSource()      &lt;br /&gt;&amp;#160; at Sitecore.Xml.Xsl.ImageRenderer.Render()      &lt;br /&gt;&amp;#160; at Sitecore.Pipelines.RenderField.GetImageFieldValue.Process(RenderFieldArgs args)      &lt;br /&gt;&amp;#160; at (Object , Object[] )      &lt;br /&gt;&amp;#160; at Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args)      &lt;br /&gt;&amp;#160; at Sitecore.Web.UI.WebControls.FieldRenderer.RenderField()      &lt;br /&gt;&amp;#160; at Sitecore.Xml.Xsl.XslHelper.image(String fieldName, XPathNodeIterator iterator, String parameters)&lt;/em&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;While our team is working on an official document about, here is a quick 3 step solution:&lt;/p&gt;  &lt;p&gt;1. Create a custom ImageRenderer class:&lt;/p&gt;  &lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Sitecore.Data.Fields;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; SitecoreSupport.Shell
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;{
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; ImageRenderer : Sitecore.Xml.Xsl.ImageRenderer
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; GetSource()
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         var innerField = Item.Fields[FieldName];
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         var imageField = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ImageField(innerField, FieldValue);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         ParseField(imageField);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (imageField.MediaItem != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;base&lt;/span&gt;.GetSource();
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; String.Empty;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;}&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;2. Create a custom implementation of GetImageFieldValue processor in the renderField pipeline:&lt;/p&gt;

&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; SitecoreSupport.Shell
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;{
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; GetImageFieldValue : Sitecore.Pipelines.RenderField.GetImageFieldValue
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; Sitecore.Xml.Xsl.ImageRenderer CreateRenderer()
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ImageRenderer();
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;}
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;3. Create a .config file with the following content and place it under /App_Config/Include:&lt;/p&gt;

&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;configuration&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;patch&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;http://www.sitecore.net/xmlconfig/&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;sitecore&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;pipelines&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;renderField&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;processor&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;Sitecore.Pipelines.RenderField.GetImageFieldValue, Sitecore.Kernel&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;               &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #c71585"&gt;patch&lt;/span&gt;:&lt;span style="color: #800000"&gt;attribute&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;type&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;SitecoreSupport.Shell.GetImageFieldValue, SitecoreSupport.Shell&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #c71585"&gt;patch&lt;/span&gt;:&lt;span style="color: #800000"&gt;attribute&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;processor&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;renderField&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;pipelines&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;sitecore&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;configuration&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-7528607279687187748?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/7528607279687187748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=7528607279687187748' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/7528607279687187748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/7528607279687187748'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2010/09/image-field-in-page-editor-common.html' title='Image Field in Page Editor [Common Errors]'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-797362374127615033</id><published>2010-09-20T15:26:00.001-07:00</published><updated>2010-09-20T15:26:25.946-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><title type='text'>Optimize Sitecore Performance Checklist</title><content type='html'>&lt;p&gt;Greetings! I’ve stumbled upon &lt;a href="http://stackoverflow.com/questions/762031/is-sitecore-slow-and-buggy"&gt;this hot discussion on StackOverflow&lt;/a&gt; about &lt;a href="http://www.sitecore.net/"&gt;Sitecore CMS&lt;/a&gt; performance and could help but sharing a few thoughts on the subject.&lt;/p&gt;  &lt;p&gt;The message I am trying to convey is that the product is built for performance and scalability. After seeing a fair number of successful implementations that have the unlimited scaling capacity, it is sad for me to see some developers struggle.&lt;/p&gt;  &lt;p&gt;We all love checklists, so here is a slightly modified list of things to look out for and try out when you start having performance degradation. Each case is special, so apologies if most of this is not applicable to your situation.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Get to know Sitecore caching really well. As content volume grows, data caches need to be adjusted.     &lt;br /&gt;&lt;a href="http://sdn.sitecore.net/Reference/Sitecore%206/Cache%20Configuration%20Reference.aspx"&gt;http://sdn.sitecore.net/Reference/Sitecore%206/Cache%20Configuration%20Reference.aspx&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Messing with prefetch caches (the ones that is pre-populated on the start up) helps &lt;strong&gt;significantly&lt;/strong&gt;.&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Take a look how much time it takes for Sitecore log file to be generated. It should be almost the same second as first request is hitting Sitecore. If it takes more than that to generate the log file, look out for this:       &lt;br /&gt;&lt;a href="http://sitecoreblog.alexshyba.com/2010/03/sitecore-startup-time-something-that.html"&gt;http://sitecoreblog.alexshyba.com/2010/03/sitecore-startup-time-something-that.html&lt;/a&gt;&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Test your database connection.       &lt;br /&gt;&lt;a href="http://sdn.sitecore.net/Articles/Administration/Sitecore%20Performance/Storage/Database%20Administration/Testing%20Database%20Performance.aspx"&gt;http://sdn.sitecore.net/Articles/Administration/Sitecore%20Performance/Storage/Database%20Administration/Testing%20Database%20Performance.aspx&lt;/a&gt;&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Don't recompile every time. This restarts app pool, which could be quite expensive. I do all sublayouts with CodeFile, not CodeBehind&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Visual Studio 2010 sometimes drops&lt;em&gt; App_Offline.htm&lt;/em&gt; file into the web root any time I change a layout (at least for me). This restarts app pool. I am hosting all my layouts outside the web root in development and have IIS virtual directory setup to bring them into Sitecore. The idea is to minimize any changes within the web root as IIS is quite &amp;quot;panicky&amp;quot; about &amp;quot;critical changes in the web root&amp;quot;.&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Move the /indexes folder outside the web root. This has been causing the IIS 7.x sites running under Integrated app pool to restart frequently during the index update.&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Monitor your Sitecore log files for any restarts. If new log file is generated, this commonly means a restart happened.&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Use the profiler like &lt;a href="http://www.red-gate.com/products/ants_performance_profiler/index.htm?utm_source=google&amp;amp;utm_medium=cpc&amp;amp;utm_content=brand_aware&amp;amp;utm_campaign=antsperformanceprofiler&amp;amp;gclid=CJSji_qFl6QCFYXV5wod93l8IA"&gt;ANTS&lt;/a&gt; to look for other bottlenecks in your environment.&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Sometimes it is a access to a Windows temp folder that is not being granted and the main thread is waiting for this. Process Monitor is going to help you with that.&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Disable search indexing in development if you don't use it. You may be having a large search index which is getting rebuilt frequently, causing some painful IO. No bueno.       &lt;br /&gt;&lt;a href="http://sitecoreblog.alexshyba.com/2009/03/how-to-completely-disable-lucene-index.html"&gt;http://sitecoreblog.alexshyba.com/2009/03/how-to-completely-disable-lucene-index.html&lt;/a&gt;&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Look out for other scheduled operations (publishing, link database rebuild, etc.) that may be running in the background and crippling your Sitecore instance.&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Get rid of that Centrino processor finally! And get some RAM. You can get an 8 core 8 Gb laptop for 2K now. Having a quad as your dev machine is pretty much standard these days. If you see SQL and W3WP process fighting for the resources, that would be the first thing I'd do.&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Other factors including network if you are working remotely, connectors/integrations that could be going outside for something. Disable them in dev if you don't absolutely need them.&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Sitecore Log files will show you how long each step took. This is very useful for advanced troubleshooting.&lt;a href="http://lh6.ggpht.com/_AIfg6b6IeD0/TJffjbDttwI/AAAAAAAAZyQ/BiaEGhImFic/s1600-h/image%5B4%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_AIfg6b6IeD0/TJffkJp1PgI/AAAAAAAAZyY/ryQ5UFgH2p8/image_thumb%5B2%5D.png?imgmax=800" width="644" height="378" /&gt;&lt;/a&gt; &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;If everything above is complete nonsense to you, please connect with our tech support folks and we can take this problem further.&lt;/p&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Of course, this is not a comprehensive list. It if just a start. Please share your experience, good or bad. If you have more ideas, please keep them coming!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-797362374127615033?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/797362374127615033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=797362374127615033' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/797362374127615033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/797362374127615033'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2010/09/optimize-sitecore-performance-checklist.html' title='Optimize Sitecore Performance Checklist'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_AIfg6b6IeD0/TJffkJp1PgI/AAAAAAAAZyY/ryQ5UFgH2p8/s72-c/image_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-6006263531288091423</id><published>2010-09-10T10:19:00.001-07:00</published><updated>2010-09-10T10:21:49.649-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='common errors'/><category scheme='http://www.blogger.com/atom/ns#' term='OMS'/><title type='text'>Campaign Summary report is throwing exception [Common Errors]</title><content type='html'>&lt;p&gt;A quick post today in the &lt;a href="http://sitecoreblog.alexshyba.com/search/label/common%20errors"&gt;Common Errors&lt;/a&gt; category. You may be getting the following exception when trying to run &lt;em&gt;Summary&lt;/em&gt; report on your &lt;em&gt;Campaign&lt;/em&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_AIfg6b6IeD0/TIpokxWZ9MI/AAAAAAAAZrU/9csCtmtKNx8/s1600-h/image%5B6%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_AIfg6b6IeD0/TIpoloAcyZI/AAAAAAAAZrc/n92BmCJwsBo/image_thumb%5B2%5D.png?imgmax=800" width="504" height="145" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;   &lt;hr size="1" width="100%" /&gt;&lt;/h3&gt;  &lt;h4&gt;&lt;i&gt;Object reference not set to an instance of an object.&lt;/i&gt;&lt;/h4&gt; &lt;b&gt;Description: &lt;/b&gt;An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.   &lt;br /&gt;&lt;b&gt;Exception Details: &lt;/b&gt;System.NullReferenceException: Object reference not set to an instance of an object.   &lt;br /&gt;  &lt;p&gt;&lt;b&gt;Stack Trace:&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;  &lt;pre&gt;[NullReferenceException: Object reference not set to an instance of an object.]
   Stimulsoft.Report.StiReport.GetReferencedAssemblies() +1179
...
&lt;hr size="1" width="100%" /&gt;&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;To resolve this, you need a reference to &lt;em&gt;Sitecore.Oracle.dll&lt;/em&gt; within the source of &lt;em&gt;Campaign Summary&lt;/em&gt; report.

  &lt;br /&gt;

  &lt;br /&gt;1. Open the following file: &lt;em&gt;\sitecore\shell\Applications\Analytics\Reports\Campaigns\Summary.mrt&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;2. Add the following to the &lt;em&gt;&amp;lt;ReferencedAssemblies /&amp;gt; &lt;/em&gt;section:

  &lt;br /&gt;&lt;a href="http://lh4.ggpht.com/_AIfg6b6IeD0/TIpomdX4G3I/AAAAAAAAZrk/a79y6Q6dftg/s1600-h/image%5B10%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_AIfg6b6IeD0/TIpom-dD6tI/AAAAAAAAZrs/FxBtrE8rV2M/image_thumb%5B4%5D.png?imgmax=800" width="347" height="198" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;That’s all!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-6006263531288091423?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/6006263531288091423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=6006263531288091423' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/6006263531288091423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/6006263531288091423'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2010/09/campaign-summary-report-in-throwing.html' title='Campaign Summary report is throwing exception [Common Errors]'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_AIfg6b6IeD0/TIpoloAcyZI/AAAAAAAAZrc/n92BmCJwsBo/s72-c/image_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-1030707132904035540</id><published>2010-09-03T13:35:00.001-07:00</published><updated>2010-09-03T13:36:31.519-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='configuration'/><category scheme='http://www.blogger.com/atom/ns#' term='customization'/><title type='text'>Optimizing Sitecore Link Database Rebuild</title><content type='html'>&lt;p&gt;Greetings! One of the topics I covered during my &lt;a href="http://dreamcore.sitecore.net/"&gt;Dreamcore&lt;/a&gt; presentation on Data Access Techniques with &lt;a href="http://www.sitecore.net/"&gt;Sitecore CMS&lt;/a&gt; was Link Database. While it is a great feature that enables fast and efficient retrieval of item relations, there is one caveat, it requires some maintenance and configuration to be working properly in multi server environment. Many customers face this challenge, and while there is a number of ways you can tackle this, the approach I want to share today seems like the most appropriate to me.&lt;/p&gt;  &lt;p&gt;The idea behind the scenes is to separate the Link Database used on the Content Delivery side from the one used on the Content Management side by introducing a second link database. This database will be updated during item publishing. This way if CMS decides to update its own Link DB, the one used on the front-end will not be affected.&lt;/p&gt;  &lt;p&gt;So, here is what you need to do:&lt;/p&gt;  &lt;p&gt;1. Add the &lt;em&gt;FrontEndLinkDatabase&lt;/em&gt; definition below the default &amp;lt;LinkDatabase&amp;gt; in web.config file of the CMS server:&lt;/p&gt;  &lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #008000"&gt;&amp;lt;!-- LINK DATABASE --&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;LinkDatabase&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;Sitecore.Data.$(database).$(database)LinkDatabase,
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;                    Sitecore.Kernel&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;param&lt;/span&gt; &lt;span style="color: #ff0000"&gt;connectionStringName&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;core&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;LinkDatabase&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #008000"&gt;&amp;lt;!-- FRONT END LINK DATABASE --&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;FrontEndLinkDatabase&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;Sitecore.Data.$(database).$(database)LinkDatabase,
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;                            Sitecore.$(database)&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;param&lt;/span&gt; &lt;span style="color: #ff0000"&gt;desc&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;connection&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ref&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;connections/web&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;FrontEndLinkDatabase&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;2. Compile the following code that contains two Sitecore event handlers (publish:itemprocessed and publish:itemprocessing)&lt;/p&gt;

&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Sitecore.Configuration;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Sitecore.Links;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Sitecore.Publishing;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Sitecore.Publishing.Pipelines.PublishItem;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Sitecore.Diagnostics;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; Sitecore.SharedSource.LinkDatabaseRebuilder
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;{
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; EventHandler
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; LinkDatabase FrontEndLinkDatabase
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;get&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; (Factory.CreateObject(&amp;quot;&lt;span style="color: #8b0000"&gt;FrontEndLinkDatabase&lt;/span&gt;&amp;quot;, &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;) 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;                     &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; LinkDatabase);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; Database { &lt;span style="color: #0000ff"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;set&lt;/span&gt;; }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; OnItemProcessed(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, EventArgs args)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         var context = ((ItemProcessedEventArgs)args).Context;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         Assert.IsNotNull(context, 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &amp;quot;&lt;span style="color: #8b0000"&gt;Cannot get PublishItem context&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         Assert.IsNotNull(FrontEndLinkDatabase,
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &amp;quot;&lt;span style="color: #8b0000"&gt;Cannot resolve FrontEndLinkDatabase from config&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (context.PublishOptions.TargetDatabase.Name.Equals(Database))
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            var item = context.PublishHelper.GetTargetItem(context.ItemId);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #008000"&gt;// if an item was not unpublished, &lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #008000"&gt;// the call below will reintroduce the reference&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #008000"&gt;// removed within OnItemProcessing method&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (item != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;               FrontEndLinkDatabase.UpdateReferences(item);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; OnItemProcessing(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, EventArgs args)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         var context = ((ItemProcessingEventArgs)args).Context;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         Assert.IsNotNull(context,
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &amp;quot;&lt;span style="color: #8b0000"&gt;Cannot get PublishItem context&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         Assert.IsNotNull(FrontEndLinkDatabase, 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &amp;quot;&lt;span style="color: #8b0000"&gt;Cannot resolve FrontEndLinkDatabase from config&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (context.PublishOptions.TargetDatabase.Name.Equals(Database))
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (context.Action == PublishAction.DeleteTargetItem)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;               var item = context.PublishHelper.GetTargetItem(context.ItemId);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;               Assert.IsNotNull(item, &amp;quot;&lt;span style="color: #8b0000"&gt;Source item cannot be found&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;               FrontEndLinkDatabase.RemoveReferences(item);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;}&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;3. Last thing to do is to define the two event handler mapping in web.config.&lt;/p&gt;

&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;events&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;event&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;publish:itemProcessing&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;handler&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;Sitecore.SharedSource.LinkDatabaseRebuilder.EventHandler, &lt;br /&gt;                   Sitecore.SharedSource.LinkDatabaseRebuilder&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;method&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;OnItemProcessing&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;database&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;web&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;database&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;handler&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;event&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;event&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;publish:itemProcessed&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;handler&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;Sitecore.SharedSource.LinkDatabaseRebuilder.EventHandler,&lt;br /&gt;                    Sitecore.SharedSource.LinkDatabaseRebuilder&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;method&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;OnItemProcessed&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;database&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;web&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;database&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;handler&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;event&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;events&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;That’s all you need to do. For the sake of simplicity, &lt;a href="http://resources.alexshyba.com/blog/Sitecore.SharedSource.LinkDatabaseRebuilder.zip"&gt;here is the link&lt;/a&gt; to the whole VS project where you can find the auto-include file.&lt;/p&gt;

&lt;p&gt;While this solution has been tested on 6.2, it is expected to work on all Sitecore 6 installations.&lt;/p&gt;

&lt;p&gt;Let me know if it does not ;-)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-1030707132904035540?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/1030707132904035540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=1030707132904035540' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/1030707132904035540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/1030707132904035540'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2010/09/optimizing-sitecore-link-database.html' title='Optimizing Sitecore Link Database Rebuild'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-4852275665056384520</id><published>2010-09-02T11:28:00.001-07:00</published><updated>2010-09-02T11:33:40.234-07:00</updated><title type='text'>Publish to pre-production web database. Part 2.</title><content type='html'>&lt;p&gt;&lt;a href="http://sitecoreblog.alexshyba.com/2010/03/publish-to-pre-production-web-database.html"&gt;A while back&lt;/a&gt; I shared a technique of publishing to a pre-production database via a custom ExtendedPublishProvider. As much as I like the &lt;em&gt;clarity &lt;/em&gt;of this approach, as &lt;a href="http://www.blogger.com/profile/05673835065088759418"&gt;Kamsar&lt;/a&gt; mentioned in the comments, &lt;em&gt;“…it has a downside: if you run a smart publish site to your staging database it will &amp;quot;unstage&amp;quot; any items that workflow staged into them with the current published version, ignoring the workflow state.”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Valid point.&lt;/p&gt;  &lt;p&gt;After some internal brainstorming on the subject with our US based tech team, here is another approach to the problem that eliminates the drawback mentioned above.&lt;/p&gt;  &lt;p&gt;What you can actually do is plug in a custom &lt;em&gt;WorkflowProvider&lt;/em&gt; which will refer to a custom implementation of &lt;em&gt;Sitecore.Workflows.Simple.Workflow &lt;/em&gt;class. This class has a method &lt;em&gt;IsApproved(Item item&lt;/em&gt;) that is called from all publishing operations. We are going to override that and check if the item we are checking approval for is currently in a “semi-final” workflow state and if the database we publish to matches the designated “pre-production” database. Pretty simple, huh?&lt;/p&gt;  &lt;p&gt;Here is the code.&lt;/p&gt;  &lt;p&gt;1. First you need a custom version of the &lt;em&gt;WorkflowProvider&lt;/em&gt; implementation:&lt;/p&gt;  &lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Sitecore.Data;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Sitecore.Data.Items;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Sitecore.Diagnostics;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Sitecore.Workflows;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; Sitecore.Starterkit.Workflow
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;{
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; WorkflowProvider : Sitecore.Workflows.Simple.WorkflowProvider
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; WorkflowProvider(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; databaseName, HistoryStore historyStore)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         : &lt;span style="color: #0000ff"&gt;base&lt;/span&gt;(databaseName, historyStore)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; IWorkflow GetWorkflow(Item item)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         Assert.ArgumentNotNull(item, &amp;quot;&lt;span style="color: #8b0000"&gt;item&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; workflowID = GetWorkflowID(item);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (workflowID.Length &amp;gt; 0)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #008000"&gt;// customization&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; AdvancedWorkflow(workflowID, &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #008000"&gt;// customization&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; GetWorkflowID(Item item)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         Assert.ArgumentNotNull(item, &amp;quot;&lt;span style="color: #8b0000"&gt;item&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         WorkflowInfo workflowInfo = item.Database.DataManager.GetWorkflowInfo(item);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (workflowInfo != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; workflowInfo.WorkflowID;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Empty;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; IWorkflow GetWorkflow(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; workflowID)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         Assert.ArgumentNotNullOrEmpty(workflowID, &amp;quot;&lt;span style="color: #8b0000"&gt;workflowID&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         Error.Assert(ID.IsID(workflowID), &amp;quot;&lt;span style="color: #8b0000"&gt;The parameter 'workflowID' must be parseable to an ID&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (Database.Items[ID.Parse(workflowID)] != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #008000"&gt;// customization&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; AdvancedWorkflow(workflowID, &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #008000"&gt;// customization&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; IWorkflow[] GetWorkflows()
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         Item item = &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.Database.Items[ItemIDs.WorkflowRoot];
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (item == &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; IWorkflow[0];
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         Item[] itemArray = item.Children.ToArray();
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         IWorkflow[] workflowArray = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; IWorkflow[itemArray.Length];
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i = 0; i &amp;lt; itemArray.Length; i++)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #008000"&gt;// customization&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            var wfId = itemArray[i].ID.ToString();
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            workflowArray[i] = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; AdvancedWorkflow(wfId, &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #008000"&gt;// customization&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; workflowArray;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;}&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;2. Then you will need to attach it to the “master” database: 
  &lt;br /&gt;&lt;/p&gt;

&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #008000"&gt;&amp;lt;!-- master --&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;database&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;master&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;singleInstance&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;Sitecore.Data.Database, Sitecore.Kernel&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;param&lt;/span&gt; &lt;span style="color: #ff0000"&gt;desc&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;$(id)&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;param&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   ...
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;workflowProvider&lt;/span&gt; &lt;span style="color: #ff0000"&gt;hint&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;defer&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;&lt;strong&gt;&lt;u&gt;Sitecore.Starterkit.Workflow.WorkflowProvider, Sitecore.Starterkit&amp;quot;&lt;/u&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;param&lt;/span&gt; &lt;span style="color: #ff0000"&gt;desc&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;database&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;$(id)&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;param&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;param&lt;/span&gt; &lt;span style="color: #ff0000"&gt;desc&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;history store&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ref&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;workflowHistoryStores/main&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;param1&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;$(id)&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;workflowProvider&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;3. Since the custom &lt;em&gt;WorkflowProvider &lt;/em&gt;is referring to &lt;em&gt;AdvancedWorkflow &lt;/em&gt;implementation, you need the code for that:&lt;/p&gt;

&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Sitecore.Data;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Sitecore.Data.Items;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Sitecore.Data.Managers;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Sitecore.Diagnostics;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Sitecore.Globalization;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Sitecore.SecurityModel;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Sitecore.Workflows;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Version = Sitecore.Data.Version;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; Sitecore.Starterkit.Workflow
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;{
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; AdvancedWorkflow : Sitecore.Workflows.Simple.Workflow
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;readonly&lt;/span&gt; WorkflowProvider _owner;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; AdvancedWorkflow(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; workflowID, WorkflowProvider owner)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;                             : &lt;span style="color: #0000ff"&gt;base&lt;/span&gt;(workflowID, owner)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         _owner = owner;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; Database Database
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;get&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; _owner.Database;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; IsApproved(Item item)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         var result = &lt;span style="color: #0000ff"&gt;base&lt;/span&gt;.IsApproved(item);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!result &amp;amp;&amp;amp; 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            Context.Site.Name.Equals(&amp;quot;&lt;span style="color: #8b0000"&gt;publisher&lt;/span&gt;&amp;quot;,
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;                                     StringComparison.InvariantCultureIgnoreCase))
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            var stateItem = GetStateItem(item);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (stateItem != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt; &amp;amp;&amp;amp;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;                MatchTargetDatabase(stateItem) &amp;amp;&amp;amp;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;                IgnoreWorkflow(stateItem))
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;               result = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; result;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;virtual&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; MatchTargetDatabase(Item stateItem)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (Context.Job != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !String.IsNullOrEmpty(Context.Job.Name))
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            var target = TargetDatabase(stateItem);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; Context.Job.Name.Equals(
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;                     String.Format(&amp;quot;&lt;span style="color: #8b0000"&gt;Publish to '{0}'&lt;/span&gt;&amp;quot;, target), StringComparison.InvariantCultureIgnoreCase);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;virtual&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; TargetDatabase(Item stateItem)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         var publishTargetId = stateItem[&amp;quot;&lt;span style="color: #8b0000"&gt;Semi-Final Target Database&lt;/span&gt;&amp;quot;];
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         var publishTargetItem = PublishActionHelper.GetItemById(publishTargetId);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(publishTargetItem != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; PublishActionHelper.GetFieldValue(publishTargetItem, &amp;quot;&lt;span style="color: #8b0000"&gt;Target database&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; String.Empty;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;virtual&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; IgnoreWorkflow(Item stateItem)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; stateItem[&amp;quot;&lt;span style="color: #8b0000"&gt;Semi-Final&lt;/span&gt;&amp;quot;] == &amp;quot;&lt;span style="color: #8b0000"&gt;1&lt;/span&gt;&amp;quot;;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; Item GetStateItem(Item item)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; stateID = GetStateID(item);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (stateID.Length &amp;gt; 0)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; GetStateItem(stateID);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; Item GetStateItem(ID stateId)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; ItemManager.GetItem(stateId, Language.Current, Version.Latest, Database, SecurityCheck.Disable);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; Item GetStateItem(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; stateId)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         ID id = MainUtil.GetID(stateId, &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; id == (ID)&lt;span style="color: #0000ff"&gt;null&lt;/span&gt; ? &lt;span style="color: #0000ff"&gt;null&lt;/span&gt; : &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.GetStateItem(id);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; GetStateID(Item item)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         Assert.ArgumentNotNull(item, &amp;quot;&lt;span style="color: #8b0000"&gt;item&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         WorkflowInfo workflowInfo = item.Database.DataManager.GetWorkflowInfo(item);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (workflowInfo != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; workflowInfo.StateID;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Empty;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;}&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;All the magic is happening within “IsApproved” method that we override. We check if both “&lt;em&gt;MatchTargetDatabase()&lt;/em&gt;” and “&lt;em&gt;IgnoreWorkflow()&lt;/em&gt;” methods return true. The majority of other methods in this class are here because the derived class could not inherit those.&lt;/p&gt;

&lt;p&gt;4. I reference &lt;em&gt;PublishActionHelper &lt;/em&gt;class here too, it provides some utility methods for me:&lt;/p&gt;

&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; PublishActionHelper
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; Database Db
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; Context.ContentDatabase ?? Context.Database ?? Factory.GetDatabase(&amp;quot;&lt;span style="color: #8b0000"&gt;master&lt;/span&gt;&amp;quot;); }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; GetFieldValue(Item item, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; fieldName)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; item[fieldName] ?? String.Empty;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; Item GetItemById(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; id)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (ID.IsID(id))
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; Db.GetItem(ID.Parse(id));
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; GetTargetDatabaseName(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; targetId)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         var publishingTarget = Db.SelectSingleItem(targetId);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; publishingTarget[&amp;quot;&lt;span style="color: #8b0000"&gt;Target database&lt;/span&gt;&amp;quot;] ?? String.Empty;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; IEnumerable&amp;lt;Item&amp;gt; GetItemsFromMultilist(Item carrier, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; fieldName)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         var multilistField = carrier.Fields[fieldName];
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(FieldTypeManager.GetField(multilistField) &lt;span style="color: #0000ff"&gt;is&lt;/span&gt; MultilistField)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; ((MultilistField)multilistField).GetItems();
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Item[0];
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;5. Finally, you will need to have the extended version of the WorkflowState template where you can set the needed flags and settings:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_AIfg6b6IeD0/TH_sxDj2tbI/AAAAAAAAZqg/05IztDKAQS8/s1600-h/image%5B3%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_AIfg6b6IeD0/TH_sx5Kj9II/AAAAAAAAZqo/fedNoiG-Ry8/image_thumb%5B1%5D.png?imgmax=800" width="509" height="290" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;I created my own “Semi Final State” template which inherits from standard /System/Workflow/State template.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_AIfg6b6IeD0/TH_sylPiwOI/AAAAAAAAZqw/EPOypASoaD8/s1600-h/image%5B11%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_AIfg6b6IeD0/TH_szFC5JFI/AAAAAAAAZq4/S2cDPG8DMPc/image_thumb%5B5%5D.png?imgmax=800" width="504" height="140" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;This solution has been provided to a customer, and appears to be working fine in production for a couple of months now.&lt;/p&gt;

&lt;p&gt;Let me know what you think!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-4852275665056384520?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/4852275665056384520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=4852275665056384520' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/4852275665056384520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/4852275665056384520'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2010/09/publish-to-pre-production-web-database.html' title='Publish to pre-production web database. Part 2.'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_AIfg6b6IeD0/TH_sx5Kj9II/AAAAAAAAZqo/fedNoiG-Ry8/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-7770688271231009060</id><published>2010-09-01T16:10:00.000-07:00</published><updated>2010-09-10T10:11:37.895-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='common errors'/><category scheme='http://www.blogger.com/atom/ns#' term='troubleshooting'/><title type='text'>Exception in alarm clock event subscriber [Common Errors]</title><content type='html'>&lt;p&gt;Greetings! As you are going into production, hopefully you allocate a few days for exception sweep up. This is applicable to any website running on &lt;a href="http://www.sitecore.net/"&gt;Sitecore CMS&lt;/a&gt; or any platform, really.&lt;/p&gt;  &lt;p&gt;One of the common exceptions that I see in customer’s log files these days is related to “alarm clock” event subscriber and can be encountered quite frequently.&lt;/p&gt;  &lt;p&gt;Here is the error stack trace that you may be seeing in your logs:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;ERROR Exception in alarm clock event subscriber.&lt;/strong&gt;       &lt;br /&gt;Exception: System.Reflection.TargetInvocationException       &lt;br /&gt;Message: Exception has been thrown by the target of an invocation.       &lt;br /&gt;Source: mscorlib       &lt;br /&gt;&amp;#160;&amp;#160; at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct&amp;amp; sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)       &lt;br /&gt;&amp;#160;&amp;#160; at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)       &lt;br /&gt;&amp;#160;&amp;#160; at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)       &lt;br /&gt;&amp;#160;&amp;#160; at Sitecore.Reflection.ReflectionUtil.InvokeMethod(MethodInfo method, Object[] parameters, Object obj)       &lt;br /&gt;&amp;#160;&amp;#160; at Sitecore.Configuration.Factory.AssignProperties(Object obj, Object[] properties)       &lt;br /&gt;&amp;#160;&amp;#160; at Sitecore.Configuration.Factory.AssignProperties(XmlNode configNode, String[] parameters, Object obj, Boolean assert, Boolean deferred, IFactoryHelper helper)       &lt;br /&gt;&amp;#160;&amp;#160; at Sitecore.Configuration.Factory.CreateObject(XmlNode configNode, String[] parameters, Boolean assert, IFactoryHelper helper)       &lt;br /&gt;&amp;#160;&amp;#160; at Sitecore.Pipelines.CorePipelineFactory.GetObjectFromType(String type, XmlNode processorNode)       &lt;br /&gt;&amp;#160;&amp;#160; at Sitecore.Pipelines.CoreProcessor.GetMethod(Object[] parameters)       &lt;br /&gt;&amp;#160;&amp;#160; at Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args)       &lt;br /&gt;&amp;#160;&amp;#160; at Sitecore.Services.AlarmClock.Heartbeat_Beat(Object sender, EventArgs e)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Nested Exception &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Exception: System.InvalidOperationException      &lt;br /&gt;Message: Category does not exist.       &lt;br /&gt;Source: System       &lt;br /&gt;&amp;#160;&amp;#160; at System.Diagnostics.PerformanceCounterLib.GetCategorySample(String machine, String category)       &lt;br /&gt;&amp;#160;&amp;#160; at System.Diagnostics.PerformanceCounterCategory.GetCounterInstances(String categoryName, String machineName)       &lt;br /&gt;&amp;#160;&amp;#160; at Sitecore.Diagnostics.PerformanceCounters.PerformanceCounter.GetInstanceName()       &lt;br /&gt;&amp;#160;&amp;#160; at Sitecore.Pipelines.HealthMonitor.HealthMonitor.AddCounter(XmlNode configNode)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;================================&lt;/p&gt;  &lt;p&gt;After a quick research in our knowledge base, I’ve discovered an answer. Apparently, this has been addressed in Sitecore CMS 6.2.0 rev.100104 (Also known as 6.2.0 Update-1).    &lt;br /&gt;    &lt;br /&gt;For 6.0/6.1 instances, you can comment out the following part of your web.config file as a temporary workaround:&lt;/p&gt;  &lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;processor&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;Sitecore.Pipelines.HealthMonitor.HealthMonitor, Sitecore.Kernel&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;method&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;LogCounterStatus&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;counters&lt;/span&gt; &lt;span style="color: #ff0000"&gt;hint&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;raw:AddCounter&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #008000"&gt;&amp;lt;!--  &amp;lt;counter category=&amp;quot;Process&amp;quot; name=&amp;quot;Private Bytes&amp;quot; /&amp;gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &amp;lt;counter category=&amp;quot;Process&amp;quot; name=&amp;quot;Virtual Bytes&amp;quot; /&amp;gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &amp;lt;counter category=&amp;quot;Process&amp;quot; name=&amp;quot;Page File Bytes&amp;quot; /&amp;gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &amp;lt;counter category=&amp;quot;.net CLR Memory&amp;quot; name=&amp;quot;# Bytes in all Heaps&amp;quot; /&amp;gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &amp;lt;counter category=&amp;quot;.net CLR Memory&amp;quot; name=&amp;quot;% Time in GC&amp;quot; /&amp;gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &amp;lt;counter category=&amp;quot;.net CLR Memory&amp;quot; name=&amp;quot;Large Object Heap size&amp;quot; /&amp;gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &amp;lt;counter category=&amp;quot;.net CLR Loading&amp;quot; name=&amp;quot;Bytes in Loader Heap&amp;quot; /&amp;gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;      &amp;lt;counter category=&amp;quot;.net CLR Loading&amp;quot; name=&amp;quot;Current Assemblies&amp;quot; /&amp;gt;--&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;counters&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;processor&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;If you are still on 6.0 or 6.1, start thinking about upgrading. It is especially easy to do it from 6.1! Check the official steps &lt;a href="http://sdn.sitecore.net/Products/Sitecore%20V5/Sitecore%20CMS%206/Update.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18939862-7770688271231009060?l=sitecoreblog.alexshyba.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecoreblog.alexshyba.com/feeds/7770688271231009060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18939862&amp;postID=7770688271231009060' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/7770688271231009060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18939862/posts/default/7770688271231009060'/><link rel='alternate' type='text/html' href='http://sitecoreblog.alexshyba.com/2010/09/common-errors-exception-in-alarm-clock.html' title='Exception in alarm clock event subscriber [Common Errors]'/><author><name>Alex Shyba</name><uri>http://www.blogger.com/profile/09553655443086620502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_AIfg6b6IeD0/TL28YImNq2I/AAAAAAAAagI/sAS1fRKcSjk/S220/11138_206673121848_539566848_3142990_5446471_n.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18939862.post-1533928894795458135</id><published>2010-09-01T11:32:00.000-07:00</published><updated>2010-09-02T11:34:50.386-07:00</updated><title type='text'>Publish to pre-production web database</title><content type='html'>&lt;i&gt;Update 3/11/2010: Correction » the last parameter of the ExtendedPublishOptions constructor should be “false”.&amp;nbsp; Please see &lt;a href="http://draft.blogger.com/post-edit.g?blogID=18939862&amp;amp;postID=1533928894795458135#update3112010"&gt;below&lt;/a&gt; for details.     &lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;i&gt;Update 9/2/2010: Addition » published an alternative solution to this problem &lt;a href="http://sitecoreblog.alexshyba.com/2010/09/publish-to-pre-production-web-database.html"&gt;here&lt;/a&gt;.&lt;/i&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;/i&gt;  &lt;br /&gt;
In my experience with enterprise level implementations, there is often a need for a separate “stage environment” for final content preview or a pre-production phase of workflow.&lt;br /&gt;
It is also often the case that the environmental limitations or restrictions make the content delivery part of the authoring environment suitable for such purpose. For example, your e-commerce infrastructure could not be available from the authoring instance. One of the possible ways to approach such a requirement is to configure a stand-alone staging instance of Sitecore which will be used for content delivery instance and is commonly configured exactly like one of the servers in the web farm. There is one exception though – the database that is used for content delivery is generally different from the one that is used in production content delivery.&lt;br /&gt;
With this approach, now the question is how to plug in workflow in a way that content could go via this “stage” environment and then only upon final approval will be able to get to “production”.&lt;br /&gt;
Now there is a problem that you cannot get get items published until they are in final workflow state. You could have two workflow states “Staged” and “Published”, both marked as final and with auto publish actions connected.    &lt;br /&gt;
I don’t like this approach since it goes against the workflow nature – only one state should be marked as final.&lt;br /&gt;
Alternatively, you can plug in a “copy item” workflow action to the “Staged” workflow state where you can programmatically copy an item from master database to stage web.&lt;br /&gt;
While this approach does seem legitimate, it works around the need of publishing thus any additional processing you may be having in publish(item) pipeline would not work.&lt;br /&gt;
I looked into the option of having publishing process ignore workflow when publishing to stage. While this seemed like a dangerous path to go, I have soon discovered that the &lt;b&gt;PublishHelper&lt;/b&gt;’s &lt;b&gt;GetVersionToPublish&lt;/b&gt; method already accepts this notion of passing a “requireapproval” flag to the underlying publishing mechanism. Since it is always passes “true”, I started looking into ways to make this flag dynamic and figured that setting it on the level of &lt;b&gt;PublishOptions&lt;/b&gt; could be a good idea. For example, from the code of my workflow action I would be able to define whether I want to have workflow respected or not.&lt;br /&gt;
Here is what you will need to do to make it work.&lt;br /&gt;
First, override the default PipelinePublishProvider and plug it into the web.config:&lt;br /&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;publishManager&lt;/span&gt; &lt;span class="attr"&gt;defaultProvider&lt;/span&gt;&lt;span class="kwrd"&gt;="default"&lt;/span&gt; &lt;span class="attr"&gt;enabled&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;providers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;clear&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
         &lt;span class="rem"&gt;&amp;lt;!--&amp;lt;add name="default" type="Sitecore.Publishing.PipelinePublishProvider, Sitecore.Kernel" /&amp;gt;--&amp;gt;&lt;/span&gt;
         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="default"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="SCUSAINC.Publishing.ExtendedPublishProvider, SCUSAINC.Publishing"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
     &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;providers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;publishManager&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;Secondly, you will need to override the CreatePublishHelper class:&lt;br /&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ExtendedPublishProvider : PipelinePublishProvider
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; PublishHelper CreatePublishHelper(PublishOptions options)
        {
            Assert.ArgumentNotNull(options, &lt;span class="str"&gt;"options"&lt;/span&gt;);
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (options &lt;span class="kwrd"&gt;is&lt;/span&gt; ExtendedPublishOptions)
                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ExtendedPublishHelper(options &lt;span class="kwrd"&gt;as&lt;/span&gt; ExtendedPublishOptions);

            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; PublishHelper(options);
        }
    }&lt;/pre&gt;&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
 font-size: small;
 color: black;
 font-family: consolas, "Courier New", courier, monospace;
 background-color: #ffffff;
 /*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
 background-color: #f4f4f4;
 width: 100%;
 margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;  &lt;br /&gt;
After that, introduce two more clas
