Sunday, December 23, 2007

Merry Christmas and Happy New Year!

2007 is almost over, and I hope it's been productive, successful, and happy for you. Best wishes for a great holiday season, and good luck in 2008!

Cheers,

Nick

Christmas Tree, Martin's Place Sydney

Tuesday, December 18, 2007

Multilingual MOSS

I investigated MOSS variants briefly in the Beta days but the language packs weren't out so I never had a chance to really play with them, until today.

I'm still learning about the feature set but I hope these instructions will help other people who need to setup or manage multilingual SharePoint portals.

Installing SharePoint Language Packs

To install the MOSS language kits:

  1. Change the Regional settings of your Web Front End, Query, and Index servers to support the additional languages by going to Control Panel > Regional and Language Option and adding the languages you intend to support.
  2. Download the MOSS language packs (make sure you pick the correct language from the drop-down list first!). The URL is http://www.microsoft.com/downloads/details.aspx?FamilyID=2447426b-8689-4768-bff0-cbb511599a45&DisplayLang=en
  3. Install this on your MOSS server.
  4. The installation, when complete, will prompt you to run the SharePoint Products and Technologies Configuration wizard. Do not change any of the settings and click "Do not disconnect from this server farm" if you see that option.
  5. All languages are installed in \Program Files\Common Files\Microsoft Shared\web server extensions\12\template\[number of the language, eg 1033 is English)

Testing The Variants

To test the variants functionality I have installed the French language pack and set up variants for English (Canada) and French (Canada).

  1. In your portal create a new site using the Publishing or Publishing Site with Workflow site template
  2. Go to the site collection and in Site Actions > All Site Settings, click "Variations"
  3. Browse to your publishing site (normally this will probably be your root publishing site, but this could be anywhere in your site collection). Leave the defaults and click OK.
  4. Go back to Site Actions > All Site Settings and click Variation Labels
  5. Create a variant label called en-CA and make it the source. Choose Publishing Site with Workflow.
  6. Variant Labels Create a new variant label called fr-CA, with display of French (Canada) and culture French (Canada).
  7. Go back to the list of labels (you should see both) and click "Create Hierarchies".All Variant Labels - Hierarchy Created
  8. Now the hierarchy will be set so en-CA is our source and fr-CA is our target.

Now we need to start modifying content and seeing how the variants work in practice.

  1. In Central Admin, there is a Variations Propagate Page Job Definition and Variations Propagate Site Job Definition that will run to publish any changes.
  2. Go to the publishing source site and edit some content and publish it with approval. A reminder will tell you to check for unpublished items, if you forget.
  3. After the content is published and approved, and the variation job has kicked in (usually a minute or two) the content will appear in your variant sites. You will still have to modify, translate, and approve those as normal.

Browser settings

When you visit a variant site in MOSS, the browser will try to default to your preferred language if it can detect it. You can experiment by adding a new French (France) (FR) variant  label  (in addition to the French (Canada) one) and then  adding French (France) and French (Canada) (FR-CA) to your internet browser's languages list.

Browsing to the root translation site will cause it to pick which label to use - if I put the France language first in my browser list of preferred languages, it will bypass the FR-CA site and show me the FR variant instead.

Gotchas

  1. If you create subsites, they have to be publishing sites to preserve this language ability. If you make a team subsite for instance it won't handle the variants for you.
  2. If you add new language labels later on, you have to create hierarchies again.
  3. If you add a new language variant, it doesn't seem to pick up the existing content, so you might have to "force" the update by modifying the source content again, even if it's just to update it with no changes - so if you are going to use variants plan ahead and try not to add language packs over time!
  4. If you update the source content, it seems to overwrite the target translations (although a version will be saved for them). This is a big GOTCHA!
  5. The use of publishing approval workflows is a very good idea because this kind of content translation usually requires some level of publishing oversight. However if you're testing variants in development it can involve a lot of clicking and approving, and sometimes it's easy to forget to approve content.

Are any of you using this in production? What do you like about the system, what gotchas have you found, what tips and tricks have you come up with?

Sunday, December 16, 2007

"Our World" - Free Environmental Site Templates

I thought it might be fun to create an environmental initiatives site template for MOSS 2007. The goal is to help organizations track the impact their policies have on the environment, in the hope of raising awareness around ecological issues.

I've tried to stay away from the political aspects of this kind of effort. There are links to several national environmental organizations, an RSS subscription to World Wildlife Foundation, and a link to a carbon footprint calculator, but I left out anything I thought might be too regional or controversial.

I've included an Excel spreadsheet I created asking some general questions about an organization's environmental policies. It's the standard 1 to 5, Strongly Disagree to Strongly Agree questionnaire format, and no it's not very scientific!

There are also a handful of nature images in the picture library - you are free to use those inside your portal.

I started with a blank site definition and used as many MOSS web parts as I could. There are two versions of the site templates: the first is for MOSS Standard license and contains the basic site, called "Our World". Feel free to change the site template name if you find it too cheezy :)

The Enterprise License version includes a child site called the Environmental Initiatives Dashboard. It's got KPIs mapped to the questions in the Excel spreadsheet.

  • To download the Standard .stp file contained in a zip file, click here. It is 4.8 megs.
  • To download the Enterprise version, I've created a zip file  containing 2 site templates (5 megs). First install the OurWorldEnterprise.stp file into your portal. Then under it, create a subsite with a url of "dashboard" (otherwise the links won't work). Pick the OurWorldDashboardEnterprise.stp site template and you should be good to go.

SharePoint's so easy to customize that the total effort was only a couple of hours, including all content generation. This is only a starting point - I would really love to hear from you about the site templates, especially if

  1. You are using them,
  2. You are making improvements to them, and / or
  3. You have other ideas on what can be done to them

Oh, last but not least - these site templates are licensed under Creative Commons Attribution ShareAlike 3.0. This means that you can use the template for business purposes (although you can't sell it), but you can only redistribute the template or derivative works under the same license terms. So you are pretty much free to modify and share as you like!

Enjoy!

Wednesday, December 12, 2007

SharePoint Service Pack 1 Released

SharePoint Service Pack 1 was released yesterday.

Joel Oleson has a detailed post on the update at http://feeds.feedburner.com/~r/sharepointteamblog/~3/198847357/announcing-the-release-of-wss-3-0-sp1-and-office-sharepoint-server-2007-sp1.aspx.

Joel mentions that a special page has been created on TechNet: http://technet.microsoft.com/en-us/office/sharepointserver/bb735839.aspx to help people evaluate and apply the service pack. He encourages everyone to look before they leap when it comes to applying the service pack.

The SP download is here: http://www.microsoft.com/downloads/details.aspx?FamilyId=9EC51594-992C-4165-A997-25DA01F388F5&displaylang=en

Tuesday, December 11, 2007

Quick and Dirty Web Parts

SharePoint is a joy for Rapid Application Development and prototyping. It's great fun to sit with clients and run up site hierarchy or document taxonomy on the fly, in response to their direct feedback.

When it comes to any custom development, there is a bit more heavy lifting - especially if there's a requirement for custom web parts. This starts to involve Code Access Security, custom control lifecycles, and change management.

What if you just want to do some RAD custom development?

There are some nifty shortcuts to help with web part prototyping. First of all, the SmartPart and Son of SmartPart are wonderful little controls created by Jan Tielens. They make it easy to create custom user controls with full design support and then make those work in a SharePoint context.

In a similar vein, MOSS includes the very useful Page Viewer Web Part. This is available right out of the box with no assembly required. Follow the steps of this example to use it with very little effort:

1. Create a basic web page, Default.aspx with the following script:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="CustomSharePointWebApp._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="Field1" runat="server"></asp:TextBox>
        <asp:Button ID="SubmitButton" runat="server" Text="Button" />
        <asp:Label ID="ResultLabel" runat="server" ></asp:Label></div>
        <asp:RequiredFieldValidator ID="Field1RequiredFieldValidator" ControlToValidate="Field1" ErrorMessage="Field 1 cannot be empty" runat="server"></asp:RequiredFieldValidator>
    </form>
</body>
</html>

2. Use the following code for the code-behind:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace CustomSharePointWebApp
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack)
            {
                ResultLabel.Text = Field1.Text;
            }
        }
    }
}

3. Now right-click the project file in the Solution Explorer and click "Publish". For target location, enter the full path to the _layouts folder as well as the name for your custom app, ie:

http://[Your Sharepoint Portal]/_layouts/[Your web app name]/

This will automatically migrate the code and create a folder in the _layouts directory.

4. Now create a test team site somewhere on your portal. Add a Page Viewer Web Part to the page, and point its link to your application's default.aspx page.

5. You should now see your application appearing in the team site, with full SharePoint context, Master Page, and site hierarchy. Notice that in the example we created, the default.aspx application lifecycle is handled completely outside of SharePoint. By deploying it in the _layouts folder we can lstill everage the SharePoint user context if we need to (for security trimming, user profile information and the like).

Custom Form with Page Viewer

Happy prototyping!

Caution: The Page Viewer Web Part uses iFrames, which present some potential security concerns, such as cross-site scripting attacks. iFrames are probably safest if hosted internally; don't deploy these to public-facing sites unless you've closely examined the security implications!

Saturday, December 01, 2007

SharePoint Kits

There's some cool pre-Christmas SharePoint gifts here or almost here:

First off, SharePoint Service Pack 1 is on the way. There are some new stsadm commands, a rollup of the various hotfixes that have come out, and support for creating custom web parts with the AJAX toolkit.

The SharePoint Team Blog dives into all the details at http://blogs.msdn.com/sharepoint/archive/2007/11/29/preview-into-wss-3-0-sp1-and-sharepoint-server-2007-sp1.aspx.

Just released is the Accessibility Kit for SharePoint from HiSoftware and Microsoft. I've blogged about this in the past and it will be important to many organizations that have been unable or unwilling to consider MOSS for public portals due to accessibility requirements. It's available on CodePlex. The nice touch with this kit is that it is intended to incorporate community contributions (as you'd expect on CodePlex) so the kit will improve as people contribute to it. The full details are at http://blogs.msdn.com/sharepoint/archive/2007/11/28/announcing-the-accessibility-kit-for-sharepoint-aks-1-0.aspx.

Finally, if you work with Business Objects, you'll be pleased to know they just released a free integration kit for SharePoint called the "BusinessObjects Enterprise XI R2 SharePoint 2007 Portal Integration Kit" (or BO E XI R2 SP 2007 PIK for short). You can download that here (5 mb zip file). The kit includes document and list view web parts to help create dashboards.

Each of these releases opens up worlds of development possibilities. The depth of SharePoint's integration capabilities continues to increase, and this is just Year One!

Friday, November 23, 2007

Visual Studio 2008 and .NET 3.5 Release

This week Microsoft released Visual Studio 2008 and .NET Framework 3.5.

Over the past month I've been running the Beta 2 in the Virtual PC Microsoft provided. This was an excellent way to evaluate the beta version since it isolated the code from my laptop - making it easy to remove now that I can upgrade to the RTM. I love this approach and hope to see more of it for CTP and Beta releases.

I remember upgrading from Visual Studio 2003 to Whidbey was a frustrating experience since there were a lot of incompatibilities due to the underlying changes in the .NET framework - particularly the change from the code-behind to the code-beside model. This time, the upgrade tool didn't seem to have too much to do. The code I was running in Beta 2 happily migrated to RTM without any problems, which was a nice little bonus. In fact I've always found the Visual Studio betas to be exceptional stable and this doesn't seem to have changed.

New Language Features

.NET Framework 3.5 introduces many new language features. These are powerful but sometimes a little hard to grasp. LINQ is probably the most significant change but it builds on existing .NET 2.0 functionality including Generics, as well as new language additions such as Lambda expressions and anonymous types.

Extension methods allow you to add static methods to add functionality to existing classes. This may be most useful when you need to add functionality to a library you can reference but not change (such as to someone else's code, or the .NET framework itself). Use with caution as extension methods are not a substitute for proper software architecture.

There are some nice new bits of syntactic sugar. One of these is Automatic Properties. Rather than creating member variables for parameters, I can now create parameters that look like this:

public String FirstName { get; set; }

public Int32 Age { get; set; }

Object and Collection initializers also make it easy to create and assign properties all on the same line.

Visual Studio 2008 and Training Kit

Visual Studio IDE itself doesn't seem to have changed too much. One nice new feature is the ability to target multiple version of the .NET framework within a solution. I used this to switch a couple of libraries in my custom framework to use framework 3.5 features (such as LINQ), while the rest of my class libraries stayed at 3.0.

Many of the changes in the studio target web development, which suits me fine. The split-pane window is a nice way of viewing the code and design views at the same time. CSS support is improved in the GUI by visually showcasing inheritance rules. The AJAX toolkit is included by default, as are WCF and Workflow templates (including SharePoint workflows, hooray!).

Testing is facilitated using Microsoft's MSTest framework which is now available with the Professional version (before it was only available with Team Studio). The online community is keener on MbUnit or Nunit but there's no harm in having a third option that's built-in.

There is a wonderful Visual Studio 2008 RTM Training Kit which provides tutorials and videos to help get users up to speed. From the kit's installed home page:

[The Training Kit] contains a full 5-days of technical content including 20hands-on labs, 28 presentations, and 20 scripted demos.   The technologies covered in the kit include:  LINQ, C# 3.0, VB 9, WCF, WF, WPF, Windows CardSpace, Silverlight, ASP.NET Ajax, .NET Compact Framework 3.5, VSTO 3.0, Visual Studio Team System, and Team Foundation Server.

Five full days of technical content? Better crack open that case of Jolt cola! The kit is publicly available at http://go.microsoft.com/?linkid=7602397.

"Paying Off Debt"

There is an interesting article on eWeek about Microsoft "paying off its debt". Soma Somasegar who is the corporate VP of the Microsoft Developer Division explains how he shut down all engineering on Visual Studio for four months and set everybody concentrating on removing as many bugs as possible.

Following this period, known as "MQ" or Milestone Quality, each feature team was limited to a certain number of outstanding bugs at one time. These actions, referred to as an "engineering investment", resulted in an increase in quality in the product. In fact the Visual Studio team won an internal engineering award from Bill Gates for this effort.

It's an interesting insight into Microsoft's development efforts. Presumably this work will also really pay off for future release of Visual Studio.

What's Next?

Speaking of which, now that the current version is RTM, it's time to look ahead again. Programmers are never satisfied! The Visual Studios "futures" roadmap is posted at

http://msdn2.microsoft.com/de-de/teamsystem/bb407307.aspx.

Rosario is the upcoming Team Edition version and will be next on the block.

As well, Microsoft will be providing a window into the .NET Framework source code within a few weeks. This will prove helpful in debugging, especially with lower-level coding. Scott Guthrie explains exactly how this will work. Currently this sort of framework-spelunking is usually done with Lutz Roeder's Reflector.

The Visual Studio 2008 website is located at http://msdn2.microsoft.com/en-us/vs2008/default.aspx.

Sunday, November 18, 2007

SharePointPedia Is Live

The Microsoft SharePoint group has launched SharePointPedia, which is intended to be a community site for sharing knowledge around SharePoint. Although the name might imply a Wikipedia style wiki collaboration system, the site is really an easy way to link to, find, and rate articles that exist elsewhere on the net. As the site itself says:

SharePointPedia is not a wiki. It’s a “pedia” in the sense of being a compendium of useful content, but rather than being limited by just wiki functionality, it leverages the much broader set of capabilities in SharePoint. SharePointPedia is also about community, where you can find and connect with others, who have similar interests as you or who have recommended content relevant to you.

It is easy to submit new content and there are a variety of folksonomy tags such as "Collaboration", "Personalization", "Web Publishing" to tag against the article submission.

The value of the site will largely depend on the community submissions but since there is so much content out there it may prove to be a useful launching pad. Right now everyone spends a great deal of time tracking all over the net trying to research particular SharePoint issues and hopefully this compendium will help streamline that.

You log in using your Windows Live ID and get ratings based on your contributions. The 'pedia is built using MOSS 2007 (of course!) and is located at http://sharepoint.microsoft.com/pedia/Pages/Home.aspx.

Monday, November 12, 2007

SharePoint Migration With MetaLogix

I recently had the chance to evaluate a number of SharePoint content and site migration tools. Past migrations I've done have been performed using the out-of-the-box content migration using the Pre-Upgrade scan, but I have an upcoming requirement to leave the existing SharePoint Portal Server 2003 site and content in place and migrate it slowly to the new MOSS 2007 server over time.

This required an evaluation of third-party site migration tools. One of the ones I looked at was the MetaLogix SharePoint Site Migration Manager. The evaluation license allows you to migrate 50% of the content for a few days, which is enough to run the software through its paces.

The Migration tool installs on a client desktop and this GUI handles 95% of the migration tasks. However if you want the migration process to do things like map the user accounts you'll also need to install a special service on the target server.

I liked MetaLogix Migration Manager's intuitive interface. After the installation it was easy for me to add a reference to both the test SPS 2003 portal and the test MOSS 2007 portal. This is done by typing in the URL and either using the default portal access account or manually specifying it.

The interface has three major views:

  1. The default "Explorer" view, which is a complete site hierarchy view of the sites you have added;
  2. "Browser" view, which renders whatever site node you have selected in the explorer view. It's a great way to quickly view the content of a site or list; and
  3. "Item" view, which shows you the content of lists and libraries.

Migrating content or sites between portals was as easy as right-clicking the source node, clicking "Copy", and right-clicking on the target site and clicking "Paste". A dialog box shows the progress and the result appears in the Log window at the bottom of the screen, which you can always refer to. There is verbose logging in a text file.

Paste Shared Documents List

Other nice features:

  • Batch mode, so that all actions can be scripted to run at scheduled times. The batch file is in XML format so it can be programmed and is human-readable.
  • Delta migration: You can choose to only migrate the changesets instead of all the content each time.
  • List copy: You can choose to append and concatenate multiple libraries or lists together which helps merge them in the new portal.
  • You can migrate versioning and security permissions
  • Replace Within Field: This is a quick string search that allows you to replace text in content you've migrated, such as URLs. In the future I'm told this will be an automatic step in the migration.
  • Mapping to site templates. You can explicitly map SharePoint 2003 site templates to the new MOSS templates (it will attempt to map them automatically by default). I noticed the mapping options seemed to include the Fantastic 40 site templates which was a nice touch.

The only issue I found with the product occurred when I tried to migrate the content on an SPS 2003 Area over to MOSS 2007. It brought all the content, web parts, lists, and libraries over with the exception of the Area Detail and Browse Area By web parts. However as those two web parts relate to the old SharePoint 2003 Area concept which no longer applies, I'm not too fussed. The MetaLogix staff were keen to help me investigate this, if I had been willing.

During the course of the trial I spoke to Julien Sellgren and Rasool Rayani at MetaLogix. They were helpful and responsive to my questions, giving me a walkthrough via a webcast and extending the evaluation period while I was testing area migration. Rasool also explained to me that they are releasing feature packs and updates on a 6-week basis so the product is evolving quickly.

You can learn more about MetaLogix and download the evaluation version at their website.

Wednesday, November 07, 2007

Microsoft Announces Search Server Express

Today Microsoft announced that it will be releasing a free search tool for enterprises based on SharePoint and SQL Server. Search Server Express for organizations can be installed on a standalone server and leverages Microsoft's SharePoint search engine.

The engine looks just like WSS and SharePoint Search. The administration console has many of the same options as the current MOSS Shared Service Provider search settings. These include content sources, best bets, and scopes. Alerts and RSS feeds are available on the results.

Some of the neat aspects of the new solution:

  • It supports the OpenSearch standard. This will help integrate Microsoft's search crawl and integrate with a wide variety of applications from other vendors.
  • Federated Security: Authentication against content sources can be done via NTLM, Basic authentication, Forms Based Authentication, Kerberos, and "cookies". Access control lists are applied to the indexes and security trimming is provided on queries.
  • Continuous Propagation Indexing: No need to wait for the whole corpus to be crawled before searching can be performed; the index will now be incrementally updated and searches can be performed on that increment immediately.

The express version can only be installed on one server. Naturally there is an upgrade path to more expensive solutions for those organizations that require scalability.

In 2008 Microsoft will also release some free connectors for Documentum and FileNet.

Microsoft has adopted a similar approach in the past with the releases of Visual Studio 2005 Express and SQL Server Express. In this case Search Server Express will provide a useful, free solution to give customers a taste of some core platform functionality and get developers using it.

The Enterprise Search website is located at http://www.microsoft.com/enterprisesearch/. You can download the release candidate here.

Wednesday, October 31, 2007

SharePoint As a Development Platform Debate

There's a very heartfelt debate raging at CodeBetter.com over whether SharePoint is a good development platform. The breakdown seems to be between "developers" and "SPs" or "SharePoint People".

Jeffrey Palermo kicked the discussion off by discussing what he feels makes a good development platform and then contrasting those points with the current state of SharePoint 2007 development.

I can understand the concerns of those who don't feel it is an ideal development environment. One of their biggest issues is how to manage the artefacts that SharePoint generates, especially the settings that can be made via the browser but not easily replicated to a source repository for sharing and versioning.

Many of these changes only live in one of SharePoint databases and so are hard to track. It goes against a programmer's mindset when these things are intangible and hard to track and synchronize.

Microsoft and the community are releasing more tools that can help manage this and perhaps in Office 14 there will be some easy facility to export and import configuration settings as an XML file. This would make it simpler to do proper change management with SharePoint.

There is also the fact that SharePoint is good at glossing over a lot of very complex interactions. Running underneath the hood is a SQL Server database, web services, a complex object model, Windows Server interactions, office integration, ASP.NET and Windows Workflow Foundation, a series of providers...it's very complicated but SharePoint makes it look easy. So when anything goes wrong somewhere in the stack it can be hard to figure out. In this sense it's a victim of its own success at abstracting the lower level plumbing.

The best SharePoint solution results occur when the customization points are kept in line with the core things SharePoint does well, such as workflow, collaboration, search, content management and publishing, and document management.

Whenever possible I recommend limiting SharePoint customization to things that can be done via the browser or through modifying XML or XSL properties (for instance for Search Results web parts). This also helps to protect the solution from service packs and future versions of SharePoint as any customizations are likely to be minor and easily tracked (and upgraded).

When new requirements come in, it's helpful to have the entire team of SharePoint developers compare notes on what the platform allows and how it can be customized. It's noteworthy how many times a 30-minute requirements-gathering discussion can end up with a shared agreement on how the out-of-the-box SharePoint components can be combined to deliver something that at first blush seemed to require half a dozen custom web parts.

The fact that so much can be done with so little effort actually makes SharePoint a killer development platform - the trick is to use a bit of imagination to align as much as possible to what SharePoint provides and go with the SharePoint flow. If SharePoint development is difficult and painful it's probably time to reassess the proposed solution to see if there's a more elegant, SharePoint-centric approach.

Anyway, there's a lot of fascinating insight being posted on Jeffrey's blog and anyone who hopes to develop on the SharePoint platform should at least give it a look. The full discussion thread is here

Monday, October 29, 2007

Don't Panic! The MOSS Market Opportunity

Microsoft Office SharePoint Server 2007 was released nearly a year ago now, and over the last few months I've started to hear people in the industry say things like "there is a 6-month window of opportunity for us to become leaders in SharePoint adoption!" or "the SharePoint wave is starting to crest and we need to ride it!". I find this attitude a bit puzzling.

It might arise because MOSS 2007 looks like any other packaged software product: you can double-click the .exe file and point and click your way to a portal that seems powerful and flexible enough to keep your end users happy. If someone thinks of it as just a product, it's easy for them to imagine that their competitors are scouring all the finite nooks and crannies of its feature-set and will corner the market "mindshare" on SharePoint work if they don't get there first. Hence the perceived urgency of early innovation.

However the real power of SharePoint is not as a packaged product, but as a platform. SharePoint-as-a-platform is the reason there won't be a cresting wave of adoption, but rather a rising tide that will lift all boats.

What makes the SharePoint platform most interesting, apart from its infinite scaling potential, is that the problems it addresses are enterprise problems. By this I mean the solution focus is on "30,000-ft level" concerns such as knowledge sharing, federated search, document and records management, team collaboration, and Line-of-Business application integration.

If you need a website, blog, or application built, then a thousand different software products or technologies could fit the bill. If you want any or all of those things plus a technology stack that abstracts away most low-level "plumbing issues" and allows you to address your enterprise problems, then the list of software you can standardize on becomes very small indeed.

The SharePoint platform is huge, and is only becoming more so, as Microsoft and third parties build upon it as quickly as they can. As one example, take a look at any of Microsoft's product line roadmaps, and see how many will be rerouted from standalone applications into SharePoint integration points and modules within the next few years. Over the short- to medium-term the platform will only become bigger and more complex, and the value-add potential will grow correspondingly.

There are an infinite number of ways a contractor or company can add value to a SharePoint deployment. Just to name a few:

  • Document and Records management solutions
  • Capacity, Performance planning and Disaster Recovery planning
  • Portal branding and Look-and-Feel work
  • Custom web part or feature development
  • Custom workflows and electronic forms
  • High-end consulting around building and maintaining a portal
  • Portal migration and maintenance processes and tools
  • Training for end users, administrators and developers
  • LOB application integration
  • Business reporting tools

Any one of these solution areas presents vast market opportunities in its own right. Each is also challenging and complicated because delving into it requires an equal-parts blend of domain expertise and an understanding of complex technologies. The enterprise issues that are raised require deep thought and effort to grapple with. Of course there is no requirement to concentrate on just one area, and therefore by working across these areas there is an unlimited number of potential combinations of SharePoint services and products.

Because no individual or organization can provide all of the pieces for a successful deployment, everyone is forced to share opportunities to some extent and can even choose to integrate some of their competitor's offerings without risking their profits or market mindshare.

I therefore believe that one of the consequences of competing on a platform rather than on a product is the creation of a surprisingly cooperative ecosystem. An economist would call this a virtuous cycle.

This is why I'm not worried about artificial "first mover" timelines in the SharePoint arena. Instead I foresee a long, upward trend of community growth as more and more SharePoint adoptions occur and the tools and knowledge to manage them increase.

So if you're worried about missing the SharePoint ride, just follow the Hitchhiker's advice, and "Don't Panic!"

Thursday, October 25, 2007

OneNote and SharePoint: Better Together!

OneNote 2007 is great for note-taking. My colleagues and I have been using it for the last little while and we love it. There's always something new to learn about it.

After many months of using it individually, we decided to start sharing our OneNote notebooks with each other. Here's the cool bit: the notebooks can back onto a WSS 3 or MOSS library.

If you create a new document library somewhere on your SharePoint portal, you can choose a OneNote Section as the document template rather than the default Word template (although any library document template will apparently work just fine).

Now if you go back into OneNote, you can choose to share a notebook and host it in the document library you just built. It's easy to do; just click "Share" on the top menu and then "Create Shared Notebook". Give it a title and pick a template (we use "Shared Notebook - Reference Materials" or "Shared Notebook - Group Project").

Then when it asks "Who will use this notebook", just click "Multiple people will share this notebook" and choose to share it on a server.You will be asked to confirm the location: paste the URL of your site into the path textbox and then you can browse to the OneNote document library. 

Once created, you'll find a new folder in the SharePoint document library with the title of the notebook. Inside the folder there are OneNote files, one for each section (OneNote pages and subpages aren't actually individual "files").

You can invite people to the site just by giving them the library URL. Clicking on the OneNote notebook file will download a cached copy of it and open it in their OneNote client on their desktop.

We had a lot of fun adding content and pages, and watching as the clients synchronized changes first to the master files in SharePoint, and then down to each others' desktops. It's a very seamless process.

OneNote is very effective at synchronizing changes, although it doesn't use Groove apparently (Groove does file-based synchronization while OneNote seems to do more in the nature of content merging). 

You can view the standard Document Management panel in OneNote by clicking "Tools" and then "Document Management", which will allow you to view the site membership, see what's been updated, and set alerts if you want to keep on top of changes.

In order to search the OneNote content in MOSS 2007, you'll have to install OneNote 2007 on the Index server to get the OneNote 2007 iFilter, and then add the .one filetype to the Shared Service Provider's search settings. Instructions on how to do that are here.

This OneNote-SharePoin t combo is like a team Knowledge Base on steroids: fully searchable, disconnected, synchronizing, shareable, and with all the rich SharePoint functionality of any other library. Yet another example of the power of client software leveraging SharePoint's rich repository services!

Monday, October 22, 2007

Application Virtualization In The Cloud

Right now there are a couple of big industry trends I'd like to talk about: virtualization, and services "in the Cloud".

Virtualization is basically a shell in which to run applications: the software thinks it's on physical hardware, but it's all a sham. The first wave of virtualization was for servers and has allowed a great deal of consolidation in data centres, but it offers exactly the same benefits to client desktops and even to individual applications.

A variety of desktop and application virtualization solutions have arisen recently. VMware offers its Virtual Desktop Infrastructure (VDI). Microsoft has VirtualPC for the server and desktop, is adding a hypervisor to its next OS (via Windows Server Virtualization), and has purchased Softricity in order to get a share of the application virtualization market. Altiris is up to version 2.1 of its popular solution. Citrix (the new owner of XenSource) and ClearCube are other big players in an increasingly lucrative and competitive market.

Broadly speaking, these offerings all operate in the same way - the virtualization software is installed on some collection of servers that are centrally managed and hosted by any organization that wants to push the bits to its workers' desktops. In this model, the current virtualization scenario is essentially an internal deployment.

Now for another recent trend: Software as a Service (SaaS) or "in the Cloud". Web Services began the trend as globally distributed methods. Service Oriented Architecture is a little harder to define (due to vocal online debate), but Wikipedia makes the interesting point that in SOA, "independent services can be accessed without knowledge of their underlying platform implementation".

Many of the applications using these cloud services are thin client systems - browser-based web applications - although there is nothing stopping rich clients from using such services. 

Mix 'Em Up

Many software vendors are interested in making web versions of their software: witness the efforts by Google and Microsoft to host office productivity software on the internet. 

Another example is Adobe: At the Web 2.0 summit recently their CEO suggested that within a decade all of Adobe's applications will be offered online.

Like many traditional software makers including Microsoft Corp., Adobe must fend off rivals delivering competing applications over the Web and it also needs to adopt a new business model after years of selling software in boxes.

Chizen expects professional customers of products like Acrobat document-sharing or Photoshop for editing images would opt to pay for subscriptions versus facing a steady stream of advertising to use tools critical to their jobs.

This could involve re-architecting their applications to be browser-based. But what if they decided to wrap Illustrator or Photoshop in a virtual application shell and push it down to an internet user's desktop?

What do you get if you combine Virtualization with Software as a Service?

What Would The Advantages Be?

There are a huge number of advantages to desktop and application virtualization:

  • No more DLL Hell: A core benefit of virtualization is its ability to shield your computer from registry edits, DLL conflicts, orphaned files, unstable services...You can even run multiple versions of the same system if required. This can be key if you have to use legacy software while upgrading - often impossible on the same computer if, for example, the versions of your software require conflicting Java runtimes.
  • Pay Per Use: Need to use a piece of software temporarily? Download it at will and only pay for the time you use it.
  • Application suite bundling: Doing some development work? Need an Integrated Development Environment, source control system, graphical editing tools, and testing software? Download a package of those applications for a flat fee. When you no longer need them, they will automatically be retracted from your desktop.
  • Roaming software profiles: wherever you go, you can download and run the software you want, without worrying about installations and headaches like hardware-based license keys.
  • The Latest and Greatest Version of Everything: When you download it, it's the latest version - guaranteed. No need to check for updates. The company providing the solution saves a bundle on maintenance and support costs by being able to centrally update their software - so they can pad their profit or passes on the savings to you.
  • Platform neutral and optimized environments: the virtualized software doesn't care what it's running on because the company providing it will ensure that it is installed with everything it needs - and perfectly optimized in its packaged environment.
  • Leverage the power of the desktop: hosting all these applications in a virtualized package on the desktop takes advantage of the client desktop's CPU, RAM, and other resources rather than pushing the burden back onto a server, scaling the solution out much more effectively.

So that's the dream. What kind of elements need to be in place to do this?

Pervasive Internet Access

If you don't have the bandwidth to download the virtualized software, then this will be a non-starter.

Luckily, most of the virtualization solutions just download the deltas to a user's machine, rather than all the code. Softricity for example streams the 15-20% of an application that a user needs to start up, and sends the rest as required.

As the percentage of the world that has access to the internet increases, and as high-speed connectivity improves, the market for virtualized fat client applications will gain as well.

Internet-facing Virtualization Systems

Right now most virtualization solutions are geared for internal deployments. A core assumption is that the recipient of a virtualized application or desktop is one of the organization's employees or at least a contractor. Softricity for example uses Active Directory accounts to determine authentication and authorization.

In a model where virtual applications are pushed out to internet users, security would obviously be a big concern. The company providing the package couldn't make many guarantees about the user's intentions. The pioneers in this field will have to take some calculated risks.

Federated Identity

One of the bigger (and longest-standing) web issues is how to reliably identify a user online. Any internet-facing virtualization provider first has to authenticate a user requesting software, and next has to authorize them based on any number of arbitrary business rules including licensing and financial standing.

These steps are non-trivial when requests are being served from around the globe. Many organizations are trying to create a web federated identity platform. Microsoft is experimenting with CardSpace to "provide [a user's] digital identity to online services in a simple, secure and trusted way". The Liberty Alliance Project is a group trying to build open standards for the same purpose.

Net Metering and Micropayments

If pay-per-use or monthly billing becomes the norm, we can expect a detailed breakdown of exactly how much we use any particular application: details such as the amount of data storage we require, how much upload and download occurs, whether an app is used in peak times or off-peak - essentially any of the details you would expect to see from your ISP today.

This sort of metering will be especially important because a user will rightly expect to be able to download and run software from any number of computerized devices.

Micropayments aren't strictly necessary but they help support net metering by allowing "pay per use" in cases where the cost is too small to make credit payments or the usual fees would make the transaction too expensive.

Dark Horses

Amazon.com is already operating in this arena. I often mention Google and Microsoft in the same breath because they compete so directly, but I think Amazon is the dark horse of the next generation web-as-a-platform race: when it comes to SaaS, they really get it.

They offer file storage in the cloud using their Simple Storage Service (S3). Costs range from $0.15 / gig for a month's storage, to $0.10 per GB transfer in to S3. EC2, their Elastic Compute Cloud (a massive virtualized grid computing offering) provides the same kind of pricing. Currently they are beta-testing Amazon Flexible Payments Service - which in addition to being a brilliant distillation of the online payment process, supports micropayments. What a great set of offerings!

It's only a very small step to imagine Amazon hosting virtualized desktops or applications in the Cloud.

So much for all my conjecture. Are we going to see this Virtualized Cloud Software model in the near future? I'd welcome your feedback!

Wednesday, October 17, 2007

Public Facing WSS Sites + Silverlight

Last night was another interesting Sydney SharePoint User Group. There were two presentations, one on using Windows SharePoint Services as a public facing CMS site given by Jon Matthes, and another by Michael Kordahi on Silverlight (+ SharePoint!).

Jon gave a very interesting talk about using WSS to rewrite a legacy web application for The Scottish Banner, an online community newsletter for Scots abroad. His aim was to improve on the old PHP website, retain its general design, allow online feedback forms, and produce minimal impact on end users in a cost effective way. He also hoped it would be an opportunity to learn about WSS 3.

The way he approached the site migration was to replicate as much of the existing structure as he could, with the only exception being the addition of the WSS administration area. He created anonymous access to a list to allow people to make submissions to the site while not logged in. An additional feature was the use of image libraries to serve as a simple product catalog, which was a new feature for the site.

Best of all, none of this required code. This turned out to be a good thing, as Jon had no access to the server and the US-based ISP was difficult to reach due to the time zone differences. Unfortunately he was unable to use Themes so some options were unavailable to him while he was doing the redesign.

Jon suggested some take-away lessons from his experience. He pointed out how important it is to use a hosting provider who has knowledge around SharePoint (and preferably one in the same time zone!). Research on what WSS could do and not do out of the box was important, and he also recommended making end user training an important component of any moves to SharePoint.


Michael Kordahi (http://delicategeniusblog.com) from Microsoft then presented Silverlight for us. This is Microsoft's intended Flash killer.

Its selling point is that it's a cross-browser/platform implementation of .NET for "building and delivering the next generation of media and rich applications for the web". Michael explained that its value is intended to lie in its flexible programming model combined with its ability to create rich media experiences.

A key component is its use of XAML, which will be the next generation declarative XML syntax for separating presentation from code and is already used in Windows Presentation Foundation. The goal is to have designers do their creative work in tools such as Expression Blend, and then have developers take the XAML code and code to it in Visual Studio.

There were some pointed questions from members of the user group. Flash can do all of these things currently, but it seems that the case for Silverlight might appear more convincing over time. Version 1.1 allows .NET code to be written on the server, and no doubt future versions will add increased functionality and productivity options. Already in version 1.0, it is easy to create animations and manipulate design objects, and then code to the Silverlight canvas using JavaScript.

Some people also remained unconvinced that the developer/designer split would be solved by this technology - after all that was an intended goal of code-behind. I haven't worked directly with enough designers to assess this problem for myself so I'm reserving judgement.

What was particularly cool about this presentation were all the demos Michael showed us. Tafiti is a neat experiment in changing the search interface to amalgamate multiple search content types. Inkable Search Tip uses the Vista handwriting recognition technology to do freehand searches on Google. Top Banana allowed browser-based video editing. A Chess Game written by Scott Guthrie rounded out the demos.

You can view many of these showcase applications at http://www.silverlight.net. Most of them are proof-of-concepts and showcases of what Silverlight can do, rather than real-world examples. 

All in all, it seems to be a very cool technology and one that'll become a very big deal. Silverlight 1.1 is currently in Alpha release and a preview version of Expression Blend 2 is available to MSDN subscribers.  For more information, Scott Guthrie has some excellent posts on Silverlight at http://weblogs.asp.net/scottgu/archive/tags/Silverlight.

Monday, October 15, 2007

Microsoft Releases End User Training Kit For SharePoint

Microsoft's SharePoint team is releasing a SharePoint End User Training Kit. This will be a helpful offering to clients who may not have lined up full training plans, or for use in self-service scenarios.

All of this content has been written by Microsoft's Office Online User Assistance team, evidently after some real-world experience responding to customers' questions.

The SharePoint Learning Kit version of the Training Kit is SCORM 2004 compliant and allows an organization to brand and customize the content delivery experience. A follow-up standalone deployment version will be available for individual use.

It's quite easy to convince end users of the power and convenience of SharePoint, but they may still feel overwhelmed by the options once they are sitting in front of the browser. Therefore user support and training is a key part of SharePoint governance and this training kit will be a welcome addition in the toolbox.

The SCORM version of the kit can be downloaded from the new SharePoint "Get the 'Point" blog. Incidentally this blog is focused on the SharePoint end user and has some very helpful walkthroughs of cool ways people can use SharePoint. It features some guest bloggers, postings from the Microsoft team, and links and tips to get the most of out a portal.

Thursday, October 11, 2007

October Sydney SharePoint Usergroup and Office DevCon

Next Tuesday will be this month's SharePoint Usergroup. The main presentation will be given by Microsoft's SilverLight Evangelist, Micheal Kordahi. He'll be demonstrating SilverLight and talk about how it can be incorporated in SharePoint portals. This should be really interesting as it can probably add a lot of pizzazz to any SharePoint site.

Another presentation will discuss how to use WSS sites for public websites.

On a related note, the SSUG now has its own dedicated website, at http://SharePointUsers.org.au/sydney. It is a SharePoint site that uses the slick-looking Community Kit.

Finally, Microsoft will be hosting Office DevCon at their Ryde campus on Saturday November 3 and Sunday November 4. There will be many speakers and sessions covering all aspects of Office 2007 and the intended audience is developers and power users. The conference is free and you can register at http://www.block.net.au/devcon/index.htm.

Monday, October 08, 2007

Bob Mixon, Drew Jones, and Bob Fox have joined forces to launch the SharePoint Beagle, a free community newsletter dedicated to SharePoint. As Bob describes it on his blog:

Each monthly issue will be hosting a wealth of information on SharePoint
administration, development and end user answers
They've already signed up thousands of users so there's clearly a keen interest. You can view the newsletter at http://www.sharepointbeagle.com/.

Saturday, October 06, 2007

SharePoint + Services

Microsoft has a new Software + Services vision, so this can't be much of a surprise: they are now offering hosted SharePoint "in the cloud".

Currently it's limited to organizations with "more than 5,000 employees" (so if you only have 4,950 you should top up) and includes hosted Exchange, Communications, and SharePoint all in a bundle called the "Business Productivity Infrastructure Online Services Offer".

It's definitely a good idea. I've had some involvement trying to come up with a managed SharePoint offering and the complexities of SharePoint administration and development make it a hard thing to price and support.

Microsoft looks to be avoiding that by making it largely self service, thereby placing their hosting effort on reducing the infrastructure and licensing burden which is I think a fair call and well within their control. I imagine they can also leverage their Fantastic 40 templates and the like to give customers some customization options.

Although it doesn't seem to be part of the basic SharePoint offering, something the associated Energizer case study mentions was the use of SoftGrid's Softricity to provide virtualized applications. This could be helpful to quickly roll out Office 2007 client deployments without causing problems and would fit well with the hosting bundle which includes Exchange.

The new Office clients would maximize the utility of the MOSS functionality, and providing them via virtualization would do an end-run around the problem many large organizations face, which is providing a quick turnaround on new Standard Operating Environments.

For a large organization this could be the "one stop shop". It'll be very interesting to see whether Microsoft can make this more widely available. Full details are here.

Thursday, September 13, 2007

Attack Of The Blob!


(Image taken from WikiPedia's entry on The Blob!)

Yesterday I had a frustrating day trying to modify a CSS file for a SharePoint look and feel task.


For some reason, no matter what I did, the CSS never refreshed in the browser. When viewed in SharePoint Designer it did show the updated version, but no amount of IIS resets, file deletion, or browser cache clearing prevented my web browsers (both Internet Explorer and Firefox) from rendering the old version.

Eventually I happened to look on the file system and notice a folder on the root called "blobcache". Aha! I was using a new Virtual Machine and unbeknownst to me Blob Caching had been enabled to improve performance.

Inside this blob cache folder I found my css file with a .cache file extension on the end of it. I tried to delete manually but it then started to show "File Not Found." errors.

The solution was to flush the blob cache. The option is on the site collection's Site Settings. Select "Site Collection Object Cache" and then click "Force this server to reset its disk based cache."

The BlobCache is enabled in the web.config file and looks like this:


<BlobCache location="C:\blobCache" path="\.(gifjpgpngcssjs)$" maxSize="10" enabled="true" />


I could just remove the css reference from the path but during development I think the better approach is to just to set enabled to false.

Interesting note: David Marsh and I think SharePoint Designer was able to view the newly deployed file because it was using WebDav and so was hitting the database rather than having IIS redirect it to the BLOB cache which is what happened to the browsers.

Saturday, September 08, 2007

Bottlenecks and Headaches

A new article on Computer World suggests that IT is a "key barrier to corporate Web 2.0 adoption", according to speakers at the Office 2.0 conference in San Francisco.

An example of how the IT team were slow to facilitate Web.20 projects:

[The] head of digital media at the National Endowment for Science, Technology and the Arts (NESTA)  in London, noted that she first had to bypass IT to get Web 2.0 technologies to the group's end users. Once she started the effort, she said, "IT started to realize it was happening without them anyway. They weren't interested until they started to get multiple requests from around the business. Eventually, they came on board."

The Pendulum Swings

Information Technology trends swing along a pendulum from complete decentralization to centralization. With Web 2.0 the pendulum is currently swinging away from central IT control.

In general I think this is a good trend,  since the pool of "developers" will deepen if it starts to include technical end users who are able to  create and configure their own systems (perhaps by mashing up a bunch of third party web services) or install and manage third party tools.

I'm just worried that a whole bunch of enterprise problems are being reintroduced by this decentralization, with much less transparent "ownership" of the challenges than if an IT team is in charge of development.

For instance, later in the article, the head of digital media at NESTA says that her organization

 uses many free tools, so it's easy to prove their value to management. "The value is instantly visible, especially when you do an ROI and your investment is zero," she said.

If a tool is "free", is it really zero investment? What is the opportunity cost of adopting and trying to integrate a free tool, without evaluating the alternatives? What are the costs of moving data in and out of it over time?

On page 2 of the article, there is this quote:

[GlaxoSmithKline Social media champion Lee] White said one of the biggest challenges to corporate Web 2.0 use is that demand generally bubbles up from users, while in the traditional corporate paradigm, upper management decides what tools workers should use.

I would suggest  that "demand generally bubbles up from users" anyway, whether Web 2.0 existed or not. After all, IT staff don't roll out of bed on Monday morning and decide to build a Leave Tracking System - they do it because HR users are requesting it.

I would argue that any "resistance" IT is putting up is probably due to its awareness of the incredible complexity of software development.

Hidden Complexities

Enterprise development is incredibly labyrinthine. A programmer's skill requirements range from user psychology to writing to research and analysis to understanding the basics of contract and intellectual property law - and I haven't even mentioned technical skills.

Keeping on top of information technology issues is a full time job. If end users are empowered to whip together "applications" using the latest services and tools then tremendous productivity gains may result - but what will the implications be?

Some of the open questions that spring to mind when I think about this new development paradigm are:

  • Who fixes bugs in an End-User Developed (EUD) application?
  • Who is responsible for managing code changes to an EUD?
  • In the world of the permanent beta, what happens when a third-party web service that an EUD system relies on stops working or is discontinued?
  • What happens when the service the EUD system is relying on changes?
  • Who trains the other users to use the EUD system? Who documents the system functionality and business rules?
  • What are the legal issues of using Web 2.0 systems in a corporation? Who owns the data? Who is responsible for adhering to the licensing terms of any components?
  • What are the security implications of EUD systems that use third party software or services without any central oversight? Who ensures that security is properly applied?
  • How does a company know what EUD systems are in use if there is no central control?
  • How do these systems talk to each other? Is it important that they do?
  • How does data integration occur if a variety of EUD systems expose the same types of information, such as user account details?
  • Does a company need development standards anymore? If so, how does it enforce them on end users?

Are we heading from a bottleneck to a headache?

Wednesday, September 05, 2007

SharePoint Accessibility

One of the most painstaking web programming tasks is achieving web accessibility. Although estimates vary, between 5 and 10% of web users have some sort of accessibility need.

There are several standards, and determining which ones to support depends largely on your business needs and location. The US Government for instance has Section 508 compliance while the Canadian Government has Common Look And Feel 2.0 Accessibility standards.

Generally all of these standards build upon the specifications of the W3C's Web Content Accessibility Guidelines, specifically the Priority 1 and 2 requirements.

Some examples of WCAG requirements are that all web pages must have valid HTML and CSS code, images must have alternative descriptive text, and there must be alternative methods of viewing data or accessing page functionality. Accessible browsers such as JAWS cannot interpret client scripts or view images in the way that a regular browser can, but they can still provide a spoken translation of the markup code.

What happens if you have a SharePoint site that needs to be accessible? Well, unfortunately SharePoint currently outputs a lot of non-compliant code. Luckily, there is a lot of interest in the community in finding the workarounds, and SharePoint is nothing if not flexible.

 

Accessibility Options Within SharePoint

There seem to be a collection of elements that can go into creating a web accessible SharePoint site.

To begin with, you might wish to start with the Microsoft Minimal Master Page and a blank page layout. This will give you a fighting chance generating XHTML code, which is the first vital step. Zac Smith blogs about how to do this in detail.

Another requirement is to change the markup that the SharePoint web parts and user controls generate.

The easiest way to do this is to use a native SharePoint feature called "More Accessible Mode" that you can enable. This changes the UI rendering by applying Microsoft Active Accessibility (MSAA) standards for assistive devices. From the Microsoft Office Online site:

You turn More Accessible Mode on or off by pressing the TAB key immediately after placing focus on the page in a browser. Press the TAB key until you reach the Turn on more accessible mode or Turn off more accessible mode link. Even though the link to turn on More Accessible Mode is the first element in the tab order — which means that it is the first option that you interact with on the page — you may need to press the TAB key more than once to activate the feature.

Another way to change the rendering is to rewrite the output of web and user controls.

Web Parts are generally problematic as the HTML the web parts and the web part zones render is non-compliant. User Controls however are more easily changed. You could choose to do this using delegate controls.

At run time, the delegate control on the page selects the search control that has the lowest sequence number and displays the control to the user.

Another option is to use the .NET CSS Friendly Adapters that were introduced last year to help cleanup the markup the existing controls generate. John Ross (aka "Mossman") talks about this in his blog posting, "CSS Friendly Control Adapters in SharePoint 2007 (A Walk-Through)".

Client side scripts can be modified by using Regular Expressions to modify them at runtime (in the OnLoad methods of a page), but this may pose problems for future upgrades.

 

Third Party Solutions

HiSoftware has just announced that it will be partnering with Microsoft to create a Web Accessibility Kit for SharePoint:

The Accessibility Kit for Office SharePoint Server will include site templates, Web parts, documentation, instruction and tutorials enabling partners and customers to develop Web sites that conform to the guidelines set out in Section 508 of the U.S. Rehabilitation Act and the W3C’s Web Content Accessibility Guidelines (WCAG). The solution will also provide accessibility updates for Office SharePoint Server templates and Web parts for Web publishing, corporate intranet, team and project collaboration sites and more. This allows users to create a site and replace “out-of-the-box” MOSS components with accessibility kit templates, reusable Web content and Web parts.

Telerik offers a Rich Content Editor for SharePoint that contains more accessibility options and may be worth investigating.

I've heard SiteCore recommended as a good front-end for MOSS and it could be a useful alternative to a MOSS internet portal if meeting accessibility standards is a core requirement.

Third party web part vendors may generate more compliant markup.

Finally, you can follow the Glu Mobile approach and use SharePoint as a platform to help with content management and other functionality, but build an ASP.NET application on top of it, which will give you full control over what markup is generated.

 

More Information

If you have any tips or advice on how MOSS can be made more accessible, or any real world examples of MOSS portals that meet compliance standards, please feel free to post!

Thursday, August 30, 2007

Hotfix City

I was cleaning up a portal today and ran into a wide variety of errors. Several of them turned out to have the same root cause. The symptoms were wildly varying event errors like this:

Microsoft.Office.Server.Administration.ApplicationServerAdministrationServiceJob threw an exception:

"Message: Old format or invalid type library"

Or

Microsoft.Office.Server.Administration.ApplicationServerAdministrationServiceJob threw an exception:

"Message: Not Enough Storage"

The resolution required not one but two hotfixes, both of which target the .NET 2.0 framework.

I applied the first hotfix, KB 923028, after reading about it on Gayan Peiris' blog. After rebooting I started getting another error which read:

Unable to open shim database version registry key - v2.0.50727.00000

Err....what?  Speculating wildly here (something I'm good at), I'm guessing the "shim database" was holding some key in the windows registry that the Timer job wanted to know about but couldn't get at.

Anyhow, I did a quick search to figure out how to resolve it, and there again Gayan's blog popped up, suggesting I download and run KB 918642. I figure he was two steps ahead of me the whole way!

By the way, Gayan's the new SharePoint MVP at Microsoft in Sydney. Check out his blog here. It's got a huge amount of SharePoint fixes. Hopefully you won't need any of them!

Tuesday, August 28, 2007

LINQ To SQL ≠ N-Tier Architecture?

Ok, LINQ seems pretty wonderful, and I can see the utility of it - and with regards to SharePoint we'll probably end up using it when Microsoft comes out with an official LINQ to SharePoint, or the community does. Heck, it may even replace (or at least abstract) the dreaded CAML code....

With LINQ, you get:

  • Design-time type checking of data queries
  • Code syntax that is consistent across objects, XML, and relational databases (and, really, anything else)
  • Queries are integrated right into the .NET code frameworks
  • Full IntelliSense support when coding what used to be a bunch of string values

All good stuff. But what I don't understand is how it fits with traditional N-Tier architecture. Is this more of the same old "you can write 70% less code if you don't mind your web page directly accessing your database" trend, or can we actually use this in a properly architected application?

I've been following along on Scott Guthrie's blog; he has a detailed series of posts about using LINQ, but he hasn't yet addressed where LINQ might fit in the N-Tier architecture.

Rick Strahl is already blogging about some of the limitations when trying to combine LINQ in the middle tier with POCO (Plain Old C# Objects), but it isn't clear if this is a beta 2 problem or a design limitation. Here's his conclusion:

The more I look at LINQ the more I'm coming to the conclusion that using LINQ in a middle tier - especially in a generic business object architecture - is not going to work well. There are many little problem issues that when all added up point at more problems being created than solved by the entity generation and easy CRUD layer.

Manning Publishing's upcoming LINQ In Action book has an early access program that lets you download PDFs and view chapters as the authors write them (the ink stains on the PDF are still wet!). It's a great read. Incidentally they're the folks behind LINQ to Amazon, which was one of the earliest LINQ extensions that showed up on the 'net.

Chapter 14 of this book talks about how to integrate LINQ into applications. It makes the point that LINQ "out of the box" is more of a Rapid Application Development tool - which goes back to the "70% less code" approach Microsoft is so fond of. However, the book suggests specific concerns that should be noted when trying to use LINQ in a DAL in the traditional way.

LINQ defers calls to the data source until the query is enumerated over, so if you're returning entities or queries to a business layer (in the format IQueryable<Whatever>, you might be introducing a dependency (your business layer is actually calling a LINQ to SQL query at runtime). You can turn off lazy loading by setting the DataContext's DeferredLoadingEnabled property to false, and also by explicitly loading an entity's child records before returning the entity from the DAL.

So, if I understand correctly:

  • LINQ to XML or XSD doesn't seem to foil N-Tier architecture, since LINQ is essentially a tactical solution to make it easier to read or write XML, and doesn't cross any layer boundaries.
  • LINQ to Objects is an in-memory LINQ technique, that again shouldn't cross any boundaries. Your method signatures will consume and provide POCO, and you use LINQ to iterate over them completely within the Presentation or Business layer. So far, so good.
  • The real issue seems to be LINQ to SQL...and issues can be avoided if the LINQ to SQL code is confined entirely to the DAL, lazy loading is turned off, and disconnected entities and lists are passed back out of the DAL to the Business tier. But if you do this, the only apparent advantages of LINQ to SQL over any other ADO.NET data access method is the consistency of coding and the design-time safety of the strongly typed queries (which you can already get with Strongly Typed Datasets!)

Please, can anybody help me understand what an appropriate N-Tier architecture might look like with LINQ To SQL?

Sunday, August 26, 2007

News Bits

Various bits of news and rumours:

  • K2 blackpearl has gone RTM. You can download it from the K2 website after logging in with your user ID. Chris O'Connor is already blogging about the installation...check out his blog postings here and here.
  • There is a SharePoint Asset Management Toolkit currently in beta at Microsoft. The intention behind it is to give an organization an overview of all the SharePoint assets floating around on the network: WSS sites, portals, etc. The idea being to get more of a handle on what's being built out there by enthusiastic 'Pointers.
  • If you're keen on exploring LINQ, you'll probably be interested in the LINQ to SharePoint community project. Led by Bart De Smet, C# MVP, the project is currently in Alpha 0.2.3 (which is only four light years away), and the aim is to provide some of these following features (taken from Dimitri Clement):  

    • Custom query provider that translates LINQ queries to CAML, the Collaborative Application Markup Language used by SharePoint for querying.

    • Support for LINQ in C# 3.0 and Visual Basic 9.0.
    • Entity creation tool SpMetal to export SharePoint list definitions to entity classes used for querying.
    • Visual Studio 2008 integration for entity creation (a.k.a. SPML).
    • Can connect to a SharePoint site either using the SharePoint object model or via the SharePoint web services.
    • Planned support for updating through entity types.

    You can find the bits at LINQtoSharePoint on CodePlex and the team blog is at http://community.bartdesmet.net/blogs/LINQtoSharePoint/.

Friday, August 24, 2007

SharePoint Development Tips

Mark Jones has an excellent post on best practices for SharePoint development on his blog, entitled "Sharepoint 2007 - Development and Engineering Practices".

He places a great deal of emphasis on team development using Visual Studio and some sort of source control. He further recommends that as much as possible is automated via scripts or code to ensure that you can minimize the deployment effort, avoid errors, and manage code changes and versioning.

He's also a fan of test harnesses and not relying on SharePoint's object model to do all the testing for you.

One of my favourite tips is his advice to customize as a last resort. Although the SDKs and tools are getting better, there's a lot that can be done by configuring what's already out-of-the-box long before any code needs to be touched.  Office 14 is already underway and while I'm sure Microsoft will try to minimize the changes, it's a sure bet that enough will change between versions to make upgrading a roll-your-own portal painful. In fact it's amazing how much can be achieved with just a little thought about the existing features.

Mark's got a lot of great conclusions and ideas in there. I encourage you to check it out.

Thursday, August 23, 2007

The Microsoft SharePoint Team has just announced a major release to the SDKs - version 1.2 of each. The full details are here: http://blogs.msdn.com/randalli/archive/2007/08/22/just-published-major-update-to-the-moss-and-wss-downloadable-sdks-8-22-2007.aspx

This is wonderful news - not only will it make developing to the object model more understandable but there are numerous samples and, best of all, a BDC editor tool! Check this page out:

The Business Data Catalog Definition Editor provides a visual tool for creating an Application Definition for BDC in MOSS 2007. Features include:

  • Underlying XML is abstracted by the design surface and properties window
  • Drag and drop web methods, tables, or views to create line of business (LOB) connections.
  • Entities and methods are created automatically from database metadata and WSDLs.
  • Additional method instances can be added to further enhance the database or web service connection.
  • Method instances can be tested from within the tool, enabling incremental development of LOB connections
Background

Currently, writing an application definition to connect the BDC to a LOB system is a manual process. This requires an understanding of both how the LOB system is configured and what must be included in the XML to satisfy the BDC. Having a tool to simplify this process not only lowers the initial knowledge threshold for administering the BDC, it also lessens the required work of the user (such as testing, making modifications, etc.).

[...]

Highlights
  • Tool supports databases (SQL, Oracle, OLEDB, and ODBC) and web services
  • Drag and drop design surface for selecting DB tables or web methods:
  • Metadata is automatically extracted from databases by dragging and dropping tables
  • Web Services require a few additional steps to completely configure the connection
  • Users can import and export Application Definition XML files
  • Users are able to test method instances incrementally from within the tool
  • The tool is not required to run on a web front-end
  • Associations are created automatically when foreign keys are selected; they can also be created easily for web services by adding an Association method instance

Objectively speaking, the SDK and tool release just made life 100% easier (32.4% of the time)1. You can't argue with those numbers!

The Microsoft team has also stated that it has doubled the resources working on the SDKs, which means we can look forward to even more improvements in the future. They're obviously listening to the community -they even make that point in their announcement - and it's very welcome indeed.

1 Actual results may vary.

Wednesday, August 22, 2007

Yesterday the August meeting of the Sydney SharePoint User Group was held. The speakers were Han Duong and Brad Saide, both from LivePoint.

Han spoke about Themes in SharePoint. He gave a quick example of how to change a SharePoint site using the existing Themes in a MOSS installation, and suggested some tools, such as Heather Solomon's blog posting about all the SharePoint CSS classes, Firebug and web developer plugins for FireFox, and the IE Developer toolbar for Internet Explorer.

He then showed how to customize Themes using SharePoint Designer.

  1. The first step is to copy an existing theme set from the Office 12 hive on the file system (<installation drive>\Program Files\Common Files\Microsoft Shared\web server extensions\12\Templates\Themes) and rename it to the name of the new theme you want to create ([Theme Name]).
  2. Next, modify the name of the .info file contained within this new theme folder to be the [Theme Name].info. This is what SharePoint will look for when it tries to load your theme.
  3. Next step is to tell it about the new theme: to do this go to 1033 folder in your hive and edit the SPThemes.XML file. Just copy one of the existing Theme element entries and rename it to reference your theme name.
  4. Create a thumbnail for the them by copying an existing theme thumbnail from \Templates\Images and renaming it to whatever you specified in the SPThemes file.
  5. Reset IIS
  6. View the Themes in the Site Settings section of the SharePoint portal. You can apply your new custom theme to a site and then take a screenshot; you can then use this as the thumbnail to overwrite the one you copied.

An interesting point Han mentioned is that when you make changes to Theme css files in SharePoint Designer, it is making those css changes to the database. However, on initiation or cache expiry the the css and other theme information is loaded directly from the file system.

Therefore any changes made subsequently to the file system will overwrite the work you've done in SharePoint Designer. So he suggested that once you've made any changes you are happy with in SharePoint Designer, immediately copy them into the file system version of the css file to protect yourself.

Han mentioned that Themes are a good fit for simple design changes to the look of a SharePoint site, while Master Pages are more useful when changing the functionality of the site or the way it is organized.

Another good tip that was raised was using Themes as a quick way to mock up a client's site when doing demonstrations as it helps them relate to what they are seeing (rather than just viewing the out-of-the-box SharePoint installation).



Next, Brad gave us an overview of the Business Data Catalogue in MOSS 2007 Enterprise, and showed how it can be used to surface Line-of-Business information and provide dashboard views of disparate data.

He first explained the challenges of integration line-of-business code into SharePoint. These challenges include:

  • Developers have to write integration code
  • They communicate directly with the native API
  • Each attempt is a single-purpose effort
  • There is an ongoing maintenance and update burden
  • It is difficult to create "one place to go" when there data is in many places
  • Each new business system requires new effort

The BDC is a good solution for all of this. It provides a unified, consistent way to expose data within SharePoint by surfacing it from backend applications. It is declarative, requiring no code. It is also a centrally-managed system. I would also suggest it is "universal" or a contract that all developers will follow.

Brad pointed out the things the Business Data Catalogue is good for: surfacing LOB data, mashing up the information from multiple Line of Business apps, searching on all of this data at the same time, and pulling LOB data into libraries and lists where it can add to the existing portal information, and it can help populate user profile information.

What it isn't good for:

  • It isn't a replacement for existing Line of Business functionality
  • It isn't transactional or a message broker (a la BizTalk)
  • It doesn't do data transformation (SQL SSIS)
  • It isn't a data adapter (iWay)

Brad then presented a demo of how the BDC could surface HR system data stored in Oracle onto the MOSS portal. He showed how easy it was to use the free version of BDC Meta Man to build the initial BDC app schema file, and showed us how the BDC web parts could present and filter this information.

Updates to the Oracle database appeared upon refresh, and the BDC information could be added as metadata to existing lists and libraries. BDC Actions allowed HR staff to view the profile data of the records or even launch custom actions using URLS, such as launching a window to search on Seek.com for job candidates when a particular job title was selected on the SharePoint page.

I think the BDC is one of the best features of Office 2007 with some of the least documentation and fewest tools! A painful paradox.

Both Brad and Han did a good job and I think we all enjoyed the session.

Saturday, August 18, 2007

If you're Sydneyside then you may be interested in attending two events this week: the .NET User Group and the SharePoint User Group.

The SharePoint User Group meets at 5:30pm on Tuesday at Unique World's office on Level 14, 24 Campbell Street.

Come along to the August User Group to hear Brad Saide from Live Point presenting on Business Data Catalogue and participate in a discussion with Han Duong from Live Point on customising SharePoint Themes.

In addition to Brad & Han's presentations, Jey from K2 will showcase K2 blackpearl, the BPM product from K2, and how it extends MOSS 2007.

The .NET User Group will be meeting at the Microsoft campus on Epping Road in North Ryde on Wednesday from 5:45pm to 9pm. This month Johann Kruse will be talking about Office Communicator 2007. You can find out more information about the event here.

I'll try to get more information on how exactly Office Communicator hooks into SharePoint (presumably through the existing "presence awareness" feature and there is also an API that can surface a lot of information).

Hope to see you there. Happy coding!