Open IT Experts for Enterprise

Desarrollando aplicaciones J2EE sobre Alfresco II – pequeños consejos

Irune Prado
Irune Prado

Siguiendo el post de básicos
para el desarrollo de aplicaciones J2EE sobre Alfresco, os
dejamos una lista de pequeños consejos para el desarrollo con
Alfresco, y en concreto para búsquedas con OpenCMIS.

Búsquedas con OpenCMIS

Para realizar las búsquedas, podemos seguir el consejo que os dimos
en el post de básicos de Alfresco y usar la utilidad QueryStatement
que nos ofrece la librería de OpenCMIS, o
podéis construirlas a mano.

  • Comparadores CMIS-SQL

    • Si se requiere el uso de
      comparaciones case-sensitive, hacer uso del predicado
      CONTAINS() de CMIS-SQL para establecer cláusulas Full
      Text Search, en vez de el comparador básico provisto
      por CMIS-SQL =’ ‘. Ejemplo:

      								SELECT * FROM eu:registro as r join cm:titled as t on r.cmis:objectId=t.cmis:objectId 
      join cmis:folder as f on r.cmis:objectId = f.cmis:objectId 
      WHERE CONTAINS(t,'cm:title:'*convenio*'') 
      ORDER BY r.cmis:lastModificationDate DESC 
    • Para
      las búsquedas de campos marcados como constraints, el
      predicado ‘=’ de CMIS-SQL funciona como si utilizáramos el
      predicado LIKE. Es por eso que por ejemplo; buscando

      								SELECT eu:EstadoArchivo FROM eu:registro  WHERE eu:EstadoArchivo='Expedientar'

      Bajo el modelo

      								<property name="eu:EstadoArchivo">
      	<title>Estado Archivo</title>
      	<type>d:text</type>
      	<constraints>
      		<constraint ref="eu:listaEstadosArchivo" />
      	</constraints>
      </property>
      
      <constraint name="eu:listaEstadosArchivo" type="LIST">
      	<parameter name="allowedValues">
      		<list>
      			<value>Pendiente revisar</value>
      			<value>Expedientar</value>
      			<value>No expedientar</value>
      		</list>
      	</parameter>
      </constraint

Se encuentran tanto los valores de ‘Expedientar’ como ‘No expedientar’.

En nuestro caso arreglamos el problema cambiando el valor de
‘Expedientar’ por ‘Si expedientar’

  • Uso del predicado IN_TREE

    Para
    agilizar las búsquedas, el uso del predicado IN_TREE resulta de
    gran ayuda, ya que nos asegura buscar objetos dentro del árbol de
    un nodo determinado.  Ejemplo:

    						SELECT * FROM eu:registro as r 
    join cm:titled as t on r.cmis:objectId=t.cmis:objectId 
    join cmis:folder as f on r.cmis:objectId = f.cmis:objectId 
    WHERE IN_TREE(f, 'workspace://SpacesStore/8d18d03a-8fe6-4ede-bfcd-5f6435d78b9e') ORDER 
    BY r.cmis:lastModificationDate DESC
  •  

  •  

  •  

  • Métodos de paginación

    La interfaz ItemIterable
    que nos ofrece OpenCMIS nos da todo lo necesario para realizar
    una paginación en servidor, gracias al los métodos
    skipTo(posición) y getPage().

    Con esto la
    búsqueda paginada nos quedaría algo tal que

					public ItemIterable<QueryResult> doQuery(String query, int delta, int page) {		

log.trace("doQuery | delta: " + delta + " | page: " + page);
Session session = this.getSession(this.username);

OperationContext contexto = session.createOperationContext();

if (delta != -1){
  contexto.setMaxItemsPerPage(delta);
}
		
log.debug("doQuery | " + query);
ItemIterable<QueryResult> results = session.query(query, false, contexto);
log.trace("doQuery | nº resultados: " + results.getTotalNumItems());

if (page > 1){
  log.trace("skip to " + (page*delta-delta));
  results = results.skipTo(page*delta-delta);
}
  return results.getPage();
}

 

 

 

 

 

 

 

Otros consejos

  • Uso de caracteres especiales

    A la hora
    de crear ficheros / directorios en Alfresco, es conveniente
    recordar que existen ciertos caracteres que no son válidos. Sin
    embargo, es útil saber que no tenemos porqué deshacernos del
    nombre original de lo que queremos guardar (a pesar de que incluya
    alguno de estos caracteres), ya que podemos hacer uso del metadato
    ‘Title’, para insertar estos caracteres, y luego recuperarlos
    desde nuestra aplicación.

Más entradas

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *