accion para comprobar modificacion de propiedad

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

accion para comprobar modificacion de propiedad

Buenas, como podria crear una acción que se ejecute cuando se modifique una propiedad de un documento, pero solamente cuando se modifique la propiedad que yo especifique? y que no se ejecute si se modifica cualquier otra.
Se como ejecutarla si se modifica cualquier propiedad, pero no una en concreto.

gracias y saludos.
8 Replies
pjcaracuel_2349
Active Member II

Re: accion para comprobar modificacion de propiedad

Buenas,

Yo de programacion no es que ande muy sobrado, pero me imagino que si extiendes esta clase, podras programarla como tu desees.
org.alfresco.repo.rule.ruletrigger.RuleTriggerAbstractBase.OnPropertyUpdateRuleTrigger

Saludos
ditmgl
Member II

Re: accion para comprobar modificacion de propiedad

Otra opcion:

Implementar un Behaviour que cuando se realice un OnUpdateProperties compruebe si la propiedad modificada es la que tu quieres y que realice lo que quieras. Para comprobar si la propiedad modificada es la que deseas obten los valores de la propiedad de los map "after" y "before" y si son distintos entonces es que han cambiado la propiedad que buscas.

Mira en la wiki para informarte más sobre estos metodos, no te preocupes, en principio lo que dices es bastante facil de hacer.
giorgio
Member II

Re: accion para comprobar modificacion de propiedad

Hola Pedro, no pero creo que no van por ahi los tiros, yo lo que quiero es que una accion que tengo sobre un directorio, solamente se ejecute cuando modifico cierta propiedad de los ficheros que contiene, no se si me explico.

Saludos.
giorgio
Member II

Re: accion para comprobar modificacion de propiedad

Otra opcion:

Implementar un Behaviour que cuando se realice un OnUpdateProperties compruebe si la propiedad modificada es la que tu quieres y que realice lo que quieras. Para comprobar si la propiedad modificada es la que deseas obten los valores de la propiedad de los map "after" y "before" y si son distintos entonces es que han cambiado la propiedad que buscas.

Mira en la wiki para informarte más sobre estos metodos, no te preocupes, en principio lo que dices es bastante facil de hacer.

Hola ditmgl, un Behaviour, a que te refieres? que es? una tarea programada? te refieres a eso?,
en el propio script de la acción no puedo acceder al valor de la propiedad antes y despues? para saber si se ha modificado la que yo quiero?
con el  "after" y "before" ese?

la idea seria en el script de la acción poder hacer un if(se ha modificado la propiedad "nombre"?){
     entonces ejecuto workflow;
} else {
   te quedas quieto.
}

Gracias y saludos.
pjcaracuel_2349
Active Member II

Re: accion para comprobar modificacion de propiedad

Si lo coji, a ver, en la ultima version de Alfresco, creo que la 3.1, he leido que te permite ejecutar reglas en funcion de valores de metadatos (bien es cierto que aun no he mirado como, pero eso es lo que dicen). Pero claro no se como funcionara en la actualizacion

Lo de ejecutar una regla en un espacio en funcion de que se cambie el valor de un metadato, solo se me ocurre bien con lo que te he puesto o bien, definir una regla de tipo Update y ejecutar un script que evalue si se ha modificado cierto valor en un metadato y en funcion de que si, pues lo que quieras realizar(esto si que lo veo mas complicado) pero por intentarlo…..

La opcion planteada por ditmgl tambien la veo facil de implementar, no necesitas reglas, solo comprobar la variacion del valor, y si es por ejecutarse en un espacio determinado pos nada, otra condicion mas a la hora de evaluar….

En este tutorial se explica bastante bien
http://ecmarchitect.com/images/articles/alfresco-behavior/behavior-article.pdf

Saludos
giorgio
Member II

Re: accion para comprobar modificacion de propiedad

Hola, para implementar un behavior parece que necesito tener montado alfresco como proyecto en eclipse, cosa que no tengo montada y no se como se haria, primero tendria que montarmelo, si es facil podria intentarlo. teneis algun vínculo por ahi? auque lo intenté una vez y no lo conseguí.tambien por falta de tiempo, y por que no soy muy diestro con eclipse, suelo usar netbeans, y no encontré un tuto para netbeans.
Intentaré inventar la manera de hacerlo desde el script de momento.

Gracias y saludos.
ditmgl
Member II

Re: accion para comprobar modificacion de propiedad

Hola, para implementar un behavior parece que necesito tener montado alfresco como proyecto en eclipse, cosa que no tengo montada y no se como se haria, primero tendria que montarmelo, si es facil podria intentarlo. teneis algun vínculo por ahi? auque lo intenté una vez y no lo conseguí.tambien por falta de tiempo, y por que no soy muy diestro con eclipse, suelo usar netbeans, y no encontré un tuto para netbeans.
Intentaré inventar la manera de hacerlo desde el script de momento.

Gracias y saludos.

Intentaria explicartelo, pero no piloto el eclipse  Smiley Surprisedops: , consegui meter los poryectos en el eclipse despues de mucho ensayo y error, te recomiendo que te leas elenlace en la wiki http://wiki.alfresco.com/wiki/Alfresco_on_Eclipse y despues de bajarte el svn, importa los proyectos en el eclipse de uno en uno y compilalos segun los metes, te evitara dolores de cabeza.

En cuanto al los behaviours son como unas "reglas" que se aplican a todos los archivos del repositorio y que se disparan cuando se cumplen una (o varias, segun lo implementes) condiciones. El tutorial que ha puesto pjcaracuel esta muy bien, con ese aprendí a usar los Behaviours. Yo soy un poco pesado con esto de los behaviours pero la verdad que es de gran utilidad cuando los dominas (una vez haces uno el resto son casi iguales  Smiley Very Happy ).

EDITO: por si te animas, cuando usas un OnUpdateProperties, recibes un nodeRef, y dos maps (java.map) con los datos que tenian las propiedades del nodo "before" (antes de ser modificado) y "after" (despues), si lees los mapas, puedes ver si tu propiedad ha sido modificada con un if como tu querias.

Otra cosa que se me ha ocurrido que quizas podria servirte es la Api de javascript. La API de javascript consiste en crear códigos de javascript que los guardas en data dictionary/scripts y cuando creas una regla para un espacio, puedes elejirlos para utilizarlos. La clave esta en que los javascrips de Alfresco tienen una serie de funciones muy utiles, además de poder acceder a las propiedades de los nodos simplemente utilizando notacion punteada. No se si podras conseguir algo pero si te atascas quizas merezca la pena hecharle un vistazo.

Te pongo un enlace a las funciones de la API para que heches un vistazo http://wiki.alfresco.com/wiki/JavaScript_API_For_Alfresco_1.4_and_2.0 y hay muchos ejemplos tanto en la wiki como en la capeta scripts del alfresco.

PD:de parte de mi compañero http://wiki.alfresco.com/wiki/Alfresco_on_NetBeans.

Un saludo.
giorgio
Member II

Re: accion para comprobar modificacion de propiedad

Buenas, finalmente he conseguido saber si he modificado la propiedad requerida de la siguiente, manera

me he creado una nueva propiedad que actuará como control, en el tipo, llamada my:control

entonces en el script que tengo sobre el spacio, hago la siguiente comprobación y ejecuto o no el código, y si se ejecuta el código
guardo el valor de la propiedad requerida dentro de la nueva my:control, de manera que la siguiente vez que se ejecute el update
si no modifico la propiedad requerida, no se ejecutará el codigo ya que la propiedad requerida y la propiedad my:control, serán iguales en ese momento.

if((document.properties["my:control"])==(document.properties["my:haciadonde"])){
}else{
var workflow = actions.create("start-workflow");
workflow.parameters.workflowName = "jbpm$wf:reviewpooled";
workflow.parameters["bpm:workflowDescription"] = document.name;
workflow.parameters["bpm:groupAssignee"] = people.getGroup("GROUP_"+document.properties["my:haciadonde"]);
document.properties["my:control"]=document.properties["my:haciadonde"];
document.save();
var futureDate = new Date();
futureDate.setDate(futureDate.getDate() + 7);
workflow.parameters["bpm:workflowDueDate"] = futureDate;
workflow.execute(document);
}

Por si le sirve a alguien, saludos.