Ir al contenido principal

Actualización de Tablas en un Datawindows

En varias ocasiones necesitamos crear datawindows que visualizen información de varias tablas de un modelo de datos ya sea por estructura, por necesidad o por simple conveniencia y de la misma forma quisieramos que esta información fuera actualizada al mismo tiempo. Pero al intentarlo nos damos cuenta que los Datawindow no cuentan con esta funcionalidad incluida por defecto. Debemos tener claro que son contextos muy diferentes
los datawindows son vistas de representaciones de datos no de estructuras por ellos no es una responsabilidad obligada permitir ciertas cosas a nuestra conveniencia. Sin embargo existen muchas formas de hacer este tipo de procesos y a continuación hablare un poco de los más comunes en mi experiencia.

  • Actualización por Vistas Separadas: Este Proceso simplemente separa los Datos en Dos Datawindows para ejecutar por separado las operaciones pertinentes. 
    • Ventaja: Simplifica los procesos al separar la lógica.
    • Desventaja: No es muy cómodo en la mayoría de los casos
  • Actualización por Código: Este Proceso utiliza solo una tabla del conjunto para realizar las operaciones y el resto tablas se trabajan desde código.
    • Ventaja: Permiten Definir un orden lógico de Control de Actualizaciones.
    • Desventaja: El Usuario es responsable de la administración en todo momento y esto aumenta la posibilidad de errores en actualizaciones de referencias.
  • Actualización Dinámica: Este Proceso consiste en Controlar por molificación de Propiedades del Datawindows las Propiedades de Actualización  de los conjuntos de Datos referentes a cada tabla y realizar así la actualización por etapas configurando cada campo requerido en la actualización de cada tabla hasta terminar con los campos de cada tabla en el datawindow. Como Ejemplo: Asuma que tiene dos tablas A con sus campos 1,2,3  y B con sus campos x,y,z entonces en la primera fase o por defecto configuara la tabla A como primer proceso con sus respectivos campos luego cuando inicia el proceso de actualizacion dw.update(true, false) y este es correcto cambia por medio del Modify la propiedades de actualización del Datawindow haciendo la Tabla B como actualizable de la siguiente forma dw.Modify("DataWindow.Table.UpdateTable = ~"B~"") y luego sus campos dw.Modify("B_1.Update = Yes")hasta completar los campos en sus actualización y por ultimo actualiza y confirma.
    • Ventaja: Hace comoda la actualización centrandose solo en el Datawindow.
    • Desventaja: Debe controlar los procesos y conocer los campos a todo momento.
El camino para este tipo de procesos no es muy fácil, pero lo importante es dominar alguna técnica y aplicar adecuada mente, cabe resaltar que estas no son las únicas formas de hacer este tipo de procesos y existen variados ejemplos en la red que explican estos métodos, solo menciono los más utilizados.

En otro post publicare ejemplos.

Consultar Asesoría Experta: asesoriaexpertasoftware@gmail.com.








Comentarios

Entradas populares de este blog

Activar el trace en una Base de Datos de PB

Muchas veces necesitamos revisar lo que procesa la base de datos, pero en muchas ocasiones no podemos realizar debug en ella por diversas limitaciones. En ocasiones asi powerbuilder no presenta una herramienta muy util la cual permite capturar el trace de la base de datos para activarla solo basta  configurar en el dbms de nuestra conexión anteponer la palabra Trace: Ej DBConfig=simappe.sqlite Driver=SQLite3 ODBC Driver DBMS= TRACE ODBC Esto aplica para todas las bases que soporten esa funcionlaidad.

El poder del Objeto Transaction (Mapear Funciones y/ó Procedimientos)

Hola, una de las ventajas de powerbuilder es el soporte nativo con las principales bases de datos, sin embargo muchos desconocen el poder que tiene el objeto transaction en este ejemplo veremos como aprovechar sus bondades para aplicarlas en nuestros desarrollos: DECLARE P_COPIAR_ORDEN_PEDIDO PROCEDURE FOR TSS.P_COPIAR_ORDEN_PEDIDO  (           P_ID => :idb_id,         P_COPY_CANT_R => :ii_copiar_cant_recibidas )  ; execute P_COPIAR_ORDEN_PEDIDO; If SQLCA.SQLCode = -1 Then     Error.of_Mensaje()     Rollback;     Return End If FETCH P_COPIAR_ORDEN_PEDIDO INTO :ldb_return; if SQLCA.SqlCode <> 0 then     Error.of_Mensaje()            Rollback;     CLOSE P_COPIAR_ORDEN_PEDIDO;     RETURN end if CLOSE P_COPIAR_ORDEN_PEDIDO; COMMIT; IF ldb_return .... . Esta...

Retrive Datawindow Composite vs Nested

Hola, muchas veces en nuestros desarrollos creamos plantillas para automatizar y agilizar procesos por ejemplo en los reportes; tomare como ejemplo mi experiencia en el caso. Hace poco nos pidieron la generación de muchos reportes con funcionalidades de personalización en tiempo real, es decir brindarle la posibilidad de poder modificar titulos, logos, mensajes y que fuera posible en ciertos casos ocultar algunas zonas especificas (Encabezados y Pie de Páginas o mejor conocidos como Header y Footer). Inmediatamente nos dimos cuenta que debiamos usar plantillas, sin embargo surgieron dudas sobre que tipo de datawindow contenedor utilizar en la plantilla a implementar. ¿Composite ó Nested? . Anexo explicación resumida: Datawindow Composite: Este tipo de datawindow son contenedores de datawidows no tienen datos internos que se compartan, la forma de usarlos es un poco básica es decir agregas datawindows y el retrieve se realiza en el orden en el cuál fueron agregados. Ejemplo: Su...