[Tutorial] Aprendiendo javascript para Alfresco (III)

Buenas de nuevo.

En este capítulo vamos a lanzar nuestro primer JavaScript ^^
Además aprenderemos lo siguiente:

  1. Hacer y ejecutar el Script.
  2. Explicación breve del código.
  3. Depurando el código: Consola de debug.

1. Hacer y Ejecutar un Script

Lo primero que vamos a hacer es ejecutar este sencillo JavaScript:

function muestraRutas(node)
{
   for each(n in node.children)
   {
         if ( n.isDocument )
               salida+="Ruta de los archivos: "+n.displayPath+"/"+n.name+"\n\r";

         for ( var i = 0; i < n.children.length; i++ ) {
            if ( n.children[i].isContainer == true )
               muestraRutas( n.children[i] );
         }
   }
}

// Objetos modificables

var nodo_raiz = "" ;
var salida = "";

var logFile = script.parent.childByNamePath( "muestraRutas.txt" );
// Precondiciones
if ( logFile == null )
  logFile = script.parent.createFile( "muestraRutas.txt" );

if ( nodo_raiz == "" )
{
   var space = companyhome;
}
else{
   var space = companyhome.childByNamePath( nodo_raiz );
}

if (space != null) {
   muestraRutas( space );
}
else{
   salida += "Error al localizar el espacio raiz: " + nodo_raiz + "\n\r";
   if (logger.isLoggingEnabled())
   {
      logger.log("Error al localizar el espacio raiz: " + nodo_raiz );
   }
}

//guardamos el archivo txt con el registro
logFile.content = salida;
logFile.save();
logFile.content;

Para ello, abriremos un bloc de notas para pegar este código, y lo llamaremos MuestraRutas.js y lo subiremos en nuestro alfresco dentro de Company Home/Data Dictionary/Scripts (Empresa/Diccionario de Datos/Scripts).

Una vez esté subido debemos tener algo similar a esto:

Una vez esté hecho este paso, debemos pinchar en More Action/View Details/Run Action (Más Acciones/ Ver Detalles/Ejecutar una Acción) Con esto ejecutaremos el script que acabamos de subir a nuestro alfresco.

En la siguiente pantalla debemos seleccionar Execute a Script (Ejecutar un script):

A continuación pincharemos en Select Value an Add (Seleccionar Valor y Añadir) y seleccionaremos de la lista nuestro script:

Pinchamos Ok y a continuación en la siguiente pantalla pinchamos en Finish.

Si os fijáis dentro de vuestro Data Dictionary (Diccionario de Datos) ahora disponemos de un archivo txt llamado muestraRutas.txt, si lo abrimos nos mostrará el archivo y la ruta donde se encuentra. En mi caso se muestra:

Ruta de los archivos:
/Company Home/Sites/docproy/documentLibrary/Prueba script/DocProyectosModel.xml
Ruta de los archivos:
/Company Home/Sites/docproy/dataLists/031ac14f-c3e4-4977-90f1-3ecf4812a7a3/946cdf74-3478-4d51-8a5e-0d1ea33c8a5f
Ruta de los archivos:
/Company Home/Sites/docproy/discussions/post-1292344960618_775/post-1292344960618_775

Y voilà, ya habéis ejecutado vuestro primer script :-)

2. Explicación breve del código

Os voy a explicar qué hace el script, así entenderéis mejor su funcionamiento. Si podéis tened por delante el código así os vais viendo a medida que os explico.

Si os fijáis bien, la estructura del script es la siguiente:

– Función muestraRutas a la que se le pasa un nodo que será desde donde empiece a buscar recursivamente
– Dentro de ésta hay un bucle recursivo que será el encargado de recorrer nodo a nodo nuestro repo
– Si el nodo es un documento, hay una variable llamada salida que será donde vayamos cargando nuestro log.
– Variables a utilizar y carga de log.

Abajo lo que tenemos es declarado variables a utilizar y su inicialización así como la llamada a la función pasándole el nodo desde el que queremos que recorra.

De todo lo que hay ahí me gustaría resaltar el logFile.save(); Cuando queremos conservar los cambios en un nodo SIEMPRE debemos utilizar la función save. Un ejemplo básico para que lo veáis mejor sería:

document.name="Proyectos Benéficos";
document.save(); //salva el nombre del nodo como prueba

Si en este ejemplo no hiciéramos el .save(); NO se guardaría el cambio que hemos efectuado en el nodo, por eso al cambiar el logFile, se ha efectuado un logFile.save(); sino no guardaría todo los datos que estamos cargando en la variable salida de la función muestraRutas.

3. Depurando el código: Consola de debug

Aprovechando que ya tenemos subido el script a nuestro alfresco, lo siguiente que vamos
a hacer es depurar el código con la consola que tiene alfresco para ello.

Lo primero antes que nada, vamos a activar la consola para debuggear nuestro script. Esta consola es muy básica pero al menos os permitirá hacer una traza de vuestro script así como analizar el valor de las variables que estáis lanzando (valores que toman, etc).

Para activar la consola de depuración seguid los siguientes pasos:

1. Copiad y pegad el siguiente enlace en vuestro explorador

http://SERVIDOR_ALFRESCO:PUERTO/alfresco/service/api/javascript/debugger

2. Logaros con un usuario que tenga permisos de administrador.
3. Marcad “Enable”
4. Acto seguido se os abrirá un browser con la consola:

Minimizad la consola que por ahora nos olvidamos de ella :-)

Ahora lo que debemos hacer es ejecutar el script que queremos depurar para que se cargue en la consola. Para ello debemos hacer de nuevo el proceso anterior de ejecución. Como ya tenemos cargado dentro de nuestro Data Dictionary/Diccionario de Datos el script MuestraRutas.js pues solo debemos “lanzarlo” para que se cargue en la consola de depuración: . Volvemos a pinchar en More Action/View Details/Run Action (Más Acciones/ Ver Detalles/Ejecutar una Acción)

. Seleccionamos en Select Value an Add (Seleccionar Valor y Añadir) nuestro script.
. Seleccionamos Ok y Finish
. Y automáticamente aparecerá el script cargado en la consola de depuración.

Os voy a explicar de forma breve qué podéis hacer en ella:

Herramientas de depuración: Con éstas opciones podréis avanzar línea a línea, parar la depuración.

Visualización de variables: Esto es quizás lo más interesante, ahí podéis escribir las variables que
tenéis en el script y a medida que vayáis depurando línea a línea podréis ir viendo qué valores adquiere la variable.

Esta muy bien si alguna vez os suelta un error y no sabéis por qué. Además en la consola, si picáis dos veces encima del número de una línea podréis poner un punto de ruptura así cuando se cargue de nuevo el script parará en esa línea automáticamente.

Os recomiendo que lancéis el script y hagáis pruebas, no hay mejor forma de aprender que bicheando la herramienta (vamos, trasteadla todo lo que podáis) =)

Y bueno con esto y un bizcocho…. Hasta el próximo capitulo. En él quiero empezar a enseñaros la api para programar en JS para alfresco con más profundidad. Espero que más de uno de los que estéis empezando este tuto os anime a continuar, y ya veréis como no es tan difícil como parece ;)

¡Feliz entrada de años a todos!

<- Ir al capitulo 3 o ir al capitulo final ->

19 pensamientos en “[Tutorial] Aprendiendo javascript para Alfresco (III)

  1. Héctor

    Hola cristina, yo estoy usando la version 3.4c y continua con el error, no consigo solucionarlo, por cierto felicidades por lo que estas haciendo, estas siendo de gran ayuda a mucha gente

    Responder
  2. Cristina Martín

    Buenas tardes.

    Muchas gracias Héctor =)

    ¿Con el error te refieres al de la consola? Si es así, ya leí por los foros que ocurre también en la 3.4c :( ¿Mi consejo? Si puedes instálate un alfresco community anterior en la que sepas que funcione la consola, por ejemplo la 3.3, así puedes debuggear en local con esa versión =D

    Sé que la solución es algo chapucera, pero a priori no se me ocurre ninguna otra y puede servirte (aunque tengas un alfresco para testear y otro para probar).

    Un saludo y gracias por leer el blog ^__^

    Responder
  3. Jorge Ovalle

    Hola, muchas gracias, esto me sirvio mucho para crear un script para Alfresco. Sin embargo, hay algo que no puedo conseguir. Cuando creo el log, este se sobreescribe cada vez que ejecuto el script. Hay alguna forma de hacer que no se sobreescriba, y que el contenido nuevo se agregue al mismo archivo?
    Saludos, y gracias

    Responder
  4. Cristina Martín

    Buenas Jorge.

    Prueba con:

    tu_log += “lo que quieras”;

    Lo importante es poner += para no sobreescribir el contenido. Ese + es el que te concatena los resultado (vamos, que te los va sumando). Si solo pones = lo que haces es sobreescribirlo.

    Prueba y me comentas =)

    Un saludacooo!

    Responder
  5. David David

    Hola

    Tengo la version de Alfresco Community 4.2.c en linux ubuntu 12.04 y entro a
    http://SERVIDOR_ALFRESCO:PUERTO/alfresco/service/api/javascript/debugger como bien se dice en el blog
    y no me funciona.

    Entonces entro en el fichero /opt/alfresco-4.2.c/tomcat/shared/classes/alfresco/web-extension/share-config-custom.xml

    true

    false

    Añado eso y sigue sin funcionar.

    ¿Alguien sabe cual es la solución para que pueda ver “alfresco web-tier javascript debugger”?

    Si consigo esto me facilitaría mucho la vida, porque hasta ahora subo los script y los ejecuto para ver si funcionan pero no tengo nada para depurarlos.

    Si alguien me puede ayudar, se agradece.

    Responder
  6. David David

    Veo que no a salido, el cogigo que pegue en ” /opt/alfresco-4.2.c/tomcat/shared/classes/alfresco/web-extension/share-config-custom.xml”

    estaba en
    /opt/alfresco-4.2.c/tomcat/shared/classes/alfresco/web-extension/share-config-custom.xml.sample

    era un trozo de configuracion que habia en share-config-custom.xml.sample

    le quitare al codigo los “<” “>”

    config replace=”true”
    flags
    !– Developer debugging setting to turn on DEBUG mode for client scripts in the browser —
    client-debug>true</client-debug

    !– LOGGING can always be toggled at runtime when in DEBUG mode (Ctrl, Ctrl, Shift, Shift).
    This flag automatically activates logging on page load. —
    client-debug-autologging false /client-debug-autologging
    /flags
    /config

    Responder
  7. Cristina Martín

    Buenas David.

    No hay que instalar nada, ni tampoco hay que tocar el share-config-custom.xml. La consola de debugger es una consola que Alfresco trae por defecto para debbuggear javascripts.

    Ten en cuenta que cuando especifico en el tutorial: SERVIDOR_ALFRESCO:PUERTO significa que tienes que en SERVIDOR_ALFRESCO tienes que poner la ip de tu local, y en PUERTO, el puerto en el que hayas instalado Alfresco.

    Por defecto, intenta acceder a esta url por favor:

    http://localhost:8080/alfresco/alfresco/service/api/javascript/debugger

    Y comentame.

    Un saludo.

    Responder
  8. David David

    Perdon puse esto (no puse dos veces alfresco):

    http://localhost:8080/alfresco/service/api/javascript/debugger

    Y lo que me dice por pantalla es:
    Web Script Status 500 – Internal Error

    The Web Script /alfresco/service/api/javascript/debugger has responded with a status of 500 – Internal Error.

    500 Description: An error inside the HTTP server which prevented it from fulfilling the request.

    Message: 07080001 Wrapped Exception (with status template): null

    Exception: org.springframework.extensions.webscripts.WebScriptException – 07080001 Wrapped Exception (with status template): null

    org.springframework.extensions.webscripts.AbstractWebScript.createStatusException(AbstractWebScript.java:1067)

    Server: Community v4.2.0 (4576) schema 6.022
    Time: 08-ago-2013 13:46:39

    Diagnostics: Inspect Web Script (org/springframework/extensions/webscripts/jsdebugger.post)

    un saludo.

    Responder
  9. David David

    Otra cosa de esta imagen que te pongo:
    http://2.bp.blogspot.com/-cVCcply7mYM/UGK5XW42CQI/AAAAAAAAADs/q9uzDz1DmZw/s1600/Screenshot.png

    Esta imagen es de mi version.

    Donde pone “Developer Quick Start” pincho en cada uno de los link y me sale en la pantalla lo siguiente:
    Pincho en el link Examples por ejemplo:
    HTTP Status 404 – /examples/
    type Status report
    message /examples/
    description The requested resource is not available.
    Apache Tomcat/7.0.30

    Pincho en el linck Tomcat Setup:
    HTTP Status 404 – /docs/setup.html
    type Status report
    message /docs/setup.html
    description The requested resource is not available.
    Apache Tomcat/7.0.30

    ¿Es normal eso?

    Y en los botones de “Server Status”, “Manager App” y “Host Manager” dice que no tengo autorizacion(You are not authorized to view this page. If you have not changed any configuration files, please examine the file conf/tomcat-users.xml in your installation. That file must contain the credentials to let you use this webapp. ).

    Responder

Deja un comentario