Il blog di Giuseppe Marchi - SharePoint MVP
NAVIGATION - SEARCH

Come inserire una site column ad un content type tramite l'object model di SharePoint

Utilizzando il modello ad oggetti lato server di SharePoint e provando a maneggare le classi SPField e SPContentType, possiamo avere la necessità di creare una site column ed attaccarla poi ad un content type esistente all'interno della nostra site collection (per la creazione di un content type tramite modello ad oggetti, vi rimando a questo post).
Abituati a come si devono gestire i campi (attraverso la classe SPFIeld) in liste SharePoint, la prima cosa ci può venire in mente è sicuramente quella di aggiungere il nostro SPField all'interno della SPFieldCollection esposta dalla proprietà "Fields" del nostro content type:

SPContentType ct = web.ContentTypes["CONTENT TYPE NAME"];

SPField field = web.Fields.GetFieldByInternalName("COLUMN INTERNAL NAME");
ct.Fields.Add(field);
ct.Update(true);

Ecco, nel caso dell'inserimento di un SPField all'interno di un content type e NON all'interno di una lista, questo codice E' SBAGLIATO !
Infatti, se provate ad eseguirlo vi ritroverete questo errore:

This functionality is unavailable for field collections not associated with a list

Errore scatenato all'esecuzione del metodo Add() della classe SPFieldCollection.
Il metodo corretto per l'inserimento di un SPField (la nostra site column) all'interno di un content type è tramite l'utilizzo della classe SPFieldLink. Ecco l'esempio.

SPContentType ct = web.ContentTypes["CONTENT TYPE NAME"];

SPField field = web.Fields.GetFieldByInternalName("COLUMN INTERNAL NAME");
SPFieldLink link = new SPFieldLink(field);
ct.FieldLinks.Add(link);
ct.Update(true);


Spero possa essere utile a qualcuno.
blog comments powered by Disqus