Blog Categories

Subscribe to RSS feed


Posts Tagged ‘sharepoint 2010’

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.

NewsGator Activity Feed Dissected

Don’t worry, no blood was spilled and no activity feed was harmed in the making of this blog post.

The diagrams below apply to NewsGator activity feeds from Versions 2.6 and 3.1. The classes labeled in orange were added in v3.1. The Share box was re-done in 3.1, so the 1st one is v2.6 and the 2nd one is v3.1 (hence the orange title).  I didn’t document every single div and span, just the major ones that you need to create your own NG style. Enjoy! (and feel free to let me know if i got something wrong or if you found something important that I missed)

Activity Feed Top Panel


  Read the rest of this post »

Variation Labels (_Layouts/VariationLabels.aspx) is broken

I have been assigned on a project to investigate some issues with SharePoint Variations and the first issue I encountered was the error shows up when I click on Variation Labels link under Site Settings. The error pops up with a message “Object reference is not set to an instance of an object” and correlation ID.

As the error on the screen doesnt tell much I took the correlation ID and looked it up in the ULS logs several times and it appears to be complaining about resource file and the obvious answer to solve the issue to most SharePoint admins was to find the resource file and investigate where to get it from. The USL log looks like this:

Name=Request (GET:http://intranet/_Layouts/VariationLabels.aspx
Failed to open the file ‘C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\Resources\cmscore.en-GB.resx’. 
#20015: Cannot open “”: no such file or folder.
Failed to read resource file “C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\Resources\cmscore.en-GB.resx” from feature id “(null)”.
Failed to open the language resource keyfile cmscore.
System.InvalidOperationException: Field not found: Label    at Microsoft.SharePoint.WebControls.DataBoundFieldHelpers.GetProperty(PropertyDescriptorCollection properties, String fieldName, Boolean isDesignMode) trols.BaseDataBoundControl.EnsureDataBound()     at System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls()     at System.Web.UI.Control.EnsureChildControls()     at System.Web.UI.Control.PreRenderRecursiveInternal()     at System.Web.UI.Control.PreRenderRecursiveInternal()     at System.Web.UI.Control.PreRenderRecursiveInternal()     at System.Web.UI.Control.PreRenderRecursiveInternal()     at System.Web.UI.Control.PreRenderRecursiveInternal()     at System.Web.UI.Control.PreRenderRecursiveInternal()     at System.Web.UI.Control.PreRenderRecursiveInternal()     at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
Leaving Monitored Scope (Request (GET:http://intranet/_Layouts/VariationLabels.aspx)

Reading ULS logs is sometime tricky especially when you have multi server farms. Though one thing worth mentioning here is that the errors roll up in sequence and the result of the error can be another error which is often misleading and its easy to lose the focus on the point of failure. As you can see in the above error, SharePoint is complaining about cmscore.en-GB.resx which indeed does not exist so one might go and start looking for the file where in reality it has nothing to do with any resource file and the underlying error is the unexpected occurrence of a field called Label. Read the rest of this post »

Service Manager 2012 – Self Service Portal Step by Step Part 1

This is part 1 of 2,  a step by step document on how to install the Service Manager 2012 Self Service Portal on SharePoint 2010.  These best practices are a result of many production installs in the field and the lessons learnt (so you don’t have to!)

Best practice is to have a separate VM just for the Self Service Portal (you can use an existing SQL instance, e.g. the one Service Manager uses, or a new SQL) – or you can install on the Service Manager box itself (not recommended), but then it becomes intertwined and you cannot uninstall without removing the whole of Service Manager.


Part 1 – SharePoint 2010 Install




  • Portal VM System Requirements – Server 2008 R2 OS fully patched
  • 8GB RAM Minimum
  • 4 CPU
  • 80GB OS Drive

Monitor this VM, and increase resources as necessary when load/users increase.



Either download SharePoint 2010 Foundation, or use your existing full SharePoint 2010 Server software and license key.  For this blog I’ll assume we’re using the SharePoint 2010 Foundation (although the steps are almost identical).

Download SharePoint 2010

Download SharePoint 2010 Service Pack 1

Read the rest of this post »

Advanced SharePoint 2010 InfoPath Development


Author: Suzanne George, Senior Technical Architect, Perficient.

This week I presented at the Houston SharePoint Users Group on Advanced InfoPath Development and although the dance-off between Richard Calderon and I was, well, memorable — and not necessarily in a good way LOL(!),  I hope everyone had a great time and great food thanks to the sponsors of the event and the User Group.  There were about 40 people who stayed to get more information on advanced InfoPath development.

As promised, this blog contains links to the InfoPath Project ( this is saved as a docx but you will need to change its extension to zip to allow access) and the PowerPoint presentation.  For those of you missed the presentation, the session covered when you should and should NOT use InfoPath, how to resolve those pesky InfoPath features (or uhhmm bugs), how to export people pickers to a list, manually starting workflows from code behind, and more!  Take a look at the presentation and the InfoPath Form/Code Behind and let me know what you think!

You can view the presentation below

Microsoft BI on an iPad?!

PerformancePoint, Reporting, and Excel Services on an iPad… it can’t be.  It is a fact.  What? You don’t believe me check out this link and see for yourself.  This feature was included in the December 2011 SharePoint 2010 CU. 

However, I have some bad news if you have recently updated to iOS 6. The tap and hold functionality to bring up the context menu no longer works in Safari or Chrome.   Womp waaa….


I have not found any news on when or if this will be fixed by Apple. Bring on Surface!

Now you may be asking yourself, “I wonder if this guy has even tried it”, well…


App model in SharePoint 2013 puts power in the developer’s hands

About two months ago, I was pointed to an article that talked about SharePoint Apps and how some people are starting to call them “Crapps”: SharePoint 2013 Preview – Apps or Crapps?  I didn’t want to add my two cents right away because I hadn’t really had a chance to play with the App Model in SharePoint 2013 and I didn’t want to sound sycophantic.

However, now that I’ve been deeply immersed in building a complex on-premise SharePoint 2013 app for the better part of 2 months, I find myself firmly in the “major improvement” camp.  In case you haven’t read Doug Ware’s article, I’ll summarize it here briefly:

Doug talks about how, in SharePoint 2010, Sandboxed Solutions were supposed to be so amazing and make everything better and it turned out that Sandboxed Solutions actually had too many limitations to be useful for a lot of work streams and that the same thing could happen with Apps.  In addition, he points out that people like creating Farm Solutions, the concept of clean deletion is broken because SharePoint is not a phone, and there are no guidelines for creating apps yet.  In the end, he decides that the devil is in the details with how you create the app. Read the rest of this post »