Diferencia entre revisiones de «Eventos»
(→Modificación de la función $guardar) |
(→Modificación de la función $guardar) |
||
Línea 61: | Línea 61: | ||
<p>Ahora será posible incluir un parámetro más, que será de tipo lógico, cuya utilidad será lanzar el código asociado al evento Al_guardar definido en el contenedor.</p> | <p>Ahora será posible incluir un parámetro más, que será de tipo lógico, cuya utilidad será lanzar el código asociado al evento Al_guardar definido en el contenedor.</p> | ||
<p>Este parámetro por defecto tendrá valor falso, de manera que cuando se ejecute $guardar, no se lanzará el código asociado al evento <code>Al_guardar</code>. Esto ocurrirá en caso de pasar verdadero como parámetro.</p> | <p>Este parámetro por defecto tendrá valor falso, de manera que cuando se ejecute $guardar, no se lanzará el código asociado al evento <code>Al_guardar</code>. Esto ocurrirá en caso de pasar verdadero como parámetro.</p> | ||
− | <p>Ahora bien, en caso de llamar a la función $guardar con el nuevo parámetro a verdadero, tendremos que fijarnos | + | <p>Ahora bien, en caso de llamar a la función $guardar con el nuevo parámetro a verdadero, tendremos que fijarnos que dicha función no se lanza desde el evento Al_guardar, pues esto provocaría un bucle infinito en la ejecución del código. De manera que no se podría dar una instrucción como la siguiente en la definición de un contenedor: |
+ | |||
+ | {{PR|tipo}} [Expediente] {{PR|es}} {RE|contenedor}} |
Revisión del 17:15 14 abr 2009
Contenido
¿Qué son los eventos en ODL?
Un evento en ODL es un hecho que puede acaecer a la hora de tratar con contenedores o tareas y que conlleva un cambio en el estado de un contenedor o una tarea.
En el caso de los contenedores, los eventos que se pueden producir son los siguientes:
- Al_crear
- Al_guardar
- Al_abrir
Y para el caso de las tareas:
- Al_crear
- Al_comenzar
- Al_finalizar
- Al_abandonar
¿Para qué sirven?
La utilidad que nos proporcionan los eventos es poder ejecutar código ODL, invocar métodos o lanzar plugins cuando se produce alguno de los eventos comentados en la sección anterior.
Es decir, primero se produce el evento, y luego se ejecuta o bien nuevo código ODL, un método o un plugin.
¿Cuál es su sintaxis?
Para definir un evento y especificar una acción a posteriori utilizaremos tres atributos que podremos combinar con todos aquellos eventos que hemos visto, ya sean de contenedor o de tarea:
-<Nombre_evento>.codigo
==> Para ejecutar código ODL -<Nombre_evento>.metodo
==> Para ejecutar un método -<Nombre_evento>.plugin
==> Para ejecutar un plugin, especificando la DLL
Ejemplo
- Ejemplo para contenedores:
tipo
[ID1::Expediente de fiscalización]es
contenedor
-descripcion
="Expediente con el que se lleva a cabo una fiscalización."
; -Al_guardar.nombre
="eventos.Guardar"
; -Al_abrir.plugin
="AsistenteEntradaMercancia.dll"
;fin
metodo
Guardar();inicio
[Datos generales].[Tipo de expediente] ="Guardado"
; $guardar(this);fin
- Ejemplo para tareas:
tipo
[ADH::Elaborar resolución de otorgamiento]es
tarea
-fuente.definicion
= [Entidad]; -destino.definicion
= [ADH::Resolución de otorgamiento de distintivo]; -destino.valor
= $crear([Contenido]); -Al_crear.codigo
= "[&Destino]->[Datos generales].[Observaciones] = 'Se ha creado la tarea.'; $guardar([&Destino]);"; -Al_abandonar.nombre
="eventos.abandonar"
;fin
metodo
abandonar();inicio
[&Destino]->[Datos generales].[Observaciones] ="Se ha abandonado la tarea."
; $guardar([&Destino]);fin
Modificación de la función $guardar
La función $guardar
hasta ahora sólo nos ha permitido guardar un objeto pasado por parámetro, sin más.
Ahora será posible incluir un parámetro más, que será de tipo lógico, cuya utilidad será lanzar el código asociado al evento Al_guardar definido en el contenedor.
Este parámetro por defecto tendrá valor falso, de manera que cuando se ejecute $guardar, no se lanzará el código asociado al evento Al_guardar
. Esto ocurrirá en caso de pasar verdadero como parámetro.
Ahora bien, en caso de llamar a la función $guardar con el nuevo parámetro a verdadero, tendremos que fijarnos que dicha función no se lanza desde el evento Al_guardar, pues esto provocaría un bucle infinito en la ejecución del código. De manera que no se podría dar una instrucción como la siguiente en la definición de un contenedor:
tipo
[Expediente] es
{RE|contenedor}}