Updated 29/June/2011; this issue has been fixed with the June CU and that means the described workaround below is obsolete now.

This post might be important for you when: You know and manage your metadata store; sometimes you changed a term and you are wondering why the changed term cannot be seen in a List where you are using the terms in a column.

You also know: Plan managed metadata

We are working currently on an issue where the terms are not updated and with this post I would like to provide you a workaround. Updated 02/May/2011 to improve the quality of the code below because when we use SPSite we should dispose it at the end.

Consider the following scenario:

  • You are using Managed Metadata and administrate that within the central administration website.
  • You are using a List in a site and added a column to use Terms saved in the Managed Metadata database.
  • You merged terms in a term set.
  • You deleted site collections where you have been using some terms.
  • You changed a term in the taxonomy term store.
  • You may run manually the Taxonomy Update Scheduler job on the Scheduled Jobs central admin page or waited more than one hour; because the schedule of that job is set out of the box to run every hour.
  • You may see that the changed term has not been updated to the new value on the List where you are using those information.
  • You found the following entry in the ULS log:

Exception with ULS log entry 85si:

Exception occurred while hidden list being updated: System.IO.FileNotFoundException: The site with the id 6c03a437-0d6d-44a3-a542-6235b854a36e could not be found.   
at Microsoft.SharePoint.SPSite..ctor(Guid id, SPFarm farm, SPUrlZone zone, SPUserToken userToken)   
at Microsoft.SharePoint.SPSite..ctor(Guid id)   
at Microsoft.SharePoint.Taxonomy.UpdateHiddenListJobDefinition.ProcessProxy(MetadataWebServiceApplicationProxy proxy)   
at Microsoft.SharePoint.Taxonomy.UpdateHiddenListJobDefinition.Execute(Guid targetInstanceId)

 

Workaround:

To work around the issue and update the Taxonomy Hidden list manually you can use the following PowerShell script as follows.

With the blog post experience from my colleague Stefan I built the following script.

I am suggesting to use the PowerShell ISE. Start the ISE as Machine Administrator.

Put the following code lines into a text file and save it as e.g. UpdateTaxonomyHiddenList.ps1.

$Assem = (
    "Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" ,
    "Microsoft.SharePoint.Taxonomy, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
         )
           
$Source = @"

using Microsoft.SharePoint;

using Microsoft.SharePoint.Taxonomy;

using System;

 

namespace TaxonomyUpdater

{

    public static class TaxonomyHiddenList

    {

        public static void Update(string SiteUrl)

        {

            SPSite Site2Update = new SPSite(SiteUrl);

            TaxonomySession.SyncHiddenList(Site2Update);

            Site2Update.Dispose();

        }

    }

}

"@

Add-Type -ReferencedAssemblies $Assem -TypeDefinition $Source -Language CSharp

 

Run the script above one time.

After that you can start on the command line to update the TaxonomyHidden List with:

[TaxonomyUpdater.TaxonomyHiddenList]::Update(“http://SharePointServer”)

Do this for all sites where you have updated terms.