PowerBuilder Curso

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 20

Power Builder Clase 5

Empecemos abriendo la ventana w_agenda y seleccionemos la primera datawindow, editmosla y vamos a crear un campo que nos diga el nmero de registros que tiene la tabla al momento que se carga con retrieve(). Para ello ampliemos la banda SUMARY1 y seleccionemos una columna de la de DETAIL1, por ejemplo la columna telefonos, ahora, seleccionar en los controles el icono que tiene una mano contando dedos y PB la pondr justo en la banda de SUMARY1 y para completar seleccionar de los controles un objeto texto que est representado por la letra A y escribir Total de Registros y ponerle un color adecuado para que luzca bonito, luego volver a seleccionar el campo contador de registros e ir a las propiedades y seleccionar FORMAT y aplicar un formato #,##0

Si ejecutamos la aplicacin, debera lucir as

De la misma manera podemos agregar campos que sumen un total, pongan nmeros de pgina etc. Hagamos una pequea modificacin al titulo de la segunda datawindow, consiste en poner el nombre y apellido del registro que se seleccione, como lo haras?, Intntalo, en esta ves te dejare para que crees el script, si tienes problemas, pregntale al instructor, deber lucir as

En cada lenguaje de programacin tenemos los ttulos de ventana, y en PB tenemos ttulos de DATAWINDOWS, que ya las vimos en clases anteriores, el truco consiste en que tenemos que leer el contenido del registro seleccionado y que cada ves que cambie de registro ponga en el ttulo el nombre correcto. PB tiene forma para leer los campos de el registro seleccionado, para ello vamos a introducir algunos tipos de variables que tiene PB: String Para tipos de dato char, varchar o nvarchar Integer Para tipos de datos entero Long->Para datos enteros largos Decimal Para datos con enteros y decimales Double Para tipos de datos doble precisin con enteros y decimales Date Para tipo de datos fecha Datetime Para tipo de datos con fecha y tiempo(hhmmss) Time Para tiempos(hhmmss) Bolean Para valores False y True Char Para caracteres ascii Blob Para imgenes Real Valores de decimales Para mencionar alguno de ellos, en PB se puede declarar variables en cualquier parte de un script, a las cuales se le conoce como variable LOCALES y su vida es solamente dentro de script, adems existen otras reglas PB que te dicen que hay que respetar la nomenclatura del nombre de variables y objetos, como por ejemplo, una ventana w_main, una datawindow d_ o un men m_ etc.

Respetar la nomenclatura de PB es de gran utilidad, ya que si otro programador llegar a modificar un programa o sistema, rpidamente se ubicara que tipo de control es y que tipo de objeto se esta trabajando, por ejemplo, observa las siguientes ventanas con nombres de controles que PB usa por defecto

As por ejemplo si tienes variables locales del tipo string podras declararla como ls_nombre, donde localstring_nombre, o ldec_sueldo donde localdecimal_sueldo etc. Ahora bien, regresemos de nuevo a la aplicacin, hasta ahora no sabemos como extraer campos de los registros, veamos como lucira el script en el evento OPEN de ventana w_agenda

Observa la declaracin de las variables locales del tipo string ls_nombre y ls_apellido y al mismo tiempo nota la notacin de punto que PB utiliza al igual que otros lenguajes de programacin, por ejemplo, ls_nombre=dw_1.getitemstring(dw_1.getrow(),nombres) estamos almacenando en la variable ls_nombre lo que en la datawindow dw_1 tenga el registro seleccionado y estamos haciendo referencia a la columna nombres de la tabla agenda, la funcin getrow() nos trae el registro actual de dw_1, getitemstring puede variar segn el tipo de datos que queramos acceder, por ejemplo si fuera un entero getitemnumber, getitemdecimal, getitemdatetime. Los nombres de campo pueden ser remplazados por un nmero que sera el nmero de columna de la tabla, por ejemplo dw_1.getitemstring(dw_1.getrow(),1) se refiere al no_telefono. Por ltimo dw_1.title=trim(ls_nombre) + + trim(ls_apellido) une las dos string separadas por un espacio, pero esto no termina aqu, debemos poner este mismo cdigo en el evento ROWFOCUSCHANGED de la dw_1 con el objetivo que cada ves que cambie un registro cambie el titulo con el respectivo nombre.

Existe otra funcin que es lo contrario de getitemstring() y es setitem() esta ltima es utilizada para poder llevar datos a la datawindow, esta requiere de tres parmetros 1- la no. de registro a ser afectado, 2- la columna a ser afectada y 3- el valor a colocar en la columna, de la misma forma existe un equivalente para cada tipo de dato. Veamos un ejemplo, pongamos un botn en la ventana, no en la datawindow y codifiquemos el siguiente script dw_2.setitem(dw_1.getrow(),apellidos, MARCOPOLO) Cerrar la ventana y volver a entrar, que observas?

Notaste que al cerrar y abrir la ventana, despus de cambiado el nombre volvi a su estado original, porque? Porque el cambio fue solo en la DW y no en la DB. Ok, quita el botn de la ventana, vamos a crear nuestros propios botones para navegar y para insertar, modificar, eliminar, cancelar, actualizar y cerrar la ventana; manos a la obra, define 6 botones con las leyendas, Nuevo, Editar, Eliminar, Cancelar, Grabar y Cerrar y dos botones ms para ir al inicio y final de la tabla, porque dos y no cuatro botones para navegar? La respuesta ms adelante Los botones de cancelar y grabar deshabilitados y el resto habilitados, poner el atributo de default a cerrar, recordar que hasta el momento la dw_2 tiene los TAB mayores a cero, cambiar esto tambin.

Muy bien, debera lucir algo as, antes de continuar, necesito hacer la introduccin a las funciones, ya que empezaremos a trabajar con ellas. Necesitaremos dos funciones para habilitar y deshabilitar los controles, las funciones las vamos a hacer locales, recordar que una funcin se le pueden pasar parmetros y esta devolver datos y que los parmetros que se le pasan pueden ser por valor o por referencia. Vayamos al LAYOUT de la ventana agenda.

En la solapa de function list, hacer clic , luego clic derecho y new, tendremos esto

Nos encontramos en otros de los pintores, lo primero es ponerle nombre a la funcin en FUNCTION NAME, escribir lf_poner_on, recordar

localfunction_poner_on, luego en ACCESS debe ser PUBLIC, en RETURN TYPE, selecciona NONE, ya que no vamos a retornar ningn valor, en PASS BYE, dejarlo en VALUE, en ARGUMENT NAME, dejarlo vaco, ya que no estamos recibiendo ningn parmetro. Recuerde que el objetivo de esta funcin es de encender o habilitar los botnes y tendremos otra funcin que hago lo inverso, el script deber lucir algo as

Crear la segunda funcin lf_poner_off, que debera ser la inversa de lf_poner_on, escribmosla.

Si echamos un vistazo a la solapa de las funciones

Ahora bien, para poder habilitar los TAB ORDER(campos de la tabla) lo haremos con otras dos funciones de nombre lf_campos_on y lf_campos_off.

Para el caso de la funcin lf_campos_on enviaremos dos parmetros para indicar desde que campo, hasta que campo necesitamos habilitar y para el caso de la otra funcin los deshabilitamos todos, no enviaremos parmetros. Empecemos creando la ms sencilla lf_campos_off

Primeramente definimos una variable entera K, para poder hacer uso de la instruccin FOR/NEXT, el FOR/NEXT funciona idntico que en otros lenguajes de programacin. LA funcin SETTABORDER(K, 0) es utilizada para poder alterar el TAB ORDER y tiene dos parmetros, el primero se refiere a la columna de la tabla y el segundo es el valor a establecer donde puede ser cero o un valor mayor a cero, entonces, porque el for/next de 1 a 3, porque son 3 campos. Procedamos entonces a crear la otra funcin

Para poder crear ms parmetros, hacer clic derecho y luego add o insert segn el caso, notar que los parmetros de tipo entero y el nombre de cada uno de ellos es desde y hasta, por otro lado, la pasada de los parmetros a la funcin son por valor.

Ok, nuestras funciones estn listas, procedamos entonces a escribir el script cuando presionen los botones de navegacin cb_7 y cb_8. En cb_7 Inicio de Tabla escribir dw_1.scrolltorow(1) tabla dw_1.scrolltorow(dw_1.rowcount()). y en cb_8 Final de

Scrolltorow(1) ya lo habamos visto anteriormente y dw_1.scrolltorow(dw_1.rowcount()) devuelve el nmero de registros en la DW devueltos por un RETRIEVE(). Escribamos ahora, el script para el botn cb_1 o Nuevo,

Insertrow(0) inserta una nueva fila en la DW al final, eso es lo que indica el cero, si quisiramos insertar entre registros podramos utilizar insertrow(2), siempre y cuando el valor sea menor que el rowcount(). Ver la llamada a las dos funciones, en lf_campos_on enviamos los parmetros que sern recibidos por desde y hasta, por ltimo establecemos foco en la dw_2 y foco en la columna 1 o campo no_telefono. Veamos el script para cb_2

Lo ms relevante es la funcin lf_campos_on y es el envo de parmetros 2,3, porque no 1,3? Recordar que el campo 1 o no_telefono es la llave primaria y una ves ingresada no puede modificarse. Script para cb_3

Deleterow() lo que hace es borrar la DW el nmero de registro que le asignemos Script para cb_4

Primeramente el ROLLBACK USING SQLCA; lo que hace es anular todas las transacciones hechas y que se encontraban pendientes de ejecutar en la DB. El parmetro USING SQLCA es porque cuando establecimos nuestra conexin utilizamos SQLCA como rea de comunicacin, el resto del script es digerible. Script del cb_5

Analizando el script, la funcin accepttext() es aplicable o en es bueno considerarla al momento grabar las transacciones en la DB, ya que con accepttext() nos estamos asegurando que si el usuario ha dejado informacin de introducir a medias, este se encarga de aceptar esa informacin que hasta ese momento no se haba aceptado. Con update() le decimos que grabe todas las transacciones pendientes emitidas despus del ltimo ROLLBACK O COMMIT. El update() retorna valores, para este caso, si la variable err es 1 quiere decir que no existen problemas y se puede proceder a almacenar las transacciones a la DB de lo contrario el update() tiene problemas y debemos anular las transacciones pendientes. Nos resta el botn cb_6 el script para este es sencillo close(w_agenda). Para finalizar, esta clase, vamos a crear un botn ms que nos permita exportar datos a otros formatos de datos, como por ejemplo, Excel, Texto, Delimitado por comas, espacios, Fox, Html etc. Pero antes de nada respondamos a la pregunta que fue formulada casi al inicio de la clase y es porque solo dos botones de navegacin y no cuatro, bueno como la primera DW tiene scrollbar verticales no es necesario botnes para caminar hacia adelante o hacia atrs. Un botn ms

Una de las bellezas de PB la exportacin de datos, para terminar con la clase, la ventana w_fondo luce muy poco profesional, pngale un control picture en toda la pantalla con letras grandes SISTEMA DE PERSONAL o algo parecido. Puede utilizar el paint de Windows.

También podría gustarte