<?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>blog.richardramdat.com &#187; SharePoint</title>
	<atom:link href="http://blog.richardramdat.com/category/sharepoint/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.richardramdat.com</link>
	<description></description>
	<lastBuildDate>Tue, 22 Jun 2010 19:01:28 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Global Assembly Cache (GAC) Compare</title>
		<link>http://blog.richardramdat.com/2010/06/global-assembly-cache-gac-compare/</link>
		<comments>http://blog.richardramdat.com/2010/06/global-assembly-cache-gac-compare/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 15:16:41 +0000</pubDate>
		<dc:creator>richard</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Product Reviews]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://blog.richardramdat.com/?p=209</guid>
		<description><![CDATA[If you&#8217;re doing SharePoint development then you&#8217;ve no doubt heard of the GAC, or Global Assembly Cache (c:\windows\assembly) where compiled assemblies are deployed. In a SharePoint farm with several front-ends, you may occasionally find a server with a missing DLL or the wrong version of the assembly.
The following tool makes quick work of trying to [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re doing SharePoint development then you&#8217;ve no doubt heard of the GAC, or Global Assembly Cache (c:\windows\assembly) where compiled assemblies are deployed. In a SharePoint farm with several front-ends, you may occasionally find a server with a missing DLL or the wrong version of the assembly.</p>
<p>The following tool makes quick work of trying to find differences in the GAC for remote servers and evens offers up a nifty HTML report. Very nicely done.</p>
<p><a href="http://gaccompare.codeplex.com/">http://gaccompare.codeplex.com/</a></p>
<p>A couple things &#8211; you need to have Admin rights on the remote computers, the tool does take a while to do the compare (so be patient) and to get the HTML report and other cool features, right-click in the results pane after it has loaded.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardramdat.com/2010/06/global-assembly-cache-gac-compare/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SharePoint Error Delete Site WebDeleted.aspx File Not Found</title>
		<link>http://blog.richardramdat.com/2010/01/sharepoint-error-delete-site-webdeleted-aspx-file-not-found/</link>
		<comments>http://blog.richardramdat.com/2010/01/sharepoint-error-delete-site-webdeleted-aspx-file-not-found/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 21:21:00 +0000</pubDate>
		<dc:creator>richard</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://blog.richardramdat.com/?p=196</guid>
		<description><![CDATA[We had several  users reporting an error when deleting a SharePoint team site. The error appears as a &#8220;File Not Found.&#8221; on the WebDeleted.aspx layout page along with a stack trace. It appears that the problem stems from our custom master page. For our implementation we use a custom HttpModule that redirects incoming requests for [...]]]></description>
			<content:encoded><![CDATA[<p>We had several  users reporting an error when deleting a SharePoint team site. The error appears as a &#8220;File Not Found.&#8221; on the WebDeleted.aspx layout page along with a stack trace. It appears that the problem stems from our custom master page. For our implementation we use a custom HttpModule that redirects incoming requests for a master page to virtualized custom master pages that we maintain.</p>
<p>The WebDeleted.aspx page references the simple.master page which we redirect to our customized application master page. Apparently this results in the page trying to load in elements that are out of context for it. The solution was to stop redirecting simple.master and instead route it back to the SharePoint out of the box simple.master.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardramdat.com/2010/01/sharepoint-error-delete-site-webdeleted-aspx-file-not-found/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SharePoint CAML Query Date</title>
		<link>http://blog.richardramdat.com/2010/01/sharepoint-caml-query-date/</link>
		<comments>http://blog.richardramdat.com/2010/01/sharepoint-caml-query-date/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 20:13:32 +0000</pubDate>
		<dc:creator>richard</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://blog.richardramdat.com/?p=193</guid>
		<description><![CDATA[For the past two SharePoint implementations that I&#8217;ve worked with, it was a common business requirement to query from a list to retrieve items that should be displayed on a &#8220;scheduled&#8221; basis. Think along the lines of an alert or announcement. Typically what I end doing is create a custom list and add the following [...]]]></description>
			<content:encoded><![CDATA[<p>For the past two SharePoint implementations that I&#8217;ve worked with, it was a common business requirement to query from a list to retrieve items that should be displayed on a &#8220;scheduled&#8221; basis. Think along the lines of an alert or announcement. Typically what I end doing is create a custom list and add the following three fields, &#8220;StartTime&#8221;, &#8220;EndTime&#8221; and &#8220;Active&#8221;. Start and End Time are the fields for scheduling the list item. I make them a Date+Time field and also allow them to be optionally be null, this way someone can create an open ended item that starts at a specific time but has no specified End Time. The Active field is a simple yes/no that is a convenient kill-switch or safety check.</p>
<p>So with the three columns, the following CAML query can be used to query items that should be currently displayed:</p>
<textarea cols="40" rows="10" name="code" class="Xml">        <Where>
          <And>
            <And>
              <Or>
                <Leq>
                  <FieldRef Name='StartTime' />
                  <Value Type='DateTime' IncludeTimeValue='True'>
                    <Today />
                  </Value>
                </Leq>
                <IsNull>
                  <FieldRef Name='StartTime' />
                </IsNull>
              </Or>
              <Or>
                <Gt>
                  <FieldRef Name='EndTime' />
                  <Value Type='DateTime' IncludeTimeValue='True'>
                    <Today />
                  </Value>
                </Gt>
                <IsNull>
                  <FieldRef Name='EndTime' />
                </IsNull>
              </Or>
            </And>
            <Eq>
              <FieldRef Name='Active' />
              <Value Type='Boolean'>1</Value>
            </Eq>
          </And>
        </Where>
        <OrderBy>
          <FieldRef Name='Modified' Ascending='False' />
        </OrderBy></textarea>
	<!-- Wordpress Code Snippet -->
	<script type="text/javascript" src="http://blog.richardramdat.com/wp-content/plugins/wordpress-code-snippet/js/shCore.js"></script><script type="text/javascript" src="http://blog.richardramdat.com/wp-content/plugins/wordpress-code-snippet/js/shBrushXml.js"></script>
	<link type="text/css" rel="stylesheet" href="http://blog.richardramdat.com/wp-content/plugins/wordpress-code-snippet/css/SyntaxHighlighter.css"/>
	
	<script language="javascript">
	dp.SyntaxHighlighter.ClipboardSwf = 'http://blog.richardramdat.com/wp-content/plugins/wordpress-code-snippet/js/clipboard.swf';
	dp.SyntaxHighlighter.HighlightAll('code');
	</script>
	<!-- End Wordpress Code Snippet -->
	]]></content:encoded>
			<wfw:commentRss>http://blog.richardramdat.com/2010/01/sharepoint-caml-query-date/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Determine if SPListItem belongs to a document library</title>
		<link>http://blog.richardramdat.com/2010/01/determine-if-splistitem-belongs-to-a-document-library/</link>
		<comments>http://blog.richardramdat.com/2010/01/determine-if-splistitem-belongs-to-a-document-library/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 05:07:48 +0000</pubDate>
		<dc:creator>richard</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://blog.richardramdat.com/?p=187</guid>
		<description><![CDATA[So you have an instance of a SPListItem and want to know whether this item belongs to a Document Library or if it came from a list (such as an Event Calender, Survey, or Custom List). A quick way to distinguish a document library item is to access the ParentList property of the SPListItem class and examine [...]]]></description>
			<content:encoded><![CDATA[<p>So you have an instance of a SPListItem and want to know whether this item belongs to a Document Library or if it came from a list (such as an Event Calender, Survey, or Custom List). A quick way to distinguish a document library item is to access the ParentList property of the SPListItem class and examine the BaseType. In code,</p>
<p>SPListItem item = GetItemFromSomeWhere();</p>
<p>if (item.ParentList.BaseType == SPBaseType.DocumentLibrary)</p>
<p>{</p>
<p>// This item is from a document library &#8211; it probably contains a file.</p>
<p>}</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardramdat.com/2010/01/determine-if-splistitem-belongs-to-a-document-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SharePoint Custom Datasheet Mode &#8211; IE Crash</title>
		<link>http://blog.richardramdat.com/2009/10/sharepoint-custom-datasheet-mode-ie-crash/</link>
		<comments>http://blog.richardramdat.com/2009/10/sharepoint-custom-datasheet-mode-ie-crash/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 16:18:47 +0000</pubDate>
		<dc:creator>richard</dc:creator>
				<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://blog.richardramdat.com/?p=179</guid>
		<description><![CDATA[There is a known SharePoint customization bug that under certain circumstances, modifications to a master page (ie, use of a doctype or margin/padding) will cause the &#8220;Edit in Datasheet&#8221; mode to crash Internet Explorer.
The underlying problem is caused by a poorly written function called GCComputeSizing within Core.js The common fix is to override this function [...]]]></description>
			<content:encoded><![CDATA[<p>There is a known SharePoint customization bug that under certain circumstances, modifications to a master page (ie, use of a doctype or margin/padding) will cause the &#8220;Edit in Datasheet&#8221; mode to crash Internet Explorer.</p>
<p>The underlying problem is caused by a poorly written function called GCComputeSizing within Core.js The common fix is to override this function by defining your own function called GCComputeSizing in a script reference that is loaded in after the reference to Core.js is called in your master page.</p>
<p>However, what most of the other blogs and resources fail to mention is that Core,js can sometimes be loaded in using the &#8220;defer&#8221; attribute of the script tag. When this happens, core.js will now be loaded in after the page is loaded. Unless you also defer your override script, you will invoke the built-in GCComputeSizing function and the bug will persist.</p>
<p>This problem was specifically noticed when using user-defined or custom datasheet views. Comparing the source html for standard and custom datasheet view yieled the following:</p>
<p>Standard Datasheet View:<br />
&lt;script type=&#8221;text/javascript&#8221; language=&#8221;javascript&#8221; src=&#8221;/_layouts/1033/core.js&#8221;&gt;&lt;/script&gt;</p>
<p>Custom Datasheet View:<br />
&lt;script type=&#8221;text/javascript&#8221; language=&#8221;javascript&#8221; src=&#8221;/_layouts/1033/core.js&#8221; defer&gt;&lt;/script&gt;</p>
<p>As you can see, only custom datasheet views were loading in core.js  as a deferred script. Adding the defer attribute to our custom override script fixed this problem by deferring the override after the deferred core.js was loaded.</p>
<p>In terms of overriding GCComputeSizing  there are many examples easily searchable through the interwebs. One word of caution though, as a person who has quite a bit of experience with Javascript, GCComputeSizing not a function suitable for production. Even some of the *corrected* versions that others have posted still make me uneasy. Anything that has the potential of throwing a client&#8217;s browser into an infinite loop and locking up their cpu is a serious  cause for concern. Fortunately, our customized design uses a fixed layout so I was able to simplify GCComputeSizing to the following:</p>
<p>function GCComputeSizing(GCObject)<br />
{<br />
    if (TestGCObject(GCObject))<br />
    {<br />
      var lGCWindowWidth=663;<br />
      var lGCWindowHeight=550;</p>
<p>      glGCObjectWidth = lGCWindowWidth;<br />
      glGCObjectHeight = lGCWindowHeight<br />
    }<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardramdat.com/2009/10/sharepoint-custom-datasheet-mode-ie-crash/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SPListItem Url</title>
		<link>http://blog.richardramdat.com/2009/09/splistitem-url/</link>
		<comments>http://blog.richardramdat.com/2009/09/splistitem-url/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 04:38:08 +0000</pubDate>
		<dc:creator>richard</dc:creator>
				<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://blog.richardramdat.com/?p=171</guid>
		<description><![CDATA[So you need to get a url reference to a SharePoint list item? Fantastic, just use SPListItem.Url right?
I think by now you can guess that would be too easy. So instead of divulging into my usual SharePoint scarasm, I&#8217;ve found a friend who has done a much better job than I could ever pull off.
http://www.sharepointsecurity.com/sharepoint/sharepoint-development/splistitemurl-funky-return-fiesta/
]]></description>
			<content:encoded><![CDATA[<p>So you need to get a url reference to a SharePoint list item? Fantastic, just use SPListItem.Url right?</p>
<p>I think by now you can guess that would be too easy. So instead of divulging into my usual SharePoint scarasm, I&#8217;ve found a friend who has done a much better job than I could ever pull off.</p>
<p><a href="http://www.sharepointsecurity.com/sharepoint/sharepoint-development/splistitemurl-funky-return-fiesta/">http://www.sharepointsecurity.com/sharepoint/sharepoint-development/splistitemurl-funky-return-fiesta/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardramdat.com/2009/09/splistitem-url/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Useless SharePoint Error &#8211; SPQuery / Caml</title>
		<link>http://blog.richardramdat.com/2009/09/useless-sharepoint-error-spquery-caml/</link>
		<comments>http://blog.richardramdat.com/2009/09/useless-sharepoint-error-spquery-caml/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 22:26:50 +0000</pubDate>
		<dc:creator>richard</dc:creator>
				<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://blog.richardramdat.com/?p=165</guid>
		<description><![CDATA[Came across this error while trying to execute a Caml query through the SPQuery object:
One or more field types are not installed properly. Go to the list settings page to delete these fields.
Wonderful, eh? Don&#8217;t believe it, you don&#8217;t need to delete any fields. You more than likely have a misspelled column or a column [...]]]></description>
			<content:encoded><![CDATA[<p>Came across this error while trying to execute a Caml query through the SPQuery object:</p>
<p><em>One or more field types are not installed properly. Go to the list settings page to delete these fields.</em></p>
<p>Wonderful, eh? Don&#8217;t believe it, you don&#8217;t need to delete any fields. You more than likely have a misspelled column or a column name that has a different internal name than what is publicly visible. For example, a default SharePoint calendar has a column field called &#8220;End Time&#8221;; however if you include the space within your query, you&#8217;ll get the error above. In this case, the internal name is really &#8220;EndDate&#8221;. Also look for column fields that have been renamed. Sometimes if you define a column, then later change its name &#8211; the internal name will still remain the same.</p>
<p>So this begs another question &#8211; How are you supposed to *magically* know what the internal field name is? Well, here&#8217;s a tried and true method. Go to the list you are trying to query from, then click Settings -&gt; List Settings. Scroll down to where all the Columns are defined. Click on the one in question, which will take you to the FldEdit.aspx page. Within your address bar, notice the querystring param Field. This references the internal field name for the column which you should also use in your queries.</p>
<p>See Microsoft,  wasn&#8217;t that a lot more helpful then trying to tell the user to delete some random field from their list? Geesh.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardramdat.com/2009/09/useless-sharepoint-error-spquery-caml/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SharePoint List Querying &#8211; Linq vs. CAML</title>
		<link>http://blog.richardramdat.com/2009/09/sharepoint-list-querying-linq-vs-caml/</link>
		<comments>http://blog.richardramdat.com/2009/09/sharepoint-list-querying-linq-vs-caml/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 04:01:18 +0000</pubDate>
		<dc:creator>richard</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://blog.richardramdat.com/?p=154</guid>
		<description><![CDATA[One of the nice features of SharePoint 2007 development is the ability to use the latest release of the .NET framework and  its concomitant language features &#8211; including Linq. This in and of itself it a huge benefit as the inherit query mechanism within SharePoint &#8211; CAML is woefully terrible.
What is CAML? A pain in the arse. Officially, [...]]]></description>
			<content:encoded><![CDATA[<p>One of the nice features of SharePoint 2007 development is the ability to use the latest release of the .NET framework and  its concomitant language features &#8211; including Linq. This in and of itself it a huge benefit as the inherit query mechanism within SharePoint &#8211; CAML is woefully terrible.</p>
<p>What is CAML? A pain in the arse. Officially, it stands for Collaborative Application Markup Language &#8211; which amounts to more bollox than telling you anything you need to know. Essentially, CAML is an xml structured intermediate query syntax for SharePoint to query against data structures (that can also be defined using CAML). Sounds a bit like SQL no? Well guess what CAML gets translated to in the back-end? Yep &#8211; SQL. SharePoint takes your CAML and queries against its sql backend. So in short, with CAML you have this massively verbose query syntax that requires nested xml tags, multi-line statements, and quoted attributes &#8211; yuck!</p>
<p>Enter Linq, with its terse sql-esque statements and amazing chainability. Yay! No more CAML!!</p>
<p>Not quite.</p>
<p>Linq can only be used against a SPListItemCollection object which must be filled before use. The two most common ways to populate a SPListItemCollection is to either Get all items, or use a SPQuery object and CAML syntax to get a subset of items. As you can see, the dilemia presents itself that if you try to avoid CAML altogether, you will sacrifice performance when querying a list with potentially a large set of items.</p>
<p>So the best solution? Use both. Before using Linq directly to query items, first populate your SPListItemCollection with a CAML query that will do an adequate job of ensuring a manageable subset returned from the database. Then with Linq, fine-tune your SPListItemCollection to further sort and filter your result set. So Caml &#8211; Chainsaw, Linq &#8211; Carving Knife.</p>
<p>For more information, check out the excellent resource below: </p>
<p><a href="http://www.vanolstweb.nl/blog/documents/linq%20and%20sharepoint%20development.pdf">LINQ and SharePoint Development: The benefits and the pitfalls</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardramdat.com/2009/09/sharepoint-list-querying-linq-vs-caml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
