Nachdem wir im Teil 3 eigene Felder in einem Feature angelegt haben, wollen wir in diesem Teil eigene Inhaltstypen mit Hilfe eines Features erstellen. Ich möchte dabei gleichzeitig zeigen, wie man eine Hierarchie von Inhaltstypen erstellen kann. Ein Inhaltstyp besteht primär aus Feldreferenzen. Das folgende Beispiel verwendet einige Spalten, die wir in Teil 3 angelegt haben:
Elements.xml
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<ContentType ID="0x0101004955BBB394EB43D78F2635EEFFC187BC"
Name="RGCT"
Description="RG Inhaltstyp"
Group="RGCT"
Version="0">
<FieldRefs>
<FieldRef ID="{5024022C-ED24-4959-8A9C-D4E9D0E97A0C}"
Name="DocNo"
Required="false" />
<FieldRef ID="{F8D2951B-ECC2-4a36-B5A4-1376D05047BB}"
Name="Textfeld"
Required="true" />
<FieldRef ID="{24E7DF9C-188E-4b80-8212-1CEF612F08B6}"
Name="Datumsfeld"
Required="true" />
<FieldRef ID="{7DAC2502-CD54-46f7-B14A-CE51743E30C5}"
Name="Auswahlfeld"
Required="false" />
</FieldRefs>
</ContentType>
</Elements>
Der Inhalt der Datei Elements.xml ist eigentlich nicht schwer zu verstehen:
- Im Element ContentType können Attribite für die eindeutige ID, den Namen, Beschreibung, Anzeigegruppe und Version definiert werden
- Im Element FieldRefs werden die Verweise auf die einzelnen Felder hinterlegt. Wichtig ist hierbei, dass die ID mit der Id des Feldes übereinstimmt. Das Attribut Required gibt an, ob Werte in des Feld eingegeben werden müssen (true) oder nicht (false).
Etwas eigenartig ist allerdings die ID aufgebaut. Hier hat sich Microsoft etwas spezielles einfallen lassen. Eine normale GUID funktioniert an dieser Stelle nicht. Der Aufbau der ID ist hierarchisch organisiert:
0x: steht für System
01: steht für Element
01: steht für einen Dokumenten Inhaltstyp
20: würde für einen Ordner Inhaltstyp verwendet werden
00: leitet einen selbst definierten Inhaltstyp ein. Werden diese beiden Nullen vergessen, kann zwar
der Inhaltstyp angelegt werden, er ist jedoch nicht sichtbar in der Administrationsoberfläche.
Danach folgt eine GUID. Wichtig ist hierbei, dass die GUID keine Bindestriche enthält und dass alle Buchstaben groß geschrieben sind.
Bei unserem oberen Beispiel handelt es sich also um einen Dokumenteninhaltstyp.
Weitere Details können aus dem folgenden Blogeintrag entnommen werden: http://blogs.msdn.com/andrew_may/archive/2006/06/24/SharePointBeta2WhatAreContentTypeIDs.aspx
Wenn man eine hierarchische Anordnung von Inhaltstypen erreichen will, kann man weitere ContentType Elemente in die obige Datei aufnehmen. Abhängigkeiten schafft man dabei dadurch, dass man an die ID des Basis-Inhaltstyp jeweils fortlaufend 01, 02 usw. anhängt. Das folgende Beispiel verdeutlicht dies. Es definiert 2 weitere Inhaltstypen, die von unserem oberen Beispiel abhängig sind und lediglich weitere Felder hinzufügen:
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<ContentType ID="0x0101004955BBB394EB43D78F2635EEFFC187BC"
Name="RGCT"
Description="RG Inhaltstyp"
Group="RGCT"
Version="0">
<FieldRefs>
<FieldRef ID="{5024022C-ED24-4959-8A9C-D4E9D0E97A0C}"
Name="DocNo"
Required="false" />
<FieldRef ID="{F8D2951B-ECC2-4a36-B5A4-1376D05047BB}"
Name="Textfeld"
Required="true" />
<FieldRef ID="{24E7DF9C-188E-4b80-8212-1CEF612F08B6}"
Name="Datumsfeld"
Required="true" />
<FieldRef ID="{7DAC2502-CD54-46f7-B14A-CE51743E30C5}"
Name="Auswahlfeld"
Required="false" />
</FieldRefs>
</ContentType>
<ContentType ID="0x0101004955BBB394EB43D78F2635EEFFC187BC01"
Name="RGCT-Sub1"
Description="RG Inhaltsuntertyp1"
Group="RGCT"
Version="0">
<FieldRefs>
<FieldRef ID="{59E99D36-3B7B-438b-B7A1-673F2EA49902}"
Name="Userfeld"
Required="false" />
</FieldRefs>
</ContentType>
<ContentType ID="0x0101004955BBB394EB43D78F2635EEFFC187BC02"
Name="RGCT-Sub2"
Description="RG Inhaltsuntertyp2"
Group="RGCT"
Version="0">
<FieldRefs>
<FieldRef ID="{923CEE8F-DEF7-4b2b-A0A2-A13E6BE0E937}"
Name="Boolfeld"
Required="false" />
<FieldRef ID="{34A1C4FA-44EB-4ed5-B2DB-F544D5C17E5B}"
Name="Notefeld"
Required="false" />
</FieldRefs>
</ContentType>
</Elements>
Um die Inhaltstyp Definition zu verwenden, erstellen wir wieder eine Feature XML Datei, die die Datei elements.xml referenziert:
Feature.xml
<Feature Id="CDE8F49C-FE4C-4ab5-991E-C7C8F9AC4765"
Title="RGCT"
Description="RG Inhaltstyp"
Version="1.0.0.0"
Scope="Site"
xmlns="http://schemas.microsoft.com/sharepoint/">
<ElementManifests>
<ElementManifest Location="elements.xml" />
</ElementManifests>
</Feature>
Wie bereits erwähnt, ist es wichtig, dass eine neue GUID verwendet wird.
Installieren und aktivieren des Features
Die Installation läuft wie gewohnt ab:
1. Die oben beschriebenen Dateien in einen Unterordner innerhalb des Feature Verzeichnisses kopieren z.B. „C:\Programme\Gemeinsame Dateien\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES\RGCT“
2. Feature installieren über folgenden Befehl:
a. Stsadm –o installfeature –name RGCT
3. Feature aktivieren in einer Websitesammlung
a. Stsadm –o activatefeature –name RGCT –url http://rgportal
4. IISREST durchführen
5. Danach werden die neuen Inhaltstypen in der Websitesammlung sichtbar: Websitesaktionen -> Websiteeinstellungen -> Websitespalten. Sie befinden sich in der Gruppe RGCT.

Die neuen Inhaltstypen können nun z.B. einer Dokumentenbibliothek zugeordnet zugeordnet werden.
Im nächsten Post zeige ich, wie man den soeben erzeugten Inhaltstyp in einer Listen bzw. Bibliotheksdefiniton verknüpfen kann.
Das komplette Beispiel ist zu finden unter http://sharepoint-dms.com/blog/Examples/RGFeatures.zip