GrialTransaction

De GrialWIKI

(Diferencias entre revisiones)
(Actualización de la Base de Datos: GrialTransaction)
(Actualización de la Base de Datos: GrialTransaction)
Línea 4: Línea 4:
Una vez armada la transacción, mediante el método GrialCont.Apply se envía el conjunto al servidor para su proceso.
Una vez armada la transacción, mediante el método GrialCont.Apply se envía el conjunto al servidor para su proceso.
-
'''Comaptibilidad'''
+
'''Nota de Compatibilidad'''
<blockquote>Existe también un Objeto '''SqlQuery''' que pertenece a una versión anterior y se mantiene por compatibilidad, posee las mismas funciones del objeto '''GrialTransaction''', con la única diferencia del método para aplicar la transacción: El objeto '''GrialTransaction '''se aplica con el método '''Apply''' en tanto que en el SqlQuery se invoca el método "UpdateRecords"</br>
<blockquote>Existe también un Objeto '''SqlQuery''' que pertenece a una versión anterior y se mantiene por compatibilidad, posee las mismas funciones del objeto '''GrialTransaction''', con la única diferencia del método para aplicar la transacción: El objeto '''GrialTransaction '''se aplica con el método '''Apply''' en tanto que en el SqlQuery se invoca el método "UpdateRecords"</br>
También se mantienen el método '''Txn.Cmd''' que es ''sinónimo'' de '''Txn.Add'''
También se mantienen el método '''Txn.Cmd''' que es ''sinónimo'' de '''Txn.Add'''

Revisión de 05:06 8 ago 2009

Introducción al Framework Grial

Índice

Actualización de la Base de Datos: GrialTransaction

Las transacciones en el Entorno Grial son preparadas en el cliente, y luego enviadas como un conjunto único al Servidor intermedio. El objeto utilizado para componer una transacción es el GrialTransaction. Los objetos de esta clase funcionan como una "pila" en la cual se acumulan los ítems que conforman la transacción recordsets con modificaciones y/o comandos SQL (con las extensiones aceptadas por el GrialDataServer). Una vez armada la transacción, mediante el método GrialCont.Apply se envía el conjunto al servidor para su proceso.

Nota de Compatibilidad

Existe también un Objeto SqlQuery que pertenece a una versión anterior y se mantiene por compatibilidad, posee las mismas funciones del objeto GrialTransaction, con la única diferencia del método para aplicar la transacción: El objeto GrialTransaction se aplica con el método Apply en tanto que en el SqlQuery se invoca el método "UpdateRecords"
También se mantienen el método Txn.Cmd que es sinónimo de Txn.Add

La transacción se prepara mediante el método "Add", que es el que coloca en la pila cada uno de los ítems que la componen. Los ítems deben ser agregados en la transacción en un orden cabecera-detalle, haciendo seguir a cada recordset con registros de cabecera del recordset con registros de detalle dependientes de los anteriores. Por default, al aplicar la transacción, el GrialDataServer asume que los registros de cabecera de un ítem dado se hallan en el ítem inmediato anterior.

Formato:

Sub Add( SqlCmd_or_Recordset, [Rela_String As String] )

Ejemplo:

 Dim Txn As New GrialTransaction
 Txn.Add PreForm20_grq.Rst , "ID_PREFORM20"
 Txn.Add PreForm21_grq.Rst , "ID_PREFORM21;RELA_PREFORM20"
 Txn.Add PreForm23_grq.Rst , ";RELA_PREFORM21"
 ' Aplico la transacción en el Servidor 
 Txn.Apply GrialCont
 
El primer parámetro del método '''Add''' es un recordset con las modificaciones realizadas o puede ser también un string conteniendo un query o un comando a ejecutar en la BD.
El segundo parámetro establece propiedades para el ítem dentro de la transacción, mediante una sintaxis especial. Cuenta con dos secciones separadas el carácter dos puntos (":"), la sección principal indica hasta tres nombres de campo, indicando qué campo es el ID de la tabla, cuál contiene la relación con el recordset de cabecera y opcionalmente que campo representa el RELA_PADRE para las tablas de tipo ARB (árboles). Estos tres nombres de campo se separan por punto y coma (" ; ").
Dentro de la transacción se asume que si en un '''Cmd''' se indica un campo RELA, la tabla cabecera es la indicada en el ítem inmediato anterior. Esto es consecuente con la necesidad de ordenar en la transacción primero las tablas cabeceras y luego los detalles.
 
Por ejemplo:
 Txn.Add PreForm20_grq.Rst , "ID_PREFORM20" ' Cabecera
 Txn.Add PreForm21_grq.Rst , "ID_PREFORM21;RELA_PREFORM20" ' Detalle de la 20
 Txn.Add PreForm07_grq.Rst , "ID_PREFORM07;;RELA_PADRE" ' Actualizo el arbol
 
Existe una sección de datos opcionales, que debe indicarse antes de la sección principal y se separa de la misma mediante dos puntos (":"). La sección opcional contiene propiedades para el ítem de la transacción y da la posibilidad de modificar el orden cabecera-detalle o de actualizar tablas con múltiples campos RELA. 
 
Por ejemplo:
 Txn.Add PreForm20_grq.Rst , "Name=PF20: ID_PREFORM20 " ' Cabcera
 Txn.Add PreForm07_grq.Rst , "ID_PREFORM07;;RELA_PADRE" ' Actualizo el arbol
 Txn.Add PreForm21_grq.Rst , "Header = PF20: ID_PREFORM21;RELA_PREFORM20" 'Detalle
 
El Formato para el segundo parámetro del método '''Add''' es:
'''"[ Param = valor, Param = valor... : ] ID_FieldName ; RELA_FieldName ; RELA_PADRE"'''
 
Detalle de cada parte:
 
'''Seccion Opcional''' (hasta el caracter ''':''')
 
Los parámetros (opcionales) para la sección "Param = valor '';''" son:
 
NAME = xxxx  -- Identifica el ítem con un nombre
 
HEADER =  hhhh -- Indica cual es el ítem (identificado previamente mediante NAME = xxxx ) que contiene los registros cabecera. Es necesario sólo cuando la cabecera y el detalle no se pueden colocar uno a continuación de otro en la transacción, o cuando hay más de un detalle para una cabecera.
 
RelaField= FIELD_NAME / HEADER_NAME -- Se usa para actualizar un registro que tiene más de un campo RELA.  Reemplaza el valor del campo indicado por el valor de ID tomado del header indicado. Por ejemplo: ''RelaField= rela_preform21/Pe21''
 
 
SysDateField = FIELD_NAME/FIELD_NAME... -- Se usa para los campos que deben ser actualizados con la fecha del sistema. Reemplaza los campos indicados por el Sysdate de la máquina donde corre el Servidor de Aplicaciones.
Debe indicarse para efectuar un registro preciso de fechas y horas, ya que la máquina cliente donde se prepara la transacción puede tener mal la fecha. 
En caso de un ALTA, se actualizarán los campos indicados, siempre que contengan valores no-nulos. 
En caso de MODIFICACION, se actualizarán los campos indicados con la fecha del sistema sólo si fue modificado su valor original
 
En el módulo cliente, debe indicarse siempre el "SysdateField=field1/field2/..." y se deben cargar/modificar los campos utilizando la función "Now" (sysdate de la terminal, valor no-confiable). 
 
Cuando el servidor actualice el recordset en la base, reemplazará los valores por el sysdate del servidor (valor confiable).
 
Para los campos con nombre: FAPL, FBAJA, FANULADO, WFFECHACURSO, WFFECHA se realizará esta actualización automáticamente.
 
'''Seccion Normal''' (Separados por ''';''')
 
'''ID_FieldName: '''
Nombre del Campo que contiene el ID de la tabla. Se usará para tomar el valor que debe ser grabado en los campos RELA de los siguientes detalles.
 
'''RELA_FieldName: '''
Nombre del campo que contiene el ID de la cabecera (por default en el recordset anterior). La combinación de ID_FieldName de un ítem y el RELA_FieldName del ítem siguiente establecen una relación cabecera-detalle.
 
'''RELA_PADRE: '''
Cuando un recordset establece relaciones dentro de sí mismo. Por ejemplo una tabla tipo árbol. RELA_PADRE es el nombre del campo que representa la relación padre-hijo dentro de la jerarquía del árbol. La combinación ID_FieldName + RELA_PADRE en un mismo recordset se utiliza para las tablas tipo árbol.
 
 
===Ejemplos de Armado y Aplicación de Transacciones===
 
'''1.- CABECERA + DETALLE'''
 
<code>
    Dim Cabecera_PAREXA02_grq as New GrialQuery
    Dim Detalle_PAREXA03_grq as New GrialQuery
    ...
    Dim Txn As New GrialTransaction
 
    Txn.CMD Cabecera_PAREXA02_grq.Rst,"ID_PAREXA02"
    Txn.CMD Detalle_PAREXA03_grq.Rst,";RELA_PAREXA02"
 
    GrialCont.Apply Txn

2.- CABECERA + DETALLE + Detalle Extra

    Dim Cabecera_EXACDA01_grq as New GrialQuery
    Dim Detalle_EXACDA03_grq as New GrialQuery
    Dim Detalle_EXACDA04_grq as New GrialQuery
    ...
 
    Dim Txn As New GrialTransaction
 
    Txn.CMD Cabecera_EXACDA02_grq.Rst,"Name=CabeceraGeneral:ID_EXACDA01"
 
    ' Este detalle toma el header por default 
    ' (recordset en el CMD anterior)
    Txn.CMD Detalle_EXACDA03_grq.Rst,";RELA_EXACDA01"
 
    ' Este detalle toma el ID del item "CabeceraGeneral"
    Txn.CMD Detalle_EXACDA04_grq.Rst,"Header=CabeceraGeneral;RELA_EXACDA01"
 
    Txn.Apply GrialCont


3.- CABECERA, DETALLE + Relación

    Dim Tabla_REACDO12_grq as New GrialQuery
    Dim Cabecera_EXACDA01_grq as New GrialQuery
    Dim Detalle_EXACDA03_grq as New GrialQuery
    ...
 
    Dim Txn As New GrialTransaction
 
    SqlQ.CMD Tabla_REACDO12_grq.Rst,"Name=TablaDescripciones:;ID_REACDO12"
    SqlQ.CMD Cabecera_EXACDA02_grq.Rst,"ID_EXACDA01"
 
    ' Este detalle toma el header por default (recordset en el CMD anterior) 
    'y además actualiza un rela al primer recordset de la transacción
    SqlQ.CMD Detalle_EXACDA03_grq.Rst, _
        "RelaField=RELA_REACDO12/TablaDescripciones : ; RELA_EXACDA01"
 
    Txn.Apply GrialCont



GrialQuery <<< >>> GrialCombo

Herramientas personales