Share via


Procedimiento para crear una clase de valores de campo personalizados

Última modificación: lunes, 05 de abril de 2010

Hace referencia a: SharePoint Foundation 2010

En este artículo
Constructores utilizados con las clases de valor de campos personalizados
Uso de la directiva [Serializable]
Acceso a valores de campos personalizados desde la clase de campo personalizado

Si crea una clase de campos personalizados que requiere una estructura de datos especial para los datos de campo y esta estructura no es compatible con la clase de campo primario desde la que está derivando su clase de campo personalizado, puede crear una clase de valor de campo para contener los datos de campo.

Nota

El tipo de datos personalizado puede ser una estructura, ("estructura"), así como una clase; aunque por motivos de simplicidad de la instrucción, el SDK de Microsoft SharePoint Foundation 2010 presupone que siempre se usa una clase.

No es necesario derivar la clase de valor de campo personalizado desde una clase específica. Esto es así incluso para clases de campo personalizado que derivan de otras clases de campo que ya tienen clases de valores de campo asociadas. Por ejemplo, si crea una clase de campo personalizado que hereda de la clase SPFieldMultiColumn, no es necesario que una clase de valor de campo para esa clase de campo personalizado herede de la clase SPFieldMultiColumnValue.

Recomendamos que se utilice esta convención de nomenclatura para las clases de valor personalizadas:

nombreDeTipoDeCampoFieldValue

Algunos ejemplos de clases con nombres correctos son TargetDateFieldValue y RegularExpressionFieldValue. (Las clases de valor especiales que se incluyen con SharePoint Foundation se crearon antes de que se determinara esta convención de nomenclatura y siguen el modelo SPFieldnombreDeTipoDeCampoValue como SPFieldMultiColumnValue).

Constructores utilizados con las clases de valor de campos personalizados

Una clase de valor de campo personalizado debe implementar al menos dos constructores y habitualmente sólo dos. Excepto en algunas ocasiones, uno no tiene parámetros y el otro toma un parámetro String. El segundo constructor convierte String en un valor del tipo personalizado. Si el tipo personalizado es complejo, entonces String deberá tener una estructura que se pueda analizar.

Si la clase se deriva de una de las clases SPFieldnombreDeTipoDeCampoValue, entonces estos constructores normalmente sólo llamarán al constructor base. A continuación se mostrará un ejemplo de constructores de clases de valor típico cuando la clase del valor se deriva de otra clase:

public RegularExpressionFieldValue()
  : base() { }

public RegularExpressionFieldValue(string value)
  : base(value) { }
Public Sub New()
    MyBase.New()
End Sub

Public Sub New(ByVal value As String)
    MyBase.New(value)
End Sub

En algunos casos, quizás necesite constructores adicionales. Por ejemplo, si el tipo personalizado se basa en un campo de matriz interna, puede que necesite un constructor que utilice un parámetro Int32 para inicializar el tamaño de la matriz, pero no cualquier miembro de matriz en particular. También puede necesitar parámetros adicionales en los dos constructores básicos. Por ejemplo, si los valores del tipo personalizado incluyen un componente relativo al contexto, entonces deberá agregar un parámetro SPContext o quizás un parámetro SPWeb o SPSite. Consulte los constructores de las clases SPFieldnombreDeTipoDeCampoValue para ver ejemplos.

Uso de la directiva [Serializable]

Casi cualquier declaración de clase de valor de campo debe tener la directiva [Serializable] agregada de forma que se puedan serializar sus objetos. Esto significa que también debería agregar esta directiva a la declaración de la clase de valor de campo personalizada. Pero no es necesario hacerlo cuando los valores del objeto de la clase son relativos al contexto, de tal forma que resulta imposible guardar y restaurar los valores de objetos con lógica. SPFieldLookupValue es un ejemplo de una clase de valor de campo cuya declaración no usa la directiva [Serializable]; los valores de ese tipo siempre son temporales.

Cuando se marca la clase con la directiva [Serializable, es aconsejable implementar el método ToString para convertir el valor de campo en un formato de cadena que se utiliza para el almacenamiento de datos. (Pero no tiene necesariamente que invalidar el método cuando la clase hereda de otra clase de valor de campo.)

Nota

Las clases SPFieldnombreDeTipoDeCampoValue que se pueden serializar y que se incluyen con SharePoint Foundation invalidan el método ToString en vez de implementan la clase ISerialization. Es recomendable seguir el patrón: no implementar la interfaz ISerialization.

Para obtener más información sobre el SerializableAttribute, consulte SerializableAttribute.

Acceso a valores de campos personalizados desde la clase de campo personalizado

Las clases de campo personalizado que requieren las clases de valor de campo personalizado necesitarán invalidar habitualmente uno o varios de los métodos y propiedades de la clase SPField, en especial aquellos que leen o escriben en los objetos de los valores de campos personalizados

Nota

Para la mayoría de estos miembros, la implementación en SPField no resulta útil; por ejemplo, GetFieldValue sólo devuelve lo que se le ha pasado 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 se deriva directamente de SPField, entonces tendrá que proporcionar invalidaciones para cualquiera de estos miembros que desee utilizar para su fin previsto. Se recomienda, siempre que sea posible, derivar la clase de campo personalizado de una de las clases que derivan de SPField.

  • DefaultValue   Devuelve, como cadena, un valor predeterminado que se puede utilizar cuando un elemento determinado de la lista no tiene valor en el campo.

  • DefaultValueTyped   Devuelve un valor predeterminado que se puede utilizar para el campo cuando un elemento determinado de la lista no tiene valor en el campo.

  • FieldValueType   Devuelve el tipo de valor de campo.

  • GetFieldValue   Convierte la cadena especificada en un objeto de valor de tipo de campo. El objeto de campo personalizado debería devolver el objeto de valor de campo personalizado cuando se invoca el método M:Microsoft.SharePoint.SPField.GetFieldValue(System.String). SharePoint Foundation devuelve este objeto de valor de campo cuando se llama al método SPListItem.this["field name"]. A menudo una invalidación de este método, una vez comprobado que String no está vacía ni es nula, sólo tiene que llamar al constructor de la clase del valor de campo personalizado que toma un parámetro de cadena (consulte la información anterior).

  • GetFieldValueAsText   Devuelve el valor de los datos del campo en forma de cadena.

  • GetFieldValueAsHtml   Devuelve el valor de los datos del 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. Se usa, por ejemplo, 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 modo de presentación. La representación del campo para el formulario de presentación generalmente es la misma que la representación de las vistas de listas; es decir, se representa desde el elemento DisplayPattern de Lenguaje de marcado de la aplicación de colaboración (CAML) en archivo fldtype*.xml del tipo de campo.

  • GetValidatedString Este método valida el objeto de valor del tipo de campo y lo convierte en una cadena serializada. Este método puede, a su vez, usar el método ToString del objeto del valor de campo para convertir el objeto del valor de campo en una cadena.

  • PreviewValueTyped   Devuelve un valor de vista previa de los datos del campo para una vista de tiempo de diseño del control de campo en el modo de presentación o edición.

Vea también

Tareas

Tutorial: Crear un tipo de campo personalizado

Conceptos

Tipos de campos personalizados

Procedimiento para crear una clase de campos personalizados

Validación de datos de campos personalizados