<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><language>en</language><title>Blog posts by Lee Crowe</title> <link>https://world.optimizely.com/blogs/Lee-Crowe/</link><description></description><ttl>60</ttl><generator>Optimizely World</generator><item> <title>Content search and replace</title>            <link>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2014/11/content-search-and-replace/</link>            <description>&lt;p&gt;The development team I currently work in like to have content in line with production content but it very quickly becomes outdated.&lt;/p&gt;  &lt;br /&gt;  &lt;p&gt;To aid with this we have Go pipelines which restore production database backups over lower internal environment databases.&lt;/p&gt;  &lt;br /&gt;  &lt;p&gt;The CMS Site has many links to various other product journeys. These journeys have environment specific Urls. If we are are in our regression environment, we would like content links to hand off to the relevant regression product journeys.&lt;/p&gt;  &lt;br /&gt;  &lt;p&gt;Our go pipeline restores the production database and performs many content replacements by executing a search and replace stored procedure. Below you will find the stored procedure definition to search and replace content.   &lt;br /&gt;&lt;/p&gt;  &lt;br /&gt;  &lt;pre&gt;IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N&#39;[dbo].[usp_CustomSearchAndReplace]&#39;) AND type in (N&#39;P&#39;, N&#39;PC&#39;))
      DROP PROCEDURE [dbo].[usp_CustomSearchAndReplace]
GO

CREATE PROCEDURE [dbo].[usp_CustomSearchAndReplace]
      @SearchFor nvarchar(1000),
      @ReplaceWith nvarchar(1000) = &#39;&#39;
AS
      SELECT * FROM [tblContentProperty] WHERE [String] LIKE &#39;%&#39; + @SearchFor + &#39;%&#39; OR [LongString] LIKE &#39;%&#39; + @SearchFor + &#39;%&#39;
      SELECT * FROM [tblWorkContentProperty] WHERE [String] LIKE &#39;%&#39; + @SearchFor + &#39;%&#39; OR [LongString] LIKE &#39;%&#39; + @SearchFor + &#39;%&#39;

      IF LEN(LTRIM(RTRIM(@ReplaceWith))) &amp;gt; 0
      BEGIN
            PRINT &#39;Updating published pages&#39;
            UPDATE [tblContentProperty] SET [String] = REPLACE([String], @SearchFor, @ReplaceWith) WHERE [String] LIKE &#39;%&#39; + @SearchFor + &#39;%&#39;
            UPDATE [tblContentProperty] SET [LongString] = REPLACE(CAST([LongString] AS nvarchar(max)), @SearchFor, @ReplaceWith) WHERE [LongString] LIKE &#39;%&#39; + @SearchFor + &#39;%&#39;
            PRINT &#39;Updating unpublished pages&#39;
            UPDATE [tblWorkContentProperty] SET [String] = REPLACE([String], @SearchFor, @ReplaceWith) WHERE [String] LIKE &#39;%&#39; + @SearchFor + &#39;%&#39;
            UPDATE [tblWorkContentProperty] SET [LongString] = REPLACE(CAST([LongString] AS nvarchar(max)), @SearchFor, @ReplaceWith) WHERE [LongString] LIKE &#39;%&#39; + @SearchFor + &#39;%&#39;
            PRINT &#39;Updating soft links&#39;
            UPDATE [tblContentSoftlink] SET [LinkURL] = REPLACE([LinkURL], @SearchFor, @ReplaceWith) WHERE [LinkURL] LIKE &#39;%&#39; + @SearchFor + &#39;%&#39;
      END&lt;/pre&gt;</description>            <guid>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2014/11/content-search-and-replace/</guid>            <pubDate>Wed, 19 Nov 2014 13:45:25 GMT</pubDate>           <category>Blog post</category></item><item> <title>ElencySolutions.MultipleProperty v1.6.3 Released</title>            <link>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2012/10/ElencySolutionsMultipleProperty-v163-Released/</link>            <description>&lt;p&gt;In the previous couple of minor releases I added some functionality to automatically render dynamic content correctly in presentation view, I had several requests from Developers for this ability. &lt;/p&gt;  &lt;p&gt;The implementation ended up becoming more complex than it needed to be and there were issues when using this solution with composer.&lt;/p&gt;  &lt;p&gt;After a little reflection I decided to rollback this functionality and provide an extension method instead hence the reason for v1.6.3.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;New Features&lt;/h3&gt;  &lt;p&gt;A new ToPresentationString() extension method is now available which can be called on strings to render dynamic content correctly.&lt;/p&gt;  &lt;pre style=&quot;border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 620px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px&quot;&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  1: &lt;span style=&quot;color: #0000ff&quot;&gt;using&lt;/span&gt; ElencySolutions.MultipleProperty.Extensions;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  2: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  3: &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; html = entity.XhtmlProperty.ToPresentationString();&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h3&gt;Installation&lt;/h3&gt;

&lt;p&gt;The easiest way to install the assembly is by installing it from the &lt;a href=&quot;http://nuget.episerver.com/&quot;&gt;EPiServer Nuget Feed&lt;/a&gt; (once it has been made available).&amp;#160; But if you are not down with the cool kids you can download it from &lt;a href=&quot;http://episerveresmp.codeplex.com/releases/view/96649&quot;&gt;codeplex&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;On the &lt;a href=&quot;http://episerveresmp.codeplex.com/&quot;&gt;codeplex&lt;/a&gt; site you will also find some &lt;a href=&quot;http://episerveresmp.codeplex.com/downloads/get/517922&quot;&gt;useful documentation&lt;/a&gt; and &lt;a href=&quot;http://episerveresmp.codeplex.com/downloads/get/499904&quot;&gt;example code&lt;/a&gt; to get you familiar with what the property offers.&amp;#160; The example code is dependant on &lt;a href=&quot;http://pagetypebuilder.codeplex.com/&quot;&gt;PageTypeBuilder&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Feedback&lt;/h3&gt;

&lt;p&gt;As always feedback is greatly appreciated.&amp;#160; If you have any suggestions for new features or changes I am happy to hear them.&lt;/p&gt;

&lt;p&gt;Just twitter me &lt;a href=&quot;https://twitter.com/croweman&quot;&gt;@croweman&lt;/a&gt; or send me an email. &lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2012/10/ElencySolutionsMultipleProperty-v163-Released/</guid>            <pubDate>Mon, 22 Oct 2012 11:33:39 GMT</pubDate>           <category>Blog post</category></item><item> <title>ElencySolutions.MultipleProperty v1.6.2.1 Released</title>            <link>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2012/10/ElencySolutionsMultipleProperty-v1621-Released/</link>            <description>&lt;p&gt;There was a bug with dynamic content rendering in &lt;a href=&quot;http://world.episerver.com/Blogs/Lee-Crowe/Dates/2012/10/ElencySolutionsMultipleProperty-v162-Released/&quot; target=&quot;_blank&quot;&gt;Release v1.6.2&lt;/a&gt; when in published view.&amp;#160; This has been fixed in v1.6.2.1.&lt;/p&gt;  &lt;h3&gt;Installation&lt;/h3&gt;  &lt;p&gt;The easiest way to install the assembly is by installing it from the &lt;a href=&quot;http://nuget.episerver.com/&quot;&gt;EPiServer Nuget Feed&lt;/a&gt; (once it has been made available).&amp;#160; But if you are not down with the cool kids you can download it from &lt;a href=&quot;http://episerveresmp.codeplex.com/releases/view/95984&quot;&gt;codeplex&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;On the &lt;a href=&quot;http://episerveresmp.codeplex.com/&quot;&gt;codeplex&lt;/a&gt; site you will also find some &lt;a href=&quot;http://download-codeplex.sec.s-msft.com/Download?ProjectName=episerveresmp&amp;amp;DownloadId=499908&quot;&gt;useful documentation&lt;/a&gt; and &lt;a href=&quot;http://episerveresmp.codeplex.com/downloads/get/499904&quot;&gt;example code&lt;/a&gt; to get you familiar with what the property offers.&amp;#160; The example code is dependant on &lt;a href=&quot;http://pagetypebuilder.codeplex.com/&quot;&gt;PageTypeBuilder&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;Feedback&lt;/h3&gt;  &lt;p&gt;As always feedback is greatly appreciated.&amp;#160; If you have any suggestions for new features or changes I am happy to hear them.&lt;/p&gt;  &lt;p&gt;Just twitter me &lt;a href=&quot;https://twitter.com/croweman&quot; target=&quot;_blank&quot;&gt;@croweman&lt;/a&gt; or send me an email. &lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2012/10/ElencySolutionsMultipleProperty-v1621-Released/</guid>            <pubDate>Tue, 09 Oct 2012 10:35:42 GMT</pubDate>           <category>Blog post</category></item><item> <title>ElencySolutions.MultipleProperty v1.6.2 Released</title>            <link>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2012/10/ElencySolutionsMultipleProperty-v162-Released/</link>            <description>&lt;p&gt;A new version of my MultipleProperty assembly is now available.    &lt;br /&gt;    &lt;br /&gt;For more information regarding the ElencySolutions.MultipleProperty assembly please refer to &lt;a href=&quot;http://episerveresmp.codeplex.com/&quot; target=&quot;_blank&quot;&gt;codeplex&lt;/a&gt; which has several links to useful resources.     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Background for the v1.6.2 Release&lt;/h3&gt;  &lt;p&gt;I have had a number of issues raised to me in the last few weeks mainly to do with PropertyImageUrl properties.&amp;#160; &lt;/p&gt;  &lt;p&gt;The issue is caused when VPP images are either deleted, moved or renamed.&amp;#160; &lt;/p&gt;  &lt;p&gt;When Edit mode is loaded and there is an invalid VPP image link within a multiple property Edit mode will fall over with a 500 error &lt;img style=&quot;border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none&quot; class=&quot;wlEmoticon wlEmoticon-sadsmile&quot; alt=&quot;Sad smile&quot; src=&quot;/link/6d1297c83f1b4253bc59c9ea9006e726.png&quot; /&gt;.&lt;/p&gt;  &lt;p&gt;This then makes it very difficult for an editor/developer to fix the invalid image link!    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;All Fixes in v1.6.2&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Edit mode will no longer fall over with a 500 error when a multiple property points to an invalid VPP image. &lt;/li&gt;    &lt;li&gt;Dynamic content within XHTML properties will now render correctly in preview and published mode. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Further information around MultipleProperty and VPP images&lt;/h3&gt;  &lt;p&gt;When using standard PropertyImageUrl properties and deleting, renaming or moving VPP images you will be warned by EPiServer that image links will be broken.&lt;/p&gt;  &lt;p&gt;Because of the way the MultipleProperty controls are built it is not possible (as far as I am aware) to hook into this functionality and inform the user that MultipleProperty image URL’s will also be broke.&amp;#160; &lt;/p&gt;  &lt;p&gt;I assume the way EPiServer handles this is that it would select records from tblProperty and tblWorkProperty and check whether there are any values in the String column that link to the VPP images that are being modified.&amp;#160; &lt;/p&gt;  &lt;p&gt;Multiple property serializes the entity values to xml and stores the values in the LongString column.&lt;/p&gt;  &lt;p&gt;It may well be possible to hook into various UnifiedFile events and then execute some SQL to update column values but I think this is a bit messy/risky.&lt;/p&gt;  &lt;p&gt;For now, I believe the safest option is to allow Edit mode to load and the value of the property to be empty.&amp;#160; It would then be the content editors responsibility to fix the image links although they will not instantly be aware that the VPP image changes they are making will potentially have a knock on effect on various MultipleProperty properties throughout the site.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Installation&lt;/h3&gt;  &lt;p&gt;The easiest way to install the assembly is by installing it from the &lt;a href=&quot;http://nuget.episerver.com/&quot; target=&quot;_blank&quot;&gt;EPiServer Nuget Feed&lt;/a&gt; (once it has been made available).&amp;#160; But if you are not down with the cool kids you can download it from &lt;a href=&quot;http://episerveresmp.codeplex.com/releases/view/95590&quot; target=&quot;_blank&quot;&gt;codeplex&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;On the &lt;a href=&quot;http://episerveresmp.codeplex.com/&quot; target=&quot;_blank&quot;&gt;codeplex&lt;/a&gt; site you will also find some &lt;a href=&quot;http://download-codeplex.sec.s-msft.com/Download?ProjectName=episerveresmp&amp;amp;DownloadId=499908&quot; target=&quot;_blank&quot;&gt;useful documentation&lt;/a&gt; and &lt;a href=&quot;http://episerveresmp.codeplex.com/downloads/get/499904&quot; target=&quot;_blank&quot;&gt;example code&lt;/a&gt; to get you familiar with what the property offers.&amp;#160; The example code is dependant on &lt;a href=&quot;http://pagetypebuilder.codeplex.com/&quot; target=&quot;_blank&quot;&gt;PageTypeBuilder&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Feedback&lt;/h3&gt;  &lt;p&gt;As always feedback is greatly appreciated.&amp;#160; If you have any suggestions for new features or changes I am happy to hear them.&lt;/p&gt;  &lt;p&gt;Just twitter me &lt;a href=&quot;https://twitter.com/croweman&quot; target=&quot;_blank&quot;&gt;@croweman&lt;/a&gt; or send me an email.&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2012/10/ElencySolutionsMultipleProperty-v162-Released/</guid>            <pubDate>Tue, 02 Oct 2012 10:55:17 GMT</pubDate>           <category>Blog post</category></item><item> <title>Building Hyperlinks in EPiServer</title>            <link>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2012/8/Building-Hyperlinks-in-EPiServer/</link>            <description>&lt;p&gt;An issue was raised in one of the projects I was working on yesterday to do with some of the hyperlinks that are rendered on various components within the site.&lt;/p&gt;  &lt;p&gt;The issue was mainly to do an editor setting a PageReference property to point to a page that has the “Target frame” set to open in a new window.&amp;#160; This option appears on the Shortcut tab below:    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src=&quot;http://download-codeplex.sec.s-msft.com/Download?ProjectName=episervercroweman&amp;amp;DownloadId=467986&quot; /&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Unfortunately most of the components within the site just render the LinkUrl which has been fine up until now.&amp;#160; The editor expects the link to open a new window if the “Target frame” value is set to “Open the link in a new window” on the page being referenced.     &lt;br /&gt;    &lt;br /&gt;This makes sense but is a potentially large amount of effort to implement throughout the site.     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;So for anyone else who isn’t aware of this potential pitfall I have created some helper methods for building link URL’s which mayprove useful.&lt;/p&gt;  &lt;p&gt;The helper class can be downloaded from &lt;a href=&quot;http://download-codeplex.sec.s-msft.com/Download?ProjectName=episervercroweman&amp;amp;DownloadId=468036&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&amp;#160; But the code within the class is also shown below.&lt;/p&gt;  &lt;pre style=&quot;border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 620px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px&quot;&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  1: &lt;span style=&quot;color: #0000ff&quot;&gt;namespace&lt;/span&gt; Project
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  2: {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  3:     &lt;span style=&quot;color: #0000ff&quot;&gt;using&lt;/span&gt; System;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  4:     &lt;span style=&quot;color: #0000ff&quot;&gt;using&lt;/span&gt; System.Text;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  5:     &lt;span style=&quot;color: #0000ff&quot;&gt;using&lt;/span&gt; System.Web;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  6:     &lt;span style=&quot;color: #0000ff&quot;&gt;using&lt;/span&gt; EPiServer;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  7:     &lt;span style=&quot;color: #0000ff&quot;&gt;using&lt;/span&gt; EPiServer.Core;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  8:     &lt;span style=&quot;color: #0000ff&quot;&gt;using&lt;/span&gt; EPiServer.SpecializedProperties;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  9:     &lt;span style=&quot;color: #0000ff&quot;&gt;using&lt;/span&gt; EPiServer.Web;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 10: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 11:     &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; WebUrlHelper
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 12:     {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 13:         &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; BuildLinkHtml(PageReference pageReference, &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; text, &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; title = &lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;, 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 14:             &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; cssClass = &lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;, &lt;span style=&quot;color: #0000ff&quot;&gt;bool&lt;/span&gt; fullyQualified = &lt;span style=&quot;color: #0000ff&quot;&gt;false&lt;/span&gt;, &lt;span style=&quot;color: #0000ff&quot;&gt;bool&lt;/span&gt; newWindow = &lt;span style=&quot;color: #0000ff&quot;&gt;false&lt;/span&gt;)
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 15:         {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 16:             &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; linkUrl = &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;#&lt;/span&gt;&amp;quot;;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 17: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 18:             &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (!PageReference.IsNullOrEmpty(pageReference))
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 19:             {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 20:                 PageData pageData = DataFactory.Instance.GetPage(pageReference);
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 21:                 PropertyFrame propertyFrame = pageData.Property[&amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;PageTargetFrame&lt;/span&gt;&amp;quot;] &lt;span style=&quot;color: #0000ff&quot;&gt;as&lt;/span&gt; PropertyFrame;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 22: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 23:                 &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (!newWindow &amp;amp;&amp;amp; !&lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;.IsNullOrEmpty(propertyFrame.FrameName) &amp;amp;&amp;amp; 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 24:                     &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;.Equals(propertyFrame.FrameName, &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;_blank&lt;/span&gt;&amp;quot;, StringComparison.OrdinalIgnoreCase))
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 25:                 {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 26:                     newWindow = &lt;span style=&quot;color: #0000ff&quot;&gt;true&lt;/span&gt;;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 27:                 }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 28: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 29:                 linkUrl = GetPageUrl(pageData, fullyQualified).ToString();
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 30:             }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 31: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 32:             &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; BuildLinkHtml(linkUrl, text, title, cssClass, newWindow);
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 33:         }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 34: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 35:         &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; BuildLinkHtml(&lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; linkUrl, &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; text, &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; title = &lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;, 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 36:             &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; cssClass = &lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;, &lt;span style=&quot;color: #0000ff&quot;&gt;bool&lt;/span&gt; newWindow = &lt;span style=&quot;color: #0000ff&quot;&gt;false&lt;/span&gt;)
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 37:         {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 38:             &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (!&lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;.IsNullOrEmpty(title))
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 39:                 title = &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;.Format(&amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt; title=\&amp;quot;{0}\&amp;quot;&lt;/span&gt;&amp;quot;, title);
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 40: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 41:             &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (!&lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;.IsNullOrEmpty(cssClass))
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 42:                 cssClass = &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;.Format(&amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt; class=\&amp;quot;{0}\&amp;quot;&lt;/span&gt;&amp;quot;, cssClass);
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 43: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 44:             &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;.Format(&amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;&amp;lt;a href=\&amp;quot;{0}\&amp;quot;{1}{2}{3}&amp;gt;{4}&amp;lt;/a&amp;gt;&lt;/span&gt;&amp;quot;,
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 45:                 linkUrl,
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 46:                 cssClass,
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 47:                 title,
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 48:                 newWindow ? &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt; target=\&amp;quot;_blank\&amp;quot;&lt;/span&gt;&amp;quot; : &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;.Empty,
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 49:                 text);
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 50:         }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 51: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 52:         &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;static&lt;/span&gt; Uri GetPageUrl(PageData pageData, &lt;span style=&quot;color: #0000ff&quot;&gt;bool&lt;/span&gt; fullyQualified = &lt;span style=&quot;color: #0000ff&quot;&gt;false&lt;/span&gt;)
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 53:         {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 54:             PageShortcutType propertyLinkType = (PageShortcutType)Enum.Parse(&lt;span style=&quot;color: #0000ff&quot;&gt;typeof&lt;/span&gt;(PageShortcutType), pageData.Property[&amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;PageShortcutType&lt;/span&gt;&amp;quot;].ToString());
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 55: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 56:             UrlBuilder url = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; UrlBuilder(pageData.LinkURL);
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 57:             &lt;span style=&quot;color: #0000ff&quot;&gt;bool&lt;/span&gt; getPageUrl = &lt;span style=&quot;color: #0000ff&quot;&gt;true&lt;/span&gt;;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 58:             &lt;span style=&quot;color: #0000ff&quot;&gt;bool&lt;/span&gt; changeHostAndScheme = &lt;span style=&quot;color: #0000ff&quot;&gt;true&lt;/span&gt;;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 59: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 60:             &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (propertyLinkType == PageShortcutType.Shortcut &amp;amp;&amp;amp; 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 61:                 pageData.LinkURL.IndexOf(&amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;id=&lt;/span&gt;&amp;quot;, StringComparison.OrdinalIgnoreCase) != -1)
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 62:             {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 63:                 &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; id = pageData.LinkURL.Substring(pageData.LinkURL.IndexOf(&amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;id=&lt;/span&gt;&amp;quot;, StringComparison.OrdinalIgnoreCase) + 3);
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 64: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 65:                 &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (id.Contains(&amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;&amp;amp;&lt;/span&gt;&amp;quot;))
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 66:                     id = id.Substring(0, id.IndexOf(&amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;&amp;amp;&lt;/span&gt;&amp;quot;, StringComparison.OrdinalIgnoreCase));
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 67: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 68:                 &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; pageId;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 69: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 70:                 &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt;.TryParse(id, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; pageId))
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 71:                 {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 72:                     pageData = DataFactory.Instance.GetPage(&lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; PageReference(pageId));
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 73:                     url = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; UrlBuilder(pageData.LinkURL);
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 74:                 }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 75:             }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 76: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 77:             &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (propertyLinkType == PageShortcutType.External)
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 78:             {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 79:                 getPageUrl = &lt;span style=&quot;color: #0000ff&quot;&gt;false&lt;/span&gt;;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 80:                 changeHostAndScheme = &lt;span style=&quot;color: #0000ff&quot;&gt;false&lt;/span&gt;;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 81:             }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 82: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 83:             &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (UrlRewriteProvider.IsFurlEnabled &amp;amp;&amp;amp; getPageUrl)
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 84:                 Global.UrlRewriteProvider.ConvertToExternal(url, pageData.PageLink, Encoding.UTF8);
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 85: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 86:             &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (changeHostAndScheme &amp;amp;&amp;amp; fullyQualified &amp;amp;&amp;amp; HttpContext.Current != &lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;)
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 87:             {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 88:                 url.Host = HttpContext.Current.Request.Url.Host;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 89:                 url.Scheme = HttpContext.Current.Request.Url.Scheme;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 90:             }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 91: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 92:             &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; url.Uri;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 93:         }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 94:     }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 95: }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;There are two BuildLinkHtml methods that can be called and also a GetPageUrl method. 
  &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Hopefully this will prove of some use to other people &lt;img style=&quot;border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none&quot; class=&quot;wlEmoticon wlEmoticon-smile&quot; alt=&quot;Smile&quot; src=&quot;/link/42987143dc55412fa123c6ec0e7f90db.png&quot; /&gt; 

  &lt;br /&gt;

  &lt;br /&gt;&lt;/p&gt;

&lt;h3&gt;Feedback&lt;/h3&gt;

&lt;p&gt;As always feedback is greatly appreciated. Just twitter me &lt;a href=&quot;https://twitter.com/croweman&quot; target=&quot;_blank&quot;&gt;@croweman&lt;/a&gt; or send me an email.&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2012/8/Building-Hyperlinks-in-EPiServer/</guid>            <pubDate>Fri, 10 Aug 2012 12:14:52 GMT</pubDate>           <category>Blog post</category></item><item> <title>ElencySolutions.MultipleProperty v1.6.1 Released</title>            <link>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2012/8/ElencySolutionsMultipleProperty-v161-Released/</link>            <description>&lt;p&gt;A new version of MultipleProperty has now been released .&lt;/p&gt;  &lt;h3&gt;New Minor Features&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Edit captions will now be used in error messages rather than property names.&amp;#160; In previous versions if there was a property named “ImageGalleries” collection with an ImageGallery entity having a property named “Gallery name”.&amp;#160; The error message would have referred to the property name as&lt;strong&gt; “ImageGalleries_GalleryName”&lt;/strong&gt; where as now edit captions will be used so they will appear like this &lt;strong&gt;“Image galleries – Gallery name”.&lt;/strong&gt;       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;A new setting has been added to the multiple property configuration to allow asterix’s that appear next to the label text for required fields to be hidden.&amp;#160; This setting is named “showAsterixForRequiredFields” and it’s default value is true. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Installation&lt;/h3&gt;  &lt;p&gt;The easiest way to install the assembly is by installing it from the &lt;a href=&quot;http://nuget.episerver.com&quot;&gt;EPiServer nuget feed&lt;/a&gt; (once it has been made available).&amp;#160; But if you are not down with the cool kids you can download it from &lt;a href=&quot;http://episerveresmp.codeplex.com&quot;&gt;codeplex&lt;/a&gt;.&amp;#160; The assembly is built for EPiServer CMS 6 and onwards.&lt;/p&gt;  &lt;p&gt;On the &lt;a href=&quot;http://episerveresmp.codeplex.com&quot;&gt;codeplex&lt;/a&gt; site you will also find some &lt;a href=&quot;http://download-codeplex.sec.s-msft.com/Download?ProjectName=episerveresmp&amp;amp;DownloadId=465539&quot;&gt;useful documentation&lt;/a&gt; and &lt;a href=&quot;http://episerveresmp.codeplex.com/downloads/get/405004&quot;&gt;example code&lt;/a&gt; to get you familiar with what the property offers.&amp;#160; The example code is dependent on PageTypeBuilder. &lt;/p&gt;  &lt;h3&gt;Feedback&lt;/h3&gt;  &lt;p&gt;As always feedback is greatly appreciated, if you have any suggestions for new features or changes I am happy to hear them.&lt;/p&gt;  &lt;p&gt;Just twitter me &lt;a href=&quot;http://www.twitter.com/croweman&quot;&gt;@croweman&lt;/a&gt; or send me an email.&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2012/8/ElencySolutionsMultipleProperty-v161-Released/</guid>            <pubDate>Fri, 03 Aug 2012 15:03:51 GMT</pubDate>           <category>Blog post</category></item><item> <title>ElencySolutions.MultipleProperty v1.6 Released</title>            <link>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2012/6/ElencySolutionsMultipleProperty-v16-Released/</link>            <description>&lt;p&gt;A new version of my multiple property assembly is now available.&lt;/p&gt;  &lt;h3&gt;New Features&lt;/h3&gt;  &lt;p&gt;You are now able to add custom validation to singular or collection based entity properties.    &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;Making use of the new validation functionality&lt;/h3&gt;  &lt;p&gt;Two new virtual methods have been added to the &lt;strong&gt;MultiplePropertyBase&lt;/strong&gt; class.&amp;#160; These methods are named ValidateEntity and ValidateEntities.&amp;#160; Example validation code is below:&lt;/p&gt;  &lt;pre style=&quot;border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 620px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px&quot;&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; PropertyGalleryImages : MultiplePropertyBase&amp;lt;GalleryImages, GalleryImage&amp;gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;{
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;     &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; ValidateEntity(GalleryImage entity)
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;     {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;         &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (entity == &lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;)
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;             &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;.Empty;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;         &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (!entity.LinkUrl.StartsWith(&amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;http&lt;/span&gt;&amp;quot;))
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;A link URL must start with http&lt;/span&gt;&amp;quot;;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;     }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre style=&quot;border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 620px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px&quot;&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; PropertyGalleryImages : MultiplePropertyBase&amp;lt;GalleryImages, GalleryImage&amp;gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;{
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;     &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; ValidateEntities(GalleryImages entities)
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;     {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;         &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (entities == &lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;)
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;             &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;.Empty;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;         StringBuilder errorMessage = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; StringBuilder();
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;         &lt;span style=&quot;color: #0000ff&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; i = 0; i &amp;lt; entities.Count; i++)
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;         {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;            GalleryImage galleryImage = entities[i];
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (!galleryImage.LinkUrl.StartsWith(&amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;http&lt;/span&gt;&amp;quot;))
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;               errorMessage.AppendFormat(&amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;Item {0} link url is invalid, &lt;/span&gt;&amp;quot;, i + 1);
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;         }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;		  
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;         &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; errorMessage.ToString().TrimEnd(“, “);
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;      }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;&lt;/pre&gt;&lt;/pre&gt;

&lt;h3&gt;Installation&lt;/h3&gt;

&lt;p&gt;The easiest way to install the assembly is by installing it from the &lt;a href=&quot;http://nuget.episerver.com&quot; target=&quot;_blank&quot;&gt;EPiServer nuget feed&lt;/a&gt; (once it has been made available).&amp;#160; But if you are not down with the cool kids you can download it from &lt;a href=&quot;http://episerveresmp.codeplex.com&quot; target=&quot;_blank&quot;&gt;codeplex&lt;/a&gt;.&amp;#160; The assembly is built for EPiServer CMS 6 and onwards.&lt;/p&gt;

&lt;p&gt;On the &lt;a href=&quot;http://episerveresmp.codeplex.com&quot; target=&quot;_blank&quot;&gt;codeplex&lt;/a&gt; site you can also find some &lt;a href=&quot;http://episerveresmp.codeplex.com/downloads/get/405003&quot; target=&quot;_blank&quot;&gt;useful documentation&lt;/a&gt; and &lt;a href=&quot;http://episerveresmp.codeplex.com/downloads/get/405004&quot; target=&quot;_blank&quot;&gt;example code&lt;/a&gt; to get you familiar with what the property offers.&amp;#160; The example code is dependent on PageTypeBuilder. 

  &lt;br /&gt;

  &lt;br /&gt;&lt;/p&gt;

&lt;h3&gt;Feedback&lt;/h3&gt;

&lt;p&gt;As always feedback is greatly appreciated, if you have any suggestions for new features or changes I am happy to hear them.&lt;/p&gt;

&lt;p&gt;Just twitter me &lt;a href=&quot;http://www.twitter.com/croweman&quot; target=&quot;_blank&quot;&gt;@croweman&lt;/a&gt; or send me an email.&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2012/6/ElencySolutionsMultipleProperty-v16-Released/</guid>            <pubDate>Tue, 26 Jun 2012 17:29:16 GMT</pubDate>           <category>Blog post</category></item><item> <title>ElencySolutions.MultipleProperty v1.5.1 Released</title>            <link>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2012/5/ElencySolutionsMultipleProperty-v151-Released/</link>            <description>&lt;p&gt;A few days ago I released a new version of my multiple property assembly.&amp;#160; The previous version basically allowed you to set a default value for properties and also added some functionality which enabled you to turn on and off various list based buttons such as edit, delete etc.&amp;#160; The button toggling changes came about because of some customizations a colleague of mine had to make for a client.&lt;/p&gt;  &lt;p&gt;Unfortunately I made some assumptions about what he was trying to do and didn’t give him what he wanted (note to self do some requirements gathering up front).&amp;#160; So I give you v1.5.1.    &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;New Features/Bug Fixes&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Copy as new button will no longer allow you to add more items to the list than the set maximum number of items. &lt;/li&gt;    &lt;li&gt;New IMultiplePropertyEntityAbilityOverride interface. &lt;/li&gt;    &lt;li&gt;New IMultiplePropertyEntityCollectionAbilityOverride interface. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Making use of the new ability override interfaces&lt;/h3&gt;  &lt;p&gt;You’re entity classes can now implement the &lt;strong&gt;IMultiplePropertyEntityAbilityOverride&lt;/strong&gt; interface.&amp;#160; The interface has the following methods:&lt;/p&gt;  &lt;p&gt;- bool AllowEdit(PageData pageData, string propertyName);    &lt;br /&gt;- bool AllowDelete(PageData pageData, string propertyName); &lt;/p&gt;  &lt;p&gt;Within your entity you can then define any custom logic to determine whether the edit and delete buttons can be enabled.&lt;/p&gt;  &lt;p&gt;For entity collections List&amp;lt;TEntity&amp;gt; you can implement the &lt;strong&gt;IMultiplePropertyEntityCollectionAbilityOverride &lt;/strong&gt;interface.&amp;#160; This interface has the following methods:&lt;/p&gt;  &lt;p&gt;- bool AllowAdd(PageData pageData, string propertyName);    &lt;br /&gt;- bool AllowEdit(PageData pageData, string propertyName);     &lt;br /&gt;- bool AllowDelete(PageData pageData, string propertyName);     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;This enables you to define custom logic to determine whether add, edit or delete functionality should be enabled across the whole list rather than an individual entity level.    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;Installation&lt;/h3&gt;  &lt;p&gt;The easiest way to install the assembly is by installing it from the &lt;a href=&quot;http://nuget.episerver.com&quot; target=&quot;_blank&quot;&gt;EPiServer nuget feed&lt;/a&gt; (once it has been made available).&amp;#160; But if you are not down with the cool kids you can download it from &lt;a href=&quot;http://episerveresmp.codeplex.com&quot; target=&quot;_blank&quot;&gt;codeplex&lt;/a&gt;.&amp;#160; The assembly is built for EPiServer CMS 6 and onwards.&lt;/p&gt;  &lt;p&gt;On the &lt;a href=&quot;http://episerveresmp.codeplex.com&quot; target=&quot;_blank&quot;&gt;codeplex&lt;/a&gt; site you can also find some &lt;a href=&quot;http://episerveresmp.codeplex.com/releases/view/80061#DownloadId=324128&quot; target=&quot;_blank&quot;&gt;useful documentation&lt;/a&gt; and &lt;a href=&quot;http://episerveresmp.codeplex.com/releases/view/80061#DownloadId=324129&quot; target=&quot;_blank&quot;&gt;example code&lt;/a&gt; to get you familiar with what the property offers.&amp;#160; The example code is dependent on PageTypeBuilder.     &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;Feedback&lt;/h3&gt;  &lt;p&gt;As always feedback is greatly appreciated, if you have any suggestions for new features or changes I am happy to hear them.&lt;/p&gt;  &lt;p&gt;Just twitter me &lt;a href=&quot;http://www.twitter.com/croweman&quot; target=&quot;_blank&quot;&gt;@croweman&lt;/a&gt; or send me an email &lt;img style=&quot;border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none&quot; class=&quot;wlEmoticon wlEmoticon-smile&quot; alt=&quot;Smile&quot; src=&quot;/link/9cc688abfac142caa59bdb05b46ef3ad.png&quot; /&gt;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2012/5/ElencySolutionsMultipleProperty-v151-Released/</guid>            <pubDate>Tue, 01 May 2012 09:59:16 GMT</pubDate>           <category>Blog post</category></item><item> <title>ElencySolutions.MultipleProperty v1.5 Released</title>            <link>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2012/4/ElencySolutionsMultipleProperty-v15-Released/</link>            <description>&lt;p&gt;For more information about the multiple property assembly please refer to &lt;a href=&quot;http://episerveresmp.codeplex.com&quot; target=&quot;_blank&quot;&gt;codeplex&lt;/a&gt;. There you will find various links to previous posts, documentation, downloads and examples.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;New Features&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Some new properties have been added to the MultiplePropertyEntityAttribute:&lt;/p&gt;  &lt;p&gt;- AllowAdd    &lt;br /&gt;- AllowEdit     &lt;br /&gt;- AllowDelete     &lt;br /&gt;- AllowSort     &lt;br /&gt;    &lt;br /&gt;These new properties allow you to turn on/off various buttons and functionality in list mode.&amp;#160; The default for all of these properties is true.    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;A new property has been added to the MultiplePropertyEntityPropertyAttribute.&lt;/p&gt;  &lt;p&gt;- DefaultValue: This property allows you to define a default value for the property.   &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;Installation&lt;/h3&gt;  &lt;p&gt;The easiest way to install the assembly is by installing it from the &lt;a href=&quot;http://nuget.episerver.com/&quot; target=&quot;_blank&quot;&gt;EPiServer nuget feed&lt;/a&gt; (once it has been made available).&amp;#160; But if you are not down with the cool kids you can download it from &lt;a href=&quot;http://episerveresmp.codeplex.com/&quot; target=&quot;_blank&quot;&gt;codeplex&lt;/a&gt;.&amp;#160; The assembly is built for EPiServer CMS 6 and onwards.&lt;/p&gt;  &lt;p&gt;On the &lt;a href=&quot;http://episerveresmp.codeplex.com/&quot; target=&quot;_blank&quot;&gt;codeplex&lt;/a&gt; site you can also find some useful documentation and example code to get you familiar with what the property offers.&amp;#160; The example code is dependent on &lt;a href=&quot;http://pagetypebuilder.codeplex.com/&quot; target=&quot;_blank&quot;&gt;PageTypeBuilder&lt;/a&gt;.    &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;Feedback&lt;/h3&gt;  &lt;p&gt;As always feedback is greatly appreciated, if you have any suggestions for new features or changes I am happy to hear them.&lt;/p&gt;  &lt;p&gt;Just twitter me &lt;a href=&quot;http://www.twitter.com/croweman&quot; target=&quot;_blank&quot;&gt;@croweman&lt;/a&gt; or send me an email Smile&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2012/4/ElencySolutionsMultipleProperty-v15-Released/</guid>            <pubDate>Thu, 26 Apr 2012 17:12:25 GMT</pubDate>           <category>Blog post</category></item><item> <title>EPiServer Schedule Job Maintenance EPiServer CMS 6</title>            <link>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2012/4/EPiServer-Schedule-Job-Maintenance-EPiServer-CMS-6/</link>            <description>&lt;p&gt;In the past I have been plagued with issues where EPiServer scheduled jobs have suddenly stopped working and get stuck in a running state.&amp;#160; This is possibly caused by application restarts/redeployments while jobs are in progress and many other issues.&lt;/p&gt;  &lt;p&gt;I am pretty sure these particular issues may well have been fixed in hotfixes or service packs, but from past experience I have become very cautious about scheduled jobs and there reliability especially if you are using them for site critical functionality.&lt;/p&gt;  &lt;p&gt;Because of my scepticism about scheduled job reliability I have knocked together a class which should get a job up and running if it gets stuck in a running state.    &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;My Solution&lt;/h3&gt;  &lt;p&gt;Firstly you will have to download this class &lt;a href=&quot;http://download.codeplex.com/Download?ProjectName=episervercroweman&amp;amp;DownloadId=371950&quot; target=&quot;_blank&quot;&gt;ScheduledJobMaintenance.cs&lt;/a&gt; and add it to your solution.&lt;/p&gt;  &lt;p&gt;You will then need to hook into the begin request method within your Global.asax.cs file and add a call to ScheduledJobMaintenance.CheckScheduledJobs().&lt;/p&gt;  &lt;pre style=&quot;border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 620px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px&quot;&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  1: &lt;span style=&quot;color: #0000ff&quot;&gt;protected&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; Application_BeginRequest(&lt;span style=&quot;color: #0000ff&quot;&gt;object&lt;/span&gt; sender, EventArgs e)
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  2: {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  3:    ScheduledJobMaintenance.CheckScheduledJobs();
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  4: }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;The ScheduleJobMaintenance class has the following static properties:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;MaximumJobRunTimeInMinutes&lt;/strong&gt; – This defines the maximum length of time a job can be in a running state, the default is 60 minutes. &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;CheckTimeInMinutes&lt;/strong&gt; – This defines the duration in minutes running jobs should be checked, the default is 11 minutes don’t ask me why &lt;img style=&quot;border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none&quot; class=&quot;wlEmoticon wlEmoticon-smile&quot; alt=&quot;Smile&quot; src=&quot;/link/cc4e999a2768444d98f120c58f2ca67f.png&quot; /&gt;. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;What does it do?&lt;/h3&gt;

&lt;p&gt;Every time a request is made to the site the CheckScheduledJobs method will be called.&amp;#160; This will then check the last time a check was made, if the duration has gone over the CheckTimeInMinutes then it will do the following:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Queue a new thread. &lt;/li&gt;

  &lt;li&gt;Check if there are any jobs in a running state that have gone over the maximum job running time. &lt;/li&gt;

  &lt;li&gt;If there are jobs that have met the previous condition then it will set the next execution time to be in the future, the way this is set is determined by the IntervalType. &lt;/li&gt;

  &lt;li&gt;Update the relevant rows in the tblScheduledItem table to turn them into runnable jobs again. &lt;/li&gt;

  &lt;li&gt;Update the last check time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For info this currently does not fix jobs that have IntervalType’s of Years or Seconds.&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2012/4/EPiServer-Schedule-Job-Maintenance-EPiServer-CMS-6/</guid>            <pubDate>Thu, 26 Apr 2012 16:08:01 GMT</pubDate>           <category>Blog post</category></item><item> <title>PageTypeBuilder and EPiServer CMS 6 R2 Synching Issues – Important</title>            <link>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2012/4/PageTypeBuilder-and-EPiServer-CMS-6-R2-Synching-Issues--Important/</link>            <description>&lt;h3&gt;   &lt;br /&gt;Background&lt;/h3&gt;  &lt;p&gt;There have been a couple of issues that have been logged on &lt;a href=&quot;http://pagetypebuilder.codeplex.com/workitem/list/basic&quot; target=&quot;_blank&quot;&gt;codeplex&lt;/a&gt; to do with long start up times and default values not being set on page definition properties, the links to the issues are below:     &lt;br /&gt;    &lt;br /&gt;- &lt;a href=&quot;http://pagetypebuilder.codeplex.com/workitem/9269&quot; target=&quot;_blank&quot;&gt;After upgrading to PTB 2.0, starting site takes a really long time&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;- &lt;a href=&quot;http://pagetypebuilder.codeplex.com/workitem/9228&quot; target=&quot;_blank&quot;&gt;Default value is not set&lt;/a&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Basically there was a change in CMS 6 R2 which changed how sort orders are handled.&amp;#160; When PageTypeBuilder is synching it will compare whether the page definition is different to the one stored in the database and if so it will update it.&lt;/p&gt;  &lt;p&gt;In CMS 6 R2 a new method is now called named &lt;strong&gt;EnsureUniqueFieldOrder&lt;/strong&gt; within the &lt;strong&gt;Save&lt;/strong&gt; method of the &lt;strong&gt;PageDefinition&lt;/strong&gt;.     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;At a high level this method does the following:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Checks whether the sort order for the current page definition matches the sort order of any other page definitions for the page type and if it does it will set a new value for it. &lt;/li&gt;    &lt;li&gt;If a sort order has not been defined and there are existing page definitions it will get the highest sort order and add 1 to it. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;This then has a potentially huge knock on effect because the next time the application starts PageTypeBuilder will go off and work it’s magic, but because the EnsureUniqueFieldOrder method has changed some of the sort orders, PageTypeBuilder will determine that the page definitions are different and update the definitions again &lt;img style=&quot;border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none&quot; class=&quot;wlEmoticon wlEmoticon-sadsmile&quot; alt=&quot;Sad smile&quot; src=&quot;/link/f960c59e06c9400f98c2ae8253619f95.png&quot; /&gt;.     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;So to put simply this is not a bug in PageTypeBuilder or EPiServer it’s just a unfortunate side effect of not defining your Sort Order&#39;s in your page types or specifying duplicates.&amp;#160; Over time we often have many common base classes that page types will inherit from and can often be a case for many duplicates.    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;Introducing PageTypeBuilder.SortOrderChecker&lt;/h3&gt;  &lt;p&gt;Some of you may be aware that I spend a lot of time commuting to and from London town and that I like to fill this time with knocking together useful modules and applications.&lt;/p&gt;  &lt;p&gt;So last week to fill this time I decided to knock together a little console application which will scan a bin folder and tell you which page types have duplicate and undefined properties.&lt;/p&gt;  &lt;p&gt;It can also fix all of the page type files for you (assuming you are programming in C#) and apply new sort orders for various property definitions including property groups.&amp;#160; The fixing code will also fix sorting on page type and property group base classes too to ensure there are no duplicates.    &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;Using PageTypeBuilder.SortOrderChecker&lt;/h3&gt;  &lt;p&gt;Firstly you will need to Download the executable and it’s config file from &lt;a href=&quot;http://episervercroweman.codeplex.com/&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt; and dump it in a folder on your machine. Then you need to follow the steps below:     &lt;br /&gt;&lt;/p&gt; &lt;strong&gt;1.&lt;/strong&gt; Re-build your application to make sure all of your assemblies are up to date.   &lt;br /&gt;&lt;strong&gt;2.&lt;/strong&gt; Backup any relevant EPiServer databases and source files &lt;img style=&quot;border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none&quot; class=&quot;wlEmoticon wlEmoticon-confusedsmile&quot; alt=&quot;Confused smile&quot; src=&quot;/link/dfe02dd0e2a2480faca0330fba7884e8.png&quot; /&gt;   &lt;br /&gt;  &lt;br /&gt;&lt;strong&gt;3.&lt;/strong&gt; Then you can execute the tool with the following arguments to determine which properties have duplicate or undefined sort orders.   &lt;br /&gt;  &lt;br /&gt;c:\Tools\PageTypeBuilder.SortOrderChecker.exe -t:0 -b:c:\episerver\sites\pagetypebuildertest\bin   &lt;p&gt;You will be shown a window like the following:&lt;/p&gt;  &lt;p&gt;&lt;img src=&quot;http://download.codeplex.com/Download?ProjectName=episervercroweman&amp;amp;DownloadId=370707&quot; /&gt;&lt;/p&gt;  &lt;br /&gt;&lt;strong&gt;4.&lt;/strong&gt; You can then attempt to fix your page types by running the following command, please note you may need to close visual studio first just in case there are any file locks.   &lt;br /&gt;  &lt;br /&gt;c:\Tools\PageTypeBuilder.SortOrderChecker.exe -t:2 -b:c:\episerver\sites\pagetypebuildertest\bin -p:c:\episerver\sites\pagetypebuildertest   &lt;br /&gt;  &lt;br /&gt;You will be shown a window like the following:   &lt;br /&gt;  &lt;br /&gt;&lt;img src=&quot;http://download.codeplex.com/Download?ProjectName=episervercroweman&amp;amp;DownloadId=370708&quot; /&gt;   &lt;br /&gt;&lt;strong&gt;5.&lt;/strong&gt; Now that your files have been fixed, you will need to rebuild the solution.&amp;#160; It may be possible that some classes/properties will not be updated, but this would probably be because of bad coding style, not by me of course &lt;img style=&quot;border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none&quot; class=&quot;wlEmoticon wlEmoticon-winkingsmile&quot; alt=&quot;Winking smile&quot; src=&quot;/link/0188b52e6d914b9ba138a42ebf9f9dfb.png&quot; /&gt;   &lt;br /&gt;  &lt;br /&gt;Now we have rebuilt we can run the tool again to check for duplicates and unassigned sort orders.   &lt;br /&gt;  &lt;br /&gt;c:\Tools\PageTypeBuilder.SortOrderChecker.exe -t:0 -b:c:\episerver\sites\pagetypebuildertest\bin   &lt;br /&gt;  &lt;br /&gt;This time you will hopefully be told that all duplicates and unassigned sort orders are no more &lt;img style=&quot;border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none&quot; class=&quot;wlEmoticon wlEmoticon-thumbsup&quot; alt=&quot;Thumbs up&quot; src=&quot;/link/178eca122b6e471ea2c2c28dfaf12cd5.png&quot; /&gt;.   &lt;br /&gt;  &lt;br /&gt;&lt;img src=&quot;http://download.codeplex.com/Download?ProjectName=episervercroweman&amp;amp;DownloadId=370709&quot; /&gt;   &lt;br /&gt;&lt;strong&gt;   &lt;br /&gt;6.&lt;/strong&gt; One thing to be aware of is that as EPiServer has done it’s own thing for duplicate and undefined sort orders, it may still be likely that are some duplicates even though there are none in code.   &lt;br /&gt;  &lt;br /&gt;To get round this you can run the tool again with the following commands.   &lt;p&gt;c:\Tools\PageTypeBuilder.SortOrderChecker.exe -t:3 -b:c:\episerver\sites\pagetypebuildertest\bin -o:c:\temp\ResetSortOrders.sql&amp;#160; &lt;br /&gt;    &lt;br /&gt;This will create a .sql file with the necessary SQL to reset all PageTypeBuilder Property Definition sort orders to 0, so you will need to execute the SQL against your database.     &lt;br /&gt;&lt;/p&gt; &lt;strong&gt;7.&lt;/strong&gt; Now that sort orders have been reset you can run your application.&amp;#160; &lt;br /&gt;  &lt;br /&gt;If you have a large number of page types and page definitions this initial update may take a bit longer than expected, but once this initial update is complete all future deployments/application restarts should be much quicker &lt;img style=&quot;border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none&quot; class=&quot;wlEmoticon wlEmoticon-smile&quot; alt=&quot;Smile&quot; src=&quot;/link/6d9e103f4ced41b5bd4b320041d8dc57.png&quot; /&gt;.   &lt;br /&gt;  &lt;br /&gt;  &lt;h3&gt;Checking Sort Orders on post build event    &lt;br /&gt;&lt;/h3&gt; You can hook the sort order checking executable into your application build by calling it on a post build event, it&#39;s not particularly elegant but will fail the build if there are duplicate or undefined sort orders and will output duplications and undefined properties on page types to the output window.   &lt;br /&gt;  &lt;br /&gt;Command for post build:   &lt;br /&gt;  &lt;br /&gt;c:\Tools\PageTypeBuilder.SortOrderChecker.exe -t:1 -b:$(TargetDir)   &lt;p&gt;   &lt;br /&gt;&lt;img src=&quot;http://download.codeplex.com/Download?ProjectName=episervercroweman&amp;amp;DownloadId=370710&quot; /&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;   &lt;br /&gt;Disclaimer     &lt;br /&gt;&lt;font style=&quot;font-weight: normal&quot;&gt;     &lt;br /&gt;Although I have done testing around this there could be possible side effects.&amp;#160; I take no responsibility for any adverse affects.&amp;#160; So basically use at your own risk and backup your database and source code first.       &lt;br /&gt;      &lt;br /&gt;&lt;/font&gt;&lt;/h3&gt;  &lt;h3&gt;Feedback&lt;/h3&gt;  &lt;p&gt;Please feel free to email or twitter me with any feedback &lt;a href=&quot;http://www.twitter.com/croweman&quot; target=&quot;_blank&quot;&gt;@croweman&lt;/a&gt;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2012/4/PageTypeBuilder-and-EPiServer-CMS-6-R2-Synching-Issues--Important/</guid>            <pubDate>Mon, 23 Apr 2012 11:01:32 GMT</pubDate>           <category>Blog post</category></item><item> <title>PageTypeBuilder v2.0 – Property Groups and Dynamic Properties</title>            <link>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2012/3/PageTypeBuilder-v20--Property-Groups-and-Dynamic-Properties/</link>            <description>&lt;p&gt;Some of you may have read &lt;a href=&quot;http://world.episerver.com/Blogs/Joel-Abrahamsson/&quot; target=&quot;_blank&quot;&gt;Joel’s&lt;/a&gt; post on &lt;a href=&quot;http://joelabrahamsson.com/entry/working-with-dynamic-properties-and-page-type-builder&quot; target=&quot;_blank&quot;&gt;Working with Dynamic Properties and Page Type Builder&lt;/a&gt; but if not you may want to check the article &lt;img style=&quot;border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none&quot; class=&quot;wlEmoticon wlEmoticon-smile&quot; alt=&quot;Smile&quot; src=&quot;/link/163f9c80f77a47e1a2a33c85675eb03e.png&quot; /&gt;.     &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;The other day somebody asked me whether there was a nice solution to using property groups in a dynamic property kind of way as explained in Joel’s article.&amp;#160; &lt;/p&gt;  &lt;p&gt;This got my mind working a bit and although the solution I have knocked together is not particularly nice as it uses quite a bit of reflection it seems to do the job &lt;img style=&quot;border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none&quot; class=&quot;wlEmoticon wlEmoticon-smile&quot; alt=&quot;Smile&quot; src=&quot;/link/163f9c80f77a47e1a2a33c85675eb03e.png&quot; /&gt;.     &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;The Solution   &lt;br /&gt;&lt;/h3&gt;  &lt;h3&gt;Step One&lt;/h3&gt;  &lt;p&gt;Firstly you will need to download the PropertyGroupExtensions.cs class I have knocked together from &lt;a href=&quot;http://download.codeplex.com/Download?ProjectName=episervercroweman&amp;amp;DownloadId=355785&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt; and add it to your solution.&lt;/p&gt;  &lt;p&gt;The class contains an extension method for classes that inherit &lt;strong&gt;TypedPageData&lt;/strong&gt;.&amp;#160; The method is named &lt;strong&gt;GetPropertyGroupDynamicProperty&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Step Two&lt;/h3&gt;  &lt;p&gt;In this example I am going to demonstrate having an Image Property Group, the code definition is below.&amp;#160; You will notice that the class implements &lt;strong&gt;IPropertyGroupComparer&lt;/strong&gt;.&amp;#160; This interface contains an &lt;strong&gt;IsNull&lt;/strong&gt; method which you must implement to determine whether you would class the property group as being null or empty.&lt;/p&gt;  &lt;pre style=&quot;border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 620px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px&quot;&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  1: &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; Image : PageTypePropertyGroup, IPropertyGroupComparer
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  2: {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  3: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  4:     [PageTypeProperty(
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  5:         EditCaption = &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;Image url&lt;/span&gt;&amp;quot;, 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  6:         Type = &lt;span style=&quot;color: #0000ff&quot;&gt;typeof&lt;/span&gt;(PropertyImageUrl),
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  7:         SortOrder = 100)]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  8:     &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; ImageUrl { &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff&quot;&gt;set&lt;/span&gt;; }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  9: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 10:     [PageTypeProperty(
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 11:         EditCaption = &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;Alternative text&lt;/span&gt;&amp;quot;, 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 12:         Type = &lt;span style=&quot;color: #0000ff&quot;&gt;typeof&lt;/span&gt;(PropertyString),
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 13:         SortOrder = 110)]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 14:     &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; AltText { &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff&quot;&gt;set&lt;/span&gt;; }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 15: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 16:     &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; GetHtml()
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 17:     {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 18:         &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;.IsNullOrEmpty(ImageUrl) ? &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;.Empty 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 19:             : &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;.Format(&amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;&amp;lt;img src=\&amp;quot;{0}\&amp;quot; alt=\&amp;quot;{1}\&amp;quot; /&amp;gt;&lt;/span&gt;&amp;quot;, ImageUrl, AltText);
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 20:     }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 21: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 22:     &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;bool&lt;/span&gt; IsNull()
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 23:     {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 24:         &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;.IsNullOrEmpty(ImageUrl) &amp;amp;&amp;amp;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 25:                 &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;.IsNullOrEmpty(AltText);
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 26:     }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 27: }&lt;/pre&gt;&lt;/pre&gt;

&lt;h3&gt;Step Three&lt;/h3&gt;

&lt;p&gt;Now we have our property group defined.&amp;#160; I shall add the property to my &lt;strong&gt;CommonPageTypeBase&lt;/strong&gt; class.&amp;#160; This is a class that inherits &lt;strong&gt;TypedPageData&lt;/strong&gt; but also is used s a base class to all page types.&amp;#160; So any properties that are added to this class will be available on all page types.&lt;/p&gt;

&lt;pre style=&quot;border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 620px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px&quot;&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  1: &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; CommonPageTypeBase : TypedPageData
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  2: {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  3:     [PageTypePropertyGroup(
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  4:         EditCaptionPrefix = &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;Header image dynamic property - &lt;/span&gt;&amp;quot;, 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  5:         StartSortOrderFrom = 150)]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  6:     &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;virtual&lt;/span&gt; Image HeaderImageDynamicProperty
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  7:     {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  8:         &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  9:         {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 10:             &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;this&lt;/span&gt;.GetPropertyGroupDynamicProperty&amp;lt;CommonPageTypeBase, Image&amp;gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 11:                 (p =&amp;gt; p.HeaderImageDynamicProperty);
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 12:         }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 13:         &lt;span style=&quot;color: #0000ff&quot;&gt;set&lt;/span&gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 14:         {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 15:             &lt;span style=&quot;color: #008000&quot;&gt;// do nothing, this has to be implemented&lt;/span&gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 16:         }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 17:     }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 18: }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;You can see in the class definition above that we have added a property group definition named &lt;strong&gt;HeaderImageDynamicProperty&lt;/strong&gt;.&amp;#160; &lt;/p&gt;

&lt;p&gt;You will also noticed I have implemented the get and set methods.&amp;#160; &lt;/p&gt;

&lt;p&gt;The get method implementation calls the &lt;strong&gt;GetPropertyGroupDynamicProperty&lt;/strong&gt; extension method with two Generic type parameters.&amp;#160; The first one is a class that inherits &lt;strong&gt;TypedPageData&lt;/strong&gt;, where as the second is a class that implements &lt;strong&gt;PageTypePropertyGroup&lt;/strong&gt; and &lt;strong&gt;IPropertyGroupComparer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When the get method is called it will basically go up the page hierarchy until it reaches the start page or finds a populated Image property group.&lt;/p&gt;

&lt;h3&gt;Feedback&lt;/h3&gt;

&lt;p&gt;As always feedback is greatly appreciated, if you have found any bugs or&amp;#160; have any suggestions of improvement please let me know.&lt;/p&gt;

&lt;p&gt;Just twitter me &lt;a href=&quot;http://www.twitter.com/croweman&quot;&gt;@croweman&lt;/a&gt; or send me an email &lt;img alt=&quot;Smile&quot; src=&quot;/link/535bf8930a564e92b18f59756c8fff0a.png&quot; /&gt;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2012/3/PageTypeBuilder-v20--Property-Groups-and-Dynamic-Properties/</guid>            <pubDate>Mon, 19 Mar 2012 11:16:20 GMT</pubDate>           <category>Blog post</category></item><item> <title>ElencySolutions.MultipleProperty v1.4 Released</title>            <link>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2012/3/ElencySolutionsMultipleProperty-v14-Released/</link>            <description>&lt;p&gt;For those of you who are interested but don’t know what ElencySolutions.MultipleProperty is, please refer to the documentation and various articles listed on &lt;a href=&quot;http://episerveresmp.codeplex.com/&quot; target=&quot;_blank&quot;&gt;codeplex&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I have recently had a couple of requests for some minor new features and during an unusually thorough testing phase I have come across a few bugs which have been fixed in this version.&lt;/p&gt;  &lt;h3&gt;Release Notes&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;When using list based properties, a copy button can be added to allow an editor to copy an existing item. &lt;/li&gt;    &lt;li&gt;There are now some configuration settings that can be defined to set defaults for whether the copy property button and copy list item buttons should appear. &lt;/li&gt;    &lt;li&gt;MultiplePropertyBase is now Serializable &lt;/li&gt;    &lt;li&gt;There was a bug when using link item collections where the state of the list was not being maintained during post backs which is now fixed. &lt;/li&gt;    &lt;li&gt;There was a bug when editing a multiple property list with child multiple property lists.&amp;#160; When you edit one then click the add new button, the new item contained child list items from the previously edited item. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Installation&lt;/h3&gt;  &lt;p&gt;The easiest way to install the assembly is by installing it from the &lt;a href=&quot;http://nuget.episerver.com&quot; target=&quot;_blank&quot;&gt;EPiServer nuget feed&lt;/a&gt;.&amp;#160; But if you are not down with the cool kids you can download it from &lt;a href=&quot;http://episerveresmp.codeplex.com/&quot; target=&quot;_blank&quot;&gt;codeplex&lt;/a&gt;.&amp;#160; The assembly is built for EPiServer CMS 6 and onwards.&lt;/p&gt;  &lt;p&gt;On the codeplex site you can also find some useful documentation and example code to get you familiar with what the property offers.&amp;#160; The example code is dependent on PageTypeBuilder.&lt;/p&gt;  &lt;h3&gt;New Configuration settings&lt;/h3&gt;  &lt;p&gt;There is now a configuration section you can add to your web.config to set some default values for the MultiplePropertyEntityAttribute properties.&amp;#160; The configuration section is not required and when installing via nuget the configuration will be added for you. &lt;/p&gt;  &lt;pre style=&quot;border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 620px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px&quot;&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  1: &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;configuration&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  2:   &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;configSections&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  3:     &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;section&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;quot;elencysolutions.multipleproperty&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;quot;ElencySolutions.MultipleProperty.Configuration.MultiplePropertyConfiguration, ElencySolutions.MultipleProperty&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  4:   &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;configSections&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  5:   &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;elencysolutions.multipleproperty&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;copyAsNewDefault&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;allowPropertyCopyingDefault&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  6: &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;configuration&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;

&lt;h3&gt;&lt;font style=&quot;font-weight: normal&quot;&gt;The image below shows a custom image gallery property built using multiple property. 
    &lt;br /&gt;&lt;/font&gt;&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;http://download.codeplex.com/Download?ProjectName=episerveresmp&amp;amp;DownloadId=354344&quot; /&gt;&lt;/p&gt;

&lt;h3&gt;&amp;#160;&lt;/h3&gt;

&lt;h3&gt;Feedback&lt;/h3&gt;

&lt;p&gt;As always feedback is greatly appreciated, if you have any suggestions for new features or changes I am happy to hear them.&lt;/p&gt;

&lt;p&gt;Just twitter me &lt;a href=&quot;http://www.twitter.com/croweman&quot;&gt;@croweman&lt;/a&gt; or send me an email &lt;img alt=&quot;Smile&quot; src=&quot;/link/535bf8930a564e92b18f59756c8fff0a.png&quot; /&gt;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2012/3/ElencySolutionsMultipleProperty-v14-Released/</guid>            <pubDate>Thu, 15 Mar 2012 13:39:54 GMT</pubDate>           <category>Blog post</category></item><item> <title>PageTypeBuilderUI v2.0 Released</title>            <link>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2011/12/PageTypeBuilderUI-v20-Released/</link>            <description>&lt;p&gt;As &lt;a href=&quot;http://joelabrahamsson.com/entry/page-type-builder-20-released&quot; target=&quot;_blank&quot;&gt;PageTypeBuilder v2.0 has now been released&lt;/a&gt;, thank Joel &lt;img style=&quot;border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none&quot; class=&quot;wlEmoticon wlEmoticon-winkingsmile&quot; alt=&quot;Winking smile&quot; src=&quot;/link/766c5046fdb046dcaa6618e386b634aa.png&quot; /&gt;, I have now made PageTypeBuilderUI v2.0 available.&lt;/p&gt;  &lt;p&gt;PageTypeBuilderUI v2.0 contains the following new features:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Built against PageTypeBuilder v2.0 &lt;/li&gt;    &lt;li&gt;Will now show mismatches when PTB page types or page type property definitions do not appear in the EPiServer database.&amp;#160; This is usually caused by somebody deleting a property they shouldn’t or page type updating being disabled. &lt;/li&gt;    &lt;li&gt;Custom property group rendering which will be described in more detail below. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;PageTypeBuilder v2.0 has property groups as one of it’s new features.&lt;/p&gt;  &lt;p&gt;One of the changes I have knocked together for v2.0 of PageTypeBuilderUI is custom rendering of property groups within edit mode.&amp;#160; I am aware &lt;a href=&quot;http://world.episerver.com/System/Users-and-profiles/Community-Profile-Card/Anders%20Hattestad/&quot; target=&quot;_blank&quot;&gt;Anders Hattestad&lt;/a&gt; has done similar things with his &lt;a href=&quot;http://world.episerver.com/Blogs/Anders-Hattestad/Dates/2010/6/IteraObjects-a-extension-for-PageTypeBuilder/&quot; target=&quot;_blank&quot;&gt;Itera.Objects&lt;/a&gt; project. But to keep my mind occupied on my daily commute I decided to implement something similar which would fit in with PageTypeBuilder’s property groups &lt;img style=&quot;border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none&quot; class=&quot;wlEmoticon wlEmoticon-smilewithtongueout&quot; alt=&quot;Smile with tongue out&quot; src=&quot;/link/d1b31d82d4f640be85a144263c8242d3.png&quot; /&gt;&lt;/p&gt;  &lt;h3&gt;   &lt;br /&gt;Now lets get to the point&lt;/h3&gt;  &lt;p&gt;If I added the following code somewhere into my solution:&lt;/p&gt;  &lt;pre style=&quot;border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 620px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px&quot;&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  1: &lt;span style=&quot;color: #0000ff&quot;&gt;namespace&lt;/span&gt; EPiServer
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  2: {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  3:     &lt;span style=&quot;color: #0000ff&quot;&gt;using&lt;/span&gt; Core;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  4:     &lt;span style=&quot;color: #0000ff&quot;&gt;using&lt;/span&gt; Security;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  5:     &lt;span style=&quot;color: #0000ff&quot;&gt;using&lt;/span&gt; SpecializedProperties;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  6:     &lt;span style=&quot;color: #0000ff&quot;&gt;using&lt;/span&gt; PageTypeBuilder;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  7: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  8:     [PageType(&amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;3905865A-3C95-4707-98B2-1F2B98E2EA46&lt;/span&gt;&amp;quot;,
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  9: 	    Name = &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;[Public] PTB Property groups&lt;/span&gt;&amp;quot;,
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 10: 	    Description = &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;PTB Property groups&lt;/span&gt;&amp;quot;,
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 11: 	    Filename = &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;~/Templates/Pages/PageName.aspx&lt;/span&gt;&amp;quot;,
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 12: 	    AvailableInEditMode = &lt;span style=&quot;color: #0000ff&quot;&gt;true&lt;/span&gt;)]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 13:     &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; PTBPropertyGroupsPageType : TypedPageData
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 14:     {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 15:         [PageTypePropertyGroup(
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 16:             EditCaptionPrefix = &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;Image link one - &lt;/span&gt;&amp;quot;, 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 17:             Tab = &lt;span style=&quot;color: #0000ff&quot;&gt;typeof&lt;/span&gt;(FooterTab), 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 18:             StartSortOrderFrom = 100 )]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 19:         &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;virtual&lt;/span&gt; ImageLink ImageLinkOne { &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff&quot;&gt;set&lt;/span&gt;; }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 20: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 21:         [PageTypePropertyGroup(
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 22:             EditCaptionPrefix = &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;Image link two - &lt;/span&gt;&amp;quot;, 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 23:             Tab = &lt;span style=&quot;color: #0000ff&quot;&gt;typeof&lt;/span&gt;(FooterTab), 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 24:             StartSortOrderFrom = 200)]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 25:         &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;virtual&lt;/span&gt; ImageLink ImageLinkTwo { &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff&quot;&gt;set&lt;/span&gt;; }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 26: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 27:         [PageTypePropertyGroup(
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 28:             EditCaptionPrefix = &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;Image link three - &lt;/span&gt;&amp;quot;, 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 29:             Tab = &lt;span style=&quot;color: #0000ff&quot;&gt;typeof&lt;/span&gt;(FooterTab), 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 30:             StartSortOrderFrom = 300)]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 31:         &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;virtual&lt;/span&gt; ImageLink ImageLinkThree { &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff&quot;&gt;set&lt;/span&gt;; }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 32: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 33:     }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 34: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 35:     &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; ImageLink : PageTypePropertyGroup
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 36:     {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 37:         [PageTypeProperty(
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 38:             EditCaption = &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;Image url&lt;/span&gt;&amp;quot;, 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 39:             Required = &lt;span style=&quot;color: #0000ff&quot;&gt;true&lt;/span&gt;, 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 40:             DisplayInEditMode = &lt;span style=&quot;color: #0000ff&quot;&gt;true&lt;/span&gt;, 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 41:             Type = &lt;span style=&quot;color: #0000ff&quot;&gt;typeof&lt;/span&gt;(PropertyImageUrl), 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 42:             Tab = &lt;span style=&quot;color: #0000ff&quot;&gt;typeof&lt;/span&gt;(TabOne),
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 43:             SortOrder = 100)]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 44:         &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; ImageUrl { &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff&quot;&gt;set&lt;/span&gt;; }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 45: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 46:         [PageTypeProperty(
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 47:             EditCaption = &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;Link url&lt;/span&gt;&amp;quot;, 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 48:             DisplayInEditMode = &lt;span style=&quot;color: #0000ff&quot;&gt;true&lt;/span&gt;, 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 49:             Type = &lt;span style=&quot;color: #0000ff&quot;&gt;typeof&lt;/span&gt;(PropertyUrl),
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 50:             Tab = &lt;span style=&quot;color: #0000ff&quot;&gt;typeof&lt;/span&gt;(TabTwo),
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 51:             SortOrder = 110)]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 52:         &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; LinkUrl { &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff&quot;&gt;set&lt;/span&gt;; }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 53: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 54:         [PageTypeProperty(
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 55:             EditCaption = &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;Open in new window&lt;/span&gt;&amp;quot;, 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 56:             DisplayInEditMode = &lt;span style=&quot;color: #0000ff&quot;&gt;true&lt;/span&gt;, 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 57:             Type = &lt;span style=&quot;color: #0000ff&quot;&gt;typeof&lt;/span&gt;(PropertyBoolean),
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 58:             Tab = &lt;span style=&quot;color: #0000ff&quot;&gt;typeof&lt;/span&gt;(TabThree),
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 59:             SortOrder = 120)]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 60:         &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;bool&lt;/span&gt; OpenInNewWindow { &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff&quot;&gt;set&lt;/span&gt;; }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 61:     }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 62: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 63:     &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; FooterTab : Tab
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 64:     {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 65:         &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; Name
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 66:         {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 67:             &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt; { &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;Footer&lt;/span&gt;&amp;quot;; }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 68:         }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 69: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 70:         &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;override&lt;/span&gt; AccessLevel RequiredAccess
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 71:         {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 72:             &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt; { &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; AccessLevel.Edit; }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 73:         }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 74: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 75:         &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; SortIndex
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 76:         {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 77:             &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt; { &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; 100; }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 78:         }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 79:     }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 80: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 81:     &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; TabOne : Tab
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 82:     {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 83:         &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; Name
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 84:         {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 85:             &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt; { &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;Tab one&lt;/span&gt;&amp;quot;; }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 86:         }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 87: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 88:         &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;override&lt;/span&gt; AccessLevel RequiredAccess
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 89:         {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 90:             &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt; { &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; AccessLevel.Edit; }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 91:         }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 92: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 93:         &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; SortIndex
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 94:         {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 95:             &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt; { &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; 110; }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 96:         }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 97:     }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 98: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 99:     &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; TabTwo : Tab
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;100:     {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;101:         &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; Name
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;102:         {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;103:             &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt; { &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;Tab two&lt;/span&gt;&amp;quot;; }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;104:         }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;105: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;106:         &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;override&lt;/span&gt; AccessLevel RequiredAccess
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;107:         {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;108:             &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt; { &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; AccessLevel.Edit; }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;109:         }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;110: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;111:         &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; SortIndex
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;112:         {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;113:             &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt; { &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; 120; }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;114:         }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;115:     }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;116: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;117:     &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; TabThree : Tab
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;118:     {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;119:         &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; Name
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;120:         {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;121:             &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt; { &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;Tab three&lt;/span&gt;&amp;quot;; }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;122:         }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;123: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;124:         &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;override&lt;/span&gt; AccessLevel RequiredAccess
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;125:         {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;126:             &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt; { &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; AccessLevel.Administer; }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;127:         }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;128: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;129:         &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; SortIndex
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;130:         {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;131:             &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt; { &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; 130; }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;132:         }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;133:     }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;134: }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;I would end up with the following:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A tab named ‘Footer’ which requires Edit permissions. &lt;/li&gt;

  &lt;li&gt;A tab named ‘Tab one’ which requires Edit permissions. &lt;/li&gt;

  &lt;li&gt;A tab named ‘Tab two’ which requires Edit permissions. &lt;/li&gt;

  &lt;li&gt;A tab named ‘Tab three’ which requires Administrator permissions. &lt;/li&gt;

  &lt;li&gt;One PageType named ‘[Public] PTB Property groups’.&amp;#160; The PageType code definition has three Image link properties which are based on an ImageLink type which inherits PageTypePropertyGroup.&amp;#160; The following property definitions will end up being added to the page type: &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;http://download.codeplex.com/Download?ProjectName=pagetypebuilderui&amp;amp;DownloadId=317799&quot; /&gt;&lt;/p&gt;

&lt;p&gt;
  &lt;br /&gt;When viewing in edit mode the properties will appear like this: &lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://download.codeplex.com/Download?ProjectName=pagetypebuilderui&amp;amp;DownloadId=317795&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;font style=&quot;background-color: #ffff00&quot;&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;If you would like the properties to be rendered in a friendlier format you need to add the following settings to the web config:&lt;/p&gt;

&lt;pre style=&quot;border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 620px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px&quot;&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  1: &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;?&lt;/span&gt;xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;&lt;span style=&quot;color: #0000ff&quot;&gt;?&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  2: &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;configuration&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  3:   &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;configSections&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  4:     &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;section&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;quot;pageTypeBuilderUI&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;quot;PageTypeBuilderUI.Configuration.PageTypeBuilderUIConfiguration, PageTypeBuilderUI&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  5:   &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;configSections&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  6:   &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;pageTypeBuilderUI&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;enablePageTypeUpdating&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;enableCustomPropertyGroupRendering&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  7: &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;configuration&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  8: &lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;If I then removed the tab definitions on the PageTypePropertyAttribute’s set against the ImageLink Property group page type properties and viewed the Footer tab in edit mode you would see the properties presented in the following way:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://download.codeplex.com/Download?ProjectName=pagetypebuilderui&amp;amp;DownloadId=317796&quot; /&gt;&lt;/p&gt;

&lt;p&gt;If I then add the tabs back on to the ImageLink Property Group page type properties and checked the Footer tab in edit mode again the properties will be displayed like the following:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://download.codeplex.com/Download?ProjectName=pagetypebuilderui&amp;amp;DownloadId=317797&quot; /&gt;&lt;/p&gt;

&lt;p&gt;As the ‘Tab three’ tab requires Administrator access if I log in as a user who does not have Administrator permissions the ‘Tab three’ tab will disappear like below:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://download.codeplex.com/Download?ProjectName=pagetypebuilderui&amp;amp;DownloadId=317798&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h3&gt;How it works&lt;/h3&gt;

&lt;p&gt;When the &lt;strong&gt;enablePageTypeUpdating&lt;/strong&gt; and &lt;strong&gt;enableCustomPropertyGroupRendering&lt;/strong&gt; attribute values have been set to true an initialization module will add new properties to the page type.&amp;#160; These properties are of type PropertyGroupProperty and are responsible for the custom rendering of property group properties.&amp;#160; The module will also set the other page type properties to not show in edit mode.&amp;#160; It is possible to modify the custom rendering property control used by setting the full type name in the &lt;strong&gt;customRenderingControlType&lt;/strong&gt; attribute.&lt;/p&gt;

&lt;p&gt;The image below shows you what property definitions will appear on the page type when custom property group rendering is enabled.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://download.codeplex.com/Download?ProjectName=pagetypebuilderui&amp;amp;DownloadId=317800&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;font style=&quot;background-color: #ffff00&quot;&gt;***** Points to note *****&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;The custom rendering code assumes that the EditCaptionPrefix defined in the PageTypePropertyGroupAttribute will end in either a “-“ or a “:” and does a substring at this characters.&lt;/p&gt;

&lt;h3&gt;Installation&lt;/h3&gt;

&lt;p&gt;The easiest way to install PageTypeBuilderUI is to install it from the &lt;a href=&quot;http://nuget.episerver.com&quot; target=&quot;_blank&quot;&gt;EPiServer nuget feed&lt;/a&gt; once it’s up there.&amp;#160; The assembly can also be downloaded from &lt;a href=&quot;http://pagetypebuilderui.codeplex.com&quot; target=&quot;_blank&quot;&gt;codeplex&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Feedback&lt;/h3&gt;

&lt;p&gt;Please feel free to email or twitter me with any feedback &lt;a href=&quot;http://www.twitter.com/croweman&quot;&gt;@croweman&lt;/a&gt;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2011/12/PageTypeBuilderUI-v20-Released/</guid>            <pubDate>Thu, 22 Dec 2011 11:29:50 GMT</pubDate>           <category>Blog post</category></item><item> <title>FilteredPageReference v1.5 Released</title>            <link>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2011/12/FilteredPageReference-v15-Released/</link>            <description>&lt;p&gt;My colleague &lt;a href=&quot;http://world.episerver.com/System/Users-and-profiles/Community-Profile-Card/David%20Knipe/&quot; target=&quot;_blank&quot;&gt;David Knipe&lt;/a&gt; asked me yesterday whether it would be possible to add search into the FilteredPageReference page picker dialog as a client had requested it.&amp;#160; &lt;/p&gt;  &lt;p&gt;When I initially implemented FPR I decided to remove the search but I have now made it available in v1.5.&lt;/p&gt;  &lt;h3&gt;v1.5 New Features&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;You can now use the search box when picking pages.&amp;#160; Matched pages will be restricted by allowed page types and must be a descendent of the start page if one has been specified. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Installation&lt;/h3&gt;  &lt;p&gt;This version of FilteredPageReference is dependent on EPiServer CMS 6 R2.&amp;#160; It can be installed from the &lt;a href=&quot;http://nuget.episerver.com&quot;&gt;EPiServer nuget feed&lt;/a&gt; or from &lt;a href=&quot;http://episerverfpr.codeplex.com&quot;&gt;codeplex&lt;/a&gt;.&amp;#160; Usage instructions can be found &lt;a href=&quot;http://download.codeplex.com/Download?ProjectName=episerverfpr&amp;amp;DownloadId=311720&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;Feedback&lt;/h3&gt;  &lt;p&gt;As always feedback is greatly appreciated. Just twitter me &lt;a href=&quot;http://www.twitter.com/croweman&quot;&gt;@croweman&lt;/a&gt; or send me an email &lt;img alt=&quot;Smile&quot; src=&quot;/link/535bf8930a564e92b18f59756c8fff0a.png&quot; /&gt;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2011/12/FilteredPageReference-v15-Released/</guid>            <pubDate>Fri, 09 Dec 2011 15:18:44 GMT</pubDate>           <category>Blog post</category></item><item> <title>ElencySolutions Image Map and Hot Spot Editor v1.1 Released</title>            <link>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2011/11/ElencySolutions-Image-Map-and-Hot-Spot-Editor-v11-Released/</link>            <description>&lt;p&gt;I have just released a new version of the Image Map and Hot Spot Editor I created for EPiServer CMS 6.&lt;/p&gt;  &lt;p&gt;The main reason for the new version was to fix issues that can be caused when using EPiServer Commerce, this caused my embedded resources to not be served through my VPP providers.&lt;/p&gt;  &lt;p&gt;Also it’s now in a nuget feed &lt;img style=&quot;border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none&quot; class=&quot;wlEmoticon wlEmoticon-smile&quot; alt=&quot;Smile&quot; src=&quot;/link/ab9f9e6df894421fa131fcd7f5555628.png&quot; /&gt;&lt;/p&gt;  &lt;p&gt;For more information about the properties please refer to my previous &lt;a href=&quot;http://world.episerver.com/Blogs/Lee-Crowe/Dates/2011/4/ElencySolutions-Image-Map-and-Hot-Spot-Editor-v10-Released/&quot; target=&quot;_blank&quot;&gt;blog post&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The assembly can be found on the &lt;a href=&quot;http://nuget.episerver.com&quot; target=&quot;_blank&quot;&gt;EPiServer nuget feed&lt;/a&gt; and &lt;a href=&quot;http://episerveresimp.codeplex.com/&quot; target=&quot;_blank&quot;&gt;codeplex&lt;/a&gt;.&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2011/11/ElencySolutions-Image-Map-and-Hot-Spot-Editor-v11-Released/</guid>            <pubDate>Wed, 30 Nov 2011 16:04:18 GMT</pubDate>           <category>Blog post</category></item><item> <title>ElencySolutions.MultipleProperty v1.3.3 Released</title>            <link>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2011/11/ElencySolutionsMultipleProperty-v133-Released/</link>            <description>&lt;p&gt;It seems like I am releasing a new version of this assembly every few weeks at the moment.&amp;#160; The reason for this is I have been using it a lot recently and I keep seeing minor little things I would like to improve &lt;img style=&quot;border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none&quot; class=&quot;wlEmoticon wlEmoticon-smile&quot; alt=&quot;Smile&quot; src=&quot;/link/c90533c246b54493bfc12f76720a3ffa.png&quot; /&gt;.&amp;#160; I think I have sorted everything that was niggling at me now and this may be the last release for some time, unless anybody finds any bugs that need fixing &lt;img style=&quot;border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none&quot; class=&quot;wlEmoticon wlEmoticon-winkingsmile&quot; alt=&quot;Winking smile&quot; src=&quot;/link/d11ad6a07ae44c8ca25587694b38e453.png&quot; /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Release Notes&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;When using tabs, the selected tab should now be maintained on post back.&amp;#160; In certain circumstances the selected tab would be reset. &lt;/li&gt;    &lt;li&gt;Access rights can now be specified for tabs. &lt;/li&gt;    &lt;li&gt;A few styling tweaks have been made. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;For those who are not in the know&lt;/h3&gt;  &lt;p&gt;This assembly provides a developer with an easy way to build custom properties that are composed of various other properties.&amp;#160; It can also be used to create collections of composite properties.&lt;/p&gt;  &lt;p&gt;Some of the things it allows you to easily do but by no means all are briefly summarised below:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Create custom properties that comprise of other properties. &lt;/li&gt;    &lt;li&gt;Create lists of properties &lt;/li&gt;    &lt;li&gt;As the Multiple property entities make use of PropertyData objects you are able to pretty much have lists within lists. &lt;/li&gt;    &lt;li&gt;Ability to define minimum and maximum number of entities. &lt;/li&gt;    &lt;li&gt;Ability to copy the property to another page. &lt;/li&gt;    &lt;li&gt;Ability to display entity properties in different tabs. &lt;/li&gt;    &lt;li&gt;Ability to programmatically set property settings. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Installation&lt;/h3&gt;  &lt;p&gt;The assembly is dependent on EPiServer CMS 6 and can be installed from the &lt;a href=&quot;http://nuget.episerver.com&quot; target=&quot;_blank&quot;&gt;EPiServer nuget feed&lt;/a&gt; or downloaded from &lt;a href=&quot;http://episerveresmp.codeplex.com/&quot; target=&quot;_blank&quot;&gt;codeplex&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;Usage&lt;/h3&gt;  &lt;p&gt;The easiest way to get familiar with the assembly is to download the example from &lt;a href=&quot;http://episerveresmp.codeplex.com/&quot; target=&quot;_blank&quot;&gt;codeplex&lt;/a&gt; and add and include the files in your alloy tech site.&amp;#160; Very useful documentation can be found on &lt;a href=&quot;http://episerveresmp.codeplex.com/&quot; target=&quot;_blank&quot;&gt;codeplex&lt;/a&gt; as well.&lt;/p&gt;  &lt;p&gt;The example is dependent on PageTypeBuilder and contains 2 pages types, an image gallery page type and an image galleries page type.&lt;/p&gt;  &lt;p&gt;ElencySolutions.MultipleProperty is not a replacement for EPiImage, this example just demonstrates how you could use it to create an image gallery, but you could create anything you like with it &lt;img style=&quot;border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none&quot; class=&quot;wlEmoticon wlEmoticon-smile&quot; alt=&quot;Smile&quot; src=&quot;/link/c90533c246b54493bfc12f76720a3ffa.png&quot; /&gt;.&lt;/p&gt;  &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;h3&gt;Pretty Pictures (for those who don’t like reading &lt;img style=&quot;border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none&quot; class=&quot;wlEmoticon wlEmoticon-winkingsmile&quot; alt=&quot;Winking smile&quot; src=&quot;/link/d11ad6a07ae44c8ca25587694b38e453.png&quot; /&gt;)&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Image Gallery&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Below are some images showing you what you would see if you used the non list based Image Gallery.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img src=&quot;http://download.codeplex.com/Download?ProjectName=episerveresmp&amp;amp;DownloadId=307763&quot; /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img src=&quot;http://download.codeplex.com/Download?ProjectName=episerveresmp&amp;amp;DownloadId=307764&quot; /&gt;&lt;/p&gt;  &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;h3&gt;&lt;img src=&quot;http://download.codeplex.com/Download?ProjectName=episerveresmp&amp;amp;DownloadId=307765&quot; /&gt;&lt;/h3&gt;  &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Image Galleries&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Below are some pictures showing you what you would see if you used the list of image gallery entities property.&lt;/p&gt;  &lt;h3&gt;&lt;img src=&quot;http://download.codeplex.com/Download?ProjectName=episerveresmp&amp;amp;DownloadId=307766&quot; /&gt;&lt;/h3&gt;  &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;h3&gt;&lt;img src=&quot;http://download.codeplex.com/Download?ProjectName=episerveresmp&amp;amp;DownloadId=307767&quot; /&gt;&lt;/h3&gt;  &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;h3&gt;&lt;img src=&quot;http://download.codeplex.com/Download?ProjectName=episerveresmp&amp;amp;DownloadId=307768&quot; /&gt;&lt;/h3&gt;  &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;h3&gt;&lt;img src=&quot;http://download.codeplex.com/Download?ProjectName=episerveresmp&amp;amp;DownloadId=307967&quot; /&gt;&lt;/h3&gt;  &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;p&gt;The image below demonstrates how you can make use of the property copying functionality.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;img src=&quot;http://download.codeplex.com/Download?ProjectName=episerveresmp&amp;amp;DownloadId=307770&quot; /&gt;&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Feedback&lt;/h3&gt;  &lt;p&gt;As always feedback is greatly appreciated, how many people are actively using this project within there EPiServer 6 solutions?    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Also, if you have any suggestions for new features or changes I am happy to hear them.&lt;/p&gt;  &lt;p&gt;Just twitter me &lt;a href=&quot;http://www.twitter.com/croweman&quot;&gt;@croweman&lt;/a&gt; or send me an email &lt;img alt=&quot;Smile&quot; src=&quot;/link/535bf8930a564e92b18f59756c8fff0a.png&quot; /&gt;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2011/11/ElencySolutionsMultipleProperty-v133-Released/</guid>            <pubDate>Mon, 28 Nov 2011 14:51:14 GMT</pubDate>           <category>Blog post</category></item><item> <title>FilteredPageReference v1.4.1 Released</title>            <link>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2011/11/FilteredPageReference-v141-Released/</link>            <description>&lt;p&gt;A new version of FilteredPageReference has now been released which contains the following bug fixes and changes:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;There was a bug when using the delegate to override allowed page type settings which has been fixed. &lt;/li&gt;    &lt;li&gt;In previous versions if using PageTypeBuilder, all assemblies and types were scanned to find relevant page types and interfaces.&amp;#160; You now have to specify valid assembly and full type name prefixes in the web.config, these configuration property values should be semi colon delimited.&amp;#160; Configuration example is shown below: &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;pre style=&quot;border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 620px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px&quot;&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  1: &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;configuration&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  2:   &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;configSections&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  3:     &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;section&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;quot;filteredPageReference&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;quot;FilteredPageReference.Configuration.FilteredPageReferenceConfiguration, FilteredPageReference&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  4:   &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;configSections&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  5:   &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;filteredPageReference&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;validAssemblyNamePrefixes&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;quot;EPiServer.Templates.AlloyTech;&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;validFullTypeNamePrefixes&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;quot;EPiServer.TeamMeetingDemo;&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  6: &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;configuration&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;

&lt;h3&gt;Installation&lt;/h3&gt;

&lt;p&gt;This version of FilteredPageReference is dependent on EPiServer CMS 6 R2.&amp;#160; It can be installed from the &lt;a href=&quot;http://nuget.episerver.com&quot; target=&quot;_blank&quot;&gt;EPiServer nuget feed&lt;/a&gt; or from &lt;a href=&quot;http://episerverfpr.codeplex.com&quot; target=&quot;_blank&quot;&gt;codeplex&lt;/a&gt;.&amp;#160; Usage instructions can be found &lt;a href=&quot;http://download.codeplex.com/Download?ProjectName=episerverfpr&amp;amp;DownloadId=305077&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2011/11/FilteredPageReference-v141-Released/</guid>            <pubDate>Sat, 19 Nov 2011 11:28:40 GMT</pubDate>           <category>Blog post</category></item><item> <title>ElencySolutions.MultipleProperty v1.3.2 Released</title>            <link>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2011/11/ElencySolutionsMultipleProperty-v132-Released/</link>            <description>&lt;p&gt;For anyone who is currently using my MultipleProperty assembly, a new version has been released today which fixes the following minor bug:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;When a user edits a page property and one of the MultipleProperty Edit or Delete buttons is clicked or the sort order is changed using drag and drop an alert was shown to to user asking whether they want to leave the page. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This update can be retrieved from the &lt;a href=&quot;http://nuget.episerver.com&quot; target=&quot;_blank&quot;&gt;EPiServer nuget feed&lt;/a&gt;&amp;#160;&lt;a href=&quot;http://episerveresmp.codeplex.com/&quot; target=&quot;_blank&quot;&gt;or codeplex&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;For more information on the MultipleProperty assembly please refer to my previous blog posts or use &lt;a href=&quot;http://episerveresmp.codeplex.com/&quot; target=&quot;_blank&quot;&gt;codeplex&lt;/a&gt; as a useful point of reference.&amp;#160; It contains documentation, links to blog posts and code examples.&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2011/11/ElencySolutionsMultipleProperty-v132-Released/</guid>            <pubDate>Wed, 16 Nov 2011 12:26:15 GMT</pubDate>           <category>Blog post</category></item><item> <title>ElencySolutions.MultipleProperty v1.3.1 Released</title>            <link>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2011/11/ElencySolutionsMultipleProperty-v131-Released/</link>            <description>&lt;p&gt;For those of you who are not using ElencySolutions.MultipleProperty in their projects please refer back to previous blog posts and the usage instructions linked to on &lt;a href=&quot;http://episerveresmp.codeplex.com/&quot; target=&quot;_blank&quot;&gt;codeplex&lt;/a&gt; to see how it could help you out.&lt;/p&gt;  &lt;p&gt;Some of the things it allows you to easily do but by no means all are briefly summarised below:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Create custom properties that comprise of other properties. &lt;/li&gt;    &lt;li&gt;Create lists of properties &lt;/li&gt;    &lt;li&gt;As the Multiple property entities make use of PropertyData objects you are able to pretty much have lists within lists. &lt;/li&gt;    &lt;li&gt;Ability to define minimum and maximum number of entities. &lt;/li&gt;    &lt;li&gt;Ability to copy the property to another page. &lt;/li&gt;    &lt;li&gt;Ability to display entity properties in different tabs. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;What’s new in v1.3.1&lt;/h3&gt;  &lt;p&gt;Those of you who keep an eye on World will probably be wondering why I have released another version already considering I released v1.3 two days ago.&lt;/p&gt;  &lt;p&gt;Well, it’s not because there were bugs in v1.3 (as far as I am aware).&amp;#160; It’s because one of my colleagues wanted to do some additional things with property settings which the previous versions didn’t offer.&amp;#160; More specifically she had a property which was essentially a list of &lt;strong&gt;FilteredPageReference&lt;/strong&gt; properties and she wanted to use the list based property on various page types but wanted to restrict the page types that could be picked differently depending on the page type.&amp;#160; She wanted to do this by modifying the filtered page reference settings for the page type property through admin mode..&lt;/p&gt;  &lt;p&gt;So as I have plenty of time on the train, I thought I would extend the MultipleProperty offering to cater for her needs and as we are using the FilteredPageReference and MultipleProperty properties more and more I thought it would prove quite useful.&lt;/p&gt;  &lt;p&gt;New features are summarised below:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A minimum number of entities can now be defined on a list of entities.&amp;#160; If the number of minimum enters have not been added then the page will not be able to be saved. &lt;/li&gt;    &lt;li&gt;There are now three ways of setting property settings on an entity property.&amp;#160; Well if we are being picky two of them are pretty much the same but I wanted the solution to be backwards compatible. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Installation and Setup&lt;/h3&gt;  &lt;p&gt;ElencySolutions.MultipleProperty has been built to work with EPiServer CMS 6 and onwards.&amp;#160; Advanced &lt;a href=&quot;http://download.codeplex.com/Download?ProjectName=episerveresmp&amp;amp;DownloadId=300066&quot; target=&quot;_blank&quot;&gt;usage instructions&lt;/a&gt; (which are definately worth having a read of) as well as examples can be found on &lt;a href=&quot;http://episerveresmp.codeplex.com/&quot; target=&quot;_blank&quot;&gt;codeplex&lt;/a&gt;.&amp;#160; The usage instructions also has an FAQ section which could prove quite handy.&lt;/p&gt;  &lt;p&gt;The easiest way to install the assembly is to download the latest nuget feed from &lt;a href=&quot;http://nuget.episerver.com/&quot; target=&quot;_blank&quot;&gt;nuget.episerver.com&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The site on &lt;a href=&quot;http://episerveresmp.codeplex.com&quot; target=&quot;_blank&quot;&gt;codeplex&lt;/a&gt; will also provide useful links for all blog posts that have been posted related to ElencySolutionsMultipleProperty.     &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;Making use of MultipleProperty Entity PropertyData property settings&lt;/h3&gt;  &lt;p&gt;You are able to define property settings for a Property Control by setting the &lt;strong&gt;PropertySettingsCreator&lt;/strong&gt; property within the &lt;strong&gt;MultiplePropertyEntityProperty&lt;/strong&gt; attribute class. &lt;/p&gt;  &lt;p&gt;The value of this property needs to be a type that implements &lt;strong&gt;IMultiplePropertySettingsCreator&lt;/strong&gt; or &lt;strong&gt;IMultiplePropertySettingsCreatorAdvanced&lt;/strong&gt;. &lt;/p&gt;  &lt;p&gt;You are now also able to set the &lt;strong&gt;UseMatchingSettingsDecoratedOnPropertyType&lt;/strong&gt; boolean property within the &lt;strong&gt;MultiplePropertyEntityProperty&lt;/strong&gt; attribute class. If the value of the property is set to true then the relevant settings if found will be taken from the ones defined on the physical page type page definition property.     &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;Code Examples&lt;/h3&gt;  &lt;p&gt;The code below demonstrate how to define property settings for a &lt;strong&gt;PropertyHtmlString&lt;/strong&gt; property using both the &lt;strong&gt;IMultiplePropertySettingsCreator&lt;/strong&gt; and &lt;strong&gt;IMultiplePropertySettingsCreatorAdvanced&lt;/strong&gt; interfaces.&lt;/p&gt;  &lt;p&gt;You will notice that for the &lt;strong&gt;WYSIWYGAlternative&lt;/strong&gt; property it uses a property settings creator based on &lt;strong&gt;IMultipleSettingsCreatorAdvanced&lt;/strong&gt;.&amp;#160; This is a new interface for v1.3.1 and the implementation needs to have a method named &lt;strong&gt;CreatePropertySettings&lt;/strong&gt; which accepts a page type id and property name parameter.&amp;#160; This method allows you to conditionally based on the parameters create or load different property settings.&amp;#160; You will also notice that the implementation of this method calls &lt;strong&gt;MultiplePropertyHelper.GetPropertySettings&lt;/strong&gt; which allows you to retrieve property setting that have been defined on a property data instance of a page data object created from a specific page type. &lt;/p&gt;  &lt;pre style=&quot;border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 620px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px&quot;&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  1: [Serializable]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  2: [DataContract]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  3: [KnownType(&lt;span style=&quot;color: #0000ff&quot;&gt;typeof&lt;/span&gt;(CustomProperty))]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  4: [MultiplePropertyEntity]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  5: &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; CustomProperty
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  6: {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  7:     &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; ToString()
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  8:     {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  9:         &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; MultiplePropertyHelper.SerializeObject(&lt;span style=&quot;color: #0000ff&quot;&gt;this&lt;/span&gt;);
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 10:     }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 11: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 12:     [MultiplePropertyEntityProperty(Caption = &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;What you see is what you get&lt;/span&gt;&amp;quot;,
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 13:         Type = &lt;span style=&quot;color: #0000ff&quot;&gt;typeof&lt;/span&gt;(PropertyXhtmlString),
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 14:         SortIndex = 100,
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 15:         PropertySettingsCreator = &lt;span style=&quot;color: #0000ff&quot;&gt;typeof&lt;/span&gt;(WYSIWYGPropertySettingsCreator))]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 16:     [DataMember]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 17:     &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; WYSIWYG { &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff&quot;&gt;set&lt;/span&gt;; }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 18: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 19:     [MultiplePropertyEntityProperty(Caption = &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;What you see is what you get alternative&lt;/span&gt;&amp;quot;,
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 20:         Type = &lt;span style=&quot;color: #0000ff&quot;&gt;typeof&lt;/span&gt;(PropertyXhtmlString),
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 21:         SortIndex = 100,
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 22:         PropertySettingsCreator = &lt;span style=&quot;color: #0000ff&quot;&gt;typeof&lt;/span&gt;(WYSIWYGPropertySettingsCreatorAdvanced))]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 23:     [DataMember]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 24:     &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; WYSIWYGAlternative { &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff&quot;&gt;set&lt;/span&gt;; }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 25: }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 26: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 27: &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; WYSIWYGPropertySettingsCreator : IMultiplePropertySettingsCreator
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 28: {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 29:     &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; IPropertySettings CreatePropertySettings()
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 30:     {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 31:         TinyMCESettings settings = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; TinyMCESettings().GetDefaultValues() &lt;span style=&quot;color: #0000ff&quot;&gt;as&lt;/span&gt; TinyMCESettings;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 32:         settings.ToolbarRows.Clear();
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 33:         &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; settings;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 34:     }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 35: }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 36: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 37: &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; WYSIWYGPropertySettingsCreatorAdvanced : IMultiplePropertySettingsCreatorAdvanced
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 38: {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 39:     &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; IPropertySettings CreatePropertySettings(&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; pageTypeId, &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; propertyName)
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 40:     {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 41:         TinyMCESettings settings = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; TinyMCESettings().GetDefaultValues() &lt;span style=&quot;color: #0000ff&quot;&gt;as&lt;/span&gt; TinyMCESettings;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 42: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 43:         &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (pageTypeId == 33 &amp;amp;&amp;amp; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;.Equals(propertyName, &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;MyCustomProperty_WYWIWYG&lt;/span&gt;&amp;quot;))
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 44:         {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 45:             settings.ToolbarRows.Clear();
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 46:         }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 47:         &lt;span style=&quot;color: #0000ff&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (pageTypeId == 34 &amp;amp;&amp;amp; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;.Equals(propertyName, &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;MyCustomProperty_WYWIWYG2&lt;/span&gt;&amp;quot;))
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 48:         {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 49:             &lt;span style=&quot;color: #008000&quot;&gt;// get the settings from a property defined on a page type&lt;/span&gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 50:             PageData settingsPage = DataFactory.Instance.GetChildren(PageReference.RootPage)
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 51:                 .Where(current =&amp;gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;.Equals(current.PageTypeName, &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;Settings Page Type&lt;/span&gt;&amp;quot;))
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 52:                 .FirstOrDefault();
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 53: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 54:             &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (settingsPage != &lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;)
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 55:                 settings = (TinyMCESettings)MultiplePropertyHelper.GetPropertySettings(settingsPage.Property[&amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;SomeProperty&lt;/span&gt;&amp;quot;], &lt;span style=&quot;color: #0000ff&quot;&gt;typeof&lt;/span&gt;(TinyMCESettings));
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 56:         }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 57: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 58:         &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; settings;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 59:     }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 60: }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;The following example will demonstrate how you could make use of settings that have been applied to a property definition belonging to a page type and edited through admin mode.&lt;/p&gt;

&lt;p&gt;You will notice that the &lt;strong&gt;UseMatchingSettingsDecoratedOnPropertyType&lt;/strong&gt; boolean property of the MultiplePropertyEntityPropertyAttribute is set to true.&amp;#160; &lt;br /&gt;

  &lt;br /&gt;In this example as the property control is a &lt;strong&gt;PropertyXhtmlString&lt;/strong&gt; the code will look for &lt;strong&gt;TincyMCESettings&lt;/strong&gt; that have been set on the property definition and if there are any it will apply the to the entity property. &lt;/p&gt;

&lt;pre style=&quot;border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 620px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px&quot;&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  1: [Serializable]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  2: [PageDefinitionTypePlugIn(DisplayName = &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;PropertyCustomPropertyTwo&lt;/span&gt;&amp;quot;, Description = &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;A custom property&lt;/span&gt;&amp;quot;)]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  3: [PropertySettings(&lt;span style=&quot;color: #0000ff&quot;&gt;typeof&lt;/span&gt;(TinyMCESettings), &lt;span style=&quot;color: #0000ff&quot;&gt;true&lt;/span&gt;)]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  4: &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; PropertyCustomPropertyTwo: MultiplePropertyBase&amp;lt;CustomPropertyTwo, CustomPropertyTwo&amp;gt;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  5: {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  6:     &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; CreateDefaultViewControls(Web.PropertyControls.PropertyDataControl control)
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  7:     {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  8:         &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (Value == &lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;)
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt;  9:             &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt;;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 10: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 11:         Gallery galleryControl = control.Page.LoadControl(&amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;~/MultiplePropertyExample/Units/Gallery.ascx&lt;/span&gt;&amp;quot;) &lt;span style=&quot;color: #0000ff&quot;&gt;as&lt;/span&gt; Gallery;
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 12:         galleryControl.PopulateControl(Value &lt;span style=&quot;color: #0000ff&quot;&gt;as&lt;/span&gt; ImageGallery);
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 13:         control.Controls.Add(galleryControl);
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 14:     }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 15: }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 16: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 17: [Serializable]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 18: [DataContract]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 19: [KnownType(&lt;span style=&quot;color: #0000ff&quot;&gt;typeof&lt;/span&gt;(CustomPropertyTwo))]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 20: [MultiplePropertyEntity]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 21: &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; CustomPropertyTwo
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 22: {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 23:     &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; ToString()
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 24:     {
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 25:         &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; MultiplePropertyHelper.SerializeObject(&lt;span style=&quot;color: #0000ff&quot;&gt;this&lt;/span&gt;);
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 26:     }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 27: 
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 28:     [MultiplePropertyEntityProperty(Caption = &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;What you see is what you get&lt;/span&gt;&amp;quot;,
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 29:         Type = &lt;span style=&quot;color: #0000ff&quot;&gt;typeof&lt;/span&gt;(PropertyXhtmlString),
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 30:         SortIndex = 100,
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 31:         UseMatchingSettingsDecoratedOnPropertyType = &lt;span style=&quot;color: #0000ff&quot;&gt;true&lt;/span&gt;)]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 32:     [DataMember]
&lt;/pre&gt;&lt;pre style=&quot;background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 33:     &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; WYSIWYG { &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff&quot;&gt;set&lt;/span&gt;; }
&lt;/pre&gt;&lt;pre style=&quot;background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px&quot;&gt; 34: }&lt;/pre&gt;&lt;/pre&gt;

&lt;h3&gt;&amp;#160;&lt;/h3&gt;

&lt;h3&gt;Feedback&lt;/h3&gt;

&lt;p&gt;As always feedback is greatly appreciated, how many people are actively using this project within there EPiServer 6 solutions? 
  &lt;br /&gt;

  &lt;br /&gt;Also, if you have any suggestions for new features or changes I am happy to hear them.&lt;/p&gt;

&lt;p&gt;Just twitter me &lt;a href=&quot;http://www.twitter.com/croweman&quot;&gt;@croweman&lt;/a&gt; or send me an email &lt;img style=&quot;border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none&quot; class=&quot;wlEmoticon wlEmoticon-smile&quot; alt=&quot;Smile&quot; src=&quot;/link/535bf8930a564e92b18f59756c8fff0a.png&quot; /&gt;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/Lee-Crowe/Dates/2011/11/ElencySolutionsMultipleProperty-v131-Released/</guid>            <pubDate>Fri, 04 Nov 2011 10:35:57 GMT</pubDate>           <category>Blog post</category></item></channel>
</rss>