SharePoint 2013 Hosting – :: Deploying Managed Metadata Fields Declaratively

In this article, we will see how we are able to deploy Managed metadata fields in a declarative way in SharePoint

A managed metadata column lets you handle the data that people can enter into a column. Users select the terms or phrases that they enter within the column from a pre-defined set of managed terms.

ahp banner sharepoint-01The challenge comes if you desire to provision your custom managed metadata navigation field inside a declarative way, and adding this column to a content variety or a list instance without having losing all the strong functions that comes along making use of this field sort.

Out on the Box, if you added a managed column for your list SharePoint performs some actions behind the scene:

Creates a hidden note field attached to your column
Attached your list to two event receivers to update the taxonomy hidden list .
Fills in some properties related to the current web and taxonomy list id
Creates a taxonomy search managed  property after a full crawl that could be used as a refiner or even as a category column if you are planning to use the Product Catalog model.

So you’ll find a lot of articles explaining how you can deploy Managed Metadata Fields declarative in SharePoint, but they are scattered, so I decided to aggregate all of the suggestions and tricks to cover this activity.

  • Taxonomy Field  declarative XML, no tricks here

    <Field ID=”{20A3C69E-FFFB-43F4-BBDF-2D22BAF0EB84}”
    Sortable=”TRUE” />

  • SharePoint creates a hidden note field to be field with chosen values even though filling the taxonomy field, right here comes the tricky element, although adding your custom field towards the list you must add this hidden field in addition to it, The Display name need to comply with the following convention ‘TaxonomyField_0′ and the static name should adhere to the following convention ‘TaxononmyFieldTaxHTField0′, without having following this conventions SharePoint search will not create the crawled property for your custom column ‘ows_taxId_CustomEventType’, and for certain will not generate the managed house

    ‘owstaxidKataraEventType’<Field ID=”{09F37A61-50FE-413E-941F-3BEE2A1B5BF8}”
    Hidden=”TRUE” />

  • Soon after declaring the schema of each field you must get them connected together, and ought to attach the developed column to a specific Term Set and distinct Term to choose from as a source, this could possibly be achived by adding a function event receiver making use of the following code snippet.SPSite site = properties.Feature.Parent as SPSite;

    Guid eventFieldId = new Guid(“{20A3C69E-FFFB-43F4-BBDF-2D22BAF0EB84}”);if (site.RootWeb.Fields.Contains(eventFieldId))
    TaxonomySession session = new TaxonomySession(site);
    if (session.TermStores.Count != 0)
    var termStore = session.TermStores["Managed Metadata Serivce"];
    var group = termStore.Groups["YOUR GROUP NAME"];
    var termSet = group.TermSets["YOUR TERM SET NAME"];var eventTypeTerm = termSet.Terms["THE TERM NAME CONTAINING YOUR VALUE"];

    TaxonomyField eventField = site.RootWeb.Fields[eventFieldId] as TaxonomyField;

    //Attach the note field to the taxonomy field
    eventField.TextField = new Guid(“{09F37A61-50FE-413E-941F-3BEE2A1B5BF8}”);

    // Connect to MMS
    eventField.SspId = termSet.TermStore.Id;
    eventField.TermSetId = termSet.Id;
    eventField.TargetTemplate = string.Empty;
    eventField.AnchorId = eventTypeTerm.Id;
    eventField.LookupWebId = site.RootWeb.ID;

    if (eventField.TypeAsString == “TaxonomyFieldTypeMulti”)
    ageGroupField.AllowMultipleValues = true;


  • Within this stage we’ve got our field provisioned and added to our site as a web site column, the next step is usually to add it to a content sort, the trick here is we should add two hidden fields ‘TaxCatchAll’ & ‘TaxCatchAllLabel’ fields,If it doesn’t, then you won’t get facets showing up correctly in faceted search. Note that not having the TaxCatchAll and TaxCatchAllLabel pair of columns in your list or library or content variety can cause that.
  • so our field references will probably be like the following

    <FieldRef ID=”{20A3C69E-FFFB-43F4-BBDF-2D22BAF0EB84}” DisplayName=”$Resources:FILENAME_Columns,EventType;” Required=”TRUE” Name=”CustomEventType” Filterable=”TRUE” Sortable=”TRUE” />
    <FieldRef ID=”{09F37A61-50FE-413E-941F-3BEE2A1B5BF8}” DisplayName=”CustomEventType_0″ Hidden=”TRUE” Name=”CustomEventTypeTaxHTField0″ />
    <FieldRef ID=”{f3b0adf9-c1a2-4b02-920d-943fba4b3611}” DisplayName=”Taxonomy Catch All Column” Required=”FALSE” Hidden=”TRUE” Name=”TaxCatchAll” Sealed=”TRUE” Sortable=”FALSE” />
    <FieldRef ID=”{8f6b6dd8-9357-4019-8172-966fcd502ed2}” DisplayName=”Taxonomy Catch All Column1″ Required=”FALSE” Hidden=”TRUE” Name=”TaxCatchAllLabel” ReadOnly=”TRUE” Sealed=”TRUE” Sortable=”FALSE” />

  • Now we come to the next trick, referencing these columns to a list template within the schema.xml file , the trick right here would be to declare the TaxHiddenList ‘TaxCatchAll’ & ‘TaxCatchAllLabel’ correctly to the the list schema, these fields are a lookup columns so they need the information list (source), following is the definetion, NOTE the List attribute.

    <Field Type=”LookupMulti” DisplayName=”Taxonomy Catch All Column” StaticName=”TaxCatchAll” Name=”TaxCatchAll” ID=”{f3b0adf9-c1a2-4b02-920d-943fba4b3611}” ShowInViewForms=”FALSE” List=”Lists/TaxonomyHiddenList” Required=”FALSE” Hidden=”TRUE” CanToggleHidden=”TRUE” ShowField=”CatchAllData” SourceID=”{1e46f7fe-3764-40b5-abd1-1746c716214b}” Mult=”TRUE” Sortable=”FALSE” AllowDeletion=”TRUE” Sealed=”TRUE” Version=”2″ />
    <Field Type=”LookupMulti” DisplayName=”Taxonomy Catch All Column1″ StaticName=”TaxCatchAllLabel” Name=”TaxCatchAllLabel” ID=”{8f6b6dd8-9357-4019-8172-966fcd502ed2}” ShowInViewForms=”FALSE” List=”Lists/TaxonomyHiddenList” Required=”FALSE” Hidden=”TRUE” CanToggleHidden=”TRUE” ShowField=”CatchAllDataLabel” FieldRef=”{F3B0ADF9-C1A2-4b02-920D-943FBA4B3611}” SourceID=”{1e46f7fe-3764-40b5-abd1-1746c716214b}” ReadOnly=”TRUE” Mult=”TRUE” Sortable=”FALSE” AllowDeletion=”TRUE” Sealed=”TRUE” Version=”2″ />

  • Finally, we require to attache the “TaxonomyItemSynchronousAddedEventReceiver” & “TaxonomyItemUpdatingEventReceiver” to update all the hidden fields.

    <Assembly>Microsoft.SharePoint.Taxonomy, Version=, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly>
    <Assembly>Microsoft.SharePoint.Taxonomy, Version=, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly>

Best Recommended SharePoint 2013 Hosting is Perfect, suitable hosting plan for a starter in SharePoint. ASPHostPortal  the leading provider of Windows hosting and affordable SharePoint Hosting. ASPHostPortal proudly working to help grow the backbone of the Internet, the millions of individuals, families, micro-businesses, small business, and fledgling online businesses. ASPHostPortal has ability to support the latest Microsoft and ASP.NET technology, such as: WebMatrix, WebDeploy, Visual Studio 2015, .NET 5/ASP.NET 4.5.2, ASP.NET MVC 6.0/5.2, Silverlight 6 and Visual Studio Lightswitch, ASPHostPortal guarantees the highest quality product, top security, and unshakeable reliability, carefully chose high-quality servers, networking, and infrastructure equipment to ensure the utmost reliability