Change language of existing SharePoint site collection

From time to time it happens that the wrong language is selected when creating a SharePoint site collection. According to Microsoft there is no supported way to change the language of an existing site collection. This is the case because the provisioning language impacts the names of the pre-created items such as document libraries. From a user perspective to most annoying problem is the wrong language of mail notifications.

If you only need to ensure the correct mail language there is an easy workaround. Open SQL Management Studio and execute this query on the respective content database.


Update [dbo].[AllWebs] set Language = [LCID]

This will change the language on all site collections but you can add where-statements to update only the necessary entries. The LCID is the language code used by Microsoft (and SharePoint).

XmlSerializer – Check if property was present in XML

Recently I was parsing a large amount of XML files using the XmlSerializer class. While implementing the parser I came across a requirement where I had to check if a given property was null because it was specified as null or because the value was not present in the XML.

At first this caused me some headache because accessing the underlying XML file violates the abstraction provided by the serializer. Luckily, I recognised that the generated entity class (generated from XSD.exe) contains a lot of properties with the name <PropertyName>Specified. This is a very neat feature of the XmlSerializer. If you add a property with that name scheme it automatically sets the property to true when the corresponding element is present in the XML.

The property could look like this:

[System.Xml.Serialization.XmlIgnoreAttribute]
public bool MyPropertySpecified { get; set; }

Note: XmlIgnore is necessary to avoid having the artificial property serialised into XML when using the XmlSerializer to write XML. More details on the behaviour can be found in the class documentation here.

SecureStore Provider default implementation for SharePoint 2013

From time to time,  you need to add some credentials to the SharePoint secure store. Depending on the type of credentials you enter, you also need to provide the SecureStore Provider implementation. If you are simply using the default implementation, you also need to provide a value because SharePoint does not allow you to leave that field empty. Just enter the following value for the SecureStore default implementation:

Microsoft.Office.SecureStoreService.Server.SecureStoreProvider, Microsoft.Office.SecureStoreService, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c

Setting up TFS Build Server for SharePoint 2013

Having a build server to compile all checked in code is a very useful thing but preparing the build server for SharePoint 2013 projects requires a few steps (applicable for TFS 2010 and TFS 2012). In order to complete it, you need to have a SharePoint development machine to copy the assemblies from.

  1. Run the SharePoint Prerequisites Installer in order to install all dependency (like Windows Identity Foundation etc.)
  2. Open the GAC on the development machine (C:\Windows\Microsoft.NET\assembly\GAC_MSIL\ ) and copy the following assemblies:
    • Microsoft.Office.SecureStoreService
    • Microsoft.VisualStudio.SharePoint
    • Microsoft.VisualStudio.SharePoint.Commands.Implementation.V5
    • Microsoft.VisualStudio.SharePoint.Designers.Models
    • Microsoft.VisualStudio.SharePoint.Designers.Models.Features
    • Microsoft.VisualStudio.SharePoint.Designers.Models.Packages
    • Microsoft.VisualStudio.SharePoint.ProjectExtensions.CodeGenerators
    • Microsoft.VisualStudio.SharePoint.Remote
    • Microsoft.VisualStudio.SharePoint.Wsp
  3. Copy all SharePoint related assemblies from C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\ISAPI to C:\Program Files\Reference Assemblies\SharePoint\ on the build server
  4. Open the registry path HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.5.50709\AssemblyFoldersEx and add the following key: SharePoint15]@=”C:\Program Files\Reference  Assemblies\SharePoint\”
  5. Copy the folders SharePointTools,Web, WebApplications from C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0  to the corresponding path on the build server
  6. Copy the file C:\Program Files\Common Files\Microsoft Shared\web server extensions\15\TEMPLATE\XML\appManifest.xsd to the corresponding path on the build server (only necessary if you want to build SharePoint 2013 Apps)

Hint: This tutorial assumes that the TFS binaries are installed and the build server is already connected to a TFS. The required steps are listed here: http://msdn.microsoft.com/en-us/library/hh395023.aspx

Suppressing Code Analysis warnings in Entity Framework generated code

When using Entity Framework Database First it can happen that the code generated by the edmx file causes Code Analysis errors. This happens due to the fact that the t4-template misses the GeneratedCode attribute. It is pretty easy to modify the template to contain the necessary attributes.

Modify the context template

  1. Add using System.CodeDom.Compiler; at the right position in the using directives
  2. Add [GeneratedCode(“EntityModelCodeGenerator”, “4.0.0.0”)] above the class declaration line

Modify the template of the model classes

  1. Find EntityClassOpening and modify to the return a string starting with the GeneratedCode attribute
  2. Find <#=codeStringGenerator.UsingDirectives(inHeader: false)#> and add  below using System.CodeDom.Compiler;

Unable to access T-SQL components & An incompatible DacFx version is installed

After trying to view data from within Visual Studio to error messages appear:

Unable to access T-SQL components

An incompatible DacFx version is installed

Some might have seen this error before and the reason is quite simple. The installed Data-Tier Application Framework version and SQL Server Data Tools do not match the ones required by the database.

Just install the latest version from here:

SSDT: http://msdn.microsoft.com/en-us/data/hh297027

DacFx: http://www.microsoft.com/en-us/download/details.aspx?id=35756

And everything is working fine again.

Update: 

Apparently the old link does not work any longer. This is the working download link for DacFx 2012. http://www.microsoft.com/en-us/download/details.aspx?id=36842