Free Books

Another large collection of Free Microsoft eBooks and Resource Kits for you, including: SharePoint 2013, Office 2013, Office 365, Duet 2.0, Azure, Cloud, Windows Phone, Lync, Dynamics CRM, and more….



The Trouble with Saving a Site as a Template, Office 365 Tricks

Oh how temperamental SharePoint can beat times. Here’s a quick tip.

Lets say you have a neat little Office 365 site collection you have customised, without activating publishing features, you have added some free third party apps from the SharePoint store, say the twitter app or something similar. Then you want to save this as a template, and you go to the usual site settings location and the beast isn’t there, and it was there the other day.

To troubleshoot, you will probably first remove as many customisations as you can, I’d recommend starting with the twitter app. Some third party apps cannot be saved in template, and good ol’ SharePoint doesn’t exactly tell us why we can’t do certain things. So you’ve removed the twitter app, but still the link is not available. Don’t go and reset everything without checking the site options parameter in SharePoint Designer.

The site has a parameter SaveSiteAsATemplateEnabled that is set to true until you do something (adding the twitter app) to make it switch to false. When you remove the twitter app, you would expect the paramater to change back to true. Wrong! It doesn’t automatically do this.

Open the site in SharePoint Designer, in the home page, Click on “Site Options”, you will get prompt, In the “Parameters”  Tab, you can find “SaveSiteAsTempalteEnabled”, set it to true.


Apply your change and refresh the site. You will be able to see the link to save the site as a template. If you still cannot save it as a template, the error message might be a little more informative as to why. Just remove the other offending items and check the parameter, and go for it again.

This is your captain speaking…Over and out

Customizing a Survey

You boffs out there will recognize the pains of providing a quick POC for a customer requirement without developing a fully fledged solution. Ok so here goes. You wanna provide customization to a survey without going full code. For example, in my requirement (Office 365 Implementation), I wanted to add a ‘response’ column to a survey which does not behave like a normal list (naughty naughty!) . This column would store a response to the answer to the survey by means of a workflow on that survey. (There was only one question in the survey as the answers needed to be anonymous and this is near impossible without full code to any list because of the default columns: Created by and Modified by). So the user answers that one question, the workflow kicks off to collect feedback from the manager or approved person who can respond to it, and then the workflow fills the response column of the survey with the response . Simples hey? lol

Ok So here are the cheats for customizing a survey:

Create New View:

  • Open the new view page of any list in your SharePoint site, and copy the URL to a notepad.
  • Open  survey settings page, and from the URL copy the List ID. (List=%7Bxxxxxxxx%2Dxxxx%2Dxxxx%2Dxxxx%2Dxxxxxxxxxxxx%7D).
  • Replace the list name to the last of the URL with the survey list name.

Copy the modified URL to a new browser window, and you are done, you will be now in the ‘Create View’ page of your Survey List. Create the view as you wish here……….

Create A New Column:

Same the way you did for survey view, copy the new column page url (/_layouts/fldNew.aspx?ListID)

  • Replace the ListID with the survey list ID and you are done.


Modify View:

  • In order to perform the modify view of the newly created view as per the steps above, just add your list as a webpart to any SharePoint page.
  • In the modify shared webpart option, select the view which you want to edit in the Selected View and  select the option ‘Edit the current view’.

As with all hacks, save a copy in case you break anything and regularly back up your servers. If you’re on Office 365, Microsoft got your back!


SharePoint 2013 Recycle Bin Tricks

To get to the recycle bin:

Open any site

Click on “Settings” icon in the top right side of the site

Select “Site Contents”

Select Recycle Bin on the right

It will take you to this page.


This is the 1st Stage “Recycle Bin”

When you delete from the 1st stage recycle bin, items are transferred to the 2nd Stage recycle bin.

You cannot remove items from 2nd stage Recycle Bin, unless you are a site collection administrator.

2nd Stage “Recycle Bin”

How to access 2nd Stage “Recycle Bin”.

Click on “Settings” icon in the top right side of the site.

Select “Site Settings”

If you’re in a sub site, you may need to navigate to the root of the site collection by clicking “Go to top level site settings” in the “Site Collection Administration” section.

From the “Site Collection Administration” section click “Recycle Bin”.


if you remove items from here, then you cannot restore..

Default Settings for “Recycle Bin”

Settings for the recycle bin are controlled at the web application level. This means the any changes to the default configuration need to be carried out via “Central Administration”.

To access the settings, from “Central Administration” click “Application Management” > “Manage Web Applications”, highlight the desired web application and from the Ribbon click “General Settings”

The recycle bin is enabled by default with an automatic deletion from after 30 days and an allocated storage amount for the 2nd stage is 50% of live site quota for second stage deleted items.

The “Delete items in the Recycle Bin” figure is a set number of days for both stages, if an item is deleted from the 1st stage after 15 days it will only be available in the 2nd stage for a further 15.


This means that with a site quota of set of 500MB,  250MB is allocated as storage for the 2nd stage recycle bin making a total space requirement of 750MB. The percentage range for the “live site quota” needs to be a figure between “1-500%“. Obviously this content lives in the same content database as the site collection so you need to consider this when estimating your capacity requirements.


If the 2nd stage recycle bin reaches its quota limit, older items will be overwritten to accommodate items moved from the 1st stage.

If a site is deleted, it will skip the 1st stage recycle bin and go straight to the 2nd.

A user will only see items they have deleted in the recycle bin.

There are no PowerShell cmdlets to configure the recycle bin.

If the recycle bin functionality is turned off, items are permanently deleted and can only be retrieved from a backup.

If you have not enabled site quotas, the 2nd stage recycle bin will have no space limitations

Changing the Distributed Cache Service from One Server to another

Not gonna make this a long one because things are really busy. If you are getting to this post you should have an idea what the Distributed cache service is all about, if not here is a summary…

The Distributed Cache service is either required by or improves performance of the following features:

  • Authentication
  • Newsfeeds
  • OneNote client access
  • Security Trimming
  • Page load performance

For an overview of the Distributed Cache service, see or in plain English

I have some SharePoint 2013 environments I use for demos and the likes. one such environment has 4 servers, on Domain controller, a VPN server for networking, another for SharePoint 2013 as a web front end and the last one a SharePoint 2013 server dedicated specifically for managing the Distributed cache service. Now I have inherited this particular set of environments from Microsoft with dummy content on so I don’t have to work too hard at developing features for demos and POCs. My lap top has a max 16GB RAM so running all 4 servers in my hyper v is very resource consuming so I needed to find a way of minimizing the RAM requirements so I could use the machines all together without compromising on performance.

Although not totally necessary to have the distributed cache on a dedicated server unless you have a large farm, I decided to remove the need for the dedicated Distributed cache server as the farm is for use of about 100 users. That would save me about 8gb RAM! So no need for a dedicated cache server. But I do need to preserve the data on there and somehow transfer it to somewhere else where there is a valid service for the distributed cache, available to consume the data, the other web front end perhaps? Correcto! And then remove the service from the dedicated server and put the beast to rest.

So in Lamen’s terms…

Web Front End with Distributed Cache Service (dedicated) = WFE-DC

Web Front End with The Rest Of the SharePoint Services available = WFE-ALL

Some constants –

WFE-ALL has App fabric installed, necessary for the Distributed Cache and firewall is deactivated for the domain or  allows inbound ICMPv4 traffic. If you need Windows Firewall, you can enable this in PowerShell with the Set-NetFirewallRule cmdlet. The name of the rule is “File and Printer SharePoint (Echo request – ICMPv4-In)”. Notice also that it doesn’t take a Boolean ($true), but rather the string “True” as an argument to the -Enabled parameter. Don’t forget to Import-Module NetSecurity first, though! See below…


By now you’ve figured we need to use our new best friend Powershell to execute this master plan. Get used to Powershell if you wanna be a good developer/ architect, it can save you time and effort!

The Distributed Cache is one greedy kid, consuming a max of 10% total memory resource on any server it runs. So be aware of this when allocating memory to the server hosting the  service.

For whatever reason you need to move the Distributed Cache Service in a SharePoint environment,  here’s the master plan….

1.   Add the Distributed Cache Service to the WFE-ALL server to create a Distributed Cache Cluster (Fancy eh?). You need somewhere to move the cache data to when removing the service from the WFE-DC, to avoid data loss.

2.  ‘Gracefully’ shut down the Distributed Cache service on the WFE-DC. This will automatically move over all the data to the WFE-ALL server which is now part of the cluster. Its a long process, expect it to take around 15 mins or more depending on the amount of data in there.

3.  Them remove the service from the WFE-DC and it’s all done.

Now would you believe me if I told you this can be accomplished with 3 lines of Powershell??? Check this out…

1.  On WFE-ALL run the following:


2.   On WFE-DC run the following:

Stop-SPDistributedCacheServiceInstance -Graceful

Wait 15 mins, pour a drink or make a coffee, whichever poison tickles you fancy and then check the service is operational in its new location. Also test microfeed update settings in newsfeeds, this will be a good indicator of its state.

Other stuff you might need to manage at a later date are changing the service account, change the memory allocation or repair the host:

Pretty simple stuff peeps?

Peace, Love and SharePoint!



SharePoint 2013 Search not provisioning correctly

Imagine one fine sunny day you built a new SharePoint 2013 Search Application, for a new server or an old one, and the rain came in the form of an error accessing the application after Central Admin stated clearly that it was created successfully. Here’s what you would be experiencing:

After creating the Search Service Application, the following issues arise:

  1. The search topology displays the following message: “Unable to retrieve topology component health states. This may be because the admin component is not up and running.”
  2. The default content source “Local SharePoint Sites” is inconsistent. It doesn’t always appear after creation of Search, sometimes with start addresses of existing web apps listed already, other times not.
  3. Starting a full crawl results in stuck in ‘starting’.

So you can’t configure your search. In PowerShell, all search components are listed as available.

Event Viewer shows:

Application Server Administration job failed for service instance Microsoft.Office.Server.Search.Administration.SearchServiceInstance (cf15c8c7-1980-4391-bd97-17de75c4dd5d).

Reason: Failed to connect to system manager. SystemManagerLocations: http://sp2013/AdminComponent1/Management

Technical Support Details:

System.InvalidOperationException: Failed to connect to system manager. SystemManagerLocations: http://sp2013/AdminComponent1/Management—> System.ServiceModel.EndpointNotFoundException: There was no endpoint listening at http://sp2013/AdminComponent1/Management/NodeController that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.

Server stack trace:

   at System.ServiceModel.Channels.ConnectionUpgradeHelper.DecodeFramingFault(ClientFramingDecoder decoder, IConnection connection, Uri via, String contentType, TimeoutHelper& timeoutHelper)

   at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.SendPreamble(IConnection connection, ArraySegment`1 preamble, TimeoutHelper& timeoutHelper)

   at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.DuplexConnectionPoolHelper.AcceptPooledConnection(IConnection connection, TimeoutHelper& timeoutHelper)

   at System.ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection(TimeSpan timeout)

   at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen(TimeSpan timeout)

   at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)

   at System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout)

   at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)

   at System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpan timeout, CallOnceManager cascade)

   at System.ServiceModel.Channels.ServiceChannel.EnsureOpened(TimeSpan timeout)

   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)

   at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)

   at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]:

   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)

   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)

   at Microsoft.Ceres.CoreServices.Services.Node.INodeControllerManagementAgent.get_NodeName()

   at Microsoft.Ceres.CoreServices.Tools.Management.Client.AbstractSystemClient.TryConnect(Uri nodeManagementUri, ICollection`1 locationsToTry, ICollection`1 triedLocations, ICollection`1 nodeSystemManagerLocations)

   — End of inner exception stack trace —

   at Microsoft.Office.Server.Search.Administration.SearchServiceInstance.Synchronize()

   at Microsoft.Office.Server.Administration.ApplicationServerJob.ProvisionLocalSharedServiceInstances(Boolean isAdministrationServiceJob)

After much digging and playing around, it seems this error goes away if I changed the app pool the search was running under to the SharePoint Web Services Default. But this is not what we want, Search should run under its own app pool. So after much more digging, I discovered that this is another bug I have found in SharePoint 2013, fixable by applying the following hotfixes:

Give the server a good old reboot and things should work fine. That’ll save you a few days of trouble.

Peace love and happiness!

SharePoint 2013 Search Service Application Configuration

A lesson learned when provisioning the search service application. I deleted the default one created using the config wizard and created a new one to run under its own application Pools. After which i received this error when trying to manage the application:

The search service is not able to connect to the machine that hosts the administration component. Verify that the administration component ‘bae8d161-c132-4570-aa0d-57baf6cf45h6’ in search application ‘Search Service Application 1’ is in a good state and try again.”

I was unable to start any crawls as a result or view content sources.

The search services were all started correctly but in the Application Services window it showed “Error”.


I fixed it by changing the properties of the application so both Search Admin web service and Search Query and site settings would run under the SharePoint Web Services Default App Pool. After an IIs reset my Search Service Application worked fine.

Hope it helps someone.