In einem aktuellen Projekt kam die Anforderung auf, Titel von Spalten programmatisch umzubenennen. Doch leider waren meine ersten Versuche nicht von Erfolg gekrönt. Der folgende (beispielhafte) Code wollte einfach nicht funktionieren:

SPList list = web.GetList(listUrl);
                    
SPField field = list.Fields.GetFieldByInternalName("TestField");
field.Title = "NewDisplayName";
field.Update();

Interessanterweise handelt es sich dabei um ein Problem, das nur manchmal auftritt. Mit etwas Recherche konnte ich dann auch herausfinden, wie der Fehler zu reproduzieren ist. Das Code läuft genau dann fehlerfrei, wenn die CultureInfo des aktuellen Threads der CultureInfo des SPWeb Objektes entspricht. Dies hängt mit der internen Implementierung der Eigenschaft “Title” des SPField Objektes zusammen.

Kurz gesagt: Wenn innerhalb eines englischen Threads versucht wird den Titel einer Spalte in einer deutschen Site  zu aktualisieren, dann liefert der Code nicht das erwartete Ergebnis.

Mit folgendem Code stelle ich nun sicher, dass meine Anwendung auch dann läuft, wenn unterschiedliche CultureInfo Einstellungen vorhanden sind:

CultureInfo currentCulture = Thread.CurrentThread.CurrentUICulture;
try
{
    // this is necessary for updated the title properties of the list columns
    Thread.CurrentThread.CurrentUICulture = web.UICulture;

    SPList list = web.GetList(listUrl);
                    
    SPField field = list.Fields.GetFieldByInternalName("TestField");
    field.Title = "NewDisplayName";
    field.Update();
}
finally
{
    Thread.CurrentThread.CurrentUICulture = currentCulture;
}

Zu beachten ist, dass im finally Block die Spracheinstellung wiederhergestellt wird auf den vorherigen Wert, um möglichen weiteren Programmteilen gerecht zu werden. In meinem Fall war der Ablauf des Code in einem SharePoint Timerjob eingebettet.

 

Technorati-Markierungen: ,,,,,

1 Comments

  1. Pingback: Aus der Praxis – Programmatisches Setzen des Titels einer SharePoint Spalte - SharePoint Blogs in German - Bamboo Nation

Leave a comment

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Time limit is exhausted. Please reload the CAPTCHA.