2012-01-26 10 views
8

Cuando busco la documentación acerca de la creación ContentTypes utilizando el código (C#) siempre encuentro ejemplos utilizando un SPFieldLink a enlazar a un campo existente del sitio y añadiendo esto a través de¿Por qué debería usar fieldLinks cuando agrego campos a un tipo de contenido?

contentType.FieldLinks.Add() 

pero también hay un método para agregar campos directamente. ¿Hay una buena razón por la que no debería simplemente agregar campos usando

contentType.Fields.Add(SpField()) 

?!?

gracias de antemano

Respuesta

5

Parece que hay una razón simple como descubrí por ahora: Simplemente no funciona en TiposContenido. Al intentar agregar un campo directamente SP2010 me envía una excepción:

Esta funcionalidad no está disponible para las colecciones de campo no asociadas a una lista.

No esperaba absolutamente esto (ni la inquisición española), pero parece que no es posible.

5

Puede ser útil mirar el XML para obtener una lista.

Aquí es el XML para el tipo de anuncio de contenido:

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

Aquí es el XML para la lista de anuncios:

<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> 

Las listas tienen campos. Los tipos de contenido tienen FieldRefs.

No estoy seguro de si esto es exactamente correcto, pero siempre lo describo como la diferencia entre clases e interfaces o clases abstractas. Un tipo de contenido es la definición de una lista, pero, al igual que una interfaz, no contiene ningún dato o funcionalidad. Como los campos contienen datos y funcionalidad, los tipos de contenido (desasociado de una lista) no tienen campos, tienen FieldRefs. YMMV, pero eso siempre me ayuda a mantenerlos en línea.

Cuestiones relacionadas