GrialTransaction

De GrialWIKI

(Diferencias entre revisiones)
(Actualización de la Base de Datos: GrialTransaction)
(Actualización de la Base de Datos: GrialTransaction)
Línea 3: Línea 3:
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).  
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.
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'''
 
-
<blockquote>Existe también un Objeto '''SqlQuery''' que pertenece a una versión anterior del Framework y se mantiene por compatibilidad con los módulos que aún lo utilizan. Posee las mismas funciones del objeto '''GrialTransaction''', con ciertas diferencias: En lugar de '''Txn.Add''', en el objeto SqlQuery se utiliza '''SqlQuery.Cmd''', y en lugar de '''Txn.Apply''', en el objeto SqlQuery se utiliza '''SqlQuery.UpdateRecords'''.
 
-
También se mantiene para facilitar la compatibilidad un método '''Txn.Cmd''' ''sinónimo'' de '''Txn.Add'''
 
-
</blockquote>
 
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.
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.
Línea 22: Línea 17:
  ' Aplico la transacción en el Servidor  
  ' Aplico la transacción en el Servidor  
  Txn.Apply GrialCont
  Txn.Apply GrialCont
 +
</code>
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 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.
Línea 88: Línea 84:
     Dim Txn As New GrialTransaction
     Dim Txn As New GrialTransaction
-
     Txn.CMD Cabecera_PAREXA02_grq.Rst,"ID_PAREXA02"
+
     Txn.Add Cabecera_PAREXA02_grq.Rst,"ID_PAREXA02"
-
     Txn.CMD Detalle_PAREXA03_grq.Rst,";RELA_PAREXA02"
+
     Txn.Add Detalle_PAREXA03_grq.Rst,";RELA_PAREXA02"
      
      
     GrialCont.Apply Txn
     GrialCont.Apply Txn
Línea 103: Línea 99:
     Dim Txn As New GrialTransaction
     Dim Txn As New GrialTransaction
-
     Txn.CMD Cabecera_EXACDA02_grq.Rst,"Name=CabeceraGeneral:ID_EXACDA01"
+
     Txn.Add Cabecera_EXACDA02_grq.Rst,"Name=CabeceraGeneral:ID_EXACDA01"
      
      
     ' Este detalle toma el header por default  
     ' Este detalle toma el header por default  
     ' (recordset en el CMD anterior)
     ' (recordset en el CMD anterior)
-
     Txn.CMD Detalle_EXACDA03_grq.Rst,";RELA_EXACDA01"
+
     Txn.Add Detalle_EXACDA03_grq.Rst,";RELA_EXACDA01"
     ' Este detalle toma el ID del item "CabeceraGeneral"
     ' Este detalle toma el ID del item "CabeceraGeneral"
-
     Txn.CMD Detalle_EXACDA04_grq.Rst,"Header=CabeceraGeneral;RELA_EXACDA01"
+
     Txn.Add Detalle_EXACDA04_grq.Rst,"Header=CabeceraGeneral;RELA_EXACDA01"
      
      
     Txn.Apply GrialCont
     Txn.Apply GrialCont
Línea 125: Línea 121:
     Dim Txn As New GrialTransaction
     Dim Txn As New GrialTransaction
-
     SqlQ.CMD Tabla_REACDO12_grq.Rst,"Name=TablaDescripciones:;ID_REACDO12"
+
     Txn.Add Tabla_REACDO12_grq.Rst,"Name=TablaDescripciones:;ID_REACDO12"
-
     SqlQ.CMD Cabecera_EXACDA02_grq.Rst,"ID_EXACDA01"
+
     Txn.Add Cabecera_EXACDA02_grq.Rst,"ID_EXACDA01"
     ' Este detalle toma el header por default (recordset en el CMD anterior)  
     ' 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
     'y además actualiza un rela al primer recordset de la transacción
-
     SqlQ.CMD Detalle_EXACDA03_grq.Rst, _
+
     Txn.Add Detalle_EXACDA03_grq.Rst, "RelaField=RELA_REACDO12/TablaDescripciones: ;RELA_EXACDA01"
-
        "RelaField=RELA_REACDO12/TablaDescripciones : ; RELA_EXACDA01"
+
      
      
-
     Txn.Apply GrialCont
+
     GrialCont.Apply Txn
</code>
</code>
 +
 +
'''Nota de Compatibilidad'''
 +
<blockquote>Existe también un Objeto '''SqlQuery''' que pertenece a una versión anterior del Framework y se mantiene por compatibilidad con los módulos que aún lo utilizan. Posee las mismas funciones del objeto '''GrialTransaction''', con ciertas diferencias: En lugar de '''Txn.Add''', en el objeto SqlQuery se utiliza '''SqlQuery.Cmd''', y en lugar de '''Txn.Apply''', en el objeto SqlQuery se utiliza '''SqlQuery.UpdateRecords'''.
 +
También se mantiene para facilitar la compatibilidad un método '''Txn.Cmd''' ''sinónimo'' de '''Txn.Add'''
 +
</blockquote>
[[Category:Manual de Programación]]
[[Category:Manual de Programación]]
{{Hierarchy footer}}
{{Hierarchy footer}}

Revisión de 05:13 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.

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

    Dim Cabecera_PAREXA02_grq as New GrialQuery
    Dim Detalle_PAREXA03_grq as New GrialQuery
    ...
    Dim Txn As New GrialTransaction
 
    Txn.Add Cabecera_PAREXA02_grq.Rst,"ID_PAREXA02"
    Txn.Add 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.Add Cabecera_EXACDA02_grq.Rst,"Name=CabeceraGeneral:ID_EXACDA01"
 
    ' Este detalle toma el header por default 
    ' (recordset en el CMD anterior)
    Txn.Add Detalle_EXACDA03_grq.Rst,";RELA_EXACDA01"
 
    ' Este detalle toma el ID del item "CabeceraGeneral"
    Txn.Add 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
 
    Txn.Add Tabla_REACDO12_grq.Rst,"Name=TablaDescripciones:;ID_REACDO12"
    Txn.Add 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
    Txn.Add Detalle_EXACDA03_grq.Rst, "RelaField=RELA_REACDO12/TablaDescripciones: ;RELA_EXACDA01"
 
    GrialCont.Apply Txn

Nota de Compatibilidad

Existe también un Objeto SqlQuery que pertenece a una versión anterior del Framework y se mantiene por compatibilidad con los módulos que aún lo utilizan. Posee las mismas funciones del objeto GrialTransaction, con ciertas diferencias: En lugar de Txn.Add, en el objeto SqlQuery se utiliza SqlQuery.Cmd, y en lugar de Txn.Apply, en el objeto SqlQuery se utiliza SqlQuery.UpdateRecords. También se mantiene para facilitar la compatibilidad un método Txn.Cmd sinónimo de Txn.Add



GrialQuery <<< >>> GrialCombo

Herramientas personales