lunes, 23 de abril de 2012

Creando un "custom content type"

Antes de comenzr se me ocurre hacer una pequeña reflexión que se me pasó por la cabeza anoche en la cama repasando que había conseguidpo y que quería hacer hoy con la plataforma: Cuando eres capaz de repasar de memoria el directorio de archivos de Alfresco, es que ¡te estás metiendo hasta el fondo!

En fin, después de ese breve comentario paso a comentaros en que he estado liado hasta ahora, y que aunque se encuentra descrito en los maravillosos foros de Alfresco, blogs de otr@s cracks del panorama, pués yo espero darle una pequeña aportación y quizás tu que estás aprendiendo te sirva.

¿Como declaro metadatos adicionales en Alfresco?
Imaginemonos que necesitamos la fecha de creación de un determinado artículo, pero nosotros al subirlo a nuestro repositorio lo único que tendremos es la fecha en que se subio al mismo. Pues bien, a mi hasta el día de hoy no se me ha ocurrido mejor manera que declarar el campo fecha de creación.

Hoy en nuestra cocina necesitamos irnos a tomcat\shared\classes\alfresco\extension y nos creamos un fichero al que llamaremos prensaModel.xml y web-client-config-custom.xml. Muy probablemente nos encontremos este último con la extensión .sample, pues nos hacemos una nueva copia y se la quitamos.

¿Qué perseguimos realmente?
  • Cuando subamos un fichero podamos elegir de que tipo es: Articulo de prensa, Fotografía, Maqueta,... lo que nosotros definamos.
  • Poder introducir los metadatos que queramos, por ejemplo la fecha de creación del fichero, que supondremos que es un artículo de prensa.
  • Permitir hacer búsquedas por este tipo de ficheros.
Fichero prensaModel.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- Es importante el como se llame el modelo que estamos definiendo. Cuidado con las mayúsculas y las minúsculas -->
<model name="iabook:prensa" xmlns="http://www.alfresco.org/model/dictionary/1.0">
<!-- Son descriptores a nuestra elección -->
<description>Articulos de prensa</description>
<author>Juan Palomo</author>
<version>1.0</version>
<!-- Hay que hacer estas importaciones -->
<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>
<!-- Siento deciros que esto aún no se porque lo tengo puesto... pero con ello me ha funcionado -->
<namespace uri="http://www.infoaxon.com/book/models/catalogue/1.0" prefix="iabook"/>
</namespaces>
<types>
<!-- El nombre que tendrá el aspecto -->
<type name="iabook:prensa">
<title>Articulo de prensa</title>
<parent>cm:content</parent>
<properties>
<!-- un campo de texto adicional que creamos -->
<property name="iabook:sku">
<title>Articulo SKU</title>
<type>d:text</type>
<mandatory>true</mandatory>
</property>  


<!-- Aquí vamos a introducir el campo fecha --> 
<property name="iabook:fecha">
<title>Fecha de publicacion de la noticia</title>
<type>d:date</type>
<mandatory>true</mandatory>
</property>

</properties>




<!-- Es necesario para la definición -->
<mandatory-aspects>
<aspect>iabook:relacArticulos</aspect>
</mandatory-aspects>

</type>
</types>

<aspects>
<aspect name="iabook:relacArticulos">
<title>Relacion de articulos</title>
<associations>
<association name="iabook:relacArticulosList">
<title>Lista de Articulos relacionados</title>
<source>
<mandatory>false</mandatory>
<many>true</many>
</source>
<target>
<class>iabook:prensa</class>
<mandatory>false</mandatory>
<many>true</many>
</target>
</association>
</associations>
</aspect>
</aspects>

</model>

Fichero web-client-config-custom.xml

<alfresco-config>
<config evaluator="string-compare" condition="Content Wizards">
<content-types>
<type name="iabook:prensa"/>
</content-types>
</config>

<config evaluator="node-type" condition="iabook:prensa">
<property-sheet>
<show-property name="name" />
<show-property name="mimetype" display-label-id="content_type" component-generator="MimeTypeSelectorGenerator" />
<show-property name="encoding" display-label-id="encoding" ignore-if-missing="false" component-generator="CharsetSelectorGenerator" />
<show-property name="size" display-label-id="size" converter="org.alfresco.faces.ByteSizeConverter" show-in-edit-mode="false" />
<show-property name="title" display-label-id="title" ignore-if-missing="false" />
<show-property name="description" display-label-id="description" ignore-if-missing="false" component-generator="MultilingualTextAreaGenerator" />
<show-property name="iabook:sku" />
<show-property name="iabook:fecha" />
</property-sheet>
</config>

<config evaluator="aspect-name" condition="iabook:relacArticulos">
<property-sheet>
<show-association name="iabook:relacArticulosList" />
</property-sheet>
</config>

<config evaluator="string-compare" condition="Action Wizards">
      <aspects>
         <aspect name="iabook:relacArticulos"/>      </aspects>
   </config>
 
<!-- Hacemos que aparezca el campo SKU en la búsqueda avanzada -->                     
<config evaluator="string-compare" condition="Advanced Search">
<advanced-search>
<content-types>
<type name="iabook:prensa" />
</content-types>
<custom-properties>
<meta-data type="iabook:prensa" property="iabook:sku" />
</custom-properties>
</advanced-search>
</config>

</alfresco-config>

Se me olvidaba comentaros un importante detalle: hay que reiniciar el servicio de Alfresco ante cada cambio para que tengan efecto.

Siento no poner comentarios a todas las lineas, y me gustaría pero las prisas por seguir me pueden.

Solo comentar un detalle, espero que no se os escape que la idea será después mediante Javascript automatizar este proceso, nadie ha hablado de hacer esto a mano para 1000 documentos distintos!

Un saludo!

No hay comentarios:

Publicar un comentario