Apr 08
Fallout From the February Update to SharePoint 365

​Back in February Microsoft released its latest update to SharePoint 365.  One of the changes was a change to the way the the top blue and grey bars at the top of the screen were implemented.  About a year ago I had implemented a new web site for a customer.  The customer did not want the majority of the options on the blue and grey bars being displayed. So I wrote a bit of javascript to hide them.  I claim no uniqueness here, I took it off one of the blogs on the internet.  There were a number of blogs all doing the same thing, the same way, so it must be right.  It worked perfectly :-

     <script language="javascript">

       function HideBrandingsuite()
        document.getElementById('suiteBrandingBox').style.visibility = 'hidden';
        document.getElementById('suiteLinksBox').style.visibility = 'hidden';
        document.getElementById('RibbonContainer-TabRowRight').style.visibility = 'hidden';


Then around the 14th February, I suddenly found I could not edit the site. Clicking on "edit" in the top right hand corner did not work, clicking on the "gear" and the "Edit Page" also did not work.  The ribbon was greyed out so I could not used that.  I raised a call with the SharePoint Online community forum.  They could not see what the problem.  They raised a case with Microsoft, they could not see what the problem was.  It was escalated to an escalation engineer and they could not see what the problem was.  Doubts started to surface in my mind, if they cannot find the issue, then is it something I had done.  But I had not made any changes (other than adding / amending content) since last May.  So how could it be something I had done ?  I had some free time recently, so I decided to try and see what the issue. was.  I scoured the internet and cam across a few references to an update to SharePoint 365 in February.  One of the references talked about changes to the way the blue and grey bars were being rendered.  At that point a light bulb came on and I thought, I wonder if my changes to these were causing the problems I was having.  So I removed the above javascript from my masterpage.  Hey presto ! I could edit my site again.  So many apologies to the Microsoft Engineers and Microsoft Escalation Engineers who looked at my case.  It was my fault after all.

So how did I fix it ?  (This is bit is all my own work without reference to any blogs etc).  I looked at the HTML which was being generated and came up with this.  I used the Microsoft Web Debug tools which you can get to by clicking on F12 when on a web page.

<script language="javascript">

       function HideBrandingsuite()
        var ele1 = document.getElementsByClassName('o365cs-nav-O365LinksContainer');
        if((ele1 != undefined) || (ele1.length != 0))
        var ele2 = document.getElementsByClassName('o365cs-nav-rightSideButton');
        if((ele2 != undefined) || (ele2.length != 0))
        var ele3 = document.getElementsByClassName('ms-cui-topBar2');
        if((ele3 != undefined) || (ele3.length != 0))
        var ele4 = document.getElementsByClassName('o365cs-topnavLink');
        if((ele4 != undefined) || (ele4.length != 0))
         ele4[2].innerText="Name of The Site";
         ele4[2].className = "o365cs-topnavLink owaimg wf wf-size-x22 wf-family-o365";

      <!--MS:<SharePoint:SPSecurityTrimmedControl runat="server" PermissionsString="FullMask">-->
      <script language="javascript">

       function ShowBrandingsuite()
        var ele11 = document.getElementsByClassName('o365cs-nav-O365LinksContainer');
        if((ele11 != undefined) || (ele11.length != 0))
        var ele21 = document.getElementsByClassName('o365cs-nav-rightSideButton');
        if((ele21 != undefined) || (ele21.length != 0))
        var ele31 = document.getElementsByClassName('ms-cui-topBar2');
        if((ele31 != undefined) || (ele31.length != 0))


I first got hold of the new elements which displayed the options on the blue and grey bars and set display to none.  As a a slight twist, I changed the Heading name from "Office 365" to the name of my site, by hiding the reference to the Office 365 image and changing the name.  NB I had to slightly change the list of classes because the image was displayed using a class.  Then, for admins only I switched display back on and then added the function names to the list functions to be run when the page loads.

I hope this helps someone who may be experiencing the same problems.

Feb 27
First Impressions of Running SP2013 on Windows 2012R2

​1. after installing everything I got error The Security Token Service is unavailable.

i found this blog which seems to reflect my problem :- http://blogs.technet.com/b/sykhad-msft/archive/2012/02/25/sharepoint-2010-nailing-the-error-quot-the-security-token-service-is-unavailable-quot.aspx

i ran the enclosed powershell script and it all burst into life !

2. the sharepoint management console has disappeared.

3. Everything seems faster for some reason.  I am not complaining.

So far so good. i will update this blog if I find anything else.

A fairly painless upgrade even though it took 3 hours to complete.

Feb 27
SharePoint 2013 SP1 is out

​Finally, Microsoft has released SharePoint 2013 SP1 !

so if you have already installed SP2013 on Windows Server 2012, you can go ahead and install SP1 and then install Windows Server 2012 R2 over the top of Windows Server 2012 and you are fully up to date as SP1 contains all fixes up to and including the December 2013 and all security updates up to and including January 2014.


The gotcha is that you CANNOT install Windows Server 2012 R2 and then Install SharePoint 2013 followed by SharePoint 2013 SP1.

According to Stefan Gossner, you have to wait for the SP1 slipstream version to be available. http://blogs.technet.com/b/stefan_gossner/archive/2014/02/27/sp2013-sp1-faq.aspx




Jan 26
Grouping Using JScript

​Happy New Year Everyone !

I recently got asked to write some functionality so that a list would display announcements with the most recent ones first and the rest in descending order of when they were created.  I wanted to use JScript rather than use XSLT (see later) as there is much less code involved.  I thought this was going to be easy, but it turned out to be a little tricky !

So first create two (calculated) fields YearMonthDay and Year Month.  The first :-


Add to formula


Where "My Month" is the date of the Announcement.

The Second :-


Add to formula


So now add an list view web part for your list. Make sure you know the ListTemplateType and the BaseViewID. Mine was 100 and 1. These can be got from the List Schema.
Edit the page, open the tool box for the List View Web Part and edit the view (I editted the current view).
Sort using the YearMonthDay field (descending) and group using the YearMonth field and we are done (On the group section make sure the "expand" radio button is pressed or you do not see your entries) !
Unfortunately no.
(If we had used XSLT, the way grouping appears to work, is that it groups in alphabetical order.  So we can have groups starting in January or groups starting in December.  If we are in January, then we would expect the groups to be January, December, November etc, but oh no its January, February, March etc or December, November, October etc.) but ListViews seem to work differntly and we do get the months in the order we expect them.
But the group names are 201401, 201312, 201311 etc and we want months. So Jscript to the Rescue (Yes, you could use XSLT, but it takes alot of coding in XSL).  Martin Hatch produced a very good series on JScript ( www.martinhatch.com ) and my code looks remarkably similar except for a few changes shown by <=======.

function () {
  var njpOverrides = {};
  njpOverrides.Templates = {};
  njpOverrides.Templates.Group = CustomGroup;                                                                        <=======
  njpOverrides.Templates.Header = customHeader;
  njpOverrides.Templates.Item = njpViews.itemHtml;
  njpOverrides.Templates.Footer = "</div>";
  njpOverrides.ListTemplateType = 100;
  njpOverrides.BaseViewID = 1;
function customHeader(ctx) {
return "<div id=’MyCustomView’ style='Color:red'>";                                                                    <========

function CustomGroup(ctx, group, groupId, listItem, listSchema, level, expand) {                          <========
 var temp_month = listItem[group];
 var month = temp_month.substring(temp_month,4,6);
    var html = '<div style="float:left">' + get_Month(month) + ' : </div><br />';
    return html;
function get_Month(monthnum) {                                                                                                    <========
    if (monthnum=='01')
        return "January";
    else if (monthnum =='02')
        return "February";
    else if (monthnum == '03')
        return "March";
 else if (monthnum == '04')
        return "April";
 else if (monthnum == '05')
        return "May";
 else if (monthnum == '06')
        return "June";
    else if (monthnum == '07')
        return "July";
    else if (monthnum == '08')
        return "August";
 else if (monthnum == '09')
        return "September";
 else if (monthnum == '10')
        return "October";
 else if (monthnum == '11')
        return "November";
        return "December";


The first difference is that we override Group

njpOverrides.Templates.Group = CustomGroup; 

There is very little documentation on this and I began to wonder if it actually existed.

I found it here :-


and this article conveniently showed me what the arguments were.

So I wrote CustomGroup which got invoked everytime there was a new group and it translated from 201401 to "January".

customHeader was put there just to see what it did.  All of my Group Headers came out Red !

So the only thing left to do is to put the location of the Javascript into the toolbox for thr List View web part.  I put my Javascript files into the Site Assets folder.  Under Miscellaneous  :-


and we are done.

Here is the result :-



January :

Month 1 - Item 3

Month 1 - Item 2


December :

Month 12 - Item2

Month 12

November :

Month 11 - Item 2

Month 11

October :

Month 10

September :

Month 9

August :

Month 8

July :

Month 7

June :

Month 6

May :

Month 5

April :

Month 4

March :

Month 3

February :

Month 2


I hope this helps someone.

Nov 20
SharePoint Online – External Users Defined

​Thank you to everybody who showed up to my presentation on SharePoint Online - External Users Defined on the 19/11/2013 in Cambridge.  It was a good crowd with lots of questions.  It was good to be there.

Here are the slides :- External Users Defined





Nov 10
SharePoint Online - The Good, the Bad and the Ugly, One Year On


I had the pleasure of presenting at #SPSUK yesterday, 09th November 2013, on SharePoint Online.

I presented on the subject of SharePoint Online, the Good, the Bad and the Ugly which was about the what was good about SharePoint Online, what was bad about SharePoint Online and what was ugly about SharePoint Online.

The room was about full and I had a great crowd in who asked lots of good questions. 

Thank you all for coming !

Here are the slides.



Oct 12
Is this the end for Expensive Governance Engagements ?

​Dan Holme has published an article on the SharePoint pro magazine (http://sharepointpromag.com/sharepoint-administration/sharepoint-governance-best-practice-defeat) asking whether we should "shrink wrap" governance for specific workloads.

Just to be clear here before I start, I am NOT against governance.  I think it is an essential part of the SharePoint landscape and is essential if you are going to drive business value from a SharePoint deployment. 

There have been a number of expensive governance deployment engagements.  These engagements have threatened to sink the whole project because they have taken so long and consumed so much money.  There even instances where the governance part of the project has taken so long and has been so expensive that the whole project has been abandoned.  So there must be a better way of producing governance documents so that they do not take up significant amounts of time and money resources.  There has to be a way of producing governance at a reasonable cost.  Perhaps Dan's suggestion of a "Shrink Wrap" governance or "Best Practice" governance is a way forward.  Perhaps the SharePoint community should come together and define a "Best Practise" governance for the various SharePoint services and workloads that help customers avoid going down the wrong path and hurting themselves. 

I firmly believe that Governance is one of the "blocking" factors of why Sharepoint uptake is not at the levels that it previously was.  With the advent of Sharepoint Online, where you can start to set up a SharePoint site for as little as £5.20 per month (or $8.00 per month in America) per user, an expensive governance engagement cannot be justified.  So there has to be a more cost-effective way of producing governance and a "Shrink Wrapped" version must be an option.

I firmly believe that it is possible to come up with these "Shrink Wrap" governance for the various Sharepoint workloads and the SharePoint Community should come together to produce these "Shrink Wrap" governance for the various SharePoint workloads and services.

I am not suggesting for a moment that these "Shrink Wrap" governance for specific workloads is everything a customer needs.  It is not.  It is probably only 70% of the story.  There will still need to be some tailoring of the governance documentation to make it releveant to the specific customer that it is intended for.  So there will need to be a Governance engagement, but it should be much smaller and less expensive than currently it is.  Hopefully, this will remove one of the "blockages" to Sharepoint uptake. 

Sep 30
Speaking at SharePoint Saturday

​I am honoured and very excited to have been invited back as one of the speakers of SharePoint Saturday UK, by the organising committee.

This FREE annual event will be held at the Hinckley Island Hotel, Hinckley, Leicestershire on the 9th November and always includes loads of amazing content for developers, IT Pros, power users and SharePoint users, and this year is no exception.

As usual there are loads of great sessions and some really excellent seasoned speakers of international fame. 
I will be speaking in the O365 / cloud track about "SharePoint Online - the good, the bad and the ugly" , but I would definitely check out the full schedule and speaker list.

The event is always concluded with a SharePint and with the meeting being held in a hotel, hopefully everybody will stay and mingle.  So if you are UK based (or fancy travelling over for the day - There were a lot of non-UK based people at the recent SQL Saturday Cambridge meeting) make sure you register for the event and hopefully I'll see you there!  I was fortunate enough to go to SQL Saturday in Cambridge at the weekend and met a lot SQL Server people.  I hope that some of them will come to SharePoint Saturday UK and meet with Sharepoint people.

If you are avid on twitter then be sure to keep an eye on the #SPSUK hashtag for all the latest event updates.

Feb 21
Installing SP2013 on Windows Server 2012 without the aid of the Internet

I had a customer who wanted me to install SharePoint 2013 on a Windows Server 2012 which was not connected to the Internet.  So it was not just a case of winding up the Prerequisite installer and off we go. Oh No.

The Prerequisite installer consists of at least two parts :-

  • Configure the Roles and Features of Windows Server 2012
  • Install all of the required updates so that SharePoint 2013 will work

The first of these two turned out to be the biggest problem.

To go back to the start, I am a great believer in Brian Lalancette's autospinstaller. I have been using it ever since it came out.

There is a SP2013 version publicly available to all. For the purposes of this install I was using a Beta (Version 98528) which Brian assures me is good enough to use on production environments.

(It also fixes a number of issues with the installation of SP2103 Search). Version 98528 (and presumably beyond) requires an updated version of the AutoSPInstaller Input file.

In this version (98528) you need to set the version of SharePoint you are installing to SP2013 <Install SPVersion="2013">.

For an "Offline" install (ie no Internet available) you need to set OffLine to True <OfflineInstall>true</OfflineInstall>

You should check the service apps at the bottom of the file as these have changed.

The Next thing you have to do is to configure the Windows 2012 Features and Roles. As I said before this was the tricky bit.

You need to have the Windows Server 2012 installation media mounted. I used Craig Lussier's script for configuring the Roles and Features of Windows Server 2012.

http://gallery.technet.microsoft.com/office/DownloadInstall-SharePoint-e6df9eb8 .

I used his first PowerShell script and it takes a parameter which is where is the sources\sxs resides on the Windows Server 2012 installation media.

Next you need to get the Prerequisites. I used another machine on which I executed Craig's second PowerShell script.

I copied these files to \SP\2013\SharePoint\PrerequisiteInstallerFiles\ where \SP\2013\SharePoint is the SharePoint 2013 installation media.

Finally there is a "gotcha" you also need a further "HotFix" Windows8-RT-KB2765317-x64.msu. Again, download this on another machine and copy it to \SP\AutoSPInstaller\Hotfixes\

So you PreRequisites folder should look like this :-

So once we have all of this preparatory work done. We can finally run AutoSPInstaller.

It runs, has a single reboot once the Prerequisite Installer has completed and it then runs to completion. Assuming that everything in the AutoSPInstallerInput.xml file has been has been configured correctly.

Feb 03
Why Cannot I Create a SubSite on the New Version of Office 365 Public Site

​I have been using the preview version of Office 365 now since last July.  When it first appeared I thought I was doing something wrong.  I could not create any subsites on the Public version of the website.  I looked at the various blogs and could not find what I was doing wrong.  Finally on an office 365 forum I found what I was looking for (but not happy what I found).  The public web site was intentionally modified not to allow people to add new subsites !  How many people will want to use a public web site which only allows you to have 4 pages and a blog ! I can see why Microsoft have done this, if they give people too much slack then there will be very large web site with thousands of hits a day which could well cause performance problems with the site.  However, I think there could be a compromise - let there be one or two levels of subsites, whilst restricting those who try and abuse the system with large web sites. 

1 - 10Next

 ‭(Hidden)‬ Blog Tools

 About this blog

Picture Preview 
Welcome to my new Blog as the old one seems to have disappeared. I will try and retrieve as many of the old posts as I can.  The dates might not be quite right. Anyway I will be blogging about my experiences with SharePoint and everything SharePoint.