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

<channel>
	<title>Look alive. Here comes a buzzard. &#187; Articles</title>
	<atom:link href="http://blog.glenc.net/category/articles/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.glenc.net</link>
	<description>Treading water in a sea of man-made confusion.</description>
	<lastBuildDate>Fri, 10 Jun 2011 05:10:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>SharePoint?  Meet Python</title>
		<link>http://blog.glenc.net/2007/08/12/sharepoint-meet-python/</link>
		<comments>http://blog.glenc.net/2007/08/12/sharepoint-meet-python/#comments</comments>
		<pubDate>Mon, 13 Aug 2007 03:57:12 +0000</pubDate>
		<dc:creator>glenc</dc:creator>
				<category><![CDATA[2007 Office]]></category>
		<category><![CDATA[Articles]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://blogtmp.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 [...]]]></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-66"></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:</p>
<pre name="code" class="py">webapp = SPWebApplication.Lookup(Uri("http://mysite"))
for site in webapp.Sites:
  print '%-30s - %s' % (site.Url, site.RootWeb.Title)
</pre>
<p>Ever need to quickly get the internal name of a particular field?</p>
<pre name="code" class="py">list = SPSite("http://mysite").RootWeb.Lists["Documents"]
for field in list.Fields:
  print field.InternalName
</pre>
<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:</p>
<pre name="code" class="py">>>> import clr
>>> clr.AddReference("Microsoft.SharePoint")
>>> from Microsoft.SharePoint import *
</pre>
<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.</p>
<pre name="code" class="python">>>> site = SPSite("http://myserver")
>>> for web in site.AllWebs:
. . .     print web.Title

>>> list = site.RootWeb.Lists["Documents"]
>>> list.Title = "Python Documents"
>>> list.Update()
>>> print list.Title
</pre>
<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>
]]></content:encoded>
			<wfw:commentRss>http://blog.glenc.net/2007/08/12/sharepoint-meet-python/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Motivation</title>
		<link>http://blog.glenc.net/2007/05/01/motivation/</link>
		<comments>http://blog.glenc.net/2007/05/01/motivation/#comments</comments>
		<pubDate>Wed, 02 May 2007 01:01:02 +0000</pubDate>
		<dc:creator>glenc</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blogtmp.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 [...]]]></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>
]]></content:encoded>
			<wfw:commentRss>http://blog.glenc.net/2007/05/01/motivation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Motivation &#8211; Part 1: Being Available</title>
		<link>http://blog.glenc.net/2007/05/01/motivation-part-1-being-available/</link>
		<comments>http://blog.glenc.net/2007/05/01/motivation-part-1-being-available/#comments</comments>
		<pubDate>Wed, 02 May 2007 01:00:44 +0000</pubDate>
		<dc:creator>glenc</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blogtmp.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 [...]]]></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-61"></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://blog.glenc.net/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>
]]></content:encoded>
			<wfw:commentRss>http://blog.glenc.net/2007/05/01/motivation-part-1-being-available/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Customizing the Site Directory in MOSS 2007</title>
		<link>http://blog.glenc.net/2006/07/23/customizing-the-site-directory-in-moss-2007/</link>
		<comments>http://blog.glenc.net/2006/07/23/customizing-the-site-directory-in-moss-2007/#comments</comments>
		<pubDate>Mon, 24 Jul 2006 04:35:45 +0000</pubDate>
		<dc:creator>glenc</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://blogtmp.glenc.net/2006/07/23/customizing-the-site-directory-in-moss-2007/</guid>
		<description><![CDATA[Like most SharePoint implementers out there I typically like to modify the Site Directory for my customers. I find that the out of the box options for Region and Division are pretty lacking and really fall short of how my clients want to organize and search for SharePoint sites. Luckily, MOSS 2007 makes it quite [...]]]></description>
			<content:encoded><![CDATA[<p>Like most SharePoint implementers out there I typically like to modify the Site Directory for my customers. I find that the out of the box options for Region and Division are pretty lacking and really fall short of how my clients want to organize and search for SharePoint sites. Luckily, MOSS 2007 makes it quite easy to customize these options. Here’s how.<span id="more-47"></span></p>
<p><a target="_blank" href="http://glenc.wordpress.com/files/2006/07/site-directory.png" title="Site Directory"><img border="0" align="right" src="http://glenc.wordpress.com/files/2006/07/tnsite-directory.gif" hspace="5" alt="tnsite-directory.gif" /></a>First, navigate to the Sites page in your MOSS implementation. You’ll see the standard list of categories and a few tabs (see <a target="_blank" href="http://glenc.wordpress.com/files/2006/07/site-directory.png">figure 1</a>). The first things I thought when I saw this view was 1) how can I change those categories to be something I care about and 2) how can I change the tabs?</p>
<p>The first step to customizing both of these items is to click <strong>View all Site Content</strong> above the quick launch bar on the left-hand side. Scroll down to look at the lists. You will see two lists which are quite conspicuous: Sites and Tabs.</p>
<p>First let’s customize the site categories. Click on the <strong>Sites </strong>list. Then from the <strong>Settings </strong>drop down, choose <strong>List Settings</strong>. Add a new column called “Site Type”, make it a choice column, and give it the values “Project” and “Initiative”.</p>
<p>Next, while still on the list settings page, scroll down to the list of views. Click on the <strong>Categories </strong>view. This view defines what properties are shown on the Categories tab. In the list of columns, find <strong>Site Type</strong> and check the box so that it will be shown in the view. By choosing to have the property shown in the view it will be shown on the Categories tab on the site directory page.</p>
<p><a target="_blank" href="http://glenc.wordpress.com/files/2006/07/modified-site-directory.png" title="Modified Site Directory"><img border="0" align="right" src="http://glenc.wordpress.com/files/2006/07/tnmodified-site-directory.gif" hspace="5" alt="tnmodified-site-directory.gif" /></a>Save the view and return to the list settings page. Now locate the view called <strong>Site Creation Categories</strong>. This view determines what fields are displayed when a new site is created. Modify this view to include <strong>Site Type</strong> as well.</p>
<p>Now, navigate back to the site directory page. You should now see <strong>Site Type</strong> listed in the categories list (<a target="_blank" href="http://glenc.wordpress.com/files/2006/07/modified-site-directory.png">figure 2</a>). If you click the <strong>Create Site</strong> button you should see Site Type in the list of Site Categories as well (<a target="_blank" href="http://glenc.wordpress.com/files/2006/07/create-site-page.png">figure 3</a>).</p>
<p><a target="_blank" href="http://glenc.wordpress.com/files/2006/07/create-site-page.png" title="Modified Site Creation Page"><img border="0" align="right" src="http://glenc.wordpress.com/files/2006/07/tncreate-site-page.gif" hspace="5" alt="tncreate-site-page.gif" /></a>You can see that with further customization you can make the site categories fit whatever site organization model you need.</p>
<p>Next, let’s change the tabs. I don’t like Top Sites and I’d like another tab called Project Dashboard.</p>
<p>Go back to <strong>View All Site Content</strong> and click on the <strong>Tabs </strong>list. Immediately you will see what drives the list of tabs on the site directory page. The tabs list contains a list of pages, one (or more in the case of Categories) for each tab. First, let’s get rid of the Top Sites tab. Simply click the Edit icon and then click <strong>Delete Item</strong>.</p>
<p><a target="_blank" href="http://glenc.wordpress.com/files/2006/07/create-dashboard-page.png" title="Create Dashboard Page"><img border="0" align="right" src="http://glenc.wordpress.com/files/2006/07/tncreate-dashboard-page.gif" hspace="5" alt="tncreate-dashboard-page.gif" /></a>Next to add a new tab called Project Dashboard. From the <strong>Site Actions</strong> drop down select <strong>Create Page</strong>. Make the URL name of this new page “ProjectDashboard.aspx”. For the Page Layout, select <strong>(Welcome Page) Site Directory Home</strong> and click OK.</p>
<p>You will now be taken to the newly created page in edit mode. Add a web part for the Sites list to the page and configure it to filter the list to only display sites where the Site Type property is equal to “Projects”.</p>
<p><a target="_blank" href="http://glenc.wordpress.com/files/2006/07/project-dashboard.png" title="Project Dashboard"><img border="0" align="right" src="http://glenc.wordpress.com/files/2006/07/tnproject-dashboard.gif" hspace="5" alt="tnproject-dashboard.gif" /></a>Now, navigate back to the <strong>Tabs </strong>list. From the <strong>New </strong>menu, select <strong>New Item</strong>. Call the new tab “Project Dashboard”. In the Page text box, enter “ProjectDashboard.aspx”. Click <strong>OK</strong>. Navigate back to the Site Directory page to see your handy work.</p>
<p>As you can see, this was pretty easy to do. With all of the filter web parts, content aggregation web parts, and other goodies MOSS 2007 comes equipped with it should be possible to build any number of different views into your SharePoint sites.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.glenc.net/2006/07/23/customizing-the-site-directory-in-moss-2007/feed/</wfw:commentRss>
		<slash:comments>52</slash:comments>
		</item>
		<item>
		<title>Content Types – Best new SharePoint 2007 Feature</title>
		<link>http://blog.glenc.net/2006/06/22/content-types-%e2%80%93-best-new-sharepoint-2007-feature/</link>
		<comments>http://blog.glenc.net/2006/06/22/content-types-%e2%80%93-best-new-sharepoint-2007-feature/#comments</comments>
		<pubDate>Thu, 22 Jun 2006 16:35:59 +0000</pubDate>
		<dc:creator>glenc</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://blogtmp.glenc.net/2006/06/22/content-types-%e2%80%93-best-new-sharepoint-2007-feature/</guid>
		<description><![CDATA[Okay &#8211; best new feature might be going a bit far, but from my perspective content types are one of the best additions to SharePoint 2007. The funny thing is, they take a back seat to some of the sexier additions like Workflow and Content Management. Content types however play a critical role in both [...]]]></description>
			<content:encoded><![CDATA[<p>Okay &ndash; <i>best</i> new feature might be going a bit far, but from my perspective content types are one of the best additions to SharePoint 2007.  The funny thing is, they take a back seat to some of the sexier additions like Workflow and Content Management.  Content types however play a critical role in both of these new features and many others.  They are &ndash; in my opinion &ndash; the backbone of SharePoint 2007 and one of the new <i>key concepts</i> to understanding SharePoint.</p>
<p><span id="more-24"></span>Let me take a step back.  What are content types?  What content types allow you to do is identify a particular type of document or item (contract, specification, issue, task, etc), and then define all of the different aspects of that item completely separated from where that item might live within SharePoint.  So for example, you might define a Contract content type.  You would add fields to this content type such as contract type, date executed, etc.  You would then associate this content type with certain document libraries such that when you uploaded a new document, you would specify that the document was a Contract and then fill in all the information for Contract content types.</p>
<p>Anyone who has ever run into the following limitations in SharePoint 2003 will immediately understand some of the benefits here:</p>
<ul>
<li>Having to create multiple document libraries to hold different types of documents &ndash; but not because it made logical sense to store the documents in different libraries &ndash; but because you just wanted different meta-data for different document types.</li>
<li>Customized an issues list for your project workspace, then found yourself having to copy those changes multiple times for all the other projects you were running.</li>
<li>Created an extensive dev-intensive workaround to enable different document templates for different document types.</li>
<li>Published a custom list template only to realize a month later (and 50 new sites using that list template) that you left out a critical piece and that all lists would have to be updated with the new field.</li>
</ul>
<p>Content types get around each of these limitations in a number of ways.</p>
<p><a href="http://glenc.wordpress.com/files/2006/06/content-type-settings.png" target="_blank" class="imagelink" title="content-type-settings-tn.gif"><img src="http://glenc.wordpress.com/files/2006/06/content-type-settings-tn.gif" alt="content-type-settings-tn.gif" align="right" border="0" hspace="8" /></a>But it&rsquo;s not just objects and their field types that can be defined using content types, workflows can be associated to content types, retention policies can be applied, custom Word 2007 information panels can be created, the list goes on.  So content types make it possible to define an object, define all of the fields for that object, associate the appropriate workflows, define policies, etc all irrespective to where that object will ultimately live within SharePoint.</p>
<p>Here are a few key points to mention about content types:</p>
<ul>
<li>Content types are hierarchical.  It is possible to define a content type which is based on another content type.  The new content type will inherit all of the properties of the parent content type.  This hierarchy can be as deep as you like.</li>
<li>Changes to the Content Type can automatically propagate to all lists and all child content types.</li>
<li>Each content type can have a different document template.</li>
<li>The list of content types will be displayed under the <b>New</b> menu within document libraries and lists.</li>
</ul>
<p>Let me talk about why I think this is one of the best new features.  First, it removes the discussion about taxonomy from a particular site or area of your portal.  It encourages thinking at a more holistic level: &ldquo;what are all the properties associated with a contract?  What are all the various workflows we might want to execute on contracts?&rdquo;.  Thinking about contexts other than the specific site or list in question helps create a more scalable solution that can easily be adopted across your organization.  Additionally, really thinking about the object in question helps ground the solution in the real world &ndash; not within the artificial confines of a site or particular site hierarchy.</p>
<p><a href="http://glenc.wordpress.com/files/2006/06/content-type-inheritance.gif" target="_blank" class="imagelink" title="content-type-inheritance-tn.gif"><img src="http://glenc.wordpress.com/files/2006/06/content-type-inheritance-tn.gif" alt="content-type-inheritance-tn.gif" align="right" border="0" hspace="8" /></a>Of course too much &ldquo;high thinking&rdquo; and not enough down-to-earth action can be death to any project.  You can&rsquo;t spend all your time interviewing every different department asking all the various ways they <i>might</i> interact with contracts.  Sometimes you just have to take what you know now, implement it, and hope for the best.  Which conveniently segues to the next reason I like content types so much: flexibility.</p>
<p>See, I can define a content type with what I know today, deploy it, and use it happily for months.  Then, when I realize I left out an incredibly critical piece of meta-data, I can just update the content type, automatically propagate that change to all lists and sites using that content type, and I&rsquo;m done.</p>
<p>This allows you to take a more iterative approach whereby you gain real-world user feedback and adapt accordingly.  In the past, this kind of iterative approach would be extremely labor intensive without some sort of automated tool to deploy changes site-wide.  Content types make this process possible without all the hassle.</p>
<p>The last area I want to talk about is general architecture.  I have a developer background and to me the addition of content types and the way they work reminds me of creating an object model for a system.  So for me conceptually, approaching a problem in SharePoint now is very much like approaching that problem using standard object-oriented techniques.</p>
<p>This is a good thing because there are a lot of inherent benefits in object-oriented thinking.  It is a solid thought process and helps you orient yourself while wading through the requirements for workflow, meta data, retention policies, etc.  It gets you thinking about where there is redundancy and whether or not that redundancy can be eliminated byway of inheritance.  In the end you wind up building a more scalable and flexible solution.</p>
<p>Okay &ndash; so all of that sounds great but there must be some drawbacks right?  Well yes actually.  One of the drawbacks in my opinion is that when you create a field for a content type, that field is called a <b>site column</b> and is global in nature.  Well not really global &ndash; it is available for all lists and content types within the site it was created and anywhere below that in the site hierarchy.</p>
<p>If you&rsquo;re a programmer (if you&rsquo;re not, sorry; it was the best example I could think of), imagine that you have a method in a class and within that method you need a variable foo.  So you define foo within the method and that variable is only available to that method.  If you defined that variable outside of the method within the class, that variable would be available to all methods within that class.  And if you defined the variable as <i>protected</i>, that variable would be available to all sub-classes inheriting from this class.  This is the way fields created for content types work.  When you define a site column on a content type, that site column becomes available to all other content types within the same site or lower in the site hierarchy.</p>
<p>Why is that a bad thing?  Well quite simply two site columns can&rsquo;t share the same name.  So if you have a site column called &ldquo;status&rdquo; on a task, and you want another site column called &ldquo;status&rdquo; on a document, chances are you don&rsquo;t want the same values for both.  One of these two site columns is going to have to get a new name &ndash; &ldquo;task status&rdquo; for example.</p>
<p>All in all this is a bit of a nit, but it&rsquo;s an annoying nit.  And it would have been relatively easily solved implementing some sort of namespace-type solution.</p>
<p>So to summarize, content types enable us as SharePoint developers and implementers to develop solutions which better map to the real world by defining the types of information our users manage irrespective to the location in which it gets stored.  They enable us to do this in a way which is very flexible and can be changed easily moving forward.  This flexibility allows us to focus on delivering usable solutions quickly without sacrificing scalability.  And that&rsquo;s a great thing.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.glenc.net/2006/06/22/content-types-%e2%80%93-best-new-sharepoint-2007-feature/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>SharePoint 2007 Workflow &#8211; A First Look</title>
		<link>http://blog.glenc.net/2006/06/20/sharepoint-2007-workflow-a-first-look/</link>
		<comments>http://blog.glenc.net/2006/06/20/sharepoint-2007-workflow-a-first-look/#comments</comments>
		<pubDate>Wed, 21 Jun 2006 01:18:20 +0000</pubDate>
		<dc:creator>glenc</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://blogtmp.glenc.net/2006/06/20/sharepoint-2007-workflow-a-first-look/</guid>
		<description><![CDATA[SharePoint 2007 is in Beta now and while all of the licensing changes are still somewhat of a mystery one thing that is very clear is that the new features and functionality available out of the box are very compelling. One of the most interesting new feature areas is Workflow. Workflow is one of those [...]]]></description>
			<content:encoded><![CDATA[<p>SharePoint 2007 is in Beta now and while all of the licensing changes are still somewhat of a mystery one thing that is very clear is that the new features and functionality available out of the box are very compelling.</p>
<p>One of the most interesting new feature areas is Workflow.</p>
<p><span id="more-13"></span>Workflow is one of those double-edge swords when it comes to automation and efficiency.&nbsp; The right amount of automation applied to a business processes can be a huge efficiency boost and provide visibility into a complex process.</p>
<p>On the other hand, too much rigidity when it comes to process automation can be an absolute disaster.&nbsp; There&rsquo;s no better way to bring a business process to a grinding halt than to introduce a workflow which does not have adequate flexibility to handle ALL of the exceptions and outside cases that we encounter every day.&nbsp; Because the fact of the matter is, no matter how much we would like our processes to be simple and straight forward, handling the exceptions and all the various paths can be a very complex task.</p>
<p>It is because of this that I believe most organizations who are considering leveraging SharePoint&rsquo;s workflow features would be well advised to start simple with the out of the box workflow options.&nbsp; SharePoint is a horizontal product meaning it does not cater to any one vertical industry.&nbsp; As a result the built-in workflows are very generic in nature and are designed to cover 70% of the general workflow tasks needed &ndash; or at least the ones Microsoft could envision during product planning.</p>
<p>Out of the box SharePoint will ship the following workflows:</p>
<ul>
<li>Approval</li>
<li>Collect Feedback</li>
<li>Collect Signatures</li>
<li><a href="http://glenc.wordpress.com/files/2006/06/customize-workflow.png" title="Customizing a Workflow" class="imagelink"></a>Disposition Approval</li>
<li>Issue Tracking</li>
<li>Consensus Approval</li>
</ul>
<p><a target="_blank" href="http://glenc.wordpress.com/files/2006/06/customize-workflow.png" title="Customizing a Workflow" class="mce_plugin_wordpress_page"><img border="0" align="right" src="http://glenc.wordpress.com/files/2006/06/customize-workflow.thumbnail.png" hspace="8" alt="Customizing a Workflow" height="94" /></a>The great thing about these workflows is that they offer a vast amount of flexibility and configuration options.&nbsp; For example, the Approval and Collect Feedback workflows can both be configured to run in Serial or Parallel mode.&nbsp; They can enable or disable options such as task delegation, requesting changes, and adding participants after the workflow has started.&nbsp; In addition, these options can be customized for each different type of document or site where the workflow is available.</p>
<p>This flexibility comes at a cost however.&nbsp; That cost is training and usability.&nbsp; Having a workflow which is fairly generic means that users need to learn how to use the workflow correctly.&nbsp; The workflow is not necessarily going to lead the user through the process as much as a completely custom workflow which maps exactly to the business process at hand.</p>
<p><a target="_blank" href="http://glenc.wordpress.com/files/2006/06/starting-a-workflow-2.png" title="Starting a Workflow" class="mce_plugin_wordpress_page"><img border="0" align="right" src="http://glenc.wordpress.com/files/2006/06/starting-a-workflow-2.thumbnail.png" hspace="8" alt="Starting a Workflow" height="96" /></a>In addition SharePoint still suffers in the usability department and there are some areas (at least in the Beta) which are a bit tough to get the hang of at first.&nbsp; The good news is that SharePoint Workflow and the Office 2007 client work beautifully together and this goes a long way in addressing these usability concerns.</p>
<p>In the end however, the training and usability cost weighed against the cost of developing a completely new workflow from scratch will be acceptable in my opinion &ndash; at least as a starting point.&nbsp; Using an out of the box workflow to pilot business process automation can be a great way to really expose all the variances in a business process in a very low cost way.</p>
<p>So in conclusion there is a lot which can be accomplished using the workflows available out of the box in Microsoft Office SharePoint Server 2007.&nbsp; However, for more specific business processes these workflows can be used as a pilot to better understand just how much customization or configuration is required.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.glenc.net/2006/06/20/sharepoint-2007-workflow-a-first-look/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

