Tipos Personalizados
1. Crear modelo de contenido personalizado
1.1. ¿Qué es un tipo de contenido o de Aspecto?
Los tipos presentan un gran parecido a las clases en el mundo de orientación a objetos. Pueden usarse para representar objetos de nuestro modelo de negocio: Tienen propiedades y pueden heredar de un tipo base. Contenido (cm:content), Persona (cm:person) o Carpeta (cm:folder) son tres tipos importantes definidos por Alfresco. Los tipos personalizados están limitados únicamente por nuestra imaginación y requerimientos de negocio. Factura, Receta médica o Película serían ejemplos de tipos personalizados. La unica diferencia con el tipo de aspecto y el tipo de contenido es que el tipo de aspecto nos permite utilizar las reglas y los wizards.
1.2. Pasos a seguir para crear un contenido
Los pasos a realizar cada vez que queramos incorporar un nuevo tipo de contenido en Alfresco son:
1.2.1. Definición del tipo de contenido personalizado.
1.2.2. Extender el modelo de contenido con el nuevo tipo de contenido.
1.2.3. Configurar el cliente Web para que sea capaz de reconocer el nuevo tipo de contenido.
1.2.4. Reiniciar Alfresco para que los cambios sean efectivos.
1.2.5. Crear contenido basado en el nuevo tipo de contenido.
A continuación explicaremos paso a paso cada uno de los puntos para llegar a tener disponible nuestro nuevo tipo de contenido. Para ello, nos “crearemos” la necesidad de disponer un nuevo tipo de contenido, llamado “prueba:regeasoc”, que iremos desarrollando en esta guía.
1.2.1 Definición del tipo de contenido personalizado
| Nombre | Tipo | Etiqueta |
| nregistro | text | Nº Registro |
| nombre | text | Nombre |
| nexpediente | text | Nº Expediente |
| Seccion | int | Sección |
| tipoImagen | text | Tipo de Imagen |
1.2.2 Extender el modelo de contenido con el nuevo tipo de contenido
Una vez definido nuestro tipo de contenido, lo siguiente es extender el modelo de contenido con una representación XML de nuestro tipo de contenido.
Estos XML tienen una estructura similar a esta:
Fichero: RegAsocModel.xml
<?xml version = “1.0“ encoding = “UTF-8“?>
<model name = “prueba:regasocmodel“ xmlns = “http://www.alfresco.org/model/dictionary/1.0“>
<description>Custom Model para Registro de Asociaciones</description>
<author>Pablo</author>
<version>1.0</version>
<imports>
<import uri = “http://www.alfresco.org/model/dictionary/1.0“ prefix=“d“/>
<import uri = “http://www.alfresco.org/model/content/1.0” prefix = “cm“/>
</imports>
<namespaces>
<namespace uri = “modelo.regasoc“ prefix = “prueba“/>
</namespaces>
<types>
<type name = “prueba:regasoc“>
<title>Registro de Asociaciones</title>
<parent>cm:content</parent>
<mandatory-aspects>
<aspect>prueba:aspectRegasoc</aspect>
</mandatory-aspects>
</type>
</types>
<aspects>
<!– Aspect para el tipo folderEspecialidad–>
<aspect name = “prueba:aspectRegasoc“>
<title>Titulo</title>
<properties>
<property name = “prueba:nregistro“>
<title>Nº Registro</title>
<type>d:text</type>
</property>
<property name = “prueba:nombre“>
<title>Nombre</title>
<type>d:text</type>
</property>
<property name = “prueba:nexpediente“>
<title>Nº Expediente</title>
<type>d:text</type>
</property>
<property name = “prueba:seccion“>
<title>Sección</title>
<type>d:int</type>
</property>
<property name = “prueba:tipoImagen“>
<title>Tipo de Imagen</title>
<type>d:text</type>
</property>
</properties>
</aspect>
</aspects>
</model>
Si nos fijamos, el tipo que hemos definido hereda del tipo cm:content (<parent>cm:content</parent>), es decir, contiene todas las propiedades y funcionalidad de un contenido, pero además contiene las propiedades que hemos especificado nosotros.
Este fichero lo llamaríamos como quisiéramos, por ejemplo RegAsocModel.xml, y lo guardaríamos en el directorio extensión:
En Tomcat …\shared\classes\alfresco\extension
En JBoss …\server\default\conf\alfresco\extension.
Hay que tener en cuenta que el XML que hemos creado para definir nuestro modelo de contenido, debe ir acompañado de un fichero de contexto que se encargue de incluir en la lista modelos el fichero que acabamos de crear.
Para ello, en el mismo directorio extensión debemos crear un fichero de contexto similar a este:
Fichero RegAsocModel-context.xml
<?xml version=’1.0′ encoding=’UTF-8′?>
<!DOCTYPE beans PUBLIC ‘-//SPRING//DTD BEAN//EN’ ‘http://www.springframework.org/dtd/spring-beans.dtd’>
<beans>
<!– Registro de nuevos modelos –>
<bean id = “extension.dictionaryBootstrap“ parent = “dictionaryModelBootstrap” depends-on = “dictionaryBootstrap“>
<property name = “models“>
<list>
<value>alfresco/extension/RegAsocModel.xml</value>
</list>
</property>
</bean>
</beans>
Como se observa, incluimos el modelo RegAsocModel.xml en la lista de modelos (models) para que se cargue en el diccionario de Alfresco al arrancar.
Este fichero es importante que termine en –context.xml ya que es la terminación que Alfresco reconoce para interpretar los ficheros de contexto.
1.2.3 Configurar el cliente Web
Ahora debemos asegurarnos que el cliente Web reconoce el nuevo tipo de contenido y visualiza las propiedades en la pantalla pertinente. Para ello, debemos ir al fichero web-client-config-custom.xml que se encuentra en el mismo directorio extensión.
Debemos incluir los siguientes fragmentos:
Si queremos que el nuevo tipo aparezca como opción de tipo de contenido en el wizard de reglas de contenido, deberemos incluir lo siguiente:
<config evaluator = “string-compare“ condition = “Action Wizards“>
<subtypes>
<type name = “prueba:regasoc“/>
</subtypes>
<aspects>
<aspect name = “prueba:aspectRegasoc“/>
</aspects>
<especialise-types>
<type name = “prueba:regasoc“/>
</especialise-types>
</config>
Esto hará que cuando queramos crear una regla de contenido cuya condición se base en el tipo de contenido del objeto que dispara la regla, nos aparezca nuestro tipo personalizado como una posible condición.
Si queremos tener la posibilidad de convertir los espacios existentes tendremos que añadir lo siguiente: <especialise-types> <type”>prueba:regasoc”/> </especialise-types>
Si queremos que nos aparezca el nuevo tipo de contenido en el asistente de creación de espacio, debemos incluir las siguientes líneas en web-client-config-custom.xml:
<config evaluator = “string-compare“ condition = “Content Wizards“>
<content-types>
<type name = “prueba:regasoc“ />
</content-types>
</config>
Para poder editar las propiedades que hemos definido tanto al tipo como al aspect:
Para el contenido se añade:
<config evaluator = “node-type“ condition = “prueba:regasoc“>
<property-sheet>
<show-property name = “prueba:nregistro“/>
<show-property name = “prueba:nombre“/>
<show-property name = “prueba:nexpediente“/>
<show-property name = “prueba:seccion“/>
<show-property name = “prueba:tipoImagen“/>
</property-sheet>
</config>
Para el aspect se añade:
<config evaluator = “aspect-name“ condition = “prueba:aspectRegasoc“>
<property-sheet>
<show-property name= “prueba:nregistro“/>
<show-property name= “prueba:nombre“/>
<show-property name= “prueba:nexpediente“/>
<show-property name= “prueba:seccion“/>
<show-property name= “prueba:tipoImagen“/>
</property-sheet>
</config>
Por ultimo si queremos permitir que en las búsquedas avanzadas se puedan tener en cuenta nuestras nuevas propiedades, debemos añadir:
<config evaluator= “string-compare” condition = “Advanced Search“>
<advanced-search>
<content-types>
<type name= “prueba:regasoc“ />
</content-types>
<custom-properties>
<meta-data aspect= “prueba:aspectRegasoc“ property= “prueba:nregistro“ />
<meta-data aspect= “prueba:aspectRegasoc“ property= “prueba:nombre“ />
<meta-data aspect= “prueba:aspectRegasoc“ property= “prueba:nexpediente“ />
<meta-data aspect= “prueba:aspectRegasoc“ property= “prueba:seccion“ />
<meta-data aspect= “prueba:aspectRegasoc“ property= “prueba:tipoImagen“ />
</custom-properties>
</advanced-search>
</config>
Todas las líneas de configuración del cliente Web deben estar colocadas antes de la última línea </alfresco-config>
1.2.4 Reiniciar Alfresco.
1.2.5 Crear o Añadir un contenido basado en el nuevo tipo de contenido.
Muchas gracias por el código, que es muy útil. Sin embargo tengo una duda enorme, he realizado todos los pasos que muestras en la página, sin embargo cuando voy a adicionar un contenido nuevo en Alfresco no me aparecen los campos que adiciono en el formulario.
Buenas… te genera algun error el log? porque algunas comillas no estaban muy bien… Para ver los campos desde los formularios el fichero importante es el web-config-custom.xml creo que se llama asi ahora mismo te lo digo de memoria… si no te funciona puedes pegar el codigo y lo reviso… Estamos preparando un portal de comunidad Liferay-Alfresco con tutoriales y codigo….