Techblog

Herzlich Willkommen im Communardo Techblog, dem Entwickler-Weblog von Communardo. An dieser Stelle werden Ideen, Problemlösungen, Tipps und Problemstellungen rund um die Entwicklung webbasierter Software vorgestellt.

techblog-teaser

Sharepoint: AddFieldAsXml Bug oder internalName != displayName

, von
2 Kommentare

Beim programmatischen Erstellen von benutzerdefinierten Spalten (SPField) in Sharepoint sind einige Dinge zu beachten und erwarten auch beachtet zu werden. Hält man sich jedoch an die Spielregeln (API Dokumentation) und erzielt trotzdem nicht das gewünschte Ergebniss, ist wahrscheinlich wieder ein Sharepoint Bug gefunden worden. Dies musste ich heute wieder mal schmerzhaft feststellen.

Sharepoint verwendet zwei Namen um Felder zu kennzeichnen. Den internalName sowie den displayName (bzw. Title). Der internalName wird von Sharepoint selbst sowie von dem Sharepoint Objekt Modell verwendet um Spalten(SPField) und Objekte wieder zu erkennen und anzusprechen. Der displayName und die Title – Eigenschaft werden verwendet um die Darstellung der Spalten zu steueren. So können eindeutige Namen Verwendung finden um Objekte eindeutig anzusprechen. Gleichzeitig kann der Anzeigename variabel gestaltet werden.

So hatte ich versucht eine Sharepoint Spalte über die API zu erstellen und anschließend zur SPFieldCollection einer Liste  hinzuzufügen.
Dies funktionierte mit den folgenden Codeschnipseln auch sehr gut.

<span style="color: #ff0000">SPField currField = colFields.CreateNewField(SPFieldTypeString, displayName);
currField.staticName = internalName;
colFields.AddFieldAsXml(currField.SchemaXml, true, SPAddFieldOptions.AddToAllContentTypes);</span>

Anschließend beim Beschreiben der Spalte gingen jedoch die Probleme los.

<span style="color: #ff0000">SPField newField = newItem.Fields.GetFieldByInternalName(internalFieldName);</span>

Laut  API Dokumentation und MSDN welche besagt, dass der staticName dazu dient, um den internalName zu setzen, wäre der obige Programm – Code richtig. („Gets or sets the internal name of the field.“)

Das Ausführen der Methode verursachte eine ArgumentException mit der Meldung: Value does not fall within the expected range.

Darfaufhin begann ich ein wenig weiter zu forschen (Danke an Sharepoint Manager) und fand herraus, dass die AddFieldAsXml Methode in Verbindung mit einem SPField welches mit CreateNewField erzeugt wurde einen Bug von Sharepoint hervorruft. AddFieldAsXml setzt den displayName wie angegeben, aber leider auch den internalName mit dem Wert des display Namens. Das hat zur Folge, dass die Spalten nicht mehr über den interalName ansprechbar sind.

Wer jetzt also vor genau diesem Problem stehen sollte, hat zwei schnelle Möglichkeiten.

  1. Die Guid des Feldes speichern und verwenden sofern der Zugriff auf diese besteht.
    Mit Hilfe dieser kann eine Sharepoint Spalte sicher bestimmt werden.
  2. Folgenden Workaround verwenden.

Workaround:

Die Lösung des Problems ist regelrecht simpel. Es wird der gleiche obige Code verwendet um das SPField zu erstellen, jedoch als displayName der internalName gesetzt. Dadurch legt Sharepoint die Spalte mit dem richtigen internalName an. Sobald die Spalte angelegt wurde, muss nur noch der displayName geändert werden.

<span style="color: #ff0000">string internalName = "internerName";
string displayName = "displayName";
SPField currField = colFields.CreateNewField(SPFieldTypeString, internalName);
colFields.AddFieldAsXml(currField.SchemaXml, true, SPAddFieldOptions.AddToAllContentTypes);
SPField rewriteField = colFields[internalName];
rewriteField.Title = displayName;
rewriteField.Update();</span>

Wird die GetField- oder GetFieldByInternalName –  Methode jetzt mit dem internalName aufgerufen liefert sie die gewünschte Spalte.

Artikel als PDF speichern
2 Antworten zu:
“Sharepoint: AddFieldAsXml Bug oder internalName != displayName”
  1. TorstenHu
    31. August 2009, 11:50 Uhr

    Sharepoint: internalName != displayName at #Communardo #Techblog #Sharepoint #Bug http://bit.ly/EhFiZ
    This comment was originally posted on Twitter

  2. SharePoint_Team
    31. August 2009, 10:42 Uhr

    Neuer Blogpost zu #Sharepoint #Bug bei AddFieldAsXml (internalName und displayName) im #Communardo #Techblog: http://tinyurl.com/lvl6tf
    This comment was originally posted on Twitter

Schreiben Sie einen Kommentar

*

Diese Webseite basiert auf Wordpress. © 2014 Communardo Software GmbH / Kleiststraße 10 a / D-01129 Dresden / Fon +49 (0) 351/8 33 82-0 / info@communardo.de