<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>EPiServer</title>
        <link>http://blogs.interakting.co.uk/steve/category/48.aspx</link>
        <description>Relating to the EPiServer content management system

See www.episerver.com</description>
        <language>en-GB</language>
        <copyright>Stephen Horsfield</copyright>
        <managingEditor>stephen.horsfield@interakting.co.uk</managingEditor>
        <generator>Subtext Version 1.9.5.177</generator>
        <item>
            <title>WCF and EPiServer: Using WCF Web Programming Model Services in EPiServer sites on IIS 7</title>
            <link>http://blogs.interakting.co.uk/steve/archive/2008/11/20/wcf-and-episerver-using-wcf-web-programming-model-services-in.aspx</link>
            <description>&lt;p&gt;I've just managed to get the &lt;a title="Microsoft .NET Framework" target="_blank" href="http://msdn2.microsoft.com/en-gb/netframework/default.aspx"&gt;.NET&lt;/a&gt; 3.5 style of WCF Web Programming Model services to work inside an &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; 5 R2 site on IIS 7 and Windows 2008.  I had a few difficulties finding out how to integrate the new model into IIS/ASP.NET and then further problems getting it working in EPiServer.  Here, I outline the solution.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Context&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I'm currently designing a site that will be using the Akamai Edge Suite of technologies (&lt;a href="http://www.akamai.com"&gt;www.akamai.com&lt;/a&gt;) and so I desire that all client access is through the caching layer.  Additionally, I'm motivated towards a REST model for web services to support a greater degree of caching.&lt;/p&gt;
&lt;p&gt;The new WCF Web Programming Model is ideal for this purpose as I can wrap service parameters directly into the URL and reduce the coding effort considerably.  I had been concerned about the integration of services into the same website as EPiServer because of how the URL mapping works in the Web Programming Model.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The solution is really easy once you realise that the typical EPiServer installation changes the default ASP.NET configuration.  Specifically, you may need the following:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Create a new folder to host your services &lt;/li&gt;
    &lt;li&gt;Create a small web.config in this folder (or use location tags in the main web.config file) and add service handlers &lt;/li&gt;
    &lt;li&gt;Create a ".svc" file for the service &lt;/li&gt;
    &lt;li&gt;Create the supporting .NET service code &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;u&gt;Create a new folder to host your services&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;This is necessary to allow a separate application configuration.  You can change the main application configuration at your own risk, however :)&lt;/p&gt;
&lt;p&gt;For the purposes of this post, I'll use "~/services/".&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Create a small web.config for this folder and add service handlers&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;You'll need to add the following:&lt;/p&gt;
&lt;div&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;="UTF-8"&lt;/span&gt;?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;configuration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;system.webServer&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;handlers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="svc-ISAPI"&lt;/span&gt; &lt;span class="attr"&gt;path&lt;/span&gt;&lt;span class="kwrd"&gt;="*.svc"&lt;/span&gt; &lt;span class="attr"&gt;verb&lt;/span&gt;&lt;span class="kwrd"&gt;="*"&lt;/span&gt; &lt;span class="attr"&gt;modules&lt;/span&gt;&lt;span class="kwrd"&gt;="IsapiModule"&lt;/span&gt; 
           &lt;span class="attr"&gt;scriptProcessor&lt;/span&gt;&lt;span class="kwrd"&gt;="%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll"&lt;/span&gt;
           &lt;span class="attr"&gt;resourceType&lt;/span&gt;&lt;span class="kwrd"&gt;="Unspecified"&lt;/span&gt; 
           &lt;span class="attr"&gt;preCondition&lt;/span&gt;&lt;span class="kwrd"&gt;="classicMode,runtimeVersionv2.0,bitness32"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="ServiceHost"&lt;/span&gt; &lt;span class="attr"&gt;path&lt;/span&gt;&lt;span class="kwrd"&gt;="*.svc"&lt;/span&gt; &lt;span class="attr"&gt;verb&lt;/span&gt;&lt;span class="kwrd"&gt;="*"&lt;/span&gt;
           &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="System.ServiceModel.Activation.HttpHandler, System.ServiceModel,
                 Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"&lt;/span&gt;
           &lt;span class="attr"&gt;resourceType&lt;/span&gt;&lt;span class="kwrd"&gt;="Unspecified"&lt;/span&gt; &lt;span class="attr"&gt;preCondition&lt;/span&gt;&lt;span class="kwrd"&gt;="integratedMode"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;handlers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;system.webServer&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;configuration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Now I took this from a cleanly created website with no configuration (using the IIS management console) and I recommend that you do the same.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Create a ".svc" file for the service&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;This file is created in the service folder and forms part of the URL so name it accordingly.  I'll just use "service.svc" for illustration:&lt;/p&gt;
&lt;div&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="asp"&gt;&amp;lt;%@ ServiceHost Language="C#" Service="Service" CodeBehind="~/App_Code/service.cs"
    Factory="System.ServiceModel.Activation.WebServiceHostFactory" %&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;You should name your services more appropriately, of course.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Create the supporting .NET service code&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;So, you need to create the classes.  Here, I'm using a simple file in the App_Code folder, but you might prefer to use a separate code project and assembly.  Here's a simple example:&lt;/p&gt;
&lt;div&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.ServiceModel;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.ServiceModel.Web;

[ServiceContract]
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IService
{
  [OperationContract]
  [WebGet(UriTemplate = &lt;span class="str"&gt;"test?s={s}"&lt;/span&gt;)]
  &lt;span class="kwrd"&gt;string&lt;/span&gt; test(&lt;span class="kwrd"&gt;string&lt;/span&gt; s);
}

&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Service : IService
{
  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; test(&lt;span class="kwrd"&gt;string&lt;/span&gt; s)
  {
    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;"test: "&lt;/span&gt; + s;
  }
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;So, this is a very basic service with a single HTTP GET method that returns some data dependent on a single query string parameter.  A perfect REST example as the result is defined by the input, there is no change of state (so two identical GET requests result in the same value) and so the response is suitable for caching.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Using the service&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;So now, you can access the service as &lt;em&gt;http://your_episerver_site/services/service.svc/test?s=YourTestString&lt;/em&gt;.  ASP.NET integration (and IIS) requires the use of a service extension, in this case ".svc", however this article may help you to remove this issue: &lt;a title="http://blogs.msdn.com/bags/archive/2008/08/22/rest-in-wcf-part-ix-controlling-the-uri.aspx" href="http://blogs.msdn.com/bags/archive/2008/08/22/rest-in-wcf-part-ix-controlling-the-uri.aspx"&gt;http://blogs.msdn.com/bags/archive/2008/08/22/rest-in-wcf-part-ix-controlling-the-uri.aspx&lt;/a&gt; but don't forget that EPiServer already does some URL rewriting and so you'll have to make sure they don't conflict!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Metadata&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Categories: ASP.NET, EPiServer, SOA, WCF, .NET, Windows Server &lt;/li&gt;
    &lt;li&gt;Keywords: Web Programming Model, Windows Communication Foundation, Service Oriented Architecture, AJAX, JSON &lt;/li&gt;
    &lt;li&gt;Technorati Tags: &lt;a rel="tag" href="http://technorati.com/tags/software%20development"&gt;software development&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/Windows%20Communication%20Foundation"&gt;Windows Communication Foundation&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/.NET"&gt;.NET&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/JSON"&gt;JSON&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/WCF"&gt;WCF&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/SOA"&gt;SOA&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/service%20design"&gt;service design&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/Service%20Oriented%20Architecture"&gt;Service Oriented Architecture&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/EPiServer"&gt;EPiServer&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/ASP.NET"&gt;ASP.NET&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/AJAX"&gt;AJAX&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://blogs.interakting.co.uk/steve/aggbug/366.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Stephen Horsfield</dc:creator>
            <guid>http://blogs.interakting.co.uk/steve/archive/2008/11/20/wcf-and-episerver-using-wcf-web-programming-model-services-in.aspx</guid>
            <pubDate>Thu, 20 Nov 2008 17:10:58 GMT</pubDate>
            <wfw:comment>http://blogs.interakting.co.uk/steve/comments/366.aspx</wfw:comment>
            <comments>http://blogs.interakting.co.uk/steve/archive/2008/11/20/wcf-and-episerver-using-wcf-web-programming-model-services-in.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.interakting.co.uk/steve/comments/commentRss/366.aspx</wfw:commentRss>
        </item>
        <item>
            <title>EPiServer: Handling unpublished pages</title>
            <link>http://blogs.interakting.co.uk/steve/archive/2008/04/01/EPiServer-Handling-unpublished-pages.aspx</link>
            <description>&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I've recently hit an issue where some custom controls have been generating exceptions when unpublished pages exist in an &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; site.  In these cases, the relevant (required) properties have null values.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Context&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Rather than using the standard EPiServer property controls, these pages use &lt;a title="Microsoft ASP.NET" target="_blank" href="http://msdn2.microsoft.com/en-gb/asp.net/default.aspx"&gt;ASP.NET&lt;/a&gt; data-binding and custom controls that access the required properties of EPiServer PageData objects.  They are being viewed in the editing interface by a logged-in user with full permissions.  The PageData object is sourced using a FindPagesWithCriteria operation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Problem&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Any of the custom page properties accessed using PageData["PropertyName"] (in C#) return null preventing the display of any useful information and causing exceptions in various cases, such as in sorting operations and date formatting.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cause&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;EPiServer does not automatically load the properties for unpublished pages.  You have to manually instruct EPiServer to load them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Check to see if the page is unpublished and (optionally) whether the user has appropriate access rights.  If appropriate, load the full version of the unpublished page and possibly store it in a PageDataCollection:&lt;/p&gt;
&lt;div&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   1:&lt;/span&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; PageDataCollection LoadUnpublishedAsNecessary(PageDataCollection pdc, &lt;br /&gt;                                                                  &lt;span class="kwrd"&gt;bool&lt;/span&gt; clearSource)&lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   3:&lt;/span&gt;     PageDataCollection pdc2 = &lt;span class="kwrd"&gt;new&lt;/span&gt; PageDataCollection();&lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   4:&lt;/span&gt;  &lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   5:&lt;/span&gt;     &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (PageData p &lt;span class="kwrd"&gt;in&lt;/span&gt; pdc)&lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   6:&lt;/span&gt;     {&lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   7:&lt;/span&gt;         &lt;span class="kwrd"&gt;if&lt;/span&gt; (p.PendingPublish)&lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   8:&lt;/span&gt;         {&lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   9:&lt;/span&gt;             AccessLevel l = p.QueryAccess();&lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  10:&lt;/span&gt;             &lt;span class="kwrd"&gt;if&lt;/span&gt; (((l &amp;amp; AccessLevel.Edit) == AccessLevel.Edit) ||&lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  11:&lt;/span&gt;                  ((l &amp;amp; AccessLevel.Publish) == AccessLevel.Publish))&lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  12:&lt;/span&gt;             {&lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  13:&lt;/span&gt;  &lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  14:&lt;/span&gt;                 PageReference r = &lt;span class="kwrd"&gt;new&lt;/span&gt; PageReference(p.PageLink.ID, &lt;span class="kwrd"&gt;true&lt;/span&gt;);&lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  15:&lt;/span&gt;                 pdc2.Add(EPiServer.Global.EPDataFactory.GetPage(r));&lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  16:&lt;/span&gt;                 &lt;span class="kwrd"&gt;continue&lt;/span&gt;;&lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  17:&lt;/span&gt;             }&lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  18:&lt;/span&gt;         }&lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  19:&lt;/span&gt;         pdc2.Add(p);&lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  20:&lt;/span&gt;     }&lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  21:&lt;/span&gt;     &lt;span class="kwrd"&gt;if&lt;/span&gt; (clearSource) pdc.Clear();&lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  22:&lt;/span&gt;  &lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  23:&lt;/span&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; pdc2;&lt;/pre&gt;
&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  24:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;font face="Arial"&gt;&lt;a href="http://www.episerver.com/sv/EPiServer_Knowledge_Center/Developer-Forum2/EPiServer-Developer-Forums-/1805/15069/"&gt;http://www.episerver.com/sv/EPiServer_Knowledge_Center/Developer-Forum2/EPiServer-Developer-Forums-/1805/15069/&lt;/a&gt;&lt;/font&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Versions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;EPiServer 5, EPiServer 4.6 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Metadata&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Categories: &lt;a title="Microsoft .NET Framework" target="_blank" href="http://msdn2.microsoft.com/en-gb/netframework/default.aspx"&gt;.NET&lt;/a&gt;, ASP.NET, EPiServer, Software Development &lt;/li&gt;
    &lt;li&gt;Additional keywords: FindPagesWithCriteria, saved pages, unpublished, property values null, missing properties &lt;/li&gt;
&lt;li&gt;Technorati Tags: 
&lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/ASP.NET" rel="tag"&gt;ASP.NET&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/EPiServer" rel="tag"&gt;EPiServer&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/software%20development" rel="tag"&gt;software development&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/data%20binding" rel="tag"&gt;data binding&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/page%20publishing" rel="tag"&gt;page publishing&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://blogs.interakting.co.uk/steve/aggbug/242.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Stephen Horsfield</dc:creator>
            <guid>http://blogs.interakting.co.uk/steve/archive/2008/04/01/EPiServer-Handling-unpublished-pages.aspx</guid>
            <pubDate>Tue, 01 Apr 2008 10:45:55 GMT</pubDate>
            <wfw:comment>http://blogs.interakting.co.uk/steve/comments/242.aspx</wfw:comment>
            <comments>http://blogs.interakting.co.uk/steve/archive/2008/04/01/EPiServer-Handling-unpublished-pages.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.interakting.co.uk/steve/comments/commentRss/242.aspx</wfw:commentRss>
        </item>
        <item>
            <title>EPiServer: Getting a PageData Object When You Do Not Have Access to the Page</title>
            <link>http://blogs.interakting.co.uk/steve/archive/2008/01/31/EPiServer-Getting-a-PageData-Object-When-You-Do-Not-Have.aspx</link>
            <description>&lt;p&gt;&lt;strong&gt;UPDATED: 16-MAY-2008&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;How can you get the PageData object for a page when the current user doesn't have access.  It took me a while to find out, but you can just read on...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Context&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I have been implementing a redirect facility.  Only editors and administrators are allowed access to the page and everyone else is redirected according to a property on the page.  The ACL on the page does not give Read access to the Everyone group.  How can I get the property?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The easy solution is to use &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; 5.  Then you can use the GetPage method of the DataFactory class to get a page, and provide the access level:&lt;/p&gt;
&lt;div class="csharpcode-wrapper"&gt;
&lt;pre class="csharpcode"&gt;&lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.Core.PageData page =
  &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataFactory.Instance.GetPage(
    pageReference, 
    &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.Security.AccessLevel.NoAccess);&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;&lt;u&gt;&lt;strong&gt;UPDATED:  Thanks to &lt;font size="2"&gt;Steve Celius of EPiServer for a better solution for EPiServer 4.6&lt;/font&gt;&lt;/strong&gt;&lt;/u&gt;&lt;/em&gt; &lt;/p&gt;
&lt;p&gt;Link to Steve Celius' blog: &lt;a href="http://labs.episerver.com/en/Blogs/Steve-Celius/"&gt;http://labs.episerver.com/en/Blogs/Steve-Celius/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In EPiServer 4.6, the EPiServer.Security.AccessLevel enumeration does not include a NoAccess member.  However, the EPiServer.Security.AccessControlList.NoAccess property is an instance of EPiServer.Security.AccessLevel and can be used directly.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;u&gt;THE METHOD I ORIGINALLY POSTED IS BELOW, BUT DO NOT USE IT!!!&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;However, I was using &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; 4.6 for this project, and the luxury of a NoAccess access level was not given to me!&lt;/p&gt;
&lt;p&gt;In this case, you need to circumvent the &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; security model.  Of course, this probably isn't supported!  The following code does the job:&lt;/p&gt;
&lt;div class="csharpcode-wrapper"&gt;
&lt;pre class="csharpcode"&gt;&lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAccess.PageLoadDB pageLoadDB =
  &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAccess.PageLoadDB();

&lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.Core.PageData page =
  pageLoadDB.Load2(pageReference);&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Job done!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Versions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; 4.6 &lt;/li&gt;
    &lt;li&gt;&lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; 5 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Metadata&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Categories: Software development, &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;, Page properties, security &lt;/li&gt;
    &lt;li&gt;Additional keywords: access denied, page properties, get page &lt;/li&gt;
    &lt;li&gt;Technorati Tags: &lt;a rel="tag" href="http://technorati.com/tags/.NET"&gt;.NET&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/ASP.NET"&gt;ASP.NET&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/EPiServer"&gt;EPiServer&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/security"&gt;security&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/DataFactory"&gt;DataFactory&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://blogs.interakting.co.uk/steve/aggbug/197.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Stephen Horsfield</dc:creator>
            <guid>http://blogs.interakting.co.uk/steve/archive/2008/01/31/EPiServer-Getting-a-PageData-Object-When-You-Do-Not-Have.aspx</guid>
            <pubDate>Thu, 31 Jan 2008 08:53:43 GMT</pubDate>
            <wfw:comment>http://blogs.interakting.co.uk/steve/comments/197.aspx</wfw:comment>
            <comments>http://blogs.interakting.co.uk/steve/archive/2008/01/31/EPiServer-Getting-a-PageData-Object-When-You-Do-Not-Have.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://blogs.interakting.co.uk/steve/comments/commentRss/197.aspx</wfw:commentRss>
        </item>
        <item>
            <title>EPiServer: Getting the target from a Page Link that can be Internal or External</title>
            <link>http://blogs.interakting.co.uk/steve/archive/2008/01/24/EPiServer-Getting-the-target-from-a-Page-Link-that-can.aspx</link>
            <description>&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On a Page Type, you can create a property for a web link to a page.  This page might be part of the CMS, or it might be on a different site.  How can you find out how to render it?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Process&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;First, you need to get the PropertyData for the property.  It might not have a value, but even if it does, the value is just an internal reference to the the page, for example "/templates/MyTemplate.aspx?id=1076".  Not very helpful, is it?&lt;/p&gt;
&lt;p&gt;Here's a quick method that you can use to return a PageData if the property references a CMS page, or a string with the URL otherwise.  You'll still need to check to see which one is returned, if either.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example code&lt;/strong&gt;&lt;/p&gt;
&lt;div class="csharpcode-wrapper"&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; GetPagePropertyLink(PageData CurrentPage, &lt;span class="kwrd"&gt;string&lt;/span&gt; PropertyName, &lt;span class="kwrd"&gt;out&lt;/span&gt; PageData pTarget, &lt;span class="kwrd"&gt;out&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; uTarget) {

    pTarget = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
    uTarget = &lt;span class="kwrd"&gt;null&lt;/span&gt;;

    PropertyData pUrl = CurrentPage.Property[PropertyName];

    &lt;span class="kwrd"&gt;if&lt;/span&gt; (pUrl == &lt;span class="kwrd"&gt;null&lt;/span&gt;) &lt;span class="kwrd"&gt;return&lt;/span&gt;;
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (pUrl.IsNull) &lt;span class="kwrd"&gt;return&lt;/span&gt;;

    &lt;span class="kwrd"&gt;try&lt;/span&gt;
    {
        pTarget = &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.Global.EPDataFactory.GetPage(
            PageReference.ParseUrl(pUrl.ToString()), &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.Security.AccessLevel.Read);
    }
    &lt;span class="kwrd"&gt;catch&lt;/span&gt; (EPiServer.Core.PageNotFoundException) { }
    &lt;span class="kwrd"&gt;catch&lt;/span&gt; (ArgumentException) { }

    &lt;span class="kwrd"&gt;if&lt;/span&gt; (pTarget == &lt;span class="kwrd"&gt;null&lt;/span&gt;) uTarget = pUrl.Value.ToString();

    &lt;span class="kwrd"&gt;return&lt;/span&gt;;
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Versions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; 4.6 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Metadata&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Categories: Software development, &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;, Page properties &lt;/li&gt;
    &lt;li&gt;Additional keywords: Page Properties, Page Types, internal link, external link &lt;/li&gt;
&lt;li&gt;Technorati Tags: 
&lt;a href="http://technorati.com/tags/software%20development" rel="tag"&gt;software development&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/page%20link" rel="tag"&gt;page link&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/ASP.NET" rel="tag"&gt;ASP.NET&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/EPiServer" rel="tag"&gt;EPiServer&lt;/a&gt;
&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://blogs.interakting.co.uk/steve/aggbug/187.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Stephen Horsfield</dc:creator>
            <guid>http://blogs.interakting.co.uk/steve/archive/2008/01/24/EPiServer-Getting-the-target-from-a-Page-Link-that-can.aspx</guid>
            <pubDate>Thu, 24 Jan 2008 11:23:49 GMT</pubDate>
            <wfw:comment>http://blogs.interakting.co.uk/steve/comments/187.aspx</wfw:comment>
            <comments>http://blogs.interakting.co.uk/steve/archive/2008/01/24/EPiServer-Getting-the-target-from-a-Page-Link-that-can.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.interakting.co.uk/steve/comments/commentRss/187.aspx</wfw:commentRss>
        </item>
        <item>
            <title>EPiServer: Along the same lines... Reordering Page Type Properties</title>
            <link>http://blogs.interakting.co.uk/steve/archive/2008/01/24/EPiServer-Along-the-same-lines.-Reordering-Page-Type-Properties.aspx</link>
            <description>&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Another example of using the API to help with development.  This time reordering many properties quickly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Process and caveats&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; 4.6, this process doesn't work quite as well as it should.  This can result in interesting behaviour of properties not displaying in the editor in the same order as in the administration of the Page Type.  Also, some changes don't seem to get saved.  I've done my best to get round these issues, but if you've got any suggestions, please post the comments.&lt;/p&gt;
&lt;p&gt;So, how do I do it?  As before, I'm hosting the code on a very simple &lt;a title="Microsoft ASP.NET" target="_blank" href="http://msdn2.microsoft.com/en-gb/asp.net/default.aspx"&gt;ASP.NET&lt;/a&gt; page.  It uses the &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; APIs to find the PageDefinition objects associated with a PageType.  Then it reorders them as requested in the UI.  I don't remove the PageDefinitions from the Definitions collection, because I don't know what that will do to pages with the property!  That means I have to be a little clever about how I reorder them.&lt;/p&gt;
&lt;p&gt;Helpfully, &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; provides MoveUp() and MoveDown() methods on a PageDefinition.  Unhelpfully, these don't seem particularly reliable!  To make sure they work, I do exactly one movement at a time, and in a carefully ordered way.  This ensures that early changes do not change the behaviour of later changes.  This is one area that can catch you out!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example code&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;u&gt;ReorderPageTypeProperties.aspx&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;    &lt;strong&gt;ReorderPageTypeProperties.aspx&lt;/strong&gt;&lt;/p&gt;
&lt;div class="csharpcode-wrapper"&gt;
&lt;pre class="csharpcode"&gt;&amp;lt;%@ Page Language=&lt;span class="str"&gt;"C#"&lt;/span&gt; AutoEventWireup=&lt;span class="str"&gt;"true"&lt;/span&gt; CodeBehind=&lt;span class="str"&gt;"ReorderPageTypeProperties.aspx.cs"&lt;/span&gt; Inherits=&lt;span class="str"&gt;"EPiServerSample.cms.admin.ReorderPageTypeProperties"&lt;/span&gt; %&amp;gt;

&amp;lt;!DOCTYPE html PUBLIC &lt;span class="str"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN"&lt;/span&gt; &lt;span class="str"&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&lt;/span&gt;&amp;gt;

&amp;lt;html xmlns=&lt;span class="str"&gt;"http://www.w3.org/1999/xhtml"&lt;/span&gt; &amp;gt;
&amp;lt;head runat=&lt;span class="str"&gt;"server"&lt;/span&gt;&amp;gt;
    &amp;lt;title&amp;gt;Untitled Page&amp;lt;/title&amp;gt;
    &amp;lt;style type=&lt;span class="str"&gt;"text/css"&lt;/span&gt;&amp;gt;
        label { font-weight: bold; color: navy; }
        select { margin-top: 0.5em; margin-bottom: 1em;}
        label.property { &lt;span class="kwrd"&gt;float&lt;/span&gt;:left; width: 150px; }
        input.property { width: 200px; }
    &amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;EPiServer:  Reorder Page Type Properties&amp;lt;/h1&amp;gt;
    &amp;lt;form id=&lt;span class="str"&gt;"form1"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt;&amp;gt;
    &amp;lt;div style=&lt;span class="str"&gt;"width:40%; float:left; margin-right:2em;"&lt;/span&gt;&amp;gt;
      &amp;lt;asp:Label runat=&lt;span class="str"&gt;"server"&lt;/span&gt; AssociatedControlID=&lt;span class="str"&gt;"lbSourcePageType"&lt;/span&gt;&amp;gt;Page Type:&amp;lt;/asp:Label&amp;gt;&amp;lt;br /&amp;gt;
      &amp;lt;asp:DropDownList Width=&lt;span class="str"&gt;"100%"&lt;/span&gt; ID=&lt;span class="str"&gt;"lbSourcePageType"&lt;/span&gt; AutoPostBack=&lt;span class="str"&gt;"true"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; /&amp;gt;&amp;lt;br /&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div style=&lt;span class="str"&gt;"clear:both;"&lt;/span&gt;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;
    &amp;lt;div style=&lt;span class="str"&gt;"width:40%; float:left; margin-right: 2em;"&lt;/span&gt;&amp;gt;
      &amp;lt;asp:Label ID=&lt;span class="str"&gt;"Label1"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; AssociatedControlID=&lt;span class="str"&gt;"lbSourceProperties"&lt;/span&gt;&amp;gt;Template Property:&amp;lt;/asp:Label&amp;gt;&amp;lt;br /&amp;gt;
      &amp;lt;asp:ListBox Width=&lt;span class="str"&gt;"100%"&lt;/span&gt; Height=&lt;span class="str"&gt;"400"&lt;/span&gt; ID=&lt;span class="str"&gt;"lbSourceProperties"&lt;/span&gt; SelectionMode=&lt;span class="str"&gt;"Multiple"&lt;/span&gt; AutoPostBack=&lt;span class="str"&gt;"false"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; /&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div style=&lt;span class="str"&gt;"width:40%; float:left;"&lt;/span&gt;&amp;gt;
        &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;
        
        &amp;lt;asp:Button ID=&lt;span class="str"&gt;"btnMoveUpPage"&lt;/span&gt; Text=&lt;span class="str"&gt;"Move up 5"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt;
            OnClick=&lt;span class="str"&gt;"btnMoveUpPage_Click"&lt;/span&gt; /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;
        &amp;lt;asp:Button ID=&lt;span class="str"&gt;"btnMoveUp2"&lt;/span&gt; Text=&lt;span class="str"&gt;"Move up 2"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt;
            OnClick=&lt;span class="str"&gt;"btnMoveUp2_Click"&lt;/span&gt; /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;
        &amp;lt;asp:Button ID=&lt;span class="str"&gt;"btnMoveUp"&lt;/span&gt; Text=&lt;span class="str"&gt;"Move up"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt;
            OnClick=&lt;span class="str"&gt;"btnMoveUp_Click"&lt;/span&gt; /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;
        &amp;lt;asp:Button ID=&lt;span class="str"&gt;"btnMoveDown"&lt;/span&gt; Text=&lt;span class="str"&gt;"Move down"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt;
            OnClick=&lt;span class="str"&gt;"btnMoveDown_Click"&lt;/span&gt; /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;
        &amp;lt;asp:Button ID=&lt;span class="str"&gt;"btnMoveDown2"&lt;/span&gt; Text=&lt;span class="str"&gt;"Move down 2"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt;
            OnClick=&lt;span class="str"&gt;"btnMoveDown2_Click"&lt;/span&gt; /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;
        &amp;lt;asp:Button ID=&lt;span class="str"&gt;"btnMoveDownPage"&lt;/span&gt; Text=&lt;span class="str"&gt;"Move down 5"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt;
            OnClick=&lt;span class="str"&gt;"btnMoveDownPage_Click"&lt;/span&gt; /&amp;gt;
            
    &amp;lt;/div&amp;gt;
    &amp;lt;/form&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;&lt;u&gt;ReorderPageTypeProperties.aspx&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;    &lt;strong&gt;ReorderPageTypeProperties.aspx&lt;/strong&gt;&lt;/p&gt;
&lt;div class="csharpcode-wrapper"&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Configuration;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.Security;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.UI;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.UI.WebControls;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.UI.WebControls.WebParts;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.UI.HtmlControls;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; EPiServerSample.cms.admin
{
    &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; ReorderPageTypeProperties : System.Web.UI.Page
    {
        &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;span class="kwrd"&gt;if&lt;/span&gt; (!IsPostBack)
            {
                &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageTypeCollection p =
                    &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageType.List();

                lbSourcePageType.DataSource = p;
                lbSourcePageType.DataValueField = &lt;span class="str"&gt;"ID"&lt;/span&gt;;
                lbSourcePageType.DataTextField = &lt;span class="str"&gt;"Name"&lt;/span&gt;;
                lbSourcePageType.DataBind();
            }

            lbSourcePageType.SelectedIndexChanged +=
                &lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler(&lt;span class="kwrd"&gt;this&lt;/span&gt;.lbPageType_SelectedIndexChanged);

        }
        
        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; lbPageType_SelectedIndexChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
        {
            DropDownList lb = (DropDownList)sender;
            ListBox lbp = &lt;span class="kwrd"&gt;null&lt;/span&gt;;

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;object&lt;/span&gt;.ReferenceEquals(lb, &lt;span class="kwrd"&gt;this&lt;/span&gt;.lbSourcePageType)) lbp = lbSourceProperties;

            lbp.Items.Clear();

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!String.IsNullOrEmpty(lb.SelectedValue))
            {
                &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageType pt = &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageType.Load(&lt;span class="kwrd"&gt;int&lt;/span&gt;.Parse(lb.SelectedValue));
                lbp.DataSource = pt.Definitions;
                lbp.DataTextField = &lt;span class="str"&gt;"Name"&lt;/span&gt;;
                lbp.DataValueField = &lt;span class="str"&gt;"ID"&lt;/span&gt;;
                lbp.DataBind();
            }
        }

        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; btnMoveUpPage_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; source, EventArgs e)
        {
            Reorder(&lt;span class="kwrd"&gt;true&lt;/span&gt;, 5);
        }
        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; btnMoveDownPage_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; source, EventArgs e)
        {
            Reorder(&lt;span class="kwrd"&gt;false&lt;/span&gt;, 5);
        }

        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; btnMoveUp2_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; source, EventArgs e)
        {
            Reorder(&lt;span class="kwrd"&gt;true&lt;/span&gt;, 2);
        }
        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; btnMoveDown2_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; source, EventArgs e)
        {
            Reorder(&lt;span class="kwrd"&gt;false&lt;/span&gt;, 2);
        }

        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; btnMoveUp_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; source, EventArgs e)
        {
            Reorder(&lt;span class="kwrd"&gt;true&lt;/span&gt;, 1);
        }
        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; btnMoveDown_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; source, EventArgs e)
        {
            Reorder(&lt;span class="kwrd"&gt;false&lt;/span&gt;, 1);
        }

        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ReorderDef(&lt;span class="kwrd"&gt;int&lt;/span&gt; PTID, &lt;span class="kwrd"&gt;int&lt;/span&gt; defID, &lt;span class="kwrd"&gt;bool&lt;/span&gt; movingUp)
        {
            &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageType pt =
                &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageType.Load(PTID);

            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (EPiServer.DataAbstraction.PageDefinition d &lt;span class="kwrd"&gt;in&lt;/span&gt; pt.Definitions)
            {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (d.ID == defID)
                {
                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (movingUp) d.MoveUp(); &lt;span class="kwrd"&gt;else&lt;/span&gt; d.MoveDown();
                    d.Save();

                    &lt;span class="kwrd"&gt;break&lt;/span&gt;;
                }
            }
            pt.Save();
        }

        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Reorder(&lt;span class="kwrd"&gt;bool&lt;/span&gt; movingUp, &lt;span class="kwrd"&gt;int&lt;/span&gt; moveBy)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (lbSourceProperties.SelectedIndex == -1) &lt;span class="kwrd"&gt;return&lt;/span&gt;;

            &lt;span class="kwrd"&gt;int&lt;/span&gt; PTID = &lt;span class="kwrd"&gt;int&lt;/span&gt;.Parse(lbSourcePageType.SelectedValue);
            &lt;span class="kwrd"&gt;int&lt;/span&gt;[] indices = lbSourceProperties.GetSelectedIndices();
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!movingUp) Array.Reverse(indices);

            System.Collections.Generic.List&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt; defIDs =
                &lt;span class="kwrd"&gt;new&lt;/span&gt; System.Collections.Generic.List&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt;();
            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; index &lt;span class="kwrd"&gt;in&lt;/span&gt; indices)
            {
                defIDs.Add(&lt;span class="kwrd"&gt;int&lt;/span&gt;.Parse(lbSourceProperties.Items[index].Value));
            }

            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; defId &lt;span class="kwrd"&gt;in&lt;/span&gt; defIDs)
            {
                &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; j = 1; j &amp;lt;= moveBy; ++j)
                    ReorderDef(PTID, defId, movingUp);
            }
            
            lbPageType_SelectedIndexChanged(lbSourcePageType, &lt;span class="kwrd"&gt;new&lt;/span&gt; EventArgs());

            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; defId &lt;span class="kwrd"&gt;in&lt;/span&gt; defIDs)
            {
                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (ListItem li &lt;span class="kwrd"&gt;in&lt;/span&gt; lbSourceProperties.Items)
                {
                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (li.Value.Equals(defId.ToString()))
                    {
                        li.Selected = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
                        &lt;span class="kwrd"&gt;break&lt;/span&gt;;
                    }
                }
            }
        }
    }
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Versions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; 4.6 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Metadata&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Categories: Software development, &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;Additional keywords: Page Types, programmatic administration, reorder properties &lt;/li&gt;
&lt;li&gt;Technorati Tags: 
&lt;a href="http://technorati.com/tags/software%20development" rel="tag"&gt;software development&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/ASP.NET" rel="tag"&gt;ASP.NET&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/EPiServer" rel="tag"&gt;EPiServer&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/page%20properties" rel="tag"&gt;page properties&lt;/a&gt;
&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://blogs.interakting.co.uk/steve/aggbug/186.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Stephen Horsfield</dc:creator>
            <guid>http://blogs.interakting.co.uk/steve/archive/2008/01/24/EPiServer-Along-the-same-lines.-Reordering-Page-Type-Properties.aspx</guid>
            <pubDate>Thu, 24 Jan 2008 11:11:33 GMT</pubDate>
            <wfw:comment>http://blogs.interakting.co.uk/steve/comments/186.aspx</wfw:comment>
            <comments>http://blogs.interakting.co.uk/steve/archive/2008/01/24/EPiServer-Along-the-same-lines.-Reordering-Page-Type-Properties.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.interakting.co.uk/steve/comments/commentRss/186.aspx</wfw:commentRss>
        </item>
        <item>
            <title>EPiServer: Programmatic Manipulation of Page Types</title>
            <link>http://blogs.interakting.co.uk/steve/archive/2008/01/21/EPiServer-Programmatic-Manipulation-of-Page-Types.aspx</link>
            <description>&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; administration tools are pretty good, but every now and then I find that I want a bit more functionality.  In this case, I wanted to duplicate new properties across multiple page types, create new properties based on a template and also change existing properties to have unique values for each language.  This would have been tedious by hand, but the &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; API has everything I needed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Basic preparation&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You don't need to do anything special to access the &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; APIs.  The easiest option is to create new, standard &lt;a title="Microsoft ASP.NET" target="_blank" href="http://msdn2.microsoft.com/en-gb/asp.net/default.aspx"&gt;ASP.NET&lt;/a&gt; pages in the &lt;em&gt;admin&lt;/em&gt; folder, so that an administrative login is required.  Of course, a plug-in could be created instead.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;APIs&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Everything necessary to manipulate Page Types are in the following classes:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageType (an individual Page Type) &lt;/li&gt;
    &lt;li&gt;&lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageTypeCollection (a collection of PageTypes) &lt;/li&gt;
    &lt;li&gt;&lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageDefinition (an individual property of a Page Type) &lt;/li&gt;
    &lt;li&gt;&lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageDefinitionCollection (a collection of PageDefinitions) &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The following are important static methods:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;PageType.List() retrieves all defined PageTypes as a PageTypeCollection &lt;/li&gt;
    &lt;li&gt;PageType.Load(int) retrieves a PageType given its ID &lt;/li&gt;
    &lt;li&gt;PageType.Load(string) retrieves a PageType given its name &lt;/li&gt;
    &lt;li&gt;PageDefinition.Load(int) retrieves a PageDefinition given its ID &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The following instance members are also important:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;PageType.Definitions retrieves a PageType's PageDefinitionCollection &lt;/li&gt;
    &lt;li&gt;PageType.Save() saves changes to a PageType &lt;/li&gt;
    &lt;li&gt;PageDefinition.Save() saves changes to a PageDefinition &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Examples&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Three examples follow in C#.  These are as follows:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;DuplicatePageTypeProperties.aspx allows for copying properties between PageTypes &lt;/li&gt;
    &lt;li&gt;LocalizePageTypeProperties.aspx allows for bulk changing of the "Unique Value Per Language" property setting &lt;/li&gt;
    &lt;li&gt;RepeatingPageTypeProperties.aspx provides a quick method for creating new properties based on an existing one &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;&lt;u&gt;DuplicatePageTypeProperties.aspx&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;    &lt;strong&gt;DuplicatePageTypeProperties.aspx&lt;/strong&gt;&lt;/p&gt;
&lt;div class="csharpcode-wrapper"&gt;
&lt;pre class="csharpcode"&gt;&amp;lt;%@ Page Language=&lt;span class="str"&gt;"C#"&lt;/span&gt; AutoEventWireup=&lt;span class="str"&gt;"true"&lt;/span&gt; CodeBehind=&lt;span class="str"&gt;"DuplicatePageTypeProperties.aspx.cs"&lt;/span&gt; Inherits=&lt;span class="str"&gt;"EPiServerSample.cms.admin.DuplicatePageTypeProperties"&lt;/span&gt; %&amp;gt;

&amp;lt;!DOCTYPE html PUBLIC &lt;span class="str"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN"&lt;/span&gt; &lt;span class="str"&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&lt;/span&gt;&amp;gt;

&amp;lt;html xmlns=&lt;span class="str"&gt;"http://www.w3.org/1999/xhtml"&lt;/span&gt; &amp;gt;
&amp;lt;head runat=&lt;span class="str"&gt;"server"&lt;/span&gt;&amp;gt;
    &amp;lt;title&amp;gt;Untitled Page&amp;lt;/title&amp;gt;
    &amp;lt;style type=&lt;span class="str"&gt;"text/css"&lt;/span&gt;&amp;gt;
        label { font-weight: bold; color: navy; }
        select { margin-top: 0.5em; margin-bottom: 1em;}
    &amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;EPiServer:  Copy Page Type Properties to Another Page Type&amp;lt;/h1&amp;gt;
    &amp;lt;form id=&lt;span class="str"&gt;"form1"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt;&amp;gt;
    &amp;lt;div style=&lt;span class="str"&gt;"width:40%; float:left;"&lt;/span&gt;&amp;gt;
      &amp;lt;asp:Label runat=&lt;span class="str"&gt;"server"&lt;/span&gt; AssociatedControlID=&lt;span class="str"&gt;"lbSourcePageType"&lt;/span&gt;&amp;gt;Source Page Type:&amp;lt;/asp:Label&amp;gt;&amp;lt;br /&amp;gt;
      &amp;lt;asp:ListBox Width=&lt;span class="str"&gt;"100%"&lt;/span&gt; Height=&lt;span class="str"&gt;"200"&lt;/span&gt; ID=&lt;span class="str"&gt;"lbSourcePageType"&lt;/span&gt; AutoPostBack=&lt;span class="str"&gt;"true"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; /&amp;gt;&amp;lt;br /&amp;gt;
      &amp;lt;asp:Label ID=&lt;span class="str"&gt;"Label1"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; AssociatedControlID=&lt;span class="str"&gt;"lbSourceProperties"&lt;/span&gt;&amp;gt;Source Properties:&amp;lt;/asp:Label&amp;gt;&amp;lt;br /&amp;gt;
      &amp;lt;asp:ListBox Width=&lt;span class="str"&gt;"100%"&lt;/span&gt; Height=&lt;span class="str"&gt;"200"&lt;/span&gt; ID=&lt;span class="str"&gt;"lbSourceProperties"&lt;/span&gt; SelectionMode=&lt;span class="str"&gt;"Multiple"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; /&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div style=&lt;span class="str"&gt;"width:40%; float:left;"&lt;/span&gt;&amp;gt;
      &amp;lt;asp:Label ID=&lt;span class="str"&gt;"Label2"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; AssociatedControlID=&lt;span class="str"&gt;"lbTargetPageType"&lt;/span&gt;&amp;gt;Target Page Type:&amp;lt;/asp:Label&amp;gt;&amp;lt;br /&amp;gt;
      &amp;lt;asp:ListBox Width=&lt;span class="str"&gt;"100%"&lt;/span&gt; Height=&lt;span class="str"&gt;"200"&lt;/span&gt; ID=&lt;span class="str"&gt;"lbTargetPageType"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; AutoPostBack=&lt;span class="str"&gt;"true"&lt;/span&gt; /&amp;gt;&amp;lt;br /&amp;gt;
      &amp;lt;asp:Label ID=&lt;span class="str"&gt;"Label3"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; AssociatedControlID=&lt;span class="str"&gt;"lbTargetProperties"&lt;/span&gt;&amp;gt;Target Properties:&amp;lt;/asp:Label&amp;gt;&amp;lt;br /&amp;gt;
      &amp;lt;asp:ListBox Width=&lt;span class="str"&gt;"100%"&lt;/span&gt; Height=&lt;span class="str"&gt;"200"&lt;/span&gt; ID=&lt;span class="str"&gt;"lbTargetProperties"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; /&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div style=&lt;span class="str"&gt;"clear:both; width:auto; margin-left:auto; margin-right:auto;"&lt;/span&gt;&amp;gt;
        &amp;lt;asp:Button ID=&lt;span class="str"&gt;"btnCopyProperties"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; OnClick=&lt;span class="str"&gt;"btnCopyProperties_Click"&lt;/span&gt; Text=&lt;span class="str"&gt;"Copy Properties --&amp;gt;"&lt;/span&gt; /&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;/form&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;    &lt;strong&gt;DuplicatePageTypeProperties.aspx.cs&lt;/strong&gt;&lt;/p&gt;
&lt;div class="csharpcode-wrapper"&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Configuration;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.Security;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.UI;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.UI.WebControls;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.UI.WebControls.WebParts;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.UI.HtmlControls;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; EPiServerSample.cms.admin
{
    &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; DuplicatePageTypeProperties : System.Web.UI.Page
    {
        &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;span class="kwrd"&gt;if&lt;/span&gt; (!IsPostBack)
            {
                &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageTypeCollection p =
                    &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageType.List();

                lbSourcePageType.DataSource = p;
                lbSourcePageType.DataValueField = &lt;span class="str"&gt;"ID"&lt;/span&gt;;
                lbSourcePageType.DataTextField = &lt;span class="str"&gt;"Name"&lt;/span&gt;;
                lbSourcePageType.DataBind();

                lbTargetPageType.DataSource = p;
                lbTargetPageType.DataValueField = &lt;span class="str"&gt;"ID"&lt;/span&gt;;
                lbTargetPageType.DataTextField = &lt;span class="str"&gt;"Name"&lt;/span&gt;;
                lbTargetPageType.DataBind();
            }

            lbSourcePageType.SelectedIndexChanged +=
                &lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler(&lt;span class="kwrd"&gt;this&lt;/span&gt;.lbPageType_SelectedIndexChanged);
            lbTargetPageType.SelectedIndexChanged +=
                &lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler(&lt;span class="kwrd"&gt;this&lt;/span&gt;.lbPageType_SelectedIndexChanged);
            
            btnCopyProperties.Enabled =
                (lbSourcePageType.SelectedIndex != -1) &amp;amp;&amp;amp;
                (lbTargetPageType.SelectedIndex != -1);

        }

        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; lbPageType_SelectedIndexChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
        {
            ListBox lb = (ListBox)sender;
            ListBox lbp = &lt;span class="kwrd"&gt;null&lt;/span&gt;;

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;object&lt;/span&gt;.ReferenceEquals(lb, &lt;span class="kwrd"&gt;this&lt;/span&gt;.lbSourcePageType)) lbp = lbSourceProperties;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;object&lt;/span&gt;.ReferenceEquals(lb, &lt;span class="kwrd"&gt;this&lt;/span&gt;.lbTargetPageType)) lbp = lbTargetProperties;

            lbp.Items.Clear();

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!String.IsNullOrEmpty(lb.SelectedValue))
            {
                &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageType pt = &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageType.Load(&lt;span class="kwrd"&gt;int&lt;/span&gt;.Parse(lb.SelectedValue));
                lbp.DataSource = pt.Definitions;
                lbp.DataTextField = &lt;span class="str"&gt;"Name"&lt;/span&gt;;
                lbp.DataValueField = &lt;span class="str"&gt;"ID"&lt;/span&gt;;
                lbp.DataBind();
            }
        }


        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; btnCopyProperties_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
        {
            &lt;span class="kwrd"&gt;int&lt;/span&gt;[] selectedIndices = lbSourceProperties.GetSelectedIndices();
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (selectedIndices.Length == 0) &lt;span class="kwrd"&gt;return&lt;/span&gt;;

            &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageType source =
                &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageType.Load(&lt;span class="kwrd"&gt;int&lt;/span&gt;.Parse(lbSourcePageType.SelectedValue));
            &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageType target =
                &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageType.Load(&lt;span class="kwrd"&gt;int&lt;/span&gt;.Parse(lbTargetPageType.SelectedValue));


            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; selectedIndex &lt;span class="kwrd"&gt;in&lt;/span&gt; selectedIndices) {
                &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageDefinition sdef =
                    &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageDefinition.Load(&lt;span class="kwrd"&gt;int&lt;/span&gt;.Parse(
                        lbSourceProperties.Items[selectedIndex].Value));

                &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageDefinition tdef = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageDefinition();
                tdef.PageTypeID = target.ID;
                tdef.DefaultValueType = sdef.DefaultValueType;
                tdef.DefaultValue = sdef.DefaultValue;
                tdef.EditCaption = sdef.EditCaption;
                tdef.FieldOrder = target.Definitions.Count;
                tdef.HelpText = sdef.HelpText;
                tdef.LanguageSpecific = sdef.LanguageSpecific;
                tdef.LongStringSettings = sdef.LongStringSettings;
                tdef.Name = sdef.Name;
                tdef.Required = sdef.Required;
                tdef.Searchable = sdef.Searchable;
                tdef.Tab = sdef.Tab;
                tdef.Type = sdef.Type;
                
                tdef.PageTypeID = target.ID;
                tdef.Save();
                target.Definitions.Add(tdef);
                target.Save();

            }
            &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageType.ClearCache();

            lbPageType_SelectedIndexChanged(lbTargetPageType, &lt;span class="kwrd"&gt;new&lt;/span&gt; EventArgs());
        }
    }
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;&lt;u&gt;LocalizePageTypeProperties.aspx&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;    &lt;strong&gt;LocalizePageTypeProperties.aspx&lt;/strong&gt;&lt;/p&gt;
&lt;div class="csharpcode-wrapper"&gt;
&lt;pre class="csharpcode"&gt;&amp;lt;%@ Page Language=&lt;span class="str"&gt;"C#"&lt;/span&gt; AutoEventWireup=&lt;span class="str"&gt;"true"&lt;/span&gt; CodeBehind=&lt;span class="str"&gt;"LocalizePageTypeProperties.aspx.cs"&lt;/span&gt; Inherits=&lt;span class="str"&gt;"EPiServerSample.cms.admin.LocalizePageTypeProperties"&lt;/span&gt; %&amp;gt;

&amp;lt;!DOCTYPE html PUBLIC &lt;span class="str"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN"&lt;/span&gt; &lt;span class="str"&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&lt;/span&gt;&amp;gt;

&amp;lt;html xmlns=&lt;span class="str"&gt;"http://www.w3.org/1999/xhtml"&lt;/span&gt; &amp;gt;
&amp;lt;head runat=&lt;span class="str"&gt;"server"&lt;/span&gt;&amp;gt;
    &amp;lt;title&amp;gt;Untitled Page&amp;lt;/title&amp;gt;
    &amp;lt;style type=&lt;span class="str"&gt;"text/css"&lt;/span&gt;&amp;gt;
        label { font-weight: bold; color: navy; }
        select { margin-top: 0.5em; margin-bottom: 1em;}
        label.property { &lt;span class="kwrd"&gt;float&lt;/span&gt;:left; width: 150px; }
        input.property { width: 200px; }
    &amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;EPiServer:  Create Repeating Page Type Properties&amp;lt;/h1&amp;gt;
    &amp;lt;form id=&lt;span class="str"&gt;"form1"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt;&amp;gt;
    &amp;lt;div style=&lt;span class="str"&gt;"width:40%; float:left; margin-right:2em;"&lt;/span&gt;&amp;gt;
      &amp;lt;asp:Label runat=&lt;span class="str"&gt;"server"&lt;/span&gt; AssociatedControlID=&lt;span class="str"&gt;"lbSourcePageType"&lt;/span&gt;&amp;gt;Page Type:&amp;lt;/asp:Label&amp;gt;&amp;lt;br /&amp;gt;
      &amp;lt;asp:DropDownList Width=&lt;span class="str"&gt;"100%"&lt;/span&gt; ID=&lt;span class="str"&gt;"lbSourcePageType"&lt;/span&gt; AutoPostBack=&lt;span class="str"&gt;"true"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; /&amp;gt;&amp;lt;br /&amp;gt;
      &amp;lt;asp:Label ID=&lt;span class="str"&gt;"Label1"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; AssociatedControlID=&lt;span class="str"&gt;"lbSourceProperties"&lt;/span&gt;&amp;gt;Template Property:&amp;lt;/asp:Label&amp;gt;&amp;lt;br /&amp;gt;
      &amp;lt;asp:ListBox Width=&lt;span class="str"&gt;"100%"&lt;/span&gt; Height=&lt;span class="str"&gt;"200"&lt;/span&gt; ID=&lt;span class="str"&gt;"lbSourceProperties"&lt;/span&gt; SelectionMode=&lt;span class="str"&gt;"Multiple"&lt;/span&gt; AutoPostBack=&lt;span class="str"&gt;"false"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; /&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div style=&lt;span class="str"&gt;"width:40%; float:left;"&lt;/span&gt;&amp;gt;
        &amp;lt;asp:Label AssociatedControlID=&lt;span class="str"&gt;"btnMakeGlobal"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt;&amp;gt;Globalization&amp;lt;/asp:Label&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;
        
        &amp;lt;asp:Button ID=&lt;span class="str"&gt;"btnMakeGlobal"&lt;/span&gt; Text=&lt;span class="str"&gt;"Make Properties Language Neutral"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt;
            OnClick=&lt;span class="str"&gt;"btnMakeGlobal_Click"&lt;/span&gt; /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;
        &amp;lt;asp:Button ID=&lt;span class="str"&gt;"btnMakeLocal"&lt;/span&gt; Text=&lt;span class="str"&gt;"Make Properties Language Specific"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt;
            OnClick=&lt;span class="str"&gt;"btnMakeLocal_Click"&lt;/span&gt; /&amp;gt;
            
    &amp;lt;/div&amp;gt;
    &amp;lt;/form&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;    &lt;strong&gt;LocalizePageTypeProperties.aspx.cs&lt;/strong&gt;&lt;/p&gt;
&lt;div class="csharpcode-wrapper"&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Configuration;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.Security;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.UI;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.UI.WebControls;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.UI.WebControls.WebParts;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.UI.HtmlControls;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; EPiServerSample.cms.admin
{
    &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; LocalizePageTypeProperties : System.Web.UI.Page
    {
        &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;span class="kwrd"&gt;if&lt;/span&gt; (!IsPostBack)
            {
                &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageTypeCollection p =
                    &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageType.List();

                lbSourcePageType.DataSource = p;
                lbSourcePageType.DataValueField = &lt;span class="str"&gt;"ID"&lt;/span&gt;;
                lbSourcePageType.DataTextField = &lt;span class="str"&gt;"Name"&lt;/span&gt;;
                lbSourcePageType.DataBind();
            }

            lbSourcePageType.SelectedIndexChanged +=
                &lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler(&lt;span class="kwrd"&gt;this&lt;/span&gt;.lbPageType_SelectedIndexChanged);

        }
        
        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; lbPageType_SelectedIndexChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
        {
            DropDownList lb = (DropDownList)sender;
            ListBox lbp = &lt;span class="kwrd"&gt;null&lt;/span&gt;;

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;object&lt;/span&gt;.ReferenceEquals(lb, &lt;span class="kwrd"&gt;this&lt;/span&gt;.lbSourcePageType)) lbp = lbSourceProperties;

            lbp.Items.Clear();

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!String.IsNullOrEmpty(lb.SelectedValue))
            {
                &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageType pt = &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageType.Load(&lt;span class="kwrd"&gt;int&lt;/span&gt;.Parse(lb.SelectedValue));
                lbp.DataSource = pt.Definitions;
                lbp.DataTextField = &lt;span class="str"&gt;"Name"&lt;/span&gt;;
                lbp.DataValueField = &lt;span class="str"&gt;"ID"&lt;/span&gt;;
                lbp.DataBind();
            }
        }

        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; btnMakeGlobal_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; source, EventArgs e)
        {
            SetProperties(&lt;span class="kwrd"&gt;true&lt;/span&gt;);
        }
        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; btnMakeLocal_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; source, EventArgs e)
        {
            SetProperties(&lt;span class="kwrd"&gt;false&lt;/span&gt;);
        }
        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetProperties(&lt;span class="kwrd"&gt;bool&lt;/span&gt; global)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (lbSourceProperties.SelectedIndex == -1) &lt;span class="kwrd"&gt;return&lt;/span&gt;;

            &lt;span class="kwrd"&gt;int&lt;/span&gt;[] indices = lbSourceProperties.GetSelectedIndices();
            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i &lt;span class="kwrd"&gt;in&lt;/span&gt; indices)
            {
                &lt;span class="kwrd"&gt;int&lt;/span&gt; propId = &lt;span class="kwrd"&gt;int&lt;/span&gt;.Parse(lbSourceProperties.Items[i].Value);
                &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageDefinition d =
                    &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageDefinition.Load(propId);

                d.LanguageSpecific = !global;
                d.Save();
            }
        }

    }
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;&lt;u&gt;RepeatingPageTypeProperties.aspx&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;    &lt;strong&gt;RepeatingPageTypeProperties.aspx&lt;/strong&gt;&lt;/p&gt;
&lt;div class="csharpcode-wrapper"&gt;
&lt;pre class="csharpcode"&gt;&amp;lt;%@ Page Language=&lt;span class="str"&gt;"C#"&lt;/span&gt; AutoEventWireup=&lt;span class="str"&gt;"true"&lt;/span&gt; CodeBehind=&lt;span class="str"&gt;"RepeatingPageTypeProperties.aspx.cs"&lt;/span&gt; Inherits=&lt;span class="str"&gt;"EPiServerSample.cms.admin.RepeatingPageTypeProperties"&lt;/span&gt; %&amp;gt;

&amp;lt;!DOCTYPE html PUBLIC &lt;span class="str"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN"&lt;/span&gt; &lt;span class="str"&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&lt;/span&gt;&amp;gt;

&amp;lt;html xmlns=&lt;span class="str"&gt;"http://www.w3.org/1999/xhtml"&lt;/span&gt; &amp;gt;
&amp;lt;head runat=&lt;span class="str"&gt;"server"&lt;/span&gt;&amp;gt;
    &amp;lt;title&amp;gt;Untitled Page&amp;lt;/title&amp;gt;
    &amp;lt;style type=&lt;span class="str"&gt;"text/css"&lt;/span&gt;&amp;gt;
        label { font-weight: bold; color: navy; }
        select { margin-top: 0.5em; margin-bottom: 1em;}
        label.property { &lt;span class="kwrd"&gt;float&lt;/span&gt;:left; width: 150px; }
        input.property { width: 200px; }
    &amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;EPiServer:  Create Repeating Page Type Properties&amp;lt;/h1&amp;gt;
    &amp;lt;form id=&lt;span class="str"&gt;"form1"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt;&amp;gt;
    &amp;lt;div style=&lt;span class="str"&gt;"width:40%; float:left; margin-right:2em;"&lt;/span&gt;&amp;gt;
      &amp;lt;asp:Label runat=&lt;span class="str"&gt;"server"&lt;/span&gt; AssociatedControlID=&lt;span class="str"&gt;"lbSourcePageType"&lt;/span&gt;&amp;gt;Page Type:&amp;lt;/asp:Label&amp;gt;&amp;lt;br /&amp;gt;
      &amp;lt;asp:DropDownList Width=&lt;span class="str"&gt;"100%"&lt;/span&gt; ID=&lt;span class="str"&gt;"lbSourcePageType"&lt;/span&gt; AutoPostBack=&lt;span class="str"&gt;"true"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; /&amp;gt;&amp;lt;br /&amp;gt;
      &amp;lt;asp:Label ID=&lt;span class="str"&gt;"Label1"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; AssociatedControlID=&lt;span class="str"&gt;"lbSourceProperties"&lt;/span&gt;&amp;gt;Template Property:&amp;lt;/asp:Label&amp;gt;&amp;lt;br /&amp;gt;
      &amp;lt;asp:ListBox Width=&lt;span class="str"&gt;"100%"&lt;/span&gt; Height=&lt;span class="str"&gt;"200"&lt;/span&gt; ID=&lt;span class="str"&gt;"lbSourceProperties"&lt;/span&gt; SelectionMode=&lt;span class="str"&gt;"Single"&lt;/span&gt; AutoPostBack=&lt;span class="str"&gt;"true"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; OnSelectedIndexChanged=&lt;span class="str"&gt;"lbProperties_SelectedIndexChanged"&lt;/span&gt; /&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div style=&lt;span class="str"&gt;"width:40%; float:left;"&lt;/span&gt;&amp;gt;
        &amp;lt;asp:Label AssociatedControlID=&lt;span class="str"&gt;"tbName"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt;&amp;gt;New Property&amp;lt;/asp:Label&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;
        &amp;lt;asp:Label  CssClass=&lt;span class="str"&gt;"property"&lt;/span&gt; ID=&lt;span class="str"&gt;"Label2"&lt;/span&gt; AssociatedControlID=&lt;span class="str"&gt;"tbName"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt;&amp;gt;Name:&amp;lt;/asp:Label&amp;gt;
        &amp;lt;asp:TextBox CssClass=&lt;span class="str"&gt;"property"&lt;/span&gt;  runat=&lt;span class="str"&gt;"server"&lt;/span&gt; ID=&lt;span class="str"&gt;"tbName"&lt;/span&gt; /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;
        &amp;lt;asp:Label CssClass=&lt;span class="str"&gt;"property"&lt;/span&gt; ID=&lt;span class="str"&gt;"Label3"&lt;/span&gt; AssociatedControlID=&lt;span class="str"&gt;"tbEditHeading"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt;&amp;gt;Edit Heading:&amp;lt;/asp:Label&amp;gt;
        &amp;lt;asp:TextBox CssClass=&lt;span class="str"&gt;"property"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; ID=&lt;span class="str"&gt;"tbEditHeading"&lt;/span&gt; /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;
        &amp;lt;asp:Label CssClass=&lt;span class="str"&gt;"property"&lt;/span&gt; ID=&lt;span class="str"&gt;"Label4"&lt;/span&gt; AssociatedControlID=&lt;span class="str"&gt;"tbHelpText"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt;&amp;gt;Help Text:&amp;lt;/asp:Label&amp;gt;
        &amp;lt;asp:TextBox CssClass=&lt;span class="str"&gt;"property"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; ID=&lt;span class="str"&gt;"tbHelpText"&lt;/span&gt; /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;
        &amp;lt;asp:Button ID=&lt;span class="str"&gt;"btnRepeatProperties"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; OnClick=&lt;span class="str"&gt;"btnRepeatProperties_Click"&lt;/span&gt; Text=&lt;span class="str"&gt;"Create New Property --&amp;gt;"&lt;/span&gt; /&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;/form&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;    &lt;strong&gt;RepeatingPageTypeProperties.aspx.cs&lt;/strong&gt;&lt;/p&gt;
&lt;div class="csharpcode-wrapper"&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Configuration;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.Security;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.UI;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.UI.WebControls;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.UI.WebControls.WebParts;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.UI.HtmlControls;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; EPiServerSample.cms.admin
{
    &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; RepeatingPageTypeProperties : System.Web.UI.Page
    {
        &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;span class="kwrd"&gt;if&lt;/span&gt; (!IsPostBack)
            {
                &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageTypeCollection p =
                    &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageType.List();

                lbSourcePageType.DataSource = p;
                lbSourcePageType.DataValueField = &lt;span class="str"&gt;"ID"&lt;/span&gt;;
                lbSourcePageType.DataTextField = &lt;span class="str"&gt;"Name"&lt;/span&gt;;
                lbSourcePageType.DataBind();
            }

            lbSourcePageType.SelectedIndexChanged +=
                &lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler(&lt;span class="kwrd"&gt;this&lt;/span&gt;.lbPageType_SelectedIndexChanged);
            

            btnRepeatProperties.Enabled =
                (lbSourcePageType.SelectedIndex != -1) &amp;amp;&amp;amp;
                (lbSourceProperties.SelectedIndex != -1);

        }
        
        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; lbPageType_SelectedIndexChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
        {
            DropDownList lb = (DropDownList)sender;
            ListBox lbp = &lt;span class="kwrd"&gt;null&lt;/span&gt;;

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;object&lt;/span&gt;.ReferenceEquals(lb, &lt;span class="kwrd"&gt;this&lt;/span&gt;.lbSourcePageType)) lbp = lbSourceProperties;

            lbp.Items.Clear();

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!String.IsNullOrEmpty(lb.SelectedValue))
            {
                &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageType pt = &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageType.Load(&lt;span class="kwrd"&gt;int&lt;/span&gt;.Parse(lb.SelectedValue));
                lbp.DataSource = pt.Definitions;
                lbp.DataTextField = &lt;span class="str"&gt;"Name"&lt;/span&gt;;
                lbp.DataValueField = &lt;span class="str"&gt;"ID"&lt;/span&gt;;
                lbp.DataBind();
            }
        }

        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; lbProperties_SelectedIndexChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; source, EventArgs e)
        {
            tbName.Text = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;
            tbHelpText.Text = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;
            tbName.Text = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (lbSourceProperties.SelectedIndex == -1) &lt;span class="kwrd"&gt;return&lt;/span&gt;;

            &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageDefinition p =
                &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageDefinition.Load(&lt;span class="kwrd"&gt;int&lt;/span&gt;.Parse(lbSourceProperties.SelectedValue.ToString()));

            tbName.Text = p.Name;
            tbHelpText.Text = p.HelpText;
            tbEditHeading.Text = p.EditCaption;
        }

        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; btnRepeatProperties_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (lbSourcePageType.SelectedIndex == -1) &lt;span class="kwrd"&gt;return&lt;/span&gt;;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (lbSourceProperties.SelectedIndex == -1) &lt;span class="kwrd"&gt;return&lt;/span&gt;;

            &lt;span class="kwrd"&gt;int&lt;/span&gt; PageTypeID = &lt;span class="kwrd"&gt;int&lt;/span&gt;.Parse(lbSourcePageType.SelectedValue.ToString());
            &lt;span class="kwrd"&gt;int&lt;/span&gt; sdefID = &lt;span class="kwrd"&gt;int&lt;/span&gt;.Parse(lbSourceProperties.SelectedValue.ToString());

            &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageType p = &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageType.Load(PageTypeID);
            &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageDefinition sdef =
                &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageDefinition.Load(sdefID);

            &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageDefinition tdef =
                &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;.DataAbstraction.PageDefinition();


            tdef.PageTypeID = p.ID;
            tdef.DefaultValueType = sdef.DefaultValueType;
            tdef.DefaultValue = sdef.DefaultValue;
            tdef.EditCaption = tbEditHeading.Text;
            tdef.FieldOrder = p.Definitions.Count;
            tdef.HelpText = tbHelpText.Text;
            tdef.LanguageSpecific = sdef.LanguageSpecific;
            tdef.LongStringSettings = sdef.LongStringSettings;
            tdef.Name = tbName.Text;
            tdef.Required = sdef.Required;
            tdef.Searchable = sdef.Searchable;
            tdef.Tab = sdef.Tab;
            tdef.Type = sdef.Type;
            tdef.PageTypeID = p.ID;
            tdef.Save();
            p.Definitions.Add(tdef);
            p.Save();

        }
    }
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Versions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; 4.6 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Metadata&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Categories: Software development, &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;Additional keywords: Page Types, programmatic administration, copy properties &lt;/li&gt;
&lt;li&gt;Technorati Tags: 
&lt;a href="http://technorati.com/tags/software%20development" rel="tag"&gt;software development&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/ASP.NET" rel="tag"&gt;ASP.NET&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/EPiServer" rel="tag"&gt;EPiServer&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/page%20properties" rel="tag"&gt;page properties&lt;/a&gt;
&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://blogs.interakting.co.uk/steve/aggbug/182.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Stephen Horsfield</dc:creator>
            <guid>http://blogs.interakting.co.uk/steve/archive/2008/01/21/EPiServer-Programmatic-Manipulation-of-Page-Types.aspx</guid>
            <pubDate>Mon, 21 Jan 2008 14:44:29 GMT</pubDate>
            <wfw:comment>http://blogs.interakting.co.uk/steve/comments/182.aspx</wfw:comment>
            <comments>http://blogs.interakting.co.uk/steve/archive/2008/01/21/EPiServer-Programmatic-Manipulation-of-Page-Types.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.interakting.co.uk/steve/comments/commentRss/182.aspx</wfw:commentRss>
        </item>
        <item>
            <title>EPiServer: FindPagesWithCriteria, Multiple Criteria and Boolean Property Tests</title>
            <link>http://blogs.interakting.co.uk/steve/archive/2008/01/18/EPiServer-FindPagesWithCriteria-Multiple-Criteria-and-Boolean-Property-Tests.aspx</link>
            <description>&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This should be easy, but easy it is not.  I'm using an &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; 4.6 site for this one, so things might've improved in more recent versions, but this caused me a lot of trial and error.  I hope this post saves you the hassle.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Context&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I've got a Selected/Unselected property set on a Page Type, and I want to search for pages with this property checked.  I also want to take account of publishing dates and I've got another date property to check too.&lt;/p&gt;
&lt;p&gt;The &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; Selected/Unselected property type returns True when selected and Null when it is not.  This causes some problems because boolean logic is more complicated when Null values are involved.  This is because Null represents "I don't know".  If you ask, "Is A equal to B?" and A or B is Null, then the answer is Null... always!&lt;/p&gt;
&lt;p&gt;The other problem is that I can only do certain expressions in the query.  I can say that some criteria are optional (union set) and some properties are required (intersection set).  I cannot reduce or expand a single clause and this limits what is allowed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;My solution&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;I need to find pages with a date property less than the current date.  I'll call this property RequiredBefore &lt;/li&gt;
    &lt;li&gt;I need to find pages with a boolean property that is set.  I'll call this property Flag &lt;/li&gt;
    &lt;li&gt;I need to find pages that are currently published and accessible to the current user &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Here's my code:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;PageDataCollection col = new PageDataCollection();&lt;br /&gt;
PropertyCriteriaCollection propcol = new PropertyCriteriaCollection();&lt;br /&gt;
PropertyCriteria criteria = new PropertyCriteria();&lt;br /&gt;
criteria.Type = PropertyDataType.Date;&lt;br /&gt;
criteria.Name = "RequiredBefore";&lt;br /&gt;
criteria.Value = DateTime.Now.ToString();&lt;br /&gt;
criteria.Condition = EPiServer.Filters.CompareCondition.GreaterThan;&lt;br /&gt;
criteria.Required = true;&lt;br /&gt;
propcol.Add(criteria);&lt;br /&gt;
&lt;br /&gt;
criteria = new PropertyCriteria();&lt;br /&gt;
criteria.Type = PropertyDataType.Boolean;&lt;br /&gt;
criteria.Name = "VisibleInSummary";&lt;br /&gt;
criteria.IsNull = false;&lt;br /&gt;
criteria.Value = true.ToString();&lt;br /&gt;
criteria.Condition = EPiServer.Filters.CompareCondition.Equal;&lt;br /&gt;
criteria.Required = true;&lt;br /&gt;
propcol.Add(criteria);&lt;br /&gt;
&lt;br /&gt;
PageDataCollection tempcol = new PageDataCollection();&lt;br /&gt;
tempcol = Global.EPDataFactory.FindPagesWithCriteria(CurrentPageLink, propcol, EPiServer.Security.AccessLevel.Read);&lt;br /&gt;
&lt;br /&gt;
// Check pages are published&lt;br /&gt;
foreach (PageData p in tempcol)&lt;br /&gt;
{&lt;br /&gt;
  if (p.Status == VersionStatus.Published)&lt;br /&gt;
    col.Add(p);&lt;br /&gt;
}&lt;br /&gt;
tempcol.Clear(); &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I'm checking for publishing dates after retrieving the pages which is inefficient.  I'm doing this because it is otherwise difficult to handle for the possibility of publishing dates being null, and this way I let &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; decide how to check for whether a page is considered published.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Versions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; 4 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Metadata&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Categories: Software development, &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;, &lt;a title="Microsoft ASP.NET" target="_blank" href="http://msdn2.microsoft.com/en-gb/asp.net/default.aspx"&gt;ASP.NET&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;Additional keywords: EPDataFactory, FindPagesWithCriteria, Search, multiple criteria, Publishing dates, flags, boolean, selected/unselected, PropertyCriteria.IsNull, PropertyCriteria.Required, EPiServer FindPagesWithCriteria, FindPagesWithCriteria EPiServer &lt;/li&gt;
&lt;li&gt;Technorati Tags: 
&lt;a href="http://technorati.com/tags/software%20development" rel="tag"&gt;software development&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/ASP.NET" rel="tag"&gt;ASP.NET&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/EPiServer" rel="tag"&gt;EPiServer&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/FindPagesWithCriteria" rel="tag"&gt;FindPagesWithCriteria&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/search" rel="tag"&gt;search&lt;/a&gt;
&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://blogs.interakting.co.uk/steve/aggbug/181.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Stephen Horsfield</dc:creator>
            <guid>http://blogs.interakting.co.uk/steve/archive/2008/01/18/EPiServer-FindPagesWithCriteria-Multiple-Criteria-and-Boolean-Property-Tests.aspx</guid>
            <pubDate>Fri, 18 Jan 2008 15:53:28 GMT</pubDate>
            <wfw:comment>http://blogs.interakting.co.uk/steve/comments/181.aspx</wfw:comment>
            <comments>http://blogs.interakting.co.uk/steve/archive/2008/01/18/EPiServer-FindPagesWithCriteria-Multiple-Criteria-and-Boolean-Property-Tests.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.interakting.co.uk/steve/comments/commentRss/181.aspx</wfw:commentRss>
        </item>
        <item>
            <title>EPiServer: PropertyCriteria &amp;mdash; GreaterThan Value or Value GreaterThan?</title>
            <link>http://blogs.interakting.co.uk/steve/archive/2008/01/18/EPiServer-PropertyCriteria-mdash-GreaterThan-Value-or-Value-GreaterThan.aspx</link>
            <description>&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Using &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;, you may use the FindPagesWithCriteria method to retrieve a list of pages based on certain properties, but the helpfully enumerated conditions may be confusing.  After all, with a binary inequality operator it is quite important to know the order of the expressions...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Context&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You use PropertyCriteria objects to set the criteria for a search and you can use the Condition property to determine the operator.  Suppose you selected the GreaterThan operator:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;IF --PROPERTY-- &amp;gt; --VALUE-- THEN&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;But is it actually:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;IF --VALUE-- &amp;gt; --PROPERTY-- THEN&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The two operations give entirely different answers, and they are not even inverse.  The inverse operator to &amp;gt; (greater-than) is &amp;lt;= (less-than-or-equal).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The answer&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A search through the &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; documentation reveals that the answer is that &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; will use:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;IF --PROPERTY-- --CONDITION-- --VALUE-- THEN&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Versions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; 5 &lt;/li&gt;
    &lt;li&gt;&lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; 4 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Metadata&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Categories: Software development, &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt;, &lt;a title="Microsoft ASP.NET" target="_blank" href="http://msdn2.microsoft.com/en-gb/asp.net/default.aspx"&gt;ASP.NET&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;Additional keywords: EPDataFactory, FindPagesWithCriteria, Search, Publishing dates, binary operator, inequality, Greater than, Less than, CompareCondition, PageStartPublish, PageStopPublish &lt;/li&gt;
&lt;li&gt;Technorati Tags: 
&lt;a href="http://technorati.com/tags/software%20development" rel="tag"&gt;software development&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/ASP.NET" rel="tag"&gt;ASP.NET&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/EPiServer" rel="tag"&gt;EPiServer&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/FindPagesWithCriteria" rel="tag"&gt;FindPagesWithCriteria&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/search" rel="tag"&gt;search&lt;/a&gt;
&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://blogs.interakting.co.uk/steve/aggbug/180.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Stephen Horsfield</dc:creator>
            <guid>http://blogs.interakting.co.uk/steve/archive/2008/01/18/EPiServer-PropertyCriteria-mdash-GreaterThan-Value-or-Value-GreaterThan.aspx</guid>
            <pubDate>Fri, 18 Jan 2008 14:15:28 GMT</pubDate>
            <wfw:comment>http://blogs.interakting.co.uk/steve/comments/180.aspx</wfw:comment>
            <comments>http://blogs.interakting.co.uk/steve/archive/2008/01/18/EPiServer-PropertyCriteria-mdash-GreaterThan-Value-or-Value-GreaterThan.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.interakting.co.uk/steve/comments/commentRss/180.aspx</wfw:commentRss>
        </item>
        <item>
            <title>EPiServer: Problems importing data &amp;mdash; POST fails</title>
            <link>http://blogs.interakting.co.uk/steve/archive/2008/01/18/EPiServer-Problems-importing-data-mdash-POST-fails.aspx</link>
            <description>&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I've been importing a live &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; site into a development environment for further work.  Normally, this works without problem, but this time I've been getting a POST error, but nothing informative.  What's happening?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A quick look at the event logs on the IIS server quickly identifies the problem: the file exceeds the upload limit.  Of course this is less likely to happen in a normal development run, but once there is a fair amount of data it fails.  If I hadn't spotted the error in the event log, I might have been stuck for some time.&lt;/p&gt;
&lt;p&gt;The default &lt;a title="Microsoft ASP.NET" target="_blank" href="http://msdn2.microsoft.com/en-gb/asp.net/default.aspx"&gt;ASP.NET&lt;/a&gt; upload limit is 4 MB, so if you need more you will have to change the web.config settings.  The element you have to change is the maxRequestLength attribute on the &amp;lt;system.web&amp;gt;&amp;lt;httpRuntime&amp;gt; element.  The size is specified in KB, so for a 32 MB limit, use the following:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;system.web&amp;gt; &lt;br /&gt;
  &amp;lt;httpruntime maxrequestlength="32768" /&amp;gt; &lt;br /&gt;
&amp;lt;/system.web&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a title="http://msdn2.microsoft.com/en-us/library/e1f13641(VS.71).aspx" href="http://msdn2.microsoft.com/en-us/library/e1f13641(VS.71).aspx"&gt;&amp;lt;httpRuntime&amp;gt; Element (Microsoft MSDN)&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Versions&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a title="Microsoft Windows Server 2003" target="_blank" href="http://www.microsoft.com/windowsserver2003/default.mspx"&gt;Windows Server 2003&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a title="Microsoft Windows XP" target="_blank" href="http://www.microsoft.com/windows/products/windowsxp/default.mspx"&gt;Windows XP&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;Microsoft &lt;a title="Microsoft .NET Framework" target="_blank" href="http://msdn2.microsoft.com/en-gb/netframework/default.aspx"&gt;.NET&lt;/a&gt; Framework 2.0 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Metadata&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Categories: Software Development, &lt;a title="Microsoft ASP.NET" target="_blank" href="http://msdn2.microsoft.com/en-gb/asp.net/default.aspx"&gt;ASP.NET&lt;/a&gt;, IIS, &lt;a title="EPiServer Content Management System" target="_blank" href="http://www.episerver.com"&gt;EPiServer&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;Additional keywords: import, POST, error, upload limit &lt;/li&gt;
&lt;li&gt;Technorati Tags: 
&lt;a href="http://technorati.com/tags/software%20development" rel="tag"&gt;software development&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/IT%20Management" rel="tag"&gt;IT Management&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/ASP.NET" rel="tag"&gt;ASP.NET&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/EPiServer" rel="tag"&gt;EPiServer&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/import" rel="tag"&gt;import&lt;/a&gt;,
&lt;a href="http://technorati.com/tags/problem" rel="tag"&gt;problem&lt;/a&gt;
&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://blogs.interakting.co.uk/steve/aggbug/179.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Stephen Horsfield</dc:creator>
            <guid>http://blogs.interakting.co.uk/steve/archive/2008/01/18/EPiServer-Problems-importing-data-mdash-POST-fails.aspx</guid>
            <pubDate>Fri, 18 Jan 2008 10:47:51 GMT</pubDate>
            <wfw:comment>http://blogs.interakting.co.uk/steve/comments/179.aspx</wfw:comment>
            <comments>http://blogs.interakting.co.uk/steve/archive/2008/01/18/EPiServer-Problems-importing-data-mdash-POST-fails.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.interakting.co.uk/steve/comments/commentRss/179.aspx</wfw:commentRss>
        </item>
        <item>
            <title>EPiServer: FindPagesWithCriteria and Publishing Dates</title>
            <link>http://blogs.interakting.co.uk/steve/archive/2008/01/03/EPiServer-FindPagesWithCriteria-and-Publishing-Dates.aspx</link>
            <description>&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p&gt;EPiServer does not exclude pages outside of publishing schedules when retrieved using the FindPagesWithCriteria method.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p dir="ltr"&gt;&lt;strong&gt;&lt;font color="#000080"&gt;UPDATE&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p dir="ltr"&gt;&lt;font color="#000080"&gt;I've found the following article on the EPiServer website:  &lt;font face="Arial"&gt;&lt;a title="http://www.episerver.com/templates/faq.aspx?id=4852&amp;amp;epslanguage=EN" href="http://www.episerver.com/templates/faq.aspx?id=4852&amp;amp;epslanguage=EN"&gt;How Do I Search for Unpublished Pages&lt;/a&gt;.  The reverse logic should be applied, but it has the advantage of performing the filter at the data layer.  It involves adding two property criteria, one for PageStartPublish and one for PageStopPublish.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;font color="#000080"&gt;Don't be fooled by the EPiServer.Filters namespace, the FilterPublished class doesn't help!&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080"&gt;Since that page is only visible to EPiServer site members, here's an example:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;PropertyCriteriaCollection criterias =&lt;br /&gt;
  new PropertyCriteriaCollection();&lt;br /&gt;
&lt;br /&gt;
startPublishCriteria.Condition = CompareCondition.LessThan;&lt;br /&gt;
startPublishCriteria.Name = "PageStartPublish";&lt;br /&gt;
startPublishCriteria.Value = DateTime.Now.ToString();&lt;br /&gt;
startPublishCriteria.Type = PropertyDataType.Date;&lt;br /&gt;
criterias.Add(startPublishCriteria);&lt;br /&gt;
&lt;br /&gt;
PropertyCriteria stopPublishCriteria = new PropertyCriteria();&lt;br /&gt;
stopPublishCriteria.Condition = CompareCondition.GreaterThan;&lt;br /&gt;
stopPublishCriteria.Name = "PageStopPublish";&lt;br /&gt;
stopPublishCriteria.Value = DateTime.Now.ToString();&lt;br /&gt;
stopPublishCriteria.Type = PropertyDataType.Date;&lt;br /&gt;
criterias.Add(stopPublishCriteria);&lt;br /&gt;
&lt;br /&gt;
PageDataCollection pages =&lt;br /&gt;
  Global.EPDataFactory.FindPagesWithCriteria(&lt;br /&gt;
  Global.EPConfig.StartPage, &lt;br /&gt;
  criterias);&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Workaround&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p&gt;Once matching pages have been retrieved using FindPagesWithCriteria, apply a futher filter on the basis of the Page class's CheckPublishedStatus method.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;div&gt;
&lt;div&gt;&lt;font face="Courier New" color="#2b91af" size="2"&gt;PageDataCollection&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt; pages = &lt;font color="#2b91af"&gt;&lt;span&gt;DataFactory&lt;/span&gt;&lt;/font&gt;.Instance.FindPagesWithCriteria(&lt;br /&gt;
    parent, col, &lt;font color="#2b91af"&gt;AccessLevel&lt;/font&gt;.Read);&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;pages.Sort(&lt;font color="#0000ff"&gt;&lt;span&gt;new&lt;/span&gt;&lt;/font&gt; &lt;font color="#2b91af"&gt;PageDataListComparer&lt;/font&gt;(&lt;font color="#2b91af"&gt;SortType&lt;/font&gt;.DisplayDate,&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;span&gt;&lt;font color="#2b91af"&gt;    SortDirection&lt;/font&gt;.Descending));&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New" size="2"&gt; &lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;System.Collections.Generic.&lt;font color="#2b91af"&gt;&lt;span&gt;List&lt;/span&gt;&lt;/font&gt;&amp;lt;&lt;font color="#2b91af"&gt;PageData&lt;/font&gt;&amp;gt; removeList = &lt;font color="#0000ff"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;    new&lt;/font&gt; System.Collections.Generic.&lt;font color="#2b91af"&gt;List&lt;/font&gt;&amp;lt;&lt;font color="#2b91af"&gt;PageData&lt;/font&gt;&amp;gt;();&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New" size="2"&gt; &lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;foreach&lt;/span&gt;&lt;/font&gt; (&lt;font color="#2b91af"&gt;PageData&lt;/font&gt; p &lt;font color="#0000ff"&gt;in&lt;/font&gt; pages)&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New" size="2"&gt;{&lt;/font&gt;&lt;/div&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;if&lt;/span&gt;&lt;/font&gt; (p.CheckPublishedStatus(&lt;font color="#2b91af"&gt;PagePublishedStatus&lt;/font&gt;.Published)) &lt;font color="#0000ff"&gt;continue&lt;/font&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New" size="2"&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New" size="2"&gt;removeList.Add(p);&lt;/font&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div&gt;&lt;font face="Courier New" size="2"&gt;}&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;foreach&lt;/span&gt;&lt;/font&gt; (&lt;font color="#2b91af"&gt;PageData&lt;/font&gt; pr &lt;font color="#0000ff"&gt;in&lt;/font&gt; removeList) pages.Remove(pr);&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New" size="2"&gt; &lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;return&lt;/span&gt;&lt;/font&gt; pages;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Versions&lt;/strong&gt;&lt;/p&gt;
&lt;ul dir="ltr"&gt;
    &lt;li&gt;Microsoft .NET Framework v3.0 &lt;/li&gt;
    &lt;li&gt;EPiServer 5 &lt;/li&gt;
    &lt;li&gt;Windows Server 2003 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Metadata&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Categories: .NET, ASP.NET, Software Development, EPiServer &lt;/li&gt;
    &lt;li&gt;Additional keywords: FindPagesWithCriteria EPiServer, Search, Permissions, Published, FindPagesWithCriteria EPiServer Publishing Dates &lt;/li&gt;
    &lt;li&gt;Technorati Tags: &lt;a rel="tag" href="http://technorati.com/tags/software%20development"&gt;software development&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/EPiServer"&gt;EPiServer&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/.NET"&gt;.NET&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/ASP.NET"&gt;ASP.NET&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/FindPagesWithCriteria"&gt;FindPagesWithCriteria&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/search"&gt;search&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/publishing"&gt;publishing&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/security"&gt;security&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://blogs.interakting.co.uk/steve/aggbug/133.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Stephen Horsfield</dc:creator>
            <guid>http://blogs.interakting.co.uk/steve/archive/2008/01/03/EPiServer-FindPagesWithCriteria-and-Publishing-Dates.aspx</guid>
            <pubDate>Thu, 03 Jan 2008 15:18:35 GMT</pubDate>
            <wfw:comment>http://blogs.interakting.co.uk/steve/comments/133.aspx</wfw:comment>
            <comments>http://blogs.interakting.co.uk/steve/archive/2008/01/03/EPiServer-FindPagesWithCriteria-and-Publishing-Dates.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.interakting.co.uk/steve/comments/commentRss/133.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>