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