<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Stefan on SharePoint</title>
    <description>My Wanderings in SharePoint and Various Microsoft Technologies</description>
    <link>http://www.keirgordon.com/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 1.4.5.14</generator>
    <language>en-US</language>
    <blogChannel:blogRoll>http://www.keirgordon.com/opml.axd</blogChannel:blogRoll>
    <dc:creator>Stefan Keir Gordon</dc:creator>
    <dc:title>Stefan on SharePoint</dc:title>
    <geo:lat>0.000000</geo:lat>
    <geo:long>0.000000</geo:long>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/StefanOnSharepoint" /><feedburner:info uri="stefanonsharepoint" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
      <title>Programmatically Activating SharePoint Features</title>
      <description>&lt;p&gt;SharePoint features can exist at several different scopes, including Web, Site, and Web Application.&amp;#160; Each of these can be activated and deactivated programmatically, but they have to be handled slightly differently.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;This can be extremely useful for automated deployment tools, or any number of other purposes.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Given a WebApplication scoped feature, you’ll need an SPWebApplication object (which you can get from the property on your SPSite object if needed):&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For example, if you wanted a method which could activate a WebApplication scoped feature, an optionally deactivate and reactivate (useful after upgrading the feature during a deployment):&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;pre class="csharpcode"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ActivateWebApplicationFeature(SPWebApplication WebApplication, Guid FeatureGuid, &lt;span class="kwrd"&gt;bool&lt;/span&gt; Reactivate)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (Reactivate)
            {
                &lt;span class="kwrd"&gt;try&lt;/span&gt;
                {
                    &lt;span class="rem"&gt;//Attempt to deactivate feature.  Will fail if already deactivate.&lt;/span&gt;
                    WebApplication.Features.Remove(FeatureGuid, &lt;span class="kwrd"&gt;true&lt;/span&gt;);
                }
                &lt;span class="kwrd"&gt;catch&lt;/span&gt;
                {
                    &lt;span class="rem"&gt;//Was not activated, or could not be deactivated.&lt;/span&gt;
                }
            }

            &lt;span class="rem"&gt;//Now activate&lt;/span&gt;
            WebApplication.Features.Add(FeatureGuid);
        }&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&amp;#160;&lt;/pre&gt;

&lt;p&gt;&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;For a feature scoped at the Site level, you simply leverage the SPSite object&lt;/p&gt;

&lt;p&gt;{SPSite}.Features.Add(FeatureGuid);&lt;/p&gt;

&lt;p&gt;{SPSite}.Features.Remove(FeatureGuid, true);&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;And for the Web scoped features, of course, just use the SPWeb&lt;/p&gt;

&lt;p&gt;{SPWeb}.Features.Add(FeatureGuid);&lt;/p&gt;

&lt;p&gt;{SPWeb}.Features.Remove(FeatureGuid, true);&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;The boolean on the remove indicates whether to force deactivation.&amp;#160; Note that if the feature ID can not be found, permissions are not available, or it is already in the requested state, you will get a failure – So be sure to wrap your code with the appropriate error handling.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/StefanOnSharepoint/~4/C8uE2DP4bOE" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/StefanOnSharepoint/~3/C8uE2DP4bOE/post.aspx</link>
      <author>stefankeirgordon</author>
      <comments>http://www.keirgordon.com/post/Programmatically-Activating-SharePoint-Features.aspx#comment</comments>
      <guid isPermaLink="false">http://www.keirgordon.com/post.aspx?id=27ad80c0-03a4-4f8b-a00f-090b9a084dda</guid>
      <pubDate>Tue, 14 Jun 2011 03:38:36 -1300</pubDate>
      <dc:publisher>stefankeirgordon</dc:publisher>
      <pingback:server>http://www.keirgordon.com/pingback.axd</pingback:server>
      <pingback:target>http://www.keirgordon.com/post.aspx?id=27ad80c0-03a4-4f8b-a00f-090b9a084dda</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://www.keirgordon.com/trackback.axd?id=27ad80c0-03a4-4f8b-a00f-090b9a084dda</trackback:ping>
      <wfw:comment>http://www.keirgordon.com/post/Programmatically-Activating-SharePoint-Features.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.keirgordon.com/syndication.axd?post=27ad80c0-03a4-4f8b-a00f-090b9a084dda</wfw:commentRss>
    <feedburner:origLink>http://www.keirgordon.com/post.aspx?id=27ad80c0-03a4-4f8b-a00f-090b9a084dda</feedburner:origLink></item>
    <item>
      <title>SharePoint Designer Zip/Compress Workflow Action Deployed in a Sandboxed Solution</title>
      <description>&lt;p&gt;Whew, that was a long title – But I think you’ll find this very useful.&amp;#160; Some notes on deploying a custom workflow action that you can use inside of SharePoint designer, which will Zip attachments to list items and deposit the compressed file in a document library – and it is all deployed in a sandboxed solution, so you can use it on hosted SharePoint Foundation instances.&amp;#160; In this case, I even generate PDF files with the data from the list items, and include them in the compressed file.&amp;#160; Great for archival or offsite storage.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;First of all, this MSDN article about general workflow actions and sandboxed solutions will help you immensely with the basics:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/gg615449.aspx" href="http://msdn.microsoft.com/en-us/library/gg615449.aspx"&gt;http://msdn.microsoft.com/en-us/library/gg615449.aspx&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Next you’ll want to grab a copy of:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://sharpdevelop.net/OpenSource/SharpZipLib/Download.aspx"&gt;SharpZipLib&lt;/a&gt; (an open source compression library) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://sharppdf.sourceforge.net/"&gt;SharpPDF&lt;/a&gt; (if you want to generate PDF’s too) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;You’ll want to get the source to each, as we’ll upgrade them to .net 4.0, and build them as signed assemblies.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Make yourself a SharePoint solution in Visual Studio per the MSDN article above, and add two (or one if you are leaving out the PDF bits) existing projects using the source of the libraries (SharpZip, SharpPDF).&amp;#160; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You’ll need to let the upgrade wizard upgrade them to .net 4. &lt;/li&gt;    &lt;li&gt;Check the project settings on them and make sure they are targeting the .net 4 framework (AnyCPU) &lt;/li&gt;    &lt;li&gt;For SharpPDF you’ll need to open the AssemblyInfo.cs file and add a line to the bottom &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;pre class="csharpcode"&gt;[assembly: AllowPartiallyTrustedCallers()]&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;In my case, I’m always looking at a single list, so my workflow action only accepts a ListItemID.&amp;#160; You’ll probably want to make that more generic by adding a few more parameters to your Action.&amp;#160; Again, these custom actions are described in plenty of detail in the MSDN article referenced above.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;       &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Hashtable Package(SPUserCodeWorkflowContext context, &lt;span class="kwrd"&gt;string&lt;/span&gt; ItemID)
        {
            Hashtable result = &lt;span class="kwrd"&gt;new&lt;/span&gt; Hashtable();

            &lt;span class="kwrd"&gt;try&lt;/span&gt;
            {
                result[&lt;span class="str"&gt;&amp;quot;Result&amp;quot;&lt;/span&gt;] = PackageListItem(closingId, context.CurrentWebUrl);
            }
            &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception e)
            {
                result[&lt;span class="str"&gt;&amp;quot;Result&amp;quot;&lt;/span&gt;] = &lt;span class="str"&gt;&amp;quot;ERROR&amp;quot;&lt;/span&gt; + e.ToString();
            }

            &lt;span class="kwrd"&gt;return&lt;/span&gt; result;
        }&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Where the PackageListItem method looks like this:&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; PackageListItem(&lt;span class="kwrd"&gt;string&lt;/span&gt; ItemID, &lt;span class="kwrd"&gt;string&lt;/span&gt; webUrl)
        {
            SortedList&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;byte&lt;/span&gt;[]&amp;gt; files = &lt;span class="kwrd"&gt;new&lt;/span&gt; SortedList&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;,&lt;span class="kwrd"&gt;byte&lt;/span&gt;[]&amp;gt;();
            
            &lt;span class="kwrd"&gt;using&lt;/span&gt; (SPSite site = &lt;span class="kwrd"&gt;new&lt;/span&gt; SPSite(webUrl))
            {
                &lt;span class="kwrd"&gt;using&lt;/span&gt; (SPWeb web = site.OpenWeb())
                {
                    &lt;span class="rem"&gt;//Find the list item&lt;/span&gt;
                    SPListItem item = web.Lists[&lt;span class="str"&gt;&amp;quot;List&amp;quot;&lt;/span&gt;].GetItemById(&lt;span class="kwrd"&gt;int&lt;/span&gt;.Parse(ItemID));

                    &lt;span class="rem"&gt;//Create a PDF of the list item data and add it to the &lt;/span&gt;
                    &lt;span class="rem"&gt;//  compressed files collection&lt;/span&gt;
                    files.Add(&lt;span class="str"&gt;&amp;quot;ListData.pdf&amp;quot;&lt;/span&gt;, CreateDocument(item, &lt;span class="str"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;));

                    &lt;span class="rem"&gt;//Loop through all list item attachments&lt;/span&gt;
                    &lt;span class="rem"&gt;//  and add them to the compressed file collection&lt;/span&gt;
                    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; attachment &lt;span class="kwrd"&gt;in&lt;/span&gt; item.Attachments)
                    {
                        SPFile attFile = web.GetFile(item.Attachments.UrlPrefix + attachment);
                        files.Add(attachment, attFile.OpenBinary());
                    }
                    
                    &lt;span class="rem"&gt;//Zip everything up and finish!&lt;/span&gt;
                    &lt;span class="kwrd"&gt;byte&lt;/span&gt;[] package = CreateZip(files);

                    files = &lt;span class="kwrd"&gt;null&lt;/span&gt;;

                    web.AllowUnsafeUpdates = &lt;span class="kwrd"&gt;true&lt;/span&gt;;

                    &lt;span class="rem"&gt;//Add the zipped package to a doc lib&lt;/span&gt;
                    SPFile file = web.Folders[&lt;span class="str"&gt;&amp;quot;Archive&amp;quot;&lt;/span&gt;].Files.Add(
                        &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;&amp;quot;({0})_{1}.zip&amp;quot;&lt;/span&gt;, 
                        ItemID, 
                        DateTime.Now.ToString(&lt;span class="str"&gt;&amp;quot;yyyy'-'MM'-'dd HH''mm''ss&amp;quot;&lt;/span&gt;)), 
                        package);

                    web.Update();

                    file.Update();

                    web.AllowUnsafeUpdates = &lt;span class="kwrd"&gt;false&lt;/span&gt;;

                    package = &lt;span class="kwrd"&gt;null&lt;/span&gt;;

                    &lt;span class="rem"&gt;//return the List Item ID of the generated file to the workflow&lt;/span&gt;
                    &lt;span class="kwrd"&gt;return&lt;/span&gt; file.ListItemAllFields[&lt;span class="str"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;].ToString();

                }
            }
        }&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;And create document, if you are interested in generating PDF’s, looks like this.&amp;#160; I do some hackery to leave out boring version and guid fields from the list data – feel free to do something more intelligent:&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="csharpcode"&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;byte&lt;/span&gt;[] CreateDocument(SPListItem item, &lt;span class="kwrd"&gt;string&lt;/span&gt; type)
        {
            pdfDocument pdf = &lt;span class="kwrd"&gt;new&lt;/span&gt; pdfDocument(type, &lt;span class="str"&gt;&amp;quot;Some Text&amp;quot;&lt;/span&gt;);
            pdfPage page = pdf.addPage();

            page.addText(item[&lt;span class="str"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;].ToString(), 20, 730, pdf.getFontReference(predefinedFont.csHelvetica), 12);

            pdfTable table = &lt;span class="kwrd"&gt;new&lt;/span&gt; pdfTable(pdf, 1, pdfColor.Black);
            table.borderSize = 1;
            table.borderColor = pdfColor.Black;
            table.coordX = 50;
            table.coordY = 690;


            table.tableHeader.addColumn(150);
            table.tableHeader.addColumn(300);

            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (SPField f &lt;span class="kwrd"&gt;in&lt;/span&gt; item.Fields)
            {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (f.Type != SPFieldType.Guid &amp;amp;&amp;amp; !f.Title.ToLower().Contains(&lt;span class="str"&gt;&amp;quot;version&amp;quot;&lt;/span&gt;) &amp;amp;&amp;amp; !f.Title.Contains(&lt;span class="str"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;))
                {
                    &lt;span class="kwrd"&gt;try&lt;/span&gt;
                    {
                        pdfTableRow row = table.createRow();
                        row[0].addText(f.Title);
                        row[1].addText(item[f.InternalName].ToString());
                        table.addRow(row);
                    }
                    &lt;span class="kwrd"&gt;catch&lt;/span&gt; { }
                }
            }
            
            page.addTable(table);

            MemoryStream ms = &lt;span class="kwrd"&gt;new&lt;/span&gt; MemoryStream();
            pdf.createPDF(ms);

            &lt;span class="kwrd"&gt;return&lt;/span&gt; ms.ToArray();
        }&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;The CreateZip method called in package is also very simple:&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="csharpcode"&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;byte&lt;/span&gt;[] CreateZip(SortedList&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;byte&lt;/span&gt;[]&amp;gt; files)
        {

            MemoryStream ms = &lt;span class="kwrd"&gt;new&lt;/span&gt; MemoryStream();

            &lt;span class="kwrd"&gt;using&lt;/span&gt; (ZipOutputStream s = &lt;span class="kwrd"&gt;new&lt;/span&gt; ZipOutputStream(ms))
            {

                s.SetLevel(5); &lt;span class="rem"&gt;// 0 - store only to 9 - means best compression&lt;/span&gt;

                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; file &lt;span class="kwrd"&gt;in&lt;/span&gt; files.Keys)
                {

                    &lt;span class="rem"&gt;// Using GetFileName makes the result compatible with XP&lt;/span&gt;
                    &lt;span class="rem"&gt;// as the resulting path is not absolute.&lt;/span&gt;
                    ZipEntry entry = &lt;span class="kwrd"&gt;new&lt;/span&gt; ZipEntry(file);

                    &lt;span class="rem"&gt;// Could also use the last write time or similar for the file.&lt;/span&gt;
                    entry.DateTime = DateTime.Now;
                    s.PutNextEntry(entry);

                    s.Write(files[file], 0, files[file].Length);                    
                }

            }

            &lt;span class="kwrd"&gt;return&lt;/span&gt; ms.ToArray();

        }&lt;/pre&gt;

&lt;p&gt;&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/p&gt;

&lt;p&gt;This is relatively resource intensive of course, and will use some of your sandboxed resources.&amp;#160; It hasn’t been a problem for me, but your mileage may vary.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/StefanOnSharepoint/~4/JtS3YWCkPRc" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/StefanOnSharepoint/~3/JtS3YWCkPRc/post.aspx</link>
      <author>stefankeirgordon</author>
      <comments>http://www.keirgordon.com/post/SharePoint-Designer-ZipCompress-Workflow-Action-Deployed-in-a-Sandboxed-Solution.aspx#comment</comments>
      <guid isPermaLink="false">http://www.keirgordon.com/post.aspx?id=4d9319f8-7f3c-4bd2-9552-f90822dd2866</guid>
      <pubDate>Tue, 31 May 2011 07:41:46 -1300</pubDate>
      <dc:publisher>stefankeirgordon</dc:publisher>
      <pingback:server>http://www.keirgordon.com/pingback.axd</pingback:server>
      <pingback:target>http://www.keirgordon.com/post.aspx?id=4d9319f8-7f3c-4bd2-9552-f90822dd2866</pingback:target>
      <slash:comments>8</slash:comments>
      <trackback:ping>http://www.keirgordon.com/trackback.axd?id=4d9319f8-7f3c-4bd2-9552-f90822dd2866</trackback:ping>
      <wfw:comment>http://www.keirgordon.com/post/SharePoint-Designer-ZipCompress-Workflow-Action-Deployed-in-a-Sandboxed-Solution.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.keirgordon.com/syndication.axd?post=4d9319f8-7f3c-4bd2-9552-f90822dd2866</wfw:commentRss>
    <feedburner:origLink>http://www.keirgordon.com/post.aspx?id=4d9319f8-7f3c-4bd2-9552-f90822dd2866</feedburner:origLink></item>
    <item>
      <title>Connecting to WCF Service from XNA on Windows Phone 7</title>
      <description>&lt;p&gt;If you are using XNA Game Studio 4.0 to create an application targeted to Windows Phone 7, you may have tried to add a service reference to a WCF service inside visual studio and been stuck…&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;This appears to be a known issue – there is an easy workaround doing this manually with the Silverlight version of the SvcUtil application.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Launch a command prompt &lt;/li&gt;    &lt;li&gt;Navigate to: &lt;font color="#0000ff"&gt;C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v7.0\Tools&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;Run SLSvcUtil /d:&amp;lt;output directory&amp;gt; &amp;lt;path to wsdl&amp;gt; &lt;/li&gt;    &lt;li&gt;Add the two created files (*.cs, and ServiceReferences.ClientConfig) to your existing XNA Project &lt;/li&gt;    &lt;li&gt;Select ServiceReferences.ClientConfig if the Solution explorer and change “Build Action” to “Content” &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Here is an example of using the command:&lt;/p&gt;  &lt;p&gt;C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v7.0\Tools&amp;gt;slsvcutil /d:c:\mycode&amp;#160; http://test.com/test.svc?wsdl&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Be sure to leverage the MSDN article for more information:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/cc197958%28v=vs.95%29.aspx" href="http://msdn.microsoft.com/en-us/library/cc197958%28v=vs.95%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/cc197958%28v=vs.95%29.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/StefanOnSharepoint/~4/xiaq2-I5vlY" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/StefanOnSharepoint/~3/xiaq2-I5vlY/post.aspx</link>
      <author>stefankeirgordon</author>
      <comments>http://www.keirgordon.com/post/Connecting-to-WCF-Service-from-XNA-Game-on-Windows-Phone-7.aspx#comment</comments>
      <guid isPermaLink="false">http://www.keirgordon.com/post.aspx?id=df83fda8-3c3f-4d4a-a817-0c09771b2fbf</guid>
      <pubDate>Sat, 01 Jan 2011 11:45:28 -1300</pubDate>
      <dc:publisher>stefankeirgordon</dc:publisher>
      <pingback:server>http://www.keirgordon.com/pingback.axd</pingback:server>
      <pingback:target>http://www.keirgordon.com/post.aspx?id=df83fda8-3c3f-4d4a-a817-0c09771b2fbf</pingback:target>
      <slash:comments>6</slash:comments>
      <trackback:ping>http://www.keirgordon.com/trackback.axd?id=df83fda8-3c3f-4d4a-a817-0c09771b2fbf</trackback:ping>
      <wfw:comment>http://www.keirgordon.com/post/Connecting-to-WCF-Service-from-XNA-Game-on-Windows-Phone-7.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.keirgordon.com/syndication.axd?post=df83fda8-3c3f-4d4a-a817-0c09771b2fbf</wfw:commentRss>
    <feedburner:origLink>http://www.keirgordon.com/post.aspx?id=df83fda8-3c3f-4d4a-a817-0c09771b2fbf</feedburner:origLink></item>
    <item>
      <title>Remove Blocked File Types in SharePoint</title>
      <description>&lt;p&gt;You can remove the blocked file types in SharePoint programmatically by accessing a collection on an SPWebApplication object.&lt;/p&gt;  &lt;pre class="csharpcode"&gt;Collection&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; be = webApplication.BlockedFileExtensions;
&lt;span class="kwrd"&gt;if&lt;/span&gt; (be.Contains(&lt;span class="str"&gt;&amp;quot;dll&amp;quot;&lt;/span&gt;)) be.Remove(&lt;span class="str"&gt;&amp;quot;dll&amp;quot;&lt;/span&gt;);
webApplication.Update();&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;img src="http://feeds.feedburner.com/~r/StefanOnSharepoint/~4/t74GCTodCz0" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/StefanOnSharepoint/~3/t74GCTodCz0/post.aspx</link>
      <author>stefankeirgordon</author>
      <comments>http://www.keirgordon.com/post/Remove-Blocked-File-Types-in-SharePoint.aspx#comment</comments>
      <guid isPermaLink="false">http://www.keirgordon.com/post.aspx?id=d319b20d-6a2c-4294-9754-ac273537d0bd</guid>
      <pubDate>Sat, 09 Jan 2010 08:07:40 -1300</pubDate>
      <dc:publisher>stefankeirgordon</dc:publisher>
      <pingback:server>http://www.keirgordon.com/pingback.axd</pingback:server>
      <pingback:target>http://www.keirgordon.com/post.aspx?id=d319b20d-6a2c-4294-9754-ac273537d0bd</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.keirgordon.com/trackback.axd?id=d319b20d-6a2c-4294-9754-ac273537d0bd</trackback:ping>
      <wfw:comment>http://www.keirgordon.com/post/Remove-Blocked-File-Types-in-SharePoint.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.keirgordon.com/syndication.axd?post=d319b20d-6a2c-4294-9754-ac273537d0bd</wfw:commentRss>
    <feedburner:origLink>http://www.keirgordon.com/post.aspx?id=d319b20d-6a2c-4294-9754-ac273537d0bd</feedburner:origLink></item>
    <item>
      <title>Add Web Part to Page Programmatically</title>
      <description>&lt;p&gt;I use the following code to programmatically add web parts to my pages.&lt;/p&gt;  &lt;p&gt;I frequently see similar code, but no one is ever using the xml from the web part library to do the import, and as such the properties are not set to what was exported/defined in the web part xml.&lt;/p&gt;  &lt;p&gt;Specifically:&lt;/p&gt;  &lt;p&gt;XmlReader xmlReader = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlTextReader(webParts[0].File.OpenBinaryStream());&lt;/p&gt;  &lt;p&gt;WebPart webPart = manager.ImportWebPart(xmlReader, &lt;span class="kwrd"&gt;out&lt;/span&gt; errorMessage);&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Enjoy:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;p&gt;&lt;font size="1"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; AddWebPartToPage(
                  SPWeb web,
                  &lt;span class="kwrd"&gt;string&lt;/span&gt; pageUrl,
                  &lt;span class="kwrd"&gt;string&lt;/span&gt; webPartName,
                  &lt;span class="kwrd"&gt;string&lt;/span&gt; zoneID,
                  &lt;span class="kwrd"&gt;int&lt;/span&gt; zoneIndex)
        {
            &lt;span class="kwrd"&gt;using&lt;/span&gt; (SPLimitedWebPartManager manager = web.GetLimitedWebPartManager(
                    pageUrl, PersonalizationScope.Shared))
                {
                    &lt;span class="kwrd"&gt;using&lt;/span&gt; (System.Web.UI.WebControls.WebParts.WebPart webPart = &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="1"&gt;CreateWebPart(web, webPartName, manager))
                    {
               
                    manager.AddWebPart(webPart, zoneID, zoneIndex);
                    &lt;span class="kwrd"&gt;return&lt;/span&gt; webPart.ID;
                }
            }
        }

&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; WebPart CreateWebPart(SPWeb web, &lt;span class="kwrd"&gt;string&lt;/span&gt; webPartName, SPLimitedWebPartManager manager)
        {
            SPQuery query = &lt;span class="kwrd"&gt;new&lt;/span&gt; SPQuery();
            query.Query = String.Format(CultureInfo.CurrentCulture,
                &lt;span class="str"&gt;&amp;quot;&amp;lt;Where&amp;gt;&amp;lt;Eq&amp;gt;&amp;lt;FieldRef Name='FileLeafRef'/&amp;gt;&amp;lt;Value Type='File'&amp;gt;{0}&amp;lt;/Value&amp;gt;&amp;lt;/Eq&amp;gt;&amp;lt;/Where&amp;gt;&amp;quot;&lt;/span&gt;,
                webPartName);

            SPList webPartGallery = &lt;span class="kwrd"&gt;null&lt;/span&gt;;

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;null&lt;/span&gt; == web.ParentWeb)
            {
                webPartGallery = web.GetCatalog(
                   SPListTemplateType.WebPartCatalog);
            }
            &lt;span class="kwrd"&gt;else&lt;/span&gt;
            {
                webPartGallery = web.Site.RootWeb.GetCatalog(
                   SPListTemplateType.WebPartCatalog);
            }

            SPListItemCollection webParts = webPartGallery.GetItems(query);

            XmlReader xmlReader = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlTextReader(webParts[0].File.OpenBinaryStream());
            &lt;span class="kwrd"&gt;string&lt;/span&gt; errorMessage;
            WebPart webPart = manager.ImportWebPart(xmlReader, &lt;span class="kwrd"&gt;out&lt;/span&gt; errorMessage);

            &lt;span class="kwrd"&gt;return&lt;/span&gt; webPart;
        }&lt;/font&gt;&lt;/p&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;img src="http://feeds.feedburner.com/~r/StefanOnSharepoint/~4/zODWy1Wld1I" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/StefanOnSharepoint/~3/zODWy1Wld1I/post.aspx</link>
      <author>stefankeirgordon</author>
      <comments>http://www.keirgordon.com/post/Add-Web-Part-to-Page-Programmatically.aspx#comment</comments>
      <guid isPermaLink="false">http://www.keirgordon.com/post.aspx?id=c907705c-df60-453d-b212-91d8af5a859d</guid>
      <pubDate>Mon, 04 Jan 2010 09:32:23 -1300</pubDate>
      <dc:publisher>stefankeirgordon</dc:publisher>
      <pingback:server>http://www.keirgordon.com/pingback.axd</pingback:server>
      <pingback:target>http://www.keirgordon.com/post.aspx?id=c907705c-df60-453d-b212-91d8af5a859d</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://www.keirgordon.com/trackback.axd?id=c907705c-df60-453d-b212-91d8af5a859d</trackback:ping>
      <wfw:comment>http://www.keirgordon.com/post/Add-Web-Part-to-Page-Programmatically.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.keirgordon.com/syndication.axd?post=c907705c-df60-453d-b212-91d8af5a859d</wfw:commentRss>
    <feedburner:origLink>http://www.keirgordon.com/post.aspx?id=c907705c-df60-453d-b212-91d8af5a859d</feedburner:origLink></item>
    <item>
      <title>SharePoint Raw Text Field Control</title>
      <description>&lt;p&gt;Sometimes you simply need to dump out the contents of a text field raw, and not have the SharePoint field controls alter you HTML, strip scripts, etc.&amp;#160; &lt;/p&gt;  &lt;p&gt;I’m currently using this to display raw HTML that is being programmatically imported into a list.&lt;/p&gt;  &lt;p&gt;This is a very simple example of how to make a field control, however you’ll want to ensure you consider things like caching and security before deploying this.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; RawTextFieldControl : BaseFieldControl
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; XnaRawTextFieldControl()
        {
            &lt;span class="kwrd"&gt;base&lt;/span&gt;.DisableInputFieldLabel = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
            &lt;span class="kwrd"&gt;base&lt;/span&gt;.ControlMode = SPControlMode.Display;
        }

        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; RenderFieldForDisplay(HtmlTextWriter output)
        {
            output.Write(&lt;span class="kwrd"&gt;this&lt;/span&gt;.ItemFieldValue);
        }
    }&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;img src="http://feeds.feedburner.com/~r/StefanOnSharepoint/~4/Bcpg-7cMIUU" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/StefanOnSharepoint/~3/Bcpg-7cMIUU/post.aspx</link>
      <author>stefankeirgordon</author>
      <comments>http://www.keirgordon.com/post/SharePoint-Raw-Text-Field-Control.aspx#comment</comments>
      <guid isPermaLink="false">http://www.keirgordon.com/post.aspx?id=255f64df-2c43-4efd-9d73-beca99655cb6</guid>
      <pubDate>Mon, 04 Jan 2010 09:27:05 -1300</pubDate>
      <dc:publisher>stefankeirgordon</dc:publisher>
      <pingback:server>http://www.keirgordon.com/pingback.axd</pingback:server>
      <pingback:target>http://www.keirgordon.com/post.aspx?id=255f64df-2c43-4efd-9d73-beca99655cb6</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.keirgordon.com/trackback.axd?id=255f64df-2c43-4efd-9d73-beca99655cb6</trackback:ping>
      <wfw:comment>http://www.keirgordon.com/post/SharePoint-Raw-Text-Field-Control.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.keirgordon.com/syndication.axd?post=255f64df-2c43-4efd-9d73-beca99655cb6</wfw:commentRss>
    <feedburner:origLink>http://www.keirgordon.com/post.aspx?id=255f64df-2c43-4efd-9d73-beca99655cb6</feedburner:origLink></item>
    <item>
      <title>SharePoint Authenticated User Panel</title>
      <description>&lt;p&gt;When using SharePoint 2007 (MOSS) or SharePoint 2010 as a web content management system, it’s common to have pages show different content to logged in users and anonymous users.&lt;/p&gt;  &lt;p&gt;Sometimes you can achieve what you want via audiences or security trimming, but often I find it’s easier to use an overloaded panel that you can include in your page layouts or master pages.&amp;#160; You can then set public properties to determine who the content renders for (anonymous users, specific roles, etc).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;p&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; AuthenticatedPanel : Panel
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; ShowForAnonymous { get; set; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; ShowForAuthenticated { get; set; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ShowForRole { get; set; }

        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Render(HtmlTextWriter writer)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (ShowForAnonymous)
            {
                &lt;span class="kwrd"&gt;base&lt;/span&gt;.Render(writer);
                &lt;span class="kwrd"&gt;return&lt;/span&gt;;
            }

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (ShowForAuthenticated &amp;amp;&amp;amp; &lt;/p&gt;&lt;p&gt;                HttpContext.Current.User.Identity.IsAuthenticated)
            {
                &lt;span class="kwrd"&gt;base&lt;/span&gt;.Render(writer);
                &lt;span class="kwrd"&gt;return&lt;/span&gt;;
            }

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!String.IsNullOrEmpty(ShowForRole) &amp;amp;&amp;amp; &lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;                HttpContext.Current.User.IsInRole(ShowForRole))
            {
                &lt;span class="kwrd"&gt;base&lt;/span&gt;.Render(writer);
                &lt;span class="kwrd"&gt;return&lt;/span&gt;;
            }
            
        }
        
    }&lt;/p&gt;&lt;/blockquote&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;img src="http://feeds.feedburner.com/~r/StefanOnSharepoint/~4/Ykc_MhJxr4g" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/StefanOnSharepoint/~3/Ykc_MhJxr4g/post.aspx</link>
      <author>stefankeirgordon</author>
      <comments>http://www.keirgordon.com/post/SharePoint-Authenticated-User-Panel.aspx#comment</comments>
      <guid isPermaLink="false">http://www.keirgordon.com/post.aspx?id=240b396d-cc2c-45f3-b69b-229637491878</guid>
      <pubDate>Mon, 04 Jan 2010 09:22:02 -1300</pubDate>
      <dc:publisher>stefankeirgordon</dc:publisher>
      <pingback:server>http://www.keirgordon.com/pingback.axd</pingback:server>
      <pingback:target>http://www.keirgordon.com/post.aspx?id=240b396d-cc2c-45f3-b69b-229637491878</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.keirgordon.com/trackback.axd?id=240b396d-cc2c-45f3-b69b-229637491878</trackback:ping>
      <wfw:comment>http://www.keirgordon.com/post/SharePoint-Authenticated-User-Panel.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.keirgordon.com/syndication.axd?post=240b396d-cc2c-45f3-b69b-229637491878</wfw:commentRss>
    <feedburner:origLink>http://www.keirgordon.com/post.aspx?id=240b396d-cc2c-45f3-b69b-229637491878</feedburner:origLink></item>
    <item>
      <title>Enumerating Site Templates Via PowerShell</title>
      <description>&lt;p&gt;When I&amp;rsquo;m working on an extremely large SharePoint deployment, getting small code changes deployed to my dev environment to test things can be a slow process.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve started using PowerShell very frequently to verify the expected return from different objects before writing the code.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s how you can enumerate all the site templates installed:&lt;/p&gt;
&lt;div class="csharpcode" style="width: 78.93%; height: 94px;"&gt;
&lt;pre class="alt"&gt;&lt;p&gt;[System.Reflection.Assembly]::LoadFrom&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;    (&lt;span class="str"&gt;"..12 hive..\ISAPI\Microsoft.SharePoint.dll"&lt;/span&gt;);&lt;/p&gt;&lt;/blockquote&gt;&lt;/pre&gt;
&lt;pre&gt;$globalAdmin = New-Object &amp;ndash;TypeName &lt;/pre&gt;
&lt;blockquote&gt;
&lt;pre&gt;    &lt;span class="str"&gt;"Microsoft.SharePoint.Administration.SPGlobalAdmin"&lt;/span&gt;;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;pre class="alt"&gt;$webTemplates = $globalAdmin.VirtualServers[0].GetWebTemplates(&lt;span class="str"&gt;"1033"&lt;/span&gt;);&lt;/pre&gt;
&lt;pre&gt;$webTemplates | Select Name, Description;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;&lt;!-- .csharpcode, .csharpcode pre { 	font-size: small; 	color: black; 	font-family: consolas, "Courier New", courier, monospace; 	background-color: #ffffff; 	/*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt  { 	background-color: #f4f4f4; 	width: 100%; 	margin: 0em; } .csharpcode .lnum { color: #606060; } --&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/StefanOnSharepoint/~4/9lfpPuOoUEI" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/StefanOnSharepoint/~3/9lfpPuOoUEI/post.aspx</link>
      <author>StefanKeirGordon</author>
      <comments>http://www.keirgordon.com/post/Enumerating-Site-Templates-Via-PowerShell.aspx#comment</comments>
      <guid isPermaLink="false">http://www.keirgordon.com/post.aspx?id=98065f5a-3852-49b1-8d38-ca5790c04830</guid>
      <pubDate>Tue, 08 Dec 2009 02:29:00 -1300</pubDate>
      <dc:publisher>StefanKeirGordon</dc:publisher>
      <pingback:server>http://www.keirgordon.com/pingback.axd</pingback:server>
      <pingback:target>http://www.keirgordon.com/post.aspx?id=98065f5a-3852-49b1-8d38-ca5790c04830</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.keirgordon.com/trackback.axd?id=98065f5a-3852-49b1-8d38-ca5790c04830</trackback:ping>
      <wfw:comment>http://www.keirgordon.com/post/Enumerating-Site-Templates-Via-PowerShell.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.keirgordon.com/syndication.axd?post=98065f5a-3852-49b1-8d38-ca5790c04830</wfw:commentRss>
    <feedburner:origLink>http://www.keirgordon.com/post.aspx?id=98065f5a-3852-49b1-8d38-ca5790c04830</feedburner:origLink></item>
    <item>
      <title>Restricted Column Names for SharePoint Lists</title>
      <description>&lt;p&gt;Tried to create a column in my list called "UniqueId" today.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The column creates just fine, and works within the UI.&amp;nbsp; However, if you try to programtically update the value SPListItem["UniqueId"] -- You'll quickly get an error.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This is because SharePoint realized that UniqueId was actually already in-use by the system, and named your column something like UniqueId1.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;To find out what your actual field is named, go to edit your column and look at the end of the URL in the address bar.&amp;nbsp; You should see your field name there.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Cheers!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/StefanOnSharepoint/~4/Fx4Vr5RKKhE" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/StefanOnSharepoint/~3/Fx4Vr5RKKhE/post.aspx</link>
      <author>StefanKeirGordon</author>
      <comments>http://www.keirgordon.com/post/Restricted-Column-Names-for-SharePoint-Lists.aspx#comment</comments>
      <guid isPermaLink="false">http://www.keirgordon.com/post.aspx?id=17b41e4f-1d89-4f98-a98b-85fb96644375</guid>
      <pubDate>Tue, 25 Aug 2009 06:29:00 -1300</pubDate>
      <dc:publisher>StefanKeirGordon</dc:publisher>
      <pingback:server>http://www.keirgordon.com/pingback.axd</pingback:server>
      <pingback:target>http://www.keirgordon.com/post.aspx?id=17b41e4f-1d89-4f98-a98b-85fb96644375</pingback:target>
      <slash:comments>5</slash:comments>
      <trackback:ping>http://www.keirgordon.com/trackback.axd?id=17b41e4f-1d89-4f98-a98b-85fb96644375</trackback:ping>
      <wfw:comment>http://www.keirgordon.com/post/Restricted-Column-Names-for-SharePoint-Lists.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.keirgordon.com/syndication.axd?post=17b41e4f-1d89-4f98-a98b-85fb96644375</wfw:commentRss>
    <feedburner:origLink>http://www.keirgordon.com/post.aspx?id=17b41e4f-1d89-4f98-a98b-85fb96644375</feedburner:origLink></item>
    <item>
      <title>How do custom Role Providers work in SharePoint?</title>
      <description>&lt;p&gt;Lately I've been doing quite a bit of work with custom authorization scenarios in SharePoint, using the Microsoft Geneva framework for claims based security.&amp;nbsp; This means custom membership and role providers which are relatively complicated.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Understanding how SharePoint uses your role provider is critical to designing and debugging even a modestly complicated security scenario.&amp;nbsp; I've put together a flow-chart which hopefully helps explain when identities are created, what methods SharePoint calls, and just generally how your custom providers are used.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;This is a work in progress, and I will include how membership providers are leveraged during assigning of permissions at a later date.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Click the image to see it full size.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.keirgordon.com/image.axd?picture=WindowsLiveWriter/HowdocustomRoleProvidersworkinSharePoint_19C1/SharePoint_FBA_Login_2.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="SharePoint_FBA_Login" src="http://www.keirgordon.com/image.axd?picture=WindowsLiveWriter/HowdocustomRoleProvidersworkinSharePoint_19C1/SharePoint_FBA_Login_thumb.png" width="555" height="371"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/StefanOnSharepoint/~4/oMtANimLhVg" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/StefanOnSharepoint/~3/oMtANimLhVg/post.aspx</link>
      <author>stefankeirgordon</author>
      <comments>http://www.keirgordon.com/post/How-do-custom-Role-Providers-work-in-SharePoint.aspx#comment</comments>
      <guid isPermaLink="false">http://www.keirgordon.com/post.aspx?id=b5cc156d-1222-482a-8cd5-2ee58e3585f6</guid>
      <pubDate>Fri, 21 Aug 2009 19:50:28 -1300</pubDate>
      <dc:publisher>stefankeirgordon</dc:publisher>
      <pingback:server>http://www.keirgordon.com/pingback.axd</pingback:server>
      <pingback:target>http://www.keirgordon.com/post.aspx?id=b5cc156d-1222-482a-8cd5-2ee58e3585f6</pingback:target>
      <slash:comments>5</slash:comments>
      <trackback:ping>http://www.keirgordon.com/trackback.axd?id=b5cc156d-1222-482a-8cd5-2ee58e3585f6</trackback:ping>
      <wfw:comment>http://www.keirgordon.com/post/How-do-custom-Role-Providers-work-in-SharePoint.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.keirgordon.com/syndication.axd?post=b5cc156d-1222-482a-8cd5-2ee58e3585f6</wfw:commentRss>
    <feedburner:origLink>http://www.keirgordon.com/post.aspx?id=b5cc156d-1222-482a-8cd5-2ee58e3585f6</feedburner:origLink></item>
  </channel>
</rss>
