Usar el SearchContext para extraer los resultados?

cancel
Showing results for 
Search instead for 
Did you mean: 
fstnboy
Active Member

Usar el SearchContext para extraer los resultados?

Buenas,

quisiera saber si se puede usar el SearchContext para extraer los resultados de una búsqueda? Si es así como se podría usar?

Gracias!
11 Replies
fstnboy
Active Member

Re: Usar el SearchContext para extraer los resultados?

me las he arreglado para hacer otra búsqueda a partir del SearchContext…

lo ideal sería no tener que hacer otra búsqueda. Hay alguna forma de hacerlo? ya sea con el NavigationBean o algún otro Bean?
ajv
Member II

Re: Usar el SearchContext para extraer los resultados?

Hola fstnboy,

No entiendo muy bien la problemática: ¿Lo que te pasa es que lanzas una query y quieres recorrer varias veces el resultado??
Si es así, creo que lo puedes hacer fácil con el SearchService. Ofrece diversos métodos "query" para lanzar queries de diferentes formas. Todos ellos te devuelven un ResultSet, objeto que puedes recorrer las veces que quieras.

Por ejemplo:
ResultSet resultSet = this.searchService.query(
                    nodeRef.getStoreRef(),
                    SearchService.LANGUAGE_LUCENE,
                    "lo q sea…");
           
            for (NodeRef resultado : resultSet.getNodeRefs())
            {
                        …
            }
Espero que te sirva.
Saludos!
fstnboy
Active Member

Re: Usar el SearchContext para extraer los resultados?

Creo que me he explicado mal….

Lanzo una query en la búsqueda avanzada… Lo que he hecho, ha sido añadirle al menú "Más acciones" una opción de "Guardar en Excel" que lo que hace es llamar a un Bean que me he creado para poder guardar la búsqueda en excel. La cosa es que que pienso que lo único que me queda del resultado de la búsqueda avanzada es el SearchContext.

Entonces, para guardar en excel la información (contenida en las propiedades de los tipos de los nodos) he de recorrerme los nodos resultantes de la búsqueda, lo que no sé es cómo recorrérmelos sin tener que realizar otra vez la búsqueda (searchService.query()), si no a partir de algún bean/loquesea que ya tenga los resultados.

jue… No sé si se entendió
ajv
Member II

Re: Usar el SearchContext para extraer los resultados?

Hola fstnboy,

La verdad que no lo tengo muy claro…pero en principio, si se hace un setSearchContext(busqueda) sobre el navigationBean te debería encapsular los resultados ya que cuando se clica sobre el botón de Buscar en la búsqueda avanzada se realiza lo siguiente:
this.navigator.setSearchContext(search);
return OUTCOME_BROWSE;
Después. el BrowseBean tiene el método de getNodes()…así que posiblemente con estas herramientas te baste sin tener que lanzar la búsqueda  Smiley Very Happy

saludos!
xian_5749
Member II

Re: Usar el SearchContext para extraer los resultados?

Buenas,

Una opción sería extender la clase org.alfresco.web.bean.BrowseBean, añadiendo un método para la acción de descarga a XLS (deberías utilizar ODS, que es free.. Smiley Wink.

Si quieres acceder a todos los nodos resultado de la búsqueda utilizarías getNodes() y si sólo te interesan los de tipo contenido (no las carpetas) utilizarías getNodes().

Esquemáticamente:

import org.alfresco.web.bean.*
public class MiBrowseBean extends BrowseBean{
   public ReportBrowseBean() {
       super();
   }

    public String obtenerXLS(ActionEvent event) throws Exception {
    …
    List<Node> results = this.getNodes();
    }



}

Una vez hecho esto tendrías que inyectar tu bean en lugar del original, basta con que lo definas en el archivo faces-config-custom.xml:

<faces-config>
  
   <!– Sobreescribimos el browse bean  con el que permite descargar XLS –>
   <managed-bean>
      <description>
         Mi bean
      </description>
       <managed-bean-name>BrowseBean</managed-bean-name>
      <managed-bean-class>com.queres.alfresco.web.bean.MiBrowseBean</managed-bean-class>
      … (continúa tú mismo)…


Y por último, y la parte más fea de todo  :wink: , retocar el jsp asociado (browse.jsp), añadiendo un actionlink que apunte a tu método de descarga de XLS:


<a:menu id="searchMenu" itemSpacing="4" label="#{msg.more_actions}" image="/images/icons/menu.gif" menuStyleClass="moreActionsMenu" style="white-space:nowrap">
  <a:booleanEvaluator value="#{NavigationBean.isGuest == false}" id="eval0">
    <a:actionLink value="#{msg.save_new_search}" image="/images/icons/save_search.gif" padding="4" action="#{AdvancedSearchBean.saveNewSearch}" id="link20_1" />
   
    <a:actionLink value="Descargar XLS" image="/images/filetypes/xls.gif" padding="4" actionListener="#{BrowseBean.obtenerXLS}" id="link20_1_1" />


La solución sería elegante si no fuese necesario este último paso de retocar el JSP, ya que nos obliga a estar atentos cuando actualizamos la versión de Alfresco. Lo ideal sería que alfresco proporcionase mediante configuración la posibilidad de inyectar acciones en estos menús, pero por ahora creo que no se puede.

Un saludo y suerte
Xian
fstnboy
Active Member

Re: Usar el SearchContext para extraer los resultados?

ummm bale! Esto me puede valer creo….

La parte de descarga en XLS ya la tengo hecha, lo que quería era extraer de alguna forma los resultados de la búsqueda, al darle al actionLink, sin tener que realizar otra vez la búsqueda.

En cuanto lo pruebe te lo digo!

PD: para el XLS lo que he utilizado ha sido POI
xian_5749
Member II

Re: Usar el SearchContext para extraer los resultados?

Por cierto, como estás extendiendo el BrowseBean puedes llamar al método de generación del XLS no sólo desde los resultados de la búsqueda, si no también desde la navegación por carpetas habitual. Basta con que incorpores el ActionLink en el sitio adecuado.
dacedos
Member II

Re: Usar el SearchContext para extraer los resultados?

Hola!

Podrias decirme como hiciste para poder guardar en fichero los resultados de una busqueda?

Es algo que me interesaria poder hacer.

Muchas gracias!
ditmgl
Member II

Re: Usar el SearchContext para extraer los resultados?

Yo en mi clase GuardarBusquedas (que extiende la clase BrowseBean) he guardado la query en un temporal, y cuando alguien pulsa el boton "Guardar a pdf" (que aparece en el menu de "more actions" tras modificar el jsp) llama a la funcion GuardarResultados.Consultar que lee la query del archivo temporal, obtiene los resultados y los va guardando en un pdf.

Pra hacer esto he hecho los mismos pasos que se comenta en los post anteriores:

1.- Extender BrowseBean.
2.- Hacer un boton modificando browse.jsp (yo "llamo" al nuevo customBrowse.jsp usando reglas de navegacion y asi no toco eloriginal). El boton en cuestion es algo como esto:

<a:actionLink value="#{msg.save_search_pdf}" image="/images/icons/pdf.gif" padding="4" action="#{GuardarBusquedas.Consultar}"

La funcion consultar es la que comienza el proceso de guardado.
Edito: he probado a llamarlo usando BrowseBean.Consultar. Pero sigue igual.

3.- Añadi en faces-config-custom.xml:
<managed-bean>
      <description>
         Mi bean
      </description>
       <managed-bean-name>BrowseBean</managed-bean-name>
      <managed-bean-class>com.queres.alfresco.web.bean.GuardarBusquedas</managed-bean-class>
      … (bla bla bla)…
4.- Lo pruebo……

javax.faces.FacesException: Error calling action method of component with id browse:link20_0
caused by:
javax.faces.el.EvaluationException: Exception while invoking expression #{GuardarBusquedas.Consultar}
caused by:
java.lang.NoSuchMethodException: org.alfresco.web.bean.GuardarBusquedas.Consultar()

… Y no funciona.

Si seguis con esto espero que os de alguna idea, y si no, quizas se os ocurra por que me salta una excepcion.


Un saludo.