<?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-9040569</id><updated>2011-08-27T17:33:09.526+02:00</updated><category term='Migration'/><category term='Module'/><category term='Import'/><category term='Synkron'/><category term='Shared Source'/><category term='Multithreading'/><category term='CDN'/><category term='23Video'/><category term='Video'/><category term='Sitecore OMS'/><category term='Sitecore6'/><category term='Conversion'/><title type='text'>The Sitecore Experience</title><subtitle type='html'>Posts related to Sitecore CMS</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jukka-Pekka Keisala</name><uri>http://www.blogger.com/profile/02374604779600767780</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.jpkeisala.com/resources/jpIpaqBW.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9040569.post-6469635765005847885</id><published>2011-03-10T14:34:00.002+01:00</published><updated>2011-03-10T14:37:01.823+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Import'/><category scheme='http://www.blogger.com/atom/ns#' term='Conversion'/><category scheme='http://www.blogger.com/atom/ns#' term='Synkron'/><category scheme='http://www.blogger.com/atom/ns#' term='Migration'/><title type='text'>Synkron to Sitecore Migration -Module</title><content type='html'>When my team gets a new Sitecore project often we need to deal with some data migration and quite often it is some other CMS that we need to migrate to Sitecore.&lt;br /&gt;&lt;div&gt;We have migrated quite a few sites from Synkron to Sitecore and slowly we built a small but quite powerful migration tool for it instead of getting headaches over the versions and data schemas on every migration.&lt;br /&gt;&lt;br /&gt;The Synkron conversion is made as a native Sitecore Application. All operations are Sitecore Jobs, so during the import you can still use Sitecore ;) without any problem.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-ap7HRcJ6n50/TXjORI5rYRI/AAAAAAAAAMI/dU0GYb2TNKg/s1600/Synkron-Conversion-Tool-Sitecore-1.gif" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="https://lh4.googleusercontent.com/-ap7HRcJ6n50/TXjORI5rYRI/AAAAAAAAAMI/dU0GYb2TNKg/s1600/Synkron-Conversion-Tool-Sitecore-1.gif" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Synkron to Sitecore App. OK, it is not a prettiest app in Sitecore but it gets job done. :)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;User interface&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. Import media&lt;/b&gt;&lt;br /&gt;Copies the Files from a location under Sitecore upload folder where a custom UploadWatcher &amp;nbsp;creates the structure into media library&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Import metadata&amp;nbsp;&lt;/b&gt;&lt;br /&gt;This is usually only used once to import the metadata tags from Synkron.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. Import items&lt;/b&gt;&lt;br /&gt;We have 2 .XML files that contains rules of import like Synkron item "x" becomes an item from "y" Sitecore template and one of configurations which says from which Synkron item to start the import, what is the Sitecore parent, default paths... etc...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. Delete what was imported&amp;nbsp;&lt;/b&gt;&lt;br /&gt;Only deletes regular items, not media items , and only under the parent that it's configured into config.xml&lt;br /&gt;&lt;br /&gt;&lt;b&gt;5. Stop Importing&lt;/b&gt;&lt;br /&gt;Stops the importing of the items.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A. &amp;nbsp;Progress bar&lt;/b&gt;&lt;br /&gt;Tells current progress of the import.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;B. &amp;nbsp;Number of processed item&lt;/b&gt;&lt;br /&gt;Text box that shows how many items are imported in real time.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-dxE3wa2iNXM/TXjPRxgP4rI/AAAAAAAAAMQ/9CXedZKSNco/s1600/Synkron-Migration.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh3.googleusercontent.com/-dxE3wa2iNXM/TXjPRxgP4rI/AAAAAAAAAMQ/9CXedZKSNco/s1600/Synkron-Migration.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;More technical info&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Data is read on direct connection to the Synkron database from where with Stored Procedure, we are reading information and process it at different levels. Naturally we use Sitecore's API for every operation that concerns Sitecore part. &lt;i&gt;(creating items.... changing templates etc.)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Media Library and Links&lt;/b&gt;&lt;br /&gt;When the import is running all the links that contains Synkron media (files, images) are replaced with the corresponding Sitecore media links "/~/media/.. ashx".&lt;br /&gt;We also keep the exact hierarchy from Synkron, &amp;nbsp;this way we minimize editor re-training.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Modules&lt;/b&gt;&lt;br /&gt;Synkron CMS like Sitecore CMS has many modules but we've only import SearchPlus as I have not seen much use to import more of them (yet). However, if modules is needed it just requires few lines of code to SP (all modules I have seen are pretty straight forward).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;SEO (301 redirects)&lt;/b&gt;&lt;br /&gt;When importing from Synkron, a table of mapping is filled with the old paths from Synkron like "swID.asp" and the new location like "/Home/myitem.aspx".&lt;br /&gt;This table is used for redirecting the old link to the Sitecore links (if you click a link like "swID.asp" .. we'll know that you must be redirected to "/Home/myitem.aspx" ).&lt;br /&gt;&lt;br /&gt;Of course migration is always something that requires some custom configuration and&amp;nbsp;we’ve learned new thing about every migration.&amp;nbsp;But now we can do that effectively with XML configuration and sometimes some changes to SP's in case there are some strange custom stuff in Synkron data.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040569-6469635765005847885?l=thesitecoreexperience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/6469635765005847885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040569&amp;postID=6469635765005847885' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/6469635765005847885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/6469635765005847885'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/2011/03/synkron-to-sitecore-migration-module.html' title='Synkron to Sitecore Migration -Module'/><author><name>Jukka-Pekka Keisala</name><uri>http://www.blogger.com/profile/02374604779600767780</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.jpkeisala.com/resources/jpIpaqBW.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh4.googleusercontent.com/-ap7HRcJ6n50/TXjORI5rYRI/AAAAAAAAAMI/dU0GYb2TNKg/s72-c/Synkron-Conversion-Tool-Sitecore-1.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040569.post-3424978670733416161</id><published>2010-11-29T08:27:00.000+01:00</published><updated>2010-11-29T08:27:03.304+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><category scheme='http://www.blogger.com/atom/ns#' term='CDN'/><category scheme='http://www.blogger.com/atom/ns#' term='23Video'/><category scheme='http://www.blogger.com/atom/ns#' term='Module'/><title type='text'>Announcing: 23Video Module for Sitecore</title><content type='html'>&lt;div class="separator" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: center;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_7hv79tpQ9IY/TPKiC-uDJoI/AAAAAAAAALo/ejghPjzmNgE/s1600/23video-logo.png" /&gt;&lt;/div&gt;We've created the Sitecore module for creating seamless integration with &lt;a href="http://23video.com/"&gt;23Video.com&lt;/a&gt;. Uploading, managing and sharing videos in Sitecore using 23Video&amp;nbsp;is simple and easy as 1-2-3.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Introduction&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;While Sitecore's Media Library is pretty good at storing lot of things, video files have their own needs once the website is starting to have plenty of them. The module allows you to continue working with familiar Sitecore Media Library as if the video would be stored on the local Media Library but we are sending in background the actual video file to 23video.com and stream it from there. This will ease load on your CMS servers and gives you dedicated streaming servers for videos from 23Video.com while whole video management is still been done through Sitecore Media Library.&lt;br /&gt;&lt;br /&gt;If you are familiar with 23Video you may have noticed that 23 is a lot more than just a streaming server but since I, as a CMS Consultant, like to keep and maintain my data on Sitecore in order to better handle training, asset management, as well as getting full power of Sitecore OMS on analytics, I decided to use 23Video just as regular CDN.&lt;br /&gt;&lt;br /&gt;The 23Video -Module provides several advantages over a standard Medial Library, such as:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;External Storage for Video files&lt;/li&gt;&lt;li&gt;Fast Dedicated Streaming servers with CDN capabilities&lt;/li&gt;&lt;li&gt;Store in any common format and stream in FLV, MOV, AVI or M4V&lt;/li&gt;&lt;li&gt;Smaller Media Library / Disk usage&lt;/li&gt;&lt;/ul&gt;But the best part on this module is that you can just plugin to Sitecore and CMS Editors will not have to learn new tools, in fact in Editorial&amp;nbsp;environment&amp;nbsp;they&amp;nbsp;probably&amp;nbsp;won't even notice that the videos are not streamed from the Media Library.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_7hv79tpQ9IY/TPKtfYhFCcI/AAAAAAAAALs/BbRWvDCjzJE/s1600/23videoMediaLibScreen.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_7hv79tpQ9IY/TPKtfYhFCcI/AAAAAAAAALs/BbRWvDCjzJE/s1600/23videoMediaLibScreen.PNG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Video reference pointing to 23Video in Sitecore Media Library&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Technical details&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_7hv79tpQ9IY/TPKhhQR_AXI/AAAAAAAAALk/6nztcE441AQ/s1600/upload-flow.gif" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_7hv79tpQ9IY/TPKhhQR_AXI/AAAAAAAAALk/6nztcE441AQ/s320/upload-flow.gif" width="176" /&gt;&lt;/a&gt;&lt;/div&gt;Sitecore communicates with 23Video API; we upload and delete video through API calls. The calls are hooked to ItemEventHandler.&lt;br /&gt;&lt;br /&gt;When Editor wants to add video to the website s/he goes to Sitecore Media Library and uploads video file normally as it would be a media item internally.&lt;br /&gt;Once video is uploaded successfully we send the actual video file to 23Video.com from the CMS. After successful upload 23Video.com returns us URL for uploaded video in 23Video.com. We, then, delete video from CMS Media Library and replace it with URL reference to 23video.com. &lt;br /&gt;Editor can then continue editing, publishing and adding meta data to the media item in Sitecore. &lt;br /&gt;The module is designed so it can be installed on existing solution without having a risk to break anything.&lt;br /&gt;I have not created migration script &lt;i&gt;(sending existing video files from media library)&lt;/i&gt; but that is easy to extend if needed.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Installation&lt;/b&gt;&lt;br /&gt;- One package that adds text field to file -template for 23Video ID.&lt;br /&gt;- 3 DLL's: DotNetOpenAuth.dll, 23API.dll and Addition.TwentyThreeVideo.dll&lt;br /&gt;- ItemEventHandler, Hooks and appSettings keys for 23video API calls on Web.Config. &lt;br /&gt;&lt;br /&gt;&lt;i&gt;...and yes, it is HTML5 Video ready.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Pricing&lt;/b&gt;&lt;br /&gt;23Video service comes with flat monthly price &lt;i&gt;(at the time of writing this $675 per month)&lt;/i&gt; check out the price on &lt;a href="http://23video.com/"&gt;their website&lt;/a&gt;. &lt;br /&gt;For Sitecore module price, &amp;nbsp;please drop me a line at jp at additionconsulting.com in case you are&amp;nbsp;interested.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040569-3424978670733416161?l=thesitecoreexperience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/3424978670733416161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040569&amp;postID=3424978670733416161' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/3424978670733416161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/3424978670733416161'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/2010/11/announcing-23video-module-for-sitecore.html' title='Announcing: 23Video Module for Sitecore'/><author><name>Jukka-Pekka Keisala</name><uri>http://www.blogger.com/profile/02374604779600767780</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.jpkeisala.com/resources/jpIpaqBW.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_7hv79tpQ9IY/TPKiC-uDJoI/AAAAAAAAALo/ejghPjzmNgE/s72-c/23video-logo.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040569.post-2645041571081729495</id><published>2010-02-08T20:20:00.001+01:00</published><updated>2010-02-08T20:26:45.140+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sitecore6'/><category scheme='http://www.blogger.com/atom/ns#' term='Shared Source'/><category scheme='http://www.blogger.com/atom/ns#' term='Multithreading'/><title type='text'>Sitecore multithreading</title><content type='html'>Pretty cool, eh?&lt;br /&gt;&lt;br /&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/p27pVB-JSJc&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/p27pVB-JSJc&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Task Manager is Shared Source Module for Sitecore. You can get it from their &lt;a href="http://trac.sitecore.net/TaskManager"&gt;TRAC&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040569-2645041571081729495?l=thesitecoreexperience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/2645041571081729495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040569&amp;postID=2645041571081729495' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/2645041571081729495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/2645041571081729495'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/2010/02/sitecore-multithreading.html' title='Sitecore multithreading'/><author><name>Jukka-Pekka Keisala</name><uri>http://www.blogger.com/profile/02374604779600767780</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.jpkeisala.com/resources/jpIpaqBW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040569.post-8845459346834269067</id><published>2010-01-13T10:46:00.000+01:00</published><updated>2010-01-13T10:46:26.314+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sitecore OMS'/><title type='text'>Sitecore OMS - Experience Analytics</title><content type='html'>&lt;object width="560" height="340"&gt;&lt;param name="movie" value="http://www.youtube.com/v/4e6ClCaabJ8&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/4e6ClCaabJ8&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040569-8845459346834269067?l=thesitecoreexperience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/8845459346834269067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040569&amp;postID=8845459346834269067' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/8845459346834269067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/8845459346834269067'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/2010/01/sitecore-oms-experience-analytics.html' title='Sitecore OMS - Experience Analytics'/><author><name>Jukka-Pekka Keisala</name><uri>http://www.blogger.com/profile/02374604779600767780</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.jpkeisala.com/resources/jpIpaqBW.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040569.post-5490771328830142425</id><published>2009-11-28T18:56:00.000+01:00</published><updated>2010-11-28T18:56:53.436+01:00</updated><title type='text'>Customize Sitecore Page Edit buttons</title><content type='html'>This is mostly for my own reference but I decide it to post here since this blog has been quiet for 2 years.&lt;br /&gt;&lt;br /&gt;Here you find the page edit buttons:&lt;br /&gt;Core: /sitecore/system/setttings/html editor profiles/rich text default_old/webeditButtons/ (weird that they use default_old but thats what they do - and that took me a while to figure out )&lt;br /&gt;&lt;br /&gt;duplicate an item there and you have a new button.&lt;br /&gt;&lt;br /&gt;In the datasection you find 3 options:&lt;br /&gt;Icon - self explanatory&lt;br /&gt;Tooltip - selfexplatory&lt;br /&gt;Click: A call to a javascript function, f.eks.:&lt;br /&gt;Striketrough: javascript:Sitecore.WebEdit.execute("strikeThrough", true, true);&lt;br /&gt;Italic: javascript:Sitecore.WebEdit.execute("Italic", true, true);&lt;br /&gt;&lt;br /&gt;And so on. All the execute commands listed here: https://developer.mozilla.org/en/Rich-Text_Editing_in_Mozilla (I only tested it with strikeThrough, but it should work)&lt;br /&gt;&lt;br /&gt;Regarding calling sitecore functionality. There is only created 2 functions in the js file: (website/shell/applications/weEdit.js)&lt;br /&gt;&lt;br /&gt;Insert image:&lt;br /&gt;javascript:Sitecore.WebEdit.insertImage($JavascriptParameters)&lt;br /&gt;&lt;br /&gt;Insert Link:&lt;br /&gt;javascript:Sitecore.WebEdit.insertLink($JavascriptParameters)&lt;br /&gt;&lt;br /&gt;So if we wan't to make something more that that we would have to write new functions for that.&lt;br /&gt;&lt;br /&gt;Thats it. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040569-5490771328830142425?l=thesitecoreexperience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/5490771328830142425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040569&amp;postID=5490771328830142425' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/5490771328830142425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/5490771328830142425'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/2010/11/customize-sitecore-page-edit-buttons.html' title='Customize Sitecore Page Edit buttons'/><author><name>Jukka-Pekka Keisala</name><uri>http://www.blogger.com/profile/02374604779600767780</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.jpkeisala.com/resources/jpIpaqBW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040569.post-8793097090939584621</id><published>2009-10-29T15:52:00.006+01:00</published><updated>2009-10-29T16:22:29.161+01:00</updated><title type='text'>Modifying page editor buttons</title><content type='html'>&lt;div style="text-align: left;"&gt;What do you do if you wan't to add a button to the page editor default toolbar? I wanted to find out and here is what I found. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Find the page edit buttons:&lt;/div&gt;&lt;div&gt;Core: /sitecore/system/setttings/html editor profiles/rich text default_old/webeditButtons/ (weird that they use default_old but thats what they do - and that took me a while to figure out)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Duplicate an item there and you have a new button. In the datasection on the new item you find 3 options:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Icon - self explanatory&lt;/div&gt;&lt;div&gt;Tooltip - selfexplatory&lt;/div&gt;&lt;div&gt;Click: A call to a javascript function, f.ex.:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Striketrough&lt;/b&gt;: javascript:Sitecore.WebEdit.execute("strikeThrough", true, true);&lt;/div&gt;&lt;div&gt;&lt;b&gt;Italic&lt;/b&gt;: javascript:Sitecore.WebEdit.execute("Italic", true, true);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Etc. All the standard javascript execute commands should work: (I found a list here from a google search: https://developer.mozilla.org/en/Rich-Text_Editing_in_Mozilla) &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;Here is my result adding a strikeThough button: &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_23U1A3VaETQ/Sumw0jSCJWI/AAAAAAAAAJ0/EiGvyvyGEts/s1600-h/blog2.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_23U1A3VaETQ/Sumw0jSCJWI/AAAAAAAAAJ0/EiGvyvyGEts/s400/blog2.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5398040045250815330" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 168px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Settings:&lt;/div&gt;&lt;div&gt;Click field: "javascript:Sitecore.WebEdit.execute("strikeThrough", true, true);" &lt;/div&gt;&lt;div&gt;Icon field: found an strike through icon in the standard sitecore image library.&lt;/div&gt;&lt;div&gt;Tooltip field: "Strike through"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The javascript-file with functions are found here : website/shell/applications/webEdit.js&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Regarding calling sitecore functionality. There is only created 2 functions in the js file:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Insert image: &lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;javascript:Sitecore.WebEdit.insertImage($JavascriptParameters)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Insert Link:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;javascript:Sitecore.WebEdit.insertLink($JavascriptParameters)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So if you wan't to make something more that that we would have to write new functions for that.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;PS: I did this on Sitecore.NET 6.0.0 (rev. 081022)  (the nicam demo site)&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040569-8793097090939584621?l=thesitecoreexperience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/8793097090939584621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040569&amp;postID=8793097090939584621' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/8793097090939584621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/8793097090939584621'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/2009/10/modifying-page-editor-buttons.html' title='Modifying page editor buttons'/><author><name>Brian Andersen</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_23U1A3VaETQ/Sumw0jSCJWI/AAAAAAAAAJ0/EiGvyvyGEts/s72-c/blog2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040569.post-7477076609179279457</id><published>2007-12-17T12:45:00.000+01:00</published><updated>2007-12-17T13:12:24.944+01:00</updated><title type='text'>Get collection of Sitecore Weblogs in Netvibes</title><content type='html'>&lt;p&gt;I have been using Netvibes as my starting page. I like that more than iGoogle. Here is my collection of Sitecore RSS feeds. Collection contains about +25 blogs, Sitecore corporate news and Sitecore Developer Network articles and forum posts in RSS. There is also Google Custom Search for Sitecore on Sitecore related blogs.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;If you have a Sitecore Blog or another useful resource that is not listed here. Please let me know&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Click here to preview:&lt;a href="http://eco.netvibes.com/tabs/229229/sitecore-developer-feeds" target="_blank"&gt;&lt;img src="http://www.netvibes.com/img/add2netvibes.gif" border="none" width="91" height="17" alt="Add to Netvibes" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040569-7477076609179279457?l=thesitecoreexperience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/7477076609179279457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040569&amp;postID=7477076609179279457' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/7477076609179279457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/7477076609179279457'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/2007/12/get-collection-of-sitecore-weblogs-in.html' title='Get collection of Sitecore Weblogs in Netvibes'/><author><name>Jukka-Pekka Keisala</name><uri>http://www.blogger.com/profile/02374604779600767780</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.jpkeisala.com/resources/jpIpaqBW.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040569.post-4527646740898130645</id><published>2007-08-24T15:56:00.000+02:00</published><updated>2007-08-24T15:59:31.119+02:00</updated><title type='text'>Workflow</title><content type='html'>Some sample code how to manage &lt;a href="http://sdn5.sitecore.net/Snippets/Workflow.aspx"&gt;workflow  on Sitecore&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040569-4527646740898130645?l=thesitecoreexperience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/4527646740898130645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040569&amp;postID=4527646740898130645' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/4527646740898130645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/4527646740898130645'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/2007/08/workflow.html' title='Workflow'/><author><name>Sebastian</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040569.post-116992429465340240</id><published>2007-01-27T19:51:00.000+01:00</published><updated>2007-01-30T22:48:18.503+01:00</updated><title type='text'>Sitecore Developer Search</title><content type='html'>I was playing around with &lt;a href="http://www.google.com/coop/"&gt;Google's Co-op&lt;/a&gt; and &lt;a href="http://www.netvibes.com"&gt;Netvibes&lt;/a&gt; API &lt;span style="font-style: italic;"&gt;(cool services both of them!)&lt;/span&gt; and I drafted out simple a little Netvibes module that searches through few Sitecore Sites and Blogs.&lt;br /&gt;If you have a Netvibes account give a try and if you want some more sites into the index drop me a mail at jp at addition.dk.&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;b&gt;Netvibes Sitecore Search Module&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Fwww.jpkeisala.com%2Fstuff%2FsitecoreGSE.html&amp;amp;type=api"&gt;&lt;img src="http://www.netvibes.com/img/add2netvibes.gif" alt="Add to Netvibes" height="17" width="91" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;And... if you want to Subscribe to Sitecore Experience on Netvibes click button below:&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;b&gt;Subscribe to The Sitecore Experience on Netvibes&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Fthesitecoreexperience.blogspot.com%2F"&gt;&lt;img src="http://www.netvibes.com/img/add2netvibes.gif" alt="Add to Netvibes" height="17" width="91" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040569-116992429465340240?l=thesitecoreexperience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/116992429465340240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040569&amp;postID=116992429465340240' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/116992429465340240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/116992429465340240'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/2007/01/sitecore-developer-search.html' title='Sitecore Developer Search'/><author><name>Jukka-Pekka Keisala</name><uri>http://www.blogger.com/profile/02374604779600767780</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.jpkeisala.com/resources/jpIpaqBW.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040569.post-116902357252201661</id><published>2007-01-17T09:43:00.000+01:00</published><updated>2007-04-21T11:21:53.713+02:00</updated><title type='text'>Read image attributes from media library images</title><content type='html'>This is nice when you need to know what is the size of the image.&lt;br /&gt;sc:fld('height',sc:item(concat('/sitecore/media  library', sc:fld('banner',.,'mediapath')),.))&lt;br /&gt;Returns height of the image in  "banner"  field.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040569-116902357252201661?l=thesitecoreexperience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/116902357252201661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040569&amp;postID=116902357252201661' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/116902357252201661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/116902357252201661'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/2007/01/read-image-attributes-from-media.html' title='Read image attributes from media library images'/><author><name>Jukka-Pekka Keisala</name><uri>http://www.blogger.com/profile/02374604779600767780</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.jpkeisala.com/resources/jpIpaqBW.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040569.post-115824309003165870</id><published>2006-09-14T16:07:00.000+02:00</published><updated>2006-09-14T16:14:18.530+02:00</updated><title type='text'>using Sitecore.Kernel.Webutils</title><content type='html'>Webutils functions can be used as helper functions as well. In order to get the url of the server, we can use it as follows:&lt;br /&gt;&lt;br /&gt;install it in web.config:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;xslExtensions&amp;gt;&lt;br /&gt;...&lt;br /&gt;        &amp;lt;extension mode="on" type="Sitecore.Web.WebUtil, Sitecore.Kernel" namespace="http://www.sitecore.net/webutil" singleInstance="true" /&amp;gt;&lt;br /&gt;    &amp;lt;/xslExtensions&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;declare it in your xslt:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;xmlns:webutil="http://www.sitecore.net/webutil" &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;then use it (example from a "print page" footer):&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;xsl:text&amp;gt;Artiklens placering: &amp;lt;/xsl:text&amp;gt;&amp;lt;xsl:value-of select="webutil:GetServerUrl()" /&amp;gt;&amp;lt;xsl:value-of select="sc:path(.)" /&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040569-115824309003165870?l=thesitecoreexperience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/115824309003165870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040569&amp;postID=115824309003165870' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/115824309003165870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/115824309003165870'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/2006/09/using-sitecorekernelwebutils.html' title='using Sitecore.Kernel.Webutils'/><author><name>perisabil</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://1.bp.blogspot.com/-h2_4dLbF4YU/Tx7Wx8VJWfI/AAAAAAAAB5c/w9Ss0t_JRRI/s1600/image.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040569.post-115824219700676817</id><published>2006-09-14T15:50:00.000+02:00</published><updated>2006-09-14T16:04:59.413+02:00</updated><title type='text'>util:GetString</title><content type='html'>It might be not obvious but is common practice to use util:GetString(string, default). &lt;br /&gt;&lt;br /&gt;A xsl:choose used to display the title of an item can be replaced as follows:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;  &amp;lt;xsl:when test="sc:fld('menutitle',.)"&amp;gt;&lt;br /&gt;    &amp;lt;xsl:value-of select="sc:fld('menutitle',.)"&amp;gt;&lt;br /&gt;  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;  &amp;lt;xsl:when test="sc:fld('title',.)"&amp;gt;&lt;br /&gt;    &amp;lt;xsl:value-of select="sc:fld('title',.)"&amp;gt;&lt;br /&gt;  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;  &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;    &amp;lt;xsl:value-of select="./@name"&amp;gt;&lt;br /&gt;  &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;&amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;simpler call:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;xsl:value-of select="util:GetString(util:GetString(sc:fld('title',.), sc:fld('menutitle',.)),@name)"/&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040569-115824219700676817?l=thesitecoreexperience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/115824219700676817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040569&amp;postID=115824219700676817' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/115824219700676817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/115824219700676817'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/2006/09/utilgetstring.html' title='util:GetString'/><author><name>perisabil</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://1.bp.blogspot.com/-h2_4dLbF4YU/Tx7Wx8VJWfI/AAAAAAAAB5c/w9Ss0t_JRRI/s1600/image.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040569.post-114829965435255998</id><published>2006-05-22T14:06:00.000+02:00</published><updated>2006-05-22T14:12:31.833+02:00</updated><title type='text'>Sitecore performance - xslt NONO !</title><content type='html'>Fyi -&gt; speed problems could be caused by one single line in xslt ( impressive that you can kill a dual core P4 64bit 4Ghz with 8 GB mem in one single code line ).&lt;br /&gt;&lt;br /&gt;Never compare nodeset´s unless you really have to .. what you typically need is to figure out if current node is thye same as home node … do NOT do like this :&lt;br /&gt;xsl:if test=”$home=$sc_current”  …. &lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;&lt; -- no no no .. verboten !!!! STOP !&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The line above will loop all nodes under $home and compare every node with every node in $sc_currentitem.&lt;br /&gt;&lt;br /&gt;Ofcourse what you DO want to do is :&lt;br /&gt;xsl:if test=”$home/@id=$sc_current/@id&lt;br /&gt;&lt;br /&gt;If you experience speed problems, this could be why !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040569-114829965435255998?l=thesitecoreexperience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/114829965435255998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040569&amp;postID=114829965435255998' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/114829965435255998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/114829965435255998'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/2006/05/sitecore-performance-xslt-nono.html' title='Sitecore performance - xslt NONO !'/><author><name>Michael</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://fc-cykel.sofort.dk/fc-cykel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040569.post-113991038911750632</id><published>2006-02-14T10:40:00.000+01:00</published><updated>2006-02-14T11:00:17.563+01:00</updated><title type='text'>Two useful tips for dtSearch customization in Sitecore</title><content type='html'>&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;dtSearch and Mixing Text Query &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;In dtSearch when I search with multiple words its always exact match search. For example:&lt;br /&gt;If I write query "Product Foobar". When in my page there is text "Foobar Product".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solution:&lt;/span&gt;&lt;br /&gt;But dtSearch has the following search options defined:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;public enum Options&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;{&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;      AllWords = 2,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;      AnyWords = 4,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;      CaseSensitive = 8,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;      ExactPhrase = 1,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;      Logic = 0x20,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;      Ranked = 0x40,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;      WildCards = 0x10&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To use these options, you should create the custom xslt extension which will return &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;&lt;span style="font-size:85%;"&gt;Sitecore.Modules.Search.dtSearch.Search(searchString, Sitecore.Modules.Search.Options.AllWords)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;Multiple indexes&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Sometimes you might have multiple sites on same installation of the Sitecore and you want search index also be separated to each sites.&lt;br /&gt;For example if you Sitecore content tree looks like:&lt;br /&gt;Intranet&lt;br /&gt;WebSite&lt;br /&gt;ExtranetSite&lt;br /&gt;&lt;br /&gt;Then create normally separate indexes in dtSearch indexer on the server and add the following lines in the web.config file.&lt;br /&gt;&lt;br /&gt;&lt;setting name="SearchEngine" value="Sitecore.Modules.Search.dtSearch"&gt;&lt;br /&gt;&lt;setting name="SearchIndexer" value="Sitecore.Modules.Search.dtSearchIndexer"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;&lt;!--Index for Intranet --&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;&lt;setting name="dtSearchIndexFolder_Intranet" value="/index/"&gt;&lt;/setting&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;&lt;setting name=""&gt;&lt;/setting&gt;&lt;/span&gt;&lt;/span&gt;&lt;/setting&gt;&lt;/setting&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;Intranet&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;" value="&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;Intranet&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;" /&gt;&lt;br /&gt;&lt;!--Index for Wecoshipping.com --&gt;&lt;br /&gt;&lt;setting name=""&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;WebSite&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;" value="/index/" /&gt;&lt;br /&gt;&lt;setting name=""&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;WebSite&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;" value&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;WebSite&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;/&gt;&lt;br /&gt;&lt;!--Index for Nordana.es --&gt;&lt;br /&gt;&lt;setting name=""&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;ExtranetSite&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;" value="/index/" /&gt;&lt;br /&gt;&lt;setting name=""&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;ExtranetSite&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;" value="&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;ExtranetSite&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;You of course need XSL helper or custom function below to switch between sites&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;        private string GetSearchResultIndex(string dist)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;        {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;            string searchText = txbSearch.Text;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;            // Instantiate the Search Engine&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;            ISearch engine = Sitecore.Modules.Search.Factory.CreateSearchEngine();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;            // Get the dtSearch engine implementation&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;            dtSearch your_dtSearch = engine as dtSearch;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;            // Set index&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;            string pathIndex = Server.MapPath(pathIndexDtSearch(dist) + nameIndexDtSearch(dist) + "\\");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;            your_dtSearch.Index = pathIndex;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;            // Execure search&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;            your_dtSearch.SearchTextOptions(searchText, Options.AllWords);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;            // Get search resalts as XML&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;            System.Xml.XmlDocument searchResult = your_dtSearch.SearchResults;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;            // Format result&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;            string result = string.Empty;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;            System.Xml.XmlNodeList list = searchResult.SelectNodes("/sitecore/result/item");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;            foreach(System.Xml.XmlNode node in list)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;            {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;                string url = node.SelectSingleNode("url").InnerText;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;                result += "&lt;a href="http://www.blogger.com/%27"&gt;" + url + "&lt;/a&gt;&lt;br /&gt;";&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;            }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;            return result;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/setting&gt;&lt;/span&gt;&lt;/setting&gt;&lt;/span&gt;&lt;/setting&gt;&lt;/span&gt;&lt;/setting&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040569-113991038911750632?l=thesitecoreexperience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/113991038911750632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040569&amp;postID=113991038911750632' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/113991038911750632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/113991038911750632'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/2006/02/two-useful-tips-for-dtsearch.html' title='Two useful tips for dtSearch customization in Sitecore'/><author><name>Jukka-Pekka Keisala</name><uri>http://www.blogger.com/profile/02374604779600767780</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.jpkeisala.com/resources/jpIpaqBW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040569.post-113689700694031100</id><published>2006-01-10T13:39:00.000+01:00</published><updated>2006-01-10T13:43:26.970+01:00</updated><title type='text'>items in a lookup</title><content type='html'>If you have a big number of child items and you want to use the parent as source path in a Lookup, Multilink or Valuelookup field you might find that not all items are shown. &lt;br /&gt;&lt;br /&gt;The default limit is 100 and is set in web.config and can be changed:&lt;br /&gt;&lt;br /&gt;&amp;lt;!--  Query.MaxItems&lt;br /&gt;   Specifies the max number of items in a query result set.&lt;br /&gt;   This also controls the number of items in Lookup, Multilink and Valuelookup fields.&lt;br /&gt;--&amp;gt;&lt;br /&gt;      &amp;lt;setting name="&lt;b&gt;Query.MaxItems&lt;/b&gt;" value="&lt;b&gt;100&lt;/b&gt;" /&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040569-113689700694031100?l=thesitecoreexperience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/113689700694031100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040569&amp;postID=113689700694031100' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/113689700694031100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/113689700694031100'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/2006/01/items-in-lookup.html' title='items in a lookup'/><author><name>perisabil</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://1.bp.blogspot.com/-h2_4dLbF4YU/Tx7Wx8VJWfI/AAAAAAAAB5c/w9Ss0t_JRRI/s1600/image.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040569.post-113584474301344074</id><published>2005-12-29T09:24:00.000+01:00</published><updated>2005-12-29T09:26:22.393+01:00</updated><title type='text'>Adding an item and publishing in S5</title><content type='html'>&lt;code&gt;using System;&lt;br /&gt;using Sitecore;&lt;br /&gt;using Sitecore.Data.Items;&lt;br /&gt;using Sitecore.Publishing;&lt;br /&gt;using Sitecore.Configuration;&lt;br /&gt;using Sitecore.SecurityModel;&lt;br /&gt;&lt;br /&gt;namespace Addition.Test&lt;br /&gt;{&lt;br /&gt; /// &lt;summary&gt;&lt;br /&gt; /// Class to demo creation of an item and publishing.&lt;br /&gt; /// &lt;/summary&gt;&lt;br /&gt; public class S5Demos&lt;br /&gt; {&lt;br /&gt;  // alternativelly paths can be used as well&lt;br /&gt;  public const string _masterId = "{E13FA2BC-FBB9-4F36-9601-C620E0FC6ED8}";&lt;br /&gt;  public const string _templateId = "{797D0FE3-16C6-4910-8174-68A226AACE67}";&lt;br /&gt;  public const string _insertionRoot = "{7776B388-75CE-4E06-A2A6-F7F6E053FFF8}";&lt;br /&gt;&lt;br /&gt;  // get an item from master database&lt;br /&gt;  public static Item GetItemFromSitecoreMaster(string itemPath)&lt;br /&gt;  {&lt;br /&gt;   return S5Demos.GetItemFromSitecore(itemPath, "master");&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  // get an item from web database&lt;br /&gt;  public static Item GetItemFromSitecoreWeb(string itemPath)&lt;br /&gt;  {&lt;br /&gt;   return S5Demos.GetItemFromSitecore(itemPath, "web");&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  // get an item based on GUID or path from a specified database&lt;br /&gt;  public static Item GetItemFromSitecore(string itemPath, string dbName) &lt;br /&gt;  {&lt;br /&gt;   Item itmResult = null;&lt;br /&gt;&lt;br /&gt;   Sitecore.Data.Database dataDB = new Sitecore.Data.Database(dbName);&lt;br /&gt;   if (dataDB != null)&lt;br /&gt;   {&lt;br /&gt;    Sitecore.Data.ItemUriBuilder bUri = new Sitecore.Data.ItemUriBuilder(itemPath, dataDB);&lt;br /&gt;    if (bUri != null)&lt;br /&gt;    { &lt;br /&gt;     Sitecore.Data.ItemUri uri = new Sitecore.Data.ItemUri(bUri.ItemUri);&lt;br /&gt;     if (uri != null)&lt;br /&gt;     {&lt;br /&gt;      itmResult = Sitecore.Data.Database.GetItem(uri);&lt;br /&gt;     }&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   return itmResult;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  // create a sitecore node&lt;br /&gt;  protected void CreateAnItem(string itmName)&lt;br /&gt;  {&lt;br /&gt;   // where we insert?&lt;br /&gt;   Item root = GetItemFromSitecoreMaster(_insertionRoot);&lt;br /&gt;   // we can use a master as model&lt;br /&gt;   MasterItem masterItm = GetItemFromSitecoreMaster(_masterId);&lt;br /&gt;   // a tempalte is fine as well&lt;br /&gt;   TemplateItem templateItm = GetItemFromSitecoreMaster(_templateId);&lt;br /&gt;&lt;br /&gt;   using(SecurityDisabler disabler1 = new SecurityDisabler())&lt;br /&gt;   {&lt;br /&gt;    root.Editing.BeginEdit();&lt;br /&gt;    &lt;br /&gt;    Sitecore.Diagnostics.Log.Info("adding " + itmName.ToString(), this);&lt;br /&gt;    Item itmAdd = root.Add(itmName, masterItm);&lt;br /&gt;    // or, by using the template: Item itmAdd = root.Add(itmName, templateItm);&lt;br /&gt;    if (itmAdd != null)&lt;br /&gt;    {&lt;br /&gt;     // modify a field&lt;br /&gt;     Sitecore.Data.Fields.Field fldLoc;&lt;br /&gt;&lt;br /&gt;     itmAdd.Editing.BeginEdit();&lt;br /&gt;     try&lt;br /&gt;     {&lt;br /&gt;      fldLoc = itmAdd.Fields["SomeField"];&lt;br /&gt;      if (fldLoc != null)&lt;br /&gt;      {&lt;br /&gt;       fldLoc.Value = "Some Value";&lt;br /&gt;      }&lt;br /&gt;     }&lt;br /&gt;     catch&lt;br /&gt;     {&lt;br /&gt;     }&lt;br /&gt;     finally&lt;br /&gt;     {&lt;br /&gt;      itmAdd.Editing.EndEdit();&lt;br /&gt;     }&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    root.Editing.EndEdit();&lt;br /&gt;    Sitecore.Diagnostics.Log.Info("adding done", this);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  // publish a sitecore node&lt;br /&gt;  protected void PublishNode(Item itm)&lt;br /&gt;  {&lt;br /&gt;   Sitecore.Diagnostics.Log.Info("publishing node " + itm.Paths.Path, this);  &lt;br /&gt;   try&lt;br /&gt;   {&lt;br /&gt;    PublishOptions aOptions  = new PublishOptions(PublishMode.Full,&lt;br /&gt;     Sitecore.Globalization.Language.DefaultLanguage, DateTime.Now);&lt;br /&gt;    aOptions.TargetDatabase = Factory.GetDatabase("web");&lt;br /&gt;    aOptions.RootItem = itm;&lt;br /&gt;    aOptions.SourceDatabase = itm.Database;&lt;br /&gt;&lt;br /&gt;    //Create and run a publisher&lt;br /&gt;    Publisher aPublisher = new Publisher(aOptions);&lt;br /&gt;    &lt;br /&gt;    // use a disabler to not be forced to log in&lt;br /&gt;    using (Sitecore.SecurityModel.SecurityDisabler disabler1 = new Sitecore.SecurityModel.SecurityDisabler())&lt;br /&gt;    {&lt;br /&gt;     aPublisher.Publish();&lt;br /&gt;    }&lt;br /&gt;    Sitecore.Diagnostics.Log.Info("publishing done for " + itm.Paths.Path, this);&lt;br /&gt;   }&lt;br /&gt;   catch (Exception ex)&lt;br /&gt;   {&lt;br /&gt;    Sitecore.Diagnostics.Log.Error("error on publishing node " + itm.Paths.Path, ex, this);&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040569-113584474301344074?l=thesitecoreexperience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/113584474301344074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040569&amp;postID=113584474301344074' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/113584474301344074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/113584474301344074'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/2005/12/adding-item-and-publishing-in-s5.html' title='Adding an item and publishing in S5'/><author><name>perisabil</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://1.bp.blogspot.com/-h2_4dLbF4YU/Tx7Wx8VJWfI/AAAAAAAAB5c/w9Ss0t_JRRI/s1600/image.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040569.post-113498818484691898</id><published>2005-12-19T11:28:00.000+01:00</published><updated>2005-12-19T11:30:17.926+01:00</updated><title type='text'>S5: getting  curent item</title><content type='html'>in S4 the current item was accesible via Sitecore.State.CurrentItem&lt;br /&gt;&lt;br /&gt;S5 has two ways: &lt;br /&gt;1) Sitecore.Express.Items.CurrentItem &lt;br /&gt;2) Sitecore.Context.Item&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040569-113498818484691898?l=thesitecoreexperience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/113498818484691898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040569&amp;postID=113498818484691898' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/113498818484691898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/113498818484691898'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/2005/12/s5-getting-curent-item.html' title='S5: getting  curent item'/><author><name>perisabil</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://1.bp.blogspot.com/-h2_4dLbF4YU/Tx7Wx8VJWfI/AAAAAAAAB5c/w9Ss0t_JRRI/s1600/image.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040569.post-113094417448055268</id><published>2005-11-02T16:09:00.000+01:00</published><updated>2005-11-02T16:38:39.993+01:00</updated><title type='text'>Migrating from v4 to v5</title><content type='html'>&lt;span style="font-weight: bold; color: rgb(204, 0, 0);"&gt;Old class namespace/property              &lt;/span&gt;                            :::::::  &lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;New one&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;Sitecore.IMasterItem&lt;/span&gt;      :::::::           &lt;span style="color: rgb(0, 0, 153);"&gt;Sitecore.Data.Items.Item&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;Sitecore.Data.Items.Item.Path&lt;/span&gt;    :::::::      &lt;span style="color: rgb(0, 0, 153);"&gt;Sitecore.Data.Items.Item.Paths.Path&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;Sitecore.Error&lt;/span&gt;  :::::::   &lt;span style="color: rgb(0, 0, 153);"&gt;Sitecore.Diagnostics.Error&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040569-113094417448055268?l=thesitecoreexperience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/113094417448055268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040569&amp;postID=113094417448055268' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/113094417448055268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/113094417448055268'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/2005/11/migrating-from-v4-to-v5.html' title='Migrating from v4 to v5'/><author><name>Nicu</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040569.post-113024367469696838</id><published>2005-10-25T14:21:00.000+02:00</published><updated>2005-10-25T14:44:41.213+02:00</updated><title type='text'>S4 vs. S5: multiselection</title><content type='html'>in S4, a multiselection field, when queried, returned a string with concatenated GUIDs, separated by '|', and _terminated_ with '|'&lt;br /&gt;&lt;br /&gt;in S5, the final '|' has gone with the side effect that a loop processing the GUIDs will ignore the last item in the case of a transformation as follows: &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;xsl:template match="*" mode="main"&amp;gt; &lt;br /&gt; &amp;lt;xsl:variable name="ids" select="sc:fld('Trademark',.)"/&amp;gt; &lt;br /&gt; &amp;lt;div class="trademarks"&amp;gt;&lt;br /&gt;  &amp;lt;xsl:call-template name="PrintText"&amp;gt; &lt;br /&gt;   &amp;lt;xsl:with-param name="ids" select="$ids"/&amp;gt;&lt;br /&gt;  &amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt; &amp;lt;/div&amp;gt; &lt;br /&gt;&amp;lt;/xsl:template&amp;gt; &lt;br /&gt;&lt;br /&gt;&amp;lt;xsl:template name="PrintText"&amp;gt; &lt;br /&gt;  &amp;lt;xsl:param name="ids"/&amp;gt; &lt;br /&gt;  &amp;lt;xsl:if test="$ids"&amp;gt; &lt;br /&gt;    &amp;lt;xsl:variable name="itm_id" select="substring-before($ids, '|')"/&amp;gt; &lt;br /&gt;    &amp;lt;xsl:if test="$itm_id"&amp;gt; &lt;br /&gt;      &amp;lt;xsl:variable name="itm" select="sc:item($itm_id,.)"/&amp;gt; &lt;br /&gt;      &amp;lt;xsl:value-of select="sc:fld('text', $itm)"/&amp;gt;&amp;#160;&lt;br /&gt;    &amp;lt;/xsl:if&amp;gt; &lt;br /&gt;    &amp;lt;xsl:call-template name="PrintText"&amp;gt; &lt;br /&gt;      &amp;lt;xsl:with-param name="ids" select="substring-after($ids, '|')"/&amp;gt; &lt;br /&gt;    &amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;the (pretty common) code above will fail for S5. The workaround is:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;xsl:template match="*" mode="main"&amp;gt;&lt;br /&gt; &amp;lt;div id="leftcol"&amp;gt;&lt;br /&gt;  &amp;lt;xsl:call-template name="PrintSideDocument"&amp;gt; &lt;br /&gt;   &amp;lt;xsl:with-param name="ids" select="sc:fld('leftsidedocuments',.)" /&amp;gt;&lt;br /&gt;  &amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt; &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;xsl:template name="PrintSideDocument"&amp;gt; &lt;br /&gt; &amp;lt;xsl:param name="ids"/&amp;gt;&lt;br /&gt; &lt;br /&gt; &amp;lt;xsl:if test="$ids"&amp;gt; &lt;br /&gt;  &amp;lt;xsl:variable name="itm_id" select="substring-before($ids, '|')"/&amp;gt;&lt;br /&gt;  &amp;lt;xsl:variable name="locID"&amp;gt;&lt;br /&gt;   &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;    &amp;lt;xsl:when test="$itm_id"&amp;gt;&lt;br /&gt;      &amp;lt;xsl:value-of select="$itm_id"/&amp;gt;&lt;br /&gt;     &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;     &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;      &amp;lt;xsl:value-of select="$ids"/&amp;gt;&lt;br /&gt;     &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;   &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;  &amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;  &lt;br /&gt;  &amp;lt;xsl:variable name="itm" select="sc:item($locID,.)"/&amp;gt; &lt;br /&gt;  &amp;lt;xsl:if test="$itm"&amp;gt; &lt;br /&gt;   &amp;lt;h3&amp;gt;&amp;lt;xsl:value-of select="sc:fld('title', $itm)"/&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;   &amp;lt;xsl:value-of disable-output-escaping="yes" select="sc:fld('teaser',$itm)"/&amp;gt;&lt;br /&gt;   &amp;lt;xsl:if test="$itm_id"&amp;gt;&lt;br /&gt;    &amp;lt;hr /&amp;gt;&lt;br /&gt;   &amp;lt;/xsl:if&amp;gt;   &lt;br /&gt;  &amp;lt;/xsl:if&amp;gt; &lt;br /&gt; &lt;br /&gt;  &amp;lt;xsl:call-template name="PrintSideDocument"&amp;gt; &lt;br /&gt;   &amp;lt;xsl:with-param name="ids" select="substring-after($ids, '|')" /&amp;gt;&lt;br /&gt;  &amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt; &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040569-113024367469696838?l=thesitecoreexperience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/113024367469696838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040569&amp;postID=113024367469696838' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/113024367469696838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/113024367469696838'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/2005/10/s4-vs-s5-multiselection.html' title='S4 vs. S5: multiselection'/><author><name>perisabil</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://1.bp.blogspot.com/-h2_4dLbF4YU/Tx7Wx8VJWfI/AAAAAAAAB5c/w9Ss0t_JRRI/s1600/image.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040569.post-112843035711636988</id><published>2005-10-04T14:46:00.000+02:00</published><updated>2005-10-04T14:52:37.123+02:00</updated><title type='text'>Creating custom Controls</title><content type='html'>When you create a custom control, &lt;span style="font-weight:bold;"&gt;_do_not_&lt;/span&gt; assign a namespace to the class that implements the control. Let it naked there, as follows:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;using System.Configuration;&lt;br /&gt;using System.Text;&lt;br /&gt;&lt;br /&gt;/// &lt;summary&gt;&lt;br /&gt;/// Summary description for CustomFolderFiles.&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;public class CustomFolderFiles: Sitecore.ClientControls.ContentControl&lt;br /&gt;{&lt;br /&gt; #region Constants&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Otherwise, when you try to register your class by defining a template field, Sitecore will concatenate the assembly name and the namespace and you'll have a hard time figuring out why you receive logged errors like&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Could not find type in MainUtil.CreateObject: CustomFolderFiles&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;hth,&lt;br /&gt;/p&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040569-112843035711636988?l=thesitecoreexperience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/112843035711636988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040569&amp;postID=112843035711636988' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/112843035711636988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/112843035711636988'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/2005/10/creating-custom-controls.html' title='Creating custom Controls'/><author><name>perisabil</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://1.bp.blogspot.com/-h2_4dLbF4YU/Tx7Wx8VJWfI/AAAAAAAAB5c/w9Ss0t_JRRI/s1600/image.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040569.post-111752604559866115</id><published>2005-05-31T09:51:00.000+02:00</published><updated>2005-05-31T09:55:02.466+02:00</updated><title type='text'>ASP,Net 1.x Page Lifecycle</title><content type='html'>Found a good overview for the order of events when executing an asp.net page here:&lt;br /&gt;&lt;a href="http://authors.aspalliance.com/aldotnet/examples/plediagram.htm"&gt;http://authors.aspalliance.com/aldotnet/examples/plediagram.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;  Use the following key for the events below: &lt;br /&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;strong&gt;Black&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt; - every time page is processed &lt;br /&gt;&lt;/span&gt; &lt;span style="color: rgb(255, 0, 51);font-size:85%;" &gt;&lt;strong&gt;Red&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt; - only if the request is transacted &lt;br /&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 255, 0);font-size:85%;" &gt;&lt;strong&gt;Green&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt; - only on postback &lt;br /&gt;&lt;/span&gt; &lt;span style="color: rgb(51, 153, 255);font-size:85%;" &gt;&lt;strong&gt;Blue&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt; - only if tracing is enabled  &lt;/span&gt;&lt;/p&gt;  &lt;table style="border-collapse: collapse;color:#111111;" id="AutoNumber1" border="1" border cellpadding="4" height="1012" width="100%"&gt;    &lt;tbody&gt;&lt;tr&gt;     &lt;td colspan="3" height="19" width="100%"&gt;&lt;span style="font-size:85%;"&gt;Begin Transaction (only when      transactions are enabled for the page)&lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td height="19" width="22%"&gt; &lt;span style="font-size:85%;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;/td&gt;     &lt;td height="19" valign="top" width="35%"&gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;Begin Transaction&lt;/span&gt;&lt;/td&gt;     &lt;td height="19" width="43%"&gt;&lt;span style="font-size:85%;"&gt;ProcessRequestTransacted()&lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td height="133" width="22%"&gt; &lt;span style="font-size:85%;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;/td&gt;     &lt;td height="133" valign="top" width="35%"&gt;     &lt;p align="left"&gt; &lt;/p&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;/td&gt;     &lt;td height="133" width="43%"&gt;&lt;span style="font-size:85%;"&gt;TransactedCallback() on&lt;br /&gt;    --------------------&lt;br /&gt;    Process Request Main&lt;br /&gt;    --------------------&lt;br /&gt;    (described below)&lt;br /&gt;    Transactions.InvokeTransacted -- parts of the request that need to be done      under transacted context&lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td colspan="3" height="19" width="100%"&gt; &lt;span style="font-size:85%;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td colspan="3" height="19" width="100%"&gt;&lt;span style="font-size:85%;"&gt;Process Request Main (every page,      this is the main execution path)&lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td height="56" width="22%"&gt; &lt;span style="font-size:85%;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;/td&gt;     &lt;td height="56" valign="top" width="35%"&gt;&lt;span style="font-size:85%;"&gt;Init&lt;/span&gt;&lt;/td&gt;     &lt;td height="56" width="43%"&gt;&lt;span style="font-size:85%;"&gt;InitRecursive()&lt;br /&gt;    Raise OnInit (recursive)&lt;br /&gt;    Begin tracking viewstate&lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td height="38" width="22%"&gt; &lt;span style="font-size:85%;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;/td&gt;     &lt;td height="38" valign="top" width="35%"&gt;&lt;span style="color: rgb(0, 255, 0);font-size:85%;" &gt;LoadViewState&lt;/span&gt;&lt;/td&gt;     &lt;td height="38" width="43%"&gt;&lt;span style="font-size:85%;"&gt;LoadPageViewState()&lt;br /&gt;    LoadPageStateFromPersistenceMedium()&lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td height="57" width="22%"&gt; &lt;span style="font-size:85%;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;/td&gt;     &lt;td height="57" valign="top" width="35%"&gt;&lt;span style="color: rgb(0, 255, 0);font-size:85%;" &gt;ProcessPostData1&lt;/span&gt;&lt;/td&gt;     &lt;td height="57" width="43%"&gt;&lt;span style="font-size:85%;"&gt;ProcessPostData(_requestValueCollection, true /*      BeforeLoad */);&lt;br /&gt;    Hand postback data to the controls that exist before Page_Load&lt;br /&gt;    Page.Validate()&lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td height="38" width="22%"&gt; &lt;span style="font-size:85%;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;/td&gt;     &lt;td height="38" valign="top" width="35%"&gt;&lt;span style="font-size:85%;"&gt;Load&lt;/span&gt;&lt;/td&gt;     &lt;td height="38" width="43%"&gt;&lt;span style="font-size:85%;"&gt;LoadRecursive();&lt;br /&gt;    Fire OnLoad() (recursive)&lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td height="57" width="22%"&gt; &lt;span style="font-size:85%;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;/td&gt;     &lt;td height="57" valign="top" width="35%"&gt;&lt;span style="color: rgb(0, 255, 0);font-size:85%;" &gt;ProcessPostData2&lt;/span&gt;&lt;/td&gt;     &lt;td height="57" width="43%"&gt;&lt;span style="font-size:85%;"&gt;ProcessPostData(_leftoverPostData, false /*      BeforeLoad */);&lt;br /&gt;    Hand postback data to controls added in Load (using LoadControl, for      example)&lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td height="57" width="22%"&gt; &lt;span style="font-size:85%;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;/td&gt;     &lt;td height="57" valign="top" width="35%"&gt;&lt;span style="color: rgb(0, 255, 0);font-size:85%;" &gt;Raise ChangedEvents&lt;/span&gt;&lt;/td&gt;     &lt;td height="57" width="43%"&gt;&lt;span style="font-size:85%;"&gt;RaiseChangedEvents()&lt;br /&gt;    RaisePostDataChangedEvent() on each control with postback data that is not      an IPostBackEventHandler&lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td height="38" width="22%"&gt; &lt;span style="font-size:85%;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;/td&gt;     &lt;td height="38" valign="top" width="35%"&gt;&lt;span style="color: rgb(0, 255, 0);font-size:85%;" &gt;Raise PostBackEvent&lt;/span&gt;&lt;/td&gt;     &lt;td height="38" width="43%"&gt;&lt;span style="font-size:85%;"&gt;RaisePostBackEvent(_requestValueCollection)&lt;br /&gt;    RaisePostBackEvent() on the control that caused the postback&lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td height="95" width="22%"&gt; &lt;span style="font-size:85%;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;/td&gt;     &lt;td height="95" valign="top" width="35%"&gt;&lt;span style="font-size:85%;"&gt;PreRender&lt;/span&gt;&lt;/td&gt;     &lt;td height="95" width="43%"&gt;&lt;span style="font-size:85%;"&gt;PreRenderRecursive()&lt;br /&gt;    if Page.Visible&lt;br /&gt;       EnsureChildControls() -- creates controls if they haven't already been      created by    databinding&lt;br /&gt;       Fire OnPreRender (recursive)&lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td height="19" width="22%"&gt; &lt;span style="font-size:85%;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;/td&gt;     &lt;td height="19" valign="top" width="35%"&gt;&lt;span style="color: rgb(0, 255, 255);font-size:85%;" &gt;Build Trace Tree&lt;/span&gt;&lt;/td&gt;     &lt;td height="19" width="43%"&gt;&lt;span style="font-size:85%;"&gt;BuildProfileTree("ROOT", EnableViewState)&lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td height="38" width="22%"&gt; &lt;span style="font-size:85%;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;/td&gt;     &lt;td height="38" valign="top" width="35%"&gt;&lt;span style="font-size:85%;"&gt;SaveViewState&lt;/span&gt;&lt;/td&gt;     &lt;td height="38" width="43%"&gt;&lt;span style="font-size:85%;"&gt;SavePageViewState()&lt;br /&gt;    Save state recursively for the page and it's controls&lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td height="57" width="22%"&gt; &lt;span style="font-size:85%;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;/td&gt;     &lt;td height="57" valign="top" width="35%"&gt;&lt;span style="font-size:85%;"&gt;Render&lt;/span&gt;&lt;/td&gt;     &lt;td height="57" width="43%"&gt;&lt;span style="font-size:85%;"&gt;     RenderControl(CreateHtmlTextWriter(Response.Output))&lt;br /&gt;    if Page.Visible&lt;br /&gt;       Render() (recursive)&lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td colspan="3" height="19" width="100%"&gt; &lt;span style="font-size:85%;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td colspan="3" height="19" width="100%"&gt;&lt;span style="font-size:85%;"&gt;Finish Transaction (only when      transactions are enabled for the page)&lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td height="19" width="22%"&gt; &lt;span style="font-size:85%;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;/td&gt;     &lt;td height="19" valign="top" width="35%"&gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;End Transaction&lt;/span&gt;&lt;/td&gt;     &lt;td height="19" width="43%"&gt;&lt;span style="font-size:85%;"&gt;Fire OnAbortTransaction() or OnCommitTransaction()&lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td colspan="3" height="19" width="100%"&gt; &lt;span style="font-size:85%;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td colspan="3" height="19" width="100%"&gt;&lt;span style="font-size:85%;"&gt;End Trace (only when Tracing is      enabled) &lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td height="19" width="22%"&gt; &lt;span style="font-size:85%;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;/td&gt;     &lt;td height="19" valign="top" width="35%"&gt;&lt;span style="color: rgb(0, 255, 255);font-size:85%;" &gt;Trace.EndRequest&lt;/span&gt;&lt;/td&gt;     &lt;td height="19" width="43%"&gt;&lt;span style="font-size:85%;"&gt;if PageOutput&lt;br /&gt;      Trace.Render&lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td colspan="3" height="19" width="100%"&gt; &lt;span style="font-size:85%;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td colspan="3" height="19" width="100%"&gt;&lt;span style="font-size:85%;"&gt;Process Request Cleanup (every      request)&lt;br /&gt;    * Set Request and Response to null&lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td height="19" width="22%"&gt; &lt;span style="font-size:85%;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;/td&gt;     &lt;td height="19" valign="top" width="35%"&gt;&lt;span style="font-size:85%;"&gt;UnloadRecursive&lt;/span&gt;&lt;/td&gt;     &lt;td height="19" width="43%"&gt;&lt;span style="font-size:85%;"&gt;UnloadRecursive()&lt;br /&gt;    Fire OnUnload() (recursive)&lt;br /&gt;    Dispose()&lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040569-111752604559866115?l=thesitecoreexperience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/111752604559866115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040569&amp;postID=111752604559866115' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/111752604559866115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/111752604559866115'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/2005/05/aspnet-1x-page-lifecycle.html' title='ASP,Net 1.x Page Lifecycle'/><author><name>Pau Larsen</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040569.post-111702263859057631</id><published>2005-05-25T14:02:00.001+02:00</published><updated>2010-11-28T21:26:24.367+01:00</updated><title type='text'>Unicode and character sets</title><content type='html'>Here is a really good introduction to the little known world of encoding: &lt;a href="http://www.joelonsoftware.com/articles/Unicode.html"&gt;http://www.joelonsoftware.com/articles/Unicode.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040569-111702263859057631?l=thesitecoreexperience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/111702263859057631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040569&amp;postID=111702263859057631' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/111702263859057631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/111702263859057631'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/2005/05/unicode-and-character-sets.html' title='Unicode and character sets'/><author><name>Pau Larsen</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040569.post-110682035805789093</id><published>2005-01-27T10:47:00.001+01:00</published><updated>2010-11-28T21:26:06.491+01:00</updated><title type='text'>XSLT performance issue using "contains"</title><content type='html'>A weird performance error has occurred in one of our solutions. &lt;br /&gt;&lt;br /&gt;The following line of XSLT takes up to 1 second to execute: &lt;br /&gt;&lt;span style="color: red;"&gt;&lt;em&gt;&amp;lt;xsl:if test="$start/item[contains($templates,concat('!',@template,'!'))] != ''"&amp;gt;&lt;/em&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&lt;em&gt; &lt;br /&gt;&lt;/em&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&lt;em&gt;&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;$templates contains a string like "!rootfolder!folder!document!externalmenulink!"&lt;/li&gt;&lt;li&gt;@template contains a string like "rootfolder"&lt;/li&gt;&lt;li&gt;The number of items under $start is less than 10&lt;/li&gt;&lt;/ul&gt;This should not be a hard task and it is not in most cases. In a for-each loop with changing @template and $start values only some calls are slow. Others execute in less than a millisecond. And the fast ones in some cases have the exact same @template value as the slow ones - and even more items under $start to check. &lt;br /&gt;&lt;br /&gt;One could imagine that this behavior was related to other elements stressing the server. But as the same four calls fails every time the error must be related to them in someway. They must have some common characteristics. I just have not been able to identify those! &lt;br /&gt;&lt;br /&gt;But I did find out that modifying the test attribute to &lt;br /&gt;&lt;span style="color: red;"&gt;&lt;em&gt;&amp;lt;xsl:if test="count($start/item[contains($templates,concat('!',@template,'!'))]) != '0'"&amp;gt;&lt;/em&gt;&lt;/span&gt; &lt;br /&gt;...solved the problem! Every call now executes in less than a millisecond. &lt;br /&gt;&lt;br /&gt;As the functionality is exactly the same I strongly recommend using the later even though the problem does not occur in general when using the other.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040569-110682035805789093?l=thesitecoreexperience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/110682035805789093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040569&amp;postID=110682035805789093' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/110682035805789093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/110682035805789093'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/2005/01/xslt-performance-issue-using-contains.html' title='XSLT performance issue using &quot;contains&quot;'/><author><name>Pau Larsen</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040569.post-110604906670521204</id><published>2005-01-18T12:51:00.001+01:00</published><updated>2010-11-28T21:25:48.846+01:00</updated><title type='text'>Fallback to a Master Language</title><content type='html'>Imagine a scenario where you have two or more content languages on a Sitecore solution. Some of them are regional and one is the global master language f.ex. in English. &lt;br /&gt;&lt;br /&gt;When new documents are created in the master language they must be translated to the local language. But as this workflow process might take time it could be nice to be able to show the master language version on the local site until translation is done. &lt;br /&gt;&lt;br /&gt;To obtain that you need to be able to show content from any language when doing renderings. Using C# based renderings that is a simple task as the Sitecore object model exposes methods for retrieving field data from a specified language. That is not the case in XSLT renderings where the commonly used sc:fld method does not take a language parameter but assumes the current language as set in the State object. &lt;br /&gt;&lt;br /&gt;To expose such a function a new XSLT helper could be created with the following function that has the missing parameter. &lt;br /&gt;&lt;br /&gt;public string fld(string sFieldName, XPathNodeIterator ni, string language) &lt;br /&gt;{ &lt;br /&gt;string itemID = ni.Current.GetAttribute("id",""); &lt;br /&gt;IWebItem currentItem = WebFactory.GetItem(itemID); &lt;br /&gt;return currentItem.GetFieldValue(sFieldName,language); &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;This allows the XSLT designer to start by requesting the local language using the XSLT parameter $lang as input. If it returns empty the master language identifier can the be used instead. &lt;br /&gt;&lt;br /&gt;The master language could also be specified in web.config and the switch could then be implemented directly in the new XSLT helper function without any need for requesting the language parameter from the user. Like this: &lt;br /&gt;&lt;br /&gt;public string fld(string sFieldName, XPathNodeIterator ni) &lt;br /&gt;{ &lt;br /&gt;string itemID = ni.Current.GetAttribute("id",""); &lt;br /&gt;IWebItem currentItem = WebFactory.GetItem(itemID); &lt;br /&gt;string sFieldValue = currentItem.GetFieldValue(sFieldName); &lt;br /&gt;if(sFieldValue==””) &lt;br /&gt;{ &lt;br /&gt;sFieldValue = currentItem.GetFieldValue(sFieldName,Settings.GetSetting("Masterlanguage"); &lt;br /&gt;} &lt;br /&gt;Return sFieldValue; &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;Ideas for further features: The function could be extended for retrieval of sub values and the Masterlanguage setting could be a pipe separated list of prioritized fallback languages. &lt;br /&gt;&lt;br /&gt;/Pau&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040569-110604906670521204?l=thesitecoreexperience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/110604906670521204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040569&amp;postID=110604906670521204' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/110604906670521204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/110604906670521204'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/2005/01/fallback-to-master-language.html' title='Fallback to a Master Language'/><author><name>Pau Larsen</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040569.post-110079265236432116</id><published>2004-11-18T16:41:00.001+01:00</published><updated>2010-11-28T21:25:04.355+01:00</updated><title type='text'>DON'Ts: package name</title><content type='html'>When creating a new package, make sure the name &lt;b&gt;does not&lt;/b&gt; contain illegal Windows characters for file names. The package will end as a file name on your server (actually two - a zip and an xml) and if you have an illegal name you will simply not be able to save it. &lt;br /&gt;&lt;br /&gt;Later edit of name (after adding content) will not work: will change just the file description and not the name of the file.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040569-110079265236432116?l=thesitecoreexperience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thesitecoreexperience.blogspot.com/feeds/110079265236432116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040569&amp;postID=110079265236432116' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/110079265236432116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040569/posts/default/110079265236432116'/><link rel='alternate' type='text/html' href='http://thesitecoreexperience.blogspot.com/2004/11/donts-package-name.html' title='DON&apos;Ts: package name'/><author><name>perisabil</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://1.bp.blogspot.com/-h2_4dLbF4YU/Tx7Wx8VJWfI/AAAAAAAAB5c/w9Ss0t_JRRI/s1600/image.jpg'/></author><thr:total>0</thr:total></entry></feed>
