Adventure in SPWonderland

Take apart and put back together


Silverlight 2: Unable to call SharePoint's Web Services

While preparing for the presentation on Silverlight and SharePoint next week I've just discovered that the current Beta 1 of SilverLight 2 is unable to call SharePoint's native webservices.

The technical reason is that the WSDL SharePoint generates includes an asd:any declaration which is translated by the proxy generator as requiring the XmlElement class but Silverlight does not support this class. So you're not able to call GetList or GetListItems in Lists.asmx for instance.

I've posted on the Silverlight forums about this but the reply I got from Yavor Georgiev (Program Manager - Connected Services) was not clear as to whether this is a planned feature for SL 2.

There are a few ways around this which I'll go into in the presentation but none are very pleasant prospects.

There's probably still time to get this feature in v2. The best thing is to let MS know this is an important issue by adding support on the thread. Also worth keeping an eye on the Silverlight Web Services blog.

Presenting SharePoint + Silverlight at the SharePoint UK UserGroup Basingstoke March 27th

I'm really stoked to be presenting at the UK SharePoint user group meeting in Basingstoke on the 27 March about Silverlight and SharePoint.

This presentation will explain what Silverlight is, what the benefits are over standard web development and how Silverlight can be hosted in and integrate with SharePoint.
With few slides and plenty of demos I'll walkthrough the creation of a Silverlight 2.0 video browser application that uses data from SharePoint and then deploy it to SharePoint. I'll also show how a commercial Silverlight 2.0 product for SharePoint is put together.

The other presentations are

Architecting a Highly Available MOSS Farm - by Lewis Baldwin, ICS,  Head of Infrastructure and Support

Governance: Protecting your SharePoint Investment by Symon Garfield, ICS,  SharePoint Practice Lead

The good folks at ICS solutions are hosting us at their offices in Basingstoke (

Just post a reply with your full name on this thread (registration required)

Sharepoint and Powershell Virtual lab

I forgot to post this before but Microsoft has created a virtual lab based on my blog postings. If you're interested in Powershell and SharePoint its definitely worth checking out

As noted on Ben Pierce's blog Powershell is now a CER common engineering requirement for all products released in 2009 and beyond, that should mean as Office 14 is due for release in 2009 PowerShell should be a mandatory feature in SharePoint.

Thats good news and a big change as when I'd asked the question about PowerShell support in SharePoint to Mike Fitzmaurice back in February last year the answer was they had no plan to do so.

SharePoint 2007 and Open Protocols

Microsoft has recently pledged to release the documentation of a lot of its up-to-now internal server protocols.

'Microsoft is providing access through open connections to its high-volume products—Windows Vista (including the .NET Framework), Windows Server 2008, SQL Server 2008, Office 2007, Exchange Server 2007, and Office SharePoint Server 2007—so that software developers, business partners and competitors can better interact with these Microsoft products or invent new solutions for customers.'

Obviously the ones getting the most attention are the server SMB interfaces but also of interest in a real geeky way are ones for the Windows Search Service and WebDAV.

What's tweaked my curiosity is that SharePoint 2007 is mentioned on this list. What interfaces are they talking about? Client side protocols like the FrontPage RPC's?  Server side ones? Dunno but it could be interesting.

Personally given the time I spent a long time ago extracting data from a corrupt Microsoft MDB in 2k pages I'd like to see the Jet DB format released, just for old times sake.

Kudo's to Microsoft to releasing this information with a much dignity as anyone with their arm twisted up their back by the EU could.



thanks to Sean Watson for explaining that the SharePoint related Open Protocols are three WebDAV and two FrontPage ones

MS-WDV  Web Distributed Authoring and Versioning (WebDAV) Protocol: Client Extensions

MS-WDVME  Web Distributed Authoring and Versioning (WebDAV) Protocol: Microsoft Extensions

MS-WDVRV World Wide Distributed Authoring and Versioning (WebDAV) MS-Author-Via Protocol Specification

MC-FPSEWM FrontPage Server Extensions: Website Management Specification

MS-FPSE FrontPage Server Extensions Remote Protocol Specification

for more details about the Microsoft Communications Protocol Program MCPP and the legal status of these documents see 

The gist of it seems to be that open source projects are free to use this information but commercial products would possibly be subject to licencing and patent requirements depending on what they implemented.

EVO Community Day - June 21st: Microsoft Campus Thames Valley Park Reading

I’m presenting at the EVO (Exchange, Vista, Office) Community day next Thursday the 21st June.

I’ll be doing a session that shows how you can use Powershell to read information from Exchange and getting it into SharePoint 2007.
Its really hard to know how to pitch a presentation like this as the mix of experiences is probably going to be wide, from people seeing this stuff for the first time to old hands. Anyway I’m looking forward to it.

The talk will cover some Powershell basics, calling the new Exchange Web Services from PowerShell and why we might still need to use WebDAV(hint Public Folders) and of course how we write to SharePoint.
I'll start posting some of the code samples over the next week.

There’s lots of other sessions including ones from Steve Smith on SharePoint and Richard Siddaway on PowerShell, should be a good one.

Heres the details of the Event:
The Next EVO Community Day - June 21st: Microsoft Campus Thames Valley Park Reading

Event Agenda
09:30 Start
09:30 - 10:00 Keynote
10:00 - 10:25 Introductions to groups (Including LiveMeeting, Longhorn, Virtualisation)
10:25 - 10:55 Vista
10:55 - 11:10 Break
11:10 - 12:40 Office, SharePoint, Groove
12:40 - 13:25 Lunch
13:25 - 14:55 Break-out sessions
14:55 - 15:10 Break
15:10 - 15:40 OCS + UM
15:40 - 16:40 Exchange and PowerShell
16:40 - 16:55 Break
16:55 - 17:30 Q&A

Further agenda information can be found here:

To sign up and more information:


Presenting at the UK PowerShell User Group 22 March Meeting

I’m presenting at the next UK PowerShell User Group meeting on March 22nd doing an updated talk around using PowerShell with SharePoint featuring an intro to PowerShell,  Demos and roundup with SharePoint/PowerShell gotchas and 'tips and tricks'.

The talk should be be of interest of anyone who might like to talk to a managed API with Powershell.

I’m doing the first talk and Richard Siddaway is doing the second session with a talk on using ActiveDirectory with PowerShell.
If you need an intro to using PowerShell or want or ask more advanced questions this will be a good place to be.

Memphis Room
Microsoft Building 3
Thames Valley Park

Registration 18:00
Start           18:30

You need to register for attendance so follow the instructions in this link:

Hope to see you there.

SharePoint European Conference highlights

I've posted a short piece about the SharePoint European conference on the SUGUK blog, reproduced here

SharePoint European Conference

This is the first SharePoint specific conference I’ve been to and I was impressed by the amount of interest shown by the European’s, with over 2000 attendees from 50 countries and with the UK providing around 160 delegates it was very busy, it seems that even MS was taken by surprise at the amount of interest.

The organisation was of a high standard as you’d expect from a conference hotel, lots of staff and lots of food the only omission as Eric Shupps has already mentioned being the lack of free WIFI access and the really slow speed of the paid for one, they were plainly not geared up for a WIFI swarm drain of techies popping open their laptops and trying to surf the web.

Most of the sessions were of a high standard with speakers either from Microsoft or their partners, the only real dud I attended was the business intelligence one which fell completely flat, poor content and speakers meant I ended up walking out something which I never normally do.

Kudo’s to Steve Heaney of Nintex who did 30 minutes of workflow coding in Visual Studio 205 and had it compile and run without errors, I think he was more surprised at this than anyone.

Here’s my take on a couple of sessions that opened my eyes to new features of the Office 2007 suite.


This session by Peter Koen described the OpenXML format of the new Office 2007 programs Word, Excel and PowerPoint. It showed how easy it is to modify existing document using the Packaging API in .Net 3.0 and pointed out how powerful this could be in conjunction with List Events and Workflow. The power of this API is that you do not need to automate any of the Office programs you just deal with the file itself, this is very important in server side code as most SharePoint code tends to be.

 A couple of examples, lets say you have a Document library called Draft and one called Confidential, what you would like is for all documents that are placed into these document libraries to have a watermark applied that says either DRAFT or CONFIDENTIAL applied to them. With list events and some fairly simple code this should be pretty easy to do.

Or lets say you have 100’s of documents in various document libraries that you send out to clients on a regular basis and each one has your logo in it along with your company name and details in the footer of each one, lets say you undergo a re-branding exercise or an office move, you are now faced with opening each one of those documents and changing the logo and footer by hand or perhaps automating Word with VBA. With the OpenXML format you can crack open the Docx file and with a few lines of code manipulate the parts of the document you need to, it would also be an order of magnitude faster than calling Word.

The one current hassle is you have to deal with the Word XML directly, there is no API available that maps say a Word object model onto the XML needed but apparently that is on the development timeline.


This was a really good session by Mark Ryan of Microsoft, clearly someone who has been there and got the T-shirt.

Groove is a program I’ve ignored up to now but this session makes clear its not something that can be ignored for much longer, it just too useful a program.

Groove supports offline distributed and replicating workspaces containing lists, discussions, files and custom data form. It basically allows you to do offline collaboration in the same way as SharePoint allows online collaboration.

The integration with SharePoint is limited at the moment as it currently only supports offline documents from document libraries with no support for lists, but if the Groove team gives the SharePoint team some ‘love’ this should improve in the next version.

As Groove is new to the Office stable it does not have the .Net/Visual Studio integration that it possibly should have and although you can embed InfoPath forms to create data entry forms Mark recommends to stick with Groove forms for now.

 One scenario mentioned was for offline workgroup collaboration on a design project involving images but perhaps the most interesting scenario is crisis management.

Picture this: you have a physical disaster at your main office, lets say a flood, all company VPN and mail communication through the head Office is down, with Groove you could have a nominated person who holds a predefined workspace containing the company contact list along with the disaster recovery plans and checklists, that user can quickly invite other needed parties into the workspace and as long as people have an internet connection they can stay informed and up to date on all activities as the company works through the steps to get back to normal. Even if you don’t use Groove on a day to day basis in a case like this it would be worth its weight in gold.

 Definitely check Groove out,

 Looking forward to the next one, don’t know when it will be but one thing’s for sure they are going to need much bigger venue.


UK SharePoint User Group Meeting March 7th

The UK SharePoint User Group meetings are coming thick and fast, the next one is being held on 7th March in Ullesthorpe, Leicestershire.

This should not be missed as it features 3 speakers, Andrew Woodward, Bill English and Todd Bleeker.

I've seen both Bill and Todd speak and its an experience ;-)

Put your name on this thread to signup for the meeting


SharePoint/PowerShell 8: The one with the Contact Web Part


Following on from the work in my previous post where I set the users Picture property in their profile the next step is to add a Contact Web Part to our imported publishing pages. I’m using the default layout page to add the contact Web Part to, this page has the Web Part Zones underneath the content fields but you could use another layout that has a Web Part zones to the right of the content fields and of course you can use SharePoint Designer to create your own layout formats and embed the Contact control without using code.

This is how our publishing pages will look once we have added the Web Part to each page

An interesting feature of a Publishing page is that it has a contact property where you can assign user details to each page, you can either lookup the user from the picker in which case the page will pull the users details from the profile database or you can type in the details yourself.


The nice thing about the Contact Web Part is that once you have added it to a publishing page it will automatically pull the picture and the users description (if set in the Web Part) that has been assigned to the page from the profile database.

One bad thing about the part is you only get the choice to put the users name left or right not top or bottom.

So on to the code, I need a function that will take a site URL and then set the default Publishing Page’s contact property and then add the Web Part to the page.



# Function: Add-ContactWebPart # Description: Adds the Contact User Web Part to a publishing page # Parameters: SiteURL - Server relative URL of the Area # UserName - UserName to show as the contact in domain\user format # # Requirements: Needs to have the System.Web assembly loaded # function Add-ContactWebPart($SiteURL, $UserName) { $comment = "Contact WebPart Added" $site = new-object Microsoft.sharePoint.SPSite($SiteURL) $web=$site.OpenWeb() $user= $web.Users.get_item($UserName) $pubweb = [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($web) $defaultpage=$pubweb.GetPublishingPages()[$pubweb.DefaultPage] $defaultpage.CheckOut() # Set Contact "Setting Contact on " + $pubweb.url + " to " + $user.Name $defaultpage.set_Contact($user) $defaultpage.Update() $webpartmanager=$web.GetLimitedWebPartManager($defaultpage.Url, [System.Web.UI.WebControls.WebParts.PersonalizationScope]::Shared) $webpart=new-object Microsoft.SharePoint.Portal.WebControls.ContactFieldControl $webpart.ChromeType=[System.Web.UI.WebControls.WebParts.PartChromeType]::TitleOnly; $webpart.Title="Page Contact" $webpart.PicturePosition=[Microsoft.SharePoint.Portal.WebControls.PictureDirection]::Left $webpart.IsDisplayJobTitle=$true $webpart.IsDisplayPicture=$true $webpartmanager.AddWebPart($webpart, "LeftColumnZone", 0); " Checking in page" $defaultpage.CheckIn($comment) # Publish if($defaultpage.listItem.ParentList.EnableMinorVersions -eq $true -and $publishingPage.ListItem.File.MinorVersion -ne 0) { " Publishing" $defaultpage.listItem.File.Publish($comment) } # If moderation is being used handle the approval if ($defaultpage.listItem.ParentList.EnableModeration) { $modInformation = $defaultpage.listItem.ModerationInformation " Moderation on, Current Status: " + $modInformation.Status # Check for pending approval if($modInformation.Status -ne [Microsoft.SharePoint.SPModerationStatusType]::Approved) { " Approving" $defaultpage.ListItem.File.Approve($comment) } } # Clean up $pubweb.Close() $web.Close() $site.Close() }


In this code we find the SPUser object for the given username and set the Contact property of the PublishingPage to it. We then add the web Part using the new SPLimitedWebPartManager class. Most of the code is concerned with checking the page out and back in and assumes the page is not already checked out.

An interesting line is


I'm indexing into the collection return by GetPublishingPages because Powershell doesn't support generics in the current version.

UK SharePoint user group meeting

Don't forget the SharePoint user group meeting taking place tomorrow Feb 8th at Reading.

'Mr SharePoint community' Lawrence Lui is over from Redmond to take us through the Fab 40 Application Templates and lead a discussion on Office 14.

Sign ups and more detail here: