<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1814971078104194310</id><updated>2012-02-17T05:31:28.778-08:00</updated><category term='C#'/><category term='Xml'/><category term='soul'/><category term='html'/><category term='Meridium'/><category term='.Net'/><category term='EPiServer'/><category term='Battlefield 3'/><category term='MediaChase'/><category term='Kerberos'/><category term='blues'/><category term='ska'/><category term='frameset'/><category term='API'/><category term='Commerce'/><category term='LDAP'/><title type='text'>Fredrik von Werder</title><subtitle type='html'>My personal C# snippets archive, some EPiServer related</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://fredrikvonwerder.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://fredrikvonwerder.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Fredrik von Werder</name><uri>http://www.blogger.com/profile/01228651559278773280</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp2.blogger.com/_4LL379dnJdw/SHwyaCyICeI/AAAAAAAAAGs/Ug_JMd4sysI/S220/freguz_spegel_288.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>23</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1814971078104194310.post-7041428119270939125</id><published>2012-01-10T02:18:00.000-08:00</published><updated>2012-01-10T02:31:36.563-08:00</updated><title type='text'>EPiServer ActionWindow Plugin - set bigger window size</title><content type='html'>A neat script to set a larger window area for the EpiServer CMS 6 plugin iframe.&lt;br /&gt;&lt;br /&gt;Works in both Mozilla and Internet Explorer.&lt;br /&gt;&lt;br /&gt;Place this script in the plugin ascx:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;    if (window.parent != null &amp;amp;&amp;amp; window.parent.parent != null &amp;amp;&amp;amp; window.parent.parent.document.all['epCustomDIV'] != null) {&lt;br /&gt;        window.parent.parent.document.all['epCustomDIV'].style.width = '500px';&lt;br /&gt;    }&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1814971078104194310-7041428119270939125?l=fredrikvonwerder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fredrikvonwerder.blogspot.com/feeds/7041428119270939125/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://fredrikvonwerder.blogspot.com/2012/01/episerver-actionwindow-plugin-set.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/7041428119270939125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/7041428119270939125'/><link rel='alternate' type='text/html' href='http://fredrikvonwerder.blogspot.com/2012/01/episerver-actionwindow-plugin-set.html' title='EPiServer ActionWindow Plugin - set bigger window size'/><author><name>Fredrik von Werder</name><uri>http://www.blogger.com/profile/01228651559278773280</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp2.blogger.com/_4LL379dnJdw/SHwyaCyICeI/AAAAAAAAAGs/Ug_JMd4sysI/S220/freguz_spegel_288.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1814971078104194310.post-8082594703310709599</id><published>2011-11-21T14:49:00.000-08:00</published><updated>2011-11-21T14:50:29.021-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='Battlefield 3'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>BF3Stats playerupdate API request</title><content type='html'>The Battlefield 3 game is really awesome, and why not add some stats to your site. Go to BF3stats.com and read about the API.&lt;br /&gt;&lt;br /&gt;I had some trouble with the API request against the bf3stats.com/api and I thought I just should spare you that struggle with showing you my test console app. The problem was making a Signature (sig) without using the UTF8 encoding, just do it directly on the byte[] array.&lt;br /&gt;&lt;br /&gt;Just switch the API keys to your own, and a player you want to update...&lt;br /&gt;&lt;br /&gt;C#&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{ font-size: small; color: black; font-family: Consolas, "Courier New", Courier, Monospace; background-color: #ffffff; /*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Net;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.IO;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.Security;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Security.Cryptography;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; BF3&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;class&lt;/span&gt; Program&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; BF3APIIdent = &lt;span class="str"&gt;"xxxx"&lt;/span&gt;;&lt;br /&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; BF3APIKey = &lt;span class="str"&gt;"xxxx"&lt;/span&gt;;&lt;br /&gt;       &lt;br /&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;br /&gt;        {&lt;br /&gt;            Console.WriteLine(updatePlayer(&lt;span class="str"&gt;"pc"&lt;/span&gt;, &lt;span class="str"&gt;"PlayersName"&lt;/span&gt;));&lt;br /&gt;            Console.ReadLine();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; MakeUrlSafe(&lt;span class="kwrd"&gt;string&lt;/span&gt; code)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(code))&lt;br /&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; code.Replace(&lt;span class="str"&gt;"+"&lt;/span&gt;, &lt;span class="str"&gt;"-"&lt;/span&gt;).Replace(&lt;span class="str"&gt;"/"&lt;/span&gt;, &lt;span class="str"&gt;"_"&lt;/span&gt;).Replace(&lt;span class="str"&gt;"="&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; updatePlayer(&lt;span class="kwrd"&gt;string&lt;/span&gt; platform, &lt;span class="kwrd"&gt;string&lt;/span&gt; name)&lt;br /&gt;        {&lt;br /&gt;            Hashtable data = &lt;span class="kwrd"&gt;new&lt;/span&gt; Hashtable();&lt;br /&gt;            data[&lt;span class="str"&gt;"ident"&lt;/span&gt;] = BF3APIIdent;&lt;br /&gt;            data[&lt;span class="str"&gt;"time"&lt;/span&gt;] = time();&lt;br /&gt;            data[&lt;span class="str"&gt;"player"&lt;/span&gt;] = name;&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; getAPIDataSigned(&lt;span class="str"&gt;"playerupdate"&lt;/span&gt;, platform, data);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; getAPIDataSigned(&lt;span class="kwrd"&gt;string&lt;/span&gt; type, &lt;span class="kwrd"&gt;string&lt;/span&gt; platform, Hashtable data)&lt;br /&gt;        {&lt;br /&gt;            System.Web.Script.Serialization.JavaScriptSerializer oSerializer = &lt;span class="kwrd"&gt;new&lt;/span&gt; System.Web.Script.Serialization.JavaScriptSerializer();&lt;br /&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; sJSON = oSerializer.Serialize(data);&lt;br /&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; bdata = MakeUrlSafe(Base64Encode(sJSON));&lt;br /&gt;            &lt;br /&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; sig = Sig(bdata, BF3APIKey);&lt;br /&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; postdata = &lt;span class="str"&gt;"data="&lt;/span&gt; + bdata + &lt;span class="str"&gt;"&amp;amp;sig="&lt;/span&gt; + sig;&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; BF3Request(postdata, &lt;span class="str"&gt;"http://api.bf3stats.com/"&lt;/span&gt; + platform + &lt;span class="str"&gt;"/"&lt;/span&gt; + type + &lt;span class="str"&gt;"/"&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; BF3Request(&lt;span class="kwrd"&gt;string&lt;/span&gt; data, &lt;span class="kwrd"&gt;string&lt;/span&gt; url)&lt;br /&gt;        {&lt;br /&gt;            System.Net.ServicePointManager.Expect100Continue = &lt;span class="kwrd"&gt;false&lt;/span&gt;; &lt;span class="rem"&gt;//IMPORTANT otherwise 417 Exception&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            WebRequest request = WebRequest.Create(url);&lt;br /&gt;            request.Method = &lt;span class="str"&gt;"POST"&lt;/span&gt;;&lt;br /&gt;           &lt;br /&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; postData = data;&lt;br /&gt;            &lt;span class="kwrd"&gt;byte&lt;/span&gt;[] byteArray = Encoding.UTF8.GetBytes(postData);&lt;br /&gt;            request.ContentType = &lt;span class="str"&gt;"application/x-www-form-urlencoded"&lt;/span&gt;;&lt;br /&gt;            request.ContentLength = byteArray.Length;&lt;br /&gt;            Stream dataStream = request.GetRequestStream();&lt;br /&gt;            dataStream.Write(byteArray, 0, byteArray.Length);&lt;br /&gt;            dataStream.Close();&lt;br /&gt;            WebResponse response = request.GetResponse();&lt;br /&gt;            dataStream = response.GetResponseStream();&lt;br /&gt;            StreamReader reader = &lt;span class="kwrd"&gt;new&lt;/span&gt; StreamReader(dataStream);&lt;br /&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; item = reader.ReadToEnd();&lt;br /&gt;            reader.Close();&lt;br /&gt;            dataStream.Close();&lt;br /&gt;            response.Close();&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; item;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Sig(&lt;span class="kwrd"&gt;string&lt;/span&gt; data, &lt;span class="kwrd"&gt;string&lt;/span&gt; key)&lt;br /&gt;        {&lt;br /&gt;            var hmacsha256 = &lt;span class="kwrd"&gt;new&lt;/span&gt; HMACSHA256(Encoding.UTF8.GetBytes(key));&lt;br /&gt;            var bytes = hmacsha256.ComputeHash(Encoding.UTF8.GetBytes(data));&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; MakeUrlSafe(Base64Encode(bytes));&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Base64Encode(&lt;span class="kwrd"&gt;string&lt;/span&gt; data)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;byte&lt;/span&gt;[] encData_byte = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;byte&lt;/span&gt;[data.Length];&lt;br /&gt;            encData_byte = System.Text.Encoding.UTF8.GetBytes(data);&lt;br /&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; encodedData = Convert.ToBase64String(encData_byte);&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; encodedData;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Base64Encode(&lt;span class="kwrd"&gt;byte&lt;/span&gt;[] encData_byte)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; Convert.ToBase64String(encData_byte);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;long&lt;/span&gt; time()&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; time(DateTime.UtcNow);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;long&lt;/span&gt; time(DateTime time)&lt;br /&gt;        {&lt;br /&gt;            DateTime unixEpoch = &lt;span class="kwrd"&gt;new&lt;/span&gt; DateTime(1970, 1, 1, 0, 0, 0);&lt;br /&gt;            TimeSpan span = time.Subtract(unixEpoch);&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; (&lt;span class="kwrd"&gt;long&lt;/span&gt;)span.TotalSeconds;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1814971078104194310-8082594703310709599?l=fredrikvonwerder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fredrikvonwerder.blogspot.com/feeds/8082594703310709599/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://fredrikvonwerder.blogspot.com/2011/11/bf3stats-playerupdate-api-request.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/8082594703310709599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/8082594703310709599'/><link rel='alternate' type='text/html' href='http://fredrikvonwerder.blogspot.com/2011/11/bf3stats-playerupdate-api-request.html' title='BF3Stats playerupdate API request'/><author><name>Fredrik von Werder</name><uri>http://www.blogger.com/profile/01228651559278773280</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp2.blogger.com/_4LL379dnJdw/SHwyaCyICeI/AAAAAAAAAGs/Ug_JMd4sysI/S220/freguz_spegel_288.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1814971078104194310.post-2247538004703209927</id><published>2011-11-04T08:58:00.000-07:00</published><updated>2011-11-04T11:26:48.891-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='frameset'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>How to get rid of the ugly frame border in IE 9</title><content type='html'>I have a forum with a frameset (yes I know its old fashion but it works perfectly well).&lt;br /&gt;&lt;br /&gt;And there is a chat frameset with 2 frames.&lt;br /&gt;&lt;br /&gt;And in Internet Explorer 9 there have always been an ugly border between the two frames, despite have set values frameborder="0" and framespacing="0" and border="0".&lt;br /&gt;&lt;br /&gt;I tried many times with all kinds of stuff, but then I found a way...&lt;br /&gt;&lt;br /&gt;Here is what made my border disappear (the magic in bold text):&lt;br /&gt;&lt;br /&gt;&amp;lt;frameset rows="*,127" border="0" framespacing="0" frameBorder="0"&amp;gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;lt;frame src="chat.aspx#Down" scrolling="auto" name="chat" frameBorder="0" border="0" framespacing="0" style="border:none;&lt;b&gt;height:101%;"&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;frame src="chat_input.aspx" scrolling="auto" name="chat_input" frameBorder="0" border="0" framespacing="0" style="border:none"&amp;gt;&lt;br /&gt;&amp;lt;/frameset &amp;gt;&lt;br /&gt;&lt;br /&gt;I think its the 101% height that places the border out of visibility, so it's more of a workaround... but it works! :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1814971078104194310-2247538004703209927?l=fredrikvonwerder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fredrikvonwerder.blogspot.com/feeds/2247538004703209927/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://fredrikvonwerder.blogspot.com/2011/11/how-to-get-rid-of-ugly-frame-border-in.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/2247538004703209927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/2247538004703209927'/><link rel='alternate' type='text/html' href='http://fredrikvonwerder.blogspot.com/2011/11/how-to-get-rid-of-ugly-frame-border-in.html' title='How to get rid of the ugly frame border in IE 9'/><author><name>Fredrik von Werder</name><uri>http://www.blogger.com/profile/01228651559278773280</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp2.blogger.com/_4LL379dnJdw/SHwyaCyICeI/AAAAAAAAAGs/Ug_JMd4sysI/S220/freguz_spegel_288.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1814971078104194310.post-656913386830710068</id><published>2011-10-04T22:52:00.000-07:00</published><updated>2011-10-04T23:32:59.482-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Commerce'/><category scheme='http://www.blogger.com/atom/ns#' term='MediaChase'/><title type='text'>Episerver CMS and Commerce - my notes</title><content type='html'>&lt;b&gt;CurrentPage missing on product pages&lt;/b&gt;&lt;br /&gt;You assign a EPiServer page to act as a product template, but, in the template file the CurrentPage is a "faked" page with its ID coming from the Commerce custom page provider. This means that you can not use Epi properties on that page, and that is really bad. If anyone discover a way to get the real CurrentPage, I would be glad to hear about it. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;License configuration on servers without manager (load balanced environment)&lt;/b&gt;&lt;br /&gt;It's a little tricky to set up the web front servers, I had a annoying bad license request, even though I put the Epi-Commerce license in the www root of the site. After some trial and error I found out that copying the whole \Shared\Licensing\ folder into each server at same place (or path configured in web config's mediachase.license part) and do not forget to give app pool identity read access to that path. &lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Excluding a catalog node from search&lt;/b&gt;&lt;br /&gt;There is no method in API to exclude a catalog, so you have to do it with the SqlWhereClause, like this: &lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;var pars = new CatalogSearchParameters();&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;pars.SqlWhereClause = " [CatalogEntry].CatalogEntryId not in (select NodeEntryRelation.CatalogEntryId from NodeEntryRelation " + &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; " inner join CatalogNode on NodeEntryRelation.CatalogNodeId = CatalogNode.CatalogNodeId and NodeEntryRelation.CatalogId " + &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; " in (select * from @Catalogs_temp) and CatalogNode.Code = '" + catalogCodeToExclude + "') ";&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1814971078104194310-656913386830710068?l=fredrikvonwerder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fredrikvonwerder.blogspot.com/feeds/656913386830710068/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://fredrikvonwerder.blogspot.com/2011/10/episerver-cms-and-commerce-my-notes.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/656913386830710068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/656913386830710068'/><link rel='alternate' type='text/html' href='http://fredrikvonwerder.blogspot.com/2011/10/episerver-cms-and-commerce-my-notes.html' title='Episerver CMS and Commerce - my notes'/><author><name>Fredrik von Werder</name><uri>http://www.blogger.com/profile/01228651559278773280</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp2.blogger.com/_4LL379dnJdw/SHwyaCyICeI/AAAAAAAAAGs/Ug_JMd4sysI/S220/freguz_spegel_288.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1814971078104194310.post-389830658044290114</id><published>2011-09-26T11:29:00.000-07:00</published><updated>2011-09-30T03:05:19.082-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EPiServer'/><category scheme='http://www.blogger.com/atom/ns#' term='LDAP'/><title type='text'>Episerver and AD authenticate using LDAP</title><content type='html'>Authenticating using membership provider for Active Directory in EPiServer CMS 6 is not just a straight forward road. The main thing is that you first believe that opening port 389 is enough on the AD server, because your found it on some blog and you tried with Softerra ldap browser and it worked just fine.&lt;br /&gt;&lt;br /&gt;But, the ActiveDirectoryMembershipProvider needs two ports to be opened, port &lt;b&gt;389 and 445&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Then life becomes much easier... &lt;br /&gt;&lt;br /&gt;And of course&lt;br /&gt;LDAP string in connectionstring must have a valid correct path, for example:&lt;br /&gt;LDAP://mail.company.se/OU=Users,DC=company,DC=local&lt;br /&gt;&lt;br /&gt;But you can easily find that out in the Softerra for example when successfully connected &lt;br /&gt;&lt;br /&gt;And the settings in Softerra that worked for me was on the Credentials tab, select Other credentials and the "GSS negotiate" and fill the login fields.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1814971078104194310-389830658044290114?l=fredrikvonwerder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fredrikvonwerder.blogspot.com/feeds/389830658044290114/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://fredrikvonwerder.blogspot.com/2011/09/episerver-and-ldap-connectionstring.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/389830658044290114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/389830658044290114'/><link rel='alternate' type='text/html' href='http://fredrikvonwerder.blogspot.com/2011/09/episerver-and-ldap-connectionstring.html' title='Episerver and AD authenticate using LDAP'/><author><name>Fredrik von Werder</name><uri>http://www.blogger.com/profile/01228651559278773280</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp2.blogger.com/_4LL379dnJdw/SHwyaCyICeI/AAAAAAAAAGs/Ug_JMd4sysI/S220/freguz_spegel_288.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1814971078104194310.post-2899499935933722048</id><published>2011-07-03T13:18:00.001-07:00</published><updated>2012-02-17T05:31:28.786-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='soul'/><category scheme='http://www.blogger.com/atom/ns#' term='blues'/><category scheme='http://www.blogger.com/atom/ns#' term='ska'/><title type='text'>My tour dates</title><content type='html'>Gigs are with&lt;b&gt; the Beat from Palookaville&lt;/b&gt; and in Stockholm (Sweden) if nothing else stated.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;2012&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;11 februari - Stampen &lt;br /&gt;14 april - Helsingfors (w Sven Zetterberg) &lt;br /&gt;28 april - Stampen &lt;br /&gt;12 maj - privat&lt;br /&gt;26 maj - Mönsterås (w Sven Zetterberg)&lt;br /&gt;28 aug - Stockholm (w Sven Zetterberg)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;2013&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2-5 februari - Spain (&lt;span style="border-collapse: separate; font-family: Helvetica; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"&gt;&lt;span style="font-family: Arial Narrow;"&gt;Rockin' Race Jamboree festival in Spain&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.rockinrace.com/" target="_blank"&gt;www.rockinrace.com&lt;/a&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="border-collapse: separate; font-family: Helvetica; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"&gt;&lt;span style="font-family: Arial Narrow;"&gt;4-5 juli - Switzerland (&lt;/span&gt;&lt;/span&gt;Hangar Rockin´)&lt;span style="border-collapse: separate; font-family: Helvetica; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"&gt;&lt;span style="font-family: Arial Narrow;"&gt;&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Homepages:&lt;br /&gt;&lt;a href="http://stampen.se/index.htm"&gt;Stampen&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1814971078104194310-2899499935933722048?l=fredrikvonwerder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fredrikvonwerder.blogspot.com/feeds/2899499935933722048/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://fredrikvonwerder.blogspot.com/2011/07/my-tour-dates.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/2899499935933722048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/2899499935933722048'/><link rel='alternate' type='text/html' href='http://fredrikvonwerder.blogspot.com/2011/07/my-tour-dates.html' title='My tour dates'/><author><name>Fredrik von Werder</name><uri>http://www.blogger.com/profile/01228651559278773280</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp2.blogger.com/_4LL379dnJdw/SHwyaCyICeI/AAAAAAAAAGs/Ug_JMd4sysI/S220/freguz_spegel_288.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1814971078104194310.post-204009000644306780</id><published>2011-05-09T00:37:00.000-07:00</published><updated>2011-05-09T00:37:07.119-07:00</updated><title type='text'>EPiServer CMS bug when upgrading with deployment center</title><content type='html'>Error described:&lt;br /&gt;&lt;br /&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:OfficeDocumentSettings&gt;   &lt;o:AllowPNG/&gt;  &lt;/o:OfficeDocumentSettings&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:WordDocument&gt;   &lt;w:View&gt;Normal&lt;/w:View&gt;   &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:TrackMoves/&gt;   &lt;w:TrackFormatting/&gt;   &lt;w:HyphenationZone&gt;21&lt;/w:HyphenationZone&gt;   &lt;w:PunctuationKerning/&gt;   &lt;w:ValidateAgainstSchemas/&gt;   &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:DoNotPromoteQF/&gt;   &lt;w:LidThemeOther&gt;SV&lt;/w:LidThemeOther&gt;   &lt;w:LidThemeAsian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:Compatibility&gt;    &lt;w:BreakWrappedTables/&gt;    &lt;w:SnapToGridInCell/&gt;    &lt;w:WrapTextWithPunct/&gt;    &lt;w:UseAsianBreakRules/&gt;    &lt;w:DontGrowAutofit/&gt;    &lt;w:SplitPgBreakAndParaMark/&gt;    &lt;w:EnableOpenTypeKerning/&gt;    &lt;w:DontFlipMirrorIndents/&gt;    &lt;w:OverrideTableStyleHps/&gt;   &lt;/w:Compatibility&gt;   &lt;w:DoNotOptimizeForBrowser/&gt;   &lt;m:mathPr&gt;    &lt;m:mathFont m:val="Cambria Math"/&gt;    &lt;m:brkBin m:val="before"/&gt;    &lt;m:brkBinSub m:val="&amp;#45;-"/&gt;    &lt;m:smallFrac m:val="off"/&gt;    &lt;m:dispDef/&gt;    &lt;m:lMargin m:val="0"/&gt;    &lt;m:rMargin m:val="0"/&gt;    &lt;m:defJc m:val="centerGroup"/&gt;    &lt;m:wrapIndent m:val="1440"/&gt;    &lt;m:intLim m:val="subSup"/&gt;    &lt;m:naryLim m:val="undOvr"/&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"  DefSemiHidden="true" DefQFormat="false" DefPriority="99"  LatentStyleCount="267"&gt;   &lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Normal"/&gt;   &lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 1"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 2"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 3"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 4"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 5"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 6"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 7"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 8"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 9"/&gt;   &lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/&gt;   &lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Title"/&gt;   &lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/&gt;   &lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/&gt;   &lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Strong"/&gt;   &lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/&gt;   &lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"   UnhideWhenUsed="false" Name="Table Grid"/&gt;   &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/&gt;   &lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/&gt;   &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/&gt;   &lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/&gt;   &lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Quote"/&gt;   &lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/&gt;   &lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/&gt;   &lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/&gt;   &lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/&gt;   &lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/&gt;   &lt;w:LsdException Locked="false" Priority="37" Name="Bibliography"/&gt;   &lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt; /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Normal tabell"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi; mso-fareast-language:EN-US;}&lt;/style&gt; &lt;![endif]--&gt;  &lt;br /&gt;&lt;div class="MsoPlainText"&gt;At C:\Program Files (x86)\EPiServer\CMS\6.0.530.0\Upgrade\System Scripts\Upgrade Site (SqlServer).ps1:361 char:29&lt;/div&gt;&lt;div class="MsoPlainText"&gt;+ &lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;$newUiUrl = $uiUrl.Replace &amp;lt;&amp;lt;&amp;lt;&amp;lt; ($uiPath, $uiPath+"/CMS")&lt;/div&gt;&lt;div class="MsoPlainText"&gt;System.Management.Automation.ParentContainsErrorRecordException: Cannot convert argument "1", with value: "/CMS", for "Replace" to type "System.Char": "Cannot convert value "/CMS" to type "System.Char". Error: "Strängen måste vara exakt ett tecken lång.""&amp;nbsp;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;The problem is that the site had asolute url for ui in sitesettigns, because of ui running under SSL.&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;Changing the value to ~ui solved the problem.&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;Conclusion, you can not upgrade sites using https with their tool, without manually fixing this&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1814971078104194310-204009000644306780?l=fredrikvonwerder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fredrikvonwerder.blogspot.com/feeds/204009000644306780/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://fredrikvonwerder.blogspot.com/2011/05/episerver-cms-bug-when-upgrading-with.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/204009000644306780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/204009000644306780'/><link rel='alternate' type='text/html' href='http://fredrikvonwerder.blogspot.com/2011/05/episerver-cms-bug-when-upgrading-with.html' title='EPiServer CMS bug when upgrading with deployment center'/><author><name>Fredrik von Werder</name><uri>http://www.blogger.com/profile/01228651559278773280</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp2.blogger.com/_4LL379dnJdw/SHwyaCyICeI/AAAAAAAAAGs/Ug_JMd4sysI/S220/freguz_spegel_288.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1814971078104194310.post-8017806170638104145</id><published>2010-10-11T06:29:00.000-07:00</published><updated>2011-07-31T04:10:50.506-07:00</updated><title type='text'>Entity Framework missing in Visual Studio 2010</title><content type='html'>I could not find the template for Entity Framework (AdoNetEntityDataModelCSharp.zip) package in my Visual Studio 2010 Ultimate installation.&lt;br /&gt;&lt;br /&gt;So I looked for a solution but could not find one that worked for me so I installed it again on another computer, and therefor (dont know how) I got the correct zip file for csharp (C#) templates.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So, for all of you poor Visual Studio users looking for Entity Framework EF, here is the actual zip file that is needed for Visual Studio 2010&lt;br /&gt;&lt;br /&gt;put it in the correct place, default path is something like:&lt;br /&gt;C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\ItemTemplates\CSharp\Data\1033&lt;br /&gt;&lt;br /&gt;Download Entity Data Model template zip file here (link broken, working on a new file):&lt;strike&gt; &lt;a href="http://www.plan9.se/dynamic_files/document/vs2010_entity_data_framework_itemtemplate.zip"&gt;vs2010_entity_data_framework_itemtemplate.zip&lt;/a&gt;&lt;/strike&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1814971078104194310-8017806170638104145?l=fredrikvonwerder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fredrikvonwerder.blogspot.com/feeds/8017806170638104145/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/10/entity-framework-missing-in-visual.html#comment-form' title='2 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/8017806170638104145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/8017806170638104145'/><link rel='alternate' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/10/entity-framework-missing-in-visual.html' title='Entity Framework missing in Visual Studio 2010'/><author><name>Fredrik von Werder</name><uri>http://www.blogger.com/profile/01228651559278773280</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp2.blogger.com/_4LL379dnJdw/SHwyaCyICeI/AAAAAAAAAGs/Ug_JMd4sysI/S220/freguz_spegel_288.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1814971078104194310.post-4449378321445010954</id><published>2010-09-22T02:39:00.000-07:00</published><updated>2010-09-22T02:39:51.953-07:00</updated><title type='text'>EPiServer 6 problems with configuration</title><content type='html'>Some errors that I ran into when setting up EPiServer CMS 6 on my Vista with IIS 7.0 running in &lt;b&gt;.NET 4&lt;/b&gt;, and how to get it working&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;ICallbackEVentHandler error&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;In web.config under system.web / pages , set clientIDMode="AutoID"&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Can not see wastebasket or root page&lt;/b&gt;&lt;br /&gt;Occurs when installing the package.&lt;br /&gt;Change the page types sysroot and sysRecycleBin settings to correct path to the .aspx file&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Lots of javascript errors in edit and admin mode&lt;/b&gt;&lt;br /&gt;In web.config, set access rights for location path="Util", for example set same roles as for the edit path, usually WebAdmin, WebEditors, Adminstrators&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1814971078104194310-4449378321445010954?l=fredrikvonwerder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fredrikvonwerder.blogspot.com/feeds/4449378321445010954/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/09/episerver-6-problems-with-configuration.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/4449378321445010954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/4449378321445010954'/><link rel='alternate' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/09/episerver-6-problems-with-configuration.html' title='EPiServer 6 problems with configuration'/><author><name>Fredrik von Werder</name><uri>http://www.blogger.com/profile/01228651559278773280</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp2.blogger.com/_4LL379dnJdw/SHwyaCyICeI/AAAAAAAAAGs/Ug_JMd4sysI/S220/freguz_spegel_288.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1814971078104194310.post-5291698013593042095</id><published>2010-08-17T03:29:00.000-07:00</published><updated>2010-08-17T03:42:02.723-07:00</updated><title type='text'>EpiServer - simple plugin to lookup page from PageFiles ID</title><content type='html'>Each page in EPiServer has a directory in VPP PageFiles (created when first uploading a file to it) directory.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;For example: \\myFileServer\VPP\PageFiles\35566\my_pic.gif&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;However, the ID after PageFiles has nothing to do with the page id in EPiserver.&lt;br /&gt;&lt;br /&gt;You can get the ID from the page using the CurrentPage["PageFolderID"]&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;Here is a very simple and small plug-in (action window section) to be used to quickly find the page for a specific PageFiles ID. (you have to provide your own loading.gif though)&lt;br /&gt;&lt;br /&gt;Markup:&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{    font-size: small;    color: black;    font-family: Consolas, "Courier New", Courier, Monospace;    background-color: #ffffff;    /*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt{    background-color: #f4f4f4;    width: 100%;    margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;span class="asp"&gt;&amp;lt;%@ Control Language="C#" AutoEventWireup="true" CodeBehind="FindPageFromPagefileId.ascx.cs"&lt;br /&gt;    Inherits="Additions.Plugins.FindPageFromPagefileId" %&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;h1&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   Find page from pagefile ID&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;h1&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;p&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    PageFiles ID&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;p&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:TextBox&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="90"&lt;/span&gt;  &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="txtPageFileID"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:TextBox&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Button&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="Button1"&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Leta sida"&lt;/span&gt;&lt;br /&gt;    &lt;span class="attr"&gt;onclick&lt;/span&gt;&lt;span class="kwrd"&gt;="Button1_Click"&lt;/span&gt; &lt;span class="attr"&gt;OnClientClick&lt;/span&gt;&lt;span class="kwrd"&gt;="loading()"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="loader"&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;="display:none;"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;image&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;="/UI/Images/loading.gif"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:HyperLink&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="linkPage"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:HyperLink&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;p&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Label&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="msg"&lt;/span&gt; &lt;span class="attr"&gt;ForeColor&lt;/span&gt;&lt;span class="kwrd"&gt;="Red"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:Label&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;p&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text/javascript"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;function&lt;/span&gt; loading() {&lt;br /&gt;            document.getElementById(&lt;span class="str"&gt;'loader'&lt;/span&gt;).style.display = &lt;span class="str"&gt;"block"&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And codebehind:&lt;br /&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{    font-size: small;    color: black;    font-family: Consolas, "Courier New", Courier, Monospace;    background-color: #ffffff;      overflow:auto;    /*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt{    background-color: #f4f4f4;    width: 100%;    margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;[GuiPlugIn(DisplayName = &lt;span class="str"&gt;"Find page from pagefiles ID"&lt;/span&gt;, Area = PlugInArea.ActionWindow,&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Description = &lt;span class="str"&gt;"Find page using specific pagefiles ID"&lt;/span&gt;,&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Url = &lt;span class="str"&gt;"~/UI/Additions/Plugins/FindPageFromPagefileId.ascx"&lt;/span&gt;, SortIndex = 60)]&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; FindPageFromPagefileId : System.Web.UI.UserControl&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Page_Load(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;        {&lt;br /&gt;        }&lt;br /&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Button1_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (txtPageFileID.Text.Length &amp;lt; 1)&lt;br /&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt;;&lt;br /&gt;            IList&amp;lt;PageReference&amp;gt; pages = DataFactory.Instance.GetDescendents(PageReference.RootPage);&lt;br /&gt;            linkPage.Text = &lt;span class="str"&gt;"&amp;lt;span style=\"color:red\"&amp;gt;Page could not be found&amp;lt;/span&amp;gt;"&lt;/span&gt;;&lt;br /&gt;            linkPage.NavigateUrl = &lt;span class="str"&gt;""&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (PageReference pr &lt;span class="kwrd"&gt;in&lt;/span&gt; pages)&lt;br /&gt;            {&lt;br /&gt;                PageData pd = DataFactory.Instance.GetPage(pr);&lt;br /&gt;&lt;br /&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (pd != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; pd.Property[&lt;span class="str"&gt;"PageFolderID"&lt;/span&gt;] != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;br /&gt;                {&lt;br /&gt;                    &lt;span class="kwrd"&gt;object&lt;/span&gt; pagefilesID = pd.Property[&lt;span class="str"&gt;"PageFolderID"&lt;/span&gt;].Value;&lt;br /&gt;&lt;br /&gt;                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (pagefilesID != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; pagefilesID.ToString() == txtPageFileID.Text)&lt;br /&gt;                    {&lt;br /&gt;                        linkPage.Text = &lt;span class="str"&gt;"&amp;amp;raquo; "&lt;/span&gt; + pd.PageName;&lt;br /&gt;                        linkPage.NavigateUrl = pd.LinkURL;&lt;br /&gt;                        &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1814971078104194310-5291698013593042095?l=fredrikvonwerder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fredrikvonwerder.blogspot.com/feeds/5291698013593042095/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/08/episerver-simple-plugin-to-lookup-page.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/5291698013593042095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/5291698013593042095'/><link rel='alternate' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/08/episerver-simple-plugin-to-lookup-page.html' title='EpiServer - simple plugin to lookup page from PageFiles ID'/><author><name>Fredrik von Werder</name><uri>http://www.blogger.com/profile/01228651559278773280</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp2.blogger.com/_4LL379dnJdw/SHwyaCyICeI/AAAAAAAAAGs/Ug_JMd4sysI/S220/freguz_spegel_288.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1814971078104194310.post-4427464446720110920</id><published>2010-06-09T04:13:00.000-07:00</published><updated>2010-06-09T06:27:17.327-07:00</updated><title type='text'>EPiServer 6 does not support HTML 5</title><content type='html'>Just recently I was working in a project as Epi developer for a big site in Sweden.&lt;br /&gt;&lt;br /&gt;We decided to go for HTML 5 since it is the upcoming version of html, xhtml seemed a little too old to us.&lt;br /&gt;&lt;br /&gt;However, EPiServer CMS 6 does &lt;b&gt;not &lt;/b&gt;support HTML 5, you can&lt;b&gt; not validate&lt;/b&gt; a site built with html 5, it is not possible.&lt;br /&gt;&lt;br /&gt;And how is that?&lt;br /&gt;&lt;br /&gt;It is because EPiServer has its own parser that goes through the output when rendering the page, and the parser is designed to follow the XHTML standards only.&lt;br /&gt;&lt;br /&gt;And what happens with HTML5 then?&lt;br /&gt;&lt;br /&gt;The parser moves the &amp;lt;noscript&amp;gt; tag and put it outside the "head" tag, and before the "body" tag. That is not legal in html 5, where you want it to reside in the "head".&lt;br /&gt;&lt;br /&gt;And furthermore I have spoken to EPi support and they say it will not be fixed in any way until a totally new version of EPi comes, ie EPi 7 I guess.&lt;br /&gt;&lt;br /&gt;I thought that they might have added some flag in the site settings in episerver.config that told the parser what markup standard to follow, but it was not something that they would spend hours on to fix.&lt;br /&gt;&lt;br /&gt;Another sign of non-html5-compatibility in EPiServer 6 is that the DOCTYPE is messed up:&lt;br /&gt;&lt;br /&gt;The correct:&lt;br /&gt;&amp;lt;!DOCTYPE html&amp;gt; &lt;br /&gt;becomes:&lt;br /&gt;&amp;lt;!DOCTYPE HTML PUBLIC "" ""&amp;gt;&lt;br /&gt;so we had to make a httpmodule to replace the doctype text.&lt;span class="Apple-style-span" style="color: #6b6b6b;"&gt; &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #6b6b6b;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Conclusion&lt;/span&gt;&lt;br /&gt;Well, sadly, you can never release a html 5 site that validates, using the EPiServer CMS product.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1814971078104194310-4427464446720110920?l=fredrikvonwerder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fredrikvonwerder.blogspot.com/feeds/4427464446720110920/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/06/episerver-6-does-not-support-html-5.html#comment-form' title='4 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/4427464446720110920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/4427464446720110920'/><link rel='alternate' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/06/episerver-6-does-not-support-html-5.html' title='EPiServer 6 does not support HTML 5'/><author><name>Fredrik von Werder</name><uri>http://www.blogger.com/profile/01228651559278773280</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp2.blogger.com/_4LL379dnJdw/SHwyaCyICeI/AAAAAAAAAGs/Ug_JMd4sysI/S220/freguz_spegel_288.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1814971078104194310.post-793552706153521526</id><published>2010-06-07T05:19:00.000-07:00</published><updated>2010-06-07T13:15:30.914-07:00</updated><title type='text'>Never use Episerver controls when listing pages without group Everyone</title><content type='html'>Was really confused why the list was empty, but realized after a while that the Episerver control &lt;b&gt;PageList &lt;/b&gt;automatically removes all pages that the users have no right to see.&lt;br /&gt;&lt;br /&gt;Pretty obvious you might think, but since it is common practice to use EPi pages as dataholders, often in a hidden [Data] structure outside the StartPage tree, and those pages lacks the &lt;b&gt;Everyone &lt;/b&gt;(Read), the developers must remember to use a regular &lt;b&gt;asp Repeater &lt;/b&gt;instead.&lt;br /&gt;&lt;br /&gt;The methods DataFactory.Instance.GetPage() and GetChildren() always return everything without checking any&amp;nbsp; permissions, well thats old information by now (from EPi 5) &lt;br /&gt;&lt;br /&gt;It would be nice if Episerver added some logic to the controls so that you could tell the PageList-control the authorization behaviour needed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1814971078104194310-793552706153521526?l=fredrikvonwerder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fredrikvonwerder.blogspot.com/feeds/793552706153521526/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/06/never-use-episerver-controls-when.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/793552706153521526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/793552706153521526'/><link rel='alternate' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/06/never-use-episerver-controls-when.html' title='Never use Episerver controls when listing pages without group Everyone'/><author><name>Fredrik von Werder</name><uri>http://www.blogger.com/profile/01228651559278773280</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp2.blogger.com/_4LL379dnJdw/SHwyaCyICeI/AAAAAAAAAGs/Ug_JMd4sysI/S220/freguz_spegel_288.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1814971078104194310.post-1051617340917115914</id><published>2010-05-04T08:10:00.000-07:00</published><updated>2010-05-04T08:17:22.716-07:00</updated><title type='text'>Use the old editor in EPiServer CMS 6 instead of TinyMCE</title><content type='html'>Since the TinyMCE editor cannot use the &lt;span style="color: #cc0000;"&gt;Edit Menu Name&lt;/span&gt; functionality for css classes, there are reasons to use the legacy editor instead. Another reason is that "paste unformatted.." is moved to a button wich opens up a dialog where you can paste your formatted text. A little bit annoying I think.&lt;br /&gt;&lt;br /&gt;Well, it is easy to get back to "the good old days" :-)&lt;br /&gt;&lt;br /&gt;In web.config there is a section for this already implemented.&lt;br /&gt;&lt;br /&gt;Just uncomment the second part.&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{ font-size: small; color: black; font-family: Consolas, "Courier New", Courier, Monospace; background-color: #ffffff;        overflow:auto; /*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;&amp;lt;!-- Uncomment the following two lines to get legacy editor in edit mode for PropertyXhtmlString and PropertyLongString--&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;&amp;lt;!--&amp;lt;register type="EPiServer.SpecializedProperties.PropertyXhtmlString, EPiServer" &lt;br /&gt;mappedType="EPiServer.Web.PropertyControls.LegacyPropertyXhtmlStringControl, EPiServer" /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;    &amp;lt;register type="EPiServer.Core.PropertyLongString, EPiServer" &lt;br /&gt;mappedType="EPiServer.Web.PropertyControls.LegacyPropertyXhtmlStringControl, EPiServer" /&amp;gt;--&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1814971078104194310-1051617340917115914?l=fredrikvonwerder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fredrikvonwerder.blogspot.com/feeds/1051617340917115914/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/05/use-old-editor-in-episerver-cms-6.html#comment-form' title='1 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/1051617340917115914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/1051617340917115914'/><link rel='alternate' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/05/use-old-editor-in-episerver-cms-6.html' title='Use the old editor in EPiServer CMS 6 instead of TinyMCE'/><author><name>Fredrik von Werder</name><uri>http://www.blogger.com/profile/01228651559278773280</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp2.blogger.com/_4LL379dnJdw/SHwyaCyICeI/AAAAAAAAAGs/Ug_JMd4sysI/S220/freguz_spegel_288.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1814971078104194310.post-76824848014137782</id><published>2010-04-23T01:34:00.000-07:00</published><updated>2010-04-23T01:42:22.280-07:00</updated><title type='text'>Write to the VPP file system in EPiServer CMS 6</title><content type='html'>A simple method to write to EPiServer's VPP (VirtualPathProvider). &lt;br /&gt;&lt;br /&gt;Note that it is the &lt;b&gt;Native &lt;/b&gt;provider (EPiServer.Web.Hosting.VirtualPathNativeProvider), not the Versioning.&lt;br /&gt;&lt;br /&gt;The method is taking a folder value &lt;i&gt;folder &lt;/i&gt;and builds up the path, and is just using the page ID for filename &lt;i&gt;370.xml&lt;/i&gt;. If the file does not exist, the file is created.&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{ font-size: small; color: black; font-family: Consolas, "Courier New", Courier, Monospace; background-color: #ffffff;        overflow:auto /*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; UpdateRssContent()&lt;br /&gt;{&lt;br /&gt;        PageData rootPage = DataFactory.Instance.GetPage(Settings.TrafficEventContainer);&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; filename = &lt;span class="str"&gt;"/"&lt;/span&gt; + rootPage.PageLink.ID.ToString() + &lt;span class="str"&gt;".xml"&lt;/span&gt;;&lt;br /&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; path = Settings.TrafficEventRssPath.Trim(&lt;span class="str"&gt;'/'&lt;/span&gt;); &lt;span class="rem"&gt;// folder like: RSS&lt;/span&gt;&lt;br /&gt;        VirtualPathUnifiedProvider provider = (VirtualPathUnifiedProvider)VirtualPathHandler.GetProvider(&lt;span class="str"&gt;"SiteGlobalFiles"&lt;/span&gt;);&lt;br /&gt;        UnifiedDirectory dir = provider.GetDirectory(provider.VirtualPathRoot + &lt;span class="str"&gt;"/"&lt;/span&gt; + path) &lt;span class="kwrd"&gt;as&lt;/span&gt; UnifiedDirectory;&lt;br /&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; fullpath = provider.VirtualPathRoot + &lt;span class="str"&gt;"/"&lt;/span&gt; + path + filename;&lt;br /&gt;        UnifiedFile rss = provider.GetFile(fullpath) &lt;span class="kwrd"&gt;as&lt;/span&gt; UnifiedFile;&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (!provider.FileExists(fullpath))&lt;br /&gt;                dir.CreateFile(fullpath);&lt;br /&gt;&lt;br /&gt;        Stream filestr = rss.Open(FileMode.Create, FileAccess.ReadWrite);&lt;br /&gt;&lt;br /&gt;        MemoryStream outstream = TrafficEventUtils.GetRssDocument(DataFactory.Instance.GetPage(Settings.TrafficEventContainer));&lt;br /&gt;        filestr.Write(outstream.GetBuffer(), 0, (&lt;span class="kwrd"&gt;int&lt;/span&gt;)outstream.Length);&lt;br /&gt;&lt;br /&gt;        Debug.Write(Encoding.UTF8.GetString((outstream.ToArray())));&lt;br /&gt;        filestr.Close();&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1814971078104194310-76824848014137782?l=fredrikvonwerder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fredrikvonwerder.blogspot.com/feeds/76824848014137782/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/04/write-to-vpp-file-system-in-episerver.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/76824848014137782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/76824848014137782'/><link rel='alternate' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/04/write-to-vpp-file-system-in-episerver.html' title='Write to the VPP file system in EPiServer CMS 6'/><author><name>Fredrik von Werder</name><uri>http://www.blogger.com/profile/01228651559278773280</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp2.blogger.com/_4LL379dnJdw/SHwyaCyICeI/AAAAAAAAAGs/Ug_JMd4sysI/S220/freguz_spegel_288.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1814971078104194310.post-3029297624084912984</id><published>2010-04-14T06:45:00.000-07:00</published><updated>2010-04-15T04:48:52.406-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EPiServer'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>EPiServer tab menu with multiple languages</title><content type='html'>Sometimes you want to render a menu with multiple language links, depending on the pages' lang setting, typical example is a tab menu in the master language (in this case Swedish 'sv') and the last tab in English for international visitors, the english page is only available in english and we do dont want it to be a link with the master language. And all pages comes form the same PageDataCollection, that is the problem actually, mixing cultures in the same menulist.&lt;br /&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{ font-size: small; color: black; font-family: Consolas, "Courier New", Courier, Monospace; background-color: #ffffff; overflow:auto; /*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;Tab menu markup:&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;EPiServer:MenuList&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="Menu"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;HeaderTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;nav&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="tabMenu"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ul&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;HeaderTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ItemTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;li&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;# GetLink(Container.CurrentPage, &lt;span class="str"&gt;""&lt;/span&gt;, &lt;span class="str"&gt;"span"&lt;/span&gt;) &lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;li&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ItemTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SelectedTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;li&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="current"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;# GetLink(Container.CurrentPage, &lt;span class="str"&gt;""&lt;/span&gt;, &lt;span class="str"&gt;"span"&lt;/span&gt;) &lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;li&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;SelectedTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;FooterTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ul&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;nav&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;FooterTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;EPiServer:MenuList&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;The tab menu .cs:&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; TabMenu : UserControlsBase&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnLoad(System.EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;base&lt;/span&gt;.OnLoad(e);&lt;br /&gt;&lt;br /&gt;            CultureInfo ci = EPiServer.Globalization.ContentLanguage.PreferredCulture;&lt;br /&gt;            EPiServer.Globalization.ContentLanguage.PreferredCulture = &lt;span class="kwrd"&gt;new&lt;/span&gt; System.Globalization.CultureInfo(&lt;span class="str"&gt;"sv"&lt;/span&gt;);&lt;br /&gt;            &lt;br /&gt;&lt;br /&gt;            Menu.PageLink = PageReference.StartPage;&lt;br /&gt;            Menu.PageLoader.GetChildrenCallback = &lt;span class="kwrd"&gt;new&lt;/span&gt; HierarchicalPageLoader.GetChildrenMethod(LoadChildren);&lt;br /&gt;            Menu.DataBind();&lt;br /&gt;&lt;br /&gt;            EPiServer.Globalization.ContentLanguage.PreferredCulture = ci;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// Creates the collection for the main menu, adding the startpage&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; PageDataCollection LoadChildren(PageReference pageLink)&lt;br /&gt;        {&lt;br /&gt;            PageDataCollection pages = DataFactory.Instance.GetChildren(pageLink, LanguageSelector.AutoDetect(&lt;span class="kwrd"&gt;true&lt;/span&gt;));&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; pages;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// Gets or sets the MenuList for this control&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; MenuList MenuList&lt;br /&gt;        {&lt;br /&gt;            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; Menu; }&lt;br /&gt;            set { Menu = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }&lt;/pre&gt;&lt;br /&gt;The method rendering the links:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetLink(PageData pd, &lt;span class="kwrd"&gt;string&lt;/span&gt; CssClass, &lt;span class="kwrd"&gt;string&lt;/span&gt; WrapperElement)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; ahref = &lt;span class="str"&gt;@"&amp;lt;a href="&lt;/span&gt;&lt;span class="str"&gt;"{0}"&lt;/span&gt;&lt;span class="str"&gt;"{1}{3}&amp;gt;{5}&amp;lt;{4}&amp;gt;{2}&amp;lt;/{4}&amp;gt;{6}&amp;lt;/a&amp;gt;"&lt;/span&gt;;&lt;br /&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; title = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; classe = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; wrapper = &lt;span class="str"&gt;"span"&lt;/span&gt;;&lt;br /&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; current_element1 = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; current_element2 = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(CssClass))&lt;br /&gt;                classe = &lt;span class="str"&gt;" class=\""&lt;/span&gt; + CssClass + &lt;span class="str"&gt;"\""&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (em.IsValue(pd, &lt;span class="str"&gt;"TitleText"&lt;/span&gt;))&lt;br /&gt;                title = &lt;span class="str"&gt;" title=\""&lt;/span&gt; + pd[&lt;span class="str"&gt;"TitleText"&lt;/span&gt;] + &lt;span class="str"&gt;"\""&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(WrapperElement))&lt;br /&gt;            {&lt;br /&gt;                wrapper = WrapperElement;&lt;br /&gt;&lt;br /&gt;                current_element1 = &lt;span class="str"&gt;"&amp;lt;"&lt;/span&gt; + wrapper + &lt;span class="str"&gt;"&amp;gt;"&lt;/span&gt;;&lt;br /&gt;                current_element2 = &lt;span class="str"&gt;"&amp;lt;/"&lt;/span&gt; + wrapper + &lt;span class="str"&gt;"&amp;gt;"&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; url = pd.LinkURL;&lt;br /&gt;            PageData p2 = DataFactory.Instance.GetPage(pd.PageLink, LanguageSelector.Fallback(&lt;span class="str"&gt;"en"&lt;/span&gt;, &lt;span class="kwrd"&gt;true&lt;/span&gt;));&lt;br /&gt;&lt;br /&gt;            CultureInfo ci = EPiServer.Globalization.ContentLanguage.PreferredCulture;&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (p2 != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; p2.LanguageBranch.Contains(&lt;span class="str"&gt;"en"&lt;/span&gt;))&lt;br /&gt;            {&lt;br /&gt;                EPiServer.Globalization.ContentLanguage.PreferredCulture = &lt;span class="kwrd"&gt;new&lt;/span&gt; System.Globalization.CultureInfo(&lt;span class="str"&gt;"en"&lt;/span&gt;);&lt;br /&gt;                url = p2.LinkURL;&lt;br /&gt;                EPiServer.Globalization.ContentLanguage.PreferredCulture = ci;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(ahref, url, title, pd.PageName, classe, wrapper, current_element1, current_element2);&lt;br /&gt;        }&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1814971078104194310-3029297624084912984?l=fredrikvonwerder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fredrikvonwerder.blogspot.com/feeds/3029297624084912984/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/04/episerver-tab-menu-with-multiple.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/3029297624084912984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/3029297624084912984'/><link rel='alternate' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/04/episerver-tab-menu-with-multiple.html' title='EPiServer tab menu with multiple languages'/><author><name>Fredrik von Werder</name><uri>http://www.blogger.com/profile/01228651559278773280</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp2.blogger.com/_4LL379dnJdw/SHwyaCyICeI/AAAAAAAAAGs/Ug_JMd4sysI/S220/freguz_spegel_288.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1814971078104194310.post-5313558746197734193</id><published>2010-04-14T05:01:00.000-07:00</published><updated>2010-04-14T21:28:23.261-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EPiServer'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>EPiServer CMS 6 - custom property with radiobuttonlist</title><content type='html'>A simple class for using a radiobuttonlist in a custom property in EPiserver CMS 6.&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{ font-size: small; color: black; font-family: Consolas, "Courier New", Courier, Monospace; background-color: #ffffff; overflow:auto; /*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;pre class="csharpcode"&gt;[Serializable]&lt;br /&gt;    [PageDefinitionTypePlugIn(DisplayName = &lt;span class="str"&gt;"Traffic status"&lt;/span&gt;)]&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; TrafficStatusProperty : EPiServer.Core.PropertyString&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; IPropertyControl CreatePropertyControl()&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; TrafficStatusPropertyType();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; TrafficStatusPropertyType : EPiServer.Web.PropertyControls.PropertyStringControl&lt;br /&gt;        {&lt;br /&gt;            RadioButtonList inputControl;&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetupEditControls()&lt;br /&gt;            {&lt;br /&gt;                &lt;span class="kwrd"&gt;base&lt;/span&gt;.SetupEditControls();&lt;br /&gt;&lt;br /&gt;                TextBox ctrl = &lt;span class="kwrd"&gt;this&lt;/span&gt;.EditControl;&lt;br /&gt;                ctrl.Attributes.Add(&lt;span class="str"&gt;"style"&lt;/span&gt;, &lt;span class="str"&gt;"display:none"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;                inputControl = &lt;span class="kwrd"&gt;new&lt;/span&gt; RadioButtonList();&lt;br /&gt;          &lt;br /&gt;                inputControl.Items.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; ListItem(Constants.STATUSNAME_GOOD));&lt;br /&gt;                inputControl.Items.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; ListItem(Constants.STATUSNAME_MINOR));&lt;br /&gt;                inputControl.Items.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; ListItem(Constants.STATUSTEXT_MAJOR));&lt;br /&gt;                inputControl.SelectedValue = &lt;span class="kwrd"&gt;this&lt;/span&gt;.PropertyData.Value &lt;span class="kwrd"&gt;as&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;                &lt;span class="kwrd"&gt;this&lt;/span&gt;.EditControl.Parent.Controls.Add(inputControl);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ApplyEditChanges()&lt;br /&gt;            {&lt;br /&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (!String.IsNullOrEmpty(inputControl.SelectedItem.Value))&lt;br /&gt;                {&lt;br /&gt;                    SetValue(inputControl.SelectedItem.Value);&lt;br /&gt;                }&lt;br /&gt;            } &lt;br /&gt;        }&lt;br /&gt;    }&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1814971078104194310-5313558746197734193?l=fredrikvonwerder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fredrikvonwerder.blogspot.com/feeds/5313558746197734193/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/04/episerver-cms-6-custom-property-with.html#comment-form' title='1 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/5313558746197734193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/5313558746197734193'/><link rel='alternate' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/04/episerver-cms-6-custom-property-with.html' title='EPiServer CMS 6 - custom property with radiobuttonlist'/><author><name>Fredrik von Werder</name><uri>http://www.blogger.com/profile/01228651559278773280</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp2.blogger.com/_4LL379dnJdw/SHwyaCyICeI/AAAAAAAAAGs/Ug_JMd4sysI/S220/freguz_spegel_288.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1814971078104194310.post-8331283555461751893</id><published>2010-02-19T04:02:00.000-08:00</published><updated>2010-04-15T00:11:34.145-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EPiServer'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>EPiServer custom property example</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_4LL379dnJdw/S35_URfDFqI/AAAAAAAAAMk/2GtqrSItRaY/s1600-h/epi_properties.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_4LL379dnJdw/S35_URfDFqI/AAAAAAAAAMk/2GtqrSItRaY/s320/epi_properties.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;Here is a brief example of a custom property in EPiServer CMS. Not a tutorial, just a code snippet to begin with.&lt;br /&gt;&lt;br /&gt;This one have a simpe textbox ("PropertyControls.PropertyTextBoxControlBase"), but view your intellisense and you see you can use a bunch of other types, se screenshot.&lt;br /&gt;&lt;br /&gt;This also have a button "..." which opens a new dialog where you do your interface for client to pick the value.&lt;br /&gt;&lt;br /&gt;And then that dialog uses &lt;b&gt;window.opener&lt;/b&gt; to call a function defined in the codebehind to set the value for the property:&lt;br /&gt;&lt;pre style="background: none repeat scroll 0% 0% rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 40%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; &amp;lt;script type="text/javascript"&amp;gt;  &lt;br /&gt; function sendBack()  &lt;br /&gt; {  &lt;br /&gt;   window.opener.addValue(document.getElementById('sel_value').value);  &lt;br /&gt;   window.close();  &lt;br /&gt; }  &lt;br /&gt; &amp;lt;/script&amp;gt;  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As easy as it can be :-)&lt;br /&gt;&lt;br /&gt;Class:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: none repeat scroll 0% 0% rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; using System;  &lt;br /&gt; using System.Collections.Generic;  &lt;br /&gt; using System.Text;  &lt;br /&gt; using EPiServer;  &lt;br /&gt; using EPiServer.Core;  &lt;br /&gt; using EPiServer.DataAbstraction;  &lt;br /&gt; using EPiServer.PlugIn;  &lt;br /&gt; using EPiServer.Web.PropertyControls;  &lt;br /&gt; using System.Web.UI.WebControls;  &lt;br /&gt; using System.Web.UI;  &lt;br /&gt; using System.Drawing;  &lt;br /&gt; using System.Web.UI.HtmlControls;  &lt;br /&gt; namespace EPiServer.Templates.Main.Library  &lt;br /&gt; {  &lt;br /&gt;   [Serializable]  &lt;br /&gt;   [PageDefinitionTypePlugIn(DisplayName = "P360 process selector")]  &lt;br /&gt;   public class EdokSelectorProperty : EPiServer.Core.PropertyString  &lt;br /&gt;   {  &lt;br /&gt;     public override IPropertyControl CreatePropertyControl()  &lt;br /&gt;     {  &lt;br /&gt;       return new EdokSelectorPropertyType();  &lt;br /&gt;     }  &lt;br /&gt;   }  &lt;br /&gt;   public class EdokSelectorPropertyType : EPiServer.Web.PropertyControls.PropertyTextBoxControlBase  &lt;br /&gt;   {  &lt;br /&gt;     protected override void SetupEditControls()  &lt;br /&gt;     {  &lt;br /&gt;       base.SetupEditControls();   &lt;br /&gt;       TextBox inputControl = this.EditControl;  &lt;br /&gt;       //inputControl.Width = 100;  &lt;br /&gt;       inputControl.Attributes.Add("class", "episize240");  &lt;br /&gt;       inputControl.Attributes.Add("onfocus", "blur();");  &lt;br /&gt;       inputControl.Text = this.PropertyData.Value as string;  &lt;br /&gt;       Control ctrl = inputControl.Parent;  &lt;br /&gt;       Literal js = new Literal();  &lt;br /&gt;       js.Text = "&amp;lt;script&amp;gt;function addValue(val){ document.getElementById('" + inputControl.ClientID + "').value = val;}&amp;lt;/script&amp;gt;";  &lt;br /&gt;       ctrl.Controls.Add(js);  &lt;br /&gt;       HtmlButton btn = new HtmlButton();  &lt;br /&gt;       btn.InnerText = "...";  &lt;br /&gt;       btn.Attributes.Add("onclick", "window.open('/Templates/Main/Pages/EdokSelectorControl.aspx?selectedvalue=' + document.getElementById('" + inputControl.ClientID + "').value,'namn','top=300,left=300,width=450,height=400,resizable=yes,status=yes');");  &lt;br /&gt;       ctrl.Controls.Add(btn);  &lt;br /&gt;     }  &lt;br /&gt;   }  &lt;br /&gt; }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1814971078104194310-8331283555461751893?l=fredrikvonwerder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fredrikvonwerder.blogspot.com/feeds/8331283555461751893/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/02/episerver-custom-property-example.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/8331283555461751893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/8331283555461751893'/><link rel='alternate' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/02/episerver-custom-property-example.html' title='EPiServer custom property example'/><author><name>Fredrik von Werder</name><uri>http://www.blogger.com/profile/01228651559278773280</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp2.blogger.com/_4LL379dnJdw/SHwyaCyICeI/AAAAAAAAAGs/Ug_JMd4sysI/S220/freguz_spegel_288.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4LL379dnJdw/S35_URfDFqI/AAAAAAAAAMk/2GtqrSItRaY/s72-c/epi_properties.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1814971078104194310.post-6340430298959770460</id><published>2010-02-16T02:18:00.001-08:00</published><updated>2010-02-19T05:18:39.517-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Looping through xml building a TreeView using C#</title><content type='html'>This code is for iterating the xml all the way down, this is for a 4 level deep structure but can easily be adjusted, to insert it into a TreeView, in .Net.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Xml:&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;br /&gt;&amp;lt;data&amp;gt;&lt;br /&gt;  &amp;lt;process name="Process_1"&amp;gt;&lt;br /&gt;    &amp;lt;processPart name="Part11" /&amp;gt;&lt;br /&gt;    &amp;lt;processPart name="part12"&amp;gt;&lt;br /&gt;      &amp;lt;workflow name="WorkFlowz111" /&amp;gt;&lt;br /&gt;    &amp;lt;/processPart&amp;gt;&lt;br /&gt;  &amp;lt;/process&amp;gt;&lt;br /&gt;  &amp;lt;process name="Process_2"&amp;gt;&lt;br /&gt;      &amp;lt;processPart name="Part21" /&amp;gt;&lt;br /&gt;      &amp;lt;processPart name="part22"&amp;gt;        &lt;br /&gt;        &amp;lt;workflow name="WorkFlowz221" /&amp;gt;&lt;br /&gt;      &amp;lt;/processPart&amp;gt;    &lt;br /&gt;  &amp;lt;/process&amp;gt;&lt;br /&gt;&amp;lt;/data&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Methods:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: none repeat scroll 0% 0% rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; public TreeView GetTreeViewFromXML(TreeView tree)  &lt;br /&gt; {  &lt;br /&gt;   TreeNode node1 = new TreeNode("Processer","");  &lt;br /&gt;   node1.Expanded = false;  &lt;br /&gt;   XmlDocument xDoc = new XmlDocument();  &lt;br /&gt;   xDoc.LoadXml(ep.GetProcessStructureXML());  &lt;br /&gt;   tree.Nodes.Add(GetTreeNodeFromSiblings(xDoc.ChildNodes[1], node1, selectedvalue));  &lt;br /&gt;   return tree;  &lt;br /&gt; }  &lt;br /&gt; private TreeNode GetTreeNodeFromSiblings(XmlNode next, TreeNode node)  &lt;br /&gt; {  &lt;br /&gt;   foreach (XmlNode nod in next.ChildNodes)  &lt;br /&gt;   {  &lt;br /&gt;     TreeNode tn = new TreeNode(nod.Attributes["name"].Value,  &lt;br /&gt;       nod.Attributes["name"].Value);  &lt;br /&gt;     if (nod.HasChildNodes)  &lt;br /&gt;       node.ChildNodes.Add(GetTreeNodeFromSiblings(nod.CloneNode(true), tn));  &lt;br /&gt;     else  &lt;br /&gt;       node.ChildNodes.Add(tn);  &lt;br /&gt;   }  &lt;br /&gt;   return node;  &lt;br /&gt; }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;And for the aspx codebehind C#, need to select current value and expand the tree down that path.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: none repeat scroll 0% 0% rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; protected void Page_Load(object sender, EventArgs e)  &lt;br /&gt; {  &lt;br /&gt;   if (!IsPostBack)  &lt;br /&gt;   {  &lt;br /&gt;     Tree1 = em.GetTreeViewFromXML(Tree1);  &lt;br /&gt;     if (Request["selectedvalue"] != null)  &lt;br /&gt;     {  &lt;br /&gt;       selectedvaluepath = Request["selectedvalue"].ToString();  &lt;br /&gt;       sel_value.Value = selectedvaluepath;  &lt;br /&gt;       TreeNode noded = Tree1.FindNode(selectedvaluepath);  &lt;br /&gt;       if (noded != null)  &lt;br /&gt;       {  &lt;br /&gt;         noded.Select();  &lt;br /&gt;         noded.Expanded = false;  &lt;br /&gt;         TreeNode parent = ExpandParent(noded);  &lt;br /&gt;         TreeNode parent2 = ExpandParent(parent);  &lt;br /&gt;         TreeNode parent3 = ExpandParent(parent2);  &lt;br /&gt;         btnSendBack.Disabled = false;  &lt;br /&gt;       }  &lt;br /&gt;     }  &lt;br /&gt;   }  &lt;br /&gt; }  &lt;br /&gt; protected void tree_selected(object sender, EventArgs e)  &lt;br /&gt; {  &lt;br /&gt;   btnSendBack.Disabled = true;  &lt;br /&gt;   string t = Tree1.SelectedNode.ValuePath;  &lt;br /&gt;   if (!string.IsNullOrEmpty(t))  &lt;br /&gt;   {  &lt;br /&gt;     sel_value.Value = t;  &lt;br /&gt;     btnSendBack.Disabled = false;  &lt;br /&gt;   }  &lt;br /&gt; }  &lt;br /&gt; private TreeNode ExpandParent(TreeNode node)  &lt;br /&gt; {  &lt;br /&gt;   if (node == null)  &lt;br /&gt;     return null;  &lt;br /&gt;   TreeNode parent = node.Parent;  &lt;br /&gt;   if (parent != null)  &lt;br /&gt;   {  &lt;br /&gt;     parent.Expanded = true;  &lt;br /&gt;     return parent;  &lt;br /&gt;   }  &lt;br /&gt;   return null;  &lt;br /&gt; }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1814971078104194310-6340430298959770460?l=fredrikvonwerder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fredrikvonwerder.blogspot.com/feeds/6340430298959770460/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/02/looping-through-xml-building-treeview.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/6340430298959770460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/6340430298959770460'/><link rel='alternate' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/02/looping-through-xml-building-treeview.html' title='Looping through xml building a TreeView using C#'/><author><name>Fredrik von Werder</name><uri>http://www.blogger.com/profile/01228651559278773280</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp2.blogger.com/_4LL379dnJdw/SHwyaCyICeI/AAAAAAAAAGs/Ug_JMd4sysI/S220/freguz_spegel_288.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1814971078104194310.post-1909672187186890977</id><published>2010-02-16T00:18:00.000-08:00</published><updated>2010-02-19T05:19:00.957-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Xml'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Traverse xml into dropdown list using C#</title><content type='html'>This code is for iterating the xml all the way down, to insert it into a dropdown list, with the level indent. Very basic, just the core functionality.&lt;br /&gt;&lt;br /&gt;A couple of methods needed. Some stuff are not included, like fetching the XML.&lt;br /&gt;&lt;br /&gt;Xml looks like:&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;br /&gt;&amp;lt;data&amp;gt;&lt;br /&gt;  &amp;lt;process name="Process_1"&amp;gt;&lt;br /&gt;    &amp;lt;processPart name="Part11" /&amp;gt;&lt;br /&gt;    &amp;lt;processPart name="part12"&amp;gt;&lt;br /&gt;      &amp;lt;workflow name="WorkFlowz111" /&amp;gt;&lt;br /&gt;    &amp;lt;/processPart&amp;gt;&lt;br /&gt;  &amp;lt;/process&amp;gt;&lt;br /&gt;  &amp;lt;process name="Process_2"&amp;gt;&lt;br /&gt;      &amp;lt;processPart name="Part21" /&amp;gt;&lt;br /&gt;      &amp;lt;processPart name="part22"&amp;gt;        &lt;br /&gt;        &amp;lt;workflow name="WorkFlowz221" /&amp;gt;&lt;br /&gt;      &amp;lt;/processPart&amp;gt;    &lt;br /&gt;  &amp;lt;/process&amp;gt;&lt;br /&gt;&amp;lt;/data&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Methods:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: none repeat scroll 0% 0% rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; public ListItemCollection GetListFromXML()  &lt;br /&gt; {  &lt;br /&gt;   int level = 0;  &lt;br /&gt;   ListItemCollection lic = new ListItemCollection();  &lt;br /&gt;   XmlDocument xDoc = new XmlDocument();  &lt;br /&gt;   xDoc.LoadXml(ep.GetProcessStructureXML());  &lt;br /&gt;   lic = GetListFromSiblings(xDoc.ChildNodes[1], lic, level);        &lt;br /&gt;   return lic;  &lt;br /&gt; }  &lt;br /&gt; private ListItemCollection GetListFromSiblings(XmlNode next, ListItemCollection coll, int level)  &lt;br /&gt; {  &lt;br /&gt;   level++;  &lt;br /&gt;   foreach (XmlNode nod in next.ChildNodes)  &lt;br /&gt;   {  &lt;br /&gt;     ListItem li = new ListItem(GetSpacer(level) + nod.Attributes["name"].Value,   &lt;br /&gt;       nod.Attributes["name"].Value + "" + level);  &lt;br /&gt;     li.Attributes.Add("class","level" + level);  &lt;br /&gt;     coll.Add(li);  &lt;br /&gt;     if (nod.HasChildNodes)  &lt;br /&gt;       coll = GetListFromSiblings(nod.CloneNode(true), coll, level);  &lt;br /&gt;   }  &lt;br /&gt;   return coll;  &lt;br /&gt; }  &lt;br /&gt; private string GetSpacer(int lev)  &lt;br /&gt; {  &lt;br /&gt;   StringBuilder sb = new StringBuilder("");  &lt;br /&gt;   for (int i = 0; i &amp;lt; lev; i++)  &lt;br /&gt;   {  &lt;br /&gt;     sb.Append("-");  &lt;br /&gt;   }  &lt;br /&gt;   return sb.ToString() + " ";  &lt;br /&gt; }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1814971078104194310-1909672187186890977?l=fredrikvonwerder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fredrikvonwerder.blogspot.com/feeds/1909672187186890977/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/02/traverse-xml-using-c.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/1909672187186890977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/1909672187186890977'/><link rel='alternate' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/02/traverse-xml-using-c.html' title='Traverse xml into dropdown list using C#'/><author><name>Fredrik von Werder</name><uri>http://www.blogger.com/profile/01228651559278773280</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp2.blogger.com/_4LL379dnJdw/SHwyaCyICeI/AAAAAAAAAGs/Ug_JMd4sysI/S220/freguz_spegel_288.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1814971078104194310.post-6138862907051819797</id><published>2010-01-19T01:43:00.000-08:00</published><updated>2010-02-19T05:19:20.640-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EPiServer'/><category scheme='http://www.blogger.com/atom/ns#' term='Meridium'/><title type='text'>Meridium Process Map and default template</title><content type='html'>First, create a template that you are pleased with, in the Process Map application, and just save it, and save and puvlish the page.&lt;br /&gt;&lt;br /&gt;Second, go to the folder (specified in web.config, key "XMLDataPath") , look in the folder "ProcessMap_published" for your .png that looks familiar. Memorize that GUID.&lt;br /&gt;&lt;br /&gt;Then goto folder "ProcessMap_XMLDefinitions" and rename that &amp;lt;GUID&amp;gt;.xml file to for example template1.xml.&lt;br /&gt;&lt;br /&gt;Then in Global.asax.cs, add event:&lt;br /&gt;DataFactory.Instance.LoadedDefaultPageData += new PageEventHandler(Instance_LoadedDefaultPageData);&lt;br /&gt;&lt;br /&gt;and the methods:&lt;br /&gt;&lt;pre style="background: none repeat scroll 0% 0% rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt;  //ProcessMap logic for creating page and template to be used  &lt;br /&gt; void Instance_LoadedDefaultPageData(object sender, PageEventArgs e)  &lt;br /&gt; {  &lt;br /&gt;   // skip all other page types than processmap page, assuming this pagetype is named process..something  &lt;br /&gt;   if (!e.Page.PageTypeName.ToLower().Contains("process"))  &lt;br /&gt;     return;  &lt;br /&gt;   bool hasProcessMap = false;  &lt;br /&gt;   string processMapPropertyName = "";  &lt;br /&gt;   foreach (PropertyData py in e.Page.Property)  &lt;br /&gt;   {  &lt;br /&gt;     if (py.GetType().ToString() == "ProcessMap.EPiServerCMS.Property.PropertyProcessMap")  &lt;br /&gt;     {  &lt;br /&gt;       hasProcessMap = true;  &lt;br /&gt;       processMapPropertyName = py.Name;  &lt;br /&gt;     }  &lt;br /&gt;   }  &lt;br /&gt;   if (!hasProcessMap)  &lt;br /&gt;     return;  &lt;br /&gt;   // If property holds any value, dont overwrite it  &lt;br /&gt;   if (e.Page.Property[processMapPropertyName].Value != null &amp;amp;&amp;amp; !string.IsNullOrEmpty(e.Page.Property[processMapPropertyName].Value.ToString()))  &lt;br /&gt;     return;  &lt;br /&gt;   e.Page.Property[processMapPropertyName].Value = CreateProcessMapTemplateCopy("template1.xml");  &lt;br /&gt; }  &lt;br /&gt; //copies the template xml into a new GUID  &lt;br /&gt; string CreateProcessMapTemplateCopy(string templatename)  &lt;br /&gt; {  &lt;br /&gt;   string path = Utilities.GetAppSetting("XMLDataPath");  &lt;br /&gt;   FileInfo file = new FileInfo(path + "\\" + templatename);  &lt;br /&gt;   string newfilename = System.Guid.NewGuid() + ".xml";  &lt;br /&gt;   string newfile = path + "\\" + newfilename;  &lt;br /&gt;   if (!file.Exists)  &lt;br /&gt;     return string.Empty;  &lt;br /&gt;   FileInfo filenew = file.CopyTo(newfile, true);  &lt;br /&gt;   return newfilename;  &lt;br /&gt; }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;An there you go!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1814971078104194310-6138862907051819797?l=fredrikvonwerder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fredrikvonwerder.blogspot.com/feeds/6138862907051819797/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/01/meridium-process-map-and-default.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/6138862907051819797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/6138862907051819797'/><link rel='alternate' type='text/html' href='http://fredrikvonwerder.blogspot.com/2010/01/meridium-process-map-and-default.html' title='Meridium Process Map and default template'/><author><name>Fredrik von Werder</name><uri>http://www.blogger.com/profile/01228651559278773280</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp2.blogger.com/_4LL379dnJdw/SHwyaCyICeI/AAAAAAAAAGs/Ug_JMd4sysI/S220/freguz_spegel_288.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1814971078104194310.post-923608502793115731</id><published>2008-10-22T13:43:00.001-07:00</published><updated>2010-02-16T05:57:00.574-08:00</updated><title type='text'>ASP.NET Extension - Translate a String</title><content type='html'>Using Google translations, translate a string to (almost) any language is a simple solution.&lt;br /&gt;Since it is an extension, it will be available like myString.Translate("sv","en"); but you can of course use it as a regular method by removing the arg 'this string s'.&lt;br /&gt;Note that the web server must be able to make web requests to google.com.&lt;br /&gt;You can use both codes like "en" or the culture and lang "sv-SE" version (takes the first one)&lt;br /&gt;&lt;br /&gt;It makes a call to Google API and ask for translation, a WebClient is used and it downloads the string translated.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;C# code:&lt;/h3&gt;&lt;br /&gt;&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt; using System;  &lt;br /&gt; using System.Text;  &lt;br /&gt; using System.Net;  &lt;br /&gt;     &lt;br /&gt;   &lt;br /&gt; public static string Translate(this string s, string langFrom, string langTo)  &lt;br /&gt; {  &lt;br /&gt; if (String.IsNullOrEmpty(s))  &lt;br /&gt; return String.Empty;  &lt;br /&gt;   &lt;br /&gt; if (langFrom.Contains("-"))  &lt;br /&gt; langFrom = langFrom.Split('-')[0];  &lt;br /&gt;   &lt;br /&gt; if (langTo.Contains("-"))  &lt;br /&gt; langTo = langTo.Split('-')[0];  &lt;br /&gt;   &lt;br /&gt; string address = string.Format("http://www.google.com/translate_t?hl=en&amp;amp;ie=UTF8&amp;amp;text={0}&amp;amp;langpair={1}%7C{2}", s, langFrom, langTo);  &lt;br /&gt;&lt;br /&gt; string html = new WebClient().DownloadString(address);  &lt;br /&gt; string block = html.Substring(html.IndexOf("id=result_box") + 0x18, 500);  &lt;br /&gt; string phrase = block.Substring(0, block.IndexOf("&amp;lt;/div"));  &lt;br /&gt; return phrase;  &lt;br /&gt; }   &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1814971078104194310-923608502793115731?l=fredrikvonwerder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fredrikvonwerder.blogspot.com/feeds/923608502793115731/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://fredrikvonwerder.blogspot.com/2008/10/aspnet-extension-translate-string.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/923608502793115731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/923608502793115731'/><link rel='alternate' type='text/html' href='http://fredrikvonwerder.blogspot.com/2008/10/aspnet-extension-translate-string.html' title='ASP.NET Extension - Translate a String'/><author><name>Fredrik von Werder</name><uri>http://www.blogger.com/profile/01228651559278773280</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp2.blogger.com/_4LL379dnJdw/SHwyaCyICeI/AAAAAAAAAGs/Ug_JMd4sysI/S220/freguz_spegel_288.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1814971078104194310.post-2008327184904429165</id><published>2008-10-02T11:06:00.000-07:00</published><updated>2010-02-19T05:20:41.626-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EPiServer'/><category scheme='http://www.blogger.com/atom/ns#' term='Kerberos'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>EPiServer Authentication using Kerberos and Custom App Pool Identity</title><content type='html'>This article describes how to get Kerberos handshake to work when the website is running with a pre configured account. It will only happen if you are browsing to the "computer's name", otherwise NTLM is used, which is the most common scenario.   &lt;br /&gt;&lt;br /&gt;I recently had a hard time to get Windows authentication working properly.   &lt;br /&gt;&lt;br /&gt;I installed a standard EPiServer CMS SP3, with Authentication mode "windows", and configured the site to use integrated security against the Sql Server.   &lt;br /&gt;&lt;br /&gt;This was going to be the intranet site, or at least the test site for the intranet.   &lt;br /&gt;&lt;br /&gt;The window dialog appeared and despite supplying all kinds of usernames and passwords, the site refused to accept my credentials.   &lt;br /&gt;&lt;br /&gt;What has happened? This is usually working fine out of the box with a minimum of necessary brain activity.   &lt;br /&gt;&lt;br /&gt;It took half a day before I found the solution, and I hope that anyone that encounter the same problem, will find some help here.   &lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;   &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%;"&gt;&lt;b&gt;Problem&lt;/b&gt;       &lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;The problem was that the site (Application pool) was running under a custom identity, and that browsing was against the computer name, which means that &lt;b&gt;Kerberos &lt;/b&gt;authentication is being used.     &lt;br /&gt;&lt;br /&gt;Browsing with the IP or the DNS alias, was no problem at all, since NTLM handshake works fine. Single sign on without any hesitation.     &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%;"&gt;&lt;b&gt;Solution&lt;/b&gt; &lt;/span&gt;    &lt;br /&gt;&lt;br /&gt;Log on the webserver using a &lt;b&gt;domain admin account&lt;/b&gt;.     &lt;br /&gt;&lt;br /&gt;Download the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=5fd831fd-ab77-46a3-9cfe-ff01d29e5c46&amp;amp;displaylang=en"&gt;SPN tool&lt;/a&gt;, and install it.     &lt;br /&gt;&lt;br /&gt;Start command prompt in the same directory as you installed setspn.     &lt;br /&gt;&lt;br /&gt;Use the setspn command to authenticate the account on the server/domain.     &lt;br /&gt;Syntax:     &lt;br /&gt;setspn -A HTTP/&amp;lt;servername&amp;gt; &amp;lt;domain&amp;gt;\&amp;lt;account&amp;gt;     &lt;br /&gt;&lt;br /&gt;example:     &lt;br /&gt;"setspn -A HTTP/srv01 domain1\episervice"     &lt;br /&gt;"setspn -A HTTP/srv01.mycomppany.com domain1\episervice"     &lt;br /&gt;etc     &lt;br /&gt;&lt;br /&gt;You must authenticate all hosts, otherwise it won't work.     &lt;br /&gt;&lt;br /&gt;You can list all hosts with "setspn -l &amp;lt;servername&amp;gt;"     &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Note that this is only necessary to do when you run the website under a pre configured account, in other more common scenarios, the Kerberos authentication will work just fine.     &lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1814971078104194310-2008327184904429165?l=fredrikvonwerder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fredrikvonwerder.blogspot.com/feeds/2008327184904429165/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://fredrikvonwerder.blogspot.com/2008/10/episerver-authentication-using-kerberos.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/2008327184904429165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/2008327184904429165'/><link rel='alternate' type='text/html' href='http://fredrikvonwerder.blogspot.com/2008/10/episerver-authentication-using-kerberos.html' title='EPiServer Authentication using Kerberos and Custom App Pool Identity'/><author><name>Fredrik von Werder</name><uri>http://www.blogger.com/profile/01228651559278773280</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp2.blogger.com/_4LL379dnJdw/SHwyaCyICeI/AAAAAAAAAGs/Ug_JMd4sysI/S220/freguz_spegel_288.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1814971078104194310.post-4771877376295248303</id><published>2008-08-15T10:53:00.000-07:00</published><updated>2010-02-16T02:43:39.212-08:00</updated><title type='text'>Edit language xml files - EPiServer CMS 5</title><content type='html'>Technorati-taggar: &lt;a href="http://technorati.com/tags/EPiServer"&gt;EPiServer&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Today I came across a small issue with the language xml files that developers create for each project.&lt;br /&gt;&lt;br /&gt;The customer just wants to edit the text translations, not adding elements or changing anything in the xml schema. &lt;br /&gt;&lt;br /&gt;This seems like a pretty useful thing for an editor, but there isn't anything available in EPi for this. I looked at the EPiCode's ManageLanguages but it was not capable of editing single files in a simple way (you must always compare 2 xml files), and I also couldn't get it to load up the custom lang files.&lt;br /&gt;&lt;br /&gt;So I built this little feature, very easy to use.&lt;br /&gt;&lt;br /&gt;Area: PluginArea.ActionWindow&lt;br /&gt;&lt;br /&gt;Folder: it is now looking for the files in /lang folder (easily changed in .cs file)&lt;br /&gt;&lt;br /&gt;The xml is parsed and the dropdownlist is populated with all elements containing a value in elements innertext&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Requirements:&lt;br /&gt;&lt;br /&gt;in the codebehind in function 'LoadFiles()', resides the check for which file to add to the list, change that to your filenames, now it is "lang_" since all files are called "lang_EN.xml" etc&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Change the Edit.This and Edit/This in both markup and codebehind to your own paths/namespace.&lt;br /&gt;&lt;br /&gt;Then you are done!&lt;br /&gt;&lt;br /&gt;Create the LanguageManager.ascx&lt;br /&gt;&lt;br /&gt;Markup:&lt;br /&gt;&lt;br /&gt;&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt; &amp;lt;%@ Control Language="C#" AutoEventWireup="true" CodeBehind="LanguageManager.ascx.cs"  &lt;br /&gt;   Inherits="Edit.This.Plugins.LanguageManager" %&amp;gt;  &lt;br /&gt;   &lt;br /&gt; &amp;lt;script language="javascript" src="/util/javascript/common.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;  &lt;br /&gt;   &lt;br /&gt; &amp;lt;b&amp;gt;Language manager&amp;lt;/b&amp;gt;  &lt;br /&gt; &amp;lt;br /&amp;gt;  &lt;br /&gt; &amp;lt;br /&amp;gt;  &lt;br /&gt; Handle the translations in the language xml files.  &lt;br /&gt; &amp;lt;br /&amp;gt;  &lt;br /&gt; &amp;lt;br /&amp;gt;  &lt;br /&gt; &amp;lt;asp:dropdownlist runat="server" id="ddl_files" autopostback="true" onselectedindexchanged="ddl_selected"  &lt;br /&gt;   width="300"&amp;gt; &amp;lt;asp:ListItem&amp;gt;Select language file:&amp;lt;/asp:ListItem&amp;gt; &amp;lt;/asp:dropdownlist&amp;gt;  &lt;br /&gt; &amp;lt;br /&amp;gt;  &lt;br /&gt; &amp;lt;br /&amp;gt;  &lt;br /&gt; &amp;lt;asp:placeholder runat="server" id="ph_nodebox" visible="false"&amp;gt; &amp;lt;asp:DropDownList runat="server" ID="ddl_nodes" AutoPostBack="true" OnSelectedIndexChanged="ddl_nodes_changed" Width="300"&amp;gt;&amp;lt;/asp:DropDownList&amp;gt; &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;lt;asp:PlaceHolder runat="server" ID="ph_editing" Visible="false"&amp;gt; &amp;lt;asp:TextBox runat="server" ID="EditNodePreviewInnerText" ForeColor="Teal" TextMode="MultiLine" Rows="5" Width="297"&amp;gt;&amp;lt;/asp:TextBox&amp;gt; &amp;lt;br /&amp;gt;&amp;lt;br&amp;gt; &amp;lt;asp:Button runat="server" ID="Button1" Text="Update text" OnClick="Button1_Click" /&amp;gt; &amp;lt;/asp:PlaceHolder&amp;gt; &amp;lt;/asp:placeholder&amp;gt;  &lt;br /&gt; &amp;lt;br /&amp;gt;  &lt;br /&gt; &amp;lt;asp:label runat="server" id="msg" forecolor="Red"&amp;gt;&amp;lt;/asp:label&amp;gt;  &lt;br /&gt;   &lt;br /&gt; &amp;lt;script type="text/javascript" language="javascript"&amp;gt;  if (window.parent != null &amp;amp;&amp;amp; window.parent.parent != null &amp;amp;&amp;amp; window.parent.parent.document.all['epCustomDIV'] != null) window.parent.parent.document.all['epCustomDIV'].parentElement.style.pixelWidth = 400;&amp;lt;/script&amp;gt;  &lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Codebehind C#: &lt;br /&gt;&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt; using System;   &lt;br /&gt; using System.Collections;   &lt;br /&gt; using System.Configuration;   &lt;br /&gt; using System.Data;   &lt;br /&gt; using System.Web;   &lt;br /&gt; using System.Web.Security;   &lt;br /&gt; using System.Web.UI;   &lt;br /&gt; using System.Web.UI.WebControls;   &lt;br /&gt; using System.IO;   &lt;br /&gt; using System.Xml;   &lt;br /&gt; using System.Xml.XPath;   &lt;br /&gt; using EPiServer;   &lt;br /&gt; using EPiServer.Core;   &lt;br /&gt; using EPiServer.PlugIn;   &lt;br /&gt;   &lt;br /&gt; namespace Edit.This.Plugins   &lt;br /&gt; {   &lt;br /&gt;   [GuiPlugIn(DisplayName = "Language manager", Area = PlugInArea.ActionWindow, Description = "Manage language xml files", Url = "~/Edit/This/Plugins/LanguageManager.ascx", SortIndex = 50)]   &lt;br /&gt;   public partial class LanguageManager : System.Web.UI.UserControl   &lt;br /&gt;   {   &lt;br /&gt;     Stack st = new Stack();   &lt;br /&gt;     Queue q = new Queue();   &lt;br /&gt;   &lt;br /&gt;     protected void Page_Load(object sender, EventArgs e)   &lt;br /&gt;     {   &lt;br /&gt;       msg.Text = "";   &lt;br /&gt;       if (!IsPostBack)   &lt;br /&gt;         LoadFiles();  &lt;br /&gt;     }   &lt;br /&gt;       &lt;br /&gt;     protected void ddl_selected(object sender, EventArgs e)   &lt;br /&gt;     {   &lt;br /&gt;       if (ddl_files.SelectedIndex == 0)   &lt;br /&gt;       {   &lt;br /&gt;         ph_nodebox.Visible = false; return;   &lt;br /&gt;       }   &lt;br /&gt;         &lt;br /&gt;       EditNodePreviewInnerText.Text = "";   &lt;br /&gt;       ph_editing.Visible = false;   &lt;br /&gt;       XmlDocument xDoc = new XmlDocument();   &lt;br /&gt;       try   &lt;br /&gt;       {   &lt;br /&gt;         xDoc.Load(ddl_files.SelectedItem.Value);   &lt;br /&gt;         XPathNavigator navigator = xDoc.CreateNavigator();   &lt;br /&gt;         navigator.MoveToRoot(); navigator.MoveToFirstChild();   &lt;br /&gt;         SearchForText(navigator);   &lt;br /&gt;         if (q.Count != 0)   &lt;br /&gt;           FillNodeBox(q);   &lt;br /&gt;       }   &lt;br /&gt;       catch(Exception ex)   &lt;br /&gt;       {   &lt;br /&gt;         msg.Text = "Could not load from path: " + ddl_files.SelectedItem.Value + "&amp;lt;br&amp;gt;" + ex.Message;   &lt;br /&gt;       }   &lt;br /&gt;     }   &lt;br /&gt;       &lt;br /&gt;     protected void ddl_nodes_changed(object sender, EventArgs e)   &lt;br /&gt;     {   &lt;br /&gt;       if (ddl_nodes.SelectedIndex == 0)   &lt;br /&gt;       {   &lt;br /&gt;         ph_editing.Visible = false; return;   &lt;br /&gt;       }   &lt;br /&gt;       ph_editing.Visible = true;   &lt;br /&gt;       XmlDocument xDoc = new XmlDocument(); xDoc.Load(ddl_files.SelectedItem.Value);   &lt;br /&gt;       XmlNode testnode = xDoc.SelectSingleNode(ddl_nodes.SelectedItem.Value); EditNodePreviewInnerText.Text = testnode.InnerText; } protected void Button1_Click(object sender, EventArgs e) { if (!CheckXmlIsOk(EditNodePreviewInnerText.Text.Trim())) { msg.Text = "Text contains characters not valid for a xml document. Nothing was saved."; return; } XmlDocument xDoc = new XmlDocument(); xDoc.Load(ddl_files.SelectedItem.Value); XmlNode nodeEditing = xDoc.SelectSingleNode(ddl_nodes.SelectedItem.Value); nodeEditing.InnerText = EditNodePreviewInnerText.Text.Trim(); xDoc.Save(ddl_files.SelectedItem.Value); msg.Text = "Language file '" + ddl_files.SelectedItem.Text + "' was successfully updated."; } private void FillNodeBox(Queue nodequeue) { ph_nodebox.Visible = true; ddl_nodes.Items.Clear(); ddl_nodes.Items.Add(new ListItem("Select a translation to edit:")); while (q.Count &amp;gt; 0) { string p = Convert.ToString(q.Dequeue()); p = p.TrimEnd('/'); string[] arr = p.Split('/'); string text = ""; int i = 0, total = arr.Length - 1; foreach (string segment in arr) { if (i == total || i == (total - 1)) text += segment + "/ "; i++;   &lt;br /&gt;       }   &lt;br /&gt;         //string t = p.Substring(p.LastIndexOf("/"));   &lt;br /&gt;         //t = t.Trim('/');   &lt;br /&gt;         text = text.Replace("[1]", "");   &lt;br /&gt;         text = text.Trim();   &lt;br /&gt;         text = text.Trim('/');   &lt;br /&gt;         ddl_nodes.Items.Add(new ListItem(text, p));  &lt;br /&gt;       }   &lt;br /&gt;       }   &lt;br /&gt;     private bool CheckXmlIsOk(string text)   &lt;br /&gt;     {   &lt;br /&gt;       if (String.IsNullOrEmpty(text))   &lt;br /&gt;         return true;   &lt;br /&gt;       if (text.Contains("&amp;amp;")) return false;   &lt;br /&gt;       if (text.Contains("&amp;lt;")) return false;   &lt;br /&gt;       if (text.Contains("&amp;gt;")) return false;   &lt;br /&gt;       return true;   &lt;br /&gt;     }   &lt;br /&gt;       &lt;br /&gt;     private XPathNavigator SearchForText(XPathNavigator navigator)   &lt;br /&gt;     {   &lt;br /&gt;       //If node type is element, put in stack and move inside of current element   &lt;br /&gt;       if (navigator.NodeType == XPathNodeType.Element)   &lt;br /&gt;       {   &lt;br /&gt;         PushInStack(st, (XPathNavigator)navigator.Clone());  &lt;br /&gt;         if (navigator.HasChildren)   &lt;br /&gt;         {   &lt;br /&gt;           navigator.MoveToFirstChild();   &lt;br /&gt;           navigator = SearchForText(navigator);  &lt;br /&gt;         }   &lt;br /&gt;       }   &lt;br /&gt;       //If node type is text then match with required value   &lt;br /&gt;       else if (navigator.NodeType == XPathNodeType.Text)   &lt;br /&gt;       {   &lt;br /&gt;         if (navigator.Value.Trim().ToLower().Length &amp;gt;= 0)  &lt;br /&gt;         {   &lt;br /&gt;           Stack st2 = new Stack();   &lt;br /&gt;           st2 = (Stack)st.Clone();   &lt;br /&gt;           string val = "";   &lt;br /&gt;           //Retrive stack values and Build XPath   &lt;br /&gt;           while (st2.Count != 0)   &lt;br /&gt;             val = st2.Pop().ToString() + "/" + val;   &lt;br /&gt;           //Put in Queue   &lt;br /&gt;           q.Enqueue(val);   &lt;br /&gt;         }   &lt;br /&gt;         //If sibling is available, then check if it contains other nodes /* e.g. node : * &amp;lt;PARENT&amp;gt;text &amp;lt;CHILD&amp;gt;text&amp;lt;/CHILD&amp;gt;&amp;lt;/PARENT&amp;gt; * */   &lt;br /&gt;         if (navigator.MoveToNext())   &lt;br /&gt;           navigator = SearchForText(navigator);   &lt;br /&gt;         //come to immediate parent   &lt;br /&gt;         else { navigator.MoveToParent();   &lt;br /&gt;           return navigator;   &lt;br /&gt;         }  &lt;br /&gt;       }   &lt;br /&gt;       //Pop one element from stack and move to next sibling   &lt;br /&gt;       if (st.Count &amp;gt; 0)   &lt;br /&gt;         st.Pop();   &lt;br /&gt;       if (navigator.MoveToNext())   &lt;br /&gt;         navigator = SearchForText(navigator);   &lt;br /&gt;       else if (navigator.MoveToParent())   &lt;br /&gt;         return navigator;   &lt;br /&gt;       return navigator;   &lt;br /&gt;     }   &lt;br /&gt;     private void PushInStack(Stack st, XPathNavigator navigator)   &lt;br /&gt;     { string currentName = navigator.Name;   &lt;br /&gt;       int index = 1;   &lt;br /&gt;       while (navigator.MoveToPrevious())   &lt;br /&gt;       { if (navigator.Name.Trim() == currentName)   &lt;br /&gt;         //Same named element node exists   &lt;br /&gt;         index++;   &lt;br /&gt;       }   &lt;br /&gt;       st.Push(currentName + "[" + index.ToString() + "]");   &lt;br /&gt;     }   &lt;br /&gt;       &lt;br /&gt;     private DirectoryInfo GetDirectory()   &lt;br /&gt;     {   &lt;br /&gt;       return new DirectoryInfo(Server.MapPath("/") + @"lang\");  &lt;br /&gt;     }   &lt;br /&gt;       &lt;br /&gt;     private void LoadFiles()   &lt;br /&gt;     {   &lt;br /&gt;       foreach (FileInfo f in GetDirectory().GetFiles())  &lt;br /&gt;       {   &lt;br /&gt;         if(f.Name.StartsWith("lang_"))   &lt;br /&gt;           ddl_files.Items.Add(new ListItem(f.Name,f.FullName));   &lt;br /&gt;       }   &lt;br /&gt;     }   &lt;br /&gt;   }   &lt;br /&gt; }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1814971078104194310-4771877376295248303?l=fredrikvonwerder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fredrikvonwerder.blogspot.com/feeds/4771877376295248303/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://fredrikvonwerder.blogspot.com/2008/10/edit-language-xml-files-episerver-cms-5.html#comment-form' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/4771877376295248303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1814971078104194310/posts/default/4771877376295248303'/><link rel='alternate' type='text/html' href='http://fredrikvonwerder.blogspot.com/2008/10/edit-language-xml-files-episerver-cms-5.html' title='Edit language xml files - EPiServer CMS 5'/><author><name>Fredrik von Werder</name><uri>http://www.blogger.com/profile/01228651559278773280</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp2.blogger.com/_4LL379dnJdw/SHwyaCyICeI/AAAAAAAAAGs/Ug_JMd4sysI/S220/freguz_spegel_288.jpg'/></author><thr:total>0</thr:total></entry></feed>
