Diferencia entre revisiones de «Eventos»

De Egeasy
Saltar a: navegación, buscar
(Modificación de la función $guardar)
 
(No se muestran 6 ediciones intermedias de 2 usuarios)
Línea 23: Línea 23:
 
  -<Nombre_evento>.{{AT|codigo}} ==> Para ejecutar código ODL
 
  -<Nombre_evento>.{{AT|codigo}} ==> Para ejecutar código ODL
 
  -<Nombre_evento>.{{AT|metodo}} ==> Para ejecutar un método
 
  -<Nombre_evento>.{{AT|metodo}} ==> Para ejecutar un método
  -<Nombre_evento>.{{AT|plugin}} ==> Para ejecutar un plugin, especificando la dll
+
  -<Nombre_evento>.{{AT|plugin}} ==> Para ejecutar un plugin, especificando la DLL
  
 
===Ejemplo===
 
===Ejemplo===
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> nos permite guardar un objeto que especificamos mediante parámetro de entrada. Ahora bien, se ha añadido a esta función la opción de darle un caracter recursivo añadiendo un parámetro lógico adicional. ¿Pero a qué afecta esta recursividad? Veamos un ejemplo para entenderlo mejor:
+
<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 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 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 Al_guardar.</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>
 +
 
 +
{{PR|tipo}} [Expediente] {{PR|es}} {{RE|contenedor}}
 +
    ...
 +
    ...
 +
    -{{AT|Al_guardar}} = <font color="#FF00FF">'''"$sellar([Datos generales].[Nº de expediente]); $guardar(this,verdadero);"'''</font>; {{COM|//bucle infinito}}
 +
    -{{AT|Al_abrir}} = {{STR|"metodos/eventos.nmt"}};
 +
    ...
 +
{{PR|fin}}
 +
 
 +
[[Categoría:ODL]]

Revisión actual del 13:31 16 jun 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