Procedimiento para crear una clase de campos personalizados

Última modificación: miércoles, 15 de septiembre de 2010

Hace referencia a: SharePoint Foundation 2010

Para crear una clase de tipos de campo personalizado, deberá derivar una clase de la clase SPField o de una de las clases enumeradas en la tabla inferior, todas las cuales derivan de la clase SPField.

Nota

Hay otras clases de tipos de campo (clases cuyos nombres siguen el modelo SPField*), pero Microsoft SharePoint Foundation las procesa de formas especiales y no es posible derivar nuevas clases de ellas.

Se recomienda usar la siguiente convención de nomenclatura al crear clases de campo personalizado que deriven directa o indirectamente de la clase SPField:

nombreDeTipoDeCampoField

TargetDateField y RegularExpressionField son ejemplos de clases con nombres adecuados. (Las clases derivadas de SPField que se suministran con SharePoint Foundation se crearon antes de determinar esta convención de nomenclatura y siguen el modelo SPFieldnombreDeTipoDeCampo, como por ejemplo la clase SPFieldDateTime).

Las clases de campo personalizado se pueden derivar de los siguientes miembros de la clase SPField.

Las clases de tipo de campo personalizado que no heredan directamente de la clase SPField deben derivar de una de las clases siguientes.

Clase

Descripción

SPFieldBoolean

Representa un tipo de campo Boolean.

SPFieldChoice

Representa un tipo de campo de opción.

SPFieldCurrency

Representa un tipo de campo de moneda.

SPFieldDateTime

Representa un tipo de campo de fecha y hora.

SPFieldLookup

Representa un campo de búsqueda. El valor del campo para un objeto SPFieldLookup está incluido en un objeto SPFieldLookupValue.

SPFieldMultiChoice

Representa un tipo de campo de varias opciones. El valor de campo para un objeto SPFieldMultiChoice está incluido en un objeto SPFieldMultiChoiceValue.

SPFieldMultiColumn

Representa un tipo de campo de varias columnas. El valor de campo para un objeto SPFieldMultiColumn está incluido en un objeto SPFieldMultiColumnValue.

SPFieldMultiLineText

Representa un tipo de campo de texto multilínea.

SPFieldNumber

Representa un tipo de campo de número.

SPFieldRatingScale

Representa un tipo de campo de clasificación. El valor de campo para un objeto SPFieldRatingScale está incluido en un objeto SPFieldRatingScaleValue.

SPFieldText

Representa un tipo de campo de texto de una sola línea.

SPFieldUrl

Representa un tipo de campo de dirección URL. El valor de campo para un objeto SPFieldUrl está incluido en un objeto SPFieldUrlValue.

SPFieldUser

Representa un usuario de SharePoint Foundation.

Nota

Para obtener más información acerca de cómo se crean clases de valor de campo personalizado, consulte Procedimiento para crear una clase de valores de campo personalizados.

Especificación del comportamiento de los campos personalizados

Tras elegir el formulario de clase de campo de la que desea derivar el tipo de campo personalizado, puede seleccionar los miembros de dicha clase que desee invalidar. Puesto que la mayoría de las propiedades y comportamientos que hacen que un tipo de campo sea único están incluidos en su clase, existe un variado conjunto de semántica de invalidación que se obtiene simplemente seleccionando la clase derivada de SPField que invalidará la nueva implementación.

Por ejemplo, la clase SPField contiene los siguientes miembros cuya implementación se puede invalidar, si es necesario, cuando se programan tipos de campo personalizados:

Nota

Para la mayoría de los miembros enumerados en esta sección, la implementación predeterminada de la clase SPField no está diseñada para hacer algo útil; por ejemplo, GetFieldValue simplemente devuelve lo que se le pasó, y GetValidatedString simplemente llama al método ToString de la clase de valor (que no contiene ninguna lógica de validación). Por este motivo, si la clase de tipo de campo personalizado se deriva directamente de SPField, debe invalidar y proporcionar sustitutos para cualquiera de estos miembros que necesite utilizar para su fin previsto.

Miembros de la clase SPField que con frecuencia deben ser invalidados

Miembros de la clase SPField

Descripción

FieldRenderingControl

Devuelve un control que se puede usar para representar el campo en los formularios de presentación, edición y creación y en cualquier página que use controles de campo. Un objeto que crea una instancia de un control de representación contiene, en su propiedad Field, una referencia recíproca al objeto de campo que representa. Como estas referencias recíprocas sugieren, los dos objetos son socios. El objeto derivado de SPField controla la interacción con la base de datos de contenido, mientras que el control de representación derivado de BaseFieldControl controla la interacción con los usuarios y la representación del campo en la interfaz de usuario. No obstante, tenga en cuenta que no es necesario representar un campo personalizado con un control de representación: también se puede representar con un RenderPattern definido en una definición de campo, en cuyo caso la propiedad FieldRenderingControl puede ser null. El modelo más común es usar un control de representación para representar el campo en los modos de creación y edición, y un modelo de representación para representarlo en el modo de presentación.

Cuando se usa un control de representación, la clase de campo personalizado debe invalidar el descriptor de acceso get de la propiedad FieldRenderingControl con el siguiente patrón de código estándar:

public override BaseFieldControl FieldRenderingControl
{
    [SharePointPermission(SecurityAction.LinkDemand, ObjectModel = true)]
    get 
    {
        BaseFieldControl fieldControl = new field_type_nameFieldControl();
        fieldControl.FieldName = this.InternalName;
        return fieldControl;
    }
}
Public Overrides ReadOnly Property FieldRenderingControl() As BaseFieldControl
    <SharePointPermission(SecurityAction.LinkDemand, ObjectModel := True)> _
    Get
        Dim fieldControl As BaseFieldControl = New field_type_nameFieldControl()
        fieldControl.FieldName = Me.InternalName
        Return fieldControl
    End Get
End Property

El atributo de permiso garantiza que solo el código con permiso para usar el modelo de objetos SharePoint Foundation pueda leer la propiedad. La línea que asigna el nombre interno del objeto de campo a la propiedad FieldName también establece la propiedad Field en el objeto de campo. De esta forma se garantiza que el nombreDeTipoDeCampoFieldControl sabe qué objeto está representando.

FieldRenderingMobileControl

Devuelve un control que se puede utilizar para representar el campo en los formularios de presentación, edición y creación en aplicaciones móviles.

GetFieldValueForEdit

Devuelve el valor de campo que se va a representar en modo de edición. Este método se usa para los formularios de edición y creación.

GetValidatedString

Cuando se invalida en una clase derivada, devuelve el valor del campo validado. Invalide este método para lógica personalizada de validación y serialización de datos. (El método base no proporciona lógica de validación y muchas de las clases de SharePoint Foundation que derivan de él, tampoco). Este método puede, a su vez, usar el método ToString del objeto de valor de campo para convertir el objeto de valor de campo en una cadena. La invalidación típica debería:

  • Producir una SPFieldValidationException si el valor que el usuario ha asignado al campo no es válido o si el valor es null y el campo es obligatorio. SharePoint Foundation detecta esta excepción si el usuario intenta guardar un valor no válido. En ese caso, el formulario de creación permanece abierto y la propiedad Message de la excepción se usa para colocar un mensaje de error junto al campo no válido.

  • Llame al GetValidatedString de base sólo si el valor pasa la validación personalizada.

Consulte Validación de datos de campos personalizados para obtener más información y un ejemplo de un GetValidatedString invalidado.

OnAdded

Invalidar para especificar lógica de tipo de campo personalizado después de agregar un campo a una lista.

OnUpdated

Invalidar para especificar lógica de tipo de campo personalizado después de actualizar un campo.

OnDeleting

Invalidar para especificar lógica de tipo de campo personalizado antes de eliminar un campo de una lista.

Miembros de la clase SPField que se invalidan con frecuencia cuando se utiliza un tipo de datos personalizados complejo

También hay varios miembros de la clase SPField que probablemente invalidará cuando el tipo de campo requiera un tipo de datos personalizado complejo que sea distinto del tipo de campo principal. Estos tipos de datos personalizados se definen con clases de valor de campo personalizadas. Para obtener más información, vea Procedimiento para crear una clase de valores de campo personalizados. (Es posible que también deba invalidar estos miembros en otras situaciones, incluso cuando no esté creando tipos de datos personalizados).

Miembros de la clase SPField

Descripción

DefaultValue

Devuelve, como cadena, un valor predeterminado que se puede utilizar para el campo cuando un elemento de lista determinado no tiene ningún valor en el campo.

DefaultValueTyped

Devuelve un valor predeterminado que se puede utilizar para el campo cuando un elemento de lista determinado no tiene ningún valor en el campo.

FieldValueType

Devuelve el tipo de valor de campo.

GetFieldValue

Devuelve el valor de campo en forma de objeto.

GetFieldValueAsText

Devuelve el valor de datos de campo en forma de cadena.

GetFieldValueAsHtml

Devuelve el valor de datos de campo en forma de cadena, con formato HTML. Este valor de campo con formato HTML se suele usar para representar el valor de campo directamente en una página. Por ejemplo, se usa en la página del historial de versiones de un elemento de lista. Sin embargo, este valor de campo con formato HTML no se usa en el formulario de presentación. La representación del campo para el formulario de presentación suele representarse desde el elemento Lenguaje de marcado de la aplicación de colaboración (CAML)DisplayPattern en el archivo fldtype*.xml del tipo de campo.

GetValidatedString

Consulte la nota de la sección Especificación del comportamiento de los campos personalizados.

PreviewValueTyped

Devuelve un valor de vista previa de los datos de campo para una vista de tiempo de diseño del control de campo en los modos de presentación y edición.

Vea también

Tareas

Tutorial: Crear un tipo de campo personalizado

Conceptos

Procedimiento para crear un tipo de campo personalizado

Tipos de campos personalizados

Validación de datos de campos personalizados

Procedimiento para crear una clase de valores de campo personalizados