I Content Type sono una delle novità di Sharepoint Services 3.0; essi permettono di creare una struttura ad albero per gestire i vari tipi di contenuti che possono essere utilizzati nei siti sharepoint. Quindi ogni vario tipo di lista, da quelle personalizzate alle document library, ha alla propria base il suo content type.
Per la creazione di questi oggetti, esiste un'apposita interfaccia grafica, raggiungibile sotto Site Settings > Site content types. Può essere utile però, crearne da codice, per soddisfare le nostre esigenze di personalizzazione di sharepoint. Vediamo come:

SPWeb web = new SPSSite("http://localhost").OpenWeb();

SPContentType tipoBase = web.AvailableContentTypes["Item"];
SPContentType myCT = new SPContentType(tipoBase, web.ContentTypes, contentTypeName);
web.ContentTypes.Add(myCT);
myCT.FieldLinks.Add(new SPFieldLink(web.AvailableFields["Author"]));
myCT.Update();

In questo esempio, abbiamo creato un content type che eredita dal tipo base "Item", è gli abbiamo aggiunto la colonna "Author". Questo tipo di colonna, è detta "Site Column"; le site column fanno anch'esse parte delle novità introdotte nell'ultima versione di Sharepoint, e hanno il compito di definire il contenuto stesso dei vari content type.
Quindi, come siamo in grado di aggiungere al nostro content type, una colonna gia presente all'interno del sito, così abbiamo la possibilità di crearci le nostre colonne personalizzate ed inserirle nel nostro content type.

SPWeb web = new SPSSite("http://localhost").OpenWeb();

SPContentType tipoBase = web.AvailableContentTypes["Item"];
SPContentType myCT = new SPContentType(tipoBase, web.ContentTypes, contentTypeName);
web.ContentTypes.Add(myCT);

//aggiungo una colonna pre-esistente myCT.FieldLinks.Add(new SPFieldLink(web.AvailableFields["Author"]));

//creo una colonna personalizzata e la aggiungo al content type string fieldName = web.Fields.AddLookup("MyCustomField", web.Lists["MyLookupList"].ID, web.ID, true);
SPFieldLookup lookup = web.Fields["MyCustomField"] as SPFieldLookup;
myCT.FieldLinks.Add(new SPFieldLink(web.AvailableFields[lookup.Title]));

myCT.Update();

Una volta creato il nostro content type, lo possiamo assegnare ad una, o più, delle liste del nostro sito.
Quella dei content type, è stata una gran bella mossa. Sono davvero utili... vedrete!