Share via


Bloque de creación: columnas y tipos de campo

Última modificación: jueves, 08 de julio de 2010

Hace referencia a: SharePoint Foundation 2010

En este artículo
Modelo de objetos para columnas y tipos de campo
XML usado para columnas y tipos de campo
Áreas relacionadas con el desarrollo de tipos de campo y de columnas
Más información acerca del desarrollo de tipos de campo y de columnas

En este tema se proporciona una breve introducción sobre las columnas y los tipos de campo como bloques de creación del desarrollo de Microsoft SharePoint Foundation.

SugerenciaSugerencia

El término "campo" cuenta con dos significados estrechamente relacionados en cuanto al desarrollo de SharePoint Foundation. A veces se refiere a una columna de una lista, pero cuando el tema en discusión es un solo elemento de lista, el término "campo" tiene un significado similar al de "celda", donde celda es la intersección de una columna y una fila de una tabla. En parte por esta razón, los términos "columna" y "campo" son prácticamente sinónimos en el contexto del desarrollo de SharePoint Foundation. Por ejemplo, un objeto que representa una columna es un objeto de la clase SPField o una clase que deriva de ésta.

En SharePoint Foundation, las columnas no solo contienen datos de un tipo de datos particular, sino que son propiamente una clase de tipo, ya que la misma columna puede usarse en varias listas con diferentes datos. Una columna puede persistir en una galería de columnas de sitio. Una columna de sitio de la galería puede agregarse a cualquier lista del sitio, ya sea mediante programación o mediante la interfaz de usuario (UI). Una columna también puede agregarse a un tipo de contenido, ya sea mediante programación o mediante la UI por medio de un diseñador de tipos de contenido.

Entre algunas de las columnas de sitio integradas en SharePoint Foundation se incluyen Dirección, Cumpleaños, Nombre de asistente y Dirección URL. Cada columna pertenece a uno u otro tipo de un pequeño conjunto de clases de tipos, a menudo llamadas "tipos de campo". Por ejemplo, los tipos de campo de Dirección, Cumpleaños, Nombre de asistente y Dirección URL son respectivamente Texto multilínea, Fecha y hora, Una sola línea de texto e Hipervínculo. La lista completa de tipos de campo se especifica por medio de los valores de la enumeración SPFieldType. Entre algunos de los valores más importantes se incluyen:

  • Booleano: un campo que sólo acepta true o false como valores.

  • Calculado: un campo cuyo valor se calcula en tiempo de ejecución a partir de una fórmula matemática.

  • Opción: un campo que sólo puede tener un valor y éste debe incluirse en una lista enumerada de valores limitada. También existe un tipo de campo de varias opciones que permite más de un valor de la lista.

  • Calculado: un campo cuyo valor depende del valor de otro campo del mismo elemento de lista. Generalmente es el valor de una operación lógica realizada en uno o varios campos adicionales.

  • Búsqueda: un campo similar al campo de opción, pero la lista de valores posibles proviene de una columna de una lista diferente.

  • Texto: un campo que acepta una sola línea de texto. También existe un tipo de campo Texto multilínea.

A continuación se enumeran algunas de las operaciones más importantes que pueden llevarse a cabo con los campos, ya sea mediante programación o mediante marcado XML:

  • Leer y escribir el valor de un campo particular de un elemento de lista particular.

  • Agregar y eliminar columnas de las listas.

  • Agregar y eliminar columnas de las galerías de columnas de sitio.

  • Cambiar el modo en que se representan los campos en los formularios Nuevo elemento de lista, Editar elemento de lista y Mostrar elemento de lista.

  • Cambiar el modo en que se representan las columnas en las vistas de lista.

  • Crear un tipo de campo personalizado.

  • Crear uno o varios controles de representación personalizados para representar el campo de varios tipos de páginas y formularios.

  • Crear uno o varios controles de representación móviles para representar el campo en dispositivos móviles.

  • Excluir columnas no deseadas de los resultados de la consulta.

  • Realizar una combinación de dos tablas de una consulta cuando una tabla tiene una columna de búsqueda que busca en la otra tabla.

Modelo de objetos para columnas y tipos de campo

Nota

En este tema sólo se hace referencia explícitamente a las clases del SharePoint Foundation modelo de objetos servidor. El modelo de objetos cliente tiene clases paralelas para la mayoría de estas clases de servidor. Como regla general, pero no universal, cuando el nombre de la clase de servidor comienza con "SP", la clase de objeto paralela tiene el mismo nombre, pero sin el prefijo "SP".

Indizadores SPListItem

Una de las tareas de codificación más comunes del desarrollo de SharePoint Foundation consiste en leer y escribir en un campo de un elemento de lista. Para hacerlo, obtenga una referencia al objeto SPListItem que representa el elemento de lista y, posteriormente, use uno de estos indizadores (Item) para hacer referencia a un campo particular. Hay un indizador que acepta un objeto Int32, otro que acepta un objeto String y un tercero que toma un objeto Guid. El último puede usarse para obtener el campo por su propiedad Id. Puede pasar el nombre interno del campo o el nombre para mostrar con el indizador String.

SPField y sus derivados

Cada tipo de campo se representa por una clase que deriva de SPField. Por ejemplo, SPFieldBoolean representa campos booleanos y SPFieldChoice representa campos de opción. Cualquier columna especificada de la galería de columnas de sitio de un sitio web es un objeto de una de estas clases. Las propiedades de la clase diferencian las diversas columnas de un tipo de campo especificado. Por ejemplo, la columna Cumpleaños y la columna Fecha de vencimiento son objetos de la clase SPFieldDateTime, pero difieren en el valor de la propiedad Title, entre otras. Entre los miembros de la clase SPField, hay una propiedad ListsFieldUsedIn() que notifica qué listas incluyen la columna. Y tiene un método EnforceUniqueValues que garantiza que no haya dos celdas de la columna con el mismo valor, al igual que las propiedades Filterable y Sortable.

Un miembro crítico de la clase SPField es el método Update(). Debe llamarse a este método para guardar los cambios realizados en la columna.

SugerenciaSugerencia

Es posible que algunos miembros de cada clase derivada de SPField sugieran que sus objetos representen un campo particular de un elemento de lista; es decir, una entidad que correspondería, en una vista de lista, a una celda particular de la columna. Por ejemplo, hay un método GetFieldValue(String) y un método HasValue(Object). También hay una propiedad FieldRenderingControl que determina el modo en que se representa el campo cuando se representa un solo elemento de lista en un formulario, como un formulario nuevo o de edición. Si bien puede resultar útil pensar en un objeto derivado de SPField de este modo al trabajar con estos miembros, tenga en cuenta que el objeto no tiene ninguna propiedad que contiene el valor de un campo en un elemento de lista particular y que mediante una llamada al método SPField.Update() no se guardarán los cambios realizados en un valor como ese. (El objeto de la propiedad FieldRenderingControl no tiene un miembro de ese tipo, concretamente, la propiedad ItemFieldValue.) De manera similar, GetFieldValue(String) en realidad no obtiene un valor, sino que convierte un valor que se le pasa como parámetro. Y HasValue(Object) simplemente notifica si un objeto que se le pasó es null. Desde luego, la intención es que el valor pasado a cualquiera de los métodos sea el valor del campo de un elemento de lista particular; pero es responsabilidad del programador usar los métodos de esta forma. El modo principal de leer y escribir los datos de un campo particular de un elemento de lista particular consiste en usar un indizador con un objeto SPListItem.

Puede crear tipos de campo personalizados propios mediante la derivación de una clase nueva de SPField o de una clase que herede de ésta. Para obtener más información, vea Procedimiento para crear una clase de campos personalizados.

Nota

No todas las clases que heredan de SPField pueden usarse como clase base para la clase de tipo de campo personalizado. Vea Procedimiento para crear una clase de campos personalizados para obtener una lista de las clases para las cuales Microsoft admite la derivación.

BaseFieldControl y sus derivados

La representación de un campo de un elemento de lista particular en los formularios Nuevo elemento y Editar elemento (y a veces el formulario Mostrar) generalmente se administra mediante un objeto de una clase derivada de BaseFieldControl. Por ejemplo, un objeto SPFieldBoolean se representa por un objeto de la clase BooleanField y el objeto SPFieldUrl se representa por un objeto de la clase UrlField.

Un objeto que crea una instancia de un control de representación contiene, en su propiedad Field, una referencia al objeto de campo que representa. El segundo contiene una referencia a su control de representación en la propiedad FieldRenderingControl. Como sugieren estas referencias recíprocas, los dos objetos están asociados. El objeto derivado de SPField controla la configuración de la columna, mientras que el control de representación derivado de BaseFieldControl controla la interacción con los usuarios y la representación de los campos de los elementos de lista en la UI.

Un objeto del control de representación se mantiene en sincronización con el campo de la base de datos de contenido mediante las propiedades Value y ItemFieldValue, el método UpdateFieldValueInItem() y el controlador OnLoad(EventArgs). En el formulario de edición, la propiedad ItemFieldValue tiene el valor, en la base de datos de contenido, del campo del elemento de lista particular que se está representando en el formulario. En el formulario nuevo, ItemFieldValue tiene un valor predeterminado. El controlador OnLoad(EventArgs) asigna a la propiedad Value el valor de la propiedad ItemFieldValue. Si un usuario establece o cambia el valor en el formulario, el método UpdateFieldValueInItem() asigna a la propiedad ItemFieldValue el valor de la propiedad Value.

Puede crear un control de representación de campos personalizado mediante la derivación de una clase nueva de la clase BaseFieldControl o de una clase que herede de ésta. Para obtener más información, vea Procedimiento para crear un control de representación de campos.

Plantillas de representación

La mayor parte del trabajo de creación y composición de un control de representación de campos, incluida la creación de los controles secundarios, se lleva a cabo mediante una plantilla de representación. Cada control de representación tiene asociada al menos una plantilla de representación. Un objeto RenderingTemplate se define como un elemento RenderingTemplate en un archivo ascx en la carpeta %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES. El valor del identificador hace referencia a su plantilla de representación en la propiedad TemplateName del objeto del control de representación. Debido a que la plantilla de representación realiza la mayor parte del trabajo de representación, el método CreateChildControls() tiene mucho menos trabajo que el que tendría en una clase de control de Microsoft ASP.NET clásica. Normalmente, sólo da un toque final a los controles secundarios. Por ejemplo, puede asignar un valor predeterminado a un control secundario si el campo se está representando en el formulario Nuevo elemento, o bien asignar el valor actual del campo a un control secundario en el formulario Editar elemento.

Puede crear plantillas de representación personalizadas para usarlas con los controles de representación personalizados. Para obtener más información, vea Procedimiento para crear plantillas de representación de campos.

SPMobileBaseFieldControl y sus derivados

La representación de campos en las versiones de dispositivos móviles de las páginas de SharePoint Foundation se administra mediante clases que derivan de SPMobileBaseFieldControl. Por ejemplo, un objeto SPFieldBoolean está representado por un objeto de la clase SPMobileBooleanField. Puede crear controles de representación de campos móviles propios que deriven de una de estas clases.

En un sentido amplio, estas clases proporcionan la misma funcionalidad para formularios móviles que la clase derivada de BaseFieldControl proporciona para formularios que no son móviles. Sin embargo, hay algunas diferencias en la arquitectura:

  • El árbol de herencia de las clases derivadas de SPMobileBaseFieldControl se remonta a la clase Control de ASP.NET en lugar de la clase Control. Además, dentro de la parte de SharePoint Foundation del árbol, las funciones que se heredan de las clases TemplateBasedControl y FormComponent en controles de representación que no son móviles se combinan en la clase SPMobileComponent para controles de representación móviles.

  • Los controles de representación móviles tienen sus propios conjuntos de plantillas de representación y si creó una plantilla de representación personalizada para usarla en páginas que no son móviles, probablemente deberá crear una diferente para su uso en una página móvil.

  • Los controles de representación de campos personalizados que se crean para contextos móviles se basan más en el método CreateChildControls() del control para representar un campo y, en consecuencia, menos en la plantilla de representación, de lo que sucede con los controles de representación de campos personalizados que se crean para contextos que no son móviles. Además, al crear controles de representación móviles personalizados, no se suele invalidar el propio método CreateChildControls(). En su lugar, normalmente se invalidan uno o varios de los otros cuatro métodos que se llaman mediante CreateChildControls(): CreateControlForDisplay(), CreateControlForEdit(), CreateControlForNew() y CreateControlForView().

  • Un objeto que crea una instancia de un control de representación móvil contiene, en su propiedad Field, una referencia al objeto de campo que representa. El segundo contiene una referencia a su control de representación móvil en su propiedad FieldRenderingMobileControl. Los miembros involucrados en mantener la base de datos de contenido y el control de representación sincronizados son ligeramente diferentes en el caso de las clases derivadas de SPMobileBaseFieldControl de lo que son en las clases derivadas de BaseFieldControl, como se describió anteriormente.

    Para obtener más información acerca de la representación de campos en páginas móviles, vea Procedimiento para personalizar la representación de campos en páginas móviles.

Clases de valor de campo personalizado

Si crea un tipo de campo personalizado que contiene un tipo de datos complejo, es posible que deba crear una clase de valor de campo personalizado. Algunos de los tipos de campo integrados requieren tipos de valor complejos. Por ejemplo, los objetos del tipo de campo SPFieldLookup toman valores de un tipo especial representado por la clase SPFieldLookupValue. Para obtener más información acerca de la creación de clases de valor de campo personalizado, vea Procedimiento para crear una clase de valores de campo personalizados.

ViewFieldsOnly y combinaciones

Al usar un objeto SPQuery para representar una consulta Lenguaje de marcado de la aplicación de colaboración (CAML), puede usar las propiedades ViewFields y ViewFieldsOnly para garantizar que la consulta no tenga que capturar campos innecesarios de la base de datos de contenido. Si usa el proveedor LINQ to SharePoint para consultar datos de lista, puede usar la palabra clave select de LINQ con el mismo objetivo. También existe una propiedad Joins que permite combinar una o varias listas. Como alternativa, el proveedor LINQ to SharePoint admite la palabra clave join. Para obtener más información, vea Combinaciones de lista y proyecciones.

XML usado para columnas y tipos de campo

Hay una cantidad considerable de marcado XML implicado en la definición de columnas y tipos de campo.

Definiciones de tipo de campo

El elemento Field, que forma parte del esquema de listas principal, proporciona la definición detallada de un tipo de campo. Para obtener más información, vea Elemento Field (List). Cuando un campo se implementa como parte de una característica, este mismo elemento se usa en el archivo de manifiesto para la característica. Para obtener más información, vea Definiciones de campo.

XML de tipo de campo y hojas de estilo XSLT

Para ser representados, los campos también deben registrarse con SharePoint Foundation en archivos denominados en el modelo fldtypes*.xml ubicado en %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\XML. El formato del archivo es XML de tipo de campo. El marcado de estos registros es un tipo más sencillo de definición de tipo de campo. Notifica ciertas características básicas de un tipo de campo e identifica el ensamblado y la clase administrada del tipo de campo. (El acceso de solo lectura a una definición de tipo de campo se encuentra disponible en el modelo de objetos mediante la clase SPFieldTypeDefinition).

En las vistas de listas, los valores de campo se representan mediante una hoja de estilos XSLT. Los encabezados de la parte superior de cada columna también se representan mediante una hoja de estilos XSLT. Puede crear hojas de estilos XSLT para campos personalizados o para invalidar la representación estándar de los campos existentes. Todas las hojas de estilo se almacenan en %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\LAYOUTS\XSL.

Controles de usuario ASP.NET

Los controles de usuario ASP.NET, que se definen en los archivos ascx, pueden usarse con dos objetivos en el desarrollo de tipos de campo. Primero, la representación de los campos en los formularios presentación, edición y creación que se realiza mediante un control de usuario denominado control de representación (vea BaseFieldControl y sus derivados anteriormente) y una plantilla de representación. Esta última se define con un elemento <RenderingTemplate> en un archivo ascx en la carpeta %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\ControlTemplates. Se representa en el modelo de objetos mediante la clase RenderingTemplate. Esta clase proporciona una capa de abstracción fácil de usar sobre el sistema de ASP.NET de controles de usuario basados en modelo. Para obtener más información acerca de las plantillas de representación y su relación con los controles de representación, vea Plantillas de representación. Segundo, cuando un tipo de campo tiene propiedades variables que tienen valores diferentes en las distintas listas que incluyen ese campo, debe crear un control de edición de propiedades como un control de usuario en un archivo ascx. Para obtener más información acerca de esta tarea, vea Representación de propiedades de tipo de campo personalizado.

Tipos de combinación en el esquema de consultas

El Esquema QueryLenguaje de marcado de la aplicación de colaboración (CAML) incluye un Elemento Join (View) que permite combinar dos listas en una consulta CAML siempre y cuando una lista tenga una columna de búsqueda que busque en una columna de la otra lista. Este elemento también posibilita el uso de combinaciones implícitas y explícitas en una consulta LINQ que use el proveedor LINQ to SharePoint.

Áreas relacionadas con el desarrollo de tipos de campo y de columnas

Bloque de creación: bibliotecas de listas y documentos

Bloque de creación: Tipos de contenido

Más información acerca del desarrollo de tipos de campo y de columnas

En la sección Desarrollo en profundidad en SharePoint Foundation de los nodos para Formularios de lista, Columnas y Tipos de campos personalizados, puede encontrar información detallada y exhaustiva acerca del uso de columnas y tipos de campo en los proyectos de desarrollo. Para obtener información acerca del desarrollo de la representación de campos de representación de dispositivos móviles, vea Procedimiento para personalizar la representación de campos en páginas móviles.

La lectura del valor de un campo particular de un elemento de campo particular es una de las Tareas de programación esenciales de SharePoint. Para obtener más información, vea Procedimiento para leer el valor de un campo en un elemento de lista.

Para obtener información detallada acerca de la consulta de datos en SharePoint Foundation, vea Recuperación de datos y consultas.