AnsweredAssumed Answered

Web script con búsqueda simple

Question asked by agranjo on Mar 6, 2009
Latest reply on Mar 9, 2009 by agranjo
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 :)

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.

Outcomes