<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Look alive. Here comes a buzzard.</title>
	<atom:link href="http://glenc.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://glenc.wordpress.com</link>
	<description>Treading water in a sea of man-made confusion.</description>
	<lastBuildDate>Fri, 07 Sep 2007 16:16:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='glenc.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Look alive. Here comes a buzzard.</title>
		<link>http://glenc.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://glenc.wordpress.com/osd.xml" title="Look alive. Here comes a buzzard." />
	<atom:link rel='hub' href='http://glenc.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Oops.  I deleted the SSP Admin Site Collection&#8230;</title>
		<link>http://glenc.wordpress.com/2007/09/07/oops-i-deleted-the-ssp-admin-site-collection/</link>
		<comments>http://glenc.wordpress.com/2007/09/07/oops-i-deleted-the-ssp-admin-site-collection/#comments</comments>
		<pubDate>Fri, 07 Sep 2007 16:15:38 +0000</pubDate>
		<dc:creator>glen</dc:creator>
				<category><![CDATA[2007 Office]]></category>
		<category><![CDATA[Office System]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://blog.glenc.net/2007/09/07/oops-i-deleted-the-ssp-admin-site-collection/</guid>
		<description><![CDATA[Hey &#8211; we&#8217;ve all made mistakes.  We all know that &#8220;oh sh**&#8221; moment right after we realize what we&#8217;ve done.  Often times this occurs right after we click a friendly &#8220;Are you sure??&#8221; dialog.  Of course I&#8217;m sure &#8211; if I wasn&#8217;t sure I wouldn&#8217;t have chosen to do it in the first place!  Stupid [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenc.wordpress.com&amp;blog=274114&amp;post=86&amp;subd=glenc&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hey &#8211; we&#8217;ve all made mistakes.  We all know that &#8220;oh sh**&#8221; moment right after we realize what we&#8217;ve done.  Often times this occurs right after we click a friendly &#8220;Are you sure??&#8221; dialog.  Of course I&#8217;m sure &#8211; if I wasn&#8217;t sure I wouldn&#8217;t have chosen to do it in the first place!  Stupid computer.</p>
<p>Anyway, I recently had a situation where someone (honestly, in this case it wasn&#8217;t me) accidentally deleted the Site Collection for the SSP admin site (/ssp/admin).  Since this was for a SharePoint farm in production I really didn&#8217;t want to have to re-create the entire SSP but I couldn&#8217;t figure out how to just re-create the site collection itself.  I figured there had to be a site template for the site but since it didn&#8217;t show up in the Create Site Collection UI I went and looked on disk.  Sure enough, a site template exists for the SSP Admin site.  It&#8217;s called OSRV.</p>
<p>So to create a new SSP admin site, run this command line.</p>
<p><code>stsadm.exe -o createsite -url http://&lt;server&gt;:&lt;ssp_port&gt;/ssp/admin -owneremail &lt;email address&gt; -ownerlogin &lt;account&gt; -sitetemplate OSRV#0 -title "Shared Services Administration: &lt;your ssp name&gt;"</code></p>
<p>This might take a little while to complete, but it does eventually finish.</p>
<p>Next you need to edit the SSP to point to the recreated site.</p>
<p><code>stsadm.exe -o editssp -title "&lt;your ssp name&gt;" -sspadminsite http://&lt;server&gt;:&lt;ssp_port&gt;/ssp/admin</code></p>
<p>That&#8217;s it.  You should be back up and running.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/glenc.wordpress.com/86/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/glenc.wordpress.com/86/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/glenc.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/glenc.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/glenc.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/glenc.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/glenc.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/glenc.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/glenc.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/glenc.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/glenc.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/glenc.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/glenc.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/glenc.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/glenc.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/glenc.wordpress.com/86/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenc.wordpress.com&amp;blog=274114&amp;post=86&amp;subd=glenc&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://glenc.wordpress.com/2007/09/07/oops-i-deleted-the-ssp-admin-site-collection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfde482abc0b938a96e0cffe6e5c627e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">glen</media:title>
		</media:content>
	</item>
		<item>
		<title>SharePoint?  Meet Python</title>
		<link>http://glenc.wordpress.com/2007/08/12/sharepoint-meet-python/</link>
		<comments>http://glenc.wordpress.com/2007/08/12/sharepoint-meet-python/#comments</comments>
		<pubDate>Mon, 13 Aug 2007 03:57:12 +0000</pubDate>
		<dc:creator>glen</dc:creator>
				<category><![CDATA[2007 Office]]></category>
		<category><![CDATA[Articles]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://blog.glenc.net/2007/08/12/sharepoint-meet-python/</guid>
		<description><![CDATA[Ever have a need to quickly script some administrative task relating to SharePoint? Ever wish there was more you could do with STSADM? Ever wish you had an interactive console for exploring the object model and testing various methods or properties? Well Iron Python is your answer. In this short article I&#8217;ll show you how [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenc.wordpress.com&amp;blog=274114&amp;post=85&amp;subd=glenc&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ever have a need to quickly script some administrative task relating to SharePoint?  Ever wish there was more you could do with STSADM?  Ever wish you had an interactive console for exploring the object model and testing various methods or properties?  Well <a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython" target="_blank">Iron Python </a>is your answer.  In this short article I&#8217;ll show you how to get up and running with Iron Python and SharePoint.  I&#8217;ll also show you a few scripts that will give you some insight into the potential power of this extremely useful combination.<span id="more-85"></span></p>
<p>About a year and a half ago I was talking with an associate and he mentioned Iron Python and how it could apply to SharePoint.  At the time I was working on other projects but I filed it away as something to play with when I had time.  Once I finally got around to it I started to realize just how useful this combination is.  I won&#8217;t go into the details of what Iron Python is specifically, you can read about it on <a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython" target="_blank">the site</a>.  But essentially you get a powerful scripting language with full access to the SharePoint object model.  On top of that, Python has an interactive console so it&#8217;s easy to load up an object, poke around its properties, and inspect exactly what each object does.</p>
<p>Here&#8217;s a quick example of a Python script enumerating all sites in a site collection and printing out the URL and root web name:<br />
<code><br />
webapp = SPWebApplication.Lookup(Uri("http://mysite"))<br />
for site in webapp.Sites:<br />
&nbsp;&nbsp;&nbsp;&nbsp;print '%-30s - %s' % (site.Url, site.RootWeb.Title)<br />
</code></p>
<p>Ever need to quickly get the internal name of a particular field?<br />
<code><br />
list = SPSite("http://mysite").RootWeb.Lists["Documents"]<br />
for field in list.Fields:<br />
&nbsp;&nbsp;&nbsp;&nbsp;print field.InternalName<br />
</code></p>
<p>Okay &#8211; these two examples might be fairly simplistic, but the point is Iron Python can be a much quicker and easier way of doing things with the SharePoint object model that you would normally have to write a custom console application for.</p>
<h2>Getting Started</h2>
<p>First, download Iron Python and install it on your SharePoint server.  Next, fire up a console and type &#8220;<strong>ipy</strong>&#8220;.  This will launch the Iron Python interactive console.</p>
<p>Next, type the following lines:<br />
<code><br />
&gt;&gt;&gt; import clr<br />
&gt;&gt;&gt; clr.AddReference("Microsoft.SharePoint")<br />
&gt;&gt;&gt; from Microsoft.SharePoint import *<br />
</code></p>
<p>Let&#8217;s look at what we&#8217;ve done.  In Python the &#8220;import&#8221; statement is like the &#8220;using&#8221; statement in C#.  It tells the interpreter that we want to use a particular module.  In this case, we&#8217;re importing the interface to the .NET Common Language Runtime.</p>
<p>Next, clr.AddReference() is used to tell Iron Python that we want to load the Microsoft.SharePoint assembly.  This same approach can be used to load any SharePoint assembly (or any .NET assembly for that matter).  Finally, the last line imports all objects in the Microsoft.SharePoint namespace.  This only imports objects in the Microsoft.SharePoint namespace.  If you want to load objects from another namespace, you&#8217;ll need to import those as well.</p>
<p>At this point, you&#8217;re ready to go.  Try out these lines to explore the object model.<br />
<code><br />
&gt;&gt;&gt; site = SPSite("http://myserver")<br />
&gt;&gt;&gt; for web in site.AllWebs:<br />
. . . &nbsp;&nbsp;&nbsp;&nbsp;print web.Title<br />
</code></p>
<p><code><br />
&gt;&gt;&gt; list = site.RootWeb.Lists["Documents"]<br />
&gt;&gt;&gt; list.Title = "Python Documents"<br />
&gt;&gt;&gt; list.Update()<br />
&gt;&gt;&gt; print list.Title<br />
</code></p>
<h2>Unit Testing and Debugging</h2>
<p>The interactive console can be extremely useful for unit testing your code as well as debugging.  Since I&#8217;ve started using Iron Python I&#8217;ve often kept a console up while working on whatever application I&#8217;m building.  It&#8217;s come in extremely handy when you just want to look up a particular method or see exactly what the format is of a particular piece of data.  But another useful aspect is that it can be used to quickly test out the code that you write.</p>
<p>Iron Python can load any .NET assembly.  So if you want to test out a method you&#8217;ve just written, load it up in the Iron Python interactive console and test it out.  Building a real unit testing environment can be difficult in SharePoint because of the long setup and teardown times.  This can be a happy compromise between a full on unit testing setup.</p>
<h2>Cooking with Gas</h2>
<p>One thing I hate is tech sites that show elementary examples and don&#8217;t really get into the complexity that is sure to arise once you move past &#8220;Hello World&#8221;.  So I&#8217;ve uploaded a sample script that can be used to back up all sites in a given web application.  This example combines a number of concepts such as:</p>
<ul>
<li>running stsadm commands from python</li>
<li>importing parts of the .NET framework into your scripts</li>
<li>functions as objects in python</li>
</ul>
<p><a href="http://files.glenc.net/articles/python/backupsites.py">Download the script here.</a></p>
<h2>Conclusion</h2>
<p>I&#8217;ve been very impressed by the power of Iron Python and what means for us SharePoint developers.  My prediction is that by using scripting tools like Iron Python, developers and administrators will begin to write scripts to automate a number of common SharePoint activities.  Personally I&#8217;d really like to see some of the following:</p>
<ul>
<li>Mass check-in/publish scripts</li>
<li>Scripts to upload a given web part to every page in a site</li>
<li>Data/content migration</li>
</ul>
<h2>Reference</h2>
<ul>
<li><a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython" target="_blank">Iron Python website</a> &#8211; get the code and learn how to use it</li>
<li><a href="http://docs.python.org/tut/tut.html" target="_blank">Python Tutorial</a> &#8211; very valuable introduction to the Python language</li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/glenc.wordpress.com/85/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/glenc.wordpress.com/85/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/glenc.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/glenc.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/glenc.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/glenc.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/glenc.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/glenc.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/glenc.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/glenc.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/glenc.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/glenc.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/glenc.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/glenc.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/glenc.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/glenc.wordpress.com/85/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenc.wordpress.com&amp;blog=274114&amp;post=85&amp;subd=glenc&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://glenc.wordpress.com/2007/08/12/sharepoint-meet-python/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfde482abc0b938a96e0cffe6e5c627e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">glen</media:title>
		</media:content>
	</item>
		<item>
		<title>Site Templates</title>
		<link>http://glenc.wordpress.com/2007/06/20/site-templates/</link>
		<comments>http://glenc.wordpress.com/2007/06/20/site-templates/#comments</comments>
		<pubDate>Wed, 20 Jun 2007 21:11:15 +0000</pubDate>
		<dc:creator>glen</dc:creator>
				<category><![CDATA[Office System]]></category>
		<category><![CDATA[Reference]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://blog.glenc.net/2007/06/20/site-templates/</guid>
		<description><![CDATA[I hate searching for this stuff every time I need it.  So here is a list of SharePoint site templates and their friendly names. Friendly Name Template Team Site STS#0 Blank Site STS#1 Document Workspace STS#2 Wiki Site WIKI#0 Blog BLOG#0 Basic Meeting Workspace MPS#0 Blank Meeting Workspace MPS#1 Decision Meeting Workspace MPS#2 Social Meeting [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenc.wordpress.com&amp;blog=274114&amp;post=83&amp;subd=glenc&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I hate searching for this stuff every time I need it.  So here is a list of SharePoint site templates and their friendly names.</p>
<table>
<tr>
<td><strong>Friendly Name</strong></td>
<td><strong>Template</strong></td>
</tr>
<tr>
<td>Team Site</td>
<td>STS#0</td>
</tr>
<tr>
<td>Blank Site</td>
<td>STS#1</td>
</tr>
<tr>
<td>Document Workspace</td>
<td>STS#2</td>
</tr>
<tr>
<td>Wiki Site</td>
<td>WIKI#0</td>
</tr>
<tr>
<td>Blog</td>
<td>BLOG#0</td>
</tr>
<tr>
<td>Basic Meeting Workspace</td>
<td>MPS#0</td>
</tr>
<tr>
<td>Blank Meeting Workspace</td>
<td>MPS#1</td>
</tr>
<tr>
<td>Decision Meeting Workspace</td>
<td>MPS#2</td>
</tr>
<tr>
<td>Social Meeting Workspace</td>
<td>MPS#3</td>
</tr>
<tr>
<td>Multipage Meeting Workspace</td>
<td>MPS#4</td>
</tr>
<tr>
<td>Document Center</td>
<td>BDR#0</td>
</tr>
<tr>
<td>Records Center</td>
<td>OFFILE#1</td>
</tr>
<tr>
<td>Personalization Site</td>
<td>SPSMSITE#0</td>
</tr>
<tr>
<td>Site Directory</td>
<td>SPSITES#0</td>
</tr>
<tr>
<td>Report Center</td>
<td>SPREPORTCENTER#0</td>
</tr>
<tr>
<td>Search Center with Tabs</td>
<td>SRCHCEN#0</td>
</tr>
<tr>
<td>Search Center</td>
<td>SRCHCENTERLITE#0</td>
</tr>
<tr>
<td>Publishing Site</td>
<td>CMSPUBLISHING#0</td>
</tr>
<tr>
<td>Publishing Site with Workflow</td>
<td>BLANKINTERNET#2</td>
</tr>
<tr>
<td>News Site</td>
<td>SPSNHOME#0</td>
</tr>
</table>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/glenc.wordpress.com/83/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/glenc.wordpress.com/83/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/glenc.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/glenc.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/glenc.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/glenc.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/glenc.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/glenc.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/glenc.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/glenc.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/glenc.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/glenc.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/glenc.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/glenc.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/glenc.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/glenc.wordpress.com/83/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenc.wordpress.com&amp;blog=274114&amp;post=83&amp;subd=glenc&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://glenc.wordpress.com/2007/06/20/site-templates/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfde482abc0b938a96e0cffe6e5c627e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">glen</media:title>
		</media:content>
	</item>
		<item>
		<title>SharePoint Load Testing Tools &#8211; Lessons Learned</title>
		<link>http://glenc.wordpress.com/2007/06/20/sharepoint-load-testing-tools-lessons-learned/</link>
		<comments>http://glenc.wordpress.com/2007/06/20/sharepoint-load-testing-tools-lessons-learned/#comments</comments>
		<pubDate>Wed, 20 Jun 2007 19:13:59 +0000</pubDate>
		<dc:creator>glen</dc:creator>
				<category><![CDATA[Office System]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://blog.glenc.net/2007/06/20/sharepoint-load-testing-tools-lessons-learned/</guid>
		<description><![CDATA[I recently did some load testing for a client and needed to populate our environment with sample data to simulate real-world usage.  This was my first occasion to use the tools released on Codeplex for this &#8211; WSSDW and MOSSDW.  As I was stumbling through the semi-documentation and samples that didn&#8217;t really work I started [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenc.wordpress.com&amp;blog=274114&amp;post=82&amp;subd=glenc&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I recently did some load testing for a client and needed to populate our environment with sample data to simulate real-world usage.  This was my first occasion to use the tools released on Codeplex for this &#8211; <a target="_blank" href="http://www.codeplex.com/sptdatapop">WSSDW and MOSSDW</a>.  As I was stumbling through the semi-documentation and samples that didn&#8217;t really work I started jotting down some notes.  This is a collection of these lessons learned &#8211; hopefully they&#8217;ll help someone else avoid some of the &#8220;WTF&#8221; moments I had <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Download both WSSDW AND MOSSDW.</strong><br />
I ran into a ton of problems when I started because I only downloaded MOSSDW.  The samples don&#8217;t work without WSSDW &#8211; WSSDWLib.dll to be exact.  So download them both and install them in the same folder. </p>
<p><strong>You need to &#8220;Unblock&#8221; the help files (chm) before you can read them.</strong><br />
After downloading the help files, right-click, choose properties, then click <strong>Unblock</strong>.</p>
<p><strong>Don&#8217;t bother trying to delete sample content. </strong><br />
The tool just doesn&#8217;t work very well.  You&#8217;ll end up with an error and a bunch of left over content.  The best thing to do is just to create your sample site hierarchy under a single &#8220;Test&#8221; web and then just delete the Test web manually (or with stsadm) each time.  Note, you may have to use the Manage Site Content and Structure UI in MOSS so that you can delete webs with subwebs.</p>
<p><strong>Creating a publishing page and publishing it is a two step operation.</strong><br />
This just seems weird so maybe I am missing something.  But if you want to create a publishing page, add content to that page, and publish it, you need two XML node actions.  The first node creates the page and adds content.  The second node publishes it.  For example:</p>
<p><code style="font-size:8pt;">&lt;TestPage Name="Page1.aspx" PageLayout="ArticleLeft.aspx" openmode="modifyexisting"&gt;<br />
  &lt;TestHtmlFieldValue Name="Page Content" HtmlFile="MOSS_Intro.htm" openmode="modifyexisting"/&gt;<br />
&lt;/TestPage&gt;<br />
&lt;TestPage Name="Page1.aspx" openmode="modifyexisting" Status="Published" /&gt;</code></p>
<p>You would assume you could just add the Status=&#8221;Published&#8221; bit to the first TestPage node.  But what happens is that the status gets set before the TestHtmlFieldValue node is parsed &#8211; so this action fails because the page isn&#8217;t checked out.  *rolls eyes*</p>
<p><strong>Mixing and matching MOSS tags and WSS tags has some issues.</strong><br />
If you&#8217;re going to mix and match MOSS and WSS tags, be sure to use WSS tags to walk your web hierarchy.  The &lt;TestArea&gt; MOSS tag won&#8217;t provide context to children such as &lt;Lists&gt;.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/glenc.wordpress.com/82/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/glenc.wordpress.com/82/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/glenc.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/glenc.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/glenc.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/glenc.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/glenc.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/glenc.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/glenc.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/glenc.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/glenc.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/glenc.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/glenc.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/glenc.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/glenc.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/glenc.wordpress.com/82/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenc.wordpress.com&amp;blog=274114&amp;post=82&amp;subd=glenc&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://glenc.wordpress.com/2007/06/20/sharepoint-load-testing-tools-lessons-learned/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfde482abc0b938a96e0cffe6e5c627e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">glen</media:title>
		</media:content>
	</item>
		<item>
		<title>Agile is the only way to build SharePoint applications.</title>
		<link>http://glenc.wordpress.com/2007/06/15/agile-is-the-only-way-to-build-sharepoint-applications/</link>
		<comments>http://glenc.wordpress.com/2007/06/15/agile-is-the-only-way-to-build-sharepoint-applications/#comments</comments>
		<pubDate>Fri, 15 Jun 2007 21:21:11 +0000</pubDate>
		<dc:creator>glen</dc:creator>
				<category><![CDATA[Office System]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://blog.glenc.net/2007/06/15/agile-is-the-only-way-to-build-sharepoint-applications/</guid>
		<description><![CDATA[Agile is THE ONLY way to build SharePoint applications.  Pure and simple.  If you think otherwise, sorry.  You are wrong. Oh&#8230; you wanted an explanation?  Okay &#8211; here you go. I could bore you with a bunch of background on Agile and what&#8217;s good about it, what the process is, what the core concepts are, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenc.wordpress.com&amp;blog=274114&amp;post=81&amp;subd=glenc&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a target="_blank" href="http://en.wikipedia.org/wiki/Agile_software_development">Agile</a> is THE ONLY way to build SharePoint applications.  Pure and simple.  If you think otherwise, sorry.  You are wrong.</p>
<p>Oh&#8230; you wanted an explanation?  Okay &#8211; here you go.</p>
<p>I could bore you with a bunch of <a target="_blank" href="http://en.wikipedia.org/wiki/Agile_software_development#Principles_behind_agile_methods_.E2.80.94_The_Agile_Manifesto">background on Agile</a> and what&#8217;s good about it, what the process is, what the core concepts are, etc.  But I won&#8217;t.  If I did that we would just go back and forth forever on the benefits/shortcomings of Agile development.  Instead I&#8217;ll get right to the point.</p>
<p>You do not know enough about SharePoint to fully spec a solution end-to-end.</p>
<p>Let me repeat that.  YOU (yes you), DO NOT know enough about SharePoint.  I know you think you do.  I know you think you know how everything works, how everything fits together, but you don&#8217;t.  And you know what?  Nobody does.</p>
<p>There you go.  Any application you want to build that has any level of complexity just cannot be fully designed up front.  There are too many unknowns at every level in the product.  Too many assumptions need to be made about what <em>should</em> work.  And we all know that there are dozens of unanticipated gotchas waiting around every turn.</p>
<p>SharePoint 2007 is a huge product.  It has a ton of little nooks and crannys each providing great functionality, but also hiding pure WTF, &#8220;why did they do it that way&#8221;, suprises.  SharePoint is just too big and too new for anybody to know it intimately enough to fully define a solution end-to-end without actually doing some trial and error implementation.  So if you&#8217;re doing trial and error implementation anyway, why not include the client and make them short iterations?</p>
<p>Okay &#8211; a few more quick benefits to this approach:</p>
<ol>
<li>Don&#8217;t have to spend time documenting out of the box functionality that you don&#8217;t have control over anyway</li>
<li>Wireframes and UI designs are less critical because you can &#8220;design&#8221; on the fly using the out of the box UI &#8211; then identify the gaps where additional design elements or controls are needed</li>
<li>End up with less code/customization because once users see it out of the box, they quickly reach a &#8220;good enough&#8221; point.  You can focus your customizations where where adds real value.</li>
<li>The very nature of letting the user touch and feel the solution will change their requirements.  They will realize that certain things are less important than they thought while others are more important.  This is true with any application development but the fact that you can do so much out of the box in SharePoint means you can get to this point very very quickly.</li>
</ol>
<p>So there you go.  Good luck.  We have a tough fight ahead of us convincing people that SharePoint is different enough to warrant throwing old waterfall methodologies away and trying something new.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/glenc.wordpress.com/81/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/glenc.wordpress.com/81/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/glenc.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/glenc.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/glenc.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/glenc.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/glenc.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/glenc.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/glenc.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/glenc.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/glenc.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/glenc.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/glenc.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/glenc.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/glenc.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/glenc.wordpress.com/81/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenc.wordpress.com&amp;blog=274114&amp;post=81&amp;subd=glenc&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://glenc.wordpress.com/2007/06/15/agile-is-the-only-way-to-build-sharepoint-applications/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfde482abc0b938a96e0cffe6e5c627e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">glen</media:title>
		</media:content>
	</item>
		<item>
		<title>Motivation</title>
		<link>http://glenc.wordpress.com/2007/05/01/motivation/</link>
		<comments>http://glenc.wordpress.com/2007/05/01/motivation/#comments</comments>
		<pubDate>Wed, 02 May 2007 01:01:02 +0000</pubDate>
		<dc:creator>glen</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.glenc.net/2007/05/01/motivation/</guid>
		<description><![CDATA[I’ve got good news and bad news. First the good news: as a manager, having motivated employees is completely within your control. It doesn’t matter how big your budget is, how many employees you have, or how high in the corporate food chain you are. It is absolutely within your power to have motivated and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenc.wordpress.com&amp;blog=274114&amp;post=79&amp;subd=glenc&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I’ve got good news and bad news. First the good news: as a manager, having motivated employees is completely within your control. It doesn’t matter how big your budget is, how many employees you have, or how high in the corporate food chain you are. It is absolutely within your power to have motivated and enthusiastic employees.</p>
<p>Now the bad news: having motivated employees is your responsibility – yours and yours alone. It’s not the responsibility of the HR department or some disconnected “Chief Culture Officer”. It is your responsibility. And it gets worse – if you want to motivate your employees, you have to mean it.</p>
<p>So, before you read any further you need to ask yourself a question: do you feel motivated? Do you want to motivate your employees? Do you want to motivate your employees because you want them to feel the same commitment and passion you do? Or because you want to squeeze a few more hours out of their already long work day?</p>
<p>Motivation is all about communication and vision. It’s about transferring your own motivation and drive to your employees. If you don’t believe in the vision, then no amount of “employee retreats” or “team building exercises” are going to make a difference.</p>
<p>So again, ask yourself if you really feel it. If you don’t, it might be a good idea to step aside so someone who is truly motivated can take the reins. On the other hand, if you are motivated and are looking for some tools to help you transfer that motivation to your team, please keep reading.</p>
<p>Still here? Okay well either you’re lying to yourself, you’re really bored and are reading anyway, or you really do feel enthusiastic and want to pass some of that along. Hopefully it’s the latter, but I’m not going to be picky.</p>
<p>I’ve broken this article into four parts:</p>
<ol>
<li><a href="/2007/05/01/motivation-part-1-being-available/">Being Available</a></li>
<li>Empathize, to a point</li>
<li>Commitments</li>
<li>General conduct</li>
</ol>
<p><a href="/2007/05/01/motivation-part-1-being-available/">Part 1 (Being Available)</a> is ready to go now. The other 3 parts will be posted as my time allows.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/glenc.wordpress.com/79/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/glenc.wordpress.com/79/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/glenc.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/glenc.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/glenc.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/glenc.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/glenc.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/glenc.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/glenc.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/glenc.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/glenc.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/glenc.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/glenc.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/glenc.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/glenc.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/glenc.wordpress.com/79/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenc.wordpress.com&amp;blog=274114&amp;post=79&amp;subd=glenc&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://glenc.wordpress.com/2007/05/01/motivation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfde482abc0b938a96e0cffe6e5c627e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">glen</media:title>
		</media:content>
	</item>
		<item>
		<title>Motivation &#8211; Part 1: Being Available</title>
		<link>http://glenc.wordpress.com/2007/05/01/motivation-part-1-being-available/</link>
		<comments>http://glenc.wordpress.com/2007/05/01/motivation-part-1-being-available/#comments</comments>
		<pubDate>Wed, 02 May 2007 01:00:44 +0000</pubDate>
		<dc:creator>glen</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.glenc.net/2007/05/01/motivation-part-1-being-available/</guid>
		<description><![CDATA[Being Available Or, how I learned to get up off my ass and walk around a lot As I said up front, motivation has a lot to do with transferring your enthusiasm to your employees. But in order to do this effectively you have to be genuine about it. If you aren’t feeling it, you’ll [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenc.wordpress.com&amp;blog=274114&amp;post=80&amp;subd=glenc&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Being Available</strong><br />
<em>Or, how I learned to get up off my ass and walk around a lot</em></p>
<p>As I said up front, motivation has a lot to do with transferring your enthusiasm to your employees. But in order to do this effectively you have to be genuine about it. If you aren’t feeling it, you’ll end up doing more harm than good. Employees only need a few “fake” ra ra sessions to start seeing everything you do in that light. So the best thing to do if you aren’t feeling the enthusiasm is to do nothing. Doing nothing is much better than doing something in this case because that something is likely to cause damage that is very difficult to undo.<span id="more-80"></span></p>
<p>On the other hand, when you really are feeling it, you want to share it right then and there. When an employee has done great work, praise that work immediately. When the company just landed an awesome new opportunity, tell everyone right then and there.</p>
<p>I’ve always felt that transferring your enthusiasm is much more effective when done in a casual and spontaneous way. When employees see you being enthusiastic in non-orchestrated settings, it comes across as much more genuine. This is why I says be available – walk around a lot – maximize your in person time with your employees. The more time you have with them, the more opportunities you will have to communicate new ideas, be exposed to their great work, and generally check in on how they are doing.</p>
<p>This is such a small and easy thing it’s amazing to me how many people don’t do it. They think that managing people is sitting at their desk, reviewing reports, answering emails, and conducting one on ones. Why should you have to wait two weeks to have your appointed one on one when you can walk over to their desk and do it right now?</p>
<p>A few words on employee praise. Employees want to feel good about the work they are doing. When they feel like they are doing great work, they want to be recognized for that. However, many employees aren’t necessarily into the whole self-promotion thing and thus feel somewhat uncomfortable tooting their own horn. By walking around a lot and being generally available you put yourself in a position to see their great work first hand.</p>
<p>The most effective praise is tied directly to an individual accomplishment. Being able to walk up to someone and say “hey – what you’re doing right now is great” is so much more effective than a disconnected “you’re doing a great job here” comment. I think this is partially because the latter doesn’t really have any insight into what the employee is doing. It fosters comments and thoughts like “he doesn’t really know what I do” or “she has no idea how challenging this is”. When you praise an employee immediately for a specific accomplishment you have witnessed, it tells the employee you know exactly what they’re doing, have seen the great work, and think it’s great. It’s a much more genuine form of praise. And being genuine is what it’s all about.</p>
<p>Another extremely valuable insight you gain from walking around and being available is the pulse of the organization. Are people heads down working with little or no communication? Not necessarily a healthy organization. Are they whispering in groups? Lookout for turnover. Are they happy and joking around but generally focused? Hooray for you! This is the kind of insight that is impossible to discern from reports, company meetings, etc. These insights require your intuition as a manager who knows his or her organization and knows when it’s running smooth on all 8 cylinders.</p>
<p>There is some risk here and you need to be aware of it. Employees should not see your presence as a signal to get back to work. “Uh oh, here comes the boss. If he sees us talking he’s gonna be pissed!” To a certain extent there will always be an element of that – it’s inevitable. But there are some things you can do to minimize this.</p>
<ol>
<li>Don’t publicly call people out when you see behavior you think should be addressed. Of course if you see something that is clearly wrong or unethical you must address it immediately. But for minor things like surfing the web, joking around the water cooler with colleagues, etc, let it slide. If you pick up a pattern and think it needs to be addressed, talk to people in private later. It is important to disassociate any criticism from your presence in the office. It is also important to avoid giving employees who are performing well the impression that they’re in the same boat with the slackers.</li>
<li>Join in the conversation. Not all manager/employee conversation needs to be about work. If you join in a non-work related conversation, or better yet initiate one yourself, you come off as non-threatening.</li>
</ol>
<p>Two quick pointes about item number two above. Like everything else we’ve talked about you must be genuine. Don’t try to be something you’re not. If you try and join in on a conversation that you have absolutely no background in, you’re going to come across phony. We’ve all seen The Office and it’s painful. You don’t want to be Steve Carrell in your own office. This can be tough when there is a significant age difference between you and your employees (oh please no stories about how it was in your day).</p>
<p>The second point is this. Keep it short and sweet. This is both for your sake and your employees. On your hand, you don’t want to foster a culture that regularly takes one hour digressions into the geo-political state of various 3rd world countries and the parallels between that and modern capitalist trends that will eventually result in our ultimate and utter demise.</p>
<p>And for your employees, remember that you are still their manager and to a certain extent they will feel compelled to participate with you in these discussions. They will feel obligated to laugh at your jokes, agree with your opinions, and continue the conversation until you indicate that it’s finished. From their point of view, there’s nothing worse than to have what used to be an interesting conversation crushed by some old guy who doesn’t “get it”, and then have that drag on for 20 agonizing minutes of hell. So like many things, this is a balancing act. Participate enough so as to be non-threatening, but don’t go overboard.</p>
<p>The funny thing about this is that too little of this will make people get back to work when they see you coming because they think you don’t want them socializing. Too much will have the same effect but because they want to avoid a 30 minute conversation about something they don’t care about <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>So in summary, making yourself regularly and informally available to your employees is an extremely powerful tool for motivation. By maximizing your face time with your employees you ensure that you will have as many opportunities as possible to genuinely transfer your own enthusiasm. You put yourself in a position to regularly and naturally praise them for their accomplishments, and you gain valuable insights into the overall temperament of your organization.</p>
<p>And all of this can be achieved by simply getting up off your ass, putting away those damn reports, and walking around saying “how’s it going?”</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/glenc.wordpress.com/80/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/glenc.wordpress.com/80/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/glenc.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/glenc.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/glenc.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/glenc.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/glenc.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/glenc.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/glenc.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/glenc.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/glenc.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/glenc.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/glenc.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/glenc.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/glenc.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/glenc.wordpress.com/80/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenc.wordpress.com&amp;blog=274114&amp;post=80&amp;subd=glenc&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://glenc.wordpress.com/2007/05/01/motivation-part-1-being-available/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfde482abc0b938a96e0cffe6e5c627e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">glen</media:title>
		</media:content>
	</item>
		<item>
		<title>Calling SharePoint Web Services from Javascript</title>
		<link>http://glenc.wordpress.com/2007/04/20/calling-sharepoint-web-services-from-javascript/</link>
		<comments>http://glenc.wordpress.com/2007/04/20/calling-sharepoint-web-services-from-javascript/#comments</comments>
		<pubDate>Sat, 21 Apr 2007 03:40:15 +0000</pubDate>
		<dc:creator>glen</dc:creator>
				<category><![CDATA[Office System]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://blog.glenc.net/2007/04/20/calling-sharepoint-web-services-from-javascript/</guid>
		<description><![CDATA[I&#8217;m on a mission. And that mission is to build SharePoint apps without dropping code on the server. Why would anyone want to do this? Well, in many enterprise or hosted environments you don&#8217;t have the ability to drop DLLs into a shared SharePoint environment. This has often limited the types of applications we can [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenc.wordpress.com&amp;blog=274114&amp;post=78&amp;subd=glenc&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m on a mission.  And that mission is to build SharePoint apps without dropping code on the server.  Why would anyone want to do this?  Well, in many enterprise or hosted environments you don&#8217;t have the ability to drop DLLs into a shared SharePoint environment.  This has often limited the types of applications we can build to out of the box features or SharePoint designer.  But with some Javascript and the WSS web services, we can build a more complex app all with <a href="http://en.wikipedia.org/wiki/AJAX" target="_blank">AJAX</a>y goodness.</p>
<p>This code sample uses the <a href="http://www.prototypejs.org/" target="_blank">Prototype</a> Javascript library.  When you see <code>Ajax.Request</code>, that&#8217;s using prototype&#8217;s Ajax framework.  The great thing about prototype is that everything is cross-browser compatible.</p>
<p>First we need some code that formats a simple <a href="http://en.wikipedia.org/wiki/SOAP" target="_blank">SOAP</a> envelope.  SOAP is the required protocol for communicating with the SharePoint web service.</p>
<pre>
<code>
var Soap = {
  createEnvelope: function(action, ns, parameters)
  {
    var soap = '&lt;?xml version="1.0" encoding="utf-8"?&gt;
        &lt;soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"&gt;
        &lt;soap12:Body&gt;';
    soap += '&lt;' + action + ' xmlns="' + ns + '"&gt;';
    soap += Soap.__parseParameters(parameters);
    soap += '&lt;/' + action + '&gt;&lt;/soap12:Body&gt;&lt;/soap12:Envelope&gt;';
    return soap;
  },

  __parseParameters: function(parameters)
  {
    var params = "";
    if (typeof parameters == 'object')
    {
      // check if we were provided an array or an object
      if (typeof parameters.push == 'function')
      {
        for (var i = 0, length = parameters.length; i &lt; length; i += 2)
        {
          params += "&lt;" + parameters[i] + "&gt;" + parameters[i+1] +
              "&lt;/" + parameters[i] + "&gt;";
        }
      }
      else
      {
        $H(parameters).each(
          function(pair)
          {
            params += "&lt;" + pair.key + "&gt;" + pair.value + "&lt;/" + pair.key + "&gt;";
          });
      }
    }
    return params;
  }
}
</code></pre>
<p>Okay, so now we can make a SOAP envelope as simple as this:</p>
<pre><code>var mySoap = Soap.createEnvelope(
  "MyAction",
  "http://schemas.microsoft.com/sharepoint/soap/",
  { param1: "value", param2: "value" });
</code></pre>
<p>Simple enough.  Now let&#8217;s call a SharePoint web service.  We&#8217;ll use the Lists web service and create a new list item.  The UpdateListItems method allows us to pass in some XML defining the items to create.  So first I&#8217;m going to build that XML.</p>
<pre><code>var batch = '
  &lt;Batch OnError="Continue"&gt;
    &lt;Method ID="1" Cmd="New"&gt;
      &lt;Field Name="ID"&gt;New&lt;/Field&gt;
      &lt;Field Name="Title"&gt;Hello World&lt;/Field&gt;
    &lt;/Method&gt;
  &lt;/Batch&gt;';
</code></pre>
<p>Next we&#8217;ll call the web service using the Ajax.Request object:</p>
<pre><code>// build parameter object
var parameters =
{
  listName: "My List",
  updates: batch       // xml created earlier
}

// create soap envelope
var soap = Soap.createEnvelope(
  "UpdateListItems",
  "http://schemas.microsoft.com/sharepoint/soap/",
  parameters);

// call web service
new Ajax.Request(
  "http://myserver/mysite/_vti_bin/lists.asmx",
  {
    method: "post",
    contentType: "application/soap+xml",
    postBody: soap,
    onSuccess: function(transoprt) { alert("Success: " + transport.responseText); },
    onFailure: function(transport) { alert("Error: " + transport.responseText); }
  });
</code></pre>
<p>If all goes according to plan, I should have a new list item with the title of &#8220;Hello World&#8221; in the list called &#8220;My List&#8221;.</p>
<p>A couple of points about the javascript above:</p>
<ol>
<li>It&#8217;s certainly not the greatest Javascript in the world.  I plan to clean it up and hopefully release a Javascript library for working with all of SharePoint&#8217;s web services.</li>
<li>The user&#8217;s browser must already be authenticated for this to work.  Prototype doesn&#8217;t have a way to pass credentials to the web service so make sure you run this from a machine joined to the same domain as the sharepoint site.  Ideally this is running within a sharepoint site so that should take care of the authentication problem.</li>
<li>FireFox has an issue because it doesn&#8217;t pass domain credentials automatically.  This makes debugging hard from your workstation, but if it&#8217;s running on a SharePoint site where the user has already authenticated, it works fine.</li>
<li>I cheat in the example above and break strings onto multiple lines.  That&#8217;s for the purpose of formatting only.  If you copy and paste this code directly it won&#8217;t work.</li>
</ol>
<p>You can download the code here:  <a href="http://files.glenc.net/articles/wsswebservice/wsswebservices.js">wsswebservice.js</a>.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/glenc.wordpress.com/78/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/glenc.wordpress.com/78/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/glenc.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/glenc.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/glenc.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/glenc.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/glenc.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/glenc.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/glenc.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/glenc.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/glenc.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/glenc.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/glenc.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/glenc.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/glenc.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/glenc.wordpress.com/78/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenc.wordpress.com&amp;blog=274114&amp;post=78&amp;subd=glenc&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://glenc.wordpress.com/2007/04/20/calling-sharepoint-web-services-from-javascript/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfde482abc0b938a96e0cffe6e5c627e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">glen</media:title>
		</media:content>
	</item>
		<item>
		<title>Google Spreadsheets &#8211; Unexpected Surprises</title>
		<link>http://glenc.wordpress.com/2007/03/02/google-spreadsheets-unexpected-surprises/</link>
		<comments>http://glenc.wordpress.com/2007/03/02/google-spreadsheets-unexpected-surprises/#comments</comments>
		<pubDate>Sat, 03 Mar 2007 01:34:34 +0000</pubDate>
		<dc:creator>glen</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://glenc.wordpress.com/2007/03/02/google-spreadsheets-unexpected-surprises/</guid>
		<description><![CDATA[Well, I&#8217;ve been skeptical about what Google is trying to do. I love Gmail but I&#8217;ve held off really trying out their other products. But recently I was running a beta of Excel 2007 and it expired so I was left without a spreadsheet program. I decided to give Google spreadsheets a try. At first [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenc.wordpress.com&amp;blog=274114&amp;post=76&amp;subd=glenc&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Well, I&#8217;ve been skeptical about what Google is trying to do.  I love Gmail but I&#8217;ve held off really trying out their other products.  But recently I was running a beta of Excel 2007 and it expired so I was left without a spreadsheet program.  I decided to give Google spreadsheets a try.</p>
<p>At first I got what I expected &#8211; much of Excel&#8217;s basic functionality while feeling a little less responsive than a desktop app.  I mean, for a web app they&#8217;ve done a remarkably good job, but it&#8217;s still not the same as a rich desktop application.   But then I discovered two excellent features that I didn&#8217;t expect.</p>
<p>The first came after I had been working on a spreadsheet for a while and realized that I had it so screwed up I wanted to go back to the beginning.  I was just about to close and re-open the spreadsheet when I noticed the &#8220;Revisions&#8221; tab at the top.  I clicked on this and &#8211; hey what do you know &#8211; just about every change I made was automatically saved as a revision.  I flipped through the revisions, found the place I wanted, and overwrote my f&#8217;d up version with a clean version.  Now that&#8217;s something you don&#8217;t get in Excel.</p>
<p>The next thing that happened (which prompted me to write this blog post) is that I was making a change when all of a sudden I lost my internet connection (damn netgear wireless crap).  Now I&#8217;m thinking &#8220;ugh &#8211; lots of rework&#8221; but all of a sudden Google pops up a little box that says &#8220;uh hey &#8211; you don&#8217;t have connection.  you want to work offline or try and reconnect?&#8221;.   Wow &#8211; ok, let&#8217;s see how this works.  I reboot my router, get my connection back, click the &#8220;try and reconnect&#8221; option, and I&#8217;m back and running.  No lost data &#8211; nothing.  Everything is exactly as if I had never lost connection in the first place.   Now that&#8217;s slick!</p>
<p>So I&#8217;m not sure if I&#8217;m completely sold on giving up Excel but I have to say that if Google keeps going the way they are going with innovative features and solid design, I might just be tempted.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/glenc.wordpress.com/76/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/glenc.wordpress.com/76/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/glenc.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/glenc.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/glenc.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/glenc.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/glenc.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/glenc.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/glenc.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/glenc.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/glenc.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/glenc.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/glenc.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/glenc.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/glenc.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/glenc.wordpress.com/76/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenc.wordpress.com&amp;blog=274114&amp;post=76&amp;subd=glenc&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://glenc.wordpress.com/2007/03/02/google-spreadsheets-unexpected-surprises/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfde482abc0b938a96e0cffe6e5c627e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">glen</media:title>
		</media:content>
	</item>
		<item>
		<title>MicroISVs and their blogs</title>
		<link>http://glenc.wordpress.com/2007/02/04/microisvs-and-their-blogs/</link>
		<comments>http://glenc.wordpress.com/2007/02/04/microisvs-and-their-blogs/#comments</comments>
		<pubDate>Mon, 05 Feb 2007 04:48:28 +0000</pubDate>
		<dc:creator>glen</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://glenc.wordpress.com/2007/02/04/microisvs-and-their-blogs/</guid>
		<description><![CDATA[It seems like every small software company out there has a blog these days. It&#8217;s become a requirement. In fact, most times these days the blog shows up before the actual product. But if you ask me, by and large it&#8217;s a waste of time. If you&#8217;re blogging in the hopes that it will attract [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenc.wordpress.com&amp;blog=274114&amp;post=74&amp;subd=glenc&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It seems like every small software company out there has a blog these days.  It&#8217;s become a requirement.  In fact, most times these days the blog shows up before the actual product.  But if you ask me, by and large it&#8217;s a waste of time.  If you&#8217;re blogging in the hopes that it will attract potential customers or keep customers interested then you need to look long and hard at the kind of content you&#8217;re publishing.</p>
<p>Look, marketing is important &#8211; critically important to the success of your company.  But if your blog is going to be a marketing tool, it&#8217;s got to be targeted at your potential customers.  Your customers don&#8217;t care that you really liked some Joel on Software post.  Your customers don&#8217;t care that you&#8217;re putting the finishing touches on some feature or that you contributed to some open source project over the weekend.  Your customers want to read things <em>they </em>care about &#8211; not things you care about.</p>
<p>The key to a successful blog for a software company is one that truly provides value and connects with your customer base.  If you are passionate about the subject of your software, then you have a good chance of writing a compelling blog which adds value on top of the software you sell.  If you&#8217;re not that passionate, or if you suck at writing, a better approach would be to try and aggregate news articles or other industry/subject related blog postings.</p>
<p>At the end of the day, look at everything you do through the eyes of your customer.  Is it valuable to them?  If not, then you should stop and put that valuable time into something else.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/glenc.wordpress.com/74/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/glenc.wordpress.com/74/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/glenc.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/glenc.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/glenc.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/glenc.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/glenc.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/glenc.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/glenc.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/glenc.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/glenc.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/glenc.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/glenc.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/glenc.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/glenc.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/glenc.wordpress.com/74/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenc.wordpress.com&amp;blog=274114&amp;post=74&amp;subd=glenc&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://glenc.wordpress.com/2007/02/04/microisvs-and-their-blogs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfde482abc0b938a96e0cffe6e5c627e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">glen</media:title>
		</media:content>
	</item>
	</channel>
</rss>
