Tuesday, May 20, 2008 5:34 PM
I've had a very strong interest in Microsoft SharePoint Server for some time. The idea of building a site on a content management system (CMS) is very appealing as there is so much grunt work otherwise. That's the motivation for using a blog engine of course. I could create simple web pages each time I had an update (not often lately...) or append to a single page, but the advantages of quick-and-easy publishing, syndication, search, keywords, and the rest make it more than worthwhile. Working with a CMS takes things so much further by making the entire web site modular. Blogging is an option, but so is a document library, an image gallery, and polls. Many CMS engines even go so far as to offer store/shopping cart, source code repository, and discussion forums. Once you've created pages and added modules, you can create content for the regions, and set permissions so users need to login or be a member of a certain group.
Back to SharePoint! It's a pretty expensive product, and requires a Windows Server OS. It's also a premium option for shared web hosting so it's just not going to be an option for many smaller sites. I've been using it in a number of projects lately, and really like it. It has a pretty steep learning curve though. There are so many facets to it that it's difficult to master more than a given aspect of it, and simply be proficient at the rest.
One neat thing that I really like about SharePoint is how almost everything in content comes down to Lists. A List is a collection of items; an item is a collection of key/value pairs. Each key/value has a display name, type, default value, and a number of other attributes. Modules in SharePoint work by consuming items from a List and presenting those items in a certain way. The easiest way to think about a List though is by thinking of a database table. Name it, create a schema, and start inserting rows. Define one or more views, and embed the views into pages on the site. You can relate items between lists, and create filters and sort options. Since the List is the master, you can create very flexible views -- as many as you want -- independent of the data. Again, it sounds a lot like a database table! The advantage here, is that the SharePoint content engine has so many built-in schemas and views that you can represent many types of data with very little effort.
For example, if I want to create a calendar for my club, I just create a new calendar list, and host a calendar display module on a page. I can then create a list of contacts (people) for my club members. Finally, I can create a custom list of books for our club library. All list data is easily consumed as RSS, and can be modified in a table view in the web browser without worrying about database connections or custom applications.
Once you get a feel for the flexibility, you start thinking of all data in terms of lists, just like you might have years ago when you first learned database theory! The difference here is the simplicity by which you can take advantage of it. It's a little like what Access did for database applications, except more polished (IMHO) and on the web.
When you can't accomplish enough with the built-in tools, you can use SharePoint Designer to dig in and modify views, styles, and layout. You can also use built-in web services to create custom applications for consuming or feeding into the lists.
In the end, it's a great platform that probably would be used a lot more if it wasn't considered so high-end (read: expensive). Most companies of any size could benefit from it, but most probably don't know it yet. If you have the skills, it's a great thing to add to your resume. Creating custom SharePoint development affordably could really be a great niche. Microsoft recently started promoting Office Live Small Business, which is a great way to work with hosted SharePoint at a lower cost. Less flexibility, but so much heavy-lifting is already done. There are other CMS systems out there (DotNetNuke, Rainbow, Drupal, Joomla) so you certainly have your pick. Don't create from scratch when you can let the engine do the hard work. Focus on content, style, and layout instead!