<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>John F. Holliday</title>
	<atom:link href="http://www.sharepointarchitects.us/johnholliday/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sharepointarchitects.us/johnholliday</link>
	<description>Reflections on SharePoint, Consciousness and ECM.</description>
	<lastBuildDate>Thu, 01 Dec 2011 18:35:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Obama Orders Agencies to Improve Records Management Policies</title>
		<link>http://www.sharepointarchitects.us/johnholliday/post/2011/12/01/obama-orders-agencies-to-improve-records-management-policies/</link>
		<comments>http://www.sharepointarchitects.us/johnholliday/post/2011/12/01/obama-orders-agencies-to-improve-records-management-policies/#comments</comments>
		<pubDate>Thu, 01 Dec 2011 18:35:06 +0000</pubDate>
		<dc:creator>John Holliday</dc:creator>
				<category><![CDATA[Records Management]]></category>
		<category><![CDATA[Federal Agencies]]></category>
		<category><![CDATA[Government]]></category>

		<guid isPermaLink="false">http://www.sharepointarchitects.us/johnholliday/post/2011/12/01/obama-orders-agencies-to-improve-records-management-policies/</guid>
		<description><![CDATA[Looks like things are heating up in the government sector around ECM/RM.&#160; Should make for an interesting first quarter.
Reposted from Federal Times…
Agencies must deliver plans for modernizing their records management policies by late March, President Obama said in a Monday memorandum.
The memo urges officials to digitize records whenever possible but notes that greater use of [...]]]></description>
			<content:encoded><![CDATA[<p>Looks like things are heating up in the government sector around ECM/RM.&#160; Should make for an interesting first quarter.</p>
<p>Reposted from <a href="http://federaltimes.com/article/20111128/IT03/111280302/1001">Federal Times</a>…</p>
<blockquote><p>Agencies must deliver plans for modernizing their records management policies by late March, President Obama said in a Monday memorandum.</p>
<p>The memo urges officials to digitize records whenever possible but notes that greater use of electronic communications has &quot;radically increased&quot; both the amount and diversity of information that agencies must manage. Although that surge risks overwhelming agency systems, Obama said, technology &quot;can make these records less burdensome to manage and easier to use and share.&quot;</p>
<p>In their plans, agencies must describe how they will improve or maintain their records management programs, particularly in regard to email, social media and other electronic communications. They also have to explain how they will use cloud-based services and storage solutions, as well as spell out any gaps or provisions in existing laws or regulations that get in the way of better management. The Office of Management and Budget, National Archives and Records Administration, and Justice Department will use those reports to come up with a government-wide records management framework that is more efficient, maintains accountability by documenting agency actions and promotes &quot;appropriate&quot; public access to records, Obama said.</p>
<p>The initiative won praise from leaders of two watchdog groups, <a href="http://openthegovernment.org">OpenTheGovernment</a> and Citizens for Responsibility and Ethics in Washington. In a joint statement, the two organizations noted that 95 percent of agencies reported last year that they were at risk of losing electronic records. Obama&#8217;s memo &quot;puts in place a structure to begin addressing the problem&quot; they said, but cautioned that lack of money will be a major hurdle.</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.sharepointarchitects.us/johnholliday/post/2011/12/01/obama-orders-agencies-to-improve-records-management-policies/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Announcing the Great SharePoint Adventure Road Show</title>
		<link>http://www.sharepointarchitects.us/johnholliday/post/2011/11/29/announcing-the-great-sharepoint-adventure-road-show/</link>
		<comments>http://www.sharepointarchitects.us/johnholliday/post/2011/11/29/announcing-the-great-sharepoint-adventure-road-show/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 20:43:41 +0000</pubDate>
		<dc:creator>John Holliday</dc:creator>
				<category><![CDATA[SharePoint Development]]></category>
		<category><![CDATA[SharePoint Training]]></category>
		<category><![CDATA[Critical Path]]></category>

		<guid isPermaLink="false">http://www.sharepointarchitects.us/johnholliday/?p=74971959</guid>
		<description><![CDATA[Critical Path Training will be offering The Great SharePoint Adventure Roadshow, a condensed, 2-day version of their popular Great SharePoint Adventure developer deep dive class. Nearly 50% of the content for a fraction of the price.
This is a great alternative for folks who can&#8217;t be out of the office for a full week or want to see [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.criticalpathtraining.com"><img class="alignleft size-full wp-image-74971957" style="padding-right: 15px;" title="CriticalPathTraining" src="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/CriticalPathTraining.png" alt="" width="120" height="120" /></a><a title="Critical Path Training" href="http://www.criticalpathtraining.com" target="_blank">Critical Path Training</a> will be offering <a href="http://www.criticalpathtraining.com/Schedule/Pages/GreatSharePointAdventure2010Roadshow,BostonMA,February2012.aspx" target="_blank">The Great SharePoint Adventure Roadshow</a>, a condensed, 2-day version of their popular Great SharePoint Adventure developer deep dive class. Nearly 50% of the content for a fraction of the price.</p>
<p>This is a great alternative for folks who can&#8217;t be out of the office for a full week or want to see what SharePoint development is all about. The first stop will be February 15-16, 2012 at the Museum of Science in downtown Boston, MA.</p>
<p>Check it out here:<br />
<a href="http://www.criticalpathtraining.com/Schedule/Pages/GreatSharePointAdventure2010Roadshow,BostonMA,February2012.aspx">Critical Path Training &#8211; SharePoint Training &#8211; Great SharePoint Adventure 2010 Roadshow, Boston MA, February 2012</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sharepointarchitects.us/johnholliday/post/2011/11/29/announcing-the-great-sharepoint-adventure-road-show/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Searching for In-Place Records using CAML</title>
		<link>http://www.sharepointarchitects.us/johnholliday/post/2011/10/31/searching-for-in-place-records-using-caml/</link>
		<comments>http://www.sharepointarchitects.us/johnholliday/post/2011/10/31/searching-for-in-place-records-using-caml/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 00:56:07 +0000</pubDate>
		<dc:creator>John Holliday</dc:creator>
				<category><![CDATA[CAML]]></category>
		<category><![CDATA[Records Management]]></category>
		<category><![CDATA[SharePoint Search]]></category>
		<category><![CDATA[In-Place Records]]></category>
		<category><![CDATA[Search]]></category>

		<guid isPermaLink="false">http://www.sharepointarchitects.us/johnholliday/post/2011/10/31/searching-for-in-place-records-using-caml/</guid>
		<description><![CDATA[Just a quick note to all you records management junkies out there.&#160; Here’s a question I’m seeing a lot of.&#160; “Can I write a CAML query to locate all of the documents that have been declared as in-place records?”
The answer is yes.&#160; It’s actually quite simple.&#160; There is a new field called “Declared Record” that [...]]]></description>
			<content:encoded><![CDATA[<p>Just a quick note to all you records management junkies out there.&#160; Here’s a question I’m seeing a lot of.&#160; “Can I write a CAML query to locate all of the documents that have been declared as in-place records?”</p>
<p>The answer is yes.&#160; It’s actually quite simple.&#160; There is a new field called “Declared Record” that holds the date on which an item was declared as a record.&#160; If that field is null, then the item was not declared.&#160; The only trick is that you have to use the internal field name, which is “<strong>_vti_ItemDeclaredRecord</strong>”.</p>
<p>Here is a screenshot of a document library containing expense reports for an accounting department.&#160; Notice that there are 2 records declared, the “Automobile Expenses” and “Expense Claim Form” documents.</p>
<p><a href="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/SNAGHTML6e56af6.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML6e56af6" border="0" alt="SNAGHTML6e56af6" src="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/SNAGHTML6e56af6_thumb.png" width="597" height="480" /></a></p>
<p>Here is another shot of a simple query in <a href="http://www.u2u.be/res/Tools/CamlQueryBuilder.aspx" target="_blank">CAML Query Builder</a> that finds all of the declared record items in the library:</p>
<p><a href="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/image5.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/image_thumb3.png" width="560" height="484" /></a></p>
<p>Finally, here is the result of executing the query:</p>
<p><a href="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/image6.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/image_thumb4.png" width="593" height="484" /></a></p>
<p>So, there you have it.&#160; Easy as pie.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sharepointarchitects.us/johnholliday/post/2011/10/31/searching-for-in-place-records-using-caml/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>GimmalSoft Achieves (DoD) 5015.2 Certification</title>
		<link>http://www.sharepointarchitects.us/johnholliday/post/2011/09/29/gimmalsoft-achieves-dod-5015-2-certification/</link>
		<comments>http://www.sharepointarchitects.us/johnholliday/post/2011/09/29/gimmalsoft-achieves-dod-5015-2-certification/#comments</comments>
		<pubDate>Thu, 29 Sep 2011 16:25:42 +0000</pubDate>
		<dc:creator>John Holliday</dc:creator>
				<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Document Management]]></category>
		<category><![CDATA[Records Management]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[Certification]]></category>
		<category><![CDATA[Compliance]]></category>
		<category><![CDATA[DoD 5015.2]]></category>
		<category><![CDATA[GimmalSoft]]></category>

		<guid isPermaLink="false">http://www.sharepointarchitects.us/johnholliday/post/2011/09/29/gimmalsoft-achieves-dod-5015-2-certification/</guid>
		<description><![CDATA[After a long and arduous process, the GimmalSoft Compliance Suite has finally received the coveted Department of Defense 5015.02 certification, making it the only certified RMS built on the SharePoint 2010 platform.&#160; What does this mean for the rest of us?
Well, for one thing, it means that companies will no longer have to purchase multiple [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/GimmalSoft-ComplianceSuite.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 16px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="GimmalSoft ComplianceSuite" border="0" alt="GimmalSoft ComplianceSuite" align="left" src="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/GimmalSoft-ComplianceSuite_thumb.png" width="129" height="164" /></a>After a long and arduous process, the <a href="http://www.gimmalsoft.com" target="_blank">GimmalSoft</a> <em>Compliance Suite</em> has finally received the coveted Department of Defense 5015.02 certification, making it the only certified RMS built on the SharePoint 2010 platform.&#160; What does this mean for the rest of us?</p>
<p>Well, for one thing, it means that companies will no longer have to purchase multiple systems in order to meet the de-facto compliance standard.&#160; This could be a huge coup for GimmalSoft, because it will now enable records managers to work directly with work-in-progress documents that are stored within SharePoint instead of having to manage records separately.</p>
<p>As a point of reference, I have seen the GimmalSoft tools, and I have to say they are impressive.&#160; Definitely worth considering, just based on ease of use and the core functionality they provide (<em>stay tuned for an upcoming series of posts</em>).&#160; From what I’ve seen so far, the tools take full advantage of the SharePoint user experience paradigm, which is saying a lot considering some of the other tools that are out there.&#160; </p>
<p>With (DoD) 5015.02 certification under their belt, GimmalSoft is now poised to usher in a new era in the RM tools market, so this promises to be an exciting year in the records management space.&#160; You can read the press release <a href="http://www.gimmalsoft.com/NewsAndEvents/News/Pages/GimmalSoft-Compliance-Suite-for-Microsoft-SharePoint-2010-DoD-5015.2-Certified.aspx" target="_blank">here</a>.&#160; For a more in-depth review of the GimmalSoft Compliance Suite, check out this piece by <a href="http://www.rimtech.ca/GimmalSoft.html" target="_blank">Bruce Miller at RIMtech</a>.    </p>
]]></content:encoded>
			<wfw:commentRss>http://www.sharepointarchitects.us/johnholliday/post/2011/09/29/gimmalsoft-achieves-dod-5015-2-certification/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Unregistering Custom Record Declaration Handlers</title>
		<link>http://www.sharepointarchitects.us/johnholliday/post/2011/09/14/unregistering-custom-record-declaration-handlers/</link>
		<comments>http://www.sharepointarchitects.us/johnholliday/post/2011/09/14/unregistering-custom-record-declaration-handlers/#comments</comments>
		<pubDate>Thu, 15 Sep 2011 00:53:10 +0000</pubDate>
		<dc:creator>John Holliday</dc:creator>
				<category><![CDATA[Records Management]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[SharePoint Development]]></category>
		<category><![CDATA[In-Place Records]]></category>

		<guid isPermaLink="false">http://www.sharepointarchitects.us/johnholliday/post/2011/09/14/unregistering-custom-record-declaration-handlers/</guid>
		<description><![CDATA[As you know, using the SharePoint 2010 server object model, you can install your own custom record declaration handlers.&#160; Didn&#8217;t know that?&#160; Oh?&#160; You mean you haven&#8217;t already setup your site to keep track of every time a record is declared or undeclared?&#160; Well, you&#8217;re in for a treat!&#160; But you&#8217;ll have a wait a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/image4.png"><img style="background-image: none; border-right-width: 0px; margin: 0px 20px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/image_thumb2.png" width="240" height="136" /></a>As you know, using the SharePoint 2010 server object model, you can install your own custom record declaration handlers.&#160; Didn&#8217;t know that?&#160; Oh?&#160; You mean you haven&#8217;t already setup your site to keep track of every time a record is declared or undeclared?&#160; Well, you&#8217;re in for a treat!&#160; But you&#8217;ll have a wait a bit, &#8217;cause I&#8217;m busy building demos for my upcoming sessions at the <a href="http://mssharepointconference.com" target="_blank">Great SharePoint Conference of 2011</a>.&#160; After that, I&#8217;ll be posting a series of articles that will go into custom record declaration handlers in greater detail.</p>
<p>In the meantime, I wanted to alert you to a bug in the SharePoint OM that I found along the way that might be stumping some of the more adventurous among you.</p>
<h3 align="left">THE PROBLEM</h3>
<p>In a nutshell &#8211; <u>there is no way to remove a custom record declaration handler for a site collection via the prescribed methods available in the SharePoint object model</u>.&#160; </p>
<p>For instance, if you create a site-scoped feature that implements a custom record declaration handler and then registers it in your <strong>FeatureActivated</strong> event receiver by calling <strong>RegisterCustomCodeForRecordDeclaration</strong>(), you cannot then unregister your handler when the feature is deactivated by calling a corresponding Unregister method.&#160; Why?&#160; Because that method doesn&#8217;t exist.&#160; The way I believe it was <em>supposed</em> to work was that you&#8217;d call the same method again from your <strong>FeatureDeactivating </strong>override, but passing empty strings for the <em>assemblyName</em> and <em>className</em> parameters.&#160; </p>
<p>The problem is that this method has a bug that prevents it from properly unregistering your code.&#160; The end result is that your custom declaration handler method still continues to be called even after your feature has been deactivated, <font style="background-color: #ffff00">potentially causing ALL future attempts to declare or undeclare records in the site collection to fail</font>.</p>
<p>As an example, consider the following code:</p>
<pre class="code"><span style="color: blue">using </span>Microsoft.Office.RecordsManagement.RecordsRepository;
<span style="color: blue">using </span>Microsoft.SharePoint;

<span style="color: blue">namespace </span>SharePointArchitects.RecordsManagement
{
    <span style="color: blue">public class </span><span style="color: #2b91af">MyDeclarationHandler </span>: <span style="color: #2b91af">IRecordDeclarationHandler
    </span>{
        <span style="color: blue">public static void </span>Register(<span style="color: #2b91af">SPSite </span>site)
        {
            <span style="color: #2b91af">Records</span>.RegisterCustomCodeForRecordDeclaration(site,
                <span style="color: blue">typeof</span>(<span style="color: #2b91af">MyDeclarationHandler</span>).Assembly.FullName,
                <span style="color: blue">typeof</span>(<span style="color: #2b91af">MyDeclarationHandler</span>).FullName);
        }

        <span style="color: green">// Called whenever a record is declared.
        </span><span style="color: blue">public </span><span style="color: #2b91af">RecordOperationResult </span>OnDeclare(<span style="color: #2b91af">SPListItem </span>item)
        {
            <span style="color: #2b91af">RecordOperationResult </span>result
                = <span style="color: #2b91af">RecordOperationResult</span>.ContinueRecordProcessing;
            <span style="color: green">// ... custom code ...
            </span><span style="color: blue">return </span>result;
        }
    }
}</pre>
<p>&#160;</p>
<p>Here we have a typical implementation for a custom record declaration handler that exposes a static method to perform the registration of the class into a specified site collection by calling the RegisterCustomCodeForRecordDeclaration method.&#160; As you can see, it passes the SPSite object along with the assembly and class name.&#160; </p>
<p>Since there is no “UnregisterCustomCodeForRecordDeclaration” method provided by the SDK, you might assume (wrongly) that in order to remove the registration of your class, you would simply call the same registration method again with empty strings or null values for the assembly name and class name.&#160; Seems reasonable, right?&#160; Not so fast.&#160; </p>
<p>Here is what happens:</p>
<ul>
<li>Passing null for the ‘site’ parameter throws an ArgumentNullException because custom record declaration handlers are always installed at the site collection level.&#160;&#160; Therefore, it makes sense that the SPSite parameter would be required. </li>
<li>Passing empty strings for either the assembly or class name causes <strong>ALL</strong> subsequent attempts to declare or undeclare records anywhere within the site collection to fail. </li>
</ul>
<p>You heard me.</p>
<p>Users will now open the “compliance details” dialog and see the familiar “Declare as record” link.&#160; They will click it and be prompted to confirm the declaration, and then nothing will happen.&#160; They will do this repeatedly until they get tired, and then someone will call you.&#160; They won’t be happy.</p>
<p>So what to do?&#160; Digging a little deeper into the code reveals a minor bug in the RegisterCustomCodeForDeclaration() method.</p>
<h3>THE BUG</h3>
<p>An internal method is called during the record declaration process to retrieve the assembly and class name of any record declaration handler that may (or may not) be associated with the site collection.&#160; It correctly checks whether the root web property bag contains an entry for the property &quot;<strong>ecm_SiteCustomRecordsClass</strong>&quot;.&#160; It then checks whether that value is null or empty.&#160; If not, then it attempts to instantiate the declaration handler class specified.&#160; If it’s empty, then it goes along its merry way declaring the document as a record. </p>
<p>&#160; <br />However, there is a bug in the &quot;RegisterCustomCodeForRecordDeclaration&quot; method.&#160; It ALWAYS assigns the &quot;<strong>ecm_SiteCustomRecordsClass</strong>&quot; property to a non-null value, even if the assemblyName and className parameters retrieved from the property bag are empty.&#160; This is because it inserts a &#8216;|&#8217; delimiter between the <em>assemblyName </em>and <em>className </em>property values<em>.</em>&#160; Thus, if you pass empty strings for the assembly and class name parameters, the property is set to the value &quot;|&quot;, resulting in an exception when the GetClassForCustomRecordsCode method tries to instantiate the class.&#160; This in turn causes all subsequent attempts to declare or undeclare records in the site to fail. </p>
<h3>THE WORK-AROUND</h3>
<p>Until there is a fix provided by Microsoft, the only work-around is to manually remove the “ecm_SiteCustomRecordsClass” property from the root web of the site collection using the hard-coded property name as shown below.&#160; </p>
<p><strong>[ Note that this code may break if the property name ever changes. ]</strong></p>
<pre class="code"><span style="color: blue">public static void </span>Unregister(<span style="color: #2b91af">SPSite </span>site)
{
    <span style="color: green">// NOTE: There is no 'unregister' API call.

    // The only way to unregister the handler is to clear the
    // property &quot;ecm_SiteCustomRecordsClass&quot; in the root web
    // of the site.
    </span><span style="color: blue">const string </span>key = <span style="color: #a31515">&quot;ecm_SiteCustomRecordsClass&quot;</span>;
    <span style="color: blue">if </span>(site.RootWeb.Properties.ContainsKey(key))
    {
        site.RootWeb.Properties[key] = <span style="color: #a31515">&quot;&quot;</span>;
        site.RootWeb.Properties.Update();
    }
}</pre>
<p>&#160;</p>
<p>With these routines in place, you can easily register and unregister your custom record declaration handler from the Feature receiver, and all is well in SharePoint land.</p>
<pre class="code"><span style="color: blue">using </span>System;
<span style="color: blue">using </span>System.Runtime.InteropServices;
<span style="color: blue">using </span>Microsoft.SharePoint;

<span style="color: blue">namespace </span>SharePointArchitects.RecordsManagement
{
    [<span style="color: #2b91af">Guid</span>(<span style="color: #a31515">&quot;2a4480d1-a985-45ea-a297-47c5461d79c3&quot;</span>)]
    <span style="color: blue">public class </span><span style="color: #2b91af">RecordTrackerEventReceiver </span>: <span style="color: #2b91af">SPFeatureReceiver
    </span>{
        <span style="color: blue">public override void </span>FeatureActivated(<span style="color: #2b91af">SPFeatureReceiverProperties </span>properties)
        {
            <span style="color: #2b91af">SPSite </span>site = properties.Feature.Parent <span style="color: blue">as </span><span style="color: #2b91af">SPSite</span>;
            <span style="color: #2b91af">MyDeclarationHandler</span>.Register(site);
        }

        <span style="color: blue">public override void </span>FeatureDeactivating(<span style="color: #2b91af">SPFeatureReceiverProperties </span>properties)
        {
            <span style="color: #2b91af">SPSite </span>site = properties.Feature.Parent <span style="color: blue">as </span><span style="color: #2b91af">SPSite</span>;
            <span style="color: #2b91af">MyDeclarationHandler</span>.Unregister(site);
        }
    }
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.sharepointarchitects.us/johnholliday/post/2011/09/14/unregistering-custom-record-declaration-handlers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>European Best Practices Conference = Great!</title>
		<link>http://www.sharepointarchitects.us/johnholliday/post/2011/04/17/european-best-practices-conference-great/</link>
		<comments>http://www.sharepointarchitects.us/johnholliday/post/2011/04/17/european-best-practices-conference-great/#comments</comments>
		<pubDate>Mon, 18 Apr 2011 01:17:13 +0000</pubDate>
		<dc:creator>John Holliday</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Records Management]]></category>
		<category><![CDATA[SharePoint 2010]]></category>

		<guid isPermaLink="false">http://www.sharepointarchitects.us/johnholliday/?p=74971872</guid>
		<description><![CDATA[Well, I&#8217;m back from a truly wonderful week in London attending and speaking at the European Best Practices Conference, and I have to say, there is something special about this show.  I had the privilege of speaking 2 years ago, and I was impressed then by the quality of the event.  But it has [...]]]></description>
			<content:encoded><![CDATA[<p>Well, I&#8217;m back from a truly wonderful week in London attending and speaking at the European Best Practices Conference, and I have to say, there is something special about this show.  I had the privilege of speaking 2 years ago, and I was impressed then by the quality of the event.  But it has only gotten better.  Probably the best way to get a sense for the excitement surrounding this event is to view this quick montage:</p>
<p><iframe title="VideoBam video player" type="text/html" frameborder="0" scrolling="no" width="480" height="325" src="http://videobam.com/widget/AYpfA" allowFullScreen></iframe></p>
<p>I gave 2 talks, which I have uploaded to my SlideShare account and will post links to shortly.</p>
<p>Hats off to Steve Smith and all the great folks at Combined Knowledge.  Guess I&#8217;ll have to start saving up for next year.  What a blast!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sharepointarchitects.us/johnholliday/post/2011/04/17/european-best-practices-conference-great/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upcoming SharePoint Conference Dates</title>
		<link>http://www.sharepointarchitects.us/johnholliday/post/2011/03/16/upcoming-sharepoint-conference-dates/</link>
		<comments>http://www.sharepointarchitects.us/johnholliday/post/2011/03/16/upcoming-sharepoint-conference-dates/#comments</comments>
		<pubDate>Wed, 16 Mar 2011 22:11:56 +0000</pubDate>
		<dc:creator>John Holliday</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Records Management]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[SharePoint Best Practices]]></category>
		<category><![CDATA[SharePoint Conferences]]></category>

		<guid isPermaLink="false">http://www.sharepointarchitects.us/johnholliday/post/2011/03/16/upcoming-sharepoint-conference-dates/</guid>
		<description><![CDATA[Conference season is starting to heat up again.&#160; First up is the SharePoint Connections conference in Orlando, March 27-29.&#160; I’ll be giving three talks:

I&#8217;ll also be speaking at the upcoming SharePoint Best Practices conference in London, April 11-13.&#160; I had the distinct privilege of speaking at the London conference a couple of years back and [...]]]></description>
			<content:encoded><![CDATA[<p>Conference season is starting to heat up again.&#160; First up is the <a href="http://www.devconnections.com/conf/default.aspx?s=162" target="_blank">SharePoint Connections conference in Orlando, March 27-29</a>.&#160; I’ll be giving three talks:</p>
<p><a href="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/BannerAgenda.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Banner Agenda" border="0" alt="Banner Agenda" src="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/BannerAgenda_thumb.png" width="512" height="128" /></a></p>
<p>I&#8217;ll also be speaking at the upcoming <a href="http://www.sharepointbestpractices.co.uk/" target="_blank">SharePoint Best Practices conference in London, April 11-13</a>.&#160; I had the distinct privilege of speaking at the London conference a couple of years back and it was truly a great conference all around.&#160; This year, I’m giving two talks:</p>
<p><a href="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/BannerAgenda1.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Banner Agenda" border="0" alt="Banner Agenda" src="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/BannerAgenda_thumb1.png" width="512" height="128" /></a></p>
<p>After London, I head straight over to Italy for the <a href="http://www.sharepointconference.it/events/2011/default.aspx" target="_blank">Microsoft SharePoint &amp; Office Conference in Milan, April 19-21</a>.&#160; This will be my first time speaking in Milan, and I&#8217;m looking forward to making lots of new friends, although my Italian is admittedly pretty lame.</p>
<p><a href="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/BannerAgenda2.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Banner Agenda" border="0" alt="Banner Agenda" src="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/BannerAgenda_thumb2.png" width="512" height="128" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sharepointarchitects.us/johnholliday/post/2011/03/16/upcoming-sharepoint-conference-dates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CAML.NET Intellisense &#8211; Schema Update</title>
		<link>http://www.sharepointarchitects.us/johnholliday/post/2010/11/18/caml-net-intellisense-schema-update/</link>
		<comments>http://www.sharepointarchitects.us/johnholliday/post/2010/11/18/caml-net-intellisense-schema-update/#comments</comments>
		<pubDate>Fri, 19 Nov 2010 00:36:00 +0000</pubDate>
		<dc:creator>John Holliday</dc:creator>
				<category><![CDATA[CAML]]></category>
		<category><![CDATA[CAML.NET]]></category>
		<category><![CDATA[SharePoint Development]]></category>

		<guid isPermaLink="false">http://www.sharepointarchitects.us/johnholliday/post/2010/11/18/caml-net-intellisense-schema-update/</guid>
		<description><![CDATA[One of the neat things about the latest version of CAML.NET Intellisense is that it automatically updates itself whenever a change is made to the published schema.   The updated schema file is downloaded and installed the next time Visual Studio is started, so there is nothing you have to do, and you don’t have to [...]]]></description>
			<content:encoded><![CDATA[<p>One of the neat things about the latest version of CAML.NET Intellisense is that it automatically updates itself whenever a change is made to the published schema.   The updated schema file is downloaded and installed the next time Visual Studio is started, so there is nothing you have to do, and you don’t have to uninstall and reinstall the extension to see the updates.</p>
<p>&lt;<span style="color: #ff0000;">shameless plug</span>&gt;If you really like this tool, then how about a little feedback?  Just click the “<strong>Rate/Review</strong>” link on the <a href="http://visualstudiogallery.msdn.microsoft.com/en-us/15055544-fda0-42db-a603-6dc32ed26fde">Visual Studio Gallery Page</a> and give it the thumbs up.  Better yet – go ahead and write a quick review!  And if you have any thoughts about improving the schema, then drop me a line at john@johnholliday.net.<a href="http://sharepointarchitects.us/caml.net/forums</shameless">&lt;/<span style="color: #ff0000;">shameless</span> plug</a>&gt;</p>
<p>For your coding pleasure, the following updates have now been incorporated into the <a href="http://visualstudiogallery.msdn.microsoft.com/en-us/15055544-fda0-42db-a603-6dc32ed26fde">CAML.NET Intellisense</a> schema:</p>
<ul>
<li><strong>Added Feature Identifier Lookups </strong></li>
</ul>
<p>There are many scenarios that require you to enter the GUID of an existing feature, but finding the correct identifier can waste a lot of time.  For example, setting up feature activation dependencies requires you to enter the correct feature id.   The CAML.NET schema now includes all of the built-in feature identifiers with a description of each one as shown in the following screenshot.</p>
<p><a href="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/FeatureIdentifiers.png"><img style="display: inline; border-width: 0px;" title="FeatureIdentifiers" src="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/FeatureIdentifiers_thumb.png" alt="FeatureIdentifiers" width="500" height="230" border="0" /></a></p>
<p><em><strong>Note: The features are alphabetized by name (not by GUID), so you have to scroll through the list (just use the arrow keys) to find the one you want.</strong></em></p>
<ul>
<li><strong>Added Column Identifier Lookups </strong></li>
</ul>
<p>Similarly, when declaring a content type and you want to use one of the built-in columns,  you need to know the column GUID in order to reference it.  The schema now includes all of the built-in field identifiers as shown below.</p>
<p><a href="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/ColumnIdentifiers.png"><img style="display: inline; border-width: 0px;" title="ColumnIdentifiers" src="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/ColumnIdentifiers_thumb.png" alt="ColumnIdentifiers" width="500" height="231" border="0" /></a></p>
<ul>
<li><strong>Fixed the <em>SecurityBits</em> Enumeration </strong></li>
</ul>
<p>The SecurityBits attribute should be a two digit string to determine read/write access.  The schema has been updated so that the enumeration includes each valid combination of digits (11, 12, 14, 21, 22, 24).</p>
<ul>
<li><strong>Modified the <em>UpgradeActions </em>Element</strong></li>
</ul>
<p>Thanks to <a title="Chris O'Brien - SharePoint Nuts and Bolts" href="http://www.sharepointnutsandbolts.com/">Chris O’Brien</a> for providing updated documentation for the Feature Upgrade schema.  And be sure to check out his outstanding <a title="Chris O'Brien on SharePoint Feature Upgrades" href="http://www.sharepointnutsandbolts.com/2010/06/feature-upgrade-part-1-fundamentals.html">5-part blog series</a> on Feature upgrades.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sharepointarchitects.us/johnholliday/post/2010/11/18/caml-net-intellisense-schema-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CAML.NET Intellisense for SharePoint 2010</title>
		<link>http://www.sharepointarchitects.us/johnholliday/post/2010/11/03/caml-net-intellisense-for-sharepoint-2010/</link>
		<comments>http://www.sharepointarchitects.us/johnholliday/post/2010/11/03/caml-net-intellisense-for-sharepoint-2010/#comments</comments>
		<pubDate>Thu, 04 Nov 2010 01:56:00 +0000</pubDate>
		<dc:creator>John Holliday</dc:creator>
				<category><![CDATA[CAML]]></category>
		<category><![CDATA[CAML.NET]]></category>
		<category><![CDATA[SharePoint Development]]></category>
		<category><![CDATA[Intellisense]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[Visual Studio 2010]]></category>

		<guid isPermaLink="false">http://www.sharepointarchitects.us/johnholliday/post/2010/11/03/caml-net-intellisense-for-sharepoint-2010/</guid>
		<description><![CDATA[Well, I finally gone and done it!   The CAML.NET IntelliSense Extension for Visual Studio 2010 is finally out in the wild, so have at it you crazy SharePoint devheads!
For those of you already using the SharePoint 2007 version, you know the basic idea.  Extend the default CAML schema files with detailed annotations imported from the [...]]]></description>
			<content:encoded><![CDATA[<p><a title="CAML.NET Intellisense for SharePoint 2010" href="http://visualstudiogallery.msdn.microsoft.com/en-us/15055544-fda0-42db-a603-6dc32ed26fde"><img style="margin: 5px 20px 5px 5px; float: left; border-width: 0px;" title="camel" src="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/camel.png" alt="camel" width="80" height="80" align="left" border="0" /></a>Well, I finally gone and done it!   The <a href="http://visualstudiogallery.msdn.microsoft.com/en-us/15055544-fda0-42db-a603-6dc32ed26fde"><strong>CAML.NET IntelliSense</strong> <strong>Extension for</strong> <strong>Visual Studio 2010</strong></a> is finally out in the wild, so have at it you crazy SharePoint devheads!</p>
<p>For those of you already using the SharePoint 2007 version, you know the basic idea.  Extend the default CAML schema files with detailed annotations imported from the SharePoint SDK documentation so you get more information at your fingertips while editing CAML files.</p>
<p>But there were limitations on the amount of information you could get to show up in the Visual Studio 2008 IntelliSense tooltips.  I really wanted to include <span style="text-decoration: underline;">rich HTML</span> with links and formatted scrolling text so you could basically have as much information as you need right there at your fingertips while coding.  So much better than interrupting your train of thought to go browsing through the online docs, right?</p>
<p>Enter <strong>Visual Studio 2010</strong> and the simply <span style="text-decoration: underline;">wonderful</span> Extension Manager.  I mean, this stuff is so cool it makes you want to quit fooling around with SharePoint and switch over to developing Visual Studio extensions full time.  (… NOT!)  But seriously, the <strong>VSIX</strong> framework really is kind of cool.  Combine that with <strong>WPF</strong> and you’ve got the makings of a really powerful tool for editing CAML files.</p>
<p>So, for the last 6 months or so, I’ve been working on an updated version that would take full advantage of the VSIX framework.  Here are the main features:</p>
<ul>
<li>Extends the default schema files with <strong>detailed annotations</strong> imported directly from the SharePoint SDK documentation.  This is similar to the 2007 version, but way cooler.</li>
<li>Adds a custom <strong>WPF IntelliSense Presenter</strong> to the Visual Studio environment for a <span style="text-decoration: underline;">greatly</span> enhanced developer experience.</li>
<li>Automatically detects and downloads <strong>schema updates</strong> so you are always working with the most current information available.</li>
<li>Links directly to the <strong>online SDK documentation</strong> for the currently visible element, so you can “drill down” into the documentation with a single click.  If no documentation link is available, it does a Bing search for the highlighted topic, which opens in the Visual Studio web browser.</li>
</ul>
<p>You can download it directly from the Visual Studio Gallery on MSDN <a href="http://visualstudiogallery.msdn.microsoft.com/en-us/15055544-fda0-42db-a603-6dc32ed26fde">here</a>.</p>
<p><strong>Annotated Schemas for Richer Intellisense</strong></p>
<p>The main idea behind <strong>CAML.NET Intellisense</strong> is to extend the core WSS schemas in two ways:</p>
<ol type="1">
<li>Add as much information as possible about each element and attribute using <strong>xs:annotation</strong> elements so that it pops up in context while editing; and</li>
<li>Identify and replace <strong>xs:string</strong> types in the schema with enumerated types so that the valid values for each attribute also popup in context while editing.</li>
</ol>
<p>For example, using the out-of-the-box WSS schema that ships with SharePoint 2010, you get a drop-down like the following when editing a <strong>Feature</strong> element:</p>
<p><img title="Default Intellisense" src="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/DefaultIntellisense2.png" alt="Rudimentary Intellisense for CAML editing" width="430" height="241" /></p>
<p>That’s better than nothing, of course, but it doesn’t say anything about what each Feature attribute is for, so unless you’re already familiar with it, you’d have to refer back to the SDK either online or in the CHM file. Kind of a drag, since you’ve got the list of valid attributes right in front of you. If you’re like most developers, this can be a <strong>real distraction </strong>because you tend to get lost in the details while searching for the information online when you should be busy coding your solution.</p>
<p>Instead, by using the annotated WSS schema provided by <strong>CAML.NET Intellisense</strong>, you can see the information you need right there in context. You only have to refer to the SDK documentation when you really need to learn more about the topic. Most of the time, you just need a hint, which is what Intellisense is all about, right?</p>
<p><strong>New Enhanced IntelliSense Presenter</strong></p>
<p>With all of the great new WPF-based enhancements that Microsoft has added to the Visual Studio 2010 user experience, why not take advantage of the improved extensibility layer and add a custom IntelliSense Presenter just for SharePoint? After all, some of the SDK descriptions of CAML elements are rather lengthy and get kind of hard to read in just a single line of text.</p>
<p>The <strong>CAML.NET Intellisense Presenter</strong> gives you a nifty way to get all that WPF goodness right where you need it most. Here’s an example of what you get while adding a <strong>FieldRef</strong> element to a <strong>ContentType</strong>:</p>
<p><img title="FieldRef Element" src="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/FieldRef.png" alt="Editing a FieldRef Element" width="640" height="426" /></p>
<p><strong>Extending the Core Schemas with Enumerated Types</strong></p>
<p>In addition to annotating the schemas with the corresponding SDK documentation for each element, we can go one step further and change the plain vanilla <strong>xs:string</strong> types to custom enumerated types so we get the list of valid choices for the attribute values. This comes in very handy and also helps to eliminate those nasty little typos that can be *<strong>really</strong>* hard to find (and the SharePoint CAML gets mighty snippy about).</p>
<p>There are lots of places in the SDK documentation where the expected attribute values are listed in the description, but are not enumerated in the schema. This again means that you’d have to go digging through the documentation to discover what SharePoint expects the attribute values to be. This can be an enormous waste of time – even if you have a pretty good idea of what the values are. Who can keep all that detail in their head?</p>
<p>So, <strong>CAML.NET Intellisense</strong> enumerates as many attribute values as possible so they are available at your fingertips when you need them. Each enumeration is also annotated, so you get contextual help for the available values.</p>
<p>Here’s another example that shows the enumeration of list template types when adding a <strong>ListInstance</strong> element to a <strong>Feature</strong>. This can be a huge time saver! How many times have you had to hunt down the table of available list template type identifiers?</p>
<p><img title="ListTemplateTypeEnum" src="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/ListTemplateTypeEnum1.png" alt="ListTemplateTypeEnum" width="640" height="326" /></p>
<p><strong>Link Back to the SDK Whenever You Need To</strong></p>
<p>Microsoft has invested heavily in new and improved online SDK documentation, so I thought why not link back directly to the SDK so you can drill down whenever you need to? Sometimes you just need a little hint, but at other times, you need more detail. <strong>CAML.NET Intellisense</strong> gives you the best of both worlds. Simply click the magnifying glass icon. If there is an SDK topic for the current item, it is displayed in the Web Browser tool window. If not, then it executes a web search for more information about the topic being displayed.</p>
<p><img title="MSDN Search" src="http://www.sharepointarchitects.us/johnholliday/wp-content/uploads/MSDN-Search2.png" alt="MSDN Search" width="515" height="150" /></p>
<p><strong>Stay Up To Date on the Latest Best Practices</strong></p>
<p>As we all know, things change fast in our industry.  There are always new ideas, new approaches to stay on top of, new techniques for dealing with the many issues that can arise unexpectedly.</p>
<p>I pondered quite a bit on this one, but I felt it was very important to have a way for the extension to update itself automatically whenever new “best practices” become widely accepted.  Also, the MSDN documentation is extensible with community content.  Some of that content helps to clarify and add critical detail for various CAML tags and attributes.  I wanted a reliable way to make that information show up automatically <strong><span style="text-decoration: underline;">in context</span></strong>, so that SharePoint developers don’t have to go looking for it.</p>
<p>With the extension installed, the customized SharePoint schema files are updated automatically (if a new version is available) whenever you startup the Visual Studio environment.   That way the schema authors (myself and a few dedicated MVPs) can regularly scan the SharePoint SDK and online SharePoint community resources and push new information out through the schema file.  This makes it easier for you to find the information you need, and puts it literally right at your fingertips.</p>
<p><strong><a href="http://visualstudiogallery.msdn.microsoft.com/en-us/15055544-fda0-42db-a603-6dc32ed26fde">Available Now from the Visual Studio Gallery</a></strong></p>
<p>You can download the new version directly from the <a href="http://visualstudiogallery.msdn.microsoft.com/en-us/15055544-fda0-42db-a603-6dc32ed26fde">Visual Studio Gallery on MSDN</a>.</p>
<p>Best of all, it’s free.  Free as the desert sand!  So what are you waiting for?  Get ready to ride!  Ride that CAML!  Yeah!</p>
<p>Sorry.</p>
<p>I’m just so excited it’s finally out there.</p>
<p>As always, your comments are welcome.</p>
<p>Faster.  Better.  Like a dromedary!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sharepointarchitects.us/johnholliday/post/2010/11/03/caml-net-intellisense-for-sharepoint-2010/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Best Practices and a Bit of Poetry</title>
		<link>http://www.sharepointarchitects.us/johnholliday/post/2010/08/25/best-practices-and-a-bit-of-poetry/</link>
		<comments>http://www.sharepointarchitects.us/johnholliday/post/2010/08/25/best-practices-and-a-bit-of-poetry/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 02:30:09 +0000</pubDate>
		<dc:creator>John Holliday</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.sharepointarchitects.us/johnholliday/post/2010/08/25/best-practices-and-a-bit-of-poetry/</guid>
		<description><![CDATA[So, I’m preparing for my first talk at the SharePoint Best Practices Conference here in Reston.&#160; It’s early, and my talk is about content discovery using a mathematical modeling technique based on matrix manipulation.&#160; Ok, I admit it’s kind of an abstract topic, but really pretty interesting (more in another post).
Anyway, I’m sitting there at [...]]]></description>
			<content:encoded><![CDATA[<p>So, I’m preparing for my first talk at the SharePoint Best Practices Conference here in Reston.&#160; It’s early, and my talk is about content discovery using a mathematical modeling technique based on matrix manipulation.&#160; Ok, I admit it’s kind of an abstract topic, but really pretty interesting (more in another post).</p>
<p>Anyway, I’m sitting there at the breakfast table thinking about content types, taxonomies, information policies and “ECM for the Masses”, and all of a sudden a poem starts to materialize in my brain.&#160; Has that ever happened to you?&#160; Just all of a sudden, a poem pops into your head?&#160; Here goes:</p>
<blockquote><p>Oh, what a tangled web we weave,   <br />when content types we do conceive.    <br />Derived from documents and pages,    <br />Information policies, and retention stages.    <br />Columns with mysterious fields,    <br />to SharePoint must all workers yield!    <br />To SharePoint, all our cares and woes,    <br />Indeed, to SharePoint all our content goes. </p></blockquote>
<p>You know, it really sounded a lot better on an empty stomach…</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sharepointarchitects.us/johnholliday/post/2010/08/25/best-practices-and-a-bit-of-poetry/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

