Es gibt in SharePoint drei Möglichkeiten, eine Liste zu erzeugen:
- manuelles Anlegen
- über eine Vorlage
- über Code (schema.xml)
Der letzte Weg ist sicherlich der aufwändigste Weg und wird vielleicht deswegen gemieden, aber er bietet auch viele Vorteile.
Ich möchte mit diesem Artikel zeigen, dass es eigentlich nicht so schwierig ist, eine Liste in SharePoint über eine schema.xml und ein passenden Feature zu installieren.
In diesem Artikel gehe ich von MOSS2007 und WSPBuilder aus. Das grundsätzliche Verfahren funktioniert aber mit SharePoint 2010 ebenso.
Zuerst legen wir uns mit dem WSPBuilder ein neues WSPBuilder-Projekt an und fügen diesem Projek über Add –> New Item ein Blank Feature aus dem Bereich WSPBuilder hinzu. In dem folgenden Dialog setzen wir den Scope des Features auf Web – wir wollen schließlich eine Liste in einem Web erstellen.

Im Solution Explorer sollte unser Projekt jetzt ungefähr folgendermaßen aussehen:

Als nächstes nehmen wir unser Projekt aus den Build-Vorgängen heraus, denn wir werden unser Feature ausschließlich vom WSPBuilder erstellen lassen.

Damit hätten wir bereits das Grundgerüst unseres Projekt erstellt. Als nächstes nehmen wir die nötigen Änderungen an der Datei feature.xml vor.Sieht man einmal von der Feature Description ab, müssen wir hier nur 2 Zeilen ändern. Unsere Liste soll den Namen DemoBlogListe erhalten. Daher müssen wir die Datei elements.xml im Projekt entsprechend umbenennen und diese Umbenennung hier in der feature xml nachziehen. Bisher fehlt in unserem Projekt auch noch die Datei schema.xml (die die eigentlichen Listenbeschreibung enthält). Diese schema.xml fügen wir zwar erst im nächsten Schritt hinzu, aber die Vorbereitungen können wir bereits jetzt treffen. In unserem Feature legen wir einen Ordner an, der den Namen DemoBlogListe haben muss (also der gleiche Name, den wir bereitsbei der Umbenennung der elements.xml verwendet haben). Diesen neuen Ordner müssen wir auch noch in die feature.xml eintragen.
Im Solution Explorer sieht unser Projekt jetzt folgendermaßen aus:

Die Datei feature.xml ist jetzt fertig und sollte folgendermaßen aussehen:

Als nächstes passen wir die ehemalige elements.xml –die wir in demoblogliste.xml umbenannt haben- an. In meinem einfachen Beispiel sieht diese Datei so aus:

Folgende Einstellungen sind dabei wichtig:
- die FeatureID muss der ID unseres Features (feature.xml) entsprechen
- Type beschreibt die Typ-ID der neuen Liste. Ich verwende gern eigene IDs, damit diese Liste später per Code leicht erannt werden kann
- die SecurityBits beschreiben die Zugriffsrechte (siehe Links am Ende des Artikels)
Wir wollen auch eine Instanz der Liste erzeugen lassen, daher füge ich noch den Bereich ListInstance an. Hier gelten u.a. die folgenden Einstellungen:
- TemplateType entspricht der TypeID
- Url ist die URL, unter der die Liste nachher erreichbar ist
Die anderen Parameter sind selbsterklärend bzw. werden in den Links zu diesem Artikel näher erläutert.
Machen wir uns nun an die Hauptarbeit – das Erstellen der schema.xml. Dazu fügen wir zuerst eine leere XML-Datei in den Ordner DemoBlogListe ein und benennen diese in schema.xlm um. Im Solution Explorre sieht unser Projekt nun folgendermaßen aus:

Die schema.xml ist eine ziemlich große und recht komplexe XML-Datei. Zwar könnte man diese komplett selbst erstellen, aber man kann sich die Arbeit auch etwas vereinfachen. Ich kopiere mir meist die schema.xml der generischen Liste aus dem 12-Hive in meine Projekte. Diese Datei findet man im 12-Hive unter TEMPLATE\FEATURES\CustomList\CustList\schema.xml. Wir kopieren also den Inhalt der schema.xml der generischen Liste und kopieren den Inhalt in die soeben neu erzeugte leere schema.xml in unserem Projekt.
Diese schema.xml ist schon eine ziemlich gute Vorlage und für mein einfaches Beispiel sind auch nur wenige Änderungen nötig. In den meisten Fällen möchte man neue Spalten anlegen. In diesem Beispiel lege ich dazu die Spalte Farbe an, die eine Farbauswahl (rot, gelb, blau, grün) ermöglichen soll.
Um eigene Spalten zu verwenden, kommt man um die Verwendung eines listeninternen Inhaltstyps (Content-Type) nicht herum. Dazu ersetzen wir den markiertenTeil durch unsere Inhaltstyp-Definition – und definieren bei dieser Gelegenheit auch gleich die Title-Spalte mit.


Hierbei vergeben wir für unser neues Feld Farbe unbedingt eine neue GUID. Gleiches gilt für die ID des Inhaltstyps – diese ist allerdings etwas anders ausgebaut. Die ID beginnt erst nach ein paar zusätzlichen Codes (ContentType ID="0x010065F60B0AE04E4539BE0CE4C25965D3ED"). Der Aufbau dieser besondere GUID ist in den Links zu diesem Artikel erklärt. Die eigentliche GUID ist der blau marierte Teil (siehe MSDN: What are Content Type IDs?)
In unserem einfache Inhaltstyp haben wir bisher nur ein Feld –ohne Typ- angelegt. Die eigentliche Felddefinition erfolgt nun. Wir fügen unter der ContentType-Definition in den Fields-Bereich unsere Felddefinition ein:

Wichtig dabei: die ID muss mit der ID des Feldes aus unserem Inhaltstyp übereinstimmen – gleiches gilt für den Namen.
Damit wir unser neues Feld auch in der Standard-Ansicht sehen, müssen wir es noch in den entsprechenden Views-Abschnitt eintragen. Dieser befindet sich am Ende der schema.xml:

So – und nun wird es spannend! Wir lassen den WSP-Builder unsere Feature-Definition übersetzen und wenn wir alles richtig gemacht haben, sollte der WSPBuilder eine Datei demoblogliste.wsp erzeugt haben.

Die Installation kann z.B. mit dieser einfachen Batch-Datei erfolgen:
stsadm -o addsolution -filename DemoBlogListe.wsp
stsadm -o deploysolution -name DemoBlogListe.wsp –immediate
stsadm -o installfeature -name DemoBlogListe -force
stsadm -o activatefeature -name DemoBlogListe -url http:/mymoss/testweb
Wenn alles fehlerfrei durchgelaufen ist, sollten wir im TestWeb unsere Liste vorfinden:

Hier sehen wir bereits unsere neue Spalte Farbe. Und auch beim Erstellen eines neuen Eintrags taucht unsere neue Spalte auch:

Soviel als erster Einstieg in das Thema Listenanlegen per Feature. Ich füge diesem Artikel noch ein paar interessante Links mit weiterführenden Informationen an und stelle gern auch das Demo-Projekt als Downloadim Anhang zu diesem Artikel zur Verfügung.
Blog-Artikel von André Vala
Blog-Artikel von Ton Stegeman
Artikel bei MSDN
Artikel im ITPro-Blog
Blog von Karine Bosch
MSDN - What are Content Type IDs?
Artikel im Blog SharePointZone
Eine Übersicht der Typen
Wie gesagt – auch wenn es in diesem einfachen Beispiel vergleichsweise leicht aussieht: so ganz trivial ist das Erstellen bzw. Bearbeiten einer schema.xml nicht. Mir hat es geholfen, mich langsam und mit ein paar Beispielen an das Thema heranzuarbeiten. Ich gebe aber auch gern zu, dass ich dabei einige Fehlschläge hinnehmen musste und manchmal ein Fluchen nicht unterdrücken konnte.
P.S.: An dieser Stelle Danke an Andi Fandrich, der mir mit wertvollen Tipps über die ersten Klippen geholfen hat :-)

Bereitgestellt
20 Sep 2010 11:27
von
Oliver Wirkus