Hacer referencia al nodo actual con 'space'

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

Hacer referencia al nodo actual con 'space'

Hola a tod@s,

Es el primer mensaje que escribo en la lista. Soy bastante nuevo en Alfresco y no consigo dar con una solución que seguro que es la mar de fácil. La idea es que cuando en la biblioteca de documentos de un determinado sitio se cree una carpeta automáticamente se creen las subcarpetas de un template creado previamente. Esto lo estoy intentando hacer mediante una regla y un script pero no doy con la sintaxis correcta para referenciar al nodo actual a través de la propiedad "space". He tomado de base un script del libro "Alfresco 3 Bussiness Soltions" que hace extamente lo mismo pero para todas las carpetas contenidas dentro de la carpeta actual:

// Get Set of subfolders to copy
var tempFolder = companyhome.childByNamePath("Data Dictionary/Space Templates/Nueva Estructura");
var foldersToCopy = tempFolder.children;
var TargetFolder=companyhome.childByNamePath(space.displayPath); <–! *** Aqui es donde no sé cómo referenciar a la carpeta actual *** –>

// Add set of folders
   for each (folderToCopy in foldersToCopy)
       {
   // Copy folder and its properties
   var copy = folderToCopy.copy(TargetFolder);

   // Copy permissions
   // List of "[ALLOWED|DENIED];[USERNAME|GROUPNAME];PERMISSION"
   // For example "ALLOWED;martin;Consumer"
   // var permissions = folderToCopy.permissions; // all permissions including inherited
   var permissions = folderToCopy.directPermissions;
   if (permissions != undefined) {
    for each (permission in permissions) {
      if (permission != undefined) {
        var permissionTokens = permission.split(";");
        var authorityId = permissionTokens[1];
        var permissionName = permissionTokens[2];
        copy.setPermission(permissionName, authorityId);
      }
    }
   }
   copy.setInheritsPermissions(folderToCopy.inheritsPermissions());

   // Rules are copied automatically
   }


y obtengo el siguiente mensaje:

java.lang.IllegalArgumentException: Destination Node is a mandatory parameter

¿Sabéis cómo es la sintaxis correcta?

¿Hay algún manual/wiki/blog que contenga la sintaxis de estas propiedades?, no he sido capaz de encontrar nada que fuese suficientemente detallado.

Muchas gracias de antemano.
5 Replies
venzia
Senior Member

Re: Hacer referencia al nodo actual con 'space'

Hola lordsnow, a primera vista :
// Get Set of subfolders to copy
var tempFolder = companyhome.childByNamePath("Data Dictionary/Space Templates/Nueva Estructura");
var foldersToCopy = tempFolder.children;
//var TargetFolder=companyhome.childByNamePath(space.displayPath); //EL TARGET FOLDER ES EL OBJETO "space"
//http://wiki.alfresco.com/wiki/3.4_JavaScript_API#Root_Scope_Objects,
//EN EL CUAL SE EJECUTA LA REGLA, ASI QUE NO ES NECESARIO QUE LO OBTENGAS PUES YA LO TIENES
// Add set of folders
for each (folderToCopy in foldersToCopy)
{
// Copy folder and its properties
//var copy = folderToCopy.copy(TargetFolder); //ASI PUES, EN LUGAR DE ESTO SERIA ..
var copy=folderToCopy.copy(space); //ADEMAS, COMO VERAS EN http://wiki.alfresco.com/wiki/3.4_JavaScript_API#Modifying_and_Creating_API
//LA FUNCION "copy" LLEVA UN SEGUNDO PARAMETRO OPCIONAL "deepCopy" QUE PERMITE COPIAR
//LA CARPETA Y SUBCARPETAS DEL ORIGEN SI LAS HUBIERA, LO CUAL PUEDE SER TU CASO

//…. RESTO DE SCRIPT

Espero que te sirva de ayuda.
Saludos!
lordsnow
Member II

Re: Hacer referencia al nodo actual con 'space'

Hola Javier,

Antes que nada gracias por responder.

Ya he probado utilizando "var copy=folderToCopy.copy(space)" y después de unos 30 segundos congelado el share me da un error diciendo que no ha podido crear la carpeta. Por si acaso ayer lo codifiqué mal, lo he vuelto a probar y ocurre lo mismo, en el log de alfresco no me aparece ningun error.
Revisando los post he encontrado uno http://forums.alfresco.com/es/viewtopic.php?f=11&t=3288 en el que esta otra solución sí que me ha funcionado, aunque sinceramente, creo que estoy rizando el rizo:

var tempFolder = companyhome.childByNamePath("Data Dictionary/Space Templates/Nueva Estructura");
var foldersToCopy = tempFolder.children;
var NumNode=space.children.length;
var TargetFolder=space.children[NumNode-1];

// Add set of folders
   for each (folderToCopy in foldersToCopy)
       {
   // Copy folder and its properties
   var copy = folderToCopy.copy(TargetFolder);

// RESTO DEL SCRIPT //

¿Se te ocurre por qué la opción del space se congela y no registra nada en el log y esto sí que funciona?

Gracias.
venzia
Senior Member

Re: Hacer referencia al nodo actual con 'space'

Puede que si la regla se ejecuta en un espacio "y sus subcarpetas" el objeto "space" se refiera a la carpeta padre (donde aplicaste la regla) .. tiene sentido ya que el segundo script que has usado mira siempre al ultimo hijo del espacio, con lo que va al que es. Por lo demas no me cuadra, ya que en algunas implantaciones tenemos scripts similares al tuyo y funcionan correctamente.
Siento no poder dedicarle mas tiempo pero ando liado Smiley Wink.
Espero que te sirva de ayuda.
Saludos y suerte!
lordsnow
Member II

Re: Hacer referencia al nodo actual con 'space'

Hola,

Voy a utilizar esta solución para avanzar con la adaptación del modelo a mis necesidades pero seguiré investigando otra fórmula ya que me temo que en un entorno de producción no es completamente fiable, existe una pequeña posibilidad de que dos usuarios creen sendas carpetas a la vez en el mismo site y se generen dos veces las subcarpetas en una de ellas y en la otra ninguna. En cuanto averigue algo más lo posteo.

Gracias por tu tiempo.
massanen_2296
Member II

Re: Hacer referencia al nodo actual con 'space'

si en vez del share, estamos ejecutando un script en el webclient mediante una acción nueva contra una carpeta, como se hace para hacer referencia a dicha carpeta???

gracias….