Transcript
Page 1: Power Builder Clase 4wiener.edu.pe/manuales/4to-ciclo/PROGRAMACION-3/powerbuildercu… · Power Builder Clase 4 Las instrucciones dw_1.settransobject(sqlca); crean una conexión transaccional

Power Builder Clase 4

Las instrucciones dw_1.settransobject(sqlca); crean una conexióntransaccional a la tabla implicada, que en este caso es agenda, noteque dw_1 es el nombre del objeto al cual tenemos apuntada elSELECT que lo creamos con el pintor, la segunda instruccióndw_1.retrieve(); lee los registros según la sentencia SELECT, conretrieve() se pueden traer los registros según como tengamos elWHERE en el SELECT, enviando parámetros hacia el SELECT.

Recuerde que en clases pasadas hablamos de SQLCA.

Nuestro siguiente paso es crear un objeto data object para lasegunda datawindow, recordar que en la segunda datawindow esdonde ingresaremos los datos o los modificaremos.

Presionar CTRL + N, DATAWINDOWà seleccionar FREEFORMà SQLSELECTà SELECCIONAR LA TABLA AGENDAà SELECCIONAR TODOSLOS CAMPOSà ICONO RETURNà NEXTà FINISH

Cambiemos el aspecto y alguna de las propiedades, colores y bordes,los tab order a cero entre otros.

Page 2: Power Builder Clase 4wiener.edu.pe/manuales/4to-ciclo/PROGRAMACION-3/powerbuildercu… · Power Builder Clase 4 Las instrucciones dw_1.settransobject(sqlca); crean una conexión transaccional

Grabemos el objeto como d_agenda1 en la librería que tiene denombre datos y asociarla a la datawindow

Page 3: Power Builder Clase 4wiener.edu.pe/manuales/4to-ciclo/PROGRAMACION-3/powerbuildercu… · Power Builder Clase 4 Las instrucciones dw_1.settransobject(sqlca); crean una conexión transaccional

Ajustar la datawindow de tal manera que luzca y que se pueda ver unsolo registro, quitar los cheques a LIVESCROLL, grabar y ejecutar laaplicación, moverse de un registro hacia el otro y ver que pasa.

Si observas la segunda datawindow no hace nada, sencillamenteporque no la hemos sincronizado, para sincronizarla debemos abrir elevento OPEN y codificar en el script

Dw_1.sharedata(dw_2)

Con esto le estamos diciendo que la datawindow1 compartirá datoscon la datawindow2, ejecutemos nuevamente la aplicación.

Cada ves que escribas código lo puedes COMPILAR, observa el iconoque está a la par de los larga vistas.

Como pudiste observar, al cambiarse de un registro a otro norefresca la segunda datawindow, esto es porque no se sincronizadoque cuando cambie un registro arriba refresque también en lasegunda, esto lo logramos con el evento ROWFOCUSCHANGED.

Digitar el siguiente script en el evento ROWFOCUSCHANGED de ladw_1

dw_1.SelectRow(0,false)

Page 4: Power Builder Clase 4wiener.edu.pe/manuales/4to-ciclo/PROGRAMACION-3/powerbuildercu… · Power Builder Clase 4 Las instrucciones dw_1.settransobject(sqlca); crean una conexión transaccional

dw_1.SelectRow(currentrow,true)

dw_1.scrolltorow(currentrow)

dw_1.setrow(currentrow)

dw_2.scrolltorow(currentrow)

De esta manera le indicamos que no seleccione y que seleccione elregistro que en ese momento sea el actual, pintándolo y hacemosque salte al registro scrolltorow y setrow hacen lo mismo, elscrolltorow a la segunda datawindow hace que haya sincronía, esteevento se dispara cada ves que el registro cambia.

Currentrow es un parámetro que es pasado al evento.

Notar que en ambas datawindow la modificación de los datos es cero,porque los TAB ORDER son cero.

Aumentemos al evento OPEN de la ventana un puntero o indicador deregistro a la primera datawindow, escribir

dw_1.setrowfocusindicator(hand!)

Page 5: Power Builder Clase 4wiener.edu.pe/manuales/4to-ciclo/PROGRAMACION-3/powerbuildercu… · Power Builder Clase 4 Las instrucciones dw_1.settransobject(sqlca); crean una conexión transaccional

Pero antes, ya que tendremos una mano apuntando al registro,debemos correr los datos para que la mano no los tape, recuerde quepodemos justificar el datos a la derecha.

Ejecutar la aplicación

Existe una manera rápida, pero poco usual de poder crear botonesautomatizados para desplazarse o navegar en la tabla, así, como parainsertar, eliminar y actualizar registros, desde la datawindow.

Modifiquemos la segunda datawindow, y ensanchemos de tal maneraque quepan unos botones y vayamos al pintor de la DW.

Aumentemos un par de botones para avanzar y retroceder registros.

Ubicarse en el primer botón, en las propiedades seleccionar ACTION yseleccionar PAGE NEXT , chequear action default picture, quitar eltexto(none), hacer lo mismo para el segundo botón PAGE PRIOR,debería lucir así

Page 6: Power Builder Clase 4wiener.edu.pe/manuales/4to-ciclo/PROGRAMACION-3/powerbuildercu… · Power Builder Clase 4 Las instrucciones dw_1.settransobject(sqlca); crean una conexión transaccional

Observar que estos botónes no tienen código, sin embargo, tienen unscript predeterminado que genera una acción, aumentar otros dosbotónes para primer y último registro y ejecutar la aplicación, notarque pasa con los registros y las dos datawindows.

Page 7: Power Builder Clase 4wiener.edu.pe/manuales/4to-ciclo/PROGRAMACION-3/powerbuildercu… · Power Builder Clase 4 Las instrucciones dw_1.settransobject(sqlca); crean una conexión transaccional

La respuesta a esto es sencillo, los botones son aplicables a lasegunda datawindows solamente, recuerde que la sincronización latenemos en el evento rowfocuschanged de la primera datawindow.

Ahora, aumentemos dos botones más uno para filtrar y otro paraordenar columnas de una manera rápida, a partir de la datawindow.

Page 8: Power Builder Clase 4wiener.edu.pe/manuales/4to-ciclo/PROGRAMACION-3/powerbuildercu… · Power Builder Clase 4 Las instrucciones dw_1.settransobject(sqlca); crean una conexión transaccional

Si hacemos clic sobre el filtro, PB nos permite seleccionar entre loscampos de la tabla, en la cual hay que establecer una expresión, estaexpresión la podemos verificar por ejemplo, ver la siguienteexpresión.

Page 9: Power Builder Clase 4wiener.edu.pe/manuales/4to-ciclo/PROGRAMACION-3/powerbuildercu… · Power Builder Clase 4 Las instrucciones dw_1.settransobject(sqlca); crean una conexión transaccional

El filtro se puede escribir o hacer clic sobre el campo y terminar deespecificarlo la expresión, verifiquela para ver si es correcta yobserve como funciona el retrieve().

Page 10: Power Builder Clase 4wiener.edu.pe/manuales/4to-ciclo/PROGRAMACION-3/powerbuildercu… · Power Builder Clase 4 Las instrucciones dw_1.settransobject(sqlca); crean una conexión transaccional

El filtro se aplica con el criterio que se ha dado, si queremos quitar elfiltro o cambiarlo debemos volver a hacer clic sobre el botón, porejemplo quitemos el criterio antes puesto.

Page 12: Power Builder Clase 4wiener.edu.pe/manuales/4to-ciclo/PROGRAMACION-3/powerbuildercu… · Power Builder Clase 4 Las instrucciones dw_1.settransobject(sqlca); crean una conexión transaccional

El retrieve() vuelve a su estado original, hacer lo mismo para elordenamiento, se puede ordenar por una o varias columnas ya seaascendente o descendente, arrastrar los campos a ordenar.

Page 13: Power Builder Clase 4wiener.edu.pe/manuales/4to-ciclo/PROGRAMACION-3/powerbuildercu… · Power Builder Clase 4 Las instrucciones dw_1.settransobject(sqlca); crean una conexión transaccional

Observar el orden en la primera datawindow, para quitar unordenamiento simplemente quitar los campos involucrados delordenamiento.

Ok, ahora, aumentemos un botón más a la datawindow, botóninsertar y vamos a analizar ciertas consideraciones y efectos.

Page 14: Power Builder Clase 4wiener.edu.pe/manuales/4to-ciclo/PROGRAMACION-3/powerbuildercu… · Power Builder Clase 4 Las instrucciones dw_1.settransobject(sqlca); crean una conexión transaccional

Notamos que al hacer clic en este botón aparentemente no hacenada, porqué?, porque los TAB ORDER se encuentran a cero, editar ladatawindow y cambiarlos a 10, 20 y 30, grabar lo cambios y ejecutarla aplicación nuevamente, observar que sucede.

Page 15: Power Builder Clase 4wiener.edu.pe/manuales/4to-ciclo/PROGRAMACION-3/powerbuildercu… · Power Builder Clase 4 Las instrucciones dw_1.settransobject(sqlca); crean una conexión transaccional

Un nuevo registro es adicionado, pero no ha sido salvado o grabadorealmente, esto lo podemos notar si cerramos esta ventana yvolvemos a entrar en ella.

Page 16: Power Builder Clase 4wiener.edu.pe/manuales/4to-ciclo/PROGRAMACION-3/powerbuildercu… · Power Builder Clase 4 Las instrucciones dw_1.settransobject(sqlca); crean una conexión transaccional

Porqué? Porque, cuando trabajamos en una tabla de una DB se hacentransacciones que pueden ir de una a varias, si recordamosestablecimos una vía SQLCA, existen dos comandos transaccionalesque son utilizados para poder grabar estas transacciones en la DB opara ignorar las transacciones, ellas son COMMIT y ROLLBACK.

COMMIT es utilizado para registrar en DB las transacciones INSERT,DELETE, UPDATE, etc., y ROLLBACK para ignorar las transacciones,comúnmente son utilizadas cuando todo salio bien COMMIT y cuandono se completo una acción o se dio un problema ROLLBACK .

Aumentar tres botones más, uno para eliminar, cancelar y el últimopara grabar(actualizar), separar los botones con los de filtrar yordenar.

Page 17: Power Builder Clase 4wiener.edu.pe/manuales/4to-ciclo/PROGRAMACION-3/powerbuildercu… · Power Builder Clase 4 Las instrucciones dw_1.settransobject(sqlca); crean una conexión transaccional

Muy bien, ahora tenemos completa nuestra aplicación, la cual tienegrandes deficiencias de habilitación y desabilitación de botones yotros aspectos, las cuales empezaremos a corregir en la siguienteclase.