Alfresco Share · Secuencia de eventos en la creación de un documento

/ / Blog, Digital Development, Document Management
alfresco share
keensoft participa en la Jornada de Web Semántica en Bibliotecas, Archivos y Museos de la Fundación Ramón Areces
Feedback & testing para smartphones

La programación de behaviours en Alfresco ha sido bien documentada, en especial gracias a los tutoriales para desarrolladores de Jeff Potts. Sin embargo, la mayoría del material disponible omite un análisis del flujo real de eventos que se produce en las operaciones que el usuario realiza de manera habitual en Alfresco Share.

A continuación se incluye un esquema que refleja este flujo de eventos para la operación de subida de un nuevo documento en Alfresco 4.2.e.

alfresco-behaviour-cd

Como se observa, existen eventos que se producen en primer plano (foreground) mientras que otros eventos son lanzados por Alfresco en segundo plano (background).

Analicemos a continuación el detalle de cada uno de los bloques enumerados, completando la traza de ejecución con eventos tachados que no son invocados por el servicio de nodos de Alfresco.

FOREGROUND

1. Create node

beforeCreateNode: documentLibrary | contains | document.odt | content
onCreateNode: document.odt
beforeUpdateNode
onUpdateProperties: [name, node-dbid, store-identifier, node-uuid, modified, locale, created, store-protocol, creator, modifier]

onUpdateNode

Tras la creación del nodo se omite tanto el evento antes como el evento después de la actualización de propiedades básicas del nodo.

2. Create content

beforeUpdateNode
onUpdateProperties: [content]

onUpdateNode

beforeUpdateNode
onContentPropertyUpdate: content | contentUrl=store://2014/2/27/20/2/79030875-1fca-4739-9369-ecb6685000dc.bin|mimetype=application/vnd.oasis.opendocument.text|size=134673|encoding=UTF-8|locale=es_ES_
onContentUpdate: true
onUpdateProperties: [content]

onUpdateNode

La creación de contenido se realiza a través de dos bloques de actualización completos, el primero aparentemente vacío y el segundo en el que se establecen las propiedades del documento.

3. Create version

beforeUpdateNode
onUpdateProperties
onUpdateNode

beforeUpdateNode
onUpdateProperties: [autoVersionOnUpdateProps, autoVersion, initialVersion] onUpdateNode

beforeCreateVersion
onCreateVersion: {versionType=MAJOR}
beforeUpdateNode
onUpdateProperties: [versionLabel] onUpdateNode
afterCreateVersion: 1.0

La creación de la primera versión de documento comienza por un bloque incompleto de actualización del nodo. Después se crea la primera versión del nodo utilizando versionado mayor.

4. Update properties

beforeUpdateNode
onUpdateProperties: [title, author, modified, description] onUpdateNode

beforeUpdateNode
onUpdateProperties
onUpdateNode

Como último paso, se actualizan las propiedades que han sido extraídas del propio contenido y se termina con otro bloque de actualización incompleto. Hay que tener en cuenta que la primera versión, creada en el paso anterior, no incluirá estos valores. Por este motivo, en caso de que el usuario actualice alguno de ellos antes de crear la siguiente versión, se perderá la traza de estos valores.

BACKGROUND

5. Update properties

beforeCreateNode [document.odt | rendition | 9d228152-d13e-462e-a7c6-997c41ebbe88 | thumbnail
beforeUpdateNode
onUpdateProperties: [lastThumbnailModification]

onUpdateNode

Se actualiza la fecha de modificación del thumbnail en el documento que se acaba de crear.

6. Create node (temporal rendition)

onCreateNode doclib
beforeUpdateNode
onUpdateProperties: [name, node-dbid, store-identifier, node-uuid, modified, locale, created, contentPropertyName, store-protocol, creator, modifier] onUpdateNode

Se crea un nodo temporal para la generación del thumbnail, omitiendo de nuevo los eventos antes y después de la modificación de las propiedades iniciales.

7. Create content (temporal rendition)

beforeUpdateNode
onContentPropertyUpdate: content | null->contentUrl=store://2014/2/27/20/2/23dd7b70-c999-42f8-bff2-9de38fb54e66.bin|mimetype=image/png|size=2068|encoding=UTF-8|locale=es_ES_
onContentUpdate: true
onUpdateProperties: [content]

onUpdateNode

8. Create node (thumbnail)

beforeCreateNode documento.odt | rendition | doclib | thumbnail
onCreateNode 9c899bdb-6f4f-46af-a06d-f2792dbb0f89
beforeUpdateNode
onUpdateProperties: [isContentIndexed, name, node-dbid, store-identifier, node-uuid, modified, locale, created, store-protocol, creator, isIndexed, modifier]

onUpdateNode

Se crea el nodo de thumbnail definitivo con la omisión habitual en los procesos de creación.

9. Create content (thumbnail)

beforeUpdateNode
onContentPropertyUpdate: content | null->contentUrl=store://2014/2/27/20/2/23dd7b70-c999-42f8-bff2-9de38fb54e66.bin|mimetype=image/png|size=2068|encoding=UTF-8|locale=es_ES_
onContentUpdate: true
onUpdateProperties: [name, contentPropertyName, content]

onUpdateNode

10. Delete node (temporal rendition)

beforeUpdateNode
onUpdateProperties
onUpdateNode

beforeDeleteNode
onDeleteNode: false

Se elimina el nodo temporal, precedido por un intento de actualizar el thumbnail definitivo.

11. Update properties

beforeUpdateNode
onUpdateProperties
onUpdateNode

beforeUpdateNode
onUpdateProperties
onUpdateNode

beforeUpdateNode
onUpdateProperties: [thumbnailName]

onUpdateNode

La actualización de nombre final viene precedida por dos bloques de actualización incompletos.

Conclusiones

En un primer análisis de estas trazas, pueden observarse diferentes peculiaridades que deben ser tenidas en cuenta para la programación de behaviours en Alfresco:

  • El evento onUpdate debe utilizarse con cautela, ya que no sigue un patrón fijo de funcionamiento
  • En la versión 1.0 de un documento no se incluyen todos los datos que son mostrados a los usuarios

Este artículo cubre únicamente el estudio de eventos en la creación de un nuevo documento, por lo que resulta recomendable estudiar el comportamiento del resto de funcionalidades de Alfresco Share antes de realizar la programación de un behaviour a medida.

Unidad de negocio, keensoft