Anidamiento de eventos en aplicaciones a medida

Aplica a: a3ERP

 

1.- Versión 11.00.00 Cambio programación a medida

Hasta este momento, cuando en a3ERP teníamos una DLL que implementaba un evento y desde ese evento se provocaba otra llamada al mismo o a otro evento, esta segunda invocación no se producía. a3ERP tenía un control general que evitaba esta situación.

Veamos un ejemplo
Si un usuario modifica un cliente y la programación a medida, en el evento DESPUESDEGUARDARMAESTRO, crea o modifica un artículo no se lanzan los eventos asociados a la modificación del mismo. Más abajo se muestran más escenarios.

 

2.- Cambios en la programación a medida

A partir de ahora, la responsabilidad de evitar recursiones pasa de a3ERP al distribuidor, que tendrá que implementar las técnicas necesarias para evitarla. A veces el control de la recursión será sencillo como, por ejemplo, mediante el uso de una variable booleana, pero en otros casos se requerirán mecanismos sofisticados.

Si en la programación a medida de algún distribuidor, se produce un bloqueo y no puede revisar el código, debemos pasar (sobre la BD de empresa) la siguiente instrucción SQL:

  • INSERT INTO __FLAGS VALUES ('CONTROLAR_RECURSION_DLLS', 1)


De esta forma, a3ERP se comportará como hasta ahora. Es decir, se perderá la anidación de eventos pero se evitarán recursiones.

 

3.- Algunos escenarios posibles

Desde un evento de DLL modificar el propio maestro:

Tenemos una DLL que escucha el evento DESPUESDEGUARDARMAESTRO, que mediante NAX, modifica la descripción de un artículo. Las líneas en rojo son para evitar recursiones. Implementación en Delphi:

dll anidamiento

En este caso se produce el siguiente flujo de ejecución:

flujo

 

Desde un evento de DLL modificar una línea del documento:

Tenemos una DLL que escucha el evento DESPUESDEGUARDARDOCUMENTOV2, que mediante NAX, modifica el precio de la primera línea de una oferta. En este caso deben saltar, en ese orden, los eventos DESPUESDEGUARDARDOCUMENTOV2 y ANTESDEGUARDARLINEA. En este escenario no se producen recursiones. Implementación en Delphi:

DLL modificar linea

En este caso se produce el siguiente flujo de ejecución:

flujo ejecucion

    • ¿Te ha resultado útil esta página?
    • ¡Gracias por votar!
    • 6 valoraciones: 3.5 sobre 4 de media
    • ¿Te ha resultado útil esta página?
    • ¡Gracias por votar!
    • 6 valoraciones: 3.5 sobre 4 de media