Compartir a través de


Procedimiento para crear plantillas de representación de campos

Última modificación: domingo, 04 de abril de 2010

Hace referencia a: SharePoint Foundation 2010

En este artículo
Relación de las plantillas de representación con los controles de representación
Sistema de plantillas de representación
Configuración de la representación de campos
Escenarios que requieren varias plantillas de representación
Adición de más asociaciones de plantillas
Uso de controles web personalizados como plantillas

Una plantilla de representación de campo es un objeto RenderingTemplate que se define como un elemento RenderingTemplate en un archivo .ascx en la carpeta %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\controltemplates. Se usa junto con el método CreateChildControls de una clase de control de representación para representar un campo en los modos de creación, edición o presentación.

Relación de las plantillas de representación con los controles de representación

Un objeto RenderingTemplate es un tipo de objeto Control-ITemplate híbrido. Se deriva de Control y sólo agrega un miembro nuevo: una propiedad Template que contiene un objeto ITemplate. Esto permite que un control de representación (derivado de TemplateBasedControl) haga referencia a los objetos ITemplate de forma indirecta al hacer referencia a un objeto RenderingTemplate mediante la propiedad de identificador de la plantilla de representación (ID). El control de representación puede hacer esto mediante una o más de las distintas propiedades String que incluye, como TemplateName, que puede contener el identificador de una plantilla de representación.

Sistema de plantillas de representación

Cada control de representación de campos tiene al menos una plantilla de representación de campos asociada. En el momento de la representación, SharePoint Foundation busca la plantilla necesaria examinando los identificadores de todos los controles declarados en los archivos .ascx en %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\ TEMPLATE\CONTROLTEMPLATES (todos se cargan al iniciarse la aplicación web).

Configuración de la representación de campos

El modelo de configuración de representación de campos que encontrará con más frecuencia cuando desarrolle los tipos de campo personalizados tiene estas características:

  • El control de representación está asociado a dos plantillas de representación y usa sus propiedades TemplateName y DisplayTemplateName para especificar los identificadores de las plantillas.

  • Una plantilla proporciona la mayor parte de la representación de campo en los modos de creación y edición. La otra plantilla proporciona la mayor parte de la representación de campos en el modo de presentación.

  • El método CreateChildControls del control de representación asigna valores predeterminados a los controles secundarios del control de representación en el modo de creación. En cuanto a los modos de edición y presentación, asigna los valores actuales del campo a los controles secundarios. Es posible que realice otra representación final perfeccionada, como la asignación de una clase CSS a un control Label secundario.

  • La lógica de validación se implementa mediante los miembros Validate, IsValid y ErrorMessage del control de representación de campos y mediante el método GetValidatedString del tipo de campo subyacente. (Validate puede ser llamado por CreateChildControls.)

BaseFieldControl hereda de TemplateBasedControl y FieldMetadata los miembros que permiten vincularlo a varias plantillas de representación y alternar entre ellas según el contexto de representación.

Escenarios que requieren varias plantillas de representación

Además de Template, TemplateName, DisplayTemplate y DisplayTemplateName, también se puede trabajar con AlternateTemplate, AlternateTemplateName.

Use una plantilla alternativa para representar el campo personalizado en cualquier contexto de página en el que la plantilla principal no cumpla los requisitos. A continuación se presentan algunos ejemplos:

  • Si el campo es obligatorio en algunas listas, pero no en otras, puede tener una plantilla alternativa idéntica a la principal, con la diferencia de que agrega un indicador (por ejemplo, un asterisco de color rojo), por el cual se sabe que el campo es obligatorio en determinadas listas. A continuación, haga que el descriptor de acceso get de ControlTemplate compruebe la propiedad Required del campo subyacente y devuelva Template o AlternateTemplate según corresponda.

  • Si tiene previsto usar muchos tipos de campo personalizado que se representarán de forma prácticamente idéntica, podrá conseguir una mejor reutilización del código creando plantillas independientes que se usarán en los modos de creación y edición. En el modo de creación, se asignan valores predeterminados a objetos secundarios, mientras que en el modo de edición se asignan los valores actuales. De esta forma, podrá evitar la repetición de la lógica de asignación en el método CreateChildControls de cada una de las clases de tipo de campo personalizado. De nuevo, el descriptor de acceso get de ControlTemplate determinaría qué plantilla se usaría en función del modo de control.

  • El uso de una plantilla alternativa también puede ser útil cuando es necesario representar el campo de una manera especial en ciertos sitios web, colecciones de sitios o aplicaciones web. Piense, por ejemplo, en un sitio web diseñado para personas con una discapacidad visual, como daltonismo. El descriptor de acceso get de ControlTemplate puede examinar el valor de RenderContext para ver si es necesario usar una plantilla especial y devolver la plantilla adecuada.

  • En cuanto a los tipos de campo personalizado que heredan de SPFieldNumber y que, en ocasiones (pero no siempre), deben representarse en forma de porcentajes, disponer de dos plantillas de representación diferentes puede suponer un tremendo ahorro de tiempo de desarrollo. Invalide el descriptor de acceso get de ControlTemplate para responder al valor de la propiedad SPFieldNumber.ShowAsPercentage.

Adición de más asociaciones de plantillas

Sobra decir que puede agregar más asociaciones de plantillas de representación al control de representación de campos derivado de BaseFieldControl. Se recomienda seguir el siguiente patrón:

  • Cree un nuevo campo privado de tipo ITemplate.

  • Cree una nueva propiedad pública en forma de contenedor para el campo privado y asígnele un nombre, como, por ejemplo, Plantillacircunstancia, donde circunstancia identifica la circunstancia en que prevé que se use la plantilla.

  • Cree otra propiedad pública que devuelva un String y denomínela NombrePlantillacircunstancia.

  • El descriptor de acceso get de Plantillacircunstancia debería devolver el campo privado únicamente si éste último no es null; de lo contrario, debería devolver el elemento ITemplate al que NombrePlantillacircunstancia asigna el nombre. Use el método GetTemplateByName() para llevar esto a cabo.

  • Invalide el descriptor de acceso get de ControlTemplate para devolver Plantillacircunstancia siempre que circunstancia sea true.

Uso de controles web personalizados como plantillas

El control de representación de campos personalizados también heredará dos propiedades ITemplate especiales: CustomTemplate y CustomAlternateTemplate. Estas dos propiedades se marcan con el atributo [PersistenceMode(PersistenceMode.InnerProperty)]. Esto significa que los objetos ITemplate que devuelven se compilan y almacenan en el control de representación de campos en forma de etiquetas anidadas. El uso de plantillas compiladas previamente reporta varias ventajas; por ejemplo, se pueden agregar a una página en un diseñador visual, como SharePoint Designer o Visual Studio, mediante el procedimiento de arrastrar y colocar desde el cuadro de herramientas del diseñador. Sin embargo, también presenta desventajas. Para obtener más información acerca de los controles de usuario web y los controles web personalizados, vea Web User Controls and Web Custom Controls y PersistenceModeAttribute.

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

Procedimiento para crear una clase de valores de campo personalizados

Procedimiento para crear una definición de tipo de campo personalizado

Representación de propiedades de tipo de campo personalizado

Controles del editor para propiedades de tipo de campo

Procedimiento para crear un control de representación de campos

Procedimiento para crear un tipo de campo personalizado