How to detect broken links in SharePoint 2010

I’ve been doing some digging over the last week as to an easy / free way to detect broken links in SharePoint 2010. This approach uses Google Analytics for the SharePoint site whether external or internal facing. To setup Google Analytics for SharePoint  see my previous blog explaining how to implement this.

So the next step is to add the code supplied from Google here to the SharePoint 404 page. This will track how many times the page was hit and also the referring page (the Google article explains this in more detail). It is worth noting that for the code to run requires the client pc’s to have internet access, SharePoint servers do not.

The downside to this approach is that you have to wait for users to actually hit the page before knowing where the broken links are, therefore this scenario may not be ideal for every scenario as you may want to find broken links before your users do!

From a brief scan of the internet another tool worth looking at is the Search Engine Optimization (SEO) Toolkit which can be downloaded here and can be installed on client pc’s to avoid server installs. A blog by Tristan Watkins of using this with SharePoint can be seen here.

SharePoint 2010 user profile property fields disabled after full farm restore

I received this error on a SharePoint 2010 full farm restore when trying to access the Managed Metadata Service application. The farm was a single server with local SQL installed.

I originally received an error relating to  certain user profile properties stating:

There was a problem retrieving data for this field. Updating values in this field is disabled temporarily. You can still update values in other fields

I found a blog article by Wictor Wilén which pointed me in the right direction and when I clicked on the Managed Metadata Service I received the error:

The Service Application being requested does not have a Connection associated with the Central Administration web application. To access the term management tool use Site Settings from a site configured with the appropriate Connection


I discovered the reason for this error was due to the restored service applications not being associated to the default Application Proxy Group (as they were before the restore).

Navigating to Central Admin->Application Management->Configure service application associations and re-adding the service application back into the group will resolve the issue.

Synching custom Hotmail domains onto iPhone

Following on from a previous blog I talked about hosting email with hotmail but still keeping your custom domains for free.

If you try and sync your custom domain on the iPhone mail it will not recognise the settings and ask you to enter the pop / smtp settings which I couldn’t find documented anywhere.

So here’s what you need to do (assuming this is your first mail account).

  • Tap mail
  • Select other
  • Enter your name email address and a description. This will not detect your settings and on the next screen you will need to enter the information manually.
  • For incoming mail server enter:
    • Host Name:
    • User Name: ‘Your custom Hotmail address’
    • Password: ‘Your password
  • Outgoing mail server:
    • SMTP:

Thats it! Your custom hotmail is now synch’d.

My Site and My Profile links missing from SharePoint 2010

If like me you’re trying to find out why My Site and My Profile links are missing from the drop down.


A couple of things you need to check:

  • You have a valid My Site Host location setup to accommodate mysites.
  • Your search crawl account has access to the user profile service application (see George Khali’s blog) and has carried out a full crawl checking no errors are showing for access denied to the mysites web app / site collection.
  • Check that if you enter the web app url manually you are able to gain access to your mysite.

Once you’ve carried out a full crawl then run an iisreset the to links should appear (They did for me anyway!).

Editing out of the box approval workflow to allow single user in parallel to approve item in SharePoint 2010

I was recently asked if the out of the box approval process for SharePoint 2010 allowed for individuals to approve documents when an item was sent for approval to a group of people individually which they wanted the flexibility to change each time without relying on the server team to keep adding users to an AD group.

At this point it is worth noting you can achieve what I am about to describe a lot easier if you have all users in one AD group and do not assign a single task to each user. In my case this was not achievable as the client wanted flexibility to add and remove suggested approvers adhoc (assuming they have the approval rights!).

So something always to consider when setting up approval process (or any workflows for that matter) is planning for the ‘what if’s’ and what I mean by that is if you have a rigid approval process where one person is the designated approver – what happens when they go on holiday (or leave)? So my point here is if you leave a little flexibility in your workflow it will give you the room to achieve the end result without lots of pain or reverting to non SharePoint methods of achieving your goal.

So back to the point of my post to my surprise I couldn't find a way to achieve parallel 1 user approval (when multiple people selected to approve) using the SharePoint 2010 Approval workflow.

SharePoint Designer to the rescue, and before you panic there's no code just some tweaks required.

Firstly what you need to do is open SharePoint Designer 2010 (if you don't have this you can download this for free from Once opened navigate to the site you want to apply the workflow to and simply click on workflows on the left hand side as shown below.

image .

Right click on ‘Approval – SharePoint 2010’ workflow and select copy and modify. Rename the new workflow to something suitable which in my case I called 'Parallel 1 User Approval Workflow’.


Leave content type as all and click ok. Click save from the menu and you will now see your workflow appear in the left hand column (under reusable workflow..


Click on the newly created workflow from the menu.


Click ‘Edit workflow’. You will be presented with Step 1 as shown below:


Click on ‘Approval Workflow Task (en-US) Copy’


I renamed the Task above to ‘Parallel Approval Workflow Task’. I appreciate the menu’s all look a bit the same but do bear with me. So the next step is to click on ‘Change the completion conditions for this task process’.

Now the next screen may look a little intimidating but it’s fairly simple to change!


The next step here is to remove a couple of lines and edit one of the conditions. Simply remove the first 2 conditions from the process by hovering over the drop down and selecting ‘Delete Condition’ as shown below.


Once you have removed the first two conditions you should have a process like below:


Notice that there is a ‘Insert a condition’ at the top. What need to do here is recreate the condition of the first If statement with a slight change, Before we do this we need to arrange the outcome conditions as shown below by moving them up and down until the are at the same level as shown below:


Click on ‘Insert a condition’  then from the menu on the ribbon select condition drop down and this is the important part select ‘If taks outcome equals value’ as shown below.


Next click on the field tab and select ‘Number of Approved’ and in the field value enter 1. So the statement should read:

If Tasks Process Results:Number of Approved equals 1.


So what I have basically changed is how many approvers it takes to meet the condition before setting the document to approved by basically setting the count to 1. Therefore as soon as one approver has approved the document this condition passes and the document gets approved! The great thing here is that all other tasks assigned to other approvers automatically cancel.

Once you have edited your workflow click save and don't forget to publish! If like me you’re running this off a VM on your laptop this may take sometime! If it fails on the first attempt try again.

You will be prompted with an error shown below regarding creating visuals just click ok.


Once you’ve published the workflow back in the browser from the list you want to apply approval, create a new workflow noticing the new workflow appears in the selection list.


Make sure at this stage that content approval is set to on for the list you are about to apply this workflow to. Select the new workflow saved in SharePoint Designer, select the options as shown above giving your workflow a name and click next.

The main point of this exercise is to create a parallel approval workflow so make sure this option is selected from the drop down and also add at least 2 people for the purpose of proving it works correctly.

On the second page make sure when creating the workflow on the list to check the box ‘Update the approval status….’ as shown below:


Next step is to apply the workflow to an item that is in a draft state. Click workflows from the list and select ‘Single Approver Parallel Workflow’.


Click start leaving the defaults.


So now back on the list (in my case a pages library) notice the workflow showing ‘In Progress’


Click on the ‘In Progress’ link and this will show you tasks assigned to Paul and John.


The quickest way to approve the item for test is to approve the document on behalf of the user for the purposes of this test. Click on one of the tasks assigned to the user and click approve. A popup should appear to allow you to approve the item, click ‘Approve’.


Once one of the users has approved the item you should see the workflow progress page as completed (you may need to refresh the page) and the task cancelled next to the approver who didn't get chance to approve the document - see below.


And that's it you’ve now got a parallel approval workflow where only one of the members needs to approve.

As you may know if you’ve reached my blog post there is little documentation on how the workflow works under the hood so I hope you’ve found my post useful.

SharePoint 2010 User Profile Service fails to start

So after many an hour of playing with this I wanted to share how I managed to resolve the issue of starting the User Profile service.

Couple of things to make you aware of early on:

  • This is not a conclusive guide on how to setup user profile service application
  • I used to the SharePoint Farm account to start the service (other accounts fail)
  • The User Profile Service Application was run under an application pool account under a separate AD account
  • SQL on the same server
  • Windows 2008 R2 with hot fix for WCF (KB976462)
  • I ran the wizard to install SharePoint 2010 (creating the user profile service application for me)

So following a series of excellent posts from Spencer Harbar on setting up and providing the correct permissions for the user profile implementation to succeed I hit an error where i couldn't start the user profile service, well I could but it wouldn't stay in a state of ‘started’ for long. Trawling the event viewer application logs 2 noticeable errors were showing each time I attempted to start the service these were:

Event ID 6306 - FIMSynchronizationService

The server encountered an unexpected error while performing an operation for the client.
"BAIL: MMS(7132): mastate.cpp(3117): 0x80230622 (A management agent with this name already exists.): MA directory cannot be created because it is already in use by an existing MA: C:\Program Files\Microsoft Office Servers\14.0\Synchronization Service\MaData\ILMMA
BAIL: MMS(7132): mastate.cpp(1637): 0x80230622 (A management agent with this name already exists.)
BAIL: MMS(7132): server.cpp(964): 0x80230622 (A management agent with this name already exists.)
Forefront Identity Manager 4.0.2450.5"


Event ID 3 – Forefront Identity Manager

Microsoft.ResourceManagement.ResourceManagementException: Exception from HRESULT: 0x80230622 ---> System.Runtime.InteropServices.COMException (0x80230622): Exception from HRESULT: 0x80230622
   at MIISRCW.IMMSServer.CreateMA(String pszMADataXML, String& ppszUpdatedXML)
   at Microsoft.ResourceManagement.SyncConfig.CreateMA(String maData, String& returnString)
   at Microsoft.ResourceManagement.ActionProcessor.SyncConfigActionProcessor.Create(String typeName, IList`1 createParameters, Guid creator, Guid cause)
   --- End of inner exception stack trace ---

After hours of changing security permissions and adding users to different groups to try and resolve this I finally made a breakthrough!

To resolve this issue what I did was delete the User Profile Service Application from the Service Application page and recreated it. IMPORTANT recreating the user profile servie application  with exactly the same name will result in these errors reappearing so I advise that when recreating you give the service application a different name.

Reading between the lines it looks as if somewhere in the configuration it thinks that the user profile service application is either already started and therefore fails when attempting to start it with exactly the same name.

I really hope this helps you out as this one was really frustrating for me!

Related articles worth reading