Saltar navegación

Documentación de FlexPro 2025

Comprender los eventos

Los eventos se activan cuando se producen determinadas situaciones del programa. Estos eventos pueden procesarse en procedimientos de eventos realizados por el usuario.

Utilizar eventos

En FlexPro, puede implementar procedimientos de eventos a nivel de bases de datos, clases de objetos (AnyCursorObject, AnyDocObject, AnyFolder, AnyFormula, AnyFpObject, AnyValueObject), objetos o la aplicación.

Por ejemplo, el evento ObjectOpened se produce a nivel de objetos y de clases de objetos, mientras que el evento DatabaseSaved está disponible tanto a nivel de bases de datos como de aplicaciones. El evento DatabaseSaved para una base de datos se produce después de guardar dicha base de datos. A nivel de aplicaciones, el evento DatabaseSaved se produce cuando se ha guardado una de las bases de datos abiertas.

Encontrará información sobre cómo crear procedimientos de eventos para los distintos objetos en los siguientes temas:

  Utilizar eventos con el objeto de aplicación o de bases de datos

  Utilizar eventos con el objeto de base de datos

  Utilizar eventos con los objetos FlexPro

  Utilizar eventos con los objetos de clase

Activar eventos

Puede utilizar la propiedad EnableEvents del objeto Application para activar o desactivar los eventos.

Por ejemplo, al guardar una base de datos con el método Save se produce el evento BeforeDatabaseSave. Esto puede evitarse estableciendo la propiedad EnableEvents en False antes de llamar al método Save.

Application.EnableEvents = False

ActiveDatabase.Save

Application.EnableEvents = True

Los eventos están desactivados por defecto en FlexPro, es decir, Application.EnableEvents es False. Puede activar los eventos estableciendo la propiedad EnableEvents en True o cambiando la configuración predeterminada en el cuadro de diálogo Archivo > Opciones en la pestaña Configuración del sistema y seleccionando la casilla Activar la notificación de eventos a las macros.

Nota Si es la primera vez que crea un procedimiento de eventos en un módulo objeto, recibirá un mensaje si los eventos están desactivados.

Tipos de eventos

Existen básicamente dos tipos de eventos en FlexPro. Por un lado, hay eventos que se desencadenan tras producirse un determinado estado. Al desarrollador de la aplicación solo se le informa del cambio de estado (por ejemplo, ValueModified). Por otro lado, también hay eventos que permiten intervenir al desarrollador de la aplicación. Estos eventos forman secuencias de hasta tres eventos. El procedimiento es el siguiente: primero se produce un evento QueryCancelEventName, en el que el desarrollador de la aplicación decide si puede producirse un estado del programa. Si este evento devuelve True, se cancela el procesamiento en FlexPro y se activa el evento EventNameCancelled. Si no se trata el evento QueryCancelEventName o se devuelve False, el procesamiento en FlexPro continúa y el evento Before se activa inmediatamente antes de que el evento ocurra. Una vez alcanzado el estado del programa, se activa el evento EventName.

El siguiente código VBA describe una vez más la lógica utilizando el evento ObjectOpened como ejemplo:

' Al hacer el usuario doble clic, el objeto oObject

' debe abrirse en la vista de lista

If QueryCancelOpenObject(oObject) Then

    OpenObjectCanceled oObject

Else ...

    BeforeOpenObject oObject

    oObject ... ' Se abre el objeto...

    ObjectOpened oObject

End If

Reenvío de eventos

En FlexPro, los eventos desencadenados para un objeto no solo se señalan para ese objeto, sino que también se reenvían a las bases de datos de plantillas y/u objetos de nivel superior en el modelo de objetos. De ese modo, es posible agrupar el procesamiento de eventos de objetos similares en las bases de datos de plantillas o en objetos de nivel superior de la base de datos del proyecto.

Por ejemplo, después de guardar la base de datos "Data.fpd", los siguientes procedimientos de eventos -si existen- se ejecutan en orden:

Procedimiento de eventos DatabaseSaved de ThisDatabase de la base de datos "Data.FPD"

Procedimiento de eventos DatabaseSaved de ThisDatabase de la base de datos personal de plantillas

Procedimiento de eventos DatabaseSaved de la colección Databases de la base de datos "Data.FPD"

Procedimiento de eventos DatabaseSaved del objeto Application

El primer argumento de un evento es siempre el propio objeto afectado, de forma que un procedimiento de eventos al que se haya reenviado el evento sepa para qué objeto se ha producido el evento actualmente procesado.

Los objetos a los que se reenvían los eventos pueden consultarse en la documentación de objetos de la referencia.

Reenvío de eventos para objetos FlexPro

El reenvío de eventos es particularmente importante para los objetos FlexPro. Debido al hecho de que muchos objetos FlexPro pueden existir en una base de datos FlexPro, pero para los cuales no hay un módulo de objetos correspondiente en el explorador de proyectos de Visual Basic, es más fácil realizar los procedimientos de eventos para uno, varios o todos los objetos FlexPro en los módulos de objetos de clase AnyCursorObject, AnyDocObject, AnyFolder, AnyFormula, AnyFpObject y AnyValueObject.

Si, por ejemplo, se produce el evento ObjectModified del objeto FpObject, los siguientes procedimientos de eventos -si existen- se ejecutan en orden:

Procedimiento de eventos ObjectModified del objeto afectado

Procedimiento de eventos ObjectModified de AnyFpObject en la base de datos en la que se encuentra el objeto

Procedimiento de eventos ObjectModified de AnyFpObject en la base de datos personal de plantillas

La cascada de eventos descrita es la misma para todos los objetos FlexPro.