GrialApl, Transacción Visual

De GrialWIKI

Contenido

Grial Apl, GrialCont

Descripción General

El Contenedor representa visualmente una transacción, estandarizando el flujo del programa en todos los módulos del sistema. Adicionalmente brinda el servicio de seguridad, conexión y acceso a los controles registrados.

El flujo de programa determinado por este control responde al siguiente esquema:

Codificación Estándar: Inicialización, Centrado y Finalización

Componentes Visuales Requeridos

Dentro de cada GrialCont debe colocarse un objeto "Frame" de VB con el nombre "[Container_Frm-Referencias.doc]", dicho frame contendrá todos los controles involucrados en la transacción. Al iniciarse una transacción, se hace visible el frame "Container_Frm" (y se dispara el evento ContainerFrmShow), permitiendo la operación del usuario. Al finalizar la transacción, se oculta dicho frame (y se dispara el evento ContainerFrmHide). Si al iniciar una transacción, durante el evento ButtonClick, se establece el estado de sólo visualización (NewState=VIEW_MODE), se mostrará el Container_Frm pero deshabilitado. En caso de tener más de un objeto GrialCont dentro de un mismo módulo, debe crearse un array de frames Container_Frm(0..n), uno dentro de cada uno de los objetos GrialCont.


Método Initialize

Se debe invocar el método GrialCont.Initialize en el evento UserDocument_Show (primer evento una vez mostrada la pantalla del módulo).

Formato:

  Sub GrialCont.Initialize ( UserDocument_Name As String, Parent_LocationURL As String )

Ejemplo:

GrialCont1.Initialize UserDocument.Name, Parent.LocationUrl

El método Initialize:

  • Establece los accesos de seguridad según el usuario
  • Prepara la conexión para el acceso a datos
  • Prepara la configuración de los controles registrados

Método Center

Se debe invocar este método en el evento UserDocument_Resize para centrar el objeto que contenga al resto de los objetos dentro de la pantalla.

Formato:

Sub GrialCont.Center ( xViewportWidth As Integer, GeneralContainer As Object )

Ejemplo:

GrialCont.Center ViewportWidth, General_GFF
GrialCont.Center ViewportWidth, TabGeneral

En el parámetro [GeneralContainer As Object] se indica el objeto que contiene al resto de los objetos de la función, por ejemplo cuando la aplicación presenta inicialmente varios tabs con un contenedor distinto en cada uno de ellos, será el objeto "Tab" el que contenga toda la aplicación.

Método Finalize

Debe ser invocado en el evento UserDocument_Hide (último evento antes de cerrar el formulario). Realiza descargas de los objetos cargados. Su ausencia puede provocar fallas en la salida del módulo.

Formato:

Sub GrialCont.Finalize()

Ejemplo:

Sub UserDocument_Hide
    GrialCont.Finalize
End Sub

El método Finalize desconecta los controles registrados para evitar errores de protección general (GPF) en el cierre del documento.

Flujo de Programas, de ButtonClick a BottomButtonClick

El flujo del programa estará determinado por los controles GrialApl incluidos en el módulo. Se presenta a continuación un ejemplo de construcción y codificación de una transacción modelo dentro de un contenedor (GrialApl).


La transacción modelo consiste de un Combo de selección colocado sobre la barra superior de un control GrialApl. Dentro de la zona de edición se colocan los controles necesarios para modificar el conjunto de datos representado por el combo.

Inicio de la Transacción

Evento ButtonClick

El evento ButtonClick determina el inicio de la transacción. En base a la acción elegida (Alta, Baja, Modificación, etc.) se prepararán los datos correspondientes para la transacción.

Formato:

Event ButtonClick ( GrialButtonCode As GrialButtons, Cancel As Integer, NewState As Operation_States ) Ejemplo:

Se crea una variable global tipo long para almacenar el ID actual en edición (por ejemplo: "Dim IDPreEjec20 as Long", y una variable para llevar los contadores de falsos ID's para las tablas de detalles (Por Ejemplo: "Dim Falso_IDPreEjec21 as Long" si se crean detalles)

Dim IDPreEjec20 as long
Dim PreEjec20_grq as New GrialQuery
Dim Falso_IDPreEjec21 as long
Dim PreEjec21_grq as New GrialQuery

El usuario selecciona el registro sobre el cual desea operar en el combo, y luego pulsa uno de los botones de la barra superior (Alta, Modificación o Baja) lo que dispara un evento GrialCont_ButtonClick. En este evento se debe verificar que el usuario haya seleccionado correctamente un registro (para los casos de Modificación y Baja) y luego invocar un procedimiento para preparar la transacción (Sub PrepararTransaccion)

La variable global con el ID en edición se cargará al momento del evento GrialCont_ButtonClick con el ID del registro seleccionado en el combo (propiedad CurrentValue del combo). En caso de Alta de un nuevo registro, se utilizará el valor -1 como ID.

Private Sub GrialCont_ButtonClick(ByVal GrialButtonCode As GrialApp.GrialButtons, 
                    Cancel As Integer, NewState As GrialApp.Operation_States)
On Error GoTo ErrH

    Select Case GrialButtonCode
                
        Case BUTTON_NEW
         IDPreEjec20 = -1
         PrepararTransaccion

        Case BUTTON_MODIFICATION,BUTTON_DELETE
            If NoDataIn(PreEjec20_scb.CurrentValue) Then 
                ' Si no se ha elegido ningun registro, se cancela
                Cancel= True
                Exit Sub
            End if
            IDPreEjec20 = ID_PreEjec20_scb.CurrentValue
             PrepararTransaccion 
        
        Case Else 'no es un boton implementado
             Cancel = True

    End Select

Exit Sub

' ------ Manejo de errores
ErrH:
    MsgError GrialCont  ' Le muestro el error al usuario
    Cancel = True ' Cancelo el evento, la pantalla permanecerá igual
                    ' y el usuario podrá reintentar la operación
End Sub
Herramientas personales