jueves, 5 de noviembre de 2009

Trabajando con tipos de contenido en SharePoint

Según Microsoft TechNet un tipo de contenido define los atributos de un elemento de la lista, documento o carpeta. Cada tipo de contenido puede especificar: propiedades, flujos de trabajo, eventos, plantillas de documentos y otras características personalizadas.

Una explicación mía, menos ortodoxa, define a los tipos de contenido como algo muy parecido a los subtipos y supertipos de un modelo de entidad relación. El clásico ejemplo de Empleado Contratado y Empleado en Relación de dependencia puede definirse en forma muy simple en SharePoint, logrando con muy poco esfuerzo pantallas para cada tipo de empleado con sus columnas asociadas.

Este artículo trata sobre la creación de tipos de contenido en forma programática…

Introducción

Los tipos de contenidos trabajan bajo el principio de la herencia. No es posible crear un tipo de contenido desde cero, debe heredar de un tipo de contenido base. Una primera definición al crear un tipo de contenido consiste en definir si será utilizado en listas o librerías de documentos. Los tipos de contenido para librerías de documentos soportan como adicional la posibilidad de especificar plantillas de documentos, por ejemplo en Word.

Como punto final, es importante saber que los tipos de contenido pueden definir también el comportamiento, a través de flujos de trabajo y manejadores de eventos.

Crear un tipo de contenido usando CAML

Para crear un tipo de contenido es necesario haber creado previamente las columnas de sitio. Para cada columna de sitio que incluiremos en nuestro tipo de contenido, debemos incluir un elemento FIELDREF, que defina el GUID y el NAME de la columna, Opcionalmente podemos definir un DISPLAYNAME distinto a NAME.

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">

  <ContentType ID=""

    Name="EmpleadoContratado"

    Description="Crear un nuevo empleado contratado"

    Version="0"

    Group="Tipos de contenido de SurPoint" >

    <FieldRefs>

     <FieldRef ID="{}" Name="Title" DisplayName="Empleado" Sealed="TRUE" />

     <FieldRef ID="{}" Name="Legajo" DisplayName="Legajo" />

    </FieldRefs>

  </ContentType>

</Elements>

El ID especifica el identificador del tipo de contenido y está diseñado para ser recursivo. Cada identificador de tipo de contenido contiene el identificador del tipo de contenido primario, el cual contiene a su vez el identificador del elemento primario de dicho tipo de contenido y así sucesivamente hasta llegar al identificador de tipo de contenido del sistema, inclusive. Mediante el análisis del identificador de tipo de contenido, puede determinar qué tipos de contenido hereda el tipo de contenido y cómo están relacionados dos tipos de contenido [MSDN: Identificadores de tipo de contenido].

La siguiente imagen muestra la jerarquía de tipos de contenido. Más información en: MSDN: Jerarquía de tipos de contenido base.

image

Asociar un tipo de contenido a una lista

Se puede asociar uno o varios tipos de contenido a una lista en el momento de la definición de la misma utilizando el elemento ContentTypes:

<ContentTypes>

  <ContentTypeRef ID = "Text">

    <Folder

     TargetName="Text">

    </Folder>

  </ContentTypeRef>

  ...

</ContentTypes>

ContentTypeRef establece la referencia al tipo de contenido que queremos asociar con la lista.

Control de cambios en tipos de contenido

Pueden establecer un tipo de contenido como sólo lectura, lo cual genera una advertencia para el usuario, pero no impiden que cambie este parámetro.

Otra alternativa es sellar los tipos de contenido (atributo Sealed), lo cual impide los cambios. El usuario debería ser administrador de la colección de sitios para modificar este parámetro.

Más información en: MSDN: Control de cambio de tipos de contenido

Links interesantes

FIN

Como verán, el tema es bastante amplio. Finalizo este artículo aquí para dejarles una primera introducción como base.

Como siempre, espero que les sea útil y que lo disfruten..

0 comentarios:

Publicar un comentario en la entrada