API de JavaScripts

RECU-0047 (Recurso Manual)

Descripción

La API Javascript de Alfresco permite a los desarrollaores de scripts escribir ficheros compatibles con el estándar JavaScript (ECMA Script) 1.6 para acceder, modificar, y crear objetos del repositorio de Alfresco. Proporciona una API simple, clara y orientada a objetos hacia conceptos bien conocidos de Alfresco como Nodos, Propiedades, Asociaciones y Aspectos. Esta API es similar a la API de Templates con la diferencia de que está permite la modificación y creación de nodos, aspectos y propiedades.

Usando la API los desarrolladores de scripts podrán:

  • Encontrar nodos (usando Xpath).
  • Recorrer jerarquías de nodos.
  • Realizar búsquedas (incluso búsquedas completas Lucene).
  • Examinar y modificar el valor de propiedades y aspectos.
  • Procesar proyectos web WCM.
  • Crear Grupos.

También desde un script se podrán crear nuevos ficheros, espacios o nodos de cualquier tipo, copiar/mover/borrar nodos y crear, modificar o quitar asociaciones entre nodos. Se aplicará todo el sistema de seguridad y permisos ACL de Alfresco.

A partir de la versión 2.1 se ha incluido la capacidad de incluir otros scripts. El desarrollador podrá construir librerías de scripts que se incluiran en tiempo de ejecución para reducir los peligrosos copia/pega entre ficheros de script.

Los ficheros de Script pueden ser guardados en el ClassPath (por ejemplo, en alfresco/extension/myscripts) o en cualquier localización del repositorio.

Los Scripts se pueden ejecutar de dos maneras diferentes. La primera es creando una regla y seleccionando Ejecutar un Script desde la lista de acciones disponibles para la regla. Los Scripts que se muestran en esta lista son cargados desde el espacio /Company Home/Data Dictionary/Scripts los usuarios con los permisos adecuados podrán crear, añadir o modificar los scripts disponibles.

La segunda forma es usar direccionamiento URL para un estilo REST de ejecución. El cliente web de Alfresco ofrece un "comando" servlet genérico que permite la ejecución directa de scripts a través de Urls. Esta característica permite el acceso directo a los scripts y el resultado de estos scripts se devuelve con una respuesta HTML. Usando este metodo podremos acceder a los scripts en el repositorio incluidos los que erán accesibles desde la acción Ejecutar un Script.

Aquellos Scripts que no estén en el repositorio sino que se encuentren dentro del ClassPath podrán ser importados en otros scripts pero no ejecutados directamente en el cliente web. La sintaxis para este importación es especifica de Alfresco con es una característica estándar de Javascript. Es ademas muy estricta y debe ser seguida exactamente o podría fallar. La directivas de importación deben ser las primeras lineas del fichero, ni comentarios ni código son permitidos por encima. La sintaxis puede ser una de las siguientes:

Importación de un script desde el repositorio mediante un path basado en el nombre:

<import resource="/Company Home/Data Dictionary/Scripts/library.js">

Importación de un script desde el repositorio mediante una referencia NodeRef:

<import resource="workspace://SpacesStore/6f73de1b-d3b4-11db-80cb-112e6c2ea048">

Importación de un script desde una localización del Java Classpath:

<import resource="classpath:alfresco/extension/myutils.js">

El motor de JavaScript es capaz de manejar la importación múltiple del mismo script y las dependencias circulares. Se podrán importar varios scripts desde diferentes localizaciones, uno desde el classpath y otros desde el repositorio por ejemplo.

API Java de ejecución de Scripts.

La API de JavaScript de Alfresco proporciona un rico conjunto de objetos Java que estarán disponibles para la escritura de los Scripts. Por defecto se proporcionan algunos objetos de ámbito "raiz", como el acceso a la carpeta de inicio del usuario, la carpeta de empresa, los proyectos web WCM, busqueda, People API y funcionalidad de login.

Objetos de ambito raiz (Root Scope Objects)

La mayoría de estos objetos por defecto son conocidos como objetos Script Node que abarcan los conceptos comunes del repositorio de Alfresco como nodos, aspectos, asociaciones y propiedades. También proporcionan acceso a servicios comunes a través de una API orientada a objetos.

Independientemente de la forma en que se este accediendo al motor de script (a través de una regla/accion o mediante URLs) los siguientes objetos están disponibles por defecto en el ambito de ejecución de scripts raiz:

  • companyhome: El Script Node del Company Home.
  • userhome: La carpeta de inicio del usuario actual.
  • person: Script Node que representa en objeto Person del usuarío actual.
  • space: El Script Node del espacio actual si hay alguno. Hay que tener en cuenta que si el script se ejecuta desde una regla heredad este objeto representará al espacio donde la regla esta definida no al actual.
  • document: El Script Node que representa el documento actual (si hay alguno).
  • script: El Script Node que representa al script mismo. No está presenta si el script se carga desde el Java Classpath.
  • args: Un array asociativo con los parametros URL pasados a través del Servlet de Procesamiento de Scripts, solo estará disponible si así es como se ha invocado el script.
  • search: Un objeto host que proporciona acceso a resultados Lucene y de Busquedas Guardadas.
  • people: Un objeto host que proporciona acceso a los grupos y personas de Alfresco.
  • actions: Un objeto host que proporciona capacidad para invocar Acciones registradas de Alfresco.
  • logger: Un objeto host que proporciona acceso a facilidades para acceder al log de la aplicación para poder realizar depuración de los scripts.
  • session: Información relativa a la sesión actual así como al ticket de autenticación actual.
  • classification: Acceso a los elementos raíces de la API de clasificación.
  • utils: Acceso a una librería de funciones de ayuda útiles que no proporciona el JavaScript generico.
  • avm: Acceso a los objetos WCM como a los paths AVM y busquedas con AVM stores y proyectos web.
  • crossRepoCopy: Soporte para copia cruzada entre repositorios, espacios WCM y espacios de gestión documental.
  • workflow*: Un objeto host que proporciona acceso a los Workflow.

*Disponible a partir de la versión 3.0

El modelo de objetos por defecto se puede acceder directamente desde la raíz en el ámbito del script y seguir el patron estandar de Javascript de estilo de sintaxis notación punto para propiedades, por ejemplo:

var name = userhome.properties.name

El valor de la variable name se obtiene accediendo al valor name de la propiedad properties.

Si se requiere los modelos de nodos hijo, modelos de asociaciones y modelos y aspectos se construyen dinámicamente. Por ejemplo, se pueden escribir sentencias que recorran colecciones múltiples de nodos como:

userhome.children[1].children[0].children[2].name

ScriptNode API

Los objetos companyhome, userhome, document, space y person representan objetos Nodos de Alfresco y proporcionan acceso a al conceptos comunes de Alfresco como son propiedades, aspectos y asociaciones. La siguiente API de Nodos está disponible para usar en los scripts:

  • properties: Un array asociativo (mapeo) de propiedades para el nodo.

Por ejemplo userhome.properties.name. Para dar nombre a las propiedades se usa el Qname del modelo, el cual puede ser escrito en forma de namespace completamente cualificado, la forma corta (como cm:content) o solo el nombre de la propiedad si asumimos el namespace del Modelo de Contenido por defecto. Así todos las siguiente sentencias son equivalentes:

var name1 = userhome.properties.name
var name2 = userhome.properties["name"];
var name3 = userhome.properties["cm:name"];
var name4 = userhome.properties["{http://www.alfresco.org/model/content/1.0}name"];

Una característica muy útil es que las propiedades de tipo d:noderef son automáticamente convertidas en un otro objeto de tipo ScriptNode. Esto significa que los programadores de scripts podrán dinamicamente recorrer la jerarquía de objetos para un nodo. Por ejemplo, si un nodo de documento tiene una propiedad NodeRef llamada "locale" se podrá ejecutar la siguiente sentencia para obtener el nombre del nodo que la propiedad referencia.

var locale = document.properties.locale.properties.name;

Si lo que se desea es obtener es el valor NodeRef para una propiedad d:noderef el siguiente código lo hará:

var localeNoderef = document.properties.locale.nodeRef;

Ademas, cualquier propiedad del tipo d:content es convertida en un objeto ScriptContent especial que por si mismos ofrecen un API para acceder o modificar el contenido, el tipo mime, el tamaño y la url de la propiedad. Por ejemplo:

var mimetype = document.properties.content.mimetype;
var content = document.properties.content.content;

Como la mayoría de los documentos se derivan del Modelo de Contenido por defecto, tipo cm:content, la API esta provista de "atajos" para el contenido, el tipo mime, el tamaño y la url para la propiedad cm:content, por ejemplo:

document.content = "some new text content";
   var mimetype = document.mimetype;
   var url = document.url;

Las propiedades pueden ser modificadas e incluso pueden ser añadidas nuevas:

  • children: Un array JavaScript de solo lectura de los nodos hijos (mynode.chlidren[0]). Desde Alfresco 2.1, las estructuras del estandar JavaScript 1,6 for each y for each in se pueden usar para iterar por los resultados de todos los métodos que devuelven listas de datos.
  • assoc: Un array asociativo (mapeo) de solo lectura de las asociaciones entre pares del nodo (mynode.assoc["cm:discussions"][0]). Cada entrada en el array contiene a su vez un array con los objetos ScriptNode en el otro extremo de la asociación.
  • chlidAssoc: Un array asociativo (mapeo) de solo lectura de las asociaciones padré/hijo del nodo (mynode.childAssoc["cm:discussions"][0]). Cada entrada en el array contiene a su vez un array con los objetos ScriptNode en el otro extremo de la asociación.
  • aspects: Un array de solo lectura de los aspectos (como cadenas de Qname completamente cualificados) aplicados al nodo. (Se devuelve como un HashSet de Java).
  • isContainer: Devuelve Verdadero (True) si el nodo es una carpeta, falso de cualquier otra forma.
  • isDocument: Devuelve Verdadero (True) si el nodo es un contenido, falso de cualquier otra forma.
  • content: El contenido del nodo como cadena de texto en la propiedad por defecto cm:content. Este valor puede ser modificado para actualizar el contenido del nodo.
  • url: La url de solo lectura al stream de contenido para este nodo.
  • downloadUrl: La url de solo lectura al stream de contenido para este nodo como un objeto adjunto HTTP1.1.
  • mimetype: El tipo mime con el que está codificado el contenido de la propiedad por defecto cm:content adjunta a este nodo.
  • size: El tamaño en bytes,de solo lectura, del contenido de la propiedad por defecto cm:content adjunta a este nodo.
  • displayPath: La ruta para visionado, solo lectura. Se debe tener cuidado cuando se accede al displayPath si el usuario actual no tiene permisos para verlo todo. Un parche ha sido aplicado en la versión 2.1.1E de tal manera que el display puede ser siempre obtenido de manera segura por cualquier usuario.
  • qnamePath: La ruta (el qname) de solo lectura hacia el nodo. (disponible a partir de la versión 2.1)
  • icon16: La imagen pequeña para este nodo, solo lectura.
  • icon32: La imagen pequeña para este nodo, solo lectura.
  • isLocked: Devuelve Verdadero (True) si el nodo esta bloqueado. Devolverá falso en cualquier otra circunstancia.
  • id: GUID para el nodo.
  • nodeRef: NodeRef para el nodo como una cadena de texto.
  • name: Atajo de acceso a la propiedad cm:name.
  • type: Qname completamente cualificado del tipo del nodo.
  • parent: El nodo padre puede ser nulo si este es el nodo raíz. e debe tener cuidado cuando se accede al displayPath si el usuario actual no tiene permisos para verlo. Un parche ha sido aplicado en la versión 2.1.1E de tal manera que el nodo padre siempre puede ser obtenido para realizar una comprobación hasPermission() antes de acceder a él en el script.
  • isCategory: Devuelve verdadero (true) si el nodo actual es un nodo categoría. Devuelve falso en cualquier otra circunstancia.

Las siguientes funciones de la API de nodos se usan para ayudar a localizar a los nodos hijos usando Xpath o una ruta basada en nombres:

  • Node childByNamePath (string path): Realiza un xpath basado en la propiedad name de los nodos y devuelve el nodo encontrado en la ruta especificada. La ruta es relativa al nodo actual. Si el nodo referido se encuentra se devuelve, sino se devuelve un nulo. Ejemplo:
var testingFolder = userhome.childByNamePath("QA/Performance/Testing");
  • Array childrenByXpath (string xpath): Realiza un consulta de búsqueda basada en xpath y devuelve un array con los nodos encontrados. La búsqueda XPath es relativa al nodo actual. Un array vacío se devolverá si no se hay resultados. Por ejemplo:
var nodes = userhome.childrenByXPath("*[@cm:name='Finance Documents']/*");
  • Array activeWorkflows*: Devuelve un Array de todos los workflows activos en los que este incluido el nodo. Si el nodo no esta incluido en el Workflow,se devolvera null. Los elementos de la array devuelta son JscriptWorkflowInstance.
  • boolean isScriptContent(object obj)*: Devuelve Verdadero si la propiedad del nodo es del tipo ScriptContentData.

*Disponible a partir de la versión 3.0

ScriptNode API avanzada

  • primaryParentAssoc: Devuelve la instancia ChildAssociationRef de la asociación padre/hijo primaria para el nodo. Este valor esta disponible pero solo se requiere en casos especiales.

API de Modificación y Creación

La mayoría de la API de ScriptNode devuelve valores de solo lectura, sin embargo el verdadero potencial de la API de scripts se puede encontrar en que soporta objetos que se pueden modificar y que proporciona acceso a los servicios del repositorio de Alfresco a través de esa API. El objeto ScriptNode permite modificación de propiedades, inserción de nuevas propiedades y aspectos, creación de nuevos ficheros, carpetas y tipos de nodos personalizados y , por supuesto, actualizar y establecer la secuencia de contenido de texto para un nodo. Ademas es posible realizar potentes funcionalidades como borrar nodos, transformar contenido, ejecutar templates y modificar las asociaciones de un nodo.

  • properties: El Array de propiedades puede ser modificado para actualizar o añadir nuevas propiedades. Por ejemplo:
// cambiar el nombre de este documento
   document.properties.name = "Backup of " + document.properties.name;
// añadir una nueva cadena de propiedades
   document.properties["cm:locale"] = mylocalenode;
// guardar las modificaciones en el nodo.
   document.save();

Es importante hacer notar que la llamada al API node.call() es necesaria para hacer persistentes las modificaciones en las propiedades. Todas las otras modificaciones realzadas usando la API (como cambiar contenido o añadir aspectos) tienen efecto inmediato.
También es necesario recordar que los objetos JavaScript son distintos los objetos java nativos del repositorio. Los valores de las propiedades en el repositorio deben ser del tipo de objeto correcto según esta definido en el Diccionario de Datos y expuestos por el modelo de contenidos. Así una propiedad cadena de caracteres espera un Strin de Java y una propiedad multi-valor espera un lista. La API Javascript de Alfresco realizará la conversión de la mayoría de tipos de objetos entre Javascript y Java y viceversa por el usuario, por ejemplo Arrays (para las propiedades multivalor), números, fechas, booleanos, y cadenas de caracteres. Los códigos de conversión han sido mejorados en la versión de Alfresco 2.1 y es capaz de manejar todos las conversiones de tipos comunes y listas recursivas de esos tipos.

  • name: Una propiedad de ayuda para acceder a name. Es un atajo de properties.name.
  • content: El contenido de texto de un nodo puede ser modificado estableciendo esta propiedad (mynode.content = mynode.content + "añadiendo un poco de texto"). Esto es muy potente ya que permite cambiar el contenido del nodo desde el script. De cualquier nodo es recomendado que los nodos con contenido binario no sean manipulados de esta forma.
  • ScriptNode createFile(string name): Crea un nuevo nodo de fichero (cm:content) con el nombre especificado e hijo del nodo actual. El nuevo nodo creado es devuelto como resultado de la función, o una execpción lanzada si esta creación falla. Alfresco pone el tipo mime del fichero de el contenido (con la función createnode no hay tipo mime).
var mifichero = userhome.createFile("nuevofichero.txt");
  • ScriptNode createFolder(string name): Crea un nuevo nodo carpeta (cm:folder) con el nombre especificado como hijo del nodo actual. El nuevo nodo creado es devuelto como resultado de la función, o una excepción lanzada si esta creación falla.
var micarpeta = userhome.createFolder("Nueva Carpeta");
  • ScriptNode createNode(string name, string type): Crea un nuevo nodo con el nombre especificado del tipo especificado. Este tipo se especifica con su Qname ya se en su forma completa o corta. El nuevo nodo creado es devuelto como resultado de la función, o una excepción lanzada si esta creación falla.
var nodo  = userhome.createNode("micarpeta", "cm:folder");
  • ScriptNode createNode(string name, string type, string assocType): Crea un nuevo nodo del tipo especificado como hijo del nodo actual según el tipo de asociación hijo especificada. Este tipo de asociación se especifica con su Qname ya se en su forma completa o corta.
var nodo  = miforo.createNode("Mi Discusion", "fm:forum", fm:discussion");
  • ScriptNode createNode(string name, string type, Array properties): Crea un nuevo nodo del tipo especificado como hijo del nodo actual y con las propiedades especificadas en el parámetro properties. Esta propiedad es un array asociativo con las propiedades que deben ser añadidas al nodo después de la creación (es util cuando se tiene un tipo con propiedades obligatorias que debemos rellenar).
  • ScriptNode createNode(string name, string type, Array properties, string assocType): Crea un nuevo nodo como un hijo del nodo actual con la asociación hijo que se indica y con las propiedades que se especifican.
  • addNode(ScriptNode node): Añade un nodo existente como hijo del actual.
  • removeNode(ScriptNode node): Elimina todas las asociaciones padre/hijo existentes entre dos nodos. El nodo hijo será eliminado en cascada si una de las asociaciones era su asociación hijo primaria,esto es, la cual con la que el nodo fue creado.
  • createAssociation(ScriptNode target, string assocType): Crea una nueva asociación entre pares del tipo definido por el QName dado con el nodo especificado.
  • removeAssociation(ScriptNode target, string assocType): Borra una asociación entre pares del tipo definido por el QName dado con el nodo especificado.
  • boolean remove(): Borra el nodo. Devuelve verdadero (true) si tiene éxito y falso (false) sino
minodo.remove();
  • ScriptNode copy(ScriptNode destination): Se copia el nodo al destino especificado. Se devolverá la instancia recien copiada del ScriptNode se devolverá si se tiene exito sino se devolverá un nulo. Los hijos del nodo fuente no se copiarán.
  • ScriptNode copy(ScriptNode destination, boolean deepCopy): Se copia el nodo al destino especificado. Se devolverá la instancia recien copiada del ScriptNode se devolverá si se tiene exito sino se devolverá un nulo. Los hijos del nodo fuente no se copiarán. Si el argumento deepCopy es verdadero (true) todos los nodos hijos se copiarán, sino solo el nodo fuente será copiado.
var docCopiado = document.copy(userhome);
  • boolean move(ScriptNode destination): Se mueve el nodo al nuevo destino padre. Devuelve verdadero (true) si se tiene exito, faldo en otro caso.
  • boolean addAspect(string aspect): Se añade un nuevo aspecto al nodo. Devuelve verdadero (true) si se tiene exito, faldo en otro caso. El parametro es el QName del aspecto que queremos añadir, en forma completa o corta.
document.addAspect("cm:translatable");
  • boolean addAspect(string aspect, Array properties): Se añade un nuevo aspecto al nodo. Esta funcionalida permirte que se puedan proporcionar el valor de las propiedades obligatorias al aplicar el nuevo aspecto. El argumento propiedades debe ser un array asociativo de propiedades definidas por QName.
var props = new Array(1);
props["cm:template"] = myTemplateNode.nodeRef;
document.addAspect("cm:templatable", props);
  • boolean removeAspect(string aspect): Elimina el un aspecto de un nodo.

ScriptContent API

El ScriptContent API proporciona varias propiedades y funciones relativas a propiedades de nodos del tipo d:content, por ejemplo, document.properties.content.

  • content: Un valor de lectura y escritura que representa el contenido como una cadena.
  • write(ScriptContent content): Copia el contenido desde un ScripContent especifico (disponible desde la versión 2.1).
  • mimetype: Un valor de cadena de caracteres de lectura y escritura que representa el tipo mime del contenido.
  • encoding: Un valor de cadena de caracteres de lectura y escritura que representa la codificación del contenido.
  • size: Un valor de solo lectura que representa el tamaño del contenido.
  • url: Una cadena de caracteres de solo lectura que representa la url de descarga del contenido.
  • downloadUrl: Una cadena de caracteres de solo lectura que representa la url de descarga (como adjunto) del contenido.

API de Permisos y Seguridad

Las API de ScriptNode implementa varias funciones y propiedades relacionadas con los permisos en el repositorio. Normalmente siempre se deben comprobar si los permisos sobre un nodo son los apropiados antes de intentar modificarlo.

  • boolean hasPermission(string permission): Devuelve verdadero si el usuario tiene los permisos especificados sobre el nodo. Los permisos por defecto se encuentran en org.alfresco.service.cmr.security.PermissionService. Los permisos mas comprobados suelen ser "Read", "Write", "Delete" and "CreateChildren".
  • String[ ] getPermissions(): Devuelve un array de cadenas de caracteres con los permisos asociados a un nodo. Las cadenas devueltas tienen el formato [ALLOWED|DENIED];[USERNAME|GROUPNAME];PERMISSION, por ejemplo ALLOWED;kevinr;Consumer, así pueden ser facilmente separadas en permisos unicos usando como token de separación el caracter ';'.
  • boolean inheritsPermissions(): Devuelve verdadero si el nodo actual hereda sus permisos desde su spacio padre y falso para indicar que los permisos han sido asignados especificamente en para el nodo.
  • void setInheritsPermissions(boolean inherit): Cuando se pasa por parametro true indica que el nodo debe heredar los permisos de su nodo padre. Cuando se pasa false se rompe la herencia en cadena de permisos.
  • void setPermission(string permission): Aplica un permiso para TODOS los usuarios al nodo.
  • void setPermission(string permission, string authority): Aplica un permisio para la authority especificada (e.g. nombre de usuario o grupo) al nodo.
  • void removePermission(string permission): Quita un permiso del nodo para TODOS los usuarios.
  • void removePermission(string permission, string authority): Quita un permiso del nodo para la authority especificada (e.g. nombre de usuario or grupo).
  • void setOwner(String userId): Asigna un propietario al nodo.
  • void takeOwnership(): Toma posesion de un nodo.
  • String getOwner(): Obtiene el propietario del nodo (como un uid).
  • owner: El propietario del nodo (como un uid).

API de Protección/Desprotección

La API ScriptNode de protección/desprotección implementa métodos para realizar desproteciones, proteciones y cancelar desprotecciones de copias de trabajo. Hay que tener en cuenta que es posible que se desee añadir el aspecto cm:versionable a un nodo antes de desprotegerlo si se desea que se grabe el histórico de versiones cuando se usen estos métodos.

  • ScriptNode checkout(): Realiza una desprotección del nodo devolviendo el nodo de copia de trabajo resultante.
  • ScriptNode checkout(ScriptNode destination): Realiza la desproteción del nodo especificado por el parámetro destination devolviendo el nodo de copia de trabajo resultante.
  • ScriptNode checkin(): Realiza una operación de proteción sobre un nodo de copia de trabajo. El estado actual de la copia de trabajo es copiada en el nodo original lo que incluirá cualquier contenido actualizado en el nodo de trabajo. Devuelve el nodo original que había sido anteriormente desprotegido. Este método solo puede ser llamado en un nodo de copia de trabajo.
  • ScriptNode checkin(String history): Realiza una operación de protección sobre un nodo de copia de trabajo aplicando la descripción de la versión definida en el parámetro history. Este método solo puede ser llamado en un nodo de copia de trabajo.
  • ScriptNode checkin(String history, boolean majorVersion): Realiza una operación de protección sobre un nodo de copia de trabajo aplicando la descripción de la versión definida en el parámetro history y un incremento o decremento de versión según se requiera. Este método solo puede ser llamado en un nodo de copia de trabajo.
  • ScriptNode cancelCheckout(): Cancela la desproteción de un nodo de trabajo. La copia de trabajo se borrara y cualquier cambio que se hiciese se perdará. Este método solo puede ser llamado en un nodo de copia de trabajo. Cualquier referencia a esta copia de trabajo nodo debe ser desechada. Devuelve el nodo original que había sido anteriormente desprotegido.

API de Versiones*

Los API ScriptNode de versiones implementa funciones y metodos para realizar el mantenimiento y recuperar las versiones de un documento.

  • isVersioned*: Propiedad de Solo Lectura para determinar si un documento esta versionado.
  • ScriptVersion[ ] versionHistory*: Propiedad de Solo Lectura para listar todas las versiones del documento (de forma descendente por fecha de creación).
  • ScriptVersion getVersion(label)*: Recupera la versión de un documento identificado por 'label', devuelve null si la etiqueta no existe.
  • ScriptVersion createVersion(history, major)*: Crea una versión del documento actual.

La API ScriptVersion representa una version especifica de un documento.

  • createdDate*: Propiedad de Solo Lectura que representa la fecha en la que se ha creado la versión del documento.
  • creator*: Propiedad de Solo Lectura que representa el nombre del usuario de la persona que ha creado la versión.
  • label*: Propiedad de Solo Lectura que representa la etiqueta label.
  • type*: Propiedad de Solo Lectura que representa el tipo de versión ("MAYOR", "MENOR").
  • description*: Propiedad de Solo Lectura que representa la descripción( historico de comentarios ) de la versión.
  • nodeRef*: Propiedad de Solo Lectura que representa el nodo de referencia del documento que esta versionado.
  • ScriptNode node*: Propiedad de Solo Lectura que representa el nodo de la version.

*Disponible a partir de la versión 3.0.

API de Transformación

Las siguientes funciones ScriptNode hacen uso de los servicios de transformación de documentos disponibles en Alfresco. El servicio OpenOffice es necesario para algunas de las transformaciones.

  • ScriptNode transformDocument(string mimetype): Transforma un documento a un nuevo tipo mime. Se hace una copia del documento y se cambia su extensión para encajar con su nuevo tipo, entonces se aplica la transformación. Si la transformación tiene éxito se devuelve el nodo del documento transformado en caso contrario se devuelve null.
  • ScriptNode transformDocument(string mimetype, ScriptNode destination): Transforma un documento a un nuevo tipo mime . Se hace una copia del documento en la carpeta destino especificada y se cambia su extensión para encajar con su nuevo tipo, entonces se aplica la transformación. Si la transformación tiene éxito se devuelve el nodo del documento transformado en caso contrario se devuelve null.

Las siguientes funciones hacen uso de los servicios de transformación de imágenes disponibles en Alfresco. Se necesita que el componente ImageMagick este correctamente instalado y funcionando. Hay que tener en cuenta que se puede encontrar información detallada de las opciones de ImageMagick mencionadas a continuación en la web de ImageMagick.

  • ScriptNode transformImage(string mimetype): Transforma una imagen a un nuevo formato. Se hace una copia de la imagen y se cambia su extensión para encajar con su nuevo tipo, entonces se aplica la transformación. Si la transformación tiene éxito se devuelve el nodo de la imagen transformada en caso contrario se devuelve null.
  • ScriptNode transformImage(string mimetype, string options): Transforma una imagen a un nuevo formato, aplicando las opciones ImageMagick suministradas. Se hace una copia de la imagen y se cambia su extensión para encajar con su nuevo tipo, entonces se aplica la transformación. Si la transformación tiene éxito se devuelve el nodo de la imagen transformada en caso contrario se devuelve null.
  • ScriptNode transformImage(string mimetype, ScriptNode destination): Transforma una imagen a un nuevo formato. Se hace una copia de la imagen en la carpeta destino especificada y se cambia su extensión para encajar con su nuevo tipo, entonces se aplica la transformación. Si la transformación tiene éxito se devuelve el nodo de la imagen transformada en caso contrario se devuelve null.
  • ScriptNode transformImage(string mimetype, string options, ScriptNode destination): Transforma una imagen a un nuevo formato, aplicando las opciones ImageMagick suministradas. Se hace una copia de la imagen en la carpeta destino especificada y se cambia su extensión para encajar con su nuevo tipo, entonces se aplica la transformación. Si la transformación tiene éxito se devuelve el nodo de la imagen transformada en caso contrario se devuelve null.

Las siguientes funciones hacen uso de los servicios de procesamiento de plantillas de Freemarker disponible en Alfresco.El resultado de la ejecución de la plantilla es devuleto por cada función como una cadena de caracteres. Hay que tener en cuenta que el nodo se usa como contexto en la plantilla. Si el nodo es un documento será inicializado como contexto del objeto 'document' para la plantilla y su espacio padre inicializado como contexto del objeto 'space' para la plantilla. Si es una carpeta sera solo inicializado como contexto del objeto 'space' para la plantilla. Una lista de argumentos puede ser también pasada al la plantilla y estará disponible como el objeto 'args'.

  • string processTemplate(ScriptNode template): Ejecuta una fichero de plantilla FreeMarker contra un nodo. El nodo será usado como contexto para el objeto 'documen' o 'space' en el modelo de ejecución de plantillas por defecto. El resultado de la ejecución de la plantilla es devuelto como una cadena de texto.
  • string processTemplate(ScriptNode template, Array args): Ejecuta una fichero de plantilla FreeMarker contra un nodo, se pasan los argumentos suministrados como un array de pares nombre/valor al template. El nodo será usado como contexto para el objeto 'documen' o 'space' en el modelo de ejecución de plantillas por defecto. El resultado de la ejecución de la plantilla es devuelto como una cadena de texto.
  • string processTemplate(string template): Ejecuta una plantilla FreeMarker contra un nodo. La plantillas se suministra directamente como una cadena. El nodo será usado como contexto para el objeto 'documen' o 'space' en el modelo de ejecución de plantillas por defecto. El resultado de la ejecución de la plantilla es devuelto como una cadena de texto.
  • string processTemplate(string template, Array args): Ejecuta una plantilla FreeMarker contra un nodo, se pasan los argumentos suministrados como un array de pares nombre/valor al template. La plantillas se suministra directamente como una cadena. El nodo será usado como contexto para el objeto 'documen' o 'space' en el modelo de ejecución de plantillas por defecto. El resultado de la ejecución de la plantilla es devuelto como una cadena de texto.

API Thumbnailing*

En Alfresco 3.0 un nuevo Repósitorio y el servicio REST para thumbnailing automático de contenido están disponibles. El objeto ScriptNode ha sido ampliado para permitir al acceso de JavaScript a operaciones CRUD para thumbnailing.

*Disponible a partir de la versión 3.0

API Tagging*

En Alfresco 3.0 un nuevo Repósitorio y el servicio de REST para Web 2.0 contenido está disponible. El objeto ScriptNode ha sido ampliado para permitir al acceso de JavaScript a operaciones CRUD para la marcación.

*Disponible a partir de la versión 3.0

Varias Funciones y Propiedades de la API ScriptNode API

  • boolean hasAspect(string type): Devuelve true si un aspecto está aplicado al nodo. Por ejemplo: var esPlantilla = document.hasAspect("cm:templatable");
  • boolean specializeType(string type): Especializa el tipo de un nodo. Devuelve true si tiene éxito y false si no. El nombre del tipo suministrado debe ser un sub-tipo del tipo actual según lo definido en el Diccionario de Datos.

API de Búsqueda

La API de Búsqueda proporciona acceso directo a resultados de búsquedas Lucene a nivel de repositorio y Búsquedas Almacenadas . Es accesible a través del objeto de ámbito raiz 'search'. Hay que tener en cuenta que las búsquedas locales pueden ser realizadas usando las APIs ScriptNode childByNamePath and childByXPath como se detallo antes.

El objeto de búsqueda es parte del ambito raiz disponible para los escritores de scripts. La API proporciona las siguientes funciones:

  • Array luceneSearch(string query): Devuelve un array de objetos ScriptNode que son encontrados mediante una búsqueda completa del repositorio de Alfresco, por ejemplo: var nodos = search.luceneSearch("TEXT:alfresco");
  • Array xpathSearch(string xpath): Devuelve un array de objetos ScriptNode que son encontrados mediante una búsqueda xpath del repositorio de Alfresco
  • Array savedSearch(ScriptNode node): Devuelve un array de objetos ScriptNode que son encontrados ejecutando la Búsqueda Almacenada referenciada por el objeto node pasado como parámetro.
  • Array savedSearch(NodeRef noderef): Devuelve un array de objetos ScriptNode que son encontrados ejecutando la Búsqueda Almacenada referenciada por la cadena noderef suministrada.
  • ScriptNode findNode(NodeRef noderef): Devuelve un único ScriptNode especificado por el NodeRef para ese nodo. Devuelve null si la búsqueda falla.
  • ScriptNode findNode(string noderef): Devuelve un único ScriptNode especificado por la forma de cadena del NodeRef para ese nodo. Devuelve null si la búsqueda falla.
  • Array luceneSearch(string store, string query)*: Devuelve un array de objetos ScripNode que seran el resultado de la búsqueda del texto completo en el repositorio de Alfresco. Por ejem: var nodes = search.luceneSearch("workspace://sitestore", "TEXT:site");
  • Array luceneSearch(string query, string sortColumn, boolean asc)*: Devuelve un array de ScriptNode satisfaciendo la ordenación en el criterio de búsqueda por una columna especifica y la ordenación ( true => orden ascendente, false => orden descendente ). Por ejem: var nodes = search.luceneSearch("TEXT:alfresco", "@cm:modified", false);
  • Array luceneSearch(string store, string query, string sortColumn, boolean asc)*: Devuelve un array de ScriptNode satisfaciendo el criterio de búsqueda y ordenando el store obtenido.
  • Array xpathSearch(string store, string xpath)*: Devuelve un array de objetos ScriptNode que son encontrados en el repositorio de Alfresco mediante una búsqueda XPath.
  • ScriptNode findNode(string referenceType, string[ ] reference)*: Ayudante para convertir una solicitud URL de un Web Script a NodeRef. ReferenceType puede ser uno de los nodos, la ruta, avmpath o QName.

*Disponible a partir de la versión 3.0

People API

La People API proporciona acceso a los usuarios y grupos de Alfresco. La API proporciona las siguientes funciones:

  • ScriptNode getPerson(string username): Devuelve un nodo (cm:person) asociado con el nombre de usuario especificado. Devuelve null si el usuario no existe.
  • ScriptNode getGroup(string groupname): Devuelve un nodo (usr:authorityContainer) asociado con el nombre de grupo especificado. Devuelve null si no existe.
  • deleteGroup(ScriptNode group): Elimina un Grupo del sistema.
  • ScriptNode createGroup(String groupName): Crea un nuevo grupo de primer nivel. El parámetro groupname es el nombre único del grupo a crear.
  • ScriptNode createGroup(ScriptNode parentGroup, string groupName): Crea un nuevo Grupo como hijo del nodo grupo padre especificado. Este nodo puede ser null para crear un grupo de primer nivel.
  • addAuthority(ScriptNode parentGroup, ScriptNode authority): Añade una autoridad (Usuario o Grupo) al Grupo padre especificado.
  • removeAuthority(ScriptNode parentGroup, ScriptNode authority): Elimina una autoridad de un Grupo.
  • Array getMembers(ScriptNode group): Devuelve un Array de nodos people que pertenencen al grupo especificado (incluyendo sub-grupos)
  • Array getMembers(ScriptNode group, boolean recurse): Devuelve un Array de nodos people que pertenecen al grupo especificado. Los nodos de los sub-grupos solo se devuelven si se especifica como true el parámetro recurse.
  • Array getContainerGroups(ScriptNode person): Obtiene el grupo que contiene la autoridad especificada.
  • ScriptNode createPerson(String username)*: Crea una persona (cm:person) con el nombre de usuario dado. Devuelve el nodo de la persona creada o null si el usuario ya existe.
  • boolean isAdmin(ScriptNode person)*: Devuelve true si el usuario usuario especificado tiene Derechos de Administrador.

*Disponible a partir de la versión 3.0

Actions API

Un objeto de nivel raíz 'actions' se proporciona para permitir la invocación de Acciones de Alfresco registradas en el Repositorio.

  • registered: Devuelve un array de cadenas de caracteres que representan los nombres de todas las Acciones registradas.
  • ScriptAction create(String name): Devuelve la acción para un nombre dado. Si el nombre de acción no esta registrado se devuelve un null.

ScriptAction API

Un ScriptAction representa una Acción Alfresco registrada con el Repositorio.

  • name: Devuelve el nombre de la acción.
  • parameters: Un array asociativo de los parámetros para la accion. Por ejemplo: mail.parameters.subject. Cada parámetro es identificado por una cadena de caracteres. Se podrá añadir nuevos parámetros o modificar los existentes.
  • execute(ScriptNode node): Ejecuta la acción contra el nodo especificado. Esta acción (y sus parametros) puede se reutilizada contra muchos nodos invocando repetidamente la acción execute. Entre invocaciones, los parámetros de la acción pueden cambiar. Un ejemplo de ejecución de la acción "mail" sería:
// crear la accion mail
  var mail = actions.create("mail");
  mail.parameters.to = "davidc@alfresco.com";
  mail.parameters.subject = "Hola desde JavaScript";
  mail.parameters.from = "davidc@alfresco.com";
  mail.parameters.template = root.childByNamePath("Company Home/Data Dictionary/Email Templates/notify_user_email.ftl");
  mail.parameters.text = "insertamos algo de texto, por si no se encuentra la plantilla";
  // ejecutar la accion contra un documento   
  mail.execute(doc);

API de Logging

Un objeto 'logger' de nivel raíz proporciona funcionalidad para ayudar en la depuración de los scripts.

  • boolean isLoggingEnabled(): Devuelve true si el logging esta habilitado. Para habilitar el logging la categoría Log4J de log4j.logger.org.alfresco.repo.jscript debe ser fijada como DEBUG. Esto se debe hacer en el fichero log4j.properties (TomCat) o el fichero log4j.xml (JBoss) en el servidor Alfresco.
  • void log(string): Inserta en el fichero de log la cadena pasada por parámetro.

API de Sesion

Un objeto 'session' de nivel raíz proporciona acceso al ticket de sesión del usuario actualmente logado como una cadena de caracteres.

  • ticket: Obtiene el actual ticket de autenticación.
  • string getTicket(): Obtiene el actual ticket de autenticación.

API de Clasificacion

La API se divide en dos partes: la manipulación de de las clasificaciones y la manipulación de las categorías que contienen. Se proporciona un objeto de nivel raiz 'classification' para devolver los nodos de categorías. Los objetos CategoryNode devueltos por las funciones son extensiones del modelo estandar ScriptNode de JavaScript incluyendo la manipulación de las categorías.

  • CategoryNode[ ] getAllCategoryNodes(String aspect): Obtiene un array de todos los nodos categoria de una clasificación dada.
  • string[ ] getAllClassificationAspects(): Obtiene un array de todos los QNames (en formato prefijo:nombreLocal).
  • CategoryNode createRootCategory(string aspect, string name): Crea un nuevo nodo raiz en una clasificación dada.
  • CategoryNode[ ] getRootCategories(string aspect): Obtiene un array todos los nodos raíz para una clasificación dada.

La API del objeto CategoryNode

 

  • boolean isCategory: Soportado por todos los tipos de nodo. Es true si es un nodo de categoría y false si es cualquier otro tipo de nodo.
  • CategoryNode[ ] categoryMembers: Obtiene un array de todos los miembros de esta categoría a cualquier nivel de profundidad.
  • CategoryNode[ ] subCategories: Obtiene un array de todas las subcategorías de esta categoría a cualquier nivel de profundidad.
  • CategoryNode[ ] membersAndSubCategories: Obtiene un array de todos los miembros y las subcategorías de esta categoría a cualquier nivel de profundidad.
  • CategoryNode[ ] immediateCategoryMembers: Obtiene un array con todos los miembros directos de esta categoría (solo miembros directos no los que sean miembros a través de subcategorías).
  • CategoryNode[ ] immediateSubCategories: Obtiene un array con todos las subcategorías directas de esta categoría (solo subcategorías directas no las que lo sean a través de subcategorías).
  • CategoryNode immediateMembersAndSubCategories: Obtiene un array con todos los miembros y las subcategorías directas de esta categoría (solo miembros y subcategorías directos no las que lo sean a través de subcategorías).
  • CategoryNode createSubCategory(String name): Crear una nueva subcategoría a partir del actual nodo de categoría.
  • removeCategory(): Borrar el actual nodo de categoría.

API de AVM

La API de Maquina de Versionado de Alfresco (Alfresco Versioning Machine - AVM) proporciona acceso a los almacenes de Gestion de Contenido Web (WCM) y sus ficheros y carpetas asociados. Un proyecto WCM esta dividido en "stores" tales como el directorio fuente (Staging Store) y varios directorios de desarrollo (User Sandbox) ademas de los nodos hijos de estos.

  • avm.stores: Devuelve un Array con todos los objetos store en la AVM.
  • avm.lookupStore(storeid): Función que devuelve el objeto store qdado un id específico.
  • avm.lookupStoreRoot(storeid): Función que devuelve el nodo raiz dado un nodo específico.
  • avm.lookupNode(path): Función que devuelve un único nodo AVM dada la ruta completa hacia el nodo incluyendo el store.
  • avm.webappsFolderPath: Devuelve la ruta hacia la carpeta de la aplicación web AVM para el store.

API de los objetos AVM Store

Los objetos Store devueltos por los métodos anteriores tienen la siguiente API adicional:

  • store.id: ID interna del store.
  • store.name: Nombre del store.
  • store.creator: Usuario que creo el store.
  • store.createdDate: Fecha de creación del store.
  • store.lookupRoot: Devuelve el nodo raíz del store.
  • store.lookupNode(path): Función que devuelve un nodo AVM con el store dada la ruta relativa de este (relativa al directorio raíz de la aplicación web AVM).
  • store.luceneSearch(query): Función que ejecuta una búsqueda Lucene en el store y devuelve como resultado un Array de nodos AVM.

API de los objetos Node

Los objetos AVM node devueltos por las funciones anteriores extienden el objeto ScriptNode tal y como se detalla a continuación. Tiene ademas la siguiente API adicional.

  • node.version: Versión del nodo.
  • node.path: Ruta AVM Totalmente Cualificada al nodo.
  • node.parentPath: Ruta AVM Totalmente Cualificada al padre del nodo.
  • node.isDirectory: Devuelve true si este nodo AVM es un directorio.
  • node.isFile: Devuelve true si este nodo AVM es un fichero.
  • node.isLocked: Devuelve true si el nodo esta actualmente bloqueado.
  • node.isLockOwner: Devuleve true si el nodo esta bloqueado y el usuario actual es el que lo ha bloqueado(lock owner).
  • node.hasLockAccess: Devuelve true si este usuario puede realizar operaciones sobre el nodo cuando esta bloqueado. Será true si el el ítem esta desbloqueado o esta bloqueado y el usuario actual es el lock owner o esta bloqueado y el usuario actual tiene un rol de Content Manager en el proyecto web asociado.
  • node.rename(nombre): Renombra el nodo (esta es una operación especial en la AVM, no puede ser realizada simplemente cambiando el valor de la propiedad cm:name).

Copia cruzada de Repositorios

Se proporciona el objeto de nivel raíz 'crossRepoCopyroot' para habilitar la copia de nodos entre los espacios de gestión documental (ADM) y los espacio WCM (AVM).

  • ScriptNode copy(ScriptNode fuente, ScriptNode destino, String nombre): Copia el nodo fuente al directorio destino especificado. La fuente y el destino pueden estar en cualquier store de los repositorios tal como un AVM Store o el SpaceStore. Cuando se copia entre stores de diferentes tipos el aspecto y las propiedades del nodo permanecerán intactos pero el tipo de nodo podría ser bajado de categoría y todas las asociaciones se perderán.

Funciones de Utilidades

Se proporciona un objeto de nivel raíz 'utils' como una librería de funciones de ayuda que no están en el JavaScript genérico.

  • string pad(s, length): Rellena una cadena con ceros por la izquierda hasta una longitud dada y devuelve la nueva cadena.
  • ScriptNode getNodeFromString(noderef)*: Devuelve un ScriptNode, Representa el NodeRef suministrado mediante una cadena. Nota,no se comprueba que el nodo exista en el repositorio.
  • boolean toBoolean(string)*: devuelve un objeto booleano del valor de la cadena.

*Disponible a partir de la versión 3.0

Contenidos relacionados