Cancelar modificaciones en históricos


([N1] cfonseca) #1

Hola!
Mi consulta es la siguiente: Tengo una tabla maestra y una histórica. El asunto es que desde la histórica modifico la maestra con actualizaciones en tabla.
Esto es algo simple y muy fácil de hacer con Velneo.
El problema es la modificación de una o más líneas del histórico y pulsar Cancelar en el maestro. Esto hace que, aunque pulse Cancelar, los cambios queden reflejados.
¿Hay algún comando que sirva para “deshacer” o es necesario guardar datos y volver a poner los originales en caso de cancelación? Esto me parece complicado, porque no se cuantas líneas del histórico se pueden modificar.
Por otra parte, el botón cancelar es controlable. ¿Es controlable el botón de la X que cierra la ventana sin pasar por Cancelar?
Gracias mil y un saludo …


([N3] pacosatu) #2

Hola cfonseca.

Como en cualquier sistema transaccional, para poder deshacer cambios en la base de datos, tienes que englobar dichos cambios en una transacción.
Velneo gestiona las transacciones automáticamente y esto que al principio es una ventaja, en aplicaciones complejas hay que controlarlo muy bien.
Cuando desde un formulario abierto en modo Vista o NO MODAL hacemos cambios en históricos, éstos se guardan siempre en la base de datos de forma automática.

Entonces para controlar los cambios debemos englobar todo en una transacción y esto se consigue utilizando Procesos. Un Proceso es una transacción única desde que empieza hasta que termina.

Por ejem, desde un manejador llamamos al Proceso que edita un registro:


Rem ( Obtenemos el ID seleccionado )
Interfaz: Procesar ( GRD_DOCUMENTOS, Todas )
Leer ficha seleccionada
Crear manejador de objeto ( oTitulo, Proceso PRO_TITULO_EDITAR@0PS_Biblioteca_app )
Set variable local de objeto ( oTitulo, NID, #ID )
Disparar objeto ( oTitulo, 1º plano: Local (síncrono), LOK )

El proceso PRO_TITULO_EDITAR es una Transacción única y por lo tanto podemos cancelar los cambios si el Usuario devuelve con Cancelar


Cargar lista ( TITULOS@0PS_Biblioteca_dat, ID, NID, , , )
Seleccionar ficha por posición ( 1 )
Modificar ficha seleccionada con formulario ( FRM_TITULO@0PS_Biblioteca_app, LOK )
If ( LOK = 0 )
Deshacer transacción
Mensaje ( “Se han deshecho los cambios”, Información, , )

El tema es que el comando “Modificar ficha seleccionada con formulario” queda englobado en la transacción (Bloquoe Duro de formulario) y todos los cambios podrán ser deshechos.
Observa en vAdmin la transacción abierta y verás que irá acumulando operaciones conforme vayas modificando históricos.

Obviamente los formularios ejecutados desde procesos son siempre Modales. Puedes forzar el Bloqueo Duro en la propiedad Estilo del Formulario.

En resumen, eres tú el que debe controlar siempre cuándo y cómo grabar los datos, de lo contrario Velneo lo hace siempre automáticamente.

Pruébalo y nos cuentas.

Saludos
Paco Satué


([N4] Ramon Denuc) #3

Hola Paco,

Primero, disculpa por hacer la pregunta en esta entrada.

Segundo, me gustaría saber como insertas el código que tu entrada anterior dentro de esos cuadros, he buscado información de como hacerlo y no he sabido encontrarlo y por esta razón aprovecho esta entrada para preguntar.

Saludos


([N3] pacosatu) #4

Hola Ramon.

Yo lo hago usando los 2 Tag’s de HTML: CODE y PRE.

Tags de apertura CODE PRE
Código a mostrar
Tags de cierre PRE CODE

Saludos
Paco Satué


([N2] Mgalvezh) #5

Probando…

 
   Pruebita


([N2] Mgalvezh) #6
    Otra pruebita
  

([N1] cfonseca) #7

Un millón de gracias por responder tan rápido. Probaré y veremos si tengo suerte.
Un saludo …


([N4] mittosoftware) #8

Este tema lo planteé hace algunos años por acá, y creo que la forma de lograr en V7, que deshaga los cambios a lo que ustedes llaman históricos, al cancelar el form principal, y que a la vez sea multiusuario con acceso de escritura a las tablas(como trabaja el SAP, por ejemplo, y trabajan mis aplicaciones que he hecho desde siempre en otras herramientas), es usando tablas en memoria.

Con Velneo yo lo veo muy engorroso, la verdad, aun con los tubos javascript. Espero que alguna vez en v7 logren una solución que sea transparente al desarrollador (clases equivalentes a las tablas, generadas automáticamente, que trabajan en memoria, y que se vuelquen a las tablas físicas al confirmar un formulario).


([N3] pacosatu) #9

Hola cjribera.

En Velneo no es engorrroso el control multiusuario y gestión de transacciones, es simplemente ELEMENTAL y quizás por eso es una base de datos fiable y muy rápida.
Desde el primer día con Velneo me hace mucha gracia cómo en los cursos básicos se abren y cierran formularios, grabando maestros e históricos de forma totalmente descontrolada y ni una mención a la concurrencia.

Yo en otros entornos dispongo de sistema de buffering de tablas, de tablas offline con sincronización automática, de cursores en memoria, en fin un conjunto de herramientas que facilitan enormemente la programación de la concurrencia. En Velneo no tenemos estas facilidades y la respuesta oficial siempre es la misma: llevamos muchos años con miles de usuarios y miles de aplicaciones y la comunidad no demanda esas cosas, por lo tanto, no las incorporamos a la herramienta.

De todas formas, me resulta chocante ver en los seminarios cómo se utiliza la técnica de las tablas en memoria y esto sí que me parece algo engorroso pues hay que mantener 2 objetos de tabla, una física y otra en memoria, además de tener que gestionar el volcado de memoria a la tabla física.

Tienes razón, una herramienta de desarrollo orientada a gestión de Tablas debería tener herramientas mucho más versátiles y lifeIssoft.

Saludos
Paco Satué