Trials and Tribulations: Migrating My Demos Site to Office365

Over a year ago, I built myself a virtual machine in VMWare Workstation so that I could hack around with it. I’ve used it for some client development, but mostly it’s where I work on the demos I use when I speak at events.

Recently, when FPWeb decided to get out of the Exchange hosting business (I was sad to leave them – they are awesome to work with) I set up an Office365 account with Microsoft, at first just for Exchange. Not only did I feel that it was a good value, I also wanted to be able to eat some of the dog food that I talk about all the time. I like Exchange over plain old free POP or IMAP email services because I get the same view on all of my devices; the synching provides just the right solution for me and I’m willing to pay for it. (No free ride for us Microsoft MVPs, sadly.)

Office365 is pretty cool to work with. It’s got a little bit too much of a system administrator feeling, but not nearly as much as I had worried about. The menus and pages are cleanly laid out (more of that fresh Metro UI-ish goodness, though I’m sure we’ll all be tired of it in due course) and generally pretty easy to figure out. It may be that’s because I know the underlying products reasonably well, but it’s certainly a giant leap forward from what Microsoft has done with admin interfaces in the past. I don’t think that the average small company person could figure out how to use it all, but it suits me just fine.

Now that I’ve got things set up, I wanted to port my demo stuff to SharePoint Online from my VM. The VM works just fine, but porting is a useful exercise, plus I would like to move my Sympraxis Consulting Internet site to SharePoint Online at Office365 at some point, so this is a good first step. (I still have my Sympraxis site hosted with FPWeb in WSS 3.0, believe it or not. It’s good enough for now, frankly.)

It seemed as though this should be a fairly easy process. I’ve got a few sites in a separate Site Collection for the demos, and all I thought I’d need to do is to save them each as a Site Template (actually, a Solution – the Save “Site as Template” item wording doesn’t match the gallery name that it ends up in – the Solution Gallery) and then rehydrate it in SharePoint Online. The way I work in SharePoint’s Middle Tier, I don’t need to activate any wacky features, so how hard could it be?

I already had a Solution saved for my Middle Tier site, so I uploaded that to the Solution Gallery in SharePoint Online and activated it with no problem.

image

It can be pretty easy to forget to activate the Solution, so I’ve highlighted the button above.

Once the Solution was activated, I went to create a new site with it.

image

Hey, this was going well. It was really easy!

WHAM! The easy stage was over.

image

OK, so somehow I’ve got a feature activated in my VM that isn’t activated in my SharePoint Online site. No big deal, right? I can just go and find the {b5934f65-
a844-4e67-82e5-92f66aafe912} feature and activate it for SharePoint Online. But what the heck is the {b5934f65- a844-4e67-82e5-92f66aafe912} feature?

I Bingled the GUID (see my post on using OneNote to get the text from a screen grab for a tip – for some reason you can’t copy the text in the error to the clipboard) and found the answer on Ian Morrish‘s excellent WSSDEMO site.

{b5934f65- a844-4e67-82e5-92f66aafe912} feature

Well, not the actual answer, but something sort of informative. Since the DisplayName is ReviewWordflowsSPD and the Title1 is Routing Workflows – SharePoint 2010, I could reasonably assume that it had something to do with workflows. I compared the two environments and realized that I needed to activate the Wordflows (Aggregated set of out-of-box workflow features provided by SharePoint) Site Collection Feature:

Workflows Feature

Well, maybe this wouldn’t be so bad, after all, I thought. I activated the feature and went to create the site again. WHAM! Out of the fast lane again.

{af6d9aec-7c38-4dda-997f-cc1ddbb87c92} error

This is where I got a little annoyed and tweeted:

and then later

So far, I haven’t been able to figure out what the {af6d9aec-7c38-4dda-997f-cc1ddbb87c92} feature is. The hits I get by searching tell me things about the Help Desk Template from the Fantastic (not so much) 40 templates, but I’ve never had that in any of my environments. One of the hits I got from searching was right back on my own blog (always a delicious irony).

So I’m stuck, and there’s no obvious way to figure out what that feature actually is. The point is that the GUID is pretty uninformative. SharePoint shouldn’t give me such unactionable, vague information. Even if I can find the GUID written up somewhere (as in Ian’s helpful site above), it’s not always obvious what to do with the information.

I’ve talked to quite a few people about the fact that I think one of the critical success factors for Office365 will be portability. What I was trying to do was pretty basic. I wanted to understand how Office365 might work for me if I wanted to use it for hosting my stuff. We all need to be able to move content in and out of The Cloud at will.

This is probably the first thing that any large enterprise would want to do as well. “Hey, let’s get Sandie down in the SharePoint admin pit to copy some of our typical sites over to SharePoint Online and see how they work.” At least, that’s what I’d do if I were a CIO thinking about moving some of my stuff to The Cloud. I’d want to see how easy it was to do something basic. Poor Sandie probably doesn’t have much of a chance of completing the task, though. As CIO, I’d want to know that I can *reasonably* easily move my stuff into the Cloud and back again. This would give me a comfortable feeling that I could trust Office365 with my stuff and not worry about changing my mind (or having my business requirements change it for me) down the road.

I’m pretty sure that I’m going to work out my little problem with good old {af6d9aec-7c38-4dda-997f-cc1ddbb87c92} – after all, I can hit up some of the best SharePoint minds on the planet through the MVP network – but I’m not so sure that Sandie and her CIO will get past these types of things as they look at using Office365. My suggestion to the Microsoft folks is to come up with some really brain dead easy tools to facilitate this sort of thing. (I know for a fact that my friends at MetaVis have a great toolset to enable this, but should I need to work that hard?)

Even better: stop putting GUIDs in front of end users and expecting them to know what to do with them.

<UPDATE dateTime=”2012-02-06″>

I did solve this issue, and you can read all about it in my follow up post.

</UPDATE>

Can You Enhance the "Export to Spreadsheet" Action for SharePoint Lists?

I got an interesting question today from the InterTubes, and I though it would make a good post. Export to Spreadsheet

[Do you] you know of any resources/solutions to enhance the List’s “Export to Spreadsheet” function so that, once the data is opened in Excel, something would trigger VBA Macro(s) to start formatting the spreadsheet.

“Export to Spreadsheet” merely opens the Book1 standard spreadsheet, absent of any macros, etc. Might some code embedded in a List column be able to trigger the macros?

I can’t see a way to do it.

When you Export to Spreadsheet, you aren’t really getting a spreadsheet. You’re getting a file called owssvr.iqy, which Excel understands and can open. It’s called an “Internet Query File”, based on a little quick Binging.

I just saved one of those files to my drive and cracked it open to see what was in it:

WEB
1
http://domain/sitename/_vti_bin/owssvr.dll?XMLDATA=1&List={A533AC91-7AE5-4153-93FE-40025B8E704B}&View={49C6E728-96AD-44E4-818D-BFFC0D699443}&RowLimit=0&RootFolder=%2fsitename%2fLists%2fOffices

Selection={A533AC91-7AE5-4153-93FE-40025B8E704B}-{49C6E728-96AD-44E4-818D-BFFC0D699443}
EditWebPage=
Formatting=None
PreFormattedTextToColumns=True
ConsecutiveDelimitersAsOne=True
SingleBlockTextImport=False
DisableDateRecognition=False
DisableRedirections=False
SharePointApplication=http://domain/sitename/_vti_bin
SharePointListView={49C6E728-96AD-44E4-818D-BFFC0D699443}
SharePointListName={A533AC91-7AE5-4153-93FE-40025B8E704B}
RootFolder=/sitename/Lists/Offices

What that file points to is owssvr.dll on the server, and that is where the data actually comes from. If you aren’t familiar with owssvr.dll, it provides sort of an earlier version of the RESTful services that we see in SharePoint 2010, but it’s been around since SharePoint 2003 (at least — SharePoint 2001?).

What owssvr.dll provides in turn is XML which represents the contents of the list items. That XML looks very similar to that which is returned from the GetListItems operation of the Lists Web Service, plus information which tells Excel what type of data it’s getting and what the column names are:

<?xml version="1.0" encoding="utf-8" ?>

<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
	<s:Schema id="RowsetSchema">
		<s:ElementType name="row" content="eltOnly" rs:CommandTimeout="30">
			<s:AttributeType name="ows_Attachments" rs:name="Attachments" rs:number="1">
				<s:datatype dt:type="boolean" dt:maxLength="1" />
			</s:AttributeType>
			<s:AttributeType name="ows_LinkTitle" rs:name="Title" rs:number="2">
				<s:datatype dt:type="string" dt:maxLength="512" />
			</s:AttributeType>
		</s:ElementType>
	</s:Schema>
	<rs:data>
		<z:row ows_Attachments="0" ows_LinkTitle="Washington" />
		<z:row ows_Attachments="0" ows_LinkTitle="Istanbul" />
		<z:row ows_Attachments="0" ows_LinkTitle="Mexico" />
		<z:row ows_Attachments="0" ows_LinkTitle="Buenos Aires" />
		<z:row ows_Attachments="0" ows_LinkTitle="Hong Kong" />
		<z:row ows_Attachments="0" ows_LinkTitle="London" />
		<z:row ows_Attachments="0" ows_LinkTitle="Warsaw" />
	</rs:data>
</xml>

So what does all this add up to? Well, I can’t see a way to “hook into” the process to invoke a macro or any other code. This is undoubtedly by design, as with many things, to keep the client machine secure in the process.

There are undoubtedly ways to do this by writing managed code to extend the functionality or create new functionality, but that’s not in my wheelhouse. Anyone have any good ideas on that?

Microsoft Online Services Pricing

In an email from Microsoft the other day, I saw an offer for Microsoft Online Services and was curious about what’s available and what the pricing might be.  After navigating through the too byzantine process to get to it, I was able to see the pricing below.

Microsoft Online Services Pricing

Microsoft Online Services Pricing (as of 2009-01-17)

Here’s the blurb on the Business Productivity Online Standard Suite:

Microsoft Business Productivity Online Standard Suite is a set of messaging and collaboration solutions hosted by Microsoft, and consists of Exchange Online, SharePoint Online, Office Live Meeting, and Office Communications Online (coming soon). These online services are designed to give your business streamlined communication with high availability, comprehensive security, and simplified IT management. Your business benefits from always up-to-date technologies that are deployed rapidly, maximizing your valuable IT resources and reducing your need for infrastructure investments.

I’m not exactly sure why the discount appears (though part of it looks like it may be due to the fact that Office Communications Online is not yet available but is part of the bundle) but even without it the prices look very reasonable.  $7.25 a month/person for SharePoint seems like an out and out bargain based on what I’ve seen others charging.  The datasheet for the Business Productivity Online Standard Suite makes it seem like you’d be getting a real hosted MOSS portal for that price.  (As usual with Microsoft’s pricing and marketing materials, I find it a little difficult to understand exactly what you’d get without reading a lot of fine print — or signing up for the 30 day trial, which I may do.)
All in all, well worth a look if you are considering putting your toe in the water and have a difficult internal process to get hardware in-house.