We continue our series of useful tips and common development scenarios for SharePoint Managed Metadata with an article that shows how to declaratively provision a taxonomy field and how to connect it with an existing term set. It’s a follow up of Programmatically Import Term Set into Managed Metadata Term Store where we explained in details how to import a term set into the Managed Metadata term store.
The current sample uses the Company Enterprise Industry Taxonomy term set that we created in the previous post, so today we will not spend time explaining how to create a term set.
Define Taxonomy Fields in CAML
The creation of a field definition of the taxonomy type in SharePoint is a bit different than that of other field types. The main difference is that we actually need two fields – one field is assigned type TaxonomyFieldType and the other is of type Note.
Recently in one of our projects we had to write some code to get items from a list in SharePoint 2013 using CAML. “Easy Peasy Lemon Squeezy” … I hear you say. It should be quite trivial especially given the fact that CAML has been around since SharePoint Team Services – the very first version of the platform.
Well, not so fast. If my experience as a SharePoint consultant has taught me anything, it is that even the most seemingly trivial task in SharePoint can kill you a couple of hours. That is – if you are lucky.
So let’s see where the catch is in querying Boolean fields with CAML.
This post is a sequel to the article Deploying Publishing Page Layouts and Pages Using Features in which we examined the step-by-step process of deploying publishing pages based on a page layout using SharePoint features. As we saw, apart from a few caveats, that approach was quite straightforward and beneficial, allowing us to easily move a solution between environments.
However, the previous solution had one disadvantage – the page layout and the publishing page itself were deployed within the same feature. While this works for our small sample, it is not the cleanest approach for a real-life project.
In an end-user solution it is better to package page layouts in one feature and publishing pages in another. This way we are able to deploy content separately to development or QA environments for testing purposes and a clean solution without content to production.
In the end we would like to re-structure the solution to look like this:
A result source in SharePoint 2013 is used to segment certain types of content so they can be searched in a narrower fashion than searching against all content within the index. Using result sources, we can define query rules that must be met by the content in order for it to appear in search results. In previous versions of SharePoint this concept was addressed through search scopes.
SharePoint 2013 presents us with user interface in Central Administration where we are able to create new result sources and configure their properties:
However, at the time of writing this post, there is no Windows PowerShell cmdlet available to create a result source in SharePoint 2013. This is rather limiting, because as user-friendly as the browser interface is, we still need a way to automate search configuration, especially when developing and deploying solutions for a customer. It’s a fact of life that most SharePoint administrators do not make a happy face when being handed a thick document with manual actions to execute, especially if it needs to be done several times on different environments.
I have to admit SharePoint really got me with this one.
We had built a SharePoint Server 2013 environment for development and research purposes as soon as the RTM version was released. I remember configuring the Search Service Application and creating a Search Center to play with the new features back then, and everything was working quite well.
Then a couple of days ago I started creating a proof-of-concept for an upcoming SharePoint 2013 project, I fired up my suspended virtual machine only to find out that search had stopped working.
In the Search Center I was getting “Unexpected response from server“: