Recuperar documentos dentro de un espacio

cancel
Showing results for 
Search instead for 
Did you mean: 
mrey
Member II

Recuperar documentos dentro de un espacio

Hola de nuevo.

Vuelvo a pedir un poco de ayuda, a ver si se os ocurre algo.

Intento recoger los documentos dentro de un espacio para sacar sus metadatos y almacenarlos en un fichero de texto. Es un subespacio con nombre de un mes, dentro de otro espacio, de nombre de un año, dentro de otro espacio, de nombre "aprobadas", por ejemplo    "aprobadas" –> "A_2008" –> "Abril". Los espacios de nombre año y mes, se crean dinámicamente.

Para recuperar los datos hago una búsqueda

   List<DatosFactura> contenedor = new ArrayList<DatosFactura>();
      String lineafichero = new String();
      DatosFactura fact = null;
      NodeRef nodo = null;
      
      // Obtemos a referencia o espacio Mes de Diccionario de Datos

      String espaciomes = nodoEsp.getName();
      
      logger.info("path del nodo" + nodoEsp.getPath());
      logger.info("nombre del espacio mes "+espaciomes);
   
           String stringQuery = "+PATH:\""+ nodoEsp.getNodePath().toString()+"/*\"";
      logger.info("path string query "+stringQuery);
      StoreRef storeRef_aux = StoreRef.STORE_REF_WORKSPACE_SPACESSTORE;
      ResultSet results_aux = services.getSearchService()
         .query(storeRef_aux,
            SearchService.LANGUAGE_LUCENE,
            stringQuery);
      logger.info("resultados de la busqueda " + results_aux.getNodeRefs());
      
      
      List<NodeRef> documentos = results_aux.getNodeRefs();
      
      logger.info("Numero de documentos encontrados " + documentos.size());
      
      

      if (!documentos.isEmpty()) {
         logger.info("Numero de documentos encontrados"+documentos.size());

         Iterator<NodeRef> iter = documentos.iterator();
         logger.info("iterador "+documentos.iterator());
         while (iter.hasNext()) {
            Node documento = new Node(iter.next());
            logger.info("nodo "+documento.getName());   
            logger.info("fecha "+documento.getProperties().get(FacturaModel.Alf_Fecha).toString());
            
            fact = new DatosFactura(
                  (Date)(documento.getProperties().get(FacturaModel.Alf_Fecha)),
                  documento.getProperties().get(FacturaModel.Alf_CIF).toString(),
                  documento.getProperties().get(FacturaModel.Alf_NumFactura).toString(),
                  documento.getProperties().get(FacturaModel.Alf_Base).toString(),
                  documento.getProperties().get(FacturaModel.Alf_IVA).toString(),
                  documento.getProperties().get(FacturaModel.Alf_Total).toString());
            contenedor.add(fact);
            logger.info("contenedor "+contenedor);
         }

      }


Pero da un error de "null" en los metadatos. Miro el log y llego a la conclusión de que la búsqueda se para en el workspace



10:10:05,312 INFO  [org.alfresco.sample.Cierre_Mes_Dialog] Entra a evaluar el espacio
10:10:05,312 INFO  [org.alfresco.sample.Cierre_Mes_Dialog] path de revisadas +PATH:"/app:company_home/cm:Entrada_Facturas/cm:Revision_Factura/cm:Revisar/*"+TYPE:"{http://www.alfresco.org/model/content/1.0}content"
10:10:05,343 INFO  [org.alfresco.sample.Cierre_Mes_Dialog] el resultset []
10:10:05,343 INFO  [org.alfresco.sample.Cierre_Mes_Dialog] Node Type: {http://www.alfresco.org/model/content/1.0}folder
Node Properties: {{http://www.alfresco.org/model/content/1.0}name=Agosto, {http://www.alfresco.org/model/content/1.0}creator=admin, {http://www.alfresco.org/model/content/1.0}modified=Thu Sep 10 16:27:26 CEST 2009, {http://www.alfresco.org/model/application/1.0}icon=space-icon-default, {FacturaModel.model}Abierto=true, {http://www.alfresco.org/model/system/1.0}store-protocol=workspace, {http://www.alfresco.org/model/content/1.0}created=Thu Sep 10 16:27:06 CEST 2009, {http://www.alfresco.org/model/system/1.0}store-identifier=SpacesStore, {http://www.alfresco.org/model/content/1.0}title=, {http://www.alfresco.org/model/system/1.0}node-dbid=1074, {http://www.alfresco.org/model/system/1.0}node-uuid=74c0d378-517a-4ee0-b05d-b362abd05b40, {http://www.alfresco.org/model/content/1.0}modifier=admin, {http://www.alfresco.org/model/content/1.0}description=}
Node Aspects: [{http://www.alfresco.org/model/application/1.0}uifacets, {http://www.alfresco.org/model/content/1.0}auditable, {http://www.alfresco.org/model/system/1.0}referenceable, {FacturaModel.model}EspacioAbierto]
10:10:05,359 INFO  [org.alfresco.sample.Cierre_Mes_Dialog] propieadedes del nodeEsp{{http://www.alfresco.org/model/content/1.0}name=Agosto, {http://www.alfresco.org/model/content/1.0}creator=admin, {http://www.alfresco.org/model/content/1.0}modified=Thu Sep 10 16:27:26 CEST 2009, {http://www.alfresco.org/model/application/1.0}icon=space-icon-default, {FacturaModel.model}Abierto=true, {http://www.alfresco.org/model/system/1.0}store-protocol=workspace, {http://www.alfresco.org/model/content/1.0}created=Thu Sep 10 16:27:06 CEST 2009, {http://www.alfresco.org/model/system/1.0}store-identifier=SpacesStore, {http://www.alfresco.org/model/content/1.0}title=, {http://www.alfresco.org/model/system/1.0}node-dbid=1074, {http://www.alfresco.org/model/system/1.0}node-uuid=74c0d378-517a-4ee0-b05d-b362abd05b40, {http://www.alfresco.org/model/content/1.0}modifier=admin, {http://www.alfresco.org/model/content/1.0}description=}
10:10:05,359 INFO  [org.alfresco.sample.Cierre_Mes_Dialog] Estado del mestrue
10:10:06,859 INFO  [org.alfresco.sample.Cierre_Mes_Dialog] Entra a evaluar el espacio
10:10:06,859 INFO  [org.alfresco.sample.Cierre_Mes_Dialog] path de revisadas +PATH:"/app:company_home/cm:Entrada_Facturas/cm:Revision_Factura/cm:Revisar/*"+TYPE:"{http://www.alfresco.org/model/content/1.0}content"
10:10:06,890 INFO  [org.alfresco.sample.Cierre_Mes_Dialog] el resultset []
10:10:06,890 INFO  [org.alfresco.sample.Cierre_Mes_Dialog] Node Type: {http://www.alfresco.org/model/content/1.0}folder
Node Properties: {{http://www.alfresco.org/model/content/1.0}name=Agosto, {http://www.alfresco.org/model/content/1.0}creator=admin, {http://www.alfresco.org/model/content/1.0}modified=Thu Sep 10 16:27:26 CEST 2009, {http://www.alfresco.org/model/application/1.0}icon=space-icon-default, {FacturaModel.model}Abierto=true, {http://www.alfresco.org/model/system/1.0}store-protocol=workspace, {http://www.alfresco.org/model/content/1.0}created=Thu Sep 10 16:27:06 CEST 2009, {http://www.alfresco.org/model/system/1.0}store-identifier=SpacesStore, {http://www.alfresco.org/model/content/1.0}title=, {http://www.alfresco.org/model/system/1.0}node-dbid=1074, {http://www.alfresco.org/model/system/1.0}node-uuid=74c0d378-517a-4ee0-b05d-b362abd05b40, {http://www.alfresco.org/model/content/1.0}modifier=admin, {http://www.alfresco.org/model/content/1.0}description=}
Node Aspects: [{http://www.alfresco.org/model/application/1.0}uifacets, {http://www.alfresco.org/model/content/1.0}auditable, {http://www.alfresco.org/model/system/1.0}referenceable, {FacturaModel.model}EspacioAbierto]
10:10:06,890 INFO  [org.alfresco.sample.Cierre_Mes_Dialog] propieadedes del nodeEsp{{http://www.alfresco.org/model/content/1.0}name=Agosto, {http://www.alfresco.org/model/content/1.0}creator=admin, {http://www.alfresco.org/model/content/1.0}modified=Thu Sep 10 16:27:26 CEST 2009, {http://www.alfresco.org/model/application/1.0}icon=space-icon-default, {FacturaModel.model}Abierto=true, {http://www.alfresco.org/model/system/1.0}store-protocol=workspace, {http://www.alfresco.org/model/content/1.0}created=Thu Sep 10 16:27:06 CEST 2009, {http://www.alfresco.org/model/system/1.0}store-identifier=SpacesStore, {http://www.alfresco.org/model/content/1.0}title=, {http://www.alfresco.org/model/system/1.0}node-dbid=1074, {http://www.alfresco.org/model/system/1.0}node-uuid=74c0d378-517a-4ee0-b05d-b362abd05b40, {http://www.alfresco.org/model/content/1.0}modifier=admin, {http://www.alfresco.org/model/content/1.0}description=}
10:10:06,890 INFO  [org.alfresco.sample.Cierre_Mes_Dialog] Estado del mestrue
10:10:06,890 INFO  [org.alfresco.sample.Cierre_Mes_Dialog] Entra en producir fichero
10:10:06,890 INFO  [org.alfresco.sample.Cierre_Mes_Dialog] path del nodo/{http://www.alfresco.org/model/application/1.0}company_home/{http://www.alfresco.org/model/content/1....
10:10:06,890 INFO  [org.alfresco.sample.Cierre_Mes_Dialog] path string query +PATH:"/{http://www.alfresco.org/model/application/1.0}company_home/{http://www.alfresco.org/model/content/1...."
10:10:06,890 INFO  [org.alfresco.sample.Cierre_Mes_Dialog] resultados de la busqueda org.alfresco.repo.security.permissions.impl.acegi.FilteringResultSet@8d1c76
10:10:06,890 INFO  [org.alfresco.sample.Cierre_Mes_Dialog] Numero de documentos encontrados1
10:10:06,890 INFO  [org.alfresco.sample.Cierre_Mes_Dialog] Numero de documentos encontrados1
10:10:06,890 INFO  [org.alfresco.sample.Cierre_Mes_Dialog] iterador java.util.AbstractList$Itr@47b87f
10:10:06,906 INFO  [org.alfresco.sample.Cierre_Mes_Dialog] nodo f952affe-8146-409e-a56f-e52daf4ef4cf
10:10:06,906 ERROR [org.alfresco.web.ui.common.Utils] Unable to delete File due to system error: null
java.lang.NullPointerException



Mirando el node browser este nombre de nodo pertenece al workspace://SpacesStore
nodo f952affe-8146-409e-a56f-e52daf4ef4cf


Alguna idea de porque hace esto?

Búsquedas similares me funcionaron en otras partes del código. Pensando, creo que puede ser porque los espacios se crean de manera dinámica, pero aun soy muy novato.

Muchas gracias y un saludo!!!!!
4 Replies
venzia
Senior Member

Re: Recuperar documentos dentro de un espacio

Puede ser que la fecha de factura sea nula?.
Lo comento porque la ultima linea que se ejecuta es :        
logger.info("nodo "+documento.getName());   
segun sale en el log :
10:10:06,906 INFO [org.alfresco.sample.Cierre_Mes_Dialog] nodo f952affe-8146-409e-a56f-e52daf4ef4cf

Por lo que veo que casca en :
logger.info("fecha "+documento.getProperties().get(FacturaModel.Alf_Fecha).toString());

Para los campos que no sean obligatorios deberías meterle una comprobación de que no sean null.
Saludos,
mrey
Member II

Re: Recuperar documentos dentro de un espacio

Gracias por responder.

La fecha no es null, un paso previo hace la comprobación de que ninguno de los metadatos sea null. Yo creo que el problema es que no encuentra los documentos qu están dentro del espacio, la búsqueda guarda el espacio "workspace://SpacesStore", ya que imprimo en el log
logger.info("nodo "+documento.getName());

y me devuelve la línea
nodo f952affe-8146-409e-a56f-e52daf4ef4cf
que buscando en el node browser, corresponde con el espacio "workspace://SpacesStore", este espacio no tiene estos metadatos obligatorios, y por eso da null. Otra cosa es que, por muchos documentos que tenga guardados en ese espacio, la búsqueda solo encuentra uno. Probé varias maneras, y no creo que el fallo esté en el path que le paso. Estoy un poco perdido. Muchas gracias por tu respuesta y por tu tiempo.

Un saludo
mrey
Member II

Re: Recuperar documentos dentro de un espacio

Buenos dias a todos.

Sigo investigando, y llego a una nueva conclusión. Por alguna razón, al hacer la búsqueda, no le gusta que le de el path de manera dinámica, quiere que el path sea fijo, es decir, para un espacio ./Aprobadas/A_2007/Julio, el path para el stringQuery no lo quiere asi :
String stringQuery = "+PATH:\""+ nodoEsp.getNodePath().toString()+"/*\"";

Tengo que pasarselo asi:

 "+PATH:\"/app:company_home/cm:Entrada_Facturas/cm:Revision_Factura/cm:Aprobadas/cm:A_2007/cm:Julio";

La búsqueda es la siguiente:

 logger.info("path del nodo" + nodoEsp.getPath());
      logger.info("nombre del espacio mes "+espaciomes);
  
           String stringQuery = "+PATH:\""+ nodoEsp.getNodePath().toString()+"/*\"";
      logger.info("path string query "+stringQuery);
      StoreRef storeRef_aux = StoreRef.STORE_REF_WORKSPACE_SPACESSTORE;
      ResultSet results_aux = services.getSearchService()
         .query(storeRef_aux,
            SearchService.LANGUAGE_LUCENE,
            stringQuery);

Y en el log el path que imprimo lo muestra correctamente

path string query +PATH:"/{http://www.alfresco.org/model/application/1.0}company_home/{http://www.alfresco.org/model/content/1...."

¿Quizás deba hacer la búsqueda con otro tipo de lenguaje? Miré en la wiki lo que pude(pero mi Inglés da para ver Lost subtitulado y poco más)

Muchas gracias y un saludo
venzia
Senior Member

Re: Recuperar documentos dentro de un espacio

Tienes la opción de utilizar el lenguaje de busqueda xpath http://wiki.alfresco.com/wiki/Search_Documentation
El formato de busqueda es diferente al de lucene .. pero en tu caso puede ser muy util por su versatilidad.
Espero que te sirva.
Saludos,