[Tutorial] Aprendiendo javascript para Alfresco – Capitulo Final

Muy buenas a todos.

Hace algún tiempo empecé a escribir un tutorial sobre cómo empezar a bichear los javascripts en alfresco. Pues bien, mi meta con este post es un poco el haceros un resumen sobre los pasos finales que os pueda recomendar para poder abordar los pequeños desarrollos con mayor agilidad y facilidad e intentar facilitaros un poco el trabajo.

Documentación & entorno de trabajo
Antes de nada, tened siempre a mano abierto los siguientes links que os servirán de apoyo para realizar vuestros scripts:

  1. APIs Javascripts en Alfresco. Dependiendo de la versión de alfresco que utilices, seleccionala dentro de la wiki para ver las funciones o métodos que hay disponible para esa versión.
  2. Cookbook de javascript. Dentro de la wiki, está este “libro de recetas” con muchos ejemplos con javascript.
  3. MADEJA. Sección proporcionada por la Junta de Andalucía con el contenido en Castellano =) (además tienes mucha información de Alfresco).
  4. Por supuesto, tener siempre acitvada nuestra consola de depuración para ver qué hace nuestro script. También existe para el Share (en vez de http://localhost:8080/alfresco/service/api/javascript/debugger, es http://localhost:8080/share/service/api/javascript/debugger) a partir de la 3.3.x
  5. La Comunidad de Alfresco. Sé que muchos preguntáis allí, pero lo que debemos entre todos es intentar cada día ayudarnos. Recordad eso de “hoy por tí, mañana por mí” ;)

Consejo: Además de todo esto, si usáis Firefox os recomiendo que os bajéis la extensión “Firebug” que sirve para mostraros el código fuente de una página que estáis visualizando (observad las fotos del enlace). Esto sirve, sobre todo, para ver qué valores tiene o adquiere un elemento cuando lo modificáis.
Un ejemplo sencillo: Imaginad que queréis quitar de la parte de abajo el logo de Alfresco y el Copyright porque os ha pedido el cliente que pongáis el suyo, pues bien con esta aplicación, sobre el banner/logo si pulsáis el botón derecho del ratón y le dáis a inspeccionar elemento, os saldrá la url de donde está cargando esa imagen y como se llama, así podréis buscarla en vuestro despliegue para una manipulación libre =)Nota: Chrome, trae ya por defecto en sus últimas versiones una utilidad similar a esta nativamente y sin necesidad de descargar nada adicional.

Una vez preparado vuestro entorno, ¡es hora de desarrollar! =)

Aportaciones
Ya sabéis que soy bastante partidaria de la colaboración (pensad que es ahorrar trabajo y no malgastar tiempo en cosas que ya se han hecho), así que en este apartado os voy a poner script o trozos de código para que los podáis reutilizar.

Consejo: Cuando se os plantee algún desarrollo “grande”, tened presente eso de “Divide y Vencerás“: Intentad dividirlo en otros más pequeños, así se te hará bastante más sencillo el realizar el desarrollo y depurarlo.

Aquí algunos ejemplos que os comparto:

  • Contar los documentos de forma recursiva.
contar(companyhome.childByNamePath("mi_espacio"));

function contar(nodeVar) {
    if (nodeVar.isDocument) {
       if(nodeVar.mimetype == "application/pdf" )
             arrayTipos[0]++;
       else if (nodeVar.mimetype == "application/msword" )
             arrayTipos[1]++;
      else
             arrayTipos[2]++;
        contadorDocs++;               
      } else if (nodeVar.isContainer) {
        var childrenList = nodeVar.children;
        for (var i = 0; i < childrenList.length; i++) {
            contar(childrenList[i]);
        }
    }
}
  • Obtener categoria “Empresas” y sus hijos utilizando lucene.
var catName="Empresas";
var srchQuery = "+TYPE:"cm:category" +PATH:"/cm:generalclassifiable//*"";
srchQuery += " +@cm\:name:""+catName+"//*"";
var categoria = search.luceneSearch(srchQuery);
var catHijos = categoria.children;

  • Creación de un log llamado date_log.txt con la fecha de creación de un documento dado.
function fecha (node){
  salida+="Prueba fecha rn";
  var fecha = node.getCreatedDate();
  salida+="Rescata: "+fecha+" rn";
}

var salida = "";
var logFile = script.parent.childByNamePath( "date_log.txt" );
if ( logFile == null )
 logFile = script.parent.createFile( "date_log.txt" );

//Llamada a funcion principal
fecha(document);

//Salvamos el log para guardar
logFile.content += "LOG rnrn";
logFile.content = salida+"rnrn";
logFile.save();
logFile.content;
  • Script para desasociar las categorias de todos los documentos (usando API de Alfresco 2.1.X)
function recorre(nodeVar) {

  salida+="Comienzo del script rn";

    if (nodeVar.isDocument) {
            salida+= "n"+nodeVar.displayPath+"/"+nodeVar.name+"rn";
   limpiaCatXNodo(nodeVar);
      } else if (nodeVar.isContainer) {
  
   var childrenList = nodeVar.children;
   for (var i = 0; i < childrenList.length; i++) {
    recorre(childrenList[i]);
   }
    }
}
function limpiaCatXNodo(node){
  var array = node.properties["cm:categories"];
 salida+="[Funcion limpiaCatXNodo] Se obtienen las categorias rn";
  if (array!=null){
   var nodeName = node.properties.name;
  
  // busca las categorias dentro del nodo
  var categories = node.properties["categories"];
  if(!categories || categories == null) {
    categories = [];
  }
  for(i in categories) {
    salida+="[Funcion limpiaCatXNodo] Documento: "+node.properties.name+" rn";
    salida+="------------------------------- rn";
    salida+="Se va a eliminar la categoria: "+categories[i].name+" rn";
    categories.pop(i); // elimina las categorias del nodo
    salida+="------------------------------- rnrn";
  }
    node.properties["categories"] = categories;
  node.save();
   }else{
  salida+="[Funcion limpiaCatXNodo] No hay categorias asignadas a el documento: "+node.properties.name+" rn";
 }
  salida+="[Funcion limpiaCatXNodo] Fin funcion elimina categoria rn";
}
/////////////////////////////////
//VARIABLES y CONFIGURACION LOG//
/////////////////////////////////
var salida = "";
var logFile = script.parent.childByNamePath( "Log_LimpiaCat.txt" );
if ( logFile == null )
 logFile = script.parent.createFile( "Log_LimpiaCat.txt" );
recorre(space);
//Salvamos el log para guardar
logFile.content += "LOG rnrn";
logFile.content = salida+"rnrn";
logFile.save();
logFile.content;

Conclusión:
Como veréis no tiene más ciencia que mirar la API del alfresco sobre le que voy a lanzar mi script, decidir qué quiero conseguir hacer, buscar en ella alguna función que sirva de base y poco más.

Os animo a que compartáis vuestro código en la comunidad y ya sabéis que si encontráis algo que pueda enriquecer este post, comentadmelo para añadirlo ^__^

¡Un saludo a tod@s y gracias!Índice de la guía:
Capitulo primero.
Capitulo segundo.
Capitulo tercero.

11 pensamientos en “[Tutorial] Aprendiendo javascript para Alfresco – Capitulo Final

  1. Alber

    Cristina, parece que los foros de alfresco estan deshabilitados por el momento. Te queria preguntar puesto que estoy queriendo utilizar share para gestion de proyectos. El objetivo principal es unificar “templates” para todos en la empresa, en mi modelo de contenido tengo types con metadatos que bastarian para generar xml y transformarlo en pdf, tu que me recomiendas hacer un script para esto o utilizar workflows, estuve viendo activiti y parece bastante bueno para esto…

    Responder

Deja un comentario