Diferencia entre revisiones de «Eventos»

De Egeasy
Saltar a: navegación, buscar
(Modificación de la función $guardar)
Línea 58: Línea 58:
  
 
===Modificación de la función $guardar===
 
===Modificación de la función $guardar===
<p>La función <code>'''$guardar'''</code> hasta ahora sólo nos ha permitido guardar un objeto pasado por parámetro, sin más.</p>
+
<p>La función <code>'''$guardar'''</code> hasta ahora sólo nos ha permitido guardar un objeto pasado por parámetro.</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>Ahora será posible incluir un segundo parámetro opcional, de tipo lógico, que permitirá controlar si al guardar mediante esta función se debe, o no, lanzar el evento Al_guardar.</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 tendrá por defecto valor falso, de manera que cuando se ejecute $guardar, no se lanzará el código asociado al evento <code>Al_guardar</code>. En el caso de invocar a la función pasándole verdadero, se disparará el evento <code>Al_guardar</code>.</p>
 
<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:</p>
 
<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:</p>
  

Revisión del 11:30 15 abr 2009

¿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.

Ahora será posible incluir un segundo parámetro opcional, de tipo lógico, que permitirá controlar si al guardar mediante esta función se debe, o no, lanzar el evento Al_guardar.

Este parámetro tendrá por defecto valor falso, de manera que cuando se ejecute $guardar, no se lanzará el código asociado al evento Al_guardar. En el caso de invocar a la función pasándole verdadero, se disparará el evento Al_guardar.

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 contenedor
    ...
    ...
    -Al_guardar = "$sellar([Datos generales].[Nº de expediente]); $guardar(this,verdadero);"; //bucle infinito
    -Al_abrir = "metodos/eventos.nmt";
    ...
fin