In one of my project, there was a requirement to manually update term set title and see the updated version in library view. When I did that it didn’t reflect the change on demand. So let me share my experience with the below scenario:
I have one library where I have added a custom field of type managed metadata type.
These fields (Regions, Survey Title) are targeting to its related TermSet from the Term Store and showing it on the library view.
When I added a new item to the library, I selected it’s metadata and saved the document.
Now I had change request to update metadata term’s title. Let’s consider Region has one value “Colorado” and change request was to change it to “CO”.
To achieve this, I first updated the term title in the term store manager but change wasn’t reflected immediately.
Below are the different ways to achieve the changes immediately:
Out of the Box way:
There is a Timer job for this, it actually sync the term store data to the hidden taxonomy list for that site collection and update wherever term fields are used.
Though to run this job manually, below are steps I followed:
- Go to the Central Administration > Monitoring > Job Definitions > Taxonomy Update Scheduler (for your web application). Open it.
- By default that Job will run hourly, so to run it manually you have to click on Run Now.
- Once Job is successful, Data from term store will be synced to the TaxonomyHiddenList for that site collection and I was able to see the updated metadata field title for the CO in place of Colorado.
Programmatically with PowerShell:
This could also be done by PowerShell, Below is the snippet I used:
$siteUrl = "http://mysharepoint:1327/"
$site = Get-SPSite $siteUrl
Programatically with C# SharePoint Console Application:
Similar way you can achieve the same with Server side object model. Following code snippet by creating simple console application and run where SharePoint is installed. Below was the snippet I used:
public static class TaxonomyHiddenList
public static void Update(string SiteUrl)
SPSite Site2Update = new SPSite(SiteUrl);
There was a situation where I wasn’t able to update the termset data by any of the above solution, from this blog post: Taxonomy Update Scheduler not working? I was able to figure out there was a table in the MMS database called ECMUsedTerm. This table wasn’t updated with all the terms data in it. This could be caused by two different scenarios:
- If we recreated the Managed Metadata Service with a clean database, importing the terms with the same id’s then of course the ECMUsedTerm table is empty / information is lost.
- If we moved the content database from one farm to another (maybe from staging to prod) which of course has a new Managed Metadata Service, then the ECMUsedTerm table is of course not in sync.
To solve this issue, from the article referred I found the below PowerShell code, which will sync the ECMUsedTerm data.
$url = "https://yoursite"
$site = Get-SPSite $url
$tax = Get-SPTaxonomySession -Site $url
$ts = $tax.TermStores
By using this snippet, I was able to update the records in the ECMUsedTerm table of MMS database and now my term set was reflecting once any of the above solution or timer job is ran successfully.