Error Setting the Regional Settings for a User Profile

EDIT: This issue is resolved in the May 2016 CU.

A SharePoint Administrator or user will receive an error setting the Regional Settings for a User Profile in the SharePoint 2013 February 2016 Cumulative Update. The error is specifically with the “Set Your Calendar” value.

RegionalSettings

When either the user changes to “Always use my personal settings”, as shown above, or the Administrator performs the same operation via the User Profile Service Application, SharePoint will generate an error due to an enumeration validation on the calendar type (SPCalendarType). The February 2016 Cumulative Update, or more specifically, KB3114719, includes this brand new validation method for the calendar type:

private static object ValidatedCalendarType(object value)
{
    object obj2 = value;
    bool flag = false;
    Exception exception = null;
    try
    {
        short num = (short) value;
        if (Enum.IsDefined(typeof(SPCalendarType), num))
        {
            if (num == 0)
            {
                obj2 = (short) 1;
...
    catch (Exception exception2)
    {
        flag = true;
        exception = exception2;
    }
    if (flag)
    {
        string msg = StringResourceManager.GetString("Exception_UserProfileGlobal_InvalidCalendarType");
        ULS.SendTraceTag(0x310481, ULSCat.msoulscat_SPS_UserProfiles, ULSTraceLevel.High, "Error while trying to validate calendar type value. {0}. Exception: {1}.", new object[] { msg, exception });
        throw new PropertyInvalidFormatException(msg);
    }
...}

The issue is that the validation is performed using a C# short (aka Int16), which is the type the variable “value” is (as well as “num”). The SPCalendarType enum is an int (aka Int32); without a cast, this prevents the validation from succeeding, regardless of the value passed to it as Enum.IsDefined requires the object and enum target to be the same type. We can see this in the ULS logs.

Error while trying to validate calendar type value. Invalid calendar type: The value must be in SPCalendarType enumeration. Note: "None" (Value=0) is not supported and will be automatically converted to "Gregorian" (Value=1).. Exception: System.ArgumentException: Enum underlying type and the object must be same type or object must be a String. Type passed in was 'System.Int16'; the enum underlying type was 'System.Int32'.    
 at System.RuntimeType.IsEnumDefined(Object value)    
 at Microsoft.Office.Server.UserProfiles.UserProfileGlobal.ValidatedCalendarType(Object value).

Whoops. This would be resolved by changing the line System.Enum.IsDefined(typeof(SPCalendarType), (short) num) to System.Enum.IsDefined(typeof(SPCalendarType), (int) num). Simple fix. Unfortunately there is no work around at the moment as all methods pass through this validation (e.g. from PowerShell, SSOM, etc.).

A Microsoft PSS case has been opened.

Trevor Seward is a Microsoft Office Apps and Services MVP who specializes in SharePoint Server administration, hybrid scenarios, and SharePoint Online. He has been working with SharePoint for 16 years from SharePoint 2003 on up, managing environments with terabytes of content for 150,000+ user organizations. Trevor is an author of Deploying SharePoint 2016 and Deploying SharePoint 2019. You can find him on Twitter and in /r/sharepoint.