<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Todd's Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/toddca/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/toddca/feed.xml</link>
    <description>My contribution to the SharePoint community</description>
    <lastBuildDate>Wed, 17 Apr 2019 03:27:31 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Blog is Still Alive</title>
      <link>https://docs.microsoft.com/archive/blogs/toddca/blog-is-still-alive</link>
      <pubDate>Sat, 28 Jun 2014 11:52:42 GMT</pubDate>
      <dc:creator><![CDATA[Toddca]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/toddca/2014/06/28/blog-is-still-alive/</guid>
      <description><![CDATA[Cannot believe at this point I can still write a blog post here. Coolio.]]></description>
      <content:encoded><![CDATA[<p>Cannot believe at this point I can still write a blog post here. Coolio.</p>]]></content:encoded>
    </item>
    <item>
      <title>Spankin' New Blog</title>
      <link>https://docs.microsoft.com/archive/blogs/toddca/spankin-new-blog</link>
      <pubDate>Tue, 09 Mar 2010 13:33:00 GMT</pubDate>
      <dc:creator><![CDATA[Toddca]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/toddca/2010/03/09/spankin-new-blog/</guid>
      <description><![CDATA[Got a new blog site, please join me here https://todd-carter.com]]></description>
      <content:encoded><![CDATA[Got a new blog site, please join me here <A title=https://todd-carter.com href="https://todd-carter.com/" mce_href="https://todd-carter.com">https://todd-carter.com</A>]]></content:encoded>
    </item>
    <item>
      <title>On Twitter Now</title>
      <link>https://docs.microsoft.com/archive/blogs/toddca/on-twitter-now</link>
      <pubDate>Sat, 02 May 2009 11:17:00 GMT</pubDate>
      <dc:creator><![CDATA[Toddca]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/toddca/2009/05/02/on-twitter-now/</guid>
      <description><![CDATA[After being push and prodded by my friends I have decided to join the Twitter community @Toddca. I...]]></description>
      <content:encoded><![CDATA[<P>After being push and prodded by my friends I have decided to join the Twitter community <A title=@toddca href="https://twitter.com/toddca" target=_blank mce_href="https://twitter.com/toddca">@Toddca</A>. I am still a bit confused on how to follow a thread/conversation but I am sure that is just me. :-)</P>
<P>Now lets see how dumb I can make myself look in 140 characters or less!&nbsp;</P>
<P mce_keep="true">&nbsp;</P>]]></content:encoded>
    </item>
    <item>
      <title>SharePoint Session State; The Guest That Just Won’t Leave</title>
      <link>https://docs.microsoft.com/archive/blogs/toddca/sharepoint-session-state-the-guest-that-just-wont-leave</link>
      <pubDate>Tue, 17 Mar 2009 21:01:41 GMT</pubDate>
      <dc:creator><![CDATA[Toddca]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/toddca/2009/03/17/sharepoint-session-state-the-guest-that-just-wont-leave/</guid>
      <description><![CDATA[MOSS uses ASP.Net session state for Forms Services, Project Server, etc. SharePoint installs a...]]></description>
      <content:encoded><![CDATA[<p>MOSS uses ASP.Net session state for Forms Services, Project Server, etc. SharePoint installs a PartitionResolver which redirects the ASP.NET session state module to look to the SSP DB for its stored procedures and tables for storage of session state. Within CA there is an option to turn off Session State (its on by default) however if you try to start an OOTB workflow we attempt to load an InfoPath form via forms services and you will get probably one of the most clear and understandable errors in SharePoint (I won’t spoil the surprise here, you will either have to try it out or trust me :-)) ASP.net session state is a binary serialized representation of the client’s session state along with metadata such as the expiry and created date/time. When session state enabled sessions are inserted into the table ASPStateTempSessions within the SSP DB for each SSP.</p>  <p>So what’s the problem? ASP.Net Session state uses a sliding expiry which by default should expire the session state object after 60 min of not hearing from the client for which the session was created. So while this all works fine the issue is that SharePoint never cleans up these session state records out of the ASPStateTempSessions table. The result is your SSP DB(s) may continue to grow in size.</p>  <p>&#160;</p>  <p><strong>The Fix</strong></p>  <p>Fortunately the fix is trivial however does involve a few manual steps which I will outline here. The goal is to create a SQL Agent timer job which will run once a minute and clean up expired sessions by executing the stored procedure ‘DeleteExpiredSessions’</p>  <p>1. Ensure the SQL Server Agent (SQLSERVERAGENT) service is started and set to startup when the machine starts. At a minimum this service needs to run on all SQL servers/instances which host an SSP DB.</p>  <p>2. Change to the .net Framework directory where ASP.Net is located, eg %windir%\Microsoft.Net\Framework[64]\v2.0.50727. </p>  <p>3. From the framework director run the following command replacing [YOUR SSP DB NAME] with the name of your SSP DB: aspnet_regsql -sstype c –d [YOUR SSP DB NAME] -sqlexportonly fix.sql –ssadd</p>  <p>4. The command from step 3 instructs the aspnet_regsql utility to generate a sql script named ‘fix.sql’ which can be used to install the ASP.Net session state stored procedures, tables, and jobs. Since everything we need for ASP.net session state is already in the SSP DB and we don’t want to edit that DB directly or risk entering into the land of “Unsupported” we only need to execute a portion of this file. Open fix.sql into SQL management studio and locate the line which has the following text:&#160; /* Create the job to delete expired sessions */&#160; Highlight everything below this line to the end of the file. With this text highlighted execute the query (hit F5).</p>  <p>5. At this point you should be able to navigate to the SQL Agent service and see the job: [YOUR SSP DB NAME]_Job_DeleteExpiredSessions. As I mentioned previously this job will execute every one min and clean up expired sessions.</p>  <p>6. Repeat for each additional SSPs in the farm.</p>]]></content:encoded>
    </item>
    <item>
      <title>Run (As Your AppPool Account) Forrest</title>
      <link>https://docs.microsoft.com/archive/blogs/toddca/run-as-your-apppool-account-forrest</link>
      <pubDate>Wed, 11 Feb 2009 22:58:37 GMT</pubDate>
      <dc:creator><![CDATA[Toddca]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/toddca/2009/02/11/run-as-your-apppool-account-forrest/</guid>
      <description><![CDATA[When running within a website that uses impersonation you find it necessary sometimes to have your...]]></description>
      <content:encoded><![CDATA[<p>When running within a website that uses impersonation you find it necessary sometimes to have your code stop impersonating for a period of time while you run some code. For example if you need to get off the box (not using Kerberos) and connect to another resource you will need to fall back and run as the AppPool account or logon another user and use those credentials to hit the remote resource. For the former I have written a small utility class that makes this possible. There are other samples out there however some use PINVOKE and I wanted something really simple and easy to use.
</p><p>To use the code you will do something like:
</p><p><span style="font-family:Courier New; font-size:10pt"><span style="color:blue">using</span> (<span style="color:blue">new</span> AppPoolImpersonator())
</span></p><p><span style="font-family:Courier New; font-size:10pt">{
</span></p><p><span style="color:green; font-family:Courier New; font-size:10pt">  //unimpresonated code here
</span></p><p><span style="font-family:Courier New; font-size:10pt">}
</span></p><p>
 </p><p>The class looks like so:
</p><p><span style="font-family:Courier New; font-size:10pt"><span style="color:blue">   public</span>
			<span style="color:blue">class</span> AppPoolImpersonator : <span style="color:#2b91af">IDisposable
</span></span></p><p><span style="font-family:Courier New; font-size:10pt">   {
</span></p><p><span style="font-family:Courier New; font-size:10pt">
			<span style="color:#2b91af">WindowsImpersonationContext</span> _windowsImpersonationContext;
</span></p><p>
 </p><p><span style="font-family:Courier New; font-size:10pt">
			<span style="color:blue">public</span> AppPoolImpersonator()
</span></p><p><span style="font-family:Courier New; font-size:10pt">       {
</span></p><p><span style="font-family:Courier New; font-size:10pt">
			<span style="color:blue">if</span> (_windowsImpersonationContext == <span style="color:blue">null</span> &amp;&amp;
</span></p><p><span style="font-family:Courier New; font-size:10pt">               !<span style="color:#2b91af">WindowsIdentity</span>.GetCurrent().IsSystem)
</span></p><p><span style="font-family:Courier New; font-size:10pt">           {
</span></p><p><span style="font-family:Courier New; font-size:10pt">               _windowsImpersonationContext = <span style="color:#2b91af">WindowsIdentity</span>.Impersonate(System.<span style="color:#2b91af">IntPtr</span>.Zero);
</span></p><p><span style="font-family:Courier New; font-size:10pt">           }
</span></p><p><span style="font-family:Courier New; font-size:10pt">       }
</span></p><p>
 </p><p><span style="font-family:Courier New; font-size:10pt">
			<span style="color:blue">public</span>
			<span style="color:blue">void</span> Dispose()
</span></p><p><span style="font-family:Courier New; font-size:10pt">       {
</span></p><p><span style="font-family:Courier New; font-size:10pt">           Undo();
</span></p><p><span style="font-family:Courier New; font-size:10pt">
			<span style="color:#2b91af">GC</span>.SuppressFinalize(<span style="color:blue">this</span>);
</span></p><p><span style="font-family:Courier New; font-size:10pt">       }
</span></p><p>       
 </p><p><span style="font-family:Courier New; font-size:10pt">
			<span style="color:blue">public</span>
			<span style="color:blue">void</span> Undo()
</span></p><p><span style="font-family:Courier New; font-size:10pt">       {
</span></p><p><span style="font-family:Courier New; font-size:10pt">
			<span style="color:blue">if</span> (_windowsImpersonationContext != <span style="color:blue">null</span>)
</span></p><p><span style="font-family:Courier New; font-size:10pt">           {
</span></p><p><span style="font-family:Courier New; font-size:10pt">               _windowsImpersonationContext.Undo();
</span></p><p><span style="font-family:Courier New; font-size:10pt">               _windowsImpersonationContext = <span style="color:blue">null</span>;
</span></p><p><span style="font-family:Courier New; font-size:10pt">           }
</span></p><p><span style="font-family:Courier New; font-size:10pt">       }
</span></p><p><span style="font-family:Courier New; font-size:10pt">    }</span>
	</p>]]></content:encoded>
    </item>
    <item>
      <title>PrepareToMove Away From Running This Command</title>
      <link>https://docs.microsoft.com/archive/blogs/toddca/preparetomove-away-from-running-this-command</link>
      <pubDate>Fri, 30 Jan 2009 10:07:00 GMT</pubDate>
      <dc:creator><![CDATA[Toddca]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/toddca/2009/01/30/preparetomove-away-from-running-this-command/</guid>
      <description><![CDATA[If you are a SharePoint Admin that is still running stsadm –o PrepareToMove before detaching a...]]></description>
      <content:encoded><![CDATA[<P>If you are a SharePoint Admin that is still running stsadm –o PrepareToMove before detaching a content DB AND your farm is running at least the Infrastructure Update (IU) then stop! Stop running the command, its not necessary and it is causing you problems and you probably don't even realize it. </P>
<P>If prepareToMove is run within a SharePoint farm that has at least the IU that Content DB will no longer participlate in profile syncronization; even if you remove and reattach the content DB to the same farm. The issue is due to a change in behavior that we introduced in the Infrastructure Update (IU). Before the IU when a content DB was removed and reintroduced back into a SharePoint farm the DB ID would change/regenerate. This had the side effect of causing all content within those DBs to undergo a Full Crawl by search. As you can imagine this a huge overheard so in the IU we ensured that the Content DBs never had to change IDs when reintroduced into a Farm. The PrepareToRemove was originally needed to ensure we did not have to redo a full sync when the same content DB with a new ID was reintroduced. Since this ID now does not change this is no longer needed when running within a farm that has at least the IU installed. </P>
<P>PrepareToMove sets 'Moving' to True in the SiteSynch table of the SSP DB which signals to the profile sync job to ignore the DB which has the effect of not allowing profile syncs to occur for this DB. After attaching a Content DB back into the IU farm 'Moving' is still set to True. Even after the sync timer job fires and the stored procedure profilesynch_RegisterSiteToSynch is executed this content DB will still have its 'Moving' set to True. </P>
<P mce_keep="true"><IMG style="WIDTH: 628px; HEIGHT: 131px" height=131 src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/38/48/28/prepareToMove.png" original-url="https://blogs.msdn.com/photos/toddca/images/9384828/original.aspx" width=628 mce_src="https://blogs.msdn.com/photos/toddca/images/9384828/original.aspx"></P>
<P>The fix/resolution is to run PrepareToMove again (ok so I lied there is a case where you want to run it with the IU) but this time with the –undo option. The -undo command is harmless and it will set 'Moving' back to False and allow profile syncs to this content DB to start running again. </P>
<P><EM>Be on the lookout for new TechNet and KB guidance around this command. </EM></P>]]></content:encoded>
    </item>
    <item>
      <title>High Memory is Relative</title>
      <link>https://docs.microsoft.com/archive/blogs/toddca/high-memory-is-relative</link>
      <pubDate>Fri, 23 Jan 2009 20:42:00 GMT</pubDate>
      <dc:creator><![CDATA[Toddca]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/toddca/2009/01/23/high-memory-is-relative/</guid>
      <description><![CDATA[Like most folks I customize my computer to fit my needs. I apply a myriad of registry settings,...]]></description>
      <content:encoded><![CDATA[<P>Like most folks I customize my computer to fit my needs. I apply a myriad of registry settings, applications, utilities, and adjustments to my machine to get the environment just the way I like. One item I always seem to change is the buffer height of my command prompt. I find it is useful to increase this buffer when I am running commands that have a ton of output or when I am debugging an application with a command line debugger. Rather than have the text just flow off the buffer I typically increase te Height buffer to the max, 9999. When doing so you may run across one of the most useless messages you may come across in Windows. </P>
<P><SPAN style="COLOR: red">WARNING: Screen buffer size will require 1 MB of memory per window. </SPAN></P>
<P>Obviously the guy or gal that wrote this message has not&nbsp;looked at the memory consumption of&nbsp;Outlook 2007.:-) The message actually goes way back. I remember filing a bug, which was subsequently rejected, on this dialog when Windows 2000 was still in Beta. As far as I can tell it is a holdover from the days when the premier operating system around was known simply as NT. As best as I can figure it was put into the OS around the NT 3.x days however if anyone is still running those version and can confirm or deny I would love to know. But here it is in Windows Vista still alive and kickin.</P>
<P><IMG src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/37/34/89/error_message.png" original-url="https://blogs.msdn.com/photos/toddca/images/9373489/407x475.aspx" mce_src="https://blogs.msdn.com/photos/toddca/images/9373489/407x475.aspx"></P>]]></content:encoded>
    </item>
    <item>
      <title>Customizing the Rendering of a Custom SPField</title>
      <link>https://docs.microsoft.com/archive/blogs/toddca/customizing-the-rendering-of-a-custom-spfield</link>
      <pubDate>Fri, 23 Jan 2009 15:37:00 GMT</pubDate>
      <dc:creator><![CDATA[Toddca]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/toddca/2009/01/23/customizing-the-rendering-of-a-custom-spfield/</guid>
      <description><![CDATA[I was recently asked by a customer how to use a PropertySchema field value within a RenderPatten's...]]></description>
      <content:encoded><![CDATA[<P>I was recently asked by a customer how to use a PropertySchema field value within a RenderPatten's CAML to control how a field is rendered. The idea is to create a new instance of the field and have some method to control how that field will be rendered at the time the column is instantiated. Unfortunately field values from the PropertySchema are not available via a &lt;Property Select='myValue'/&gt; within a ReanderPattern's CAML and nor is it possible to call a custom getter off the SPField derived class of your custom SPField. In most cases when a field is rendered it is done so within native (non-managed) code so the getter on your .net assembly will not get called. The field schema stored in the DB is what gets read to help generate the rendered output. Fortunately this schema can be accessed by SPFIeld.SchemaXml. Adding properties or attributes to the root element of this XML will allow the RenderPattern CAML access. </P>
<P>So let's take a look at a sample. For my scenario I want URL field however I want to control how that field is rendered. By default a URL field just renders the URL without wrapping that URL in an &lt;a&gt; tag. In our example we want to create a true hyperlink so we are going to generate a RenderingPattern which will wrap an &lt;a&gt; tag around the field value. In addition we want the creator of the field to choose what happens when that link is selected by the user. That is, will the navigation happen within the same window or will the browser open the URL in a new window. I call these options "Self" and "New" respectively. </P>
<P>Now that we have our scenario let's take a look at what it will take to wire up the new field. First I need to define our field via fldTypes XML. <STRONG>Code 1</STRONG> shows what this looks like. As you can see the Parent is "URL" because we want to use the same storage and rendering of the built-in URL however we are going to tweak it a bit. The FieldTypeClass will be outlined in <STRONG>Code 2</STRONG>. The PropertySchema field is used to collect the user's intent on how the URL will behave within the client's browser and finally we have RenderingPattern CAML which will control how the field will be rendered within the browser. Note I have a FieldSwitch on a Property called 'HowOpenUrl', this value will not be chosen from the PropertySchema's HowOpenUrl directly however once you take a look at Code 2 you will see how this is done. The reminder of the RenderPattern uses the FieldSwitch to determine how to render the URL. The default rendering is an &lt;a&gt; tag with the target set to _self so the URL will be navigated to within the same window. </P>
<P><STRONG>Code 1 – fldtypes_sample.xml </STRONG></P>
<DIV>
<TABLE class="" style="BORDER-COLLAPSE: collapse" border=0>
<COLGROUP>
<COL style="WIDTH: 1141px"></COLGROUP>
<TBODY vAlign=top>
<TR>
<TD class="" style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: black 0.5pt solid; PADDING-LEFT: 7px; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&lt;?</SPAN><SPAN style="COLOR: #a31515">xml</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">version</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">1.0</SPAN>"<SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">encoding</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">utf-8</SPAN>"<SPAN style="COLOR: blue"> ?&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&lt;</SPAN><SPAN style="COLOR: #a31515">FieldTypes</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">FieldType</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">Field</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">Name</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">TypeName</SPAN>"<SPAN style="COLOR: blue">&gt;</SPAN>ConfigurableURL<SPAN style="COLOR: blue">&lt;/</SPAN><SPAN style="COLOR: #a31515">Field</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">Field</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">Name</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">ParentType</SPAN>"<SPAN style="COLOR: blue">&gt;</SPAN>URL<SPAN style="COLOR: blue">&lt;/</SPAN><SPAN style="COLOR: #a31515">Field</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">Field</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">Name</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">TypeDisplayName</SPAN>"<SPAN style="COLOR: blue">&gt;</SPAN>Configurable URL<SPAN style="COLOR: blue">&lt;/</SPAN><SPAN style="COLOR: #a31515">Field</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">Field</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">Name</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">TypeShortDescription</SPAN>"<SPAN style="COLOR: blue">&gt;</SPAN>Configurable URL<SPAN style="COLOR: blue">&lt;/</SPAN><SPAN style="COLOR: #a31515">Field</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">Field</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">Name</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">UserCreatable</SPAN>"<SPAN style="COLOR: blue">&gt;</SPAN>TRUE<SPAN style="COLOR: blue">&lt;/</SPAN><SPAN style="COLOR: #a31515">Field</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">Field</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">Name</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">ShowInListCreate</SPAN>"<SPAN style="COLOR: blue">&gt;</SPAN>TRUE<SPAN style="COLOR: blue">&lt;/</SPAN><SPAN style="COLOR: #a31515">Field</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">Field</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">Name</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">ShowInSurveyCreate</SPAN>"<SPAN style="COLOR: blue">&gt;</SPAN>TRUE<SPAN style="COLOR: blue">&lt;/</SPAN><SPAN style="COLOR: #a31515">Field</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">Field</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">Name</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">ShowInDocumentLibraryCreate</SPAN>"<SPAN style="COLOR: blue">&gt;</SPAN>TRUE<SPAN style="COLOR: blue">&lt;/</SPAN><SPAN style="COLOR: #a31515">Field</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">Field</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">Name</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">ShowInColumnTemplateCreate</SPAN>"<SPAN style="COLOR: blue">&gt;</SPAN>TRUE<SPAN style="COLOR: blue">&lt;/</SPAN><SPAN style="COLOR: #a31515">Field</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">Field</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">Name</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">FieldTypeClass</SPAN>"<SPAN style="COLOR: blue">&gt;</SPAN>SampleConfigurableField.ConfigurableUrlField, SampleConfigurableField, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3de2414d286dff3d<SPAN style="COLOR: blue">&lt;/</SPAN><SPAN style="COLOR: #a31515">Field</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">PropertySchema</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">Fields</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">Field</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">Name</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">HowOpenUrl</SPAN>"<SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">DisplayName</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">Choose how to open the URL ('Self' = within same window, 'New' = New Window</SPAN>"<SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">Type</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">Text</SPAN>"<SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">Default</SPAN><SPAN style="COLOR: blue">&gt;</SPAN>Self<SPAN style="COLOR: blue">&lt;/</SPAN><SPAN style="COLOR: #a31515">Default</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</SPAN><SPAN style="COLOR: #a31515">Field</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</SPAN><SPAN style="COLOR: #a31515">Fields</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</SPAN><SPAN style="COLOR: #a31515">PropertySchema</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">RenderPattern</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">Name</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">DisplayPattern</SPAN>"<SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">FieldSwitch</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">Expr</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">Property</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">Select</SPAN><SPAN style="COLOR: blue">=</SPAN>'<SPAN style="COLOR: blue">HowOpenUrl</SPAN>'<SPAN style="COLOR: blue">/&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</SPAN><SPAN style="COLOR: #a31515">Expr</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">Case</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">Value</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">Self</SPAN>"<SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">HTML</SPAN><SPAN style="COLOR: blue">&gt;&lt;![CDATA[</SPAN><SPAN style="COLOR: gray">&lt;a target="_self" href="</SPAN><SPAN style="COLOR: blue">]]&gt;&lt;/</SPAN><SPAN style="COLOR: #a31515">HTML</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">Column</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">HTMLEncode</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">TRUE</SPAN>"<SPAN style="COLOR: blue"> /&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">HTML</SPAN><SPAN style="COLOR: blue">&gt;&lt;![CDATA[</SPAN><SPAN style="COLOR: gray">"&gt;</SPAN><SPAN style="COLOR: blue">]]&gt;&lt;/</SPAN><SPAN style="COLOR: #a31515">HTML</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">Column</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">HTMLEncode</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">TRUE</SPAN>"<SPAN style="COLOR: blue"> /&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">HTML</SPAN><SPAN style="COLOR: blue">&gt;&lt;![CDATA[</SPAN><SPAN style="COLOR: gray">&lt;/a&gt;</SPAN><SPAN style="COLOR: blue">]]&gt;&lt;/</SPAN><SPAN style="COLOR: #a31515">HTML</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</SPAN><SPAN style="COLOR: #a31515">Case</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">Case</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">Value</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">New</SPAN>"<SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">HTML</SPAN><SPAN style="COLOR: blue">&gt;&lt;![CDATA[</SPAN><SPAN style="COLOR: gray">&lt;a target="_blank" href="</SPAN><SPAN style="COLOR: blue">]]&gt;&lt;/</SPAN><SPAN style="COLOR: #a31515">HTML</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">Column</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">HTMLEncode</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">TRUE</SPAN>"<SPAN style="COLOR: blue"> /&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">HTML</SPAN><SPAN style="COLOR: blue">&gt;&lt;![CDATA[</SPAN><SPAN style="COLOR: gray">"&gt;</SPAN><SPAN style="COLOR: blue">]]&gt;&lt;/</SPAN><SPAN style="COLOR: #a31515">HTML</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">Column</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">HTMLEncode</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">TRUE</SPAN>"<SPAN style="COLOR: blue"> /&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">HTML</SPAN><SPAN style="COLOR: blue">&gt;&lt;![CDATA[</SPAN><SPAN style="COLOR: gray">&lt;/a&gt;</SPAN><SPAN style="COLOR: blue">]]&gt;&lt;/</SPAN><SPAN style="COLOR: #a31515">HTML</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</SPAN><SPAN style="COLOR: #a31515">Case</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">Default</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">Column</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">HTMLEncode</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">TRUE</SPAN>"<SPAN style="COLOR: blue"> /&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</SPAN><SPAN style="COLOR: #a31515">Default</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</SPAN><SPAN style="COLOR: #a31515">FieldSwitch</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</SPAN><SPAN style="COLOR: #a31515">RenderPattern</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</SPAN><SPAN style="COLOR: #a31515">FieldType</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&lt;/</SPAN><SPAN style="COLOR: #a31515">FieldTypes</SPAN><SPAN style="COLOR: blue">&gt;</SPAN></SPAN></P></TD></TR></TBODY></TABLE></DIV>
<P>After creating a Class Library project and adding the proper reference to Microsoft.SharePoint I added the following code to define my ConfigurableUrlField. This field derives from the SPFieldURL class which is important because we defined in Code 1 that our ParentType is "URL". Like all custom fields we need to create the two proper constructors which not only allow our type to be constructed but properly instantiates the base type. Next we need to override the OnAdded() and OnUpdated() methods which each get called whenever this field definition is added to a new site column or when the site column definition is updated, for example when someone wants to change from a rendering of this field from "Self" to "New". The magic all happens in ConfigureSchemaXml(), this is where we access the base.SchemaXml and update it with our custom property's value as configured by the user. This is the only chance we get to manipulate the schema before being stored in the DB and used to render the field. Note the name of the attribute being added/updated needs to match the name being used within the FieldSwitch: <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&lt;</SPAN><SPAN style="COLOR: #a31515">Property</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">Select</SPAN><SPAN style="COLOR: blue">=</SPAN>'<SPAN style="COLOR: blue">HowOpenUrl</SPAN>'<SPAN style="COLOR: blue">/&gt;</SPAN></SPAN> </P>
<P><STRONG>Code 2 – ConfigurableUrlField.cs </STRONG></P>
<DIV>
<TABLE class="" style="BORDER-COLLAPSE: collapse" border=0>
<COLGROUP>
<COL style="WIDTH: 1141px"></COLGROUP>
<TBODY vAlign=top>
<TR>
<TD class="" style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: black 0.5pt solid; PADDING-LEFT: 7px; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">namespace</SPAN> SampleConfigurableField </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">{ </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">using</SPAN> System; </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">using</SPAN> Microsoft.SharePoint; </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">using</SPAN> Microsoft.SharePoint.WebControls; </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">using</SPAN> System.Xml; </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">class</SPAN> <SPAN style="COLOR: #2b91af">ConfigurableUrlField</SPAN> : <SPAN style="COLOR: #2b91af">SPFieldUrl </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">{ </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">bool</SPAN> _updating = <SPAN style="COLOR: blue">false</SPAN>; </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">public</SPAN> ConfigurableUrlField(<SPAN style="COLOR: #2b91af">SPFieldCollection</SPAN> fields, <SPAN style="COLOR: blue">string</SPAN> fieldName) </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">: <SPAN style="COLOR: blue">base</SPAN>(fields, fieldName) { } </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">public</SPAN> ConfigurableUrlField(<SPAN style="COLOR: #2b91af">SPFieldCollection</SPAN> fields, <SPAN style="COLOR: blue">string</SPAN> typeName, <SPAN style="COLOR: blue">string</SPAN> displayName) </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">: <SPAN style="COLOR: blue">base</SPAN>(fields, typeName, displayName) { } </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">override</SPAN> <SPAN style="COLOR: blue">void</SPAN> OnUpdated() </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">{ </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: green">//ConfigureSchemaXml() will cause the OnUpdated event to be raised, </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: green">//to keep out of a stack overflow condition we bail early when updating </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">if</SPAN> (_updating) </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">return</SPAN>; </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">_updating = <SPAN style="COLOR: blue">true</SPAN>; </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">{ </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">base</SPAN>.OnUpdated(); </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">ConfigureSchemaXml(); </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">} </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">_updating = <SPAN style="COLOR: blue">false</SPAN>; </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">} </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">override</SPAN> <SPAN style="COLOR: blue">void</SPAN> OnAdded(<SPAN style="COLOR: #2b91af">SPAddFieldOptions</SPAN> op) </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">{ </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">base</SPAN>.OnAdded(op); </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">ConfigureSchemaXml(); </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">} </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">void</SPAN> ConfigureSchemaXml() </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">{ </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">string</SPAN> howOpenUrl = (<SPAN style="COLOR: blue">string</SPAN>)<SPAN style="COLOR: blue">base</SPAN>.GetCustomProperty(<SPAN style="COLOR: #a31515">"HowOpenUrl"</SPAN>); </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">howOpenUrl = AreStringsEqual(<SPAN style="COLOR: #a31515">"New"</SPAN>, howOpenUrl) ? <SPAN style="COLOR: #a31515">"New"</SPAN> : <SPAN style="COLOR: #a31515">"Self"</SPAN>; </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: #2b91af">XmlDocument</SPAN> doc = <SPAN style="COLOR: blue">new</SPAN> <SPAN style="COLOR: #2b91af">XmlDocument</SPAN>(); </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">doc.LoadXml(<SPAN style="COLOR: blue">base</SPAN>.SchemaXml); </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">if</SPAN> (doc.FirstChild.Attributes[<SPAN style="COLOR: #a31515">"HowOpenUrl"</SPAN>] == <SPAN style="COLOR: blue">null</SPAN>) </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">{ </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: #2b91af">XmlAttribute</SPAN> attrib = doc.CreateAttribute(<SPAN style="COLOR: #a31515">"HowOpenUrl"</SPAN>); </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">attrib.Value = howOpenUrl; </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">doc.FirstChild.Attributes.Append(attrib); </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">} </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">else </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">{ </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">doc.FirstChild.Attributes[<SPAN style="COLOR: #a31515">"HowOpenUrl"</SPAN>].Value = howOpenUrl; </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">} </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">base</SPAN>.SchemaXml = doc.OuterXml; </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">} </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">private</SPAN> <SPAN style="COLOR: blue">bool</SPAN> AreStringsEqual(<SPAN style="COLOR: blue">string</SPAN> s1, <SPAN style="COLOR: blue">string</SPAN> s2) </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">{ </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">return</SPAN> (<SPAN style="COLOR: #2b91af">String</SPAN>.Compare(s1, s2, <SPAN style="COLOR: blue">true</SPAN>) == 0); </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">} </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">override</SPAN> <SPAN style="COLOR: #2b91af">BaseFieldControl</SPAN> FieldRenderingControl </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">{ </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">get </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">{ </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: #2b91af">BaseFieldControl</SPAN> fldControl = <SPAN style="COLOR: blue">new</SPAN> <SPAN style="COLOR: #2b91af">UrlField</SPAN>(); </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">fldControl.FieldName = InternalName; </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">return</SPAN> fldControl; </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">} </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">} </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">} </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New">} </SPAN></P></TD></TR></TBODY></TABLE></DIV>
<P>For completeness I have included the manifest.xml used for deployment of the solution. I will not go over that here since the concept is covered in so many other places. </P>
<P><STRONG>Code 3 – manifest.xml </STRONG></P>
<DIV>
<TABLE class="" style="BORDER-COLLAPSE: collapse" border=0>
<COLGROUP>
<COL style="WIDTH: 1141px"></COLGROUP>
<TBODY vAlign=top>
<TR>
<TD class="" style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: black 0.5pt solid; PADDING-LEFT: 7px; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&lt;?</SPAN><SPAN style="COLOR: #a31515">xml</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">version</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">1.0</SPAN>"<SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">encoding</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">utf-8</SPAN>"<SPAN style="COLOR: blue"> ?&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&lt;</SPAN><SPAN style="COLOR: #a31515">Solution</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">xmlns</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">https://schemas.microsoft.com/sharepoint/</SPAN>" </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue"></SPAN><SPAN style="COLOR: red">SolutionId</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">733641DA-95D9-446E-812E-6070947171B2</SPAN>" </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue"></SPAN><SPAN style="COLOR: red">DeploymentServerType</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">WebFrontEnd</SPAN>" </SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue"></SPAN><SPAN style="COLOR: red">ResetWebServer</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">TRUE</SPAN>"<SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">Assemblies</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">Assembly</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">DeploymentTarget</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">GlobalAssemblyCache</SPAN>"<SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">Location</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">SampleConfigurableField.dll</SPAN>"<SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">SafeControls</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">SafeControl</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">Namespace</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">SampleConfigurableField</SPAN>"<SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">TypeName</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">*</SPAN>"<SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">Safe</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">True</SPAN>"<SPAN style="COLOR: blue"> /&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</SPAN><SPAN style="COLOR: #a31515">SafeControls</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</SPAN><SPAN style="COLOR: #a31515">Assembly</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</SPAN><SPAN style="COLOR: #a31515">Assemblies</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">TemplateFiles</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="COLOR: #a31515">TemplateFile</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: red">Location</SPAN><SPAN style="COLOR: blue">=</SPAN>"<SPAN style="COLOR: blue">XML\fldtypes_Sample.xml</SPAN>"<SPAN style="COLOR: blue">/&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</SPAN><SPAN style="COLOR: #a31515">TemplateFiles</SPAN><SPAN style="COLOR: blue">&gt; </SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"><SPAN style="COLOR: blue">&lt;/</SPAN><SPAN style="COLOR: #a31515">Solution</SPAN><SPAN style="COLOR: blue">&gt;</SPAN></SPAN></P></TD></TR></TBODY></TABLE></DIV>
<P>Once we have our solution added and deployed within our farm it is time to use the field. I created a test list and added a new column based on the Configurable URL field I just deployed. Note the open to set how the URL will open within the browser. </P>
<P>&nbsp;<IMG style="WIDTH: 672px; HEIGHT: 443px" height=345 src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/37/31/23/create_column.png" original-url="https://blogs.msdn.com/photos/toddca/images/9373123/500x316.aspx" width=531 mce_src="https://blogs.msdn.com/photos/toddca/images/9373123/500x316.aspx"></P>
<P>Now back at my list I create a new list item – note that we did not create a custom field control but rather are using the SPFieldUrl's field control for editing of this field. </P>
<P><IMG src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/37/31/50/NewItem.png" original-url="https://blogs.msdn.com/photos/toddca/images/9373150/500x146.aspx" mce_src="https://blogs.msdn.com/photos/toddca/images/9373150/500x146.aspx"></P>
<P>Finally we can see the URL in action. Obviously an image does not do it justice but if I look at the HTML source I can find what actually got rendered: </P>
<P><STRONG>&lt;a target="_self" href="https://www.msn.com" href="https://www.msn.com"&gt;https://www.msn.com&lt;/a&gt; </STRONG></P>
<P><IMG src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/37/31/31/URLField.png" original-url="https://blogs.msdn.com/photos/toddca/images/9373131/500x119.aspx" mce_src="https://blogs.msdn.com/photos/toddca/images/9373131/500x119.aspx"></P>]]></content:encoded>
    </item>
    <item>
      <title>The Zero Downtime SharePoint Patching Myth</title>
      <link>https://docs.microsoft.com/archive/blogs/toddca/the-zero-downtime-sharepoint-patching-myth</link>
      <pubDate>Sat, 02 Aug 2008 16:47:00 GMT</pubDate>
      <dc:creator><![CDATA[Toddca]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/toddca/2008/08/02/the-zero-downtime-sharepoint-patching-myth/</guid>
      <description><![CDATA[Unfortunately it is not possible to update/patch SharePoint without occurring some amount downtime....]]></description>
      <content:encoded><![CDATA[<P><SPAN style="COLOR: #1f497d">Unfortunately it is not possible to update/patch SharePoint without occurring some amount downtime. So the only options available to us are to <EM>minimize</EM> downtime. </SPAN></P>
<P><SPAN style="COLOR: #1f497d">I think of downtime in two ways, 'not available' and 'reduced functionality'. The second obviously is more closely aligned to zero downtime however for a large farm it is difficult logistically to achieve. &nbsp;Reduced functionality is providing your users with a read only farm during the time in which the patching of the primary farm is occurring. This requires the entire primary farm to be swung to another farm with its content DBs set to read only mode. Once patching on the primary farm is complete traffic is redirected back to the primary farm.</SPAN> </P>
<P><SPAN style="COLOR: #1f497d">Since we want to always keep our downtime window as small as possible we should always follow a good and well tested practice of upgrading a farm to ensure there are no surprises along the way that will impact our downtime. There are two phases of upgrade, laying down updated binaries and running psconfig. The second phase, running psconfig, is the one that is going to take the majority of the time and the time taken is directly proportional to the amount of site collections within the farm. Psconfig upgrades each content DB schema and in many installations this can take <EM>many</EM> hours to complete. We have found in our testing in many real world deployments that detaching all content DBs other than the CA content DB, running psconfig, and then attaching content DBs back can help reduce the amount of downtime needed when patching SharePoint. One myth that needs to be dispelled now; the reduction in downtime is not achieved because psconfig runs faster or gets better throughput when upgrading the Content DB. </SPAN></P>
<P><SPAN style="COLOR: #1f497d">As with most things in SharePoint there are rules around the DB Attach process:<BR>1. Only one Content DB can be attached to a farm at any one time.<BR>2. Once a Content DB has been attached to a farm all of its content is marked as updated and therefore will incur what is effectively a full crawl the first time search crawls this DB. <EM>More on this later.</EM></SPAN> </P>
<P>&nbsp;<SPAN style="COLOR: #1f497d">So taking into account rule #1 there are two ways we can optimize this process to reduce downtime, 1) Prioritize, attach content DBs that belong to Web Applications that are highly sensitive to downtime first and make them available, &nbsp;and 2)Use surrogates, build out additional worker farms which are used as surrogates to host attaching content DBs. &nbsp;&nbsp;</SPAN> </P>
<P>&nbsp;<SPAN style="COLOR: #1f497d">The process of using surrogate farms includes building one or more single server, throw away, farms that are running the same patch level you are upgrading your primary farm to. This process has been well documented <A class="" href="https://blogs.technet.com/corybu/archive/2007/08/02/high-performance-upgrades-for-moss-2007-wss-3-0-database-migration-methods.aspx" mce_href="https://blogs.technet.com/corybu/archive/2007/08/02/high-performance-upgrades-for-moss-2007-wss-3-0-database-migration-methods.aspx">here</A>. This approach however has downsides such as the need for additional hardware, the additional time and effort to build out these farms, and the need for your SQL server to be able to handle the additional load. &nbsp;</SPAN> </P>
<P>&nbsp;<SPAN style="COLOR: #1f497d">Let's take a look at the steps of a typical upgrade with DB prioritization:</SPAN> </P>
<P><SPAN style="COLOR: #1f497d">0. Announce and coordinate downtime with IT, users, etc.<BR>1. Take farm offline, typically you are pulling the WFEs out of a load balancer or for the case of reduced functionality, swinging DNS settings to another read only farm replica.<BR>2. Detach all content DBs from the farm.<BR>3. Run WSS and if applicable MOSS upgrade patches on each server and choosing &nbsp;to <STRONG>not</STRONG> run psconfig. You are only going to run psconfig once, <STRONG>not</STRONG> once for each upgrade package.<BR>4. After all servers have been patched run psconfig on the CA machine. The execution of psconfig will not take near as long because all the content DBs are detached.<BR>5. For each additional machine in the farm and one at a time run psconfig.<BR>6. At this point your farm, without any content DBs, is upgraded and only the content DBs require upgrade.<BR>7. Starting with the web application that is most critical to get back into production start attaching its content DB(s). Once complete put this Web Application back in the load balancer and notify everyone it is back online.<BR>8.Continue running through each additional Content DB until each is attached back into the farm.</SPAN> </P>
<P><SPAN style="COLOR: #1f497d">I have a tool that I will be releasing soon named CDBManager that will help with the DB prioritization method of upgrade, specifically it allows you to:</SPAN> </P>
<UL style="MARGIN-LEFT: 38pt">
<LI><SPAN style="COLOR: #1f497d">Mass DB detach all the content DBs in a farm</SPAN> </LI>
<LI><SPAN style="COLOR: #1f497d">Reorder content DBs by priority</SPAN> </LI>
<LI><SPAN style="COLOR: #1f497d">Automate the attaching of content DBs and provides ETA of when each DB will be complete (important because there is not a progress indicator otherwise)</SPAN> </LI>
<LI><SPAN style="COLOR: #1f497d">Manages the upgrade.log file by creating an upgrade.log file for each content DB attached. As you may know each time a Content DB is attached to a farm and upgraded a new upgrade log is either created or if one already exists it is appended too. The problem with this approach is that all your upgrade logging is in a single file and not split out by Content DB. CDBManager renames the upgrade.log file after each Content DB has completed attaching with the name of the Content DB. This makes it much easier to go back through each log and analyze what might have gone wrong within a certain Content DB on upgrade.</SPAN> </LI></UL>
<P><SPAN style="COLOR: #1f497d">I have a couple of large enterprise customers that are testing the tool now. Once we get past any breaking issues I publish the bits. </SPAN></P>
<P><SPAN style="COLOR: #1f497d">One additional point about the prioritization upgrade approach; should a content DB fail to attach along the way for whatever reason you should continue to DB Attach the remaining content DBs. While the upgrade is progressing along you now have the opportunity to investigate and mitigate the issues with the failed content DB in parallel to the upgrade and once ready retry the DB attach operation.</SPAN> </P>
<P>&nbsp;<SPAN style="COLOR: #1f497d">So time to revisit DB Attach rule #2. When a content DB is attached into a farm its ID is changed. This has the side effect of effectively marking each object within the content DB as changed. This means that when the crawler service hits this content DB, weather doing an incremental or a full crawl, it will effectively do a full crawl as it believes all the content has changed. The Infrastructure Update (IU) changes all of this and effectively takes this rule out of play. After installing the IU the Content DB is not longer changed. This means an incremental crawl after re-attaching a Content DB is really an incremental crawl. No more full crawls after detaching and attaching content DBs, yea! </SPAN></P>
<P><SPAN style="COLOR: #1f497d">The Infrastructure Update (IU) </SPAN><A class="" href="https://support.microsoft.com/kb/953749/" mce_href="https://support.microsoft.com/kb/953749/">KB article</A><SPAN style="COLOR: #1f497d"> also has this blurb:</SPAN> </P>
<P>&nbsp;<SPAN style="FONT-SIZE: 8pt; COLOR: black; FONT-FAMILY: Verdana">Improvements to the time that is required to update and upgrade Windows SharePoint Services sites.</SPAN> </P>
<P><SPAN style="COLOR: #1f497d">So what does this mean? Any fix before the IU psconfig updates each site collection in the farm by updating its build version to reflect the most recent value. After installing the IU we only hit site collections to update them if a schema object of the site collection needs to be updated, such as an update to the template schema. This type of update is far less frequently since hotfixes rarely do site collection schema updates (IU however does to support the new search features). The end result is that if a fix does not require a schema update psconfig does not go through each site collection and update the build number, so this will drastically reduce the amount of time necessary to perform the upgrade. </SPAN></P>
<P><SPAN style="COLOR: #1f497d">So there you have it, while we cannot upgrade a live farm we do have processes and available fixes that will move us closer to the nirvana of a zero downtime upgrade. </SPAN></P>
<P><SPAN style="COLOR: #1f497d">Happy upgrading!</SPAN></P>]]></content:encoded>
    </item>
    <item>
      <title>Where Did That AppPool Go?</title>
      <link>https://docs.microsoft.com/archive/blogs/toddca/where-did-that-apppool-go</link>
      <pubDate>Thu, 05 Jun 2008 14:36:00 GMT</pubDate>
      <dc:creator><![CDATA[Toddca]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/toddca/2008/06/05/where-did-that-apppool-go/</guid>
      <description><![CDATA[I am a big fan of anything that gives me more insight as to what is happening on my system. One such...]]></description>
      <content:encoded><![CDATA[<P><SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-bidi"><FONT color=#000000>I am a big fan of anything that gives me more insight as to what is happening on my system. One such IIS 6 tweak which I find is greatly overlooked is the additional AppPool logging you can get out of IIS 6. It blows me away that this was not "on" by default -- but that is another blog entry.</FONT></SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-bidi"><FONT color=#000000>The tweek involves modifying the metabase per </FONT></SPAN></SPAN><SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><A href="https://support.microsoft.com/kb/332088" mce_href="https://support.microsoft.com/kb/332088">https://support.microsoft.com/kb/332088</A>&nbsp;<FONT color=#000000>to turn on this additional logging at the AppPool. This KB has a command:</FONT></SPAN></P><SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">
<P class=list4 style="MARGIN: 0in 3.75pt 0pt"><SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'">cscript adsutil.vbs Set w3svc/AppPools/<B>DefaultAppPool</B>/LogEventOnRecycle 255<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></P></SPAN>
<P><SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT color=#000000>This turns the logging on for the DefaultAppPool however a more global approach, and one that would be useful esp.&nbsp;when you have more than one AppPool like us SharePoint guys is:</FONT></SPAN></P><SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">
<P class=list4 style="MARGIN: 0in 3.75pt 0pt"><SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'">cscript adsutil.vbs Set w3svc/AppPools/LogEventOnRecycle 255<o:p></o:p></SPAN></P></SPAN>
<P><SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT color=#000000>It goes without saying but after you set this you want to do some kind of monitoring for these events to get a since as to what is going on with your AppPools throughout the day.</FONT></SPAN></SPAN></P>]]></content:encoded>
    </item>
  </channel>
</rss>