Power Builder Clase 4

Anuncio
Power Builder Clase 4
Las instrucciones dw_1.settransobject(sqlca); crean una conexión
transaccional a la tabla implicada, que en este caso es agenda, note
que dw_1 es el nombre del objeto al cual tenemos apuntada el
SELECT que lo creamos con el pintor, la segunda instrucción
dw_1.retrieve(); lee los registros según la sentencia SELECT, con
retrieve() se pueden traer los registros según como tengamos el
WHERE 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 la
segunda datawindow, recordar que en la segunda datawindow es
donde ingresaremos los datos o los modificaremos.
Presionar CTRL + N, DATAWINDOWà seleccionar FREEFORMà SQL
SELECTà SELECCIONAR LA TABLA AGENDAà SELECCIONAR TODOS
LOS CAMPOSà ICONO RETURNà NEXTà FINISH
Cambiemos el aspecto y alguna de las propiedades, colores y bordes,
los tab order a cero entre otros.
Grabemos el objeto como d_agenda1 en la librería que tiene de
nombre datos y asociarla a la datawindow
Ajustar la datawindow de tal manera que luzca y que se pueda ver un
solo registro, quitar los cheques a LIVESCROLL, grabar y ejecutar la
aplicación, moverse de un registro hacia el otro y ver que pasa.
Si observas la segunda datawindow no hace nada, sencillamente
porque no la hemos sincronizado, para sincronizarla debemos abrir el
evento OPEN y codificar en el script
Dw_1.sharedata(dw_2)
Con esto le estamos diciendo que la datawindow1 compartirá datos
con la datawindow2, ejecutemos nuevamente la aplicación.
Cada ves que escribas código lo puedes COMPILAR, observa el icono
que está a la par de los larga vistas.
Como pudiste observar, al cambiarse de un registro a otro no
refresca la segunda datawindow, esto es porque no se sincronizado
que cuando cambie un registro arriba refresque también en la
segunda, esto lo logramos con el evento ROWFOCUSCHANGED.
Digitar el siguiente script en el evento ROWFOCUSCHANGED de la
dw_1
dw_1.SelectRow(0,false)
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 el
registro que en ese momento sea el actual, pintándolo y hacemos
que salte al registro scrolltorow y setrow hacen lo mismo, el
scrolltorow a la segunda datawindow hace que haya sincronía, este
evento 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 de
registro a la primera datawindow, escribir
dw_1.setrowfocusindicator(hand!)
Pero antes, ya que tendremos una mano apuntando al registro,
debemos correr los datos para que la mano no los tape, recuerde que
podemos justificar el datos a la derecha.
Ejecutar la aplicación
Existe una manera rápida, pero poco usual de poder crear botones
automatizados para desplazarse o navegar en la tabla, así, como para
insertar, eliminar y actualizar registros, desde la datawindow.
Modifiquemos la segunda datawindow, y ensanchemos de tal manera
que 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 y
seleccionar PAGE NEXT , chequear action default picture, quitar el
texto(none), hacer lo mismo para el segundo botón PAGE PRIOR,
debería lucir así
Observar que estos botónes no tienen código, sin embargo, tienen un
script predeterminado que genera una acción, aumentar otros dos
botónes para primer y último registro y ejecutar la aplicación, notar
que pasa con los registros y las dos datawindows.
La respuesta a esto es sencillo, los botones son aplicables a la
segunda datawindows solamente, recuerde que la sincronización la
tenemos en el evento rowfocuschanged de la primera datawindow.
Ahora, aumentemos dos botones más uno para filtrar y otro para
ordenar columnas de una manera rápida, a partir de la datawindow.
Si hacemos clic sobre el filtro, PB nos permite seleccionar entre los
campos de la tabla, en la cual hay que establecer una expresión, esta
expresión la podemos verificar por ejemplo, ver la siguiente
expresión.
El filtro se puede escribir o hacer clic sobre el campo y terminar de
especificarlo la expresión, verifiquela para ver si es correcta y
observe como funciona el retrieve().
El filtro se aplica con el criterio que se ha dado, si queremos quitar el
filtro o cambiarlo debemos volver a hacer clic sobre el botón, por
ejemplo quitemos el criterio antes puesto.
El retrieve() vuelve a su estado original, hacer lo mismo para el
ordenamiento, se puede ordenar por una o varias columnas ya sea
ascendente o descendente, arrastrar los campos a ordenar.
Observar el orden en la primera datawindow, para quitar un
ordenamiento simplemente quitar los campos involucrados del
ordenamiento.
Ok, ahora, aumentemos un botón más a la datawindow, botón
insertar y vamos a analizar ciertas consideraciones y efectos.
Notamos que al hacer clic en este botón aparentemente no hace
nada, porqué?, porque los TAB ORDER se encuentran a cero, editar la
datawindow y cambiarlos a 10, 20 y 30, grabar lo cambios y ejecutar
la aplicación nuevamente, observar que sucede.
Un nuevo registro es adicionado, pero no ha sido salvado o grabado
realmente, esto lo podemos notar si cerramos esta ventana y
volvemos a entrar en ella.
Porqué? Porque, cuando trabajamos en una tabla de una DB se hacen
transacciones que pueden ir de una a varias, si recordamos
establecimos una vía SQLCA, existen dos comandos transaccionales
que son utilizados para poder grabar estas transacciones en la DB o
para 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 cuando
no se completo una acción o se dio un problema ROLLBACK .
Aumentar tres botones más, uno para eliminar, cancelar y el último
para grabar(actualizar), separar los botones con los de filtrar y
ordenar.
Muy bien, ahora tenemos completa nuestra aplicación, la cual tiene
grandes deficiencias de habilitación y desabilitación de botones y
otros aspectos, las cuales empezaremos a corregir en la siguiente
clase.
Descargar