<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>.NET and Stuff</title><link>http://www.dotnetmafia.com/blogs/kevin/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/netAndStuff" type="application/rss+xml" /><item><title>Sitecore 6 - Insert From Template in Page Editor</title><link>http://feedproxy.google.com/~r/netAndStuff/~3/AXGvjP741Ew/sitecore-6-insert-from-template-in-page-editor.aspx</link><pubDate>Fri, 13 Feb 2009 14:32:00 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:840</guid><dc:creator>Kevin</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://www.dotnetmafia.com/blogs/kevin/rsscomments.aspx?PostID=840</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/kevin/archive/2009/02/13/sitecore-6-insert-from-template-in-page-editor.aspx#comments</comments><description>&lt;p&gt;
I&amp;#39;ve just started working with the new Sitecore 6 Page Editor.  Yesterday, I noticed something that really bothered me - a content editor user (one who I had placed in the Sitecore Client Authoring role) seemed to have access to the full &amp;quot;Insert From Template&amp;quot; functionality.  As I had been very careful to only assign templates where it made sense for certain templates to exist, I was a bit upset that this loophole was available to my content editor.  See screenshot below.
&lt;/p&gt;

&lt;blockquote&gt;
&lt;img src="http://www.killeverything.com/zak/InsertFromTemplateRibbon.jpg" alt="" /&gt;&lt;/blockquote&gt;

&lt;p&gt;
In previous versions of Sitecore, I believe the &amp;quot;Insert From Template&amp;quot; functionality was limited to Admin users?  Anyway, I needed to remove this option so my content editor wouldn&amp;#39;t accidentally add a nonsensical content item in the wrong place.  A few searches of the SDN forums later, I found &lt;a href="http://sdn.sitecore.net/SDN5/Forum/ShowPost.aspx?PostID=14127"&gt;this post&lt;/a&gt; with a great response from Ivan Sharamok.  The first suggestion was to change the roles the user is in.  In this case, I really need this user to be in the Sitecore Client Authoring role.  That leaves me with the second option - editing the security for that particular link in the ribbon.
&lt;/p&gt;
&lt;p&gt;
Here&amp;#39;s a screenshot of where that is done:
&lt;blockquote&gt;
&lt;img src="http://www.killeverything.com/zak/SecurityEditor_InsertFromTemplate.jpg" alt="" /&gt;
&lt;/blockquote&gt;
Note, this is done in the Core database, not in Master.
&lt;/p&gt;
&lt;p&gt;
I&amp;#39;m still learning a lot about Sitecore 6, and I&amp;#39;m particularly curious why the checkboxes appear strangely stacked in the security editor for that item.  But regardless, this did what I needed - it removed the Insert From Template option from the Page Editor for this user.  He is now properly limited to adding only those templates which I have allowed.
&lt;/p&gt;
&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=840" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/netAndStuff/~4/AXGvjP741Ew" height="1" width="1"/&gt;</description><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/Sitecore/default.aspx">Sitecore</category><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/Sitecore+6/default.aspx">Sitecore 6</category><feedburner:origLink>http://www.dotnetmafia.com/blogs/kevin/archive/2009/02/13/sitecore-6-insert-from-template-in-page-editor.aspx</feedburner:origLink></item><item><title>Sitecore 6</title><link>http://feedproxy.google.com/~r/netAndStuff/~3/MlkPci-gYek/sitecore-6.aspx</link><pubDate>Tue, 01 Jul 2008 07:42:00 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:624</guid><dc:creator>Kevin</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://www.dotnetmafia.com/blogs/kevin/rsscomments.aspx?PostID=624</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/kevin/archive/2008/07/01/sitecore-6.aspx#comments</comments><description>&lt;p&gt;Alright, it&amp;#39;s out.&amp;nbsp; I&amp;#39;ve downloaded it, but not installed yet.&amp;nbsp; I&amp;#39;ve only just begun reading about the changes and whoah! - way more than I expected!&lt;/p&gt;
&lt;p&gt;No more masters?&amp;nbsp; Three kinds of templates?&amp;nbsp; Field types renamed?&amp;nbsp; My head is spinning.&amp;nbsp; I can&amp;#39;t wait to play with this stuff and I&amp;#39;ll be sure to share my experiences here on the blog.&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=624" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/netAndStuff/~4/MlkPci-gYek" height="1" width="1"/&gt;</description><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/Sitecore/default.aspx">Sitecore</category><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/Sitecore+6/default.aspx">Sitecore 6</category><feedburner:origLink>http://www.dotnetmafia.com/blogs/kevin/archive/2008/07/01/sitecore-6.aspx</feedburner:origLink></item><item><title>Detect Preview and Preview Date in Sitecore</title><link>http://feedproxy.google.com/~r/netAndStuff/~3/AEfquvweVOk/detect-preview-and-preview-date-in-sitecore.aspx</link><pubDate>Wed, 26 Mar 2008 20:35:00 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:549</guid><dc:creator>Kevin</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://www.dotnetmafia.com/blogs/kevin/rsscomments.aspx?PostID=549</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/kevin/archive/2008/03/26/detect-preview-and-preview-date-in-sitecore.aspx#comments</comments><description>&lt;p&gt;We have a piece of content on this site we&amp;#39;re working on that comes from an outside system instead of Sitecore.&amp;nbsp; The client has requested that when they are previewing the site, this particular piece of content also be shown as a preview.&amp;nbsp; Luckily, the outside system allows us to request the content by date.&amp;nbsp; But I was unsure of how to find out if the site was in preview mode or if it was, what date was being previewed.&lt;/p&gt;
&lt;p&gt;Unsure no more!&amp;nbsp; Jens on the SDN foum came through with this extremely simple solution...&amp;nbsp; Sitecore.Configuration.State.Previewing (boolean) and Sitecore.Configuration.State.PreviewDate (DateTime).&amp;nbsp; They do exactly what you&amp;#39;d expect.&lt;/p&gt;
&lt;p&gt;No idea how I would have ever found those if it weren&amp;#39;t for the SDN forum, though.&amp;nbsp; Thanks, Jens!&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=549" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/netAndStuff/~4/AEfquvweVOk" height="1" width="1"/&gt;</description><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/Sitecore/default.aspx">Sitecore</category><feedburner:origLink>http://www.dotnetmafia.com/blogs/kevin/archive/2008/03/26/detect-preview-and-preview-date-in-sitecore.aspx</feedburner:origLink></item><item><title>Using WebService Data With Silverlight</title><link>http://feedproxy.google.com/~r/netAndStuff/~3/d2sD4y7zaPQ/using-webservice-data-with-silverlight.aspx</link><pubDate>Mon, 24 Mar 2008 04:58:00 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:541</guid><dc:creator>Kevin</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://www.dotnetmafia.com/blogs/kevin/rsscomments.aspx?PostID=541</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/kevin/archive/2008/03/23/using-webservice-data-with-silverlight.aspx#comments</comments><description>&lt;p&gt;Now, I want to do something a bit more dynamic.&amp;nbsp; How about we call a web service, get some dynamic data back, and render something based on that data?&amp;nbsp; In this post, I will build a simple example in order to clearly illustrate the concepts.&amp;nbsp; But at the end, I will post an example of something a bit more useful to show what can be done!&lt;/p&gt;
&lt;p&gt;First off, let&amp;#39;s define a simple web service.&amp;nbsp; I used VS2008&amp;#39;s New Item wizard and selected &amp;quot;Web Service&amp;quot; from the dialog.&amp;nbsp; Then, I replaced HelloWorld() with my own GetData() method.&amp;nbsp; Here&amp;#39;s what the code behind for MyService.asmx looks like:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;[&lt;span style="COLOR:#2b91af;"&gt;WebService&lt;/span&gt;(Namespace = &lt;span style="COLOR:#a31515;"&gt;&amp;quot;http://tempuri.org/&amp;quot;&lt;/span&gt;)]&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;[&lt;span style="COLOR:#2b91af;"&gt;WebServiceBinding&lt;/span&gt;(ConformsTo = &lt;span style="COLOR:#2b91af;"&gt;WsiProfiles&lt;/span&gt;.BasicProfile1_1)]&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;[&lt;span style="COLOR:#2b91af;"&gt;ToolboxItem&lt;/span&gt;(&lt;span style="COLOR:blue;"&gt;false&lt;/span&gt;)]&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:green;"&gt;// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;[System.Web.Script.Services.&lt;span style="COLOR:#2b91af;"&gt;ScriptService&lt;/span&gt;]&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;class&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;MyService&lt;/span&gt; : System.Web.Services.&lt;span style="COLOR:#2b91af;"&gt;WebService&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;{&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="COLOR:#2b91af;"&gt;WebMethod&lt;/span&gt;]&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="COLOR:#2b91af;"&gt;ScriptMethod&lt;/span&gt;]&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;string&lt;/span&gt;[] GetData()&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;string&lt;/span&gt;[] data = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;[] { &lt;span style="COLOR:#a31515;"&gt;&amp;quot;first data&amp;quot;&lt;/span&gt;, &lt;span style="COLOR:#a31515;"&gt;&amp;quot;second data&amp;quot;&lt;/span&gt;, &lt;span style="COLOR:#a31515;"&gt;&amp;quot;third data&amp;quot;&lt;/span&gt; };&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;return&lt;/span&gt; data;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Note I also have uncommented the ScriptService attribute on my class and added a ScriptMethod attribute to my method.&amp;nbsp; Calling web services from Javascript is a whole lot easier using ASP.NET AJAX.&amp;nbsp; You&amp;#39;ll need to have the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=ca9d90fa-e8c9-42e3-aa19-08e2c027f5d6&amp;amp;displaylang=en" target="_blank"&gt;ASP.NET AJAX 1.0 Extensions&lt;/a&gt; installed for this to work, but it&amp;#39;s worth it.&amp;nbsp; Oh, I&amp;#39;m also using the new array initialization syntax from C# 3.0 in case you&amp;#39;ve never seen it before.&amp;nbsp; A real world application would probably query a database or something.&lt;/p&gt;
&lt;p&gt;In order to call the web service from Javascript, ASP.NET AJAX requires us to place a ScriptManager on the page with a ServiceReference pointing to the .asmx.&amp;nbsp; Here&amp;#39;s what mine looks like:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;asp&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;:&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;ScriptManager&lt;/span&gt; &lt;span style="COLOR:red;"&gt;ID&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;ScriptManager1&amp;quot;&lt;/span&gt; &lt;span style="COLOR:red;"&gt;runat&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;server&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Services&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;asp&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;:&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;ServiceReference&lt;/span&gt; &lt;span style="COLOR:red;"&gt;Path&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;~/MyService.asmx&amp;quot;&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Services&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;asp&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;:&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;ScriptManager&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Thankfully, VS2008&amp;#39;s web application project template already set up my web.config to use ASP.NET AJAX.&amp;nbsp; If you are not using VS2008, you may need to follow the directions at &lt;a href="http://asp.net/AJAX/Documentation/Live/ConfiguringASPNETAJAX.aspx" target="_blank"&gt;http://asp.net/AJAX/Documentation/Live/ConfiguringASPNETAJAX.aspx&lt;/a&gt; to ensure your web.config is set up properly.&lt;/p&gt;
&lt;p&gt;At this point, I can call my web service from Javascript and react to whatever data comes back.&amp;nbsp; The question is - what should it do?&amp;nbsp; For this post, I think I&amp;#39;ll just put up a Silverlight TextBlock and rotate through the web service data when the user clicks on the text.&amp;nbsp; Here&amp;#39;s the XAML:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Canvas&lt;/span&gt;&lt;span style="COLOR:red;"&gt; xmlns&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;http://schemas.microsoft.com/client/2007&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; xmlns&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;:&lt;/span&gt;&lt;span style="COLOR:red;"&gt;x&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="COLOR:red;"&gt; x&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;:&lt;/span&gt;&lt;span style="COLOR:red;"&gt;Name&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;MyTextBlock&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; FontSize&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;10&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; FontFamily&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;Arial&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Canvas.Top&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;10&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Canvas.Left&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;10&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Loaded&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;MyTextBlockLoaded&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; MouseLeftButtonDown&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;MyTextBlockClick&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Canvas&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;First, I will retrieve the data from the web service once the text block has loaded by using the Loaded event.&amp;nbsp; Let me show you the Javascript and then I will explain it...&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; index;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; data;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;function&lt;/span&gt; MyTextBlockLoaded( sender, args )&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;{&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MyService.GetData( GetDataSuccess, GetDataFailed );&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;function&lt;/span&gt; GetDataSuccess( result )&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;{&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = result;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; index = 0;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UpdateTextBlock();&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;function&lt;/span&gt; GetDataFailed()&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;{&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert( &lt;span style="COLOR:#a31515;"&gt;&amp;#39;Call to MyService.GetData() failed!&amp;#39;&lt;/span&gt; );&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;function&lt;/span&gt; UpdateTextBlock()&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;{&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; textblock = document.getElementById( &lt;span style="COLOR:#a31515;"&gt;&amp;#39;&amp;lt;%= Silverlight1.ControlId %&amp;gt;&amp;#39;&lt;/span&gt; ).content.findName( &lt;span style="COLOR:#a31515;"&gt;&amp;#39;MyTextBlock&amp;#39;&lt;/span&gt; );&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; textblock.Text = data[index];&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;First I declare a variable to hold the current index into the data array and a variable to hold the data itself.&amp;nbsp; The implementation of the MyTextBlockLoaded() event handler is calling the web service using the proxy built by ASP.NET AJAX.&amp;nbsp; Note that because this is an asynchronous call, you have to pass in event handlers for both success and failure - that is where my GetDataSuccess() and GetDataFailed() functions come from.&amp;nbsp; On success, I store the data, set the initial index to 0, and call the function to set the text in the TextBlock.&amp;nbsp; Note I&amp;#39;m using document.getElementById() to find the Silverlight viewer.&amp;nbsp; I&amp;#39;m using some inline server-side script to get the Id of the Silverlight viewer from my control (covered in a previous post) to pass to getElementById().&amp;nbsp; The viewer object has a content property upon which I can call findName() (also covered in a previous blog post) to get a reference to the TextBlock.&lt;/p&gt;
&lt;p&gt;The last thing to do is handle the MouseLeftButtonDown event on the TextBlock so that the text changes when the user clicks on it.&amp;nbsp; Here&amp;#39;s that Javascript function:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;function&lt;/span&gt; MyTextBlockClick( sender, args )&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;{&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;if&lt;/span&gt; ( index &amp;gt;= data.length-1 )&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; index = 0;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;else&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; index = index + 1;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UpdateTextBlock();&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Here, I increment the index and when the index reaches the end of the list, I reset it to 0 to go back to the beginning.&amp;nbsp; Then I call UpdateTextBlock() to display the new text.&lt;/p&gt;
&lt;p&gt;You can see this example in action at &lt;a href="http://www.killeverything.com/zak/Silverlight1/WebService1.aspx" target="_blank"&gt;http://www.killeverything.com/zak/Silverlight1/WebService1.aspx&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;At the beginning of this post, I promised to show a more useful example.&amp;nbsp; How about a Silverlight app that displays headlines from an RSS feed and lets you click through to the articles?&amp;nbsp; If you&amp;#39;ve been reading my Silverlight posts, there shouldn&amp;#39;t be anything too new going on here.&amp;nbsp; I have just combined several of the concepts I&amp;#39;ve been learning and blogging about into a single Silverlight app.&amp;nbsp; You can see it running here: &lt;a href="http://www.killeverything.com/zak/Silverlight1/WebService2.aspx" target="_blank"&gt;http://www.killeverything.com/zak/Silverlight1/WebService2.aspx&lt;/a&gt; and the code for both the simple example and the RSS headline viewer are attached to this post.&amp;nbsp; If you&amp;#39;re a .NET head, you might want to look at the source for the web service where I used LINQ to XML to make parsing the RSS feed easy as cake.&amp;nbsp; Oh, and I want to point out the clipping I had to add to the TextBlock.&amp;nbsp; Support for MaxHeight and MaxWidth may be coming in Silverlight 2.0, but clipping is how it&amp;#39;s done for now...&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=541" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/netAndStuff/~4/d2sD4y7zaPQ" height="1" width="1"/&gt;</description><enclosure url="http://www.dotnetmafia.com/blogs/kevin/attachment/541.ashx" length="32579" type="application/x-zip-compressed" /><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/Web+Services/default.aspx">Web Services</category><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/LINQ+to+XML/default.aspx">LINQ to XML</category><feedburner:origLink>http://www.dotnetmafia.com/blogs/kevin/archive/2008/03/23/using-webservice-data-with-silverlight.aspx</feedburner:origLink></item><item><title>My Silverlight Control</title><link>http://feedproxy.google.com/~r/netAndStuff/~3/Nnhuem2y3fw/my-silverlight-control.aspx</link><pubDate>Sun, 23 Mar 2008 17:00:00 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:540</guid><dc:creator>Kevin</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://www.dotnetmafia.com/blogs/kevin/rsscomments.aspx?PostID=540</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/kevin/archive/2008/03/23/my-silverlight-control.aspx#comments</comments><description>&lt;p&gt;Putting a Silverlight viewer on a web page is a lot of work.&amp;nbsp; You have to import the Silverlight.js file (and make sure it&amp;#39;s deployed to the web server), create a div to contain the viewer, and write some Javascript code to call Silverlight.createObject().&amp;nbsp; To me, this is just begging for an ASP.NET control - so I whipped up one of my own.&lt;/p&gt;
&lt;p&gt;So what do I want my control to do for me?&amp;nbsp; Let&amp;#39;s start at the top with the Silverlight.js file.&amp;nbsp; I want this to be an embedded resource so that I don&amp;#39;t always have to remember to copy it in to a new project.&amp;nbsp; If you&amp;#39;re not familiar with this technique, it&amp;#39;s been around since .NET 2.0 - keep up! :)&amp;nbsp; You just throw the Silverlight.js file into your project and set it&amp;#39;s build action to &amp;quot;Embedded Resource&amp;quot;.&amp;nbsp; Here&amp;#39;s a screenshot:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.killeverything.com/zak/blogimages/MySilverlightControl_A8A6/image.png"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="225" alt="image" src="http://www.killeverything.com/zak/blogimages/MySilverlightControl_A8A6/image_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Add it to your project&amp;#39;s AssemblyInfo.cs like this:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:green;"&gt;// Embeded Resources&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;[&lt;span style="COLOR:blue;"&gt;assembly&lt;/span&gt;: System.Web.UI.&lt;span style="COLOR:#2b91af;"&gt;WebResource&lt;/span&gt;(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;knw.Silverlight.Silverlight.js&amp;quot;&lt;/span&gt;, &lt;span style="COLOR:#a31515;"&gt;&amp;quot;application/x-javascript&amp;quot;&lt;/span&gt;)]&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Then my control&amp;#39;s code tells the page where to find it like this:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;Page.ClientScript.RegisterClientScriptInclude(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;Silverlight.js&amp;quot;&lt;/span&gt;, Page.ClientScript.GetWebResourceUrl(&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;.GetType(), &lt;span style="COLOR:#a31515;"&gt;&amp;quot;knw.Silverlight.Silverlight.js&amp;quot;&lt;/span&gt;));&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://www.codeproject.com/KB/aspnet/MyWebResourceProj.aspx" target="_blank"&gt;Here&lt;/a&gt; is a link to an article on Code Project that explains the technique in a bit more detail.&lt;/p&gt;
&lt;p&gt;Next, I want my control to render the container div for the Silverlight viewer.&amp;nbsp; This is pretty straightforward - I just override Render() and use the HtmlTextWriter that&amp;#39;s passed in.&amp;nbsp; Here&amp;#39;s what it looks like:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;protected&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;override&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;void&lt;/span&gt; Render(&lt;span style="COLOR:#2b91af;"&gt;HtmlTextWriter&lt;/span&gt; writer)&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;{&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;base&lt;/span&gt;.Render(writer);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writer.AddAttribute(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;, ID + &lt;span style="COLOR:#a31515;"&gt;&amp;quot;Div&amp;quot;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writer.RenderBeginTag(&lt;span style="COLOR:#2b91af;"&gt;HtmlTextWriterTag&lt;/span&gt;.Div);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writer.RenderEndTag();&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Note I&amp;#39;m just concatenating &amp;quot;Div&amp;quot; onto the existing ID of my control when building the div&amp;#39;s id, but that should make it unique.&lt;/p&gt;
&lt;p&gt;The only thing that&amp;#39;s left is the call to Silverlight.createObject().&amp;nbsp; There are a few variables in this call that I thought could be exposed as properties of my control.&amp;nbsp; Specifically, the path to the Xaml document, the height and width of the viewer, and the background color.&amp;nbsp; I&amp;#39;m using C# 3.0, so I took advantage of another language feature - automatic properties.&amp;nbsp; Here&amp;#39;s what that code looks like:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;string&lt;/span&gt; Xaml { &lt;span style="COLOR:blue;"&gt;get&lt;/span&gt;; &lt;span style="COLOR:blue;"&gt;set&lt;/span&gt;; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;int&lt;/span&gt; Height { &lt;span style="COLOR:blue;"&gt;get&lt;/span&gt;; &lt;span style="COLOR:blue;"&gt;set&lt;/span&gt;; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;int&lt;/span&gt; Width { &lt;span style="COLOR:blue;"&gt;get&lt;/span&gt;; &lt;span style="COLOR:blue;"&gt;set&lt;/span&gt;; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;Color&lt;/span&gt; BackgroundColor { &lt;span style="COLOR:blue;"&gt;get&lt;/span&gt;; &lt;span style="COLOR:blue;"&gt;set&lt;/span&gt;; }&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Lastly, I need to build the actual javascript to create the Silverlight viewer and register it with the page to run as a startup script.&amp;nbsp; Like this:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;string&lt;/span&gt; createObjectScript = &lt;span style="COLOR:blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;&amp;lt;script&amp;gt;Silverlight.createObject( \&amp;quot;{0}\&amp;quot;, document.getElementById( \&amp;quot;{1}Div\&amp;quot; ), \&amp;quot;{2}Ctrl\&amp;quot;, {{ width:&amp;#39;{3}&amp;#39;, height:&amp;#39;{4}&amp;#39;, inplaceInstallPrompt:false,background:&amp;#39;{5}&amp;#39;, isWindowless:&amp;#39;false&amp;#39;, framerate:&amp;#39;24&amp;#39;, version:&amp;#39;1.0&amp;#39; }},{{ onError:null,onLoad:null }},null );&amp;lt;/script&amp;gt;&amp;quot;&lt;/span&gt;, Xaml, ID, ID, Width, Height, &lt;span style="COLOR:#2b91af;"&gt;ColorTranslator&lt;/span&gt;.ToHtml(BackgroundColor) );&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;Page.ClientScript.RegisterStartupScript( &lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;.GetType(), ID + &lt;span style="COLOR:#a31515;"&gt;&amp;quot;Create&amp;quot;&lt;/span&gt;, createObjectScript );&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;At first glance, that code looks pretty confusing.&amp;nbsp; All it&amp;#39;s actually doing is using string.Format() to build the call to Silverlight.createObject().&amp;nbsp; {0} is the path to the Xaml, {1} is the ID of the control + &amp;quot;Div&amp;quot; (the id of container div), {2} is the ID of the control + &amp;quot;Ctrl&amp;quot; (a unique id for the viewer itself), {3} is the width, {4} is the height, and {5} is the background color (converted from a System.Drawing.Color using the System.Drawing.ColorTranslator class).&amp;nbsp; Oh yeah, and you have to escape curly braces when using string.Format() by doubling them.&lt;/p&gt;
&lt;p&gt;Ok, that was a lot of work - what has it bought me?&amp;nbsp; Well, now when I want to use Silverlight on an .aspx page, all I have to do is add a reference to my DLL, register it at the top of the .aspx page, and put the control on the .aspx page somewhere.&amp;nbsp; Which looks like this:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;knw&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;:&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Silverlight&lt;/span&gt; &lt;span style="COLOR:red;"&gt;id&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;Silverlight1&amp;quot;&lt;/span&gt; &lt;span style="COLOR:red;"&gt;runat&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="COLOR:red;"&gt;Xaml&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;MySilverlight.xaml&amp;quot;&lt;/span&gt; &lt;span style="COLOR:red;"&gt;BackgroundColor&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;Gray&amp;quot;&lt;/span&gt; &lt;span style="COLOR:red;"&gt;Height&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;200&amp;quot;&lt;/span&gt; &lt;span style="COLOR:red;"&gt;Width&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;200&amp;quot;&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;I will attach the code for both the control and an example of using it to this post.&amp;nbsp; I&amp;#39;ll be using this control in future Silverlight posts here - plus, I do intend to extend it to do more in the future (as I learn more about Silverlight).&amp;nbsp; So, I&amp;#39;ll try to post updates here from time to time.&amp;nbsp; I hope it&amp;#39;s useful to someone! :)&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=540" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/netAndStuff/~4/Nnhuem2y3fw" height="1" width="1"/&gt;</description><enclosure url="http://www.dotnetmafia.com/blogs/kevin/attachment/540.ashx" length="13373" type="application/x-zip-compressed" /><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/ASP.NET/default.aspx">ASP.NET</category><feedburner:origLink>http://www.dotnetmafia.com/blogs/kevin/archive/2008/03/23/my-silverlight-control.aspx</feedburner:origLink></item><item><title>Silverlight - Simple Animation</title><link>http://feedproxy.google.com/~r/netAndStuff/~3/EBMFpx76mq0/silverlight-simple-animation.aspx</link><pubDate>Sun, 23 Mar 2008 07:12:00 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:539</guid><dc:creator>Kevin</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://www.dotnetmafia.com/blogs/kevin/rsscomments.aspx?PostID=539</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/kevin/archive/2008/03/23/silverlight-simple-animation.aspx#comments</comments><description>&lt;p&gt;Seems I&amp;#39;ve fallen way behind on my Silverlight blogging as of late.&amp;nbsp; A few weeks ago, I managed to get some simple animation working.&amp;nbsp; So, I guess I should blog about it.&lt;/p&gt;
&lt;p&gt;Animation is done by transforming your object.&amp;nbsp; Each graphic element has a RenderTransform property to which you can assign a Transform object to modify your element in some way.&amp;nbsp; The different types of Transform objects include RotateTransform, SkewTransform, ScaleTransform, and TranslateTransform.&amp;nbsp; Let&amp;#39;s look at an example.&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Ellipse&lt;/span&gt;&lt;span style="COLOR:red;"&gt; MouseLeftButtonDown&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;EllipseClick&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Height&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;50&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Width&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;100&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Canvas.Top&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;50&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Canvas.Left&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;50&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Fill&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;Black&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Ellipse.RenderTransform&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;RotateTransform&lt;/span&gt;&lt;span style="COLOR:red;"&gt; x&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;:&lt;/span&gt;&lt;span style="COLOR:red;"&gt;Name&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;EllipseXForm&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Angle&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;90&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Ellipse.RenderTransform&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Ellipse&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;This example is pretty boring - it just renders a 50 pixel high and 100 pixel wide ellipse, rotated 90 degrees (so that it instead appears 100 pixels high and 50 pixels wide).&amp;nbsp; However, it illustrates the effect that a RotateTransform will have on an object.&amp;nbsp; Also note that I have named the transform (the x:Name attribute).&amp;nbsp; The purpose of that will soon become apparent.&lt;/p&gt;
&lt;p&gt;Animations are defined within objects called Storyboards.&amp;nbsp; Basically, a Storyboard defines a timeline of changes that should occur to properties of objects.&amp;nbsp; For my example, I want to change the Angle property of the RotateTransform object over time (so that the Ellipse rotates slowly as we watch).&amp;nbsp; Here is the Storyboard I have defined:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Canvas.Resources&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Storyboard&lt;/span&gt;&lt;span style="COLOR:red;"&gt; x&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;:&lt;/span&gt;&lt;span style="COLOR:red;"&gt;Name&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;EllipseStoryboard&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;DoubleAnimation&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Storyboard.TargetName&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;EllipseXForm&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Storyboard.TargetProperty&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;Angle&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; To&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Duration&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;00:00:05&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Storyboard&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Canvas.Resources&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;For this example, I have used a DoubleAnimation.&amp;nbsp; This is because the property I want to change (&amp;quot;Angle&amp;quot;) is of type double.&amp;nbsp; There are many other animation objects available such as DecimalAnimation, Int32Animation, and ColorAnimation.&amp;nbsp; The Storyboard.Targetname attribute tells the animation which object it is changing (here&amp;#39;s where I use the name I gave my transform earlier) and Storyboard.TargetProperty indicates what property will be changed.&amp;nbsp; The To attribute is the value the animation should end with and the Duration should be self-explanatory.&amp;nbsp; Note again, I have named my Storyboard so that I can reference it later.&amp;nbsp; Oh yeah, and the Storyboard is a resource, so it&amp;#39;s defined inside the &amp;lt;Canvas.Resources /&amp;gt; element.&lt;/p&gt;
&lt;p&gt;I&amp;#39;m going to need something to trigger the animation to begin.&amp;nbsp; I&amp;#39;ve chosen to do it using a mouse click on the ellipse.&amp;nbsp; So, I will need to add a MouseLeftButtonDown handler to the Ellipse.&amp;nbsp; Now it looks like this:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Ellipse&lt;/span&gt;&lt;span style="COLOR:red;"&gt; MouseLeftButtonDown&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;EllipseClick&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Height&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;50&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Width&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;100&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Canvas.Top&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;50&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Canvas.Left&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;50&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Fill&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;Black&amp;quot;&amp;gt;...&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;And I need an EllipseClick() function defined in Javascript, so here&amp;#39;s what I came up with:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;script&lt;/span&gt; &lt;span style="COLOR:red;"&gt;type&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;function&lt;/span&gt; EllipseClick( sender, args )&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sender.findName(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;EllipseStoryboard&amp;quot;&lt;/span&gt;).Begin();&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;script&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;I placed this directly in my .aspx file for this example.&amp;nbsp; I don&amp;#39;t think I&amp;#39;ve blogged about findName() before, but Silverlight elements define this method and it allows you to get a reference to any other Silverlight element by name.&amp;nbsp; Here, I am using it to get the &amp;quot;EllipseStoryboard&amp;quot; Storyboard and executing it&amp;#39;s Begin() method.&lt;/p&gt;
&lt;p&gt;You can see this example in action at &lt;a href="http://www.killeverything.com/zak/Silverlight1/EllipseRotate1.aspx" target="_blank"&gt;http://www.killeverything.com/zak/Silverlight1/EllipseRotate1.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It&amp;#39;s not quite what I wanted, though.&amp;nbsp; The rotation is happening around the top left corner of the ellipse instead of the center.&amp;nbsp; Luckily, this was easy to fix - the RotateTransform has CenterX and CenterY properties that allow you to define the point around which the object rotates.&amp;nbsp; Knowing that the ellipse is 100 wide and 50 tall, this is what I changed the transform to look like:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;RotateTransform&lt;/span&gt;&lt;span style="COLOR:red;"&gt; x&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;:&lt;/span&gt;&lt;span style="COLOR:red;"&gt;Name&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;EllipseXForm&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Angle&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;90&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; CenterX&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;50&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; CenterY&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;25&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;You can see the finished example at &lt;a href="http://www.killeverything.com/zak/Silverlight1/EllipseRotate2.aspx" target="_blank"&gt;http://www.killeverything.com/zak/Silverlight1/EllipseRotate2.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve also attached a ZIP with the files needed for these examples in case you want to play with them yourself.&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=539" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/netAndStuff/~4/EBMFpx76mq0" height="1" width="1"/&gt;</description><enclosure url="http://www.dotnetmafia.com/blogs/kevin/attachment/539.ashx" length="5654" type="application/x-zip-compressed" /><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/XAML/default.aspx">XAML</category><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/Silverlight/default.aspx">Silverlight</category><feedburner:origLink>http://www.dotnetmafia.com/blogs/kevin/archive/2008/03/23/silverlight-simple-animation.aspx</feedburner:origLink></item><item><title>Sitecore Crestone</title><link>http://feedproxy.google.com/~r/netAndStuff/~3/IPiBzJK74ho/sitecore-crestone.aspx</link><pubDate>Sat, 08 Mar 2008 18:02:15 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:531</guid><dc:creator>Kevin</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://www.dotnetmafia.com/blogs/kevin/rsscomments.aspx?PostID=531</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/kevin/archive/2008/03/08/sitecore-crestone.aspx#comments</comments><description>&lt;p&gt;It seems several people still haven&amp;#39;t heard about Crestone, so thought I&amp;#39;d make a quick mention of it here...&amp;nbsp; The new Sitecore release (due out mid-year, hopefully) is code-named Crestone.&amp;nbsp; The beta program is just spinning up, but a few details have leaked out already.&amp;nbsp; 64-bit support is one of the big features.&amp;nbsp; Also, in-line editing in web preview mode (I&amp;#39;ve seen this in other CMS&amp;#39;s before and it&amp;#39;s a huge selling point with customers), a new page layout tool, and a whole new security engine.&lt;/p&gt; &lt;p&gt;Yes, I&amp;#39;m going to apply for the beta program.&amp;nbsp; If I&amp;#39;m accepted, I won&amp;#39;t be able to blog about it for awhile though, unfortunately.&amp;nbsp; As soon as I have more information to share though, I will!&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=531" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/netAndStuff/~4/IPiBzJK74ho" height="1" width="1"/&gt;</description><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/Sitecore/default.aspx">Sitecore</category><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/Crestone/default.aspx">Crestone</category><feedburner:origLink>http://www.dotnetmafia.com/blogs/kevin/archive/2008/03/08/sitecore-crestone.aspx</feedburner:origLink></item><item><title>Sitecore Custom Field Type - Filtered MultiList</title><link>http://feedproxy.google.com/~r/netAndStuff/~3/VXLhPZNiES4/sitecore-custom-field-type-filtered-multilist.aspx</link><pubDate>Fri, 29 Feb 2008 01:30:00 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:498</guid><dc:creator>Kevin</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://www.dotnetmafia.com/blogs/kevin/rsscomments.aspx?PostID=498</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/kevin/archive/2008/02/28/sitecore-custom-field-type-filtered-multilist.aspx#comments</comments><description>&lt;p&gt;For&amp;nbsp;a project I&amp;#39;m currently working on, the client wanted to have a multilist field on one of their templates but have the list of items displayed on the &amp;quot;All&amp;quot; side filtered according to some complex rules.&amp;nbsp; Normally, you can filter that list by assigning an XPath query to the Source property of the field.&amp;nbsp; In this case though, the filtering rules were going to be very difficult to implement with XPath and I felt some .NET code was in order.&lt;/p&gt;
&lt;p&gt;The solution I chose was to build a custom field type, derive it from the existing MultiList field type, and place my filtering therein.&amp;nbsp; Turns out all I had to do was override the GetItems method on Sitecore.Shell.Applications.ContentEditor.MultilistEx, call the base implementation to get the initial list of items, then iterate through them - discarding the ones I don&amp;#39;t want before returning the list.&lt;/p&gt;
&lt;p&gt;Here is a full example using the workflow state code I posted a couple of weeks ago:&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;div style="background:white none repeat scroll 0% 0%;font-size:10pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:black;font-family:Courier New;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span&gt;FilteredMultiList&lt;/span&gt; : Sitecore.Shell.Applications.ContentEditor.&lt;span&gt;MultilistEx&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;{&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;protected&lt;/span&gt; &lt;span style="color:blue;"&gt;override&lt;/span&gt; &lt;span&gt;Item&lt;/span&gt;[] GetItems(&lt;span&gt;Item&lt;/span&gt; current)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;List&lt;/span&gt;&amp;lt;&lt;span&gt;Item&lt;/span&gt;&amp;gt; filteredItems = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span&gt;List&lt;/span&gt;&amp;lt;&lt;span&gt;Item&lt;/span&gt;&amp;gt;();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// Call the base class to get the original list.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;Item&lt;/span&gt;[] items = &lt;span style="color:blue;"&gt;base&lt;/span&gt;.GetItems(current);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// Loop through the items and filter them.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;foreach&lt;/span&gt; (&lt;span&gt;Item&lt;/span&gt; item &lt;span style="color:blue;"&gt;in&lt;/span&gt; items)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// Get the master database.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;Database&lt;/span&gt; masterDatabase = &lt;span&gt;Factory&lt;/span&gt;.GetDatabase(&lt;span&gt;&amp;quot;master&amp;quot;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// We want to exclude items that are not in the final workflow state...&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;IWorkflow&lt;/span&gt; workflow = masterDatabase.WorkflowProvider.GetWorkflow(item);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;WorkflowState&lt;/span&gt; state = workflow.GetState(item);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (state == &lt;span style="color:blue;"&gt;null&lt;/span&gt;) &lt;span style="color:blue;"&gt;continue&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (!state.FinalState) &lt;span style="color:blue;"&gt;continue&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// If we make it this far, add the item to the filtered list.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; filteredItems.Add(item);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// Return the filtered list.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt; filteredItems.ToArray();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;If you&amp;#39;ve never done a custom field type before, installation requires two steps...&amp;nbsp; First, edit web.config and search for the &amp;lt;controlSources&amp;gt; section.&amp;nbsp; Add an entry for the assembly and namespace containing your field types.&amp;nbsp; For example:&lt;/p&gt;
&lt;p&gt;&amp;lt;source mode=&amp;quot;on&amp;quot; namespace=&amp;quot;Your.Namespace&amp;quot; assembly=&amp;quot;Your.Assembly&amp;quot; prefix=&amp;quot;Prefix&amp;quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;What this does is associates the prefix &amp;quot;Prefix&amp;quot; (you can use any name you want) with all field types in Your.Namespace inside Your.Assembly.dll.&amp;nbsp; You&amp;#39;ll see in a second how this prefix is used.&lt;/p&gt;
&lt;p&gt;Now, in content editor -&amp;nbsp;expand the&amp;nbsp;System node, right-click on Field Types, select New -&amp;gt; Add From Template.&amp;nbsp; Expand the System folder, Templates folder, and select the &amp;quot;Template field type&amp;quot; template.&amp;nbsp; Name the field type whatever you want it to show up when editing a template in template manager.&lt;/p&gt;
&lt;p&gt;Fill in the Control field using Prefix:Class syntax where Prefix is the prefix used in web.config and Class is the name of your class that implements this field type.&lt;/p&gt;
&lt;p&gt;Now you can go edit a template and add a field using your new field type.&amp;nbsp; Set the source as usual, but&amp;nbsp;when the user edits an item based on your template, the new field will filter the source list using whatever code you placed in the overridden GetItems!&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=498" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/netAndStuff/~4/VXLhPZNiES4" height="1" width="1"/&gt;</description><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/Sitecore/default.aspx">Sitecore</category><feedburner:origLink>http://www.dotnetmafia.com/blogs/kevin/archive/2008/02/28/sitecore-custom-field-type-filtered-multilist.aspx</feedburner:origLink></item><item><title>Silverlight Day 2</title><link>http://feedproxy.google.com/~r/netAndStuff/~3/VDzasUXM8jQ/silverlight-day-2.aspx</link><pubDate>Sat, 23 Feb 2008 02:53:00 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:515</guid><dc:creator>Kevin</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://www.dotnetmafia.com/blogs/kevin/rsscomments.aspx?PostID=515</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/kevin/archive/2008/02/22/silverlight-day-2.aspx#comments</comments><description>&lt;p&gt;Today&amp;#39;s goal is to display an image and react to a mouse click in some way.&amp;nbsp; I actually started by reading the QuickStart that gets installed along with the Silverlight SDK.&amp;nbsp; You can also find it at &lt;a title="http://silverlight.net/quickstarts/silverlight10/default.aspx" href="http://silverlight.net/quickstarts/silverlight10/default.aspx"&gt;http://silverlight.net/quickstarts/silverlight10/default.aspx&lt;/a&gt; if you still don&amp;#39;t have the SDK installed (and why don&amp;#39;t you?&amp;nbsp; Huh?)&lt;/p&gt;
&lt;p&gt;It looks like all I need to display an image is an object set to fill with an ImageBrush.&amp;nbsp; Something like this should work:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Ellipse&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Height&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;100&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Width&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;200&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Canvas.Top&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;10&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Canvas.Left&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;10&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Ellipse.Fill&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;ImageBrush&lt;/span&gt;&lt;span style="COLOR:red;"&gt; ImageSource&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;lolcat_quadcore.jpg&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Ellipse.Fill&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Ellipse&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Bingo, that did the trick.&amp;nbsp; It looks like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.killeverything.com/zak/blogimages/SilverlightDay2_125AC/image.png"&gt;&lt;img height="116" alt="lolcat ellipse" src="http://www.killeverything.com/zak/blogimages/SilverlightDay2_125AC/image_thumb.png" width="216" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Oh wait, I just found the Image object - no brush needed if you do it like this:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Image&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Source&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;lolcat_quadcore.jpg&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Canvas.Top&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;120&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Canvas.Left&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;10&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Height&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;100&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Which looks like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.killeverything.com/zak/blogimages/SilverlightDay2_125AC/image_3.png"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="113" alt="lolcat image" src="http://www.killeverything.com/zak/blogimages/SilverlightDay2_125AC/image_thumb_3.png" width="137" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Note that in the first case, the image was automatically stretched to fit the dimensions of the ellipse and in the second, I only specified a height - so the image was automatically scaled proportionally.&amp;nbsp; Cool!&lt;/p&gt;
&lt;p&gt;Now, processing mouse clicks.&amp;nbsp; This appears to be amazingly easy as well.&amp;nbsp; First, you need to declare the event handler in the XAML mark-up like this:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Image&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Source&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;lolcat_quadcore.jpg&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Canvas.Top&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;120&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Canvas.Left&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;10&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Height&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;100&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; MouseLeftButtonDown&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;ChangeLolcat&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Then you just need a javascript function to handle the event - mine looks like this:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;function&lt;/span&gt; ChangeLolcat( sender, args )&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;{&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;if&lt;/span&gt; ( sender.Source == &lt;span style="COLOR:#a31515;"&gt;&amp;quot;lolcat_quadcore.jpg&amp;quot;&lt;/span&gt; )&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sender.Source = &lt;span style="COLOR:#a31515;"&gt;&amp;quot;lolcat_schroedinger.jpg&amp;quot;&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;else&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sender.Source = &lt;span style="COLOR:#a31515;"&gt;&amp;quot;lolcat_quadcore.jpg&amp;quot;&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;In this case, because the MouseLeftButtonDown event is on the Image object, that&amp;#39;s the object that gets passed in to the javascript function as &amp;quot;sender&amp;quot;.&amp;nbsp; I am simply changing the Source property from how it was defined in the XAML in response to the mouse click.&amp;nbsp; And it works! (sorry I can&amp;#39;t show you - I don&amp;#39;t have a good place to host .NET code at the moment)&amp;nbsp; I think I&amp;#39;m going to like working with Silverlight.&lt;/p&gt;
&lt;p&gt;In case you want to download the code for this project and try it out yourself, I will ZIP it up and attach it to this blog post.&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=515" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/netAndStuff/~4/VDzasUXM8jQ" height="1" width="1"/&gt;</description><enclosure url="http://www.dotnetmafia.com/blogs/kevin/attachment/515.ashx" length="93593" type="application/x-zip-compressed" /><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/XAML/default.aspx">XAML</category><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/lolcats/default.aspx">lolcats</category><feedburner:origLink>http://www.dotnetmafia.com/blogs/kevin/archive/2008/02/22/silverlight-day-2.aspx</feedburner:origLink></item><item><title>First Live Writer Post</title><link>http://feedproxy.google.com/~r/netAndStuff/~3/l-6gQnbGlhg/first-live-writer-post.aspx</link><pubDate>Sat, 23 Feb 2008 02:16:10 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:514</guid><dc:creator>Kevin</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://www.dotnetmafia.com/blogs/kevin/rsscomments.aspx?PostID=514</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/kevin/archive/2008/02/22/first-live-writer-post.aspx#comments</comments><description>&lt;p&gt;Ok, I fell for the hype and decided to try out Live Writer.&amp;nbsp; If this works like I expect, I will be pretty impressed.&amp;nbsp; Let me try some stuff...&lt;/p&gt; &lt;table cellspacing="0" cellpadding="2"&gt;  &lt;tr&gt; &lt;td&gt;table1,1&lt;/td&gt; &lt;td&gt;table2,1&lt;/td&gt; &lt;td&gt;table3,1&lt;/td&gt; &lt;td&gt;table4,1&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;table1,2&lt;/td&gt; &lt;td&gt;table2,2&lt;/td&gt; &lt;td&gt;table3,2&lt;/td&gt; &lt;td&gt;table4,2&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt; &lt;p&gt;Pictures...&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;a href="http://www.killeverything.com/zak/blogimages/FirstLiveWriterPost_11CFE/lolcat_schroedinger.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="128" alt="lolcat_schroedinger" src="http://www.killeverything.com/zak/blogimages/FirstLiveWriterPost_11CFE/lolcat_schroedinger_thumb.jpg" width="129" border="0" /&gt;&lt;/a&gt; &lt;a href="http://www.killeverything.com/zak/blogimages/FirstLiveWriterPost_11CFE/lolcat_quadcore.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="106" alt="lolcat_quadcore" src="http://www.killeverything.com/zak/blogimages/FirstLiveWriterPost_11CFE/lolcat_quadcore_thumb.jpg" width="129" border="0" /&gt;&lt;/a&gt; &lt;a href="http://www.killeverything.com/zak/blogimages/FirstLiveWriterPost_11CFE/lolcat_leeeeeroy.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="125" alt="lolcat_leeeeeroy" src="http://www.killeverything.com/zak/blogimages/FirstLiveWriterPost_11CFE/lolcat_leeeeeroy_thumb.jpg" width="129" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;a href="http://www.killeverything.com/zak/blogimages/FirstLiveWriterPost_11CFE/lolcat_ds.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="97" alt="lolcat_ds" src="http://www.killeverything.com/zak/blogimages/FirstLiveWriterPost_11CFE/lolcat_ds_thumb.jpg" width="129" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.killeverything.com/zak/blogimages/FirstLiveWriterPost_11CFE/lolcat_spam.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="97" alt="lolcat_spam" src="http://www.killeverything.com/zak/blogimages/FirstLiveWriterPost_11CFE/lolcat_spam_thumb.jpg" width="129" border="0" /&gt;&lt;/a&gt; &lt;a href="http://www.killeverything.com/zak/blogimages/FirstLiveWriterPost_11CFE/lolcat_monorail.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="98" alt="lolcat_monorail" src="http://www.killeverything.com/zak/blogimages/FirstLiveWriterPost_11CFE/lolcat_monorail_thumb.jpg" width="129" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Alright, this is definitely easier than authoring inside Community Server itself.&amp;nbsp; I&amp;#39;m sold.&amp;nbsp; Oh, and thanks &lt;a href="http://images.google.com" target="_blank"&gt;Google Images&lt;/a&gt; for the lolcats. :)&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=514" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/netAndStuff/~4/l-6gQnbGlhg" height="1" width="1"/&gt;</description><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/Live+Writer/default.aspx">Live Writer</category><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/lolcats/default.aspx">lolcats</category><feedburner:origLink>http://www.dotnetmafia.com/blogs/kevin/archive/2008/02/22/first-live-writer-post.aspx</feedburner:origLink></item><item><title>Silverlight Day 1</title><link>http://feedproxy.google.com/~r/netAndStuff/~3/LwAKq2iKnoA/silverlight-day-1.aspx</link><pubDate>Thu, 21 Feb 2008 01:16:00 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:506</guid><dc:creator>Kevin</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://www.dotnetmafia.com/blogs/kevin/rsscomments.aspx?PostID=506</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/kevin/archive/2008/02/20/silverlight-day-1.aspx#comments</comments><description>&lt;p&gt;So I finally set out to do something with Silverlight... I set a simple goal for myself tonight - I just wanted to see &amp;quot;Hello World&amp;quot;.&amp;nbsp; That should be easy, right?&lt;/p&gt;
&lt;p&gt;First, I downloaded the Silverlight 1.0 SDK from &lt;a href="http://www.microsoft.com/silverlight"&gt;http://www.microsoft.com/silverlight&lt;/a&gt;&amp;nbsp;and installed it.&lt;/p&gt;
&lt;p&gt;Second, I created a new web site in Visual Studio.&lt;/p&gt;
&lt;p&gt;Third, I grabbed a copy of Silverlight.js and added it to the web site.&amp;nbsp; For me, it was in C:\Program Files\Microsoft Silverlight 1.0 SDK\Tools\Silverlight.js.&lt;/p&gt;
&lt;p&gt;I added a link to Silverlight.js in the HTML head of default.aspx.&amp;nbsp; Like this:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:Courier New;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;script&lt;/span&gt; &lt;span style="COLOR:red;"&gt;type&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style="COLOR:red;"&gt;src&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;Silverlight.js&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;script&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Next, I added a div in the HTML body of default.aspx and gave it an id.&amp;nbsp; It doesn&amp;#39;t need the runat=server attribute, just an id (it will only be reference from Javascript).&amp;nbsp; Like this:&lt;/p&gt;
&lt;p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:Courier New;"&gt;&lt;pre style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;div&lt;/span&gt; &lt;span style="COLOR:red;"&gt;id&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;MySilverlightDiv&amp;quot;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;div&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Next, I created a XAML file.&amp;nbsp; I know next to nothing about XAML yet, so I just used Google to &amp;quot;borrow&amp;quot; someone else&amp;#39;s example code for now.&amp;nbsp; My XAML file is called MySilverlight.xaml and looks like this:&lt;/p&gt;
&lt;p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:Courier New;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Canvas&lt;/span&gt;&lt;span style="COLOR:red;"&gt; xmlns&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;http://schemas.microsoft.com/client/2007&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; xmlns&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;:&lt;/span&gt;&lt;span style="COLOR:red;"&gt;x&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="COLOR:red;"&gt; FontSize&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;40&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; FontFamily&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;Arial&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Canvas.Top&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;20&amp;quot;&lt;/span&gt;&lt;span style="COLOR:red;"&gt; Canvas.Left&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;20&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Hello World!&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:#a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Canvas&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Last thing I did was add the javascript to my HTML file to actually create the Silverlight object in my div:&lt;/p&gt;
&lt;p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:Courier New;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;script&lt;/span&gt; &lt;span style="COLOR:red;"&gt;type&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Silverlight.createObject(&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#a31515;"&gt;&amp;quot;MySilverlight.xaml&amp;quot;&lt;/span&gt;, &lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; document.getElementById( &lt;span style="COLOR:#a31515;"&gt;&amp;quot;MySilverlightDiv&amp;quot;&lt;/span&gt;),&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#a31515;"&gt;&amp;quot;MySilverlightControl&amp;quot;&lt;/span&gt;,&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; { width:&lt;span style="COLOR:#a31515;"&gt;&amp;#39;400&amp;#39;&lt;/span&gt;,&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; height:&lt;span style="COLOR:#a31515;"&gt;&amp;#39;200&amp;#39;&lt;/span&gt;,&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; inplaceInstallPrompt:&lt;span style="COLOR:blue;"&gt;false&lt;/span&gt;,&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; background:&lt;span style="COLOR:#a31515;"&gt;&amp;#39;#DDDDDD&amp;#39;&lt;/span&gt;,&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; isWindowless:&lt;span style="COLOR:#a31515;"&gt;&amp;#39;false&amp;#39;&lt;/span&gt;,&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; framerate:&lt;span style="COLOR:#a31515;"&gt;&amp;#39;24&amp;#39;&lt;/span&gt;,&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; version:&lt;span style="COLOR:#a31515;"&gt;&amp;#39;1.0&amp;#39;&lt;/span&gt; },&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; { onError:&lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;,&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; onLoad:&lt;span style="COLOR:blue;"&gt;null&lt;/span&gt; },&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt; );&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;script&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;That&amp;#39;s the filename of my XAML file, the Id of my div, a unique&amp;nbsp;Id for the Silverlight control itself, and some various parameters for Silverlight that I do not yet fully understand.&lt;/p&gt;
&lt;p&gt;That&amp;#39;s it.&amp;nbsp; I hit my web site with a browser and there was my awesome Hello World!&lt;/p&gt;
&lt;p&gt;Hopefully tomorrow I will have time to research XAML some more and do something a bit more interesting with Silverlight.&amp;nbsp; I hope to extend this simple starter project and continue writing about it here, so if you&amp;#39;re interested - copy/paste the code above and come back tomorrow! :)&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=506" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/netAndStuff/~4/LwAKq2iKnoA" height="1" width="1"/&gt;</description><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/XAML/default.aspx">XAML</category><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/Silverlight/default.aspx">Silverlight</category><feedburner:origLink>http://www.dotnetmafia.com/blogs/kevin/archive/2008/02/20/silverlight-day-1.aspx</feedburner:origLink></item><item><title>Find Out the Current Workflow State for an Item in Sitecore</title><link>http://feedproxy.google.com/~r/netAndStuff/~3/qEAc_oifuHc/find-out-the-current-workflow-state-for-an-item-in-sitecore.aspx</link><pubDate>Thu, 14 Feb 2008 20:06:00 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:499</guid><dc:creator>Kevin</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://www.dotnetmafia.com/blogs/kevin/rsscomments.aspx?PostID=499</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/kevin/archive/2008/02/14/find-out-the-current-workflow-state-for-an-item-in-sitecore.aspx#comments</comments><description>&lt;p&gt;Something I was working on today required me to figure out a way to determine the current workflow state for&amp;nbsp;a Sitecore item.&amp;nbsp; Note, this code is running within the context of the content editor (a custom field type, to be exact).&amp;nbsp; Obviously, an item in the web database had better be in the &amp;quot;Published&amp;quot; state of the workflow. :)&lt;/p&gt;
&lt;p&gt;As usual, digging around on the SDN5 site didn&amp;#39;t help me out much, but eventually I figured this out:&lt;/p&gt;
&lt;p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:Courier New;"&gt;&lt;pre style="MARGIN:0px;"&gt;&lt;span style="COLOR:#2b91af;"&gt;Database&lt;/span&gt; masterDatabase = &lt;span style="COLOR:#2b91af;"&gt;Factory&lt;/span&gt;.GetDatabase(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;master&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="MARGIN:0px;"&gt;&lt;span style="COLOR:#2b91af;"&gt;Item&lt;/span&gt; currentItem = masterDatabase.Items[&lt;span style="COLOR:#a31515;"&gt;&amp;quot;/sitecore/content/Home&amp;quot;&lt;/span&gt;];&lt;/pre&gt;&lt;pre style="MARGIN:0px;"&gt;&lt;span style="COLOR:#2b91af;"&gt;IWorkflow&lt;/span&gt; workflow = masterDatabase.WorkflowProvider.GetWorkflow(currentItem);&lt;/pre&gt;&lt;pre style="MARGIN:0px;"&gt;&lt;span style="COLOR:#2b91af;"&gt;WorkflowState&lt;/span&gt; state = workflow.GetState(currentItem);&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;In this code, I&amp;#39;m getting a reference to the master database (since I&amp;#39;m working with an unpublished item), getting a reference to my site&amp;#39;s homepage (just an example - in my real world code I already have an item reference), and then using GetWorkflow() and GetState() methods I found whlie exploring the Sitecore APIs.&lt;/p&gt;
&lt;p&gt;In any case, this seems to work for me.&amp;nbsp; In my case, I need to know if the item is in the last state in the workflow, so I am checking if state.FinalState is true.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=499" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/netAndStuff/~4/qEAc_oifuHc" height="1" width="1"/&gt;</description><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/Sitecore/default.aspx">Sitecore</category><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/Workflow/default.aspx">Workflow</category><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/Custom+Field+Type/default.aspx">Custom Field Type</category><feedburner:origLink>http://www.dotnetmafia.com/blogs/kevin/archive/2008/02/14/find-out-the-current-workflow-state-for-an-item-in-sitecore.aspx</feedburner:origLink></item><item><title>Sitecore Xpress - Initial Thoughts</title><link>http://feedproxy.google.com/~r/netAndStuff/~3/xLyVtp7lVPs/sitecore-xpress-initial-thoughts.aspx</link><pubDate>Thu, 14 Feb 2008 04:22:00 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:495</guid><dc:creator>Kevin</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://www.dotnetmafia.com/blogs/kevin/rsscomments.aspx?PostID=495</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/kevin/archive/2008/02/13/sitecore-xpress-initial-thoughts.aspx#comments</comments><description>&lt;p&gt;Someone asked me today if I ever got around to downloading and installing the new Sitecore Xpress.&amp;nbsp; I did indeed!&amp;nbsp; My first impression?&amp;nbsp; It&amp;#39;s just the Sitecore SBSK (Small Business Starter Kit) re-packaged with a nice &amp;quot;free for personal use&amp;quot; license slapped on top.&amp;nbsp; Kind of underwhelming, but don&amp;#39;t get me wrong - it&amp;#39;s still a really good thing.&lt;/p&gt;&lt;p&gt;For those not familiar with the SBSK, it provides a nice sample site for you to begin with when building your first site with Sitecore.&amp;nbsp; Example templates, layouts, renderings, CSS, etc are all included along with some instructions to help get you off the ground. &lt;/p&gt;&lt;p&gt;Here are some quick screenshots I took of my Sitecore Xpress install.&amp;nbsp; The first shows the initial published site that comes with the package.&amp;nbsp; The second is the SBSK sample site that also comes with the package.&amp;nbsp; The third shows some of the pre-built templates that are included.&lt;/p&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://www.dotnetmafia.com/blogs/kevin/SitecoreX1.jpg"&gt;&lt;img src="http://www.dotnetmafia.com/blogs/kevin/SitecoreX1_thumb.jpg" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.dotnetmafia.com/blogs/kevin/SitecoreX2.jpg"&gt;&lt;img src="http://www.dotnetmafia.com/blogs/kevin/SitecoreX2_thumb.jpg" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.dotnetmafia.com/blogs/kevin/SitecoreX3.jpg"&gt;&lt;img src="http://www.dotnetmafia.com/blogs/kevin/SitecoreX3_thumb.jpg" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;If you want to read the full Sitecore Xpress license, it can be found at &lt;a href="http://www.sitecorexpress.net/sitecore/content/Express/LicenseAgreement.aspx" target="_blank"&gt;http://www.sitecorexpress.net/sitecore/content/Express/LicenseAgreement.aspx&lt;/a&gt;.&amp;nbsp; And of course if you want to download it yourself, head ovr to &lt;a href="http://www.sitecorexpress.net/" target="_blank"&gt;http://www.sitecorexpress.net/&lt;/a&gt;&lt;br /&gt; &lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=495" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/netAndStuff/~4/xLyVtp7lVPs" height="1" width="1"/&gt;</description><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/Sitecore/default.aspx">Sitecore</category><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/Sitecore+Xpress/default.aspx">Sitecore Xpress</category><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/Sitecore+SBSK/default.aspx">Sitecore SBSK</category><feedburner:origLink>http://www.dotnetmafia.com/blogs/kevin/archive/2008/02/13/sitecore-xpress-initial-thoughts.aspx</feedburner:origLink></item><item><title>Umbraco Action Handlers 101</title><link>http://feedproxy.google.com/~r/netAndStuff/~3/cCQFWdTEMsY/umbraco-action-handlers-101.aspx</link><pubDate>Thu, 14 Feb 2008 02:12:00 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:492</guid><dc:creator>Kevin</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://www.dotnetmafia.com/blogs/kevin/rsscomments.aspx?PostID=492</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/kevin/archive/2008/02/13/umbraco-action-handlers-101.aspx#comments</comments><description>Something I have done a few times in Sitecore is to have new news articles or blog posts automatically organize themselves within year/month folders in my content tree.&amp;nbsp; The URL to a specific news article might be /news/2008/02/ActionHandler.aspx for instance.&amp;nbsp; When I create the ActionHandler content item, the 2008 folder and the 02 folder would be created automatically if they did not already exist and my posting would be placed under these folders for me.&amp;nbsp; In Sitecore, I do this with an event handler for item:creating.&amp;nbsp; Tonight, I set out to do the same thing with Umbraco.&lt;br /&gt;&lt;br /&gt;First, let me present an example of&amp;nbsp; what I want to see when I&amp;#39;m done...&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/kevin/BlogFolders.JPG"&gt;&lt;img src="http://www.dotnetmafia.com/blogs/kevin/BlogFolders.JPG" border="0" alt="" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;I want to be able to right-click on &amp;quot;Blog&amp;quot; and create a new document of type &amp;quot;BlogPost&amp;quot;.&amp;nbsp; Given today&amp;#39;s date, I want a year folder and a month folder to be created (if they don&amp;#39;t already exist) and my new post moved into the proper folder automatically.&lt;br /&gt;&lt;br /&gt;A bit of research uncovered Umbraco&amp;#39;s concept of Action Handlers.&amp;nbsp; Basically, these are your own classes you can use to perform custom actions when certain events occur in Umbraco&amp;#39;s content editor.&amp;nbsp; They just have to implement the umbraco.BusinessLogic.Actions.IActionHandler interface and exist in an assembly in the Umbraco bin folder.&lt;br /&gt;&lt;br /&gt;So, I set out to implement my DateFolderActionHandler class...&amp;nbsp; I created a new class library project, added references to Umbraco&amp;#39;s businesslogic.dll, cms.dll, and interfaces.dll, and added a class that implements IActionHandler.&amp;nbsp; Visual Studio was kind enough to fill in a skeleton implementation for me - here&amp;#39;s what it looked like:&lt;/p&gt;&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;
&lt;pre style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System;&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.Linq;&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.Text;&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; umbraco.BusinessLogic.Actions;&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; umbraco.BusinessLogic.console;&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; umbraco.cms.businesslogic.web;&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;namespace&lt;/span&gt; Demo&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;class&lt;/span&gt; DateFolderActionHandler : IActionHandler&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; #region&lt;/span&gt; IActionHandler Members&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; Execute(Document documentObject, umbraco.interfaces.IAction action)&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;throw&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; NotImplementedException();&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; HandlerName()&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;throw&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; NotImplementedException();&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; umbraco.interfaces.IAction[] ReturnActions()&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;throw&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; NotImplementedException();&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; #endregion&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The first method that grabbed my attention was HandlerName() - all I have to do is return a string!&amp;nbsp; I did some digging with Reflector and it doesn&amp;#39;t appear to be used for anything important, so return anything you want from this method.&amp;nbsp; I used &amp;quot;DateFolderActionHandler&amp;quot; - the name of my class.&lt;/p&gt;&lt;p&gt;Next up - ReturnActions().&amp;nbsp; This appears to return a list of actions your handler wants to be notified of.&amp;nbsp; The actions you can choose from are members of the umbraco.BusinessLogic.Actions namespace.&amp;nbsp; My handler needs to execute when a new content item is created, so I&amp;#39;m using ActionNew().&amp;nbsp; ReturnActions() now looks like this:&lt;br /&gt;&lt;/p&gt;
&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;
&lt;pre style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; umbraco.interfaces.&lt;span&gt;IAction&lt;/span&gt;[] ReturnActions()&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; umbraco.interfaces.&lt;span&gt;IAction&lt;/span&gt;[] { &lt;span style="color:blue;"&gt;new&lt;/span&gt; umbraco.BusinessLogic.Actions.&lt;span&gt;ActionNew&lt;/span&gt;() };&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Last to implement is the Execute() method.&amp;nbsp; I&amp;#39;m guessing Execute() gets called when one of the actions you have subscribed to occurs.&amp;nbsp; The Document must be the content item that was acted upon and the IAction must be the action that was triggered.&amp;nbsp; In my case, I am only subscribing to ActionNew so I don&amp;#39;t have to check the action, but I will in this example to demonstrate how it&amp;#39;s done.&lt;br /&gt;&lt;/p&gt;&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;
&lt;pre style="margin:0px;"&gt;&lt;span style="color:green;"&gt;// Not interested in anything but &amp;quot;create&amp;quot; events.&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (action.Alias != &lt;span&gt;&amp;quot;create&amp;quot;&lt;/span&gt;) &lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;My action handler will be called for every new content item that is created, so the first thing I will want to do is verify that this document is one that I&amp;#39;m interested in.&amp;nbsp; I checked the content type like this:&lt;/p&gt;&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;
&lt;pre style="margin:0px;"&gt;&lt;span style="color:green;"&gt;// Not interested if the item being added is not a blog post.&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (documentObject.ContentType.Alias != &lt;span&gt;&amp;quot;BlogPost&amp;quot;&lt;/span&gt;) &lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Note that
I am returning true on both of these cases.&lt;span&gt;&amp;nbsp;
&lt;/span&gt;My assumption was that the return value from Execute() indicated if the
action should be allowed to continue or not.&lt;span&gt;&amp;nbsp;
&lt;/span&gt;After playing around with returning false (and peeking at the code with
Reflector), it appears the return value is just ignored.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Shame on Umbraco - there does not appear to
be any way to cancel an action!&lt;span&gt;&amp;nbsp; &lt;/span&gt;Even
throwing an exception here doesn&amp;#39;t keep the action from happening.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Anyway - I will continue to return true when
I want the action to complete and false if I don&amp;#39;t in hopes that it will
someday make a difference. :)&lt;/p&gt;
&lt;p&gt;So if my code is still executing, I know I have a new document that I&amp;#39;m interested in
placing in date folders.&lt;span&gt;&amp;nbsp; &lt;/span&gt;I want a folder
for the year and a folder for the month, so I&amp;#39;ll start with the current date.&lt;/p&gt;&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;
&lt;pre style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt; year = &lt;span&gt;DateTime&lt;/span&gt;.Now.ToString(&lt;span&gt;&amp;quot;yyyy&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt; month = &lt;span&gt;DateTime&lt;/span&gt;.Now.ToString(&lt;span&gt;&amp;quot;MM&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;As I
mentioned at the start of this article, I expect the new document to be created
as a child of &amp;quot;Blog&amp;quot;.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The year
folder should also exist as a child of &amp;quot;Blog&amp;quot;.&lt;span&gt;&amp;nbsp; &lt;/span&gt;My first task is to check if that already
exists.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Here&amp;#39;s the code I used:&lt;/p&gt;&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;
&lt;pre style="margin:0px;"&gt;&lt;span&gt;Document&lt;/span&gt; yearDocument = &lt;span style="color:blue;"&gt;null&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt; (&lt;span&gt;IconI&lt;/span&gt; child &lt;span style="color:blue;"&gt;in&lt;/span&gt; documentObject.Parent.Children)&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (child.Text == year)&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; yearDocument = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span&gt;Document&lt;/span&gt;(child.Id);&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;(note - I
have no idea why the members of documentObject.Parent.Children are of type
&amp;quot;IconI&amp;quot;.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Maybe someone that
knows Umbraco better can answer that?)&lt;/p&gt;





&lt;p&gt;What this does is get the new item&amp;#39;s parent&amp;#39;s children (children of &amp;quot;Blog&amp;quot;) and
loops through them looking for one whose name matches the current year.&lt;span&gt;&amp;nbsp; &lt;/span&gt;If we make it through this loop and
yearDocument is still null, we know the folder doesn&amp;#39;t exist and needs to be
created.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Here is how I handle that:&lt;/p&gt;&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;
&lt;pre style="margin:0px;"&gt;&lt;span style="color:green;"&gt;// If the year folder doesn&amp;#39;t exist, create it.&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (yearDocument == &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; yearDocument = &lt;span&gt;Document&lt;/span&gt;.MakeNew(year, &lt;span&gt;DocumentType&lt;/span&gt;.GetByAlias(&lt;span&gt;&amp;quot;YearFolder&amp;quot;&lt;/span&gt;), documentObject.User, documentObject.Parent.Id);&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The Document.MakeNew() call creates a new content item named for the current year,
using the document type &amp;quot;YearFolder&amp;quot;, created by the same user that
created the blog post, underneath the parent of the blog post
(&amp;quot;Blog&amp;quot;).&lt;/p&gt;



&lt;p&gt;Now I
have to repeat the same process for the month folder...&lt;/p&gt;&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;
&lt;pre style="margin:0px;"&gt;&lt;span&gt;Document&lt;/span&gt; monthDocument = &lt;span style="color:blue;"&gt;null&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt; (&lt;span&gt;IconI&lt;/span&gt; child &lt;span style="color:blue;"&gt;in&lt;/span&gt; yearDocument.Children)&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (child.Text == month)&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; monthDocument = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span&gt;Document&lt;/span&gt;(child.Id);&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;}&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&lt;span style="color:green;"&gt;// If the month folder doesn&amp;#39;t exist, create it.&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (monthDocument == &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; monthDocument = &lt;span&gt;Document&lt;/span&gt;.MakeNew(month, &lt;span&gt;DocumentType&lt;/span&gt;.GetByAlias(&lt;span&gt;&amp;quot;MonthFolder&amp;quot;&lt;/span&gt;), documentObject.User, yearDocument.Id);&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;And the
final step is to move the new content item into the month folder...&lt;/p&gt;&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;
&lt;pre style="margin:0px;"&gt;&lt;span style="color:green;"&gt;// Move the document into the month folder.&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin:0px;"&gt;documentObject.Move(monthDocument.Id);&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Then I
can just return true and I&amp;#39;m done!&lt;/p&gt;

&lt;p&gt;If you want to see the final DateFolderActionHandler.cs source file, I have attached it to this blog post.&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=492" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/netAndStuff/~4/cCQFWdTEMsY" height="1" width="1"/&gt;</description><enclosure url="http://www.dotnetmafia.com/blogs/kevin/attachment/492.ashx" length="2462" type="text/plain" /><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/Umbraco/default.aspx">Umbraco</category><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/Action+Handler/default.aspx">Action Handler</category><feedburner:origLink>http://www.dotnetmafia.com/blogs/kevin/archive/2008/02/13/umbraco-action-handlers-101.aspx</feedburner:origLink></item><item><title>Sitecore Xpress</title><link>http://feedproxy.google.com/~r/netAndStuff/~3/iAMtFRUPAHw/sitecore-xpress.aspx</link><pubDate>Wed, 06 Feb 2008 14:45:00 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:469</guid><dc:creator>Kevin</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://www.dotnetmafia.com/blogs/kevin/rsscomments.aspx?PostID=469</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/kevin/archive/2008/02/06/sitecore-xpress.aspx#comments</comments><description>Sitecore Xpress launches tomorrow! &lt;a href="http://xpress.sitecore.net/" target="_blank"&gt;http://xpress.sitecore.net/&lt;/a&gt;&lt;br /&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=469" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/netAndStuff/~4/iAMtFRUPAHw" height="1" width="1"/&gt;</description><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/Sitecore/default.aspx">Sitecore</category><category domain="http://www.dotnetmafia.com/blogs/kevin/archive/tags/Sitecore+Xpress/default.aspx">Sitecore Xpress</category><feedburner:origLink>http://www.dotnetmafia.com/blogs/kevin/archive/2008/02/06/sitecore-xpress.aspx</feedburner:origLink></item></channel></rss>
