[ Blog ]
[ abuabalras ]
[ Wiki ]
[ Slideshare ]
[ Twitter ]

 

Bloggers recientes

Cesar Capillas Mensajes: 94
Estrellas: 7
Fecha: 3/04/12
Patricia Yagüe Mensajes: 2
Estrellas: 0
Fecha: 2/04/12
Irune Prado Mensajes: 4
Estrellas: 0
Fecha: 27/03/12

noBlogo - El blog de zylk.net

«Atrás

Desarrollando aplicaciones J2EE sobre Alfresco II - pequeños consejos

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'

 SELECT eu:EstadoArchivo FROM eu:registro WHERE eu:EstadoArchivo='Sí 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.

Comentarios
URL de Trackback:

Respuestas anidadas Autor Fecha
[...] Además de las particularidades sorteadas... Anónimo 13/01/12 8:36

[...] Además de las particularidades sorteadas durante el desarrollo bajo Alfresco Community 3.4d, un curioso problema con el que nos encontramos fue el uso del tipo CMIS 'd:datetime'. [...] Leer más

Publicado el día 13/01/12 8:36.

Arriba