Blog Categories

Subscribe to RSS feed


Follow Microsoft Technologies on Pinterest

Posts Tagged ‘sharepoint 2010’

Advanced Content Targeting in SharePoint – Part 3

This is the third post in this series. In the last two posts (here and here), we implemented a custom token for the logged in user which filters incoming content in the search index based on the user’s profile attributes, and then creating display templates to render custom result URLs. Today we will dive into
extending this concept to the search results hover panel.

An internal portal accessed by employees and contractors in three dozen locations comprising of countries and/or regions. Authoring takes place in a separate content site and content is rendered on the publishing site. All content is targeted with three important profile attributes –
a. Location (comprises of country and it’s region)
b. Role
c. Business Unit

Each piece of content/link takes the user to the publishing site keeping authoring unexposed to the end user. What this means for search results is
1. The results should be targeted based on user profile properties (mentioned above)
2. Customizing search results URL to point to publishing site
3. Customizing hover preview to display publishing pages (instead of the authoring site content pages)
4. Customizing Control template to implement custom paging

The focus of today’s article will be #3. When SharePoint 2013 came out, the focus was primarily on making sure each result is quick and easy to find and read, while still displaying as much relevant information as possible to the end user.
When the user wants to learn more about a result, they hover their cursor over that result to see the hover panel dialog box.  The hover panel contains rich metadata that enables users to investigate a result more thoroughly, without having to click through and load the document. Hover Panel is broken into three sections
a. Header
b. Body
c. Footer Actions
The files which provide these sections are *HoverPanel.js , *HoverPanel.html, and then html and JS file for each of the following: *HoverPanel_Body, *HoverPanel_Actions, *HoverPanel_Header. These files could be found in the /search center site Master Page gallery.

In order to display the publishing site page in the hover preview we’ll need to make few changes to the OOB hover panel. Let’s start with making a copy of the “Item_DefaultHoverPanel_Actions.html”. This ensures keeping our customization separate.

Step 1
Update the managed property mapping section with our custom properties. In this case RefinableString00 and RefinableString01



Step 2
Snippet to build the linkURL. This linkURL points to the publishing site (instead of authoring)


Step 3
Render the hover panel header


Step 4
Render the body section



Step 5


Towards the end of the above DIV block, add this snippet to enable rendering of your custom preview




Advanced Content Targeting in SharePoint – Part 2

This post is a continuation of my previous blog post explaining advanced content targeting using SharePoint search. We saw earlier how to implement a custom token for the logged in user which filters incoming content in the search index based on the user’s profile attributes. Today we are going to look into creating display templates to render custom result URLs. Before we begin let’s refresh our memory with the scenario here


An internal portal accessed by employees and contractors in three dozen locations comprising of countries and/or regions. Authoring takes place in a separate content site and content is rendered on the publishing site. All content is targeted with three important profile attributes -

a. Location (comprises of country and their region)
b. Role
c. Business Unit

Each piece of content/link takes the user to the publishing site keeping authoring unexposed to the end user. What this means for search results is

1. The results should be targeted based on user profile properties (mentioned above)
2. Customizing search results URL to point to publishing site
3. Customizing hover preview to display publishing pages (instead of the authoring site content pages)
4. Customizing Control template to implement custom paging


In the previous post we covered #1 above. This post will focus on #2.

By default all the search results points the user to the actual authoring pages which is (in this case) sitting in a separate site. Because the authoring site (usually) does not have any branding or targeting enabled, we do not want our users to lose their place in the navigation. In order to avoid that we came up with top level category pages with each of them having sub category sections which render page content from the authoring site. So in essence the publishing site URL for any piece of content will look like this:[categoryname].aspx#[subcategory]. The hash tag in the URL is to enable anchor links (bookmark) feature. It’s not relevant in this context so we’ll leave it out.

1. We declare the managed property mappings – Here we used RefinableString0 and RefinableString1 to map the category and sub category metadata fields.


2. Build a custom linkURL



3. This leads us to the html section to render the linkURL


4. And this is how the result URL look like


Advanced Content Targeting using SharePoint Search

There are various ways to achieve content targeting in a content management system. In SharePoint, some common terms which are associated with this feature are Audience Targeting, Security Trimming, Metadata etc. Today I am going to share an example which we recently implemented for our customer and which required advanced targeting rules.


An internal portal accessed by employees and contractors in three dozen locations comprising of countries and/or regions. Authoring takes place in a separate content site and content is rendered on a publishing site. All content is targeted with three important profile attributes -

a. Location (comprises of country and their region)

b. Role

c. Business Unit

Each piece of content or even a link takes user to the publishing site keeping authoring unexposed to the end user. What this means to search is

a. Customizing search results URL to point to publishing

b. Customizing hover preview to display publishing pages

c. And most importantly the results should be targeted based on user profile properties (mentioned above)


In order achieve the above, we designed a custom solution extending content by search web part. This solution inserts a query token into the content search web part which filters the indexed content with logged in user’s profile attributes (Location, Role, Business Unit). (Credit goes to my colleague Ryan Selley for developing this robust solution)

First we’ll map managed properties to crawled properties for the taxonomy terms used to tag content.


Then we’ll create the custom web part in Visual Studio by extending content by search.


Then we’ll Generate a custom query variable to insert in the search query box.


Build this custom query token with logged in user’s profile properties in the BuildTAQuery()


This is how the query text looks in the search web part


With this token in place your content is now targeted on the user’s profile attributes. The logged in user will now only see content which has been tagged to their location, role, and business unit.

Happy targeted coding!

Much Awaited OneDrive for Business comes to Mac and iOS

This announcement should be music to the ears, for all the Mac and iOS diehards using Microsoft apps. Earlier I had blogged about an interim solution for these devices, you can read it in my post here. Last week, Microsoft announced new ways that you can access and manage your OneDrive for Business (ODFB) files from your Mac and iOS devices. The good news is that ODFB works like OneDrive (Personal): You get a virtual drive in the Finder so that you and your apps can access ODFB files normally. That means that Office for Mac can now access files in your corporate ODFB account (which should have always worked). New capabilities in how you view, manage, and share your photos and it now allows you to connect to one or more ODFB accounts.

Previously Microsoft had shipped two separate apps – one for your personal files and one for business files – now you can do this all within the one app. For a business user you can access all your files plus all the files that have been shared with you. You can even access your most recent files plus recover accidentally deleted files from the Recycle Bin. You can download the iOS app from the app store, and the Mac sync client preview from the Microsoft Download Center. You can also take a first look at the new Mac sync client on Office Mechanics. I share below some screenshots from my iPhone, that goes to show how easy it is to add ODFB to your existing app. Read the rest of this post »

Why governing Yammer vs. SharePoint represents an about-face

Yesterday may have been Ground Hog Day, but unlike the movie, I’m happy to report no time loop (although there was a lot of snow for some of us). Aside from the freshly fallen snow, there was also fresh new content over on CMSWire, thanks in part to my colleague Rich Wood and his article The Yammer vs. SharePoint Governance Taste Test.”

Rich is the only person I know who can relate Folders Crystals to governance in Yammer and SharePoint and have it make perfect sense. How so?

Do you remember the Folgers Crystals instant coffee commercials from the 1980s? In these 30-second advertisements, a surreptitious survey is taken of diners in a fancy and presumably expensive restaurant. Served after-dinner coffee, they inevitably describe for the camera how fantastic it tastes and smells. Just as inevitably, the shock of the coffee drinkers when they discovered they’d actually been served Folgers Crystals — instant coffee, not the freshly-brewed European blends they’d been expecting — gave their snobbish expectations the lie.

In many ways the governance of Yammer vis-à-vis the high-powered governance features of SharePoint is similar to that cup of Folgers coffee versus flavor expected of the freshly-brewed premium blends.

Rich goes on to explain that the shocked diners are your SharePoint admins. Within Yammer, the governance features are softer and lighter, existing to guide collaboration. The opposite is true of SharePoint, where the governance model tends to restrict people from communicating outside of approved circumstances. Despite being so different, when deployed correctly, governance in Yammer can be just as effective as that of SharePoint.

Rich discusses the importance of understanding the differences between social, cloud-based collaboration like Yammer and collaboration within the older, document-first platforms.

If you’re used to thinking of “governance” in a SharePoint context, it can be a difficult transition — even an unnatural one — into governing a Yammer network properly while still encouraging user engagement. The baseline systems serve different purposes. Simply put, SharePoint is for files, Yammer is for people.

Read the rest of this post »

Is Your SharePoint Ready for Yammer?

Whether your organization is experiencing rapid growth or you simply need better collaboration, enterprise social is the key to your needs. I gave an overview of the latest services offered in Office 365 in my blog post here and for the purposes of today’s article I will focus on the enterprise social networking (ESN) product, Yammer.

Yammer is a private social network that allows you to stay on top of all your collaboration and sharing needs internal or external to your organization. If you have heard or worked with some of the other ESNs like Jive, Salesforce chatter, IBM connections you might have already heard of Yammer. Microsoft has made big leaps in the last year or so in promoting Yammer as the primary social platform in the SharePoint and Dynamics CRM roadmaps. Microsoft has clearly stated that they believe the future of social collaboration to be in the cloud, and are making most of their investments in cloud-based features within Yammer and Office 365. As a result we are experiencing a massive shift from our customers to Yammer as their social platform to enhance their social collaboration practice. The one concern I have been hearing from lot of organizations is around making this transition – from native SharePoint social to Yammer.

  • What happens to the data in SP social?
  • Would tags, keywords, likes, and conversations be a migration candidate?
  • When should we make the switch to Yammer?
  • How does this affect SharePoint communities of practice?

Remember when we talk about Social in the enterprise we should not focus on the tool, but rather work on the underlying change management process which involves leaders and followers, to promote, adapt and engage in a way which helps streamline business processes. If you are currently using native SharePoint social features, the choice to stay with it or go with Yammer depends on your specific use cases but on a very high level I recommend that you:

  • Stay with native SharePoint social – if you wish to utilize communities of practice leveraging your existing templates or information architecture AND if your organizational policy does not allow sharing of data and conversations in the cloud.
  • Go with Yammer – if your organization has high collaboration or knowledge sharing needs and requires employees to come out of the organizational silos and get quick return from the use of unstructured data AND your organization is currently on or making a shift to Office 365 enterprise plans which can leverage from rich integration features coming down the road

How do I make the shift?

Any enterprise social implementation should be handled as a change management process and Yammer is no different. Look to involve users and designate champions or what we call “Yambassadors” who will help drive adoption ensuring high level of engagement from your workforce. Yammer provides various integrations e.g. with SharePoint 2010, SharePoint 2013, DirSync, SSO, Intranets and Portals, activity stream from line of business applications, and API usage for custom integrations.

Here at Perficient we have been involved with spearheading some early adoptions working with complex use cases.  In the case where you are currently using native SP social features, from what I have seen there is no silver bullet, but the preferred route is to start with bringing up Yammer side by side with your existing native SP social newsfeed, and as the adoption grows replace relevant features with Yammer.   Although there is no direct path for migrating your data from the native SP social newsfeed to Yammer there are some considerations that I would like to share.

  • While making this shift use Yammer embed within your portal team sites, and my sites. It’s a simple app part available on your SharePoint site (once enabled and installed by your administrator) which can be configured to point to your home, group or user feed.

Yammer Embed in Communities Of Practice


  • If you are heavily using the SP community sites then I would recommend embedding Yammer app and transitioning by starting conversation thread inside of Yammer embed vs. the native SharePoint feed. You will be surprised at how fast people pick Yammer in their everyday life. The striking similarity of Yammer user experience with that of Facebook is an added advantage, you will end up saving a ton on end-user training.
  • Designate champions from each department or line of business – In order for your employees to embrace Yammer you will require a team of champions who are trained with the social capabilities and help you manage the communities at large. Actively involve them in constant redefining the Yammer communities
  • Get buy in from C-level executives – Involve senior leadership in all major decisions, you would be pleasantly surprised to see what few posts from your C-level executives can do to drive engagement.
  • Align social activities with your business objectives
  • Go for a soft launch – Soft launch or pilot helps you get the buy in from leadership and assist you with focusing on the most relevant Yammer features when you do go live. Here is an interesting article by Steve Nguyen on why NOT to call it a pilot.
  • Broadcast the Change – To make the biggest impact this message should come from your c-level executives.
  • Fade off the native SharePoint social features – Once you get some adoption across the organization by utilizing Yammer embed, go ahead and start switching off the native features eventually completely removing them. This article guides you through this process.
  • Plan on Single Sign On – To ensure a smooth transition plan on implementing Active Directory federation Services (ADFS) for single sign-on (SSO). This reduces user frustration when trying to log on to Yammer. Check here for Yammer integrations
  • Plan for cutover and staged migration – Your existing social Data cannot be migrated over to Yammer so plan on communicating this to users so they can plan ahead. One possible approach would be to use OneNote for copying and pasting important threads.
  • Yammer Network feed and Embed – Use the Yammer network feed ( for full screen activity feed, and Yammer embed in communities of practice for group conversations

Yammer is also a great platform for external, ad hoc collaboration where you can maximize flexibility, and collaboration is more about the conversation than with structured content. So when designing extranets or looking for options to share files, notes, ideas, and meeting minutes think of Yammer. If you are already on Office 365 or looking to move, Yammer will be highly integrated within the whole experience – groups, search, etc. You should expect this integration to be coming very soon this year #worklikeanetwork.

Update 04/29/2014: While discussing social landscape with folks from the Yammer community, Richard diZerega raised a real good point which should be considered while weighing their options between native SP social and Yammer: “From an IT Pro standpoint, native SharePoint Social is a maintenance nightmare. It uses the SharePoint MySites as the database for social activity and makes heavy use of SharePoint’s distributed cache. Both of these are very challenging to scale and architect correctly. All that effort for a social platform with capabilities that pale in comparison to Yammer.”


How would I know if Yammer is providing any Value?

Yammer provides basic and advanced analytics which you can use to determine the level of engagement across the organization. My fellow co-worker Rich Ross wrote a nice article on the various reports you get out of the box. Out of the box statistics are available for all users of the network while advanced reports are available for administrators via the Data Export feature.



If you like visualizing data and generating cool stuff I highly recommend reading this post from Richard diZerega. He shows some real powerful stuff your administrators can unleash by using the Data Export feature, Excel, and PowerBI. Take this to your next executive meeting and I’ll bet you will make some jaws drop!

Bonus: Look at this great infographics on Yammer and #worklikeanetwork

So what are you waiting for, get out there and start Yammerizing your network!!

Perficient’s Top 5 SharePoint Blog Posts of 2013

As 2013 comes to a close, we’re taking a look at our most popular blog posts of the year. Here are the top five SharePoint related posts, in no particular order:

SharePoint or Sitecore? Let me explain…
Rich Wood makes predictions concerning SharePoint, Sitecore and the future of public-facing websites on the Microsoft platform. He suggests that public-facing internet sites built on SharePoint will become a curiosity, and that Sitecore will be a more compelling direction going forward.  He also gives valid reasons for choosing SharePoint for a public-facing website, as well as the compelling alternative that is Sitecore.

InfoPath and SharePoint 2013 – Upgrading your forms…Top-5-sharepoint
If you are planning to upgrade your SharePoint 2010 site to SharePoint 2013, and are wondering how to deal with your existing InfoPath developed forms, Suzanne George covers the process, giving step-by-step instructions on exactly how she went about migrating the forms. She also lists out the tools you’ll need to complete the process.

SharePoint 2013 Search Display Templates Semi-Deep Dive
If you’ve poked around with display templates in SharePoint 2013 search, you’ve probably run into several JavaScript do-dads. What exactly is being rendered, and what does this mean? Will Tseng explains in this to the point post.

SharePoint 2013 Search DYI Display Template
Will continues with the topic of search in SharePoint 2013, and here, he explains how to create your own custom hover panel display template. Why? Because once you get this, you’ll be able to create the results display template, as it follows the same model. Follow along to build a full fledged hover panel display template. Once you’ve created it, upload it to the master page gallery and you should be able to reference it from your item display templates by changing the JavaScript in the your item display template.

SharePoint Careers: Three Most Successful Career Paths
Are you wondering where your SharePoint career is headed, or what’s the best way to move forward? Whether you’re experienced, or a fresh-faced job seeker, Rich Wood has some stellar advice. He covers three rock-solid routes to a successful SharePoint career: the Microsoft partner space, enterprise IT and, of course, working directly for Microsoft.

Over the next two weeks, we’ll share more of the most popular posts of 2013, covering topics such as Lync, Office 365 and Sitecore.

Exporting Term Sets

I don’t know about you, but I really wish there was a way to export managed metadata in SharePoint, especially since SharePoint teases you with the ‘Import Term Set’ option. To get around this I’ve written a little script to export all of the term sets in a term store (easily customizable to just export the term sets in a particular group or just 1 term set if you choose to go that route) to a CSV file that follows the Microsoft formatting convention needed to use the Import Term Set option.  It’s not perfect, but it definitely gets the job done.  I thought I’d share it with you all to hopefully make someone else’s life a little easier.

For information on the formatting of the CSV file for import please see this Technet article.

   1: Add-PSSnapin "Microsoft.SharePoint.PowerShell"


   3: function Get-TermSetsCSV() {

   4:     param($SiteUrl, $CSVOutput)


   6:     $empty = ""


   8:     $taxonomySite = Get-SPSite -Identity $SiteUrl


  10:     #Connect to Term Store in the Managed Metadata Service Application

  11:     $taxonomySession = Get-SPTaxonomySession -site $taxonomySite

  12:     $taxonomyTermStore =  $taxonomySession.TermStores | Select Name

  13:     $termStore = $taxonomySession.TermStores[$taxonomyTermStore.Name]


  15:     foreach ($group in $termStore.Groups)

  16:     {

  17:         foreach($termSet in $group.TermSets)

  18:         {

  19:             $terms = @()


  21:             #The path and file name, in this case I did C:\TermSet\TermSetName.csv

  22:             $CSVFile = $CSVOutput + '\' + $termSet.Name + '.csv'


  24:             #From TechNet: The first line of the file must contain 12 items separated by commas

  25:             $firstLine = New-TermLine -TermSetName $termSet.Name -TermSetDescription $empty -LCID $empty -AvailableForTagging "TRUE" -TermDescription $empty -Level1 $empty -Level2 $empty -Level3 $empty -Level4 $empty -Level5 $empty -Level6 $empty -Level7 $empty

  26:             $terms+=$firstLine


  28:             #Now we start to add a line in the file for each term in the term set

  29:             foreach ($term in $termSet.GetAllTerms())

  30:             {


  32:                 $tempTerm = $term

  33:                 $counter = 0

  34:                 $tempTerms = @("","","","","","","")


  36:                 #this while loop makes sure you are using the root term then counts how many child terms there are 

  37:                 while (!$tempTerm.IsRoot)

  38:                 {

  39:                     $tempTerm = $tempTerm.Parent

  40:                     $counter = $counter + 1

  41:                 }


  43:                 $start = $counter


  45:                 #this makes sure that any columns that would need to be empty are empty

  46:                 #i.e. if the current term is 3 levels deep, then the 4th, 5th, and 6th level will be empty

  47:                 while ($counter -le 6)

  48:                 {

  49:                     $tempTerms[$counter] = $empty

  50:                     $counter = $counter + 1

  51:                 }


  53:                 #start with the current term

  54:                 $tempTerm = $term


  56:                 #fill in the parent terms of the current term (there should never be children of the current term--the child term will have its own line in the CSV)

  57:                 while ($start -ge 0)

  58:                 {

  59:                     $tempTerms[$start] = $tempTerm.Name

  60:                     $tempTerm = $tempTerm.Parent

  61:                     $start = $start - 1

  62:                 }


  64:                 #create a new line in the CSV file

  65:                 $CSVLine = New-TermLine -TermSetName $empty -TermSetDescription $empty -LCID $empty -AvailableForTagging "TRUE" -TermDescription $empty -Level1 $tempTerms[0] -Level2 $tempTerms[1] -Level3 $tempTerms[2] -Level4 $tempTerms[3] -Level5 $tempTerms[4] -Level6 $tempTerms[5] -Level7 $tempTerms[6]


  67:                 #add the new line

  68:                 $terms+=$CSVLine

  69:             }


  71:             #export all of the terms to a CSV file

  72:             $terms | Export-Csv $CSVFile -notype

  73:         }

  74:     }

  75:     $taxonomySite.dispose()

  76: }


  78: #constructor

  79: function New-TermLine() {

  80:     param($TermSetName, $TermSetDescription, $LCID, $AvailableForTagging, $TermDescription, $Level1, $Level2, $Level3, $Level4, $Level5, $Level6, $Level7)


  82:     $term = New-Object PSObject


  84:     $term | Add-Member -Name "TermSetName" -MemberType NoteProperty -Value $TermSetName

  85:     $term | Add-Member -Name "TermSetDescription" -MemberType NoteProperty -Value $TermSetDescription

  86:     $term | Add-Member -Name "LCID" -MemberType NoteProperty -Value $LCID

  87:     $term | Add-Member -Name "AvailableForTagging" -MemberType NoteProperty -Value $AvailableForTagging

  88:     $term | Add-Member -Name "TermDescription" -MemberType NoteProperty -Value $TermDescription

  89:     $term | Add-Member -Name "Level1" -MemberType NoteProperty -Value $Level1

  90:     $term | Add-Member -Name "Level2" -MemberType NoteProperty -Value $Level2

  91:     $term | Add-Member -Name "Level3" -MemberType NoteProperty -Value $Level3

  92:     $term | Add-Member -Name "Level4" -MemberType NoteProperty -Value $Level4

  93:     $term | Add-Member -Name "Level5" -MemberType NoteProperty -Value $Level5

  94:     $term | Add-Member -Name "Level6" -MemberType NoteProperty -Value $Level6

  95:     $term | Add-Member -Name "Level7" -MemberType NoteProperty -Value $Level7


  97:     return $term

  98: }


 100: Get-TermSetsCSV -SiteUrl "Your Site URL" -CSVOutput "C:\TermSet"

Case Study: State Government Website Migration to SharePoint

Perficient recently worked with a state government to move its existing public website to SharePoint 2010. Upgrading to a newer technology would enable the state to save financially and make technical improvements while keeping pace with its evolving business demands. The migration would also provide for the standardization of state agency websites on a single solution with a common content management system.

Here is an excerpt from the case study describing the solution:

To deliver value quickly while minimizing impact on end users and content authors, Perficient leveraged automated processes, where applicable, to move content into the new environment. Perficient leveraged Kapow Software’s migration tool, Katalyst, to develop a consistent and reusable process capable of migrating information managed in the Autonomy WCM platform. Utilizing Katalyst, legacy content was systematically transformed, formatted and migrated to the new SharePoint environment. Perficient streamlined the migration process, automating the extraction and transformation of content, metadata, and taxonomy for the new SharePoint solution. Perficient was able to move content in one tenth of the time it would take to manually migrate, and at a reduced cost.

Within the legacy portal, a portion of agency sites were not on the Autonomy TeamSite platform, or used custom development. For these sites, automated content migration was not feasible. In order to migrate, the customizations and legacy content had to be manually refashioned and recreated in the new environment. To deliver value early and often, Perficient established three parallel work steams. The first encompassed initial platform development and configuration. The second work stream of custom application development utilized Perficient developers who specialize in Microsoft technologies. This involved rebuilding code to replicate certain functionality found within the legacy portal. The Perficient team integrated the new code into the SharePoint environment.

Overall, the team migrated more than 200,000 different resources — forms, documents, specific agency pages and links — into the SharePoint environment, unifying the sites on one common platform and architecture.

To read the case study in its entirety, including the full solution and resulting business value, click here.

Case Study: Given Imaging Redesigns Website on SharePoint 2010

Perficient recently worked with Given Imaging to redesign its corporate website,, on SharePoint 2010. Given Imaging had first partnered with Perficient to improve its website, which is dedicated to advancing PillCam® capsule endoscopy and built on the SharePoint platform.

Here is an excerpt from the case study describing the challenge:

Built on the SharePoint 2007 platform, was originally designed to engage patients and physicians by capturing their attention early and directing them to targeted information. As Given Imaging matured, the company has identified other types of users that are not being well served, such as media and educators. Overall, the company desired its new corporate website to have an updated look and feel that would elevate the Given Imaging brand, with improved functionality and more flexibility to accommodate new products.

And the solution:

Issues with basic functionality made it challenging to edit content and navigate the corporate website. For example, the use of images in the navigation prevented updates to the product mix and limited indexing by search engines. Because Given Imaging is growing and has a constantly changing mix of solutions, Perficient designed the new website to easily accommodate new product offerings and product categories while maintaining a unified aesthetic and logical navigation.

The new website is effectively elevating the Given Imaging brand, and emphasizing the fact that the company has much more to offer than “just Pillcam technology.” To learn more about the deployed solution and the resulting business value of Given Imaging’s implementation of SharePoint 2010, read the full case study.