Tuesday, August 20, 2013

Content Search Webpart – Display Templates – Substring function


Display templates intorduced in Sharepoint 2013 tells the web part two things and it does it’s work by creating an HTML page and a .js file.

 1.What properties to show.
2.And how to display all data.

Display Template uses $getItemValue funtion to fetch the value of Metadata Property for an item. For eg

var line2 = $getItemValue(ctx, "Description");

fetches the value of Description property. However if you want to fetch only the first 50 characters (say), you cannot apply the javascript substring() function directly on the line2 variable in the display template.

The workaround to this problem is call the toString() function on the variable before calling the substring() function. Please find the code below

var line2SubString = line2.toString().substring(0,50);

Hope this helps…
Happy Coding..

Metadata Navigation – Programmatically Adding a Friendly URL

Sharepoint 2013 introduced the concept of navigation based on Managed Metadata. This comes as a part of Sharepoint Publishing Infrastruture. There are enough posts explaining how to configure Metadata Navigation and the basic concepts behind it. Please use the below links to go through the basics
The intent of this post series is to show the readers how to achieve some the common tasks of metadata navigation programmatically using the Sharepoint API. Sharepoint 2013 introduces a new namespace Microsoft.SharePoint.Publishing.Navigation for programming Metadata Navigation. However there is not enough documentation on this.
First let us see how we can create a Friendly URL for a publishing page programatically using the API


///<summary>

/// Creates a Friendly URL for a Publishing Page

/// </summary>

/// <param name="contextWeb">SPWeb Object which contains Publishing Page</param>

/// <param name="parentName">Parent Navigation Term</param>

/// <param name="page">Publishing Page for which the Friendly URL is added</param>

/// <param name="friendlyName">Friendly Name for the Page</param>

/// <param name="AddToNavigation">Flag to indicate whether to add this Navigation Term to Quick Launch and Top Naviagation</param>

/// <returns></returns>

public static string AddFriendlyUrl(SPWeb contextWeb, string parentName, PublishingPage page, string friendlyName,bool AddToNavigation)

{

string relativeUrl = string.Empty;

try

{

// create Taxonomy Session for the context web

TaxonomySession taxonomySession = TaxonomyNavigation.CreateTaxonomySessionForEdit(contextWeb);

// get the current Navigation Term Set

NavigationTermSet currNavTermSet = TaxonomyNavigation.GetTermSetForWeb(contextWeb, StandardNavigationProviderNames.GlobalNavigationTaxonomyProvider, true);

// Make the Term Set Editable

NavigationTermSet editableTermSet = currNavTermSet.GetAsEditable(taxonomySession);

// Get the Parent Term using the Parent Name Parameter matching the term Label

TermCollection parentTerms = editableTermSet.GetTaxonomyTermSet().GetTerms(parentName, true, StringMatchOption.ExactMatch, 1, false);

// if a matching parent Term exists get a refernce to it

if (parentTerms.Count > 0)

{

Term parentTerm = parentTerms[0];

// get the navigation Term Corresponding to the Parent Term

NavigationTerm newTerm = NavigationTerm.GetAsResolvedByWeb(parentTerm, contextWeb, StandardNavigationProviderNames.GlobalNavigationTaxonomyProvider);

// make the parent Term editable

NavigationTerm editNewTerm = newTerm.GetAsEditable(taxonomySession);

// create the new FriendlyUrl along with the new Navigation Term

relativeUrl = page.AddFriendlyUrl(friendlyName, editNewTerm, AddToNavigation);

}

}

catch

{

throw;

}

return relativeUrl;

}

Althought the code is self explanatory, let me explain a few important point

  • Since we are going to add new navigation term we have to make the current Term Set as Editable using currNavTermSet.GetAsEditable(taxonomySession);
  • The SitemapProviderName has to be StandardNavigationProviderNames.GlobalNavigationTaxonomyProvider
  • The parent navigation term should also be made editable
Please let me know in case of any doubts or clarifications….
Happy Coding….