Power Builder Clase 6 En clases anteriores hemos visto el IF-END IF, FOR-NEXT, ahora vamos a terminar otros comandos necesarios ya que ellos son pocos. CHOOSE CASE Una estructura de control que dirige la ejecución de un programa basada en un valor de una expresión que es evaluada(usualmente una variable) CHOOSE CASE expresion CASE expresionlista bloque de comandos { CASE expresionlista bloque de comandos ... CASE expresionlista bloque de comandos } CASE ELSE bloque de comandos } END CHOOSE Ejemplos CHOOSE CASE Weight CASE IS<16 Postage=Weight*0.30 Method="USPS" CASE 16 to 48 Postage=4.50 Method="UPS" CASE ELSE Postage=25.00 Method="FedEx" END CHOOSE CHOOSE CASE Real(sle_real.Text) CASE is < 10.99999 sle_message.Text = "Real Case < 10.99999" CASE 11.00 to 48.99999 sle_message.Text = "Real Case 11 to 48.9999 CASE is > 48.9999 sle_message.Text = "Real Case > 48.9999" CASE ELSE sle_message.Text = "Cannot evaluate!" END CHOOSE DO…LOOP Una estructura de control para generar iteraciones usada para ejecutar un bloque de comandos mientras o hasta que una condición sea verdadera. DO... LOOP tiene cuatro formas: · · · · DO UNTIL DO WHILE LOOP UNTIL LOOP WHILE DO UNTIL condición bloque de comandos LOOP DO bloque de comandos LOOP UNTIL condición DO WHILE condición bloque de comandos LOOP DO bloque de comandos LOOP WHILE condición Ejemplos integer A = 1, B = 1 DO UNTIL A > 15 Beep(A) A = (A + 1) * B LOOP integer A = 1, B = 1 DO WHILE A <= 15 Beep(A) A = (A + 1) * B LOOP Estos comandos son más que suficientes para programar en PB. Muy bien, abramos nuevamente la aplicación y visualicemos el system tree, vamos a crear un proyecto y a su ves un EXE. Presionemos CTRL + N, vayamos a la pestaña o solapa PROYECT, y seleccionemos APPLICATION, en EXECUTEBLE FILE NAME, escribir prueba, en REBUILD, FULL, en VERSION, escribir sus datos personales, luego hacer sobre el icono de grabar, colocar el proyecto en cualquier librería. Ahora puedes cerrar el pintor y apreciar el system tree, ubica el proyecto. Ok, haz doble clic sobre el para ir a editarlo y vamos a generar el proyecto, haz clic sobre el icono que está junto a la X, si reposas sobre el aparecerá la leyenda DEPLOY, que significa desplegar, en la ventana output no tendría que dar ningún error, si lo hay comentarlo en instructor para resolverlo, cerrar el pintor y volvamos al system tree. Hechemos un vistazo a lo que sea generado Si observas los archivos que están marcados, observamos Prueba.exe, prueba work space, prueba.pbl, prueba1.pbl, datos.pbl, prueba.pbd ,prueba.pbt. Los más importantes de mencionar son .EXE, PBL y WORK SPACE. Observa el tamaño del .EXE, super pequeño en verdad, puedes correrlo, ya no necesitas el entorno de PB, si quieres lo puedes cerrar y correr el EXE. Ahora, podes crear .DLL, donde cada librería se convertirá en una DLL, volvamos al pintor de proyectos y hagamos un cambio, poner el cheque en machina code y observar como cambia de PBD a DLL, no olvide de chequear las librerías, volver a regenerar la aplicación o hacer el DEPLOY. Observar nuevamente el directorio de trabajo, encontrará las DLL Basta de compilaciones, vanos a continuar con la extensión de la aplicación, creemos una ventana y ponle de nombre w_personal dentro ella vamos a tener TABS o SOLAPAS o LENGUETAS o PESTAÑAS, en realidad reciben muchos nombres, bueno lo que pretendo es enseñarte a como crearlas y usarlas. Una ves creada la ventana coloca sobre ella un control TAB, luego haz clic derecho sobre el y selecciona ADDà INSERT TAB PAGE Deberías tener algo así, para generar el segundo TAB, haz clic derecho sobre NONE para que te de la oportunidad insertar el otro. Amplía el TAB hacia la derecha y cambia de texto a los tabpage a los none, ponle al primero Agenda y al segundo Direcciones, cámbiale de color a tu gusto a los tabpage, coloca un icono a cada uno y cambia font size a 14 o 15 para que se vean bien legibles y a la ventana ponle un color suave, vamos inténtalo. Trata de dejar un espacio en la parte de abajo entre el TAB y la ventana. En el tabpage_1 Agenda, coloca una DW y asóciale d_agenda que ya tenemos. En el tabpage_2 coloca un DW Listo, espero se parezca a esto. Coloca dos botones en la ventana, no en DW, y ponles Filtrar/Nombre, Ordenar/Nombres y ponles a la par un control texto(single line edit) para el caso del filtro únicamente Escribamos el script para el filtro Puedes observar que para hacer mención a la DW tengo que hacerlo con la nomenclatura de punto, primero el objeto se llama tab_1, luego tiene un objeto sobre el tabpage_1 y luego la DW esta sobre tabpage_1, esto se puede minimizar, lo veremos más adelante, observa setfilter() y filter(). Veamos el script para el ordenamiento Observa setsort() con dos parámetros, el primero le indica el campo y el segundo el orden A=Ascendente y D=Descendente, luego se aplica el sort(). Por último necesitamos quitar el filtro o el ordenamiento, aumentar dos pequeños botones para el reset. Reset del filtro Reset del ordenamiento Ahora bien, recuerde que necesita codificar el evento open() de la ventana, se recuerda?, ok, entonces procesa a codificar ese código, además necesita poner una opción más en el menú bajo PROGRAMAS para poder acceder esta ventana, colóquele un icono para poderlo acceder rápidamente. Muy bien, si ya luce así, te felicito ya eres parte del STAFF DE PROGRAMADORES DE PB. Recuerda que tenemos pendiente la segunda solapa la de las direcciones, pero antes necesitamos crear una tabla de nombre direcciones que tendrá los siguientes campos, genera el índice de nombre inx_direccion y que sea único y ascendente. No_telefono varchar(8) Indice Direccion varchar(40) Departamento varchar(15) Sexo varchar(10) No PK Luego genere dos registros con la siguiente información Cierre el pintor y grabe los cambios. Abra el pintor de para crear una datawindow grid, seleccione todos los campos de la tabla direcciones Ahora necesitamos enviarle un parámetro a este SELECT, observa la sintaxis del select hasta ahora, haz clic sobre la solapa del where, aquí estableceremos la condición para traer solo los registros que queramos. Haz clic sobre la opción DESIGNà RETRIEVAL ARGUMENTS y genera un campo de nombre mi_telefono de tipo string, luego clic OK. Haz clic sobre column y selecciona el campo no_telefono de la tabla direcciones y trata de hacer la condición que el no_telefono sea igual mi_telefono, nota que necesitas anteponer dos puntos antes de mi_telefono. Haz clic en la solapa SYNTAX y observa el SELECT, luego haz clic en el icono RETURN Si te pide valores a ingresar, solo haz clic en CANCELAR Tenemos algo parecido a esto?, muy bien!!!, recuerda los tab a cero, grábalo como d_personal en la librería adecuada y asócialo a DW del tabpage2 Ejecutemos a aplicación para ver si funciona con todos los aspectos que hemos introducido y observemos que nos hace falta. Así es, si observas no se muestran los datos de la tabla de direcciones, tenemos que hacer lo siguiente: Ø Necesitas crear una objeto de transacción para esta tabla, tal y como la hiciste para la tabla de agenda Ø Necesitas hacer un retrieve() a los registros de la tabla direcciones, recuerda que debes de enviarle un parámetro, ya que el SELECT lo espera, el parámetro es el no_telefono de agenda hacia la tabla direcciones, recordar que la relación es una a una Ø Necesitas sincronizar la DW de agenda con respecto a DW de direcciones, en el sentido de acceder a las direcciones correspondientes en base al no_telefono, esto lo debes de planear en el evento OPEN() de ventana y en el evento ROWFOCUSCHANGED de la DW de agenda Como ves el panorama? Se oye imposible, pero no lo es, empecemos entonces….. Evento OPEN() Y el evento ROWFOCUSCHANGED Al ejecutar la aplicación Para finalizar haremos un reporte para poder verlo en pantalla o enviarlo a la impresora, entonces tu debes: Ø En esta ventana, aumentar un tabpage Ø Ponerle una DW y asociarla a d_agenda o crear una propia con encabezados Ø Poner dos botones en el tabpage Pantalla y el otro Impresor Ø En el boton pantalla codificar el script w_3.settransobject(sqlca); Ø dw_3.retrieve(); Ø En el boton Impresor codificar el script dw_3.settransobject(sqlca); Ø dw_3.retrieve(); Ø long Job Ø Ø Job = PrintOpen( ) Ø Ø dw_3.Print() Ø Ø PrintClose(Job) Espero que este curso haya satisfecho tus expectativas de programador y haber conocido el mundo maravilloso de PB, si deseas documentarte más puedes visitar www.powerbuilder.org o www.sybase.com. Editado por JAAF