Creación, modificación y consulta de un tipo documental para Alfresco ShareCreate, update and search of a custom content type for Alfresco Share

En este artículo mostraremos cómo debemos hacer para crear un nuevo tipo documental en Alfresco de modo que pueda ser visualizado, modificado y localizado desde la interfaz de Alfresco Share.

Creación de un tipo documental

Crearemos un nuevo modelo de Alfresco con un único tipo documental “contrato” que tendrá dos propiedades, “Parte contratada” y “DNI”, ambas de tipo texto. Para la creación de este nuevo modelo debemos crear los siguientes ficheros dentro del directorio extension ($ALF_HOME/tomcat/webapps/alfresco/WEB-INF/classes/alfresco/extension) de nuestra instalación de Alfresco.

extension/module/com.queres.alfresco.myproject-extension/model/contratoModel.xml
extension/module/com.queres.alfresco.myproject-extension/model/model-context.xml
extension/com.queres.alfresco.myproject-extension-module-context.xml

Empezamos por el primero de ellos, contratoModel.xml. En este fichero vamos a definir el nuevo tipo documental “contrato” con las dos propiedades que hemos comentado al principio. El fichero deberá contener lo siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<model name="cont:contratoModel" 
       xmlns="http://www.alfresco.org/model/dictionary/1.0" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <description>Contratos Model</description>
    <author>Queres Tecnologias</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>

    <!-- Definición del namespace del modelo -->
    <namespaces>
        <namespace uri="cont.model" prefix="cont"/>
    </namespaces>

    <types>
	<!-- Definición del nuevo tipo documental -->
        <type name="cont:contrato">
            <title>Contrato</title>
            <parent>cm:content</parent>

            <!-- Definición de las propiedades -->
            <properties>
                <property name="cont:parteContratada">
                    <title>Parte contratada</title>
                    <type>d:text</type>
                    <mandatory>false</mandatory>
                </property>
                <property name="cont:dni">
                    <title>DNI</title>
                    <type>d:text</type>
                    <mandatory>false</mandatory>
                </property>
            </properties>
        </type>
    </types>
</model>

Se puede ver que hemos definido un único tipo documental cont:contrato que contiene dos propiedades (no obligatorias) de tipo texto, cont:parteContratada y cont:dni.

Una vez creado el modelo debemos hacer que Alfresco lo cargue en el próximo reinicio. Para ello habrá que referenciarlo en el fichero model-context.xml.

El contenido del fichero será el siguiente:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>

<beans>
    <bean id="com.queres.alfresco.myproject-extension.dictionaryBootstrap" parent="dictionaryModelBootstrap" depends-on="dictionaryBootstrap">
        <property name="models">
	    <!-- Referencia a los modelos que hayamos creado-->
            <list>		
                <value>alfresco/extension/module/com.queres.alfresco.myproject-extension/model/contratoModel.xml</value>
            </list>
        </property>
    </bean>
</beans>

Una vez llegado a este punto habremos creado un nuevo modelo con un tipo documental llamado “contrato”. Para poder ver este nuevo tipo documental en la interfaz de Alfresco será necesario crear dos ficheros más:

extension/module/com.queres.alfresco.myproject-extension/web-client/web-client-config-myprojectmodels.xml  
extension/module/com.queres.alfresco.myproject-extension/web-client/web-client-custom-context.xml

En el primero de los ficheros, el web-client-config-myprojectmodels.xml, haremos que el nuevo tipo documental sea visible desde el diálogo de subida de “Nuevos contenidos” y desde el de “Especialización de documentos”. El fichero contendrá la siguiente configuración:

<?xml version="1.0" encoding="UTF-8"?>
<alfresco-config>
    <config evaluator="string-compare" condition="Content Wizards">
        <content-types>
            <type name="cont:contrato"/>
        </content-types>
    </config>

    <config evaluator="string-compare" condition="Action Wizards">
        <subtypes>
            <type name="cont:contrato"/>
        </subtypes>
        <specialise-types>
            <type name="cont:contrato"/>
        </specialise-types>	
    </config>
</alfresco-config>

Una vez finalizado, debemos referenciarlo desde el web-client-custom-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>
     <bean id="com.queres.alfresco.myproject-extension-webclient-configBootstrap" class="org.alfresco.web.config.WebClientConfigBootstrap" init-method="init">
      <property name="configs">
            <list>
                <value>classpath:alfresco/extension/module/com.queres.alfresco.myproject-extension/web-client/web-client-config-myprojectmodels.xml</value>
            </list>
        </property>
    </bean>
</beans>

Para que Alfresco pueda cargar tanto el nuevo modelo como los cambios en la interfaz debemos referenciar tanto el model-context.xml como el web-client-custom-context.xml desde el fichero com.queres.alfresco.myproject-extension-module-context.xml dejándolo de la siguiente forma:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>

<!-- references to XML configurations -->
<beans>
    <import resource="classpath:alfresco/extension/module/com.queres.alfresco.myproject-extension/model/model-context.xml"/>
    <import resource="classpath:alfresco/extension/module/com.queres.alfresco.myproject-extension/web-client/web-client-custom-context.xml"/>
</beans>

Un vez llegado a este punto podremos reiniciar Alfresco para que se apliquen los cambios. Podremos ver que al subir un nuevo fichero desde el web client se nos permitirá tipificarlo como un “Contrato”.

Especificación Contrato

Configuración de Alfreso Share

Una vez hemos definido y desplegado el tipo documental “contrato” en el repositorio de Alfresco y hemos comprobado que se puede hacer uso de él desde el web client, el siguiente punto del proceso de creación del tipo documental consiste en hacer accesible este modelo de contenido desde Alfresco Share para que podamos crear, modificar y buscar documentos de tipo “contrato” a través de la novedosa y cómoda interfaz que nos ofrece Share.

Lo primero que debemos hacer es parar Alfresco y localizar el archivo share-config-custom.xml.sample que se encuentra en $ALF_HOME/tomcat/shared/classes/alfresco/web-extension/share-config-custom.xml.sample y eliminar la extensión .sample.

Posteriormente, debemos modificar el fichero share-config-custom.xml para que Share reconozca el tipo documental “contrato” y nos permita realizar las operaciones comentadas anteriormente sobre los documentos que creemos de este tipo.

Para lograr nuestro fin debemos seguir los puntos que se detallan a continuación:

1. En la etiqueta type name=”cm:content” añadiremos nuestro modelo de contenido como un subtipo de cm:content de esta manera:

<types>
   <type name="cm:content">
     <subtype name="cont:contrato"/>
   </type>

   <type name="cm:folder">
   </type>
</types>

Con esto conseguimos que Share reconozca el modelo de contenido cont:contrato.

2. Para que podamos visualizar y editar los metadatos de los documentos que creemos como “contrato” debemos incluir el siguiente ítem config:

<config evaluator="node-type" condition="cont:contrato">
   <forms>
     <form>
        <field-visibility>
           <show id="cont:parteContratada" />
           <show id="cont:dni" />
        </field-visibility>
     </form>
   </forms>
</config>

Como se puede observar, hacemos visibles las propiedades del modelo “contrato” lo que permite a su vez la edición de las mismas.

3. El último paso de la configuración que nos queda es habilitar la posibilidad de buscar documentos tipificados como “contrato” desde Share. Esta parte requiere dos modificaciones, una para indicar a Share que se van a poder buscar documentos de este tipo y otra para que desde la interfaz de Share en la pantalla de la búsqueda avanzada nos aparezca en el desplegable de seleccionar contenido a “Buscar” nuestro modelo.

3.1 Primeramente, debemos especificar a Share que debe buscar documentos de tipo “contrato” si el usuario se lo pide. Para ello incluiremos una nueva etiqueta config como la siguiente:

<config evaluator="model-type" condition="cont:contrato">
   <forms>
     <form id="search">
        <field-visibility>
           <show id="cont:parteContratada" />
           <show id="cont:dni" />
         </field-visibility>
     </form>
   </forms>
</config>

En el tag form id=”search” le indicamos porque campos puede buscar el usuario documentos de tipo “contrato”, siempre y cuando estén definidos en el modelo que hemos creado.

3.2 Como segundo y último paso de este tercer punto, añadiremos la etiqueta “Contratos” para que aparezca en el desplegable “Buscar” de la interfaz de búsqueda avanzada de Share. Lo que debemos hacer es añadir el nombre que queramos que se muestre en el ítem config evaluator=”string-compare” condition=”AdvancedSearch”:

<config evaluator="string-compare" condition="AdvancedSearch">
   <advanced-search>
      <!-- Forms for the advanced search type list -->
      <forms>
         <!-- Añadimos el contrato en la búsqueda avanzada -->
         <form label="Contratos" description="Búsqueda de Contratos">cont:contrato</form>
      </forms>
   </advanced-search>
</config>

4. Para finalizar, guardaremos los cambios realizados sobre el fichero share-config-custom.xml y arrancaremos nuevamente Alfresco.

Como probar en Share que el tipo de contenido ha sido creado

Finalizada la creación del tipo de contenido “contrato”, el siguiente paso lógico es verificar que podemos hacer uso de nuestro modelo de contenido desde Alfresco Share.

Para probar que todo el proceso de creación anterior se ha realizado correctamente se pueden seguir los puntos que se indican a continuación:

  • Acceder a Alfresco Share y crear un nuevo site llamado “Contratos” y dentro de este en la “Biblioteca de Documentos” un directorio llamado “Contratos 2012”.
  • Acceder al web client de Alfresco para crear una regla de contenido que especifique todos los documentos entrantes en el site “Contratos” como “contrato”. Debemos especificar que la regla de contenido la hereden todos sus hijos (todos los subdirectorios que contenga).
  • Desde Alfresco Share subiremos un documento en el site “Contratos” en el directorio “Contratos 2012”.
  • Cuando se cargue el documento, para comprobar que este se ha tipificado correctamente como tipo “contrato” ir a “Editar Propiedades” y os debería aparecer un dialogo como el siguiente:

    Editar propiedades

    Añadir valores en ambos campos y pulsar en Guardar.

  • Posteriormente, podemos pulsar sobre el nombre o imagen del documento para acceder a la pantalla de “Detalles del Documento” y ver las propiedades de “contrato” que tiene, las que le acabamos de asignar en el paso anterior:

    Ver propiedades

  • Por último, debemos verificar la búsqueda avanzada. Para ello iremos a “Búsqueda Avanzada”, en la lista “Buscar” seleccionaremos “Contratos” y completaremos los campos de búsqueda que consideremos oportunos para localizar el documento que hemos subido en el tercer punto:

    Búsqueda avanzada

    Si la búsqueda fue satisfactoria nos devolverá el documento de tipo “contrato” esperado.

Siguiendo todos los pasos anteriores ya podéis crear tantos tipos documentales para Alfresco Share como necesitéis.

Esperamos que os resulte útil.

¡Hasta pronto!