Archive for March, 2010

SP 2010: Site Collection Keep-Alive Job now available by AC

March 29th, 2010 by Tobias Zimmergren

Author: Tobias Zimmergren | | @zimmergren


Normally I don’t make link-posts like this one, but it is too good to miss out on. My main man and friend Andrew Connell (AC) have created a new utility for SharePoint 2010 which is essentially a "warmup" job for your Site Collecions.

This job is easy to configure and will keep your demos, presentations and dev-machines fresh all the time by making repeated HTTP requests on the sites.

Awesomeness, AC. Good work!

Get the info, get the goods – SharePoint Site Collection Keep Alive Job

Head on over to to get the latest details and download this fantastic keep-alive job.

Enjoy this piece of awesomeness from AC.


Author: Tobias Zimmergren | | @zimmergren


Microsoft has published the two developer-oriented certifications for SharePoint 2010 on Microsoft Learning.

Personally, I think there is a huge improvement now as we’re not only getting the MCTS-credit but can now also become an MCPD (Microsoft Certified Professional Developer) on the SharePoint platform. Something I’ve been waiting for a long time ;-)

SharePoint 2010 exams

For us developers/solution architects there are two certifications of interest (of course you should do the IT-pro tracks as well, but let’s start here with the developer ones):

  1. 70-573: TS: Microsoft SharePoint 2010, Application Development
  2. 70-576: PRO: Designing and Developing Microsoft SharePoint 2010 Applications

SharePoint 2007 Exams

Way back in 2007 I wrote about passing all 4 certifications for SharePoint 2007 (link here). For SharePoint 2007 there is four certifications for the 2007 product-line:

  1. 70-541TS: Microsoft Windows SharePoint Services 3.0 – Application Development
  2. 70-542TS: Microsoft Office SharePoint Server 2007 – Application Development
  3. 70-630TS: Microsoft Office SharePoint Server 2007, Configuring
  4. 70-631TS: Microsoft Windows SharePoint Services 3.0, Configuring


So, keep an eye out on those two new certifications and be well prepared when they arrive – should be a fun ride :-)

Author: Tobias Zimmergren | | @zimmergren


If you’ve been playing around with SharePoint 2010 lately, you’ve most likely noticed a new concept introduced as "Sandbox Solutions".

With sandboxed solutions (read more about them here: comes the possibility to scope your solutions to Site Collection (into the new Solution gallery).

A question I often get is how you can validate those solutions automatically, and therefore I’ll lay out the basic principles of creating a Sandbox Solution Validator which now is part of the SharePoint object model.

What will happen?

If you have a custom Solution Validator hooked up with your farm, a custom error page will be displayed, and the solution will not be activated.

If you try to activate the solution:

Our custom Solution Validator kicks in and in this case disallows the solution and displays the following custom error page:

So, let’s get down to business!

Building a Solution Validator

What we need:

  1. A Solution Validator
  2. A feature to install/uninstall the validator in our Farm

1. Let’s begin by creating our custom Solution Validator class

Essentially this is just a simple class, inheriting from SPSolutionValidator which gives us some methods we can override. Check this example out:

using System.Runtime.InteropServices;
using Microsoft.SharePoint.UserCode;
using Microsoft.SharePoint.Administration; namespace

    public class ZimmergrenSolutionValidator : SPSolutionValidator
        private const string myAwesomeValidator = "ZimmergrenSolutionValidator";
        // Not used, but needed for deployment and compilation
        public ZimmergrenSolutionValidator(){}  

        public ZimmergrenSolutionValidator(SPUserCodeService sandboxService) :
                   base(myAwesomeValidator, sandboxService)
            // Use this to define a unique identification number
            // You may need this when updating/modifying the validator
            Signature = 666;

        public override void ValidateSolution(SPSolutionValidationProperties properties)

            // Set to false if you want invalidate the solution
            // Set to true (default) if you want to validate
            properties.Valid = false; // Being evil and invalidates all solutions for test!

            // Then specify an errorpage to display
            // Tip: Create a nice application page for this..
            properties.ValidationErrorUrl =

In my sample I used an override of the ValidateSolution method and invalidated the solution to show you that it actually works.

The two most suitable methods for overriding are:

  1. ValidateSolution
  2. ValidateAssembly

2. We need to make easy installable (Read: Feature)

In order for our awesome solution validator (which in this case is very slim and don’t really do any real validation, rather invalidates all solutions) – we need to let the SPUserCode service (Sandboxed Solution Service in layman terms) know that we want to hook it up.

This can easily be done using a Farm feature, using PowerShell or just plain’ol Object Model code in any application.

My approach is of course to make it as easy as possible for the end-user and administrator, so I’ll create a Farm Feature with the following snippets of code:

public class ZimmergrenSolutionValidatorEventReceiver : SPFeatureReceiver
    public override void FeatureActivated(SPFeatureReceiverProperties properties)
        SPUserCodeService sandboxService = SPUserCodeService.Local;
        SPSolutionValidator zimmerValidator =
                new ZimmergrenSolutionValidator(sandboxService);

    public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
        SPUserCodeService sandboxService = SPUserCodeService.Local;
        Guid zimmerValidatorId =

Summary and reflections

If you want to create some kind of check to automatically validate solution that are uploaded by end-users in their Solution Galleries, this is the way to do it.

Solution validators are very easy to write, and they can be installed using a few different approaches. My take is to create a farm feature, while you could still do it using powershell or in any way you want through the object model.

Good resources on Sandboxed Solutions:

  1. Deploying a Sandboxed Solution
  2. Sandboxed Solution Considerations
  3. Sandboxed Solution Architecture


Author: Tobias Zimmergren | | @zimmergren 


With the new version of SharePoint comes a full set of new and awesome features that you’ll have to indulge and learn. One of the small things that makes my day much more fun is to display messages to your users in the Status- and Notification areas.

Example of a message in the Status bar area:

Example of a message in the Notification area:

How do we make this magic happen?

In order to display these messages, you really (really) don’t need a lot of code. I’ll lay out the simple code I used to display the messages you saw in my screenshots.

It’s all JavaScript based, so get ready to dig out those old JS skills you know you’ve got lying around somewhere ;-)

Oh wait, you don’t need skills to do this, it’s just that easy!

Show me a Status bar!


function ShowStatusBarMessage(title, message)
    var statusId = SP.UI.Status.addStatus(title, message, true);
    SP.UI.Status.setStatusPriColor(statusId, ‘yellow’); /* Set a status-color */

HTML, call the JS method:

<a onclick="ShowStatusBarMessage(‘Title’!',’Awesome message!’)">
    Display Status Bar message!

Show me a Notification popup!


function ShowNotificationMessage(tooltip, message, sticky)
    SP.UI.Notify.addNotification(message, sticky, tooltip, null);

HTML, call the JS method:

<a onclick="ShowNotificationMessage(‘I am cool!’,'This is a cool message’,false)">
   Display Notification!


Actually, there’s no need for a summary. It’s way too easy.


Author: Tobias Zimmergren | | @zimmergren


Some of my friends, students, clients and fellow Sweden SharePoint User Group members have been asking when and where I will show up for some interesting discussions in Q1/Q2 this year. So I thought I’d lay it out simple and easy, with focus on the big things happening in the coming few months!

Sweden: Sweden SharePoint User Group

As usual you will find me at our awesome Sweden SharePoint User Group meetings. I have a plan to put some of these meetings in Göteborg and Malmö during Q2/Q3 as well, if there is an explicit interest in doing so. Let me know by emailing me (tobias (boink) and we’ll get something sorted in Göteborg and Malmö.

Sweden: TechDays 2010, Örebro


I will be representing the Sweden SharePoint User Group at TechDays Sweden in Örebro. Come meet me there to discuss opportunities, events and beer – all things related to SharePoint.

I will also be throwing 100 t-shirts at people who walk by – so make sure you pop over before they run out!

Link to event: 

England: SharePoint Evolution Conference 2010, London


I will be attending and running around at the SharePoint Evolution Conference in London in mid-april. Meet me and a lot of other awesome SharePoint folks to discuss anything related to SharePoint, beer or golf.

Link to event:

New Zealand: SharePoint Community Conference 2010


I will be speaking at the New Zealand SharePoint Conference in June this year, so if you are in the neighborhood – pop by New Zealand and say hi ;-)

[This section will be updated as more details become available]

Australia: SharePoint Community Conference 2010


I will be speaking at the Australia SharePoint Conference in June this year, so if you are in the neighborhood – pop by Australia and say hi ;-)

[This section will be updated as more details become available]


These are just a few of the most awesome things I’ll be doing this first half of 2010. There’s a whole bunch of other cool things going on, but these are the main public events going down – so don’t hesitate to pop me an e-mail if you’re going to attend any of them and we’ll grab a few beers!

This is my current development rig

March 15th, 2010 by Tobias Zimmergren

Author: Tobias Zimmergren | | @zimmergren


A lot of my clients, students and SharePoint friends have been asking me about details on my latest development rig – so here you go, a full disclosure of the machine and it’s peripherals that I’m currently using for my primary SP 2010 development.

Notes: I’ve been running with HP for my laptops the last couple of years – and all I can say is that they’re amazingly stable and versatile and my next laptop will probably be HP as well!

Hardware configuration

In this section I’ll talk about the hardware configuration of my development rig, along with the peripherals I use on a daily basis to make my SharePoint and .NET world rock!

Laptop details

Learn more about the actual laptop models:

HP Compaq EliteBook 8530w (Mobile Workstation, EliteBook)


I use this docking station on a daily basis to enable quick docking of my laptop at home and at the office. Definitely worth the cash!

HP 2008 120W Docking Station


Intel(R) Core(TM)2 Duo CPU, T9400 @ 2.53GHz

RAM memory



For my internal disks (that is, not external) I’m using two of these:

Corsair 128 GB Performance Series Internal Solid State Drive (SSD)

For my external disks, I’m using the following:

+ 500GB eSATA 7200rpm disks connectable to the eSATA port on the laptop, for storage

Software configuration

This is my current software configuration (related to my daily-basis work):

  • Windows 7 Ultimate
    • VMWare Workstation 7
    • Office 2010 (Beta)


To sum it up really quick – I’m using a normal EliteBook laptop.

I’ve simply replaced the optical (DVD/CD) drive with a second SSD disk. This makes for a super-fast experience in your computer no matter if you’re doing things virtually in VMWare or if you’re doing it on the host operating system, as I’m placing my VM’s on the secondary drive.

It’s definitely worth spending a few extra bucks on those SSD drives, I would do it without a blink of an eye.

Since there isn’t any alternative for running a client-based virtualization engine in 64-bit from Microsoft, I’ll stick with VMWare Workstation for now – which has done the job very (very!) well!

Sidenote: I’m looking at the HP Envy for an upgrade to a newer model later. Support for +16GB RAM is going to have a huge impact on my decision for my next laptop.