cancel
Showing results for 
Search instead for 
Did you mean: 

Recorrer recursivamente un espacio con Freemarker

cristinamr
World-Class Innovator
World-Class Innovator
Buenas.

Llevo varios días haciendo un desarrollo con Freemarker para una vista personalizada (custom view) y la verdad es que he tenido bastantes problemas a la hora de ver cómo podía recorrer un espacio recursivamente con Freemarker y que te contara el número de documentos que tiene ese espacio y sus hijos, así como el tamaño total de los mismos.
A simple vista es bastante sencillo según explico lo que quiero hacer en el desarrollo, pero todo es ponerse y darse cuenta de que para nada es sencillo, sobre todo si no estás familiarizado con el lenguaje de freemarker, no sabes muy bien como enfocarlo y apenas tener ejemplos en internet sobre esto (lo típico de buscar algo y no encontrarlo por ningun lado, vamos Smiley Tongue).

Estuve mirando en foros, google, y demás y nada así que aquí dejo mi granito de arena por si a alguien le sirve en un futuro (al menos que lo tenga un poco más fácil Smiley Wink 😞


<#assign contador  = 0 >
<#assign tamanio  = 0 >
<#list space.childrenByXPath[".//*"]  as child>
   <#if child.isDocument>
      <#assign contador  = contador+1 >
     <#assign tamanio  = tamanio + child.size>
   </#if>
</#list>
<#assign tamanio = (tamanio/1024)/>
<#assign tamanio = (tamanio/1024)/>
<table border="0" celpadding="0" cellspacing="0">
<tr><td>Numero de docs en el espacio: ${contador}</td></tr>
<tr><td>Tamaño de los documentos: ${tamanio}</td></tr>
</table>

La idea es que metas el código en un ftl y lo ejecutes desde el mismo espacio en el que quieras ver el custom view Smiley Wink
Por cierto un apunte: Divido el tamaño dos veces entre 1024 para que te lo escale a megas sino da demasiadas cifras Smiley Frustrated

Un saludooo!! ^^
--
VenziaIT: helping companies since 2005! Our ECM products: AQuA & Seidoc
22 REPLIES 22

fegor
Star Collaborator
Star Collaborator
Consejo, mejor usad JavaScript para todo el recorrido ya sea recursivamente o no y pasáis el recorrido en "model" a la plantilla FreeMarker, se ahorran muchos quebraderos de cabeza…  :lol:

Se tiende a intentar "codificar" en FreeMarker como si de un lenguaje de scripting se tratase y no es así.

Un saludo.

berenicestr69
Champ in-the-making
Champ in-the-making
Gracias!!


Muchas gracias, habeis sido de gran ayuda!!! La he adaptado y funcionando correctamente!!! y pasandolo como model el objeto.


Por cierto, tengo una duda mientras intentaba adaptarla, he intentado realizar un import por ejemplo:  import java.util.ArrayList; al principio en la primera linea, y me salta excepción, no me lo reconoce…

No se pueden añadir import de clases predefinidas??

Muchas gracias, un saludo!

berenicestr69
Champ in-the-making
Champ in-the-making
Sois de gran ayuda…

Smiley Wink

cristinamr
World-Class Innovator
World-Class Innovator
Buenas berenicestr69.

Disculpa la tardanza en responder. En contestación a tu pregunta: En javascript no puedes importar como en java clases por eso te lanza esa excepción. He visto que has intentado importar el java.util.ArrayList: Si lo que quieres es hacer una array, en JS se hace poniendo directamente lo siguiente:

var tabla1 = new Array();

De todas formas, si no sabes mucho de JavaScript ojéate éste manual online y también ten a mano siempre la API de JavaScript del propio Alfresco Smiley Wink

De todas formas, sé que se pueden importar clases de java en JS por el tema de que RHINO te lo permite, para más información consulta esta página. Exactamente esta página creo que te servirá de ayuda. Te resalto la parte de importación de clases:

If your scripts access a lot of different Java classes it can get awkward to use the full package name of the class every time. Rhino provides a top-level function importPackage that serves the same purpose as Java's import declaration. For example, we could import all of the classes in the java.io package and access class java.io.File using just the name File:

importPackage(java.io)
File [JavaClass java.io.File]


Un saludo!!
--
VenziaIT: helping companies since 2005! Our ECM products: AQuA & Seidoc

nemrp
Champ in-the-making
Champ in-the-making
Hola CristinaMR.

He probado el código de recorrido y me ha funcionado perfectamente en un Alfresco 3.4.0. Pero me planteo dos cuestiones que no consigo solucionar (estoy empezando en el desarrollo de plantillas). La primera es si se puede hacer uso de la plantilla llamando a otro espacio que no sea el que hace uso de la plantilla. Y la segunda es si es posible volcar el resultado (la tabla html) en un archivo (excel mejor, pero si no puede ser pues en uno de texto -plano o no-).

Un saludo y muchas gracias CristinaMR.

nemrp
Champ in-the-making
Champ in-the-making
Vale, ya he conseguido indicar el espacio donde quiero que empiece a funcionar el código de la plantilla. Se realiza con la siguiente línea:


companyhome.childByNamePath["XXXXXX"]

Entendiendo "XXXXXX" coo el nombre del espacio donde se quiere empezar.

Ahora me queda resolver el guardado de la documentación en un archivo, que no se si se podrá hacer.

cristinamr
World-Class Innovator
World-Class Innovator
Muy buenas.

Claro que se puede ^^ , de hecho si vas a empezar a trastear los ftls un consejillo: Ten siempre cerca el cookbook de templates de Freemarker que hay publicado en la wiki de alfresco (aquí).

En respuesta a tus preguntas:

1. Puedes hacerlo directamente con el ChildByName (o el childByNamePath que no lo recuerdo bien) o puedes hacerlo con lucene tal que así:

<table>
<#list companyhome.childrenByLuceneSearch["TEXT:alfresco* AND TEXT:tutorial*"] as child>
    <tr><td><a href="/alfresco${child.url}" target="new">${child.properties.name}</a></td></tr>
</#list>
</table>

De hecho, ese ejemplo es el que se llama Using Lucene Full-Text Search aunque tienes varios en la wiki, todo es cuestión de ir viendo cual te va bien y probar (vamos lo que viene siendo el treasteo Smiley Very Happy).

A lo segundo, tengo que investigar… Dame tiempo y te comento  :mrgreen:  (ya también por culturilla general).

Te comento cuando de con algo 😃
--
VenziaIT: helping companies since 2005! Our ECM products: AQuA & Seidoc

cristinamr
World-Class Innovator
World-Class Innovator
No he encontrado nada referente a ftl sin embargo sí que he leído mucho de webscripts. Me da que es porque no se puede hacer porque a fin de cuentas es una plantilla. ¿No puedes hacer un js? ¿O crearte una acción usando POI para darle formato al excel?  :roll:
--
VenziaIT: helping companies since 2005! Our ECM products: AQuA & Seidoc

nemrp
Champ in-the-making
Champ in-the-making
de hecho si vas a empezar a trastear los ftls un consejillo: Ten siempre cerca el cookbook de templates de Freemarker que hay publicado en la wiki de alfresco (aquí).
Si, es lo que he estado usando para ir añadiendo funcionalidad (que muestre más datos) a la plantilla.

1. Puedes hacerlo directamente con el ChildByName (o el childByNamePath que no lo recuerdo bien)
Es "childByNamePath", tal y como puse en en post anterior. Lo de lucene está interesante también.

No he encontrado nada referente a ftl sin embargo sí que he leído mucho de webscripts. Me da que es porque no se puede hacer porque a fin de cuentas es una plantilla. ¿No puedes hacer un js? ¿O crearte una acción usando POI para darle formato al excel?
Eso mismo me ha pasado a mi. No he encontrado nada. Supongo que tendrá que ver también con lo que dice más arriba fgonzalez.

Consejo, mejor usad JavaScript para todo el recorrido ya sea recursivamente o no y pasáis el recorrido en "model" a la plantilla FreeMarker, se ahorran muchos quebraderos de cabeza… :lol:

Se tiende a intentar "codificar" en FreeMarker como si de un lenguaje de scripting se tratase y no es así.
En cualquier caso, si que puedo usar webscripts, aunque aún no he hecho ninguno y no se cómo funcionan exactamente. Elegí la opción de hacerlo con ftl por su sencillez. Y con lo de POI me pasa algo parecido. Realmente lo que buscada es desarrollar el recorrido de espacios de manera rápida y sin que tuviera que estar una semana (o más)con ello. ¿Podría hacerlo con webscripts rápido y sencillo?.

Un saludo y muchas gracias CristinaMR.

cristinamr
World-Class Innovator
World-Class Innovator
Mejor Javascript Smiley Very Happy Rápido, sencillo y para toda la familia jaja

Hace unos meses hice un tuto de js, para aprender a ejecutar un script y a usar la consola de debug nativa de alfresco.. Creo que te vendrá de perlas. Pincha aquí y le echas un vistazo. Vamos siempre que tengas dudas pregunta sin problemas que todo el mundo empezamos igual  :mrgreen: 

El script de ejemplo que viene en ese capitulo recorre y te guarda un log en txt… Hace algún tiempo vi cómo se guardaba en xls, a priori, si cuando creas el txt lo llamas nombre_log.xls te lo debería crear sin problemas (ojea este post por si te sirve en un futuro cercano).

¡Un saludo!
--
VenziaIT: helping companies since 2005! Our ECM products: AQuA & Seidoc
Getting started

Tags


Find what you came for

We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.