Web script con búsqueda simple

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

Web script con búsqueda simple

Hola, estoy intentando hacer un simple ejemplo de búsqueda de documentos con un web script.

Simplemente quiero buscar por nombre y autor, y listar los documentos encontrados. Primero pongo el código y luego expongo mis problemas…

busquedapersonalizada.get.desc.xml
<webscript>
   <shortname>Busqueda personalizada</shortname>
   <description>Realiza una busqueda en el repositorio</description>
   <url>/busquedapersonalizada</url>
   <url>/busquedapersonalizada?nombre={nombre?}&amp;autor={autor?}</url>
   <authentication>user</authentication>
</webscript>
busquedapersonalizada.get.js
logger.log("nombre: \"" + args.nombre + "\"");
logger.log("autor: \"" + args.autor + "\"");

if (args.autor != "" || args.nombre != "") {
   var queryBusqueda = "(PATH:\"/app:company_home//*\" )";
   
   if (args.autor != "") queryBusqueda += " AND (@cm\\:author:" + args.autor + ")";
   if (args.nombre != "") queryBusqueda += " AND (@cm\\:name:" + args.nombre + ")";
   
   var resultados = search.luceneSearch(queryBusqueda);
   if (resultados == null) resultados = new Array(0);
   model.resultados = resultados;
}
busquedapersonalizada.get.html.ftl
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
      <title>Prototipo de b&uacute;squeda</title>
   </head>
   <body>
      <p>
         <a href="http://www.alfresco.com" target="_blank"><img src="${url.context}/images/logo/AlfrescoLogo32.png" alt="Alfresco" /></a>
      </p>
      <h1>B&uacute;squeda de documentos</h1>

      <form method="get" action="http://localhost:8080/alfresco/service/busquedapersonalizada">
         <table>

            <tbody>
               <tr><td>Nombre</td><td><input type="text" size="20" maxlength="20" name="nombre" /></td></tr>
               <tr><td>Autor</td><td><input type="text" size="20" maxlength="20" name="autor" /></td></tr>
            </tbody>

            <tfoot>
               <tr><th colspan="2" align="left"><input type="submit" value="Buscar" /></th></tr>
            </tfoot>
         </table>
      </form>
      <#if resultados??>
      <p>Par&aacute;metros de b&uacute;squeda:<p>
      <table>
         <tr><td>Nombre:</td><td>${args.nombre}</td></tr>
         <tr><td>Autor:</td><td>${args.autor}</td></tr>
      </table>
      <br />
      <table>
         <#if (resultados?size > 0)>
         <thead>
            <tr><th>Nombre documento</th><th>Tipo documento</th><th>Autor documento</th></tr>
         </thead>
         <tbody>
            <#list resultados as child>
            <tr><td>${message(child.properties["cm:name"])}</td><td>${message(child.properties["cm:type"])}</td><td>${message(child.properties["cm:author"])}</td></tr>
            </#list>
         </tbody>
         </#if>
         <tfoot>
            <tr><th align="left" colspan="2">Total resultados:</th><td>${resultados?size}</td></tr>
         </tfoot>
      </table>
      </#if>
   </body>
</html>

Si ven algo horrible, como dijo H. Simpson "fue mi primer día" con web scripts Smiley Happy

Lista de problemas:

1. Si hago la llamada sin parámetros en la URL (http://localhost:8080/alfresco/service/busquedapersonalizada) me salta un bonito error 500 con la siguiente info:
freemarker.core.InvalidReferenceException - Expression args.nombre is undefined on line 29, column 51 in busquedapersonalizada.get.html.ftl.

La línea maldita es "<tr><td>Nombre:</td><td>${args.nombre}</td></tr>", y no sé por qué entra en esa línea del ftl si sólo debería entrar ahí cuando está definido "resultados", cosa que creo que no debería pasar según el JavaScript.

2. Si hago la llamada de tal forma que devuelva resultados (pasando "a" tanto en nombre como en autor) tengo este otro error:
freemarker.core.InvalidReferenceException - Expression message(child.properties["cm:name"]) is undefined on line 39, column 43 in busquedapersonalizada.get.html.ftl.

No sé por qué da ese error, si la propiedad cm:name es propia de todos los documentos…

Muchas gracias por vuestra ayuda.
2 Replies
fstnboy
Active Member

Re: Web script con búsqueda simple

No sé si le has echado un ojo a esto, supongo que sí:

WebScripts - Blog Search

Como ves para listar el resultado hace lo siguiente:


<#list resultset as node>
     <tr>
       <td><img src="${url.context}${node.icon16}"/>
       <td><a href="${url.serviceContext}/api/node/content/${node.nodeRef.storeRef.protocol}/${node.nodeRef.storeRef.identifier}/${node.nodeRef.id}/${node.name?url}">${node.name}</a>
     </tr>
</#list>


Para la 2ª pregunta, con poner ${node.name} y para el autor ${node.properties.creator}

Para la 1ª pregunta, te casca, porque supongo que si no le pasas los parámetros te los coge como no definidos…  En el mismo post un poco más abajo, WebScripts - Argument Handling, te pone como manejar los argumentos.

Echate un ojo a los links que te he mandado.

Saludos y suerte con tu desarrollo!
agranjo
Member II

Re: Web script con búsqueda simple

Muchas gracias por tu ayuda, los 2 links me han parecido muy interesantes.

Nos vemos!