2012-01-26 5 views
8

Quando cerco per la documentazione sulla creazione ContentTypes utilizzando il codice (C#) trovo sempre esempi utilizzando uno SPFieldLink collegare a un campo esistente del sito e l'aggiunta di questa viaPerché dovrei usare fieldlink quando aggiungo campi a un contenttype?

contentType.FieldLinks.Add() 

Ma c'è anche un metodo per aggiungere campi direttamente. C'è una buona ragione per cui non dovrei semplicemente aggiungere campi usando

contentType.Fields.Add(SpField()) 

?!?

grazie in anticipo

risposta

5

Sembra che ci sia una semplice ragione, come ho scoperto, ormai: Semplicemente non funziona su ContentTypes. Quando si tenta di aggiungere direttamente un campo, SP2010 invia un'eccezione:

Questa funzionalità non è disponibile per raccolte di campi non associate a un elenco.

Non mi aspettavo assolutamente questo (né l'inquisizione spagnola), ma non sembra possibile.

5

Potrebbe essere utile consultare l'XML per un elenco.

Ecco l'XML per il tipo di annuncio Content:

<FieldRefs> 
    <FieldRef ID="{7662cd2c-f069-4dba-9e35-082cf976e170}" Name="Body" /> 
    <FieldRef ID="{6a09e75b-8d17-4698-94a8-371eda1af1ac}" Name="Expires" /> 
</FieldRefs> 

Ecco l'XML per la lista di annunci:

<Fields> 
    <Field ID="{7662cd2c-f069-4dba-9e35-082cf976e170}" Type="Note" RichText="TRUE" RichTextMode="FullHtml" IsolateStyles="TRUE" NumLines="15" Name="Body" DisplayName="$Resources:core,camlid2;" Sortable="FALSE" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="Body"> 
    </Field> 
    <Field ID="{6a09e75b-8d17-4698-94a8-371eda1af1ac}" Type="DateTime" Name="Expires" DisplayName="$Resources:core,camlid3;" Format="DateOnly" FromBaseType="TRUE" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="Expires"> 
    </Field> 
</Fields> 

liste hanno Fields. I tipi di contenuto hanno FieldRefs.

Non sono sicuro che sia giusto, ma lo descrivo sempre come la differenza tra classi e interfacce o classi astratte. Un tipo di contenuto è la definizione di un elenco, ma, come un'interfaccia, non contiene dati o funzionalità. Poiché i campi contengono dati e funzionalità, i tipi di contenuto (dissociati da un elenco) non hanno campi, hanno FieldRefs. YMMV - ma questo mi aiuta sempre a tenerli dritti.