miércoles, 16 de enero de 2013

Diseño y programación de la ventana de Mantenimiento

Vamos a realizar un siguiente Ejemplo sobre mantenimiento de un tabla de nuestra base de datos, para el ejemplo he tomado una BD cualquiera (lo importante en este momento es saber como programar la ventana de mantenimiento) mi tabla se llama "Cliente" y haremos la siguiente ventana en Power Builder.



Usamos los siguientes controles:

Tab Control: Contenedor de paginas, ayuda al espacio en la ventana. 

CommandButton: Botones de acción para nuestros eventos: Nuevo, Modificar, Eliminar, Buscar, Grabar, Cancelar.

Data Window Control: La data que enlazaremos al objeto Datawindow para manipular los datos en inserción, consultas.

SingleLineEdit: Caja de texto para hacer la consulta a nuestro listado.

StaticText: Etiqueta de texto.


Cambiamos los siguientes controles:

Control
Propiedad
Valor
Tab_1
Name
tab_1

TabPosition 
tabsontop!

tabpage_1


TabText
LISTADO

PictureName
ArrangeIcons!

tabpage_2


TabText
REGISTRO

PictureName
Project!
St_1
Name
st_1

Text
Buscar por Nombre:
St_2
Name
st_total
Cb_1
Name
cb_nuevo

Text
Nuevo
Cb_2
Name
cb_modificar

Text
Modificar
Cb_3
Name
cb_eliminar

Text
Eliminar
Cb_4
Name
cb_cerrar

Text
Cerrar
Cb_5
Name
cb_grabar

Text
Grabar
Cb_6
Name
cb_cancelar

Text
cancelar
Cb_7
Name
cb_buscar

Text
Buscar
Dw_1
Name
dw_listado

Dataobject
d_mtto_cliente_listado

HScrollBar
True

VScrollBar
True
Dw_2
Name
dw_registro

Dataobject
d_mtto_cliente_registro

Border
False



Programamos los siguientes Controles:

Evento Open de la Ventana principal:

La 1º linea de código realiza la conexión del datawindow para las transaciones, la conexión se realiza en el evento open del proyecto: "connect using sqlca", la 2º linea realiza la recuperación de datos del datawindow (aunque esto no deberia hacerse porque retorna toda la data en el listado, imaginate si hubiera 1000 filas esto haria lento el proceso de listado pero por ejemplo pondremos retrieve en el open), la 3º linea activa el sólo lectura del datawindow listado, y la 4º linea retorna la cantidad de filas recuperadas en el datawindow.

Evento Open del proyecto

Este código realiza la conexión con la Base de datos SQL Server, para ello tenemos que haber creado el DSN en el ODBC, creado el perfil de conexión. Connect using sqlca nos permite activar la conexión para ser usado en todo el proyecto, luego validamos si la conexión tubo errores, si no es asi abrimos la ventana principal.

 Evento Clicked del Boton Nuevo

Cuando damos click en Nuevo, cambiaremos el siguiente tabpage y lo seleccionamos, luego llamamos la funcion insertRow para insertar una nueva fila en el datawindow registro, recordemos que usaremos un datawindow de tipo FreeForm. SetFocus enfoca el control, setcolumn(1) establece la columna 1 del dw_registro. y la variable: is_opcion = 'N' es para poder saber que acción se hace cuando validemos el boton grabar.

Evento Clicked del Boton Modificar


 Validamos si existen filas en nuestro listado, si no hay datos, detenemos la ejecución con "RETURN", luego asignamos en la variable is_codigo el valor obtenido del listado: GetItemString es una función del datawindow  que nos permite obtener un dato de una determinada FILA, y COLUMNA del datawindow. Hacemos algo parecido al Nuevo, cambiamos el tabpage y asignamos un valor M a la variable is_opcion para validar en nuestro boton grabar.

Evento Clicked en el botón Eliminar

 
Validamos si hay filas en el dw_listado, obtenemos un valor determinado de la fila seleccionada con getrow y la columna 1. Con messagebox realizamos la pregunta el cual si podemos eliminar o no, de acuerdo al valor elegido lo asignaremos en li_r, si es 1 (ok) eliminamos la fila y actualizamos el datawindow, si el valor es 0 (cancelar) No hacemos nada.

Evento Clicked para el Botón Buscar

 El boton Buscar nos permitira filtrar el datawindow, primero asignamos en la variable ls_cadena lo que capturamos del control sle_buscar, con upper transformamos en mayuscula los datos de la caja de texto. Luego asignamos el filtro como si fuera el where de una consulta SQL, aplicamos el filtro con filter y usamos un retrieve para retornar los datos. Luego retornamos la cantidad de filas que se recupero.

 Evento Clicked para el Botón Cerrar

 Close nos permite cerrar la ventana.

Evento de Usuario: ue_keydown

En la caja de texto creamos luego un evento de usuario: Donde dice Event ID seleccionamos pbm_keydown para activar las acción por teclado, la variable key toma el valor del enter, Si presionamos Enter de nuestro teclado se activara este evento, y tambien llamaremos el evento click del boton buscar. TriggerEvent es el que realiza este proceso de llamar el evento clicked! del botón buscar.


Evento Clicked del datawindow Listado

Este código nos permite ordenar las columnas cada vez que damos clic en las cabeceras de nuestro listado. Usamos la función setSort para definir nuestro ordenamiento y Sort para activar el ordenamiento. SetRedRaw nos permite refrescar la parte video para poder visualizar los datos en el dw_listado.

Evento RowFocusChanged del datawindow Listado

 
Estas 2 lineas de código nos permitira sombrear la fila seleccionada. setrowfocusindicator(hand!) nos permite ver una mano en el lado izquierdo de nuestra fila.

Evento Clicked del botón Grabar

Este botón es quien se encarga de registrar o actualizar datos en la base de datos, esto es mediante la función Update del datawindow registro, con is_opcion mandaremos mensajes diferentes de acuerdo al boton. Cuando queramos grabar o actualizar los datos nos saldra una pregunta, si le damos Ok grabamos o actualizamos y retornamos a nuestro listado.

Evento Clicked del botón Cancelar

Lo que hacemos aquí es reiniciar el datawindow registro, recuperamos los datos del datawindow listado, enfocamos el control de caja de texto, y cambiamos el tabpage, regresandolo como estaba en un inicio.

VARIABLES DE INSTANCIA
 

Escribimo las variables de instancia que usaremos en el formulario o ventana, is_codigo para capturar el código a modificar del datawindow listado, is_name para capturar el nombre del campo en el momento de ordenar por columna, is_opcion para poder saber que acción estamos realizando si es Nuevo o Modificar, y ib_activa un boolean para activar o desactivar en nuestra logica de ordenamiento de campos por columna.