Você está na página 1de 62

ENTRENAMIENTO EN POWER BUILDER 9.

0
PowerBuilder es una herramienta computacional que permite la elaboracin de aplicaciones cliente/servidor utilizando principalmente elementos grficos. Las aplicaciones desarrolladas con PowerBuilder se almacenan en una librera (PowerBuilder Library, archivos caracterizados con el tipo *.PBL ). Una vez desarrollada una aplicacin PowerBuilder, se crea un archivo tipo *.EXE para que los usuarios ejecuten la aplicacin desde Windows cuando lo deseen. La versin 9.0 del entorno integrado para desarrollo de aplicaciones empresariales ofrece mejoras significativas en rendimiento y productividad, un amplio soporte para componentes estndar, basados en Web y muchas caractersticas orientadas al uso de XML. Algunas de las nuevas caractersticas son: Soporte DataWindow XML: Esta caracterstica permite exportar e importar las filas de datos del DataWindow a y de Lenguaje Extensible de Marcado (XML) Usted puede especificar la estructura lgica de cmo las filas iteran dentro del elemento raz del documento XML. Esto ser realiza por medio de objetos plantilla XML que estn encapsulados en objetos DataWindow y construidos grficamente en una nueva vista del DataWindow Painter. PowerBuilder Document Object Model (PBDOM): PBDOM es la implementacin PowerBuilder del Modelo de Objetos de Documento (DOM), una interfaz de programacin que define la forma en que se pueden acceder y manipular documentos XML. A pesar de que PBDOM no es una implementacin DOM API del consorcio World Wide Web (W3C), el API PowerBuilder API se puede usar para leer, escribir y manipular XML de formato estndar desde dentro de cdigo PowerScript. PBDOM representa un documento XML como una coleccin de objetos interconectados y mtodos intuitivos que indican el uso y funcionalidad de cada objeto. La interfaz nativa PowerBuilder (PBNI): La interfaz nativa PowerBuilder (PBNI) es una interfaz estndar de programacin que permite a los desarrolladores extender la funcionalidad de PowerBuilder. Utilizando PBNI, usted puede crear extensiones para PowerBuilderextensiones no visuales, visualese integrar la mquina virtual de PowerBuilder en aplicaciones C++. Por medio de JNI, las aplicaciones Java se pueden comunicar tambin con la PBVM. Destinos JSP: PowerBuilder 9 provee un ambiente de desarrollo para creacin de JSP fcil de usar que automatiza varias tareas de desarrollo y permite el desarrollo de aplicaciones Web compatibles con JSP 1.2. Un modelo de objetos JSP duplica con muy pocas modificacionesla funcionalidad de servidor disponible anteriormente para destinos web ASP y PowerDynamo, incluyendo la extensin de modelo de eventos 4GL para aplicaciones PowerDynamo. Servicios Web para los clientes JSP: Usted puede utilizar servicios Web en pginas JSP generando etiquetas (tags) personalizadas para estos. PowerBuilder 9 provee un asistente que crea una etiqueta personalizada con la informacin necesaria para llamar un servicio Web en un JSP. Servicios Web para los clientes Windows:

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 1 de 2

Una aplicacin PowerBuilder puede actuar como un cliente utilizando un servicio Web (Web Service) que se accede por medio de Internet. Utilizando SOAP y WSDL, un conjunto de funciones publicadas remotamente como una sola entidad pueden llegar a hacer parte de su aplicacin PowerBuilder. Un servicio Web acepta y responde solicitudes enviadas por aplicaciones u otros servicios Web. Clientes EJB para servidores de aplicacin de terceros: Una aplicacin PowerBuilder puede actuar como un cliente de un componente EJB que se ejecuta en un servidor de aplicaciones que es compatible con J2EE. Se probaron los servidores incluyen Sybase EAServer 4.1, IBM WebSphere 4.0, y BEA WebLogic 6.1 y 7.0. Mejoras en el control origen (Source control): PowerBuilder 9 incluye caractersticas para mejorar la velocidad y desempeo de la integracin del control de orig en. El lenguaje OrcaScript: OrcaScript permite escribir guiones (scripts) por lotes para procesar aplicaciones y archivos PowerBuilder sin utilizar el ambiente de desarrollo de PowerBuilder. Soporte para Oracle 9i: PowerBuilder 9 soporta pools de co nexiones, tipos de datos NCHAR o NVARCHAR2 y tipos de datos LOB con Oracle9i. Importar y guardar XML y XSV: Los mtodos ImportFile, ImportString, e ImportClipboard para los objetos DataWindows y Graph soportan como formatos de importacin XML y CSV y el mtodo SaveAs soporta XML. En los painters DataWindow y Database tambin puede importar y guardar utilizando estos formatos. Guardar PDF: como XSL -FO y

Basado en la habilidad de guardar datos como XML, PowerBuilder tambin puede guardar los datos y presentacin del DataWindow como un documento o cadena utilizando Formato de Objetos XSL (XSL -FO) o Formato de Documentos Portables (PDF). Versiones DBCS de las funciones de cadena: Ahora hay disponibles para ambientes BDCS versiones separadas de funciones de cadenas basadas en caracteres. Los caracteres en ambientes DBCS pueden ser de un nico byte, doble byte, o mixtos, pero las funciones de cadena estndares retornan datos de caracteres de un solo byte. Mejoras en el DataWindow: Mejoras en la impresin, recuperacin de DataWindows Hijos, Desplazamiento (scrolling) en reportes de grupo. Mejoras en el depurador

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 2 de 3

COMPONENTES DE UNA APLICACIN POWERBUILDER.


Objetos.
Un objeto es una forma de comunicacin con el usuario, por ejemplo una ventana o un men. Nombres de objetos PowerBuilder: Application object Window DataWindow Menu Global functions Queries Structures User objects Libraries Projects

Eventos.
Un evento puede ocurrir cuando un usuario ejecuta una accin con el ratn, el teclado, por una orden del lenguaje PowerScript de PowerBuilder o por el mismo sistema. Algunos de los eventos ms comunes son: Clic (clicked) Doble clic (DoubleClicked) Modificacin (Modified) Abrir (Open) Cerrar (Close) Tomar el foco (GetFocus) Perder el foco (LoseFocus) Cambiar la seleccin (SelectionChanged)

Scripts.
Un script es un conjunto de rdenes escritas en lenguaje PowerScript que se deben ejecutar al ocurrir un evento.

COMPONENTES DE UNA VENTANA. Controles.


Un control es u n objeto colocado en una ventana. Los controles son: CheckBox CommandButton DataWindow DropDownListBox DropDownPictureListBox EditMask Graph GroupBox HscrollBar Line ListBox ListView MultiLineEdit OLEcontrol OLECustomControl Oval Picture PictureButton PictureListBox RadioButton Rectangle
ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes Pgina 3 de 4

RichTextEdit RoundRectangle SingleLineEdit StaticText Tab TreeView UserObject VscrollBar

Focus.
Identifica el lugar de la pantalla donde va a suceder la siguiente accin. Para establecer el foco en un sitio deseado, el usuario puede: Mover con el ratn el apuntador a un control y hacer clic. Presionar la tecla del tabulador hasta el control deseado. Un control puede perder el foco cuando el usuario: Hace clic en otro control. Hace clic en otra ventana donde no hay controles. Presiona la tecla del tabulador y pasa a otro control.

Atributos.
Los objetos y controles tienen atributos que definen su: Apariencia. Comportamiento.

LENGUAJE POWERSCRIPT

Es un lenguaje de alto nivel basado en objetos con el cual se pueden construir scripts. PowerScript tiene: Comandos, por ejemplo IF ... THEN. Funciones predefinidas para manipular objetos, nmeros, textos, para procesar fechas y datos de tiempo, imprimir reportes, ejecutar DDE (Dynamic Data Exchange), manejar archivos; por ejemplo SHOW, MOVE, OPEN, MAX, HIDE. Las funciones regresan un valor (return value) que puede ser utilizado o ignorado. Proposiciones SQL, por ejemplo SELECT, INSERT, UPDATE. Variable s: Locales en un script. A nivel de una ventana/objeto. Globales. Convenciones aconsejadas por PowerBuilder para dar nombre a los objetos:

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 4 de 5

Cuando se estn creando los objetos, PowerBuilder sugiere un nombre para el objeto utilizando el prefijo de la tabla anterior y un nmero. Ellos aconsejan cambiar este nmero por algo significativo para el usuario que est elaborando el aplicativo.

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 5 de 6

EJERCICIO PRCTICO
El ejercicio deben hacerlo de forma individua l y presentarlo funcionando perfectamente, desde ejecutable y desde PowerBuilder. En grupo deben presentar un informe, indicando sus comentarios sobre este documento, errores encontra dos, sugerencias para mejorarlo y utilidad al realizar el ejercicio.

Elaborar una Aplicacin sencilla, que permita manipular informacin del personal de una empresa as: a) Listar todos los empleados, b) Buscar los empleados que concuerden con el nombre y/o el primer apellido digitado por el usuario, c) Buscar los empleados de un determinado Departamento. Una vez obtenida la lista, al hacer la seleccin de un empleado ver sus datos detallados. La aplicacin tambin debe estar en capacidad de ejecutar las acciones de impresin, adicin, modificacin y borrado de datos de empleados. Como un servicio adicional de la Aplicacin, se debe proporcionar una Calculadora que est en capacidad de ejecutar las cuatro operaciones aritmticas bsicas: suma, resta, multiplicacin y divisin de dos valores dados por el usuario. Estructura de la aplicacin:

VENTANA PRINCIPAL

Ventana para Bsqueda

Ventana para Mantenimiento

Calculadora

Los pasos indica dos a continuacin corresponden a un procedimiento que se puede seguir utilizando PowerBuilder 9.0 y Sistema Operativo Windows 98 (de forma similar en Windows 95, NT, 2000 y XP): 1. Entrar a Windows. 2. Escoger un ejercicio (recomendado). directorio exclusivo para dejar todos los archivos del

3. Copiar en este directorio: Tres (3) archivos tipo *.bmp Tres (3) archivos tipo *.ico 4. Activar PowerBuilder.

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 6 de 7

5. Crear un rea de trabajo (workspace):

5.1. Crear una nueva aplicacin: En barra de herramientas New Workspace, o, En men File New Workspace 5.2. Llenar los datos de la ventana New Workspace, as: Nombre de Archivo Escribir el nombre del archivo donde va a quedar almacenado el rea de trabajo. 5.3. Guardar. Automticamente PowerBuilder genera un archivo con extensin .pbw, y se muestra el rea de trabajo en el rbol de sistemas (panel de la izquierda).

6. Establecer opciones del rea de trabajo: En men Tools System Options Workspaces asegurarse de que estn seleccionadas las opciones Reopen Workspace on startup y Reload Pain ters when opening workspace. OK.

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 7 de 8

7. Crear una aplicacin:

7.1. Crear una nueva aplicacin: En barra de herramientas New Target Application, o, En men File New Target Application 7.2. Llenar los datos de la ventana Specify New Application and Library, as:

Application Name Escribir el nombre del archivo donde va a quedar la Librera. Library Seleccionar el directorio donde se van a dejar los archivos del ejercicio. Target Seleccionar el directorio donde se van a dejar los archivos del destino. Nota: un archivo de destino (target) puede contener varias libreras. 7.3. Finish. Automticamente PowerBuilder genera un archivo con extensin .pbl, otro con extensin .pbt y una aplicacin con el mismo nombre del archivo.

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 8 de 9

Workspace Target Library rbol de Sistema Application

Si se quieren colocar comentarios a la aplicacin creada (y de la misma forma a la mayora de componentes), Se presiona clic derecho sobre el nombre de la aplicacin (o el componente) en el rbol de sistema, se selecciona propiedades y se escriben los comentarios deseados OK, o, En barra de herramientas Open Objects of Type: Applications Seleccionar el nombre de la aplicacin OK

File Save as Seleccionar el archivo de librera Guardar Save Application Aparece nombre de la aplicacin y directorio seleccionado aqu se puede colocar otro nombre a la aplicacin, entonces Power Builder crea otra aplicacin con el nombre actual) Comments: Escribir un comentario significativo relacionado con la aplicacin OK

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 9 de 10

8. rbol de sistema: La ventana rbol de sistema (System Tree) sirve como el centro de sus actividades de desarrollo. Esta se utiliza para abrir, ejecutar, depurar y construir (build) sus destinos (targets), y para realizar operaciones de programacin arrastrando y soltando. En esta se pueden visualizar y seleccionar: el rea de trabajo (workspace), los destinos (targets), las libreras .pbl existentes, los objetos respectivos, sus propiedades, eventos, funciones y estructuras.

rbol de sistema

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 10 de 11

9. Elaborar una ventana como la siguiente:

9.1. En barra de herramientas

New PB Object Window OK.

9.2. Para manejar el objeto creado PowerBuilder 9.0 abrir por omisin dos vistas bsicas en una ventana: Layout (donde podr visualizar la forma del objeto) y Properties. Por medio de unas solapas ubicadas en la parte inferior de las dos vistas bsicas mencionadas es posible acceder a otras vistas tales como script (en el diagrama aparece como open), Event List, Control List; en este caso las propiedades de una ventana son agrupadas bajo tres grupos de caracterstica s: General, Scroll, Toolbar y Other.

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 11 de 12

9.3. Mirar, comprobar y/o modificar caractersticas de la ventana: Si se quieren observar y/o modificar las caractersticas de la ventana, situndose en la vista de Layout y no est activa la vista de Properties, con el botn derecho Properties... 9.3.1. Para la ventana Window en el tipo de caractersticas (solapa) General colocar: Identificacin o ttulo deseado (Title: ICF Pantalla para bsqueda) Elementos activos (Control Menu, Maximize Box, Minimize Box, ...) Tipo de ventana (Window Type): popup! En la serie de caractersticas Other Dentro de Position se puede colocar la ubicacin y tamao dentro de la pantalla 9.4. Colocar los objetos deseados dentro de la ventana y darle sus caractersticas. 9.4.1. Insertar el control CommandButton en la ventana, as: En el men: Insert Control CommandButton En barra de herramientas: Control CommandButton

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 12 de 13

9.4.2. En la ventana, hacer clic en el sitio donde se desea ubicar el control seleccionado. 9.4.3. Mirar, comprobar y/o modificar las caractersticas del control (hay que tener seleccionado el control deseado): En barra de herramientas Properties, o, En la vista de Properties..., o Con botn derecho dentro del control Properties..., o Doble clic dentro del control 9.4.4. En la vista de Properties, las caractersticas de un ComandButton estn agrupadas en: General, Font y Other. Dar al control CommandButton las caractersticas del control, tales como: Nombre del control (cb_salir). Texto deseado dentro del control. (&Salir) Caractersticas de aparicin. Caractersticas de las fuentes. Posicin dentro de la ventana.

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 13 de 14

9.4.5. Grabar el trabajo adelantado (Guardar la ventana en la librera): En barra de herramientas Save, o En men File Save, o En men File Save as..., o Ctrl + S 9.4.6. En la ventana Save Window escribir: Nombre de la ventana (por ejemplo, w_icf_basica). Un comentario. 9.4.7. OK 9.4.8. Para ver cmo va quedando el diseo de la pantalla: En barra de herramientas Preview, o En men Design Preview, o Ctrl + Shift + P 10. Elaborar una ventana como la siguiente:

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 14 de 15

Esta ventana debe heredar las propiedades de la ventana anterior (ICF -Pantalla bsica). Por lo tanto se puede seguir un procedimiento similar, con las siguientes particularidades: 10.1. Cierre la ventana anterior y Cree la nueva ventana: En el men File Inherit... (si la ventana de la cual hereda est abierta esta seleccin no funcionar) En la ventana Inherit From Window seleccionar la ventana que da las caractersticas a heredar. OK 10.2. Mirar y/o cambiar las caractersticas de la ventana heredada. 10.3. Aadir los otros controles mostrados en la figura (un CommandButton y un RadioButton). 10.4. Cambiar el texto del CommandButton heredado &Salir por &Cancelar. 10.5. Los controles deben quedar con las caractersticas de visible y enabled 10.6. Grabar el trabajo adelantado (Guardar la ventana en la librera; nombre sugerido: w_icf_busqueda) 10.7. Ver cmo va quedando el diseo y si es necesario hacer las modificaciones que estime convenientes. 11. Elaborar una ventana como la siguiente:

Esta ventana debe heredar las propiedades de la ventana anterior (ICF - Pantalla bsica para bsqueda), con las siguientes particularidades: 11.1. Mirar y/o cambiar las caractersticas de la ventana heredada. Cambiar el texto del RadioButton heredado &Otro por &Todos 11.2. Aadir los otros controles mostrados en la figura: Dos SingleLineEdit, uno para Nombre y otro para Primer Apellido. Tres StaticText: Nombre, Primer Apellido y Departamento. Un DropDownListBox, con la lista de los siguientes Departamentos: Contabilidad Personal Ventas Mercadeo Desarrollo Recursos Administracin Sistemas En el tipo de caractersticas (solapa) General colocar: ShowList y VScrollBar.
ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes Pgina 15 de 16

Agregar la lista de Departamentos, en la vista Properties del DropDownListBox en el grupo de caractersticas: Items.

Dos RadioButton, para Por Nombre y Por Departamento. Un GroupBox, para Buscar. Un PictureButton para Imprimir. Escoger de la lista de archivos *.BMP una figura para el caso que est disponible el servicio de impresin y otra figura para el caso que no est disponible. Un DataWindow, identificado como Datos de los Empleados. All se mostrarn los resultados de consulta a la base de datos (posteriormente se harn las asociaciones necesarias con los DataWindows object que acceden a la base de datos). 11.3. Dar las dems caractersticas deseadas, tanto a la ventana como a los controles. 11.4. Grabar el trabajo adelantado. (nombre sugerido: w_icf_pordepto_nom) 11.5. Ver cmo va quedando el diseo y si es necesario, hacer las modificaciones que estime convenientes. 12. Elaborar una ventana como la siguiente:

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 16 de 17

El objetivo es tener una calculadora en la cual se va a obtener un resultado aritmtico dados dos operandos. 12.1. Crear la ventana y colocar sus caractersticas (ventana tipo popup). 12.2. Coloca r los objetos y sus caractersticas, as: Dos SingleLineEdit, para primer y segundo operando. Cuatro StaticText, uno para colocar el resultado de la operacin aritmtica (el cual no tendr texto) y tres para colocar los textos: Primer Operando, Segundo Operando y Resultado. Cuatro CommandButton, uno para cada operacin: suma, resta, multiplicacin y divisin. Dos Rectangle, uno para encerrar el resultado y otro para encerrar los CommandButton de las operaciones aritmticas. 12.3. Grabar el tra bajo adelantado. 12.4. Ver cmo va quedando el diseo y (si es necesario) hacer las modificaciones que estime convenientes. 13. Colocar el punto de entrada del aplicativo (inicio de ejecucin). Inicialmente direccionar directamente a la Calculadora. 13.1. En el rbol de sistema: Presionar doble clic sobre la aplicacin, o, barra de herramientas

Al abrir el objeto Application, PowerBuilder abre por omisin la vista Script, con el mtodo open seleccionado. 13.2. Para programar el evento inicial de la aplicacin, escribir el programa (script) para abrir la ventana con el cual inicia el aplicativo; en esta primera etapa ser la ventana donde est el diseo de la calculadora. En la vista de Script de la aplicacin seleccionar el evento open (abrir), si no esta ba ya seleccionado. Elaborar un programa asociado con el evento open, similar al siguiente: // open icf_1 // Punto inicial del aplicativo. open (w_icf_calculadora) //Nombre de la ventana que se desea activar.

Open Objects of Type: Applications Seleccionar el nombre de la aplicacin OK

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 17 de 18

Sugerencia: Cuando se est escribiendo el programa y se necesita el nombre de un objeto o una variable, este nombre se puede traer directamente (no hay necesidad de digitarlo) desde el rbol de sistema (system tree) arrastrando y soltando o utilizando las ventana clip, la cual se despliega por medio de barra de herramientas Window Clip, o utilizando las opciones Paste Global, Paste Shared, Paste Instance, Paste Window, Paste Object y Paste Argument de la barra de herramientas haciendo la seleccin apropiada. Tambin se pueden utilizar las otras facilidades que se proporcionan a travs de las barras de herramientas y opciones de los mens. 13.3. Compilarlo (paso opcional): En barra de herramientas: Compile, o En men: Ctrl + L

Edit Compile, o

13.4. Volver a la ventana principal d e PowerBuilder: En barra de herramientas: Close Si no hizo el paso de compilacin, confirmar (compilar y grabar) o descartar los cambios realizados, en la ventana de dilogo Application: Cancelar. 14. Probar que la aplicacin se puede ejecutar: En barra de herramientas: Run, o En men: File Run, o Ctrl + R 15. Escribir las dems acciones que se desean tener al utilizar la calculadora.
ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes Pgina 18 de 19

S, o No, o

Se sugiere que la calculadora efecte por lo menos las operaciones aritmticas bsicas (suma, resta, multiplicacin y divisin) y permita algunas facilidades de manejo de memoria. 15.1. Seleccionar la ventana de la calculadora. 15.2. Elaborar un programa, asociado con el evento modified (modificar), del control que recibe el primer operando, similar al siguiente: // modified sle_operando1 If not IsNumber(This.text) Then MessageBox ("Error", "Se debe dar un nmero", StopSign!, OK!) This.text = "" This.SetFocus() End if 15.3. Para el control que recibe el segundo operando, escrib ir un programa similar al que recibe el primer operando. 15.4. Elaborar un programa, asociado con el evento clicked, del botn que va a ejecutar la operacin de suma, similar al siguiente: // clic cb_suma Double oper1, oper2, oper3 oper1 = Double(sle_operando1.text) oper2 = Double(sle_operando2.text) oper3 = oper1 + oper2 st_resultado_n.text = String(oper3) 15.5. Elaborar programas similares para las operaciones de resta, multiplicacin y divisin. 15.6. Dejar el resultado en blanco, cuando se pase el curs or al campo que recibe el primer o segundo operando (programar el evento getfocus: st_resultado_n.text = ). 15.7. Probar la aplicacin. 16. Seleccionar el botn Salir de la ventana bsica: w_icf_basica y asociarle un programa que cierre la ventana (programar el evento clicked), con un programa como el siguiente: // clic cb_salir If MessageBox("Salir", "Cerrar esta ventana?", Question!, YesNo! ) = 1 then Close( Parent ) End If 17. Correr la ventana para probar su funcionamiento: En barra de herramientas File Run/Preview Objects of Type: Windows Object: nombre de la ventana, en este caso: w_icf_basica OK 18. Seleccionar la ventana donde se pueden hacer bsquedas. 18.1. Seleccionar el control Todos (RadioButton) y elaborar un programa para que cuando este control sea el seleccionado, desactive los controles que piden datos. Puede ser un programa como el siguiente: // Ventana: w_icf_pordepto_nom, Objeto: rb_todos, Heredado de: // w_icf_busqueda:rb_otro // Evento: Clicked ddlb_departamento.visible = false sle_nombre.visible = false sle_primer_apellido.visible = false st_nombre.visible = false st_primer_apellido.visible = false st_departamento.visible = false dw_datos_empleados.visible = false 18.2. Correr la ventana para probar su funcionamiento. 18.3. Seleccionar el control Por Nombre (RadioButton). Escribir un programa para que active los campos que piden los datos de nombre. Puede ser un programa como el siguiente: // Ventana: w_icf_pordepto_nom, Objeto: rb_nombre // Evento: Clicked
ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes Pgina 19 de 20

ddlb_departamento.visible = false sle_nombre.visible = true sle_primer_apellido.visible = true st_nombre.visible = true st_primer_apellido.visible = true st_departamento.visible = false dw_datos_empleados.visible = false 18.4. Correr la ventana para probar su funcionamiento. 18.5. Seleccionar el control Por Departamento (RadioButton). Escribir un programa para que active el control que pide el dato de Departamento. Puede ser un script como el siguiente: // Ventana: w_icf_pordepto_nom, Objeto: rb_departamento // Evento: Clicked ddlb_departamento.visible = true sle_nombre.visible = false sle_primer_apellido.visible = false st_nombre.visible = false st_primer_apellido.visible = false st_departamento.visible = true dw_datos_empleados.visible = false 18.6. Correr la ventana para probar su funcionamiento. 19. Crear una funcin que sirva para ejecutar las cuatro operaciones bsicas aritmticas: sumar, restar, multiplicar y dividir. 19.1. En barra de herramientas o en el men seleccionar: New PB Object Function. 19.2. Llenar los datos solicitados: 19.2.1. Valor a retornar (Return Type): string. 19.2.2. Nombre de la funcin. 19.2.3. Dar los argumentos: primer operando (arg_operando1, tipo string, paso por valor), segundo operando (arg_operando2, tipo string, paso por valor) y operador (arg_operador, tipo integer, paso por valor) 20. Escribir las instrucciones que van a conformar la funcin. Puede ser un programa como el siguiente: // Nombre de la funcion: f_operaciones // Objetivo: H acer un clculo aritmtico // Parmetro 1: Primer operando // Parmetro 2: Segundo operando // Parmetro 3: Operacin a realizar as: // 1 Sumar // 2 Restar // 3 Multiplicar // 4 Dividir Double oper1, oper2, oper3 IF arg_operando1 = "" OR arg_operando2 = "" THEN Messagebox ("Error","Los operandos deben ser aritmticos",StopSign!, OK!) return "" END IF oper1 = Double(arg_operando1) oper2 = Double(arg_operando2) Choose Case arg_operador Case 1 oper3 = oper1 + oper2 Case 2 oper3 = oper1 - oper2 Case 3 oper3 = oper1 * oper2 Case 4
ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes Pgina 20 de 21

If oper2 = 0 Then Return "Divisin por cero" Else oper3 = oper1 / oper2 End If Case else Return "Operacin no vlida" End Choose Return String (oper3)

21. Cambiar los programas asociados con los botones de operaciones de la ventana de la calculadora para que utilicen la funcin anterior. 21.1. Para el botn de Resta (-) puede ser un programa como el siguiente (para el evento clic): // clic para cb_resta st_resultado_n.text = f_operaciones ( sle_operando1.text, sle_operando2.text, 2 ) 21.2. Proceder de manera similar para la suma, multiplicacin y divisin. 21.3. Probar su funcionamiento. 21.4. Comprobar el funcionamiento de la Calculadora para valores con punto decimal. En caso que no funcione, hacer las modificaciones necesarias. 22. Crear una base de datos que implemente lo mostrado en la siguiente figura:

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 21 de 22

22.1. Crear localmente una nueva base de datos. Dejar el archivo fsico en el directorio donde se estn dejando todos los archivos de este ejercicio: En barra de herramientas: Database, o, En el men: File New Database Database Painter, o, Shift + F7

Se crea una base de datos local: En Database Painter aparece la vista de Objects, en el rbol Installed Database Interfaces ODB ODBC Utilities Create ASA Database.

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

1
Pgina 22 de 23

Aparece la ventana Create Adaptive Server Anywhere Database, se deben llenar los datos all pedidos: Database Name: Camino y nombre del archivo en Windows donde se va a guardar el archivo fsico. Se sugiere: Browse, Llegar al directorio deseado, y Dar el nombre al archivo. User ID: Identificacin del usuario. Valor por omisin: DBA Password: Clave. Valor por omisin: SQL. OK

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 23 de 24

23. Es bueno comprobar lo siguiente: En el rbol Installed Database Interfaces ODB ODBC Utilities ODBC Administrator, o, En Windows Inicio Configuracin Panel de Control Fuentes de datos ODBC (32 bits): En ventana Administrador de Orgenes de Datos ODBC (ODBC Data Source Administrator): DSN de usuario (User DSN) en donde aparece ahora una nueva entrada ODBC con el nombre del perfil creado ante la base de datos, cuyo controlador ser Adaptive Server Anywhere 8.0. Al dar doble clic sobre dicha entrada ODBC se aprecia la ventana ODBC Configuration for Adaptive Server Anywhere: en el tab de ODBC aparece el nombre de la fuente de datos (Data Source Name); en el tab de Login los datos proporcionados de User ID y Password; y en el tab de Database el nombre y la ubicacin de la base de datos creada.

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 24 de 25

Retornando a PowerBuilder, en la vista de Database Painter o en la vista de Database Profiles (las dos opciones de la barra de herramientas) se encuentra ahora la conexin activa (indicada por un chulo sobre el perfil) a la base de datos creada. Al dar con el ratn doble clic sobre el perfil seleccionado o clic derecho Properties: se puede ver la ventana Database Profile Setup ODBC: En la solapa Connection se encuentra: el nombre de la fuente de datos (Data Source) y del perfil (Profile Name), adems de los datos de User ID y Password; en la solapa Preview se observa la sintaxis de la conexin a la base de datos perteneciente al perfil creado.

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 25 de 26

En caso de algn problema, hay que arreglarlo o sino la base de datos queda inalcanzable. En casos extremos: borrar la base de datos recin creada, revisar la Configuracin ODBC, revisar los Profile, y ver las entradas que puedan estar causando conflicto (si es del caso borrarlas Remove). 24. Crear las tablas (Estando la base de datos activa) Definir las columnas y sus caractersticas: nombre, tipo de datos, aceptacin o no de nulos, valor por omisin. Colocar letreros significativos para encabezamientos de columnas, rtulos identificadores de campos y comentarios a nivel de tabla y columna. Para ello: En la barra de herramientas Create Table, o,

Conectarse a la base de datos, clic para desplegar sus componentes dentro de ellos se encuentran Tables y me diante clic derecho con el ratn

New Table

Definir las columnas Save Table as

25. Seleccionada una tabla: definir la llave primaria, crear los ndices y llenar datos. Definir llave primaria: clic derecho sobre la cualidad Primary key New Primary key Crear ndices: clic derecho sobre la cualidad Index New Index Crear llaves forneas: clic derecho sobre la cualidad Foreign key New Foreign key, en la solapa General Columns seleccionar la columna que es llave fornea y en la solapa Primary Key seleccionar la tabla y las columnas que estn asociadas con la llave fornea. Llenarla de datos: Clic derecho sobre la tabla Edit Data (grid, tabular o freeform)
ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes Pgina 26 de 27

Insert Row Digitar los datos En Barra de Herramientas Save Changes

Una vez creadas y llenas todas las tablas de la base de datos cerrar la vista de DataBase Painter, en barra de herramientas

Close o, en el men, File

Si se le quiere hacer un cambio posterior a la tabla es posible posicionndose sobre la tabla y mediante clic derecho con el ratn escoger la opcin

Close.

Alter table.

26. Preparar el sitio donde se van a mostrar los datos de los empleados. Para ese fin, definir los DataWindows Object necesarios. Como primer paso definir un DataWindows que presente en forma tabular los siguientes datos: Nombre y Apellido del empleado y nombre del Departamento donde trabaja. La salida se debe presentar en orden alfabtico por Apellido del empleado. Se puede seguir un procedimiento similar al siguiente: 26.1. En barra de herramientas : New DataWindow Tabular OK, o, En men:

File New DataWindow Tabular OK

26.1.1. En la ventana Choose Data Source for Tabular DataWindow (seleccin de la fuente de datos para el DataWindow escogido): SQL Select Next 26.2. En ventana Select Tables, seleccionar las tablas Empleado y Departamento Open 26.3. En tabla Empleado: Cdigo del empleado (id), Nombre del empleado, Apellido del empleado. 26.4. En tabla Departamento: Nombre del departamento 26.5. En la solapa Sort: Apellido del empleado (hacer drag and drop).

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 27 de 28

Si se quiere cambiar algo en la sintaxis del cdigo SQL, esto se puede ver con la opcin del men Design Convert To Syntax. 26.6. Pasar a diseo de la salida: En barra de herramientas: Return 26.7. En la ventana Select Color and Border Settings se escogen las opciones de borde y color para el DataWindow. En la ventana Ready to Create Tabular DataWindow aparecen las selecciones dadas con opcin de Regresar (para cambiar alguna opcin) o Finalizar. 26.8. A continuacin aparece la vista de diseo Design del DataWindow, y la de vista previa Preview, acompaadas (por omisin) de la vista de propiedades Properties y, en la parte inferior, de la especificacin de columnas, datos y la lis ta de controles Control List, aparecern los datos de las tablas seleccionados. En la vista de diseo se pueden colocar encabezados apropiados, cambiar color de fondo y otras cuantas propiedades. Tener en cuenta de que a pesar de haber seleccionado el cdigo del empleado, no se desea en la salida!!

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 28 de 29

Si se quiere volver a la ventana de Select correspondiente, escoger en barra de herramientas SQL (icono que dice SQL)

26.9. Hacer modificaciones al diseo. 26.10. Grabar el trabajo adelantado: En barra de herramientas: Save 26.11. En ventana Save DataWindow: 26.12. Colocar el nombre de la ventana (d_...). Ejemplo: d_lista_empleados 26.13. Escribir un comentario significativo 26.14. OK 26.15. Ver resultado del diseo. En el men File Run/Preview DataWindows Object: nombre de la DataWindow.

Objects of Type:

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 29 de 30

26.16. Probar realizando inserciones, borrados y modificaciones a la base de datos. 27. De manera similar elaborar un DataWindow donde se muestre el listado de personas, dado el cdigo del Departamento donde trabajan. 27.1. Seguir un procedimiento similar a la creacin del anterior DataWindow. Adicionalmente, en la ventana donde se seleccionan campos de las tablas (donde tambin aparecen las solapas Sort, Where, Group, Having, Compute y Syntax), dar la informacin del argumento: 27.1.1. En men: Design Retrieval Arguments... 27.1.2. En ventana Specify Retrieval Arguments: escribir el nombre del argumento (por ejemplo departamento) y seleccionar el tipo de dato (por ejemplo Number) 27.1.3. OK 27.2. En carpeta Where, especificar la condicin deseada, por ejemplo:

28. Elaborar un tercer DataWindow que muestre los empleados que tengan el Nombre y/o el Apellido digitado por el usuario. 28.1. Seguir un procedimiento similar a la elaboracin del DataWindow anterior. En este caso es necesario especificar dos argumentos (por ejemplo: nombre de tipo String y apellido de tipo String). 28.2. OK 28.3. En carpeta Where: especificar la condicin deseada, por ejemplo:

29. Elaborar un DataWindow que muestre toda la informacin contenida en la base de datos relacionada con un empleado. En este caso el argumento de bsqueda puede ser el cdigo del empleado y el estilo de presentacin puede ser Freeform.

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 30 de 31

30. Cambiar el Punto de Inicio del Aplicativo, para que active la ventana que muestra las opciones de bsqueda de personal y adicionalmente conecte la base de datos que se va a utilizar. Elaborar un programa similar al siguiente (evento abrir la aplicacin): // open icf_1 // Punto inicial del aplicativo. // -----------------------------------------------------------------------------------------------------------------// CONEXIN AL MOTOR DE BASE DE DATOS // Conexin a un motor de Base de Datos SQL Anywhere con ODBC sqlca.DBMS = "ODBC" sqlca.DbParm="ConnectString='DSN=Entrenamiento;UID=dba;PWD=sql'" MessageBox ("Motor de Base de Datos conectado:",sqlca.dbparm) connect; // Prueba para ver si qued conectado if sqlca.sqlcode <> 0 then MessageBox ("No se pudo Conectar a la Base de Datos", & "Mensaje enviado por el sistema:~n~r'"+sqlca.sqlerrtext+"'") return end if // -----------------------------------------------------------------------------------------------------------------open (w_icf_pordepto_nom) //Nombre de la ventana que se desea activar, en este caso la de bsqueda 31. Correr la aplicacin y comprobar que funciona el nuevo punto de entrada. 32. En la ventana donde se presentan las opciones de bsqueda, programar el botn de Buscar para que de acuerdo con la seleccin hecha (Todos, Por Nombre o Por Departamento), muestre el resultado de la bsqueda. 32.1. Seleccionar el evento clic del botn Buscar y elaborar un programa como el siguiente: // clic para cb_buscar IF rb_otro.checked THEN // Seleccionado todos dw_datos_empleados.visible=true dw_datos_empleados.dataobject='d_lista_empleados' dw_datos_empleados.SetTransObject(SQLCA) dw_datos_empleados.retrieve () END IF IF rb_nombre.checked THEN // Seleccionado Por Nombre dw_datos_empleados.visible=true dw_datos_empleados.dataobject='d_empleados_dado_nombre' dw_datos_empleados.SetTransObject(SQLCA) dw_datos_empleados.retrieve (sle_nombre.text,sle_primer_apellido.text) END IF IF rb_departamento.checked THEN // Seleccionado Por Departamento dw_datos_empleados.visible=true dw_datos_empleados.dataobject='d_empleados_depto' dw_datos_empleados.SetTransObject(SQLCA) // Obtener el dato numrico xxx de la instruccin para pasrselo como entrada al // datawindow: dw_datos_empleados.retrieve(DOUBLE(ddlb_departamento.selectitem( ddlb_departamento.text,1))) END IF 32.2. Correr la aplicacin y comprobar su correcto funcionamiento.
ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes Pgina 31 de 32

33. Programar el evento doble click doubleclicked para el DataWindows Control de la ventana que permite bsqueda. Por ejemplo: // doble clic para dw_datos_empleados integer l_codigo, l_casos IF dw_datos_empleados.dataobject='d_lista_empleados' OR & dw_datos_empleados.dataobject='d_empleados_dado_nombre' OR & dw_datos_empleados.dataobject='d_empleados_depto' THEN l_codigo=GetItemNumber(row,1) //Supone que en los DataWindows la //primera Columna corresponde // al cdigo del trabajador!!!!!!!!!!!! dw_datos_empleados.d ataobject='d_detalle_empleado' dw_datos_empleados.SetTransObject(SQLCA) l_casos=dw_datos_empleados.retrieve (l_codigo) IF l_casos > 0 THEN dw_datos_empleados.retrieve (l_codigo) ELSE MessageBox ("De la Base de Datos","El empleado no tiene tareas asignadas") w_icf_pordepto_nom.cb_buscar.postevent(Clicked!) END IF END IF 34. Crear una ventana, que sea el nuevo punto de entrada y exhiba en mens las posibilidades que presenta el aplicativo, ver las siguientes tres figuras:

34.1. Para hacer el men, se puede seguir un procedimiento similar al siguiente: 34.2. En Barra de herramientas o en men: New PB Object Menu 34.3. Crear los mens y submens, junto con sus caractersticas, para ello: En el men Insert Submenu item, o, Ctrl+Shift+S, o, Click derecho con el ratn sobre untitled0 en la vista untitled0 activa y seleccionar:
ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes Pgina 32 de 33

Insert Submenu Item Si desea colocar separadores entre los submens como aparece en las figuras, en
Properties General del submen: colocar en Text: - y seleccionar la opcin Default. 34.4. En barra de herramientas: Save 34.5. En ventana Save Menu: Dar Nombre y Comentarios.

35. Escribir los programas asociados con el evento clic para cada una de las opciones de los mens, por ejemplo: 35.1. Para: Calculadora // click m_servicios.m_calculadora open ( w_icf_calculadora )

35.2. Para: Terminar // click m_servicios.m_terminar If MessageBox("Salir","Salir del aplicativo?",Question!,YesNo!)=1 then Close( ParentWindow ) // Cerrar la ventana donde se encuentra el menu End If //No toma accion en caso negativo 35.3. Para: Buscar Todos // Click m_personal.m_buscar.m_todos open ( w_icf_pordepto_nom) w_icf_pordepto_nom.rb_otro.setfocus() w_icf_pordepto_nom.cb_buscar.postevent(Clicked!)
ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes Pgina 33 de 34

35.4. Para: Buscar Por Nombre // Clic m_personal.m_buscar.m_pronombre open ( w_icf_pordepto_nom) w_icf_pordepto_nom.rb_nombre.setfocus() 35.5. Para: Buscar Por Departamento // Clic m_personal.m_buscar.m_pordepto open ( w_icf_pordepto_nom) w_icf_pordepto_nom.rb_departamento.setfocus()

36.

A la nueva ventana creada (w_aplicativo_entrenamiento) en la vista de Properties General: colocar nombre, asociar el men recin elaborado en MenuName, seleccionar un icono en Icon (desde que los iconos e imgenes estn en la misma ruta en que se encuentra el aplicativo, no hay necesidad de dejarle la ruta, esto para mayor portabilidad de equipo a equipo).

37. Modificar el punto de Inicio para arranque con la ventana recin diseada. 38. Agregar facilidades de men a la ventana de la calculadora, ver ejemplo presentado en las siguientes tres grficas:

39. Escribir los programas asociados con el evento clic para cada una de las opciones de los mens, por ejemplo: 39.1. Para: Archivo Cerrar Ventana // click m_archivo.m_cerrarventana Close( ParentWindow )
ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes Pgina 34 de 35

39.2. Para: Archivo Salir del Aplicativo // click m_archivo.m _salirdelaplicativo Close ( w_aplicativo_entrenamiento ) //Ventana principal del aplicativo 39.3. Para: Editar Borrar Todo // click m_editar.m_borrartodo w_icf_calculadora.sle_operando1.text = "" w_icf_calculadora.sle_operando2.text = "" w_icf_calculadora.st_resultado_n.text = "" 39.4. Para: Editar Resultado a Memoria // click m_editar.m_resultadoamemoria // Objetivo: Llevar el resultado al clipboard clipboard ( w_icf_calculadora.st_resultado_n.text ) 39.5. Para: Editar Memoria a Operando 1 // clic m_editar.m_memoriaaoperando1 // Copia el contenido del clipboard al Primer Operando w_icf_calculadora.sle_operando1.text = clipboard ( ) 39.6. Para: Ayuda Temas // clic m_ayuda.m_temas ShowHelp ( "C:\Archivos de programa\Sybase\PowerBuilder 9.0\Help\pbhlp90.hlp", index! ) 40. Elaborar un ejecutable de la aplicacin. 40.1. Crear un objeto proyecto. Este objeto permite crear el archivo ejecutable de la aplicacin. 40.1.1. En barra de herramientas : New Project Application Wizard OK, o, En men: File New Project Application Wizard OK

40.1.2. 40.1.3. 40.1.4. 40.1.5. 40.1.6.

Next
Si no est seleccionado el archivo pbl correcto seleccionarlo Next Escribir el nombre del proyecto, o utilizar el por defecto Next Escribir la direccin y el nombre del archivo ejecutable que se generar Next Asegurarse de que la opcin Incremental Build est seleccionada Next
Pgina 35 de 36

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

40.1.7. Asegurarse de que la opcin No, do not generate machine code est seleccionada Next Nota: la opcin No, do not generate machine code se recomienda mientras el aplicativo est en desarrollo. La generacin definitiva se recomienda hacerla con Yes, generate machine code EXE and DLLs. 40.1.8. Next 40.1.9. Llene la informacin de versin (y copyright) del aplicativo Next 40.1.10. Verifique que la informacin ingresada sea correcta Finish 40.1.11. PowerBuilder crea un objeto Project para su aplicacin y lo muestra en la vista Project:

40.1.12. Cerrar la vista Project. 40.2. Crear el archivo ejecutable En barra de herramientas : Deploy Workspace, o, En men: Run Deploy Workspace

41. Salir de PowerBuilder. 42. Correr desde Windows el ejecutable que contiene el aplicativo.

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 36 de 37

43. Crear una ventana como la siguiente:

El DropDown DataWindow es til en caso de que se requiera hacer referencia a datos de otras tablas.

ltima Fila Siguiente Fila Anterior Fila Primera Fila

En esta ventana se utilizar un nuevo control (TabControl), y el DropDown DataWindow. La estructura de las pginas Departamentos y Niveles es la misma.
ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes Pgina 37 de 38

43.1. Crear una nueva ventana:

En barra de herramientas New PB Object Window, o, En men File New PB Object Window Con el botn derecho sobre la nueva ventana, modificar las propiedades de la ventana Properties:

Window Type: Popup!. Las opciones Resizable y MaxBox no debern seleccionarse. 43.2. Insertar un control Tab en la ventana y darle el tamao adecuado. En el men Insert Control Tab, o,

En la barra de herramientas Create Tab Control Seleccionar el control insertado y hacer click con el botn derecho del mouse en el rea superior que no est ocupada por el TabPage (Cada una de las pginas del control Tab recibe este nombre). En las propiedades generales del tabpage: Properties General: Name: tab_actualizaciones Seleccionar Bold Selected Text (El texto de la pgina seleccionada se muestra en negrilla) OK 43.2.1. Hacer click con el botn derecho dentro de la primera pgina (la que tiene el texto none) y elegir propiedades generales, Properties Genera l: Name: tabpage_empleados Tab Text: Empleados OK 43.2.2. Insertar los dems controles en la ventana (como lo muestra la figura) Un DataWindow control (se usa el botn que se encuentra en la barra de herramientas junto con los dems controles. No confundir con el botn de DataWindow Object que se encuentra en la barra de herramientas superior o PowerBar).En las propiedades del nuevo DataWindow elegir Name: dw_act_empleados y seleccionar VscrollBar. Los botones Nuevo (cb_nuevo), Borrar (cb_borrar), Actualizar (cb_actualizar), Cargar Datos (cb_cargar). Los botones para desplazarse por las filas del DataWindow: Primero (cb_primero), Siguiente (cb_siguiente), Anterior (cb_anterior), Ultimo (cb_ultimo). 43.2.3. Guardar el trabajo: File Save. El nombre de la nueva ventana ser w_actualiz aciones. 43.2.4. Modificar la opcin actualizar del men, para que se abra la nueva ventana: En la barra de herramientas Open Objects of Type: Menus. Seleccionar el men ya realizado (p.ej. m_entrenamiento) OK Seleccionar la opcin Actualizar e n la ventana de edicin del men. Oprimir el botn Script en la barra de herramientas Escribir: open(w_actualizaciones) Guardar las modificaciones hechas al men. 43.2.5. Correr la aplicacin y probar el funcionamiento del men y la nueva ventana. 43.2.6. Crear un DataWindow Object en el que se relacionen el cdigo y nombre de los departamentos. En la barra de herramientas New DataWindow: Grid Data Source SQL Select Next En la ventana Select Tables seleccionar la tabla departamento. Open Seleccionar las columnas cdigo de departamento (depto_id) y nombre de departamento (depto_nombre). Pasar a diseo de salida o vista de diseo: Return Seleccionar colores y bordes Aceptar selecciones Finalizar Colocar los encabezados apropiados. File

Save. En la ventana Save DataWindow:

Name: ddd_depto (ser utilizado como DropDownDataWindow) OK Cerrar la ventana de edicin del DataWindow
Pgina 38 de 39

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

43.2.7. Crear un DataWindow Object para actualizar los datos relacionados con los empleados. En la barra de herramientas New DataWindow: Grid Data Source SQL Select Next En la ventana Select Tables seleccionar la tabla Empleado Seleccionar todas las columnas de la tabla empleado.

Open

Pasar a diseo de salida o vista de diseo: Return Seleccionar colores y bordes Aceptar selecciones Finalizar Elegir Properties (con el botn derecho sobre el DataWindow, vista de diseo)

En la pgina General: Color ButtonFace Para los encabezados de todas las columnas, en la pgina general:
Border Raised Text modificar el texto Para la columna emp_depto_id (cdigo de departamento): Elegir Properties :

En la pgina General: Borde Lowered. En la pgina Font: Background Color WindowBackground. En la pgina Edit:
Style Type DropDownDW DataWindow ddd_depto (el que se cre en el paso 43.2.6.) Display Column depto_nombre (nombre de departamento) Data Colum depto_id (cdigo de departamento) Width of DropDown(%) (ancho del DropDown) 300% Seleccionar VScrollBar

OK
File

Save. En la ventana Save DataWindow:

Name: d_act_empleados OK Cerrar la ventana de edicin del DataWindow

43.2.8. Abrir w_actualizaciones y seleccionar el DataWindow dw_act_empleados en la pgina Empleados. Hacer clic con el botn derecho y seleccionar la opcin properties del men popup. DataObject browse... d_act_empleados (el que se cre en el apartado anterior:43.2.7) OK 43.3. Para agregar una nueva pgina al control Tab, se hace clic con el botn derecho sobre e l control. En el men popup Insert TabPage 43.3.1. Hacer clic con el botn derecho dentro de la nueva pgina (la que tiene el texto none) y elegir propiedades en el men popup, General: Name: tabpage_actividades TabText: Actividades OK 43.3.2. Insertar los dems controles en la ventana (como lo muestra la figura) Un DataWindow control. En las propiedades del nuevo DataWindow elegir name: dw_act_actividades y seleccionar VscrollBar. Los botones Nuevo (cb_nuevo_a), Borrar (cb_borrar_a), Actualiz ar (cb_actualizar_a), Cargar Datos (cb_cargar_a). Los nombres de los botones deben ser diferentes a los utilizados en la pgina Empleados. Los botones para desplazarse por las filas del DataWindow: Primero (cb_primero_a), Siguiente (cb_siguiente_a), Ante rior (cb_anterior_a), Ultimo (cb_ultimo_a). 43.3.3. Crear un DataWindow Object en el que se relacionen el cdigo y nombre de los empleados. (se usa el botn DataWindow de la barra de herramientas PowerBar) En la barra de herramientas New DataWindow: Grid Data Source SQL Select Next En la ventana Select Tables seleccionar la tabla Empleado Open Seleccionar las columnas cdigo de empleado, nombre y apellido del empleado. Pasar a diseo de salida o vista de diseo: Return Seleccionar co lores y bordes Aceptar selecciones Finalizar
ENTRENAMIENTO EN P OWERB UILDER 9.0

Ing. Ismael Castaeda Fuentes

Pgina 39 de 40

Colocar los encabezados apropiados. File Save. En la ventana Save DataWindow: Name: ddd_empleado (ser utilizado como DropDownDatraWindow) OK Cerrar la ventana de edicin del DataWindow 43.3.4. Crear un DataWindow Object en el que se relacionen el cdigo y nombre de los niveles. En la barra de herramientas New DataWindow: Grid Data Source SQL Select Next En la ventana Select Tables seleccionar la tabla nivel. Open Seleccionar las columnas cdigo de nivel y nombre de nivel. Pasar a diseo de salida o vista de diseo: Return Seleccionar colores y bordes Aceptar selecciones Finalizar Colocar los encabezados apropiados. File Save. En la ventana Save DataWindow: Name: ddd_nivel (ser utilizado como DropDownDatraWindow) OK Cerrar la ventana de edicin del DataWindow 43.3.5. Crear un DataWindow Object para actualizar los datos relacionados con los actividades de los empleados. En la barra de herramientas New DataWindow: Tabular

Data Source SQL Select Next En la ventana Select Tables seleccionar la tabla Actividad. Seleccionar todas las columnas de la tabla Actividad.

Open

Pasar a diseo de salida o vista de diseo: Return Seleccionar colores y bordes Aceptar selecciones Finalizar Elegir Properties en el menu popup (con el botn derecho sobre el DataWindow):

En la pgina General: Color Button Face Para los encabezados de todas las columnas: Elegir Properties en el menu popup (con el botn derecho): En la pgina General: Borde Raised. Text modificar el texto En la pgina Font: Background Color Button Face. OK
Para la columna act_emp_id (cdigo del empleado): Elegir Properties en el menu popup (con el botn derecho): En la pgina General: Borde Lowered. En la pgina Font: Background Color Window Background. En la pgina Edit: Style Type

DropDownDW

DataWindow ddd_empleado (el que se cre en el paso 43.3.3.) Display Column emp_id (cdigo del empleado) Data Column emp_id (cdigo del empleado) Width of DropDown (ancho del DropDown) 400% Seleccionar VscrollBar OK Para la columna act_niv_id (cdigo del nivel): Elegir Properties en el menu popup (con el botn derecho): En la pgina General: Borde Lowered. En la pgina Font: Background Color Window Background. En la pgina Edit: Style Type DropDownDW DataWindow ddd_nivel (el que se cre en el paso 43.3.3.) Display Column niv_id (cdigo del nivel) Data Column niv_id (cdigo del nivel) Width of DropDown (ancho del DropDown) Seleccionar VscrollBar
ENTRENAMIENTO EN P OWERB UILDER 9.0

250%

Ing. Ismael Castaeda Fuentes

Pgina 40 de 41

OK File

Save. En la ventana Save DataWindow:

Name: d_act_actividades OK Cerrar la ventana de edicin del DataWindow

43.3.6. Seleccionar el DataWindow dw_act_actividades en la pgina Empleados. Hacer clic con el botn derecho y seleccionar la opcin properties del men popup. DataWindow Object Name browse... d_act_actividades (el que se cre en el apartado anterior: 43.3.5) OK 43.4. El procedimiento utilizado para agregar las dos pginas restantes (Departamentos y Niveles) es bastante similar al descrito anteriormente. 43.5. Hasta ahora no se han escrito los programas (scripts) para ninguno de los eventos de los controles creados. 43.5.1. En la ventana w _actualizar, seleccionar la pgina Empleados (tabpage_empleados) Hacer clic con el botn derecho sobre la pgina y seleccionar la opcin script en el men popup. En el editor, seleccionar el evento constructor del listbox de la parte superior izquierda de la ventana. El siguiente es el cdigo para dicho evento: //-------Evento: constructor-------------//-------Control: tabpage_empleados ------//Se selecciona el Transaction Object, que proporciona la //informacin para la comunicacin con la base de datos y se //deshabilitan los botones de borrar y actualizar. tab_actualizaciones.tabpage_empleados.dw_act_empleados.SetTransObject(SQLCA) tab_actualizaciones.tabpage_empleados.cb_borrar.enabled = false tab_actualizaciones.tabpage_empleados.cb_actualizar.enabled = false Para compilar el script: en la barra de herramientas Compile; o Ctrl+L; o Edit Compile; o tambin al guardar, se compila automticamente. Para el botn que de desplazamiento hasta la primera fila (cb_primero), evento clicked: //-------Evento: clicked-------------//-------Control: cb_primero---------dw_act_empleados.SetFocus() // El datawindow toma el foco dw_act_empleados.ScrollToRow(1) // Se desplaza hasta la fila No. 1 dw_act_empleados.SetColumn(1) // Se selecciona la primera columna Para el botn de desplazamiento a la siguiente fila (cb_siguiente), evento clicked: //-------Evento: clicked-------------//-------Control: cb_siguiente ---------- long l_fila_actual dw_act_empleados.SetFocus() l_fila_actual = dw_act_empleados.getrow() //el nmero de la fila //seleccionada actualmente dw_act_empleados.ScrollToRow(l_fila_actual + 1) //se desplaza a la //fila siguiente dw_act_empleados.SetColumn(1) //se selecciona la primera columna Para el botn de desplazamiento a la fila anterior(cb_anterior), evento clicked: //-------Evento: clicked-------------//-------Control: cb_anterior---------long l_fila_actual dw_act_empleados.SetFocus() l_fila_actual = dw_act_empleados.getrow() //e l nmero de la fila
ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes Pgina 41 de 42

//seleccionada actualmente dw_act_empleados.ScrollToRow(l_fila_actual - 1) //se desplaza a la //fila anterior dw_act_empleados.SetColumn(1) //se selecciona la primera columna Para el botn que de desplazamiento hasta la ultima fila (cb_ultimo), evento clicked: //-------Evento: clicked-------------//-------Control: cb_ultimo---------long l_numfilas dw_act_empleados.SetFocus() l_numfilas = dw_act_empleados.RowCount() //se obtiene el nmero de //filas en el datawindow dw_act_empleados.scrolltorow(l_numfilas) //se desplaza hasta la ltima dw_act_empleados.setcolumn(1) //se selecciona la primera columna Para el botn Cargar Datos (cb_cargar), evento clicked: //-------Evento: clicked-------------//-------Control: cb_cargar---------long l_numfilas //se recibe la informacin de la base de datos en el datawindow // tab_actualizaciones.tabpage_empleados.dw_act_empleados tab_actualizaciones.tabpage_empleados.dw_act_empleados.retrieve() l_numfilas=tab_actualizaciones.tabpage_empleados.dw_act_empleados.RowCount() tab_actualizaciones.tabpage_empleados.dw_act_empleados.ScrollToRow(l_numfilas) //Si el nmero de filas en el datawindow es 0 entonces se deshabilita //el botn de borrar, de lo contrario, se habilita. if l_numfilas = 0 then cb_borrar.enabled = false else cb_borrar.enabled = true end if Para el botn de insertar un nuevo empleado (cb_nuevo), evento clicked: //-------Evento: clicked-------------//-------Control: cb_nuevo -----------tab_actualizaciones.tabpage_empleados.dw_act_empleados.SetTransObject(SQLCA) long fila_nueva //la nueva fila se inserta al final del datawindow fila_nueva = tab_actualizaciones.tabpage_empleados.dw_act_empleados.InsertRow(0) //el datawindow toma el foco tab_actualizaciones.tabpage_empleados.dw_act_empleados.SetFocus() //se desplaza hasta la nueva fila tab_actualizaciones.tabpage_empleados.dw_act_empleados.ScrollToRow(fila_nueva ) tab_actualizaciones.tabpage_empleados.dw_act_empleados.SetColumn(1) cb_actualizar.enabled = true Para el botn de borrar un empleado (cb_borrar), evento clicked: //-------Evento: clicked-------------//-------Control: cb_borrar----------- long l_fila_actual tab_actualizaciones.tabpage_empleados.dw_act_empleados.SetRedraw (false) //se guarda el n mero de la fila seleccionada, que es la que se //eliminar
ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes Pgina 42 de 43

l_fila_actual = tab_actualizaciones.tabpage_empleados.dw_act_empleados.getrow() //se elimina la fila seleccionada tab_actualizaciones.tabpage_empleados.dw_act_empleados.DeleteRow (l_fila_actual) //si despus de borrarla no quedan filas en el datawindow, //se deshabilita el botn de borrar if tab_actualizaciones.tabpage_empleados.dw_act_empleados.RowCount()=0 then cb_borrar.enabled = false else tab_actualizaciones.tabpage_empleados.dw_act_empleados.SetColumn(1) tab_actualizaciones.tabpage_empleados.dw_act_empleados.SetFocus() end if cb_actualizar.enabled = true tab_actualizaciones.tabpage_empleados.dw_act_empleados.SetRedraw (true) Para el botn de actualizacin de datos, despus de haber realizado inserciones y/o borrados (cb_actualizar), evento clicked: //-------Evento: clicked-------------//-------Control: cb_actualizar----------tab_actualizaciones.tabpage_empleados.dw_act_empleados.SetRedraw (false) //si la actualizacin de la base de datos no es exitosa, se deshacen //todos los cambios con la orden rollback. //De lo contrario, se realizan todos los cambios con la orden commit. if tab_actualizaciones.tabpage_empleados.dw_act_empleados.Update() = -1 then rollback; else commit; end if tab_actualizaciones.tabpage_empleados.dw_act_empleados.SetRedraw (true) //Si despus de actualizar la base de datos no quedan filas en el //datawindow, se deshabilita el botn de actualizar. if tab_actualizaciones.tabpage_empleados.dw_act_empleados.RowCount() = 0 then cb_actualizar.enabled = false else cb_actualizar.enabled = true end if 43.6. Los scripts para los eventos de los controles de las pginas restantes (actividades, niveles y departamentos) son similares a los descritos en el apartado anterior: 39.5 , modificando los nombres de los controles y los datawindows. 43.7. Se agregar un nuevo botn, que permitir exportar los datos del datawindow a diferentes formatos. La apariencia de la ventana ser la siguiente:

ENTRENAMIENTO EN P OWERB UILDER 9.0

Ing. Ismael Castaeda Fuentes

Pgina 43 de 44

Agregar un nuevo botn, hacer click derecho sobre l y elegir la opcin Properties del men popup. Name cb_exportar Text Exportar. OK Hacer click derecho sobre el botn Exportar y elegir la opcin Script del men popup. Elegir el evento clicked en la parte superior izquierda de la ventana del editor y escribir el siguiente programa: //--Evento clicked--//--cb_exportar-----integer i_tab i_tab = tab_actualizaciones.SelectedTab //la funcin SelectedTab retorna el nmero del tabpage seleccionado. CHOOSE CASE i_tab CASE 1 //el tabpage seleccionado es el 1 (empleados) tab_actualizaciones.tabpage_empleados.dw_act_empleados.SaveAs("",EXCEL!, TRUE) //la funcin SaveAs permite guardar los datos que estn en un datawindow //en diferentes formatos de archivo. Esta funcin utiliza e l cuadro de //dilogo "guardar archivo" y permite al usuario elegir el formato al que //desea exportar los datos. En este caso el formato por defecto es el de //la hoja de clculo EXCEL CASE 2 //el tabpage seleccionado es el 2 (actividades) tab_actualizaciones.tabpage_actividades.dw_act_actividades.SaveAs("",EXCEL!, TRUE) CASE 3 //el tabpage seleccionado es el 3 (departamentos) tab_actualizaciones.tabpage_departamentos.dw_act_departamentos.SaveAs("", EXCEL!, TRUE) CASE 4 //el tabpage seleccionado es el 4 (niveles) tab_actualizaciones.tabpage_niveles.dw_act_niveles.SaveAs("", EXCEL!, TRUE) END CHOOSE
ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes Pgina 44 de 45

43.8. De manera similar, agregar un botn adicional para cerrar la ventana de actualizaciones (w_actualizaciones) Properties Name cb_cancelar Properties Text Cancelar OK El script para el evento clicked de este botn es: Close (parent) 44. Crear una ventana como la siguiente:
Explorado r

En esta ventana se utilizar un nuevo control: TreeView. El TreeView es un control que permite desplegar informacin jerarquicamente. Cada item en un TreeView consiste de texto y una imagen, los cuales pueden ser manipulados durante una rutina de programa. El aspecto de la ventana ser similar al siguiente: Como puede verse, este TreeView tendr cuatro niveles. El primer nivel solo constar de un tem con el texto empresa. Los tems del segundo nivel corresponden a los departamentos de la empresa, el tercero a los empleados de cada departamento, y el cuarto a las actividades asignadas a los emp leados. 44.1. En la barra de herramientas: File New Object Window Con el botn derecho sobre la nueva ventana, modificar las propiedades de la ventana vista de Properties: Window Type Popup. Las opciones Resizable y Maximize Box no debern seleccionarse. 44.2. Insertar un control TreeView en la ventana y darle el tamao adecuado. Seleccionar el control insertado y hacer click con el botn derecho del mouse sobre l. En la barra de herramientas: Desplegar controles y seleccionar: Treeview En el menu Insert FControl Treeview

Name tv_depto_empleado Seleccionar la opcin Lines at Root Indent 10


ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes Pgina 45 de 46

OK 44.2.1. Insertar los dems controles en la ventana (como lo muestra la figura) Tres botones: Expandir Todo (cb_expandir), Contraer todo (cb_contraer), Cerrar (cb_cerrar) 44.2.2. Guardar el trabajo: File Save. El nombre de la nueva ventana ser w_explorador. 44.2.3. Modificar la opcin actualizar del men, para que se abra la nueva ventana: En la barra de herramientas abrir el menu principal: Open Object Type:Menu FSeleccionar menu principal (p.ej. m_entrenamiento) OK Agregar la opcin Explorar en el men Personal Click derecho con el ratn sobre el treeview y seleccionar la opcin Script Escribir open(w_explorador) Guardar las modificaciones hechas al men. 44.2.4. Correr la aplicacin y probar el funcionamiento del men y la nueva ventana. 44.2.5. Crear un DataWindow Object en el que se relacionen el nombre de los departamentos. (se usa el botn DataWindow de la barra d e herramientas PowerBar) En la barra de herramientas New DataWindow: Tabular Data Source SQL Select Next En la ventana Select Tables seleccionar la tabla departamento FOpen Seleccionar las columnas cdigo de departamento y nombre de departamento. Pasar a diseo d e salida o vista de diseo: Return
Seleccionar colores y bordes Aceptar selecciones Colocar los encabezados apropiados. File

Finalizar

Save. En la ventana Save DataWindow:

Name: d_depto OK Cerrar la ventana de edicin del DataWindow

44.2.6. Crear un DataWindow Object en el que se relacionen el nombre de los empleados de un departamento determinado. (se puede usar uno de los ya existentes si cumple con esta condicin). En la barra de herramientas New DataWindow: Tabular

Data Source SQL Select Next En la ventana Select Tables seleccionar la tabla empleado FOpen Seleccionar las columnas cdigo de empleado, apellido y nombre de empleado.
Pasar a diseo de salida o vista de diseo: Return Seleccionar colores y bordes Aceptar selecciones Finalizar Colocar los encabezados apropiados. En el men Design elegir la opcin Retrieval Arguments...

En la ventana Specify Retrieval Arguments: name dept_id, type number OK Oprimir el Tab "Where" en la parte inferior de la pantalla: Column "empleado"."dept_id" (Al hacer click en el espacio en blanco se puede elegir la columna deseada) Operator = (Al hacer click en el espacio en blanco se puede elegir el operador deseado) Value : Hacer click con el boton derecho sobre el espacio en blanco, elegir arguments en el men popup, y luego elegir :dept_id, que es el mismo argumento que se definin en Retrieva Arguments. Pasar a diseo de salida: En la barra de herramientas es el cono que dice "SQL" File

Save. En la ve ntana Save DataWindow:

Name: d_empleados_por_depto OK Cerrar la ventana de edicin del DataWindow

44.2.7. Crear un DataWindow Object en el que se puedan almacenar las actividades de un empleado dado. (se puede usar uno de los ya existentes si cumple con esta condicin) En la barra de herramientas New DataWindow: Tabular Data Source SQL Select Next En la ventana Select Tables seleccionar la tabla actividad y la tabla empleado Open
ENTRENAMIENTO EN P OWERB UILDER 9.0

Ing. Ismael Castaeda Fuentes

Pgina 46 de 47

Seleccionar las columnas cdigo de empleado (de la tabla empleado), y descripcin de la actividad (de la tabla actividad). En el men Design elegir la opcin Retrieval Arguments... En la ventana Specify Retrieval Arguments: name

emp_id (cdigo del empleado),

type number OK Oprimir el Tab "Where" en la parte inferior de la pantalla: Column "empleado"."emp_id" (Al hacer click en el espacio en blanco se puede elegir la columna deseada) Operator = (Al hacer click en el espacio en blanco se puede elegir el operador deseado) Value : Hacer click con el boton derecho sobre el espacio en blanco, elegir arguments en el men popup, y luego elegir :emp_id, que es el mismo argumento que se definin en Retrieva Arguments Pasar a diseo de salida: En la barra de herramientas es el cono que dice "SQL" File

Save. En la ventana Save DataWindow:

Name: d_activ_por_empleado OK Cerrar la ventana de edicin del DataWindow

Guardar el trabajo adelantado hasta el momento File Save. 44.3. Declaracin de variable de instancia ids_datos En la vista de Scipt del treeview desplegar la lista de objetos y seleccionar Escribir: datastore ids_datos[4]. OK La variable ids_datos es un array de cuatro posiciones de tipo DataStore, en el que se almacenarn los datos de cada nivel del TreeView. Estos datos se obtendrn de los DataWindow creados en 43.2.6. y 43.2.7. 44.4. Crear las Funciones: lf_agregar_items lf_config_item 44.4.1. Funcin lf_agregar_items En la vista de Scipt del treeview desplegar la lista de objetos y seleccionar

(Declare) y aparecer al lado derecho Instance Variables.

(Functions)

Aparecer debajo un espacio como el que se muestra en la figura para que sea declarada la funcin y las variables respectivas. La nueva funcin tiene las siguientes especificaciones:

Name lf_agregar_items Access Public


Name al_parent, Ttype Long, Pass By Value Add Name ai_nivel, Type Integer, Pass By Value Oprimir Add Nam ai_filas, Type Integer, Pass By Value Colocar el s iguiente cdigo para esta funcin: ////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Funcin para agregar los items al TreeView usando los datos en el // DataStore // Los argumentos de la funcin son: // - long al_parent // - integer ai_nivel (el nivel en el que se agregarn los items) // - integer ai_filas (el nmero de items que se agregarn) ////////////////////////////////////////////////////////////////////////////////////////////////////////////// Integer li_Cont
ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes Pgina 47 de 48

Return Integer Arguments:

Oprimir

//se declara un objeto TreeViewItem para manipular los valores del item //que se agregar TreeViewItem ltvi_Nuevo // Se agrega cada item For li_Cont = 1 To ai_filas // Se llama a la funcin lf_config_item para asignar los valores //del nuevo item a partir de los datos almacenados en el //DataStore lf_config_item(ai_nivel, li_Cont, ltvi_Nuevo) // Se agrega el item despus del ltimo hijo If tv_depto_empleado.InsertItemLast(al_Parent, ltvi_Nuevo) < 1 Then // Si hay Error MessageBox("Error", "Error al insertar item", & Exclamation!) Return -1 End If Next Return ai_filas Cerrar la ventana del editor y guardar el trabajo adelantado Nota: Si se quieren modificar los argumentos de una funcin ya declarada, se debe en la vista de Script desplegar la lista de objetos, elegir el objeto function y escoger la funcin a modificar. 44.4.2. Funcin lf_config_item En la vista de Scipt del treeview desplegar la lista de objetos y seleccionar

(Functions)
Aparecer debajo un espacio (como el que se mostr en la figura) para que sea declarada la funcin y las variables respectivas. La nueva funcin tiene las siguientes especificaciones:

Name lf_config_item Access Public Return (None) Arguments:


Name ai_nivel, Type Integer, Pass By Value Oprimir Add Name ai_fila, Type Integer, Pass By Value Oprimir Add Name atvi_nuevo, Type TreeViewItem, Pass By Reference OK El cdigo para esta funcin es el siguiente: //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // Se configuran los atributos para el nuevo item a partir de los datos // en el DataStore. // Los atributos de TreeViewItem que se usan son: // Label (el texto que se d espliega en el TreeView) // Data (es la informacin que contiene dicho item) // Los argumentos de esta funcin son: // integer ai_nivel = el nivel del TreeViewItem en el TreeView // integer ai_fila = # de la fila del DataStore de la que se obtendr // la i nformacin // atvi_nuevo = TreeViewItem que se agrega al TreeView. Los valores de // sus atributos. (Label y Data) son los que se determinan a // continuacin // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Choose Case ai_nivel Case 1 // El nico item de primer nivel tiene como Label la
ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes Pgina 48 de 49

// palabra "empresa", en este caso no se usa niungn // DataStore atvi_nuevo.Label = "Empresa" atvi_nuevo.Data = "Empresa" Case 2 // Label = nombre del departamento // Data = codigo de departamento atvi_nuevo.Label= ids_datos[2].Object.dept_nombre[ai_fila] atvi_nuevo.Data = ids_datos[2].Object.dept_id[ai_fila] Case 3 // Label = apellido + nombre del departamento // Data = codigo de empleado atvi_nuevo.Label = ids_datos[3].Object.emp_apellido[ai_fila]& + ", " + ids_datos[3].Object.emp_nombre[ai_fila] atvi_nuevo.Data = ids_datos[3].Object.emp_id[ai_fila] Case 4 // Label = descripcin de la actividad // Data = cdigo del empleado atvi_nuevo.Label = ids_datos[4].Object.actividad_act_descripcion[ai_fila] atvi_nuevo.Data = ids_datos[4].Object.empleado_emp_id[ai_fila] End Choose If ai_nivel < 4 Then atvi_nuevo.Children = True Else // Si el nivel es 4 (actividades) los items no tienen hijos) atvi_nuevo.Children = False End If atvi_nuevo.PictureIndex = ai_nivel atvi_nuevo.SelectedPictureIndex = ai_nivel Guardar el trabajo adelantado 44.5. Escribir los scripts para los controles creados. 44.5.1. En la ventana w_explorador: Hacer click con el botn derecho sobre la ventana y seleccionar la opcin script en el men popup. En el editor, seleccionar el e vento open del listbox de la parte superior izquierda de la ventana. El siguiente es el cdigo para dicho evento: ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Se crean los DataStore que contendrn los // // datos almacenados en los datawindows espacificados // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //d_depto se hace mediante un select a la tabla departamento. //En este datawindow se almacena la lista de los departamentos //de la empresa. Estos datos aparecern en el segundo nivel //del treeview. ids_datos[2] = Create DataStore ids_datos[2].DataObject = "d_depto" ids_datos[2].SetTransObject(sqlca) //d_empleados_por_depto contiene los empleados que trabajan en un //departamento. Para esto, se debe escoger la columna cdigo //de departamento (dept_id) como argumento de recuperacin (retrieval //arguments) //Los datos aqu recuperados sern los del tercer nivel del treeview ids_datos[3] = Create DataStore ids_datos[3].DataObject = "d_empleados_por_depto" ids_datos[3].SetTransObject(sqlca)
ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes Pgina 49 de 50

//d_activ_por_empleado contiene las actividades asignadas a un //empleado. De forma similar, el retrieval argument para este //datawindow es la columna cdigo de empleado (emp_id) //Los datos aqu recuperados sern los del cuarto nivel del treeview ids_datos[4] = Create DataStore ids_datos[4].DataObject = "d_activ_por_empleado" ids_datos[4].SetTransObject(sqlca) //Se agrega el primer item (el nico) del primer nivel del treeview. //Los parmetros que se pasan son: parent = 0, nivel = 1, filas = 1 lf_agregar_items(0, 1, 1) Compilar el script: en el men Edit Compile Script (Ctrl+L). Seleccionar el evento close. El script para este evento es: -------Evento: close--------------------Control: w_explorador-----Integer li_Cont // Se destruyen los DataStores usados en el ejemplo For li_Cont = 1 To 4 Destroy ids_datos[li_Cont] Next Show(w_principal) Compilar el script (Ctrl + L). 44.5.2. En el TreeView tv_depto_empleado: Hacer click con el botn derecho sobre el TreeView y seleccionar la opcin script en el men popup. En el editor, seleccionar el evento itempopulate. El siguiente es el cdigo para dicho evento: -------Evento: itempopulate --------------------Control: tv_depto_empleado-------///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Se expande el rbol con los hijos de cada item. // p.ej. los hijos de un item de departamento son los nombres de los // empleados ///////////////////////////////////////////////////////////////////////////////////////////////////////////// Integer li_nivel, li_parametro, li_DeptID, li_EmpID, li_filas // Se declara un TreeViewItem para el item actual TreeViewItem ltvi_actual SetPointer(HourGlass!) // Se determina el nivel del item que se encuentra seleccionado // actualmente en el TreeView GetItem(handle, ltvi_actual) li_nivel = ltvi_actual.Level + 1 // Departa mentos if li_nivel = 2 then ids_datos[li_nivel].SetTransObject(sqlca) ids_datos[li_nivel].Reset() ids_datos[li_nivel].SetTransObject(sqlca) // Se cargan los datos en el DataStore li_filas = ids_datos[li_nivel].Retrieve() End if // Empleados X Departamento if li_nivel = 3 Then li_DeptID = Integer(ltvi_actual.Data) ids_datos[li_nivel].Reset() ids_datos[li_nivel].SetTransObject(sqlca) // Se cargan los datos en el DataStore usando el argumento cdigo de //departamento
ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes Pgina 50 de 51

End if

li_filas = ids_datos[li_nivel].Retrieve(li_DeptID)

// Actividades X Empleado If li_nivel = 4 Then li_EmpID = Integer(ltvi_actual.Data) ids_datos[li_nivel].Reset() ids_datos[li_nivel].SetTransObject(sqlca) // Se cargan los datos en el DataStore usando el argumento cdigo // de empleado li_filas = ids_datos[li_nivel].Retrieve(li_EmpID) End If lf_agregar_items(handle, li_nivel, li_filas) Compilar el script (Ctrl + L) y cerrar la ventana del editor. 44.5.3. En el botn Expandir Todo (cb_expandir): Hacer click con el botn derecho sobre cb_expandir y seleccionar la opcin script en el men popup. En el editor, seleccionar el evento clicked. El siguiente es el cdigo para dicho evento: -------Evento: clicked--------------------Control: cb_expandir--------Long ll_handle ll_handle = tv_depto_empleado.FindItem ( RootTreeItem!, 0 ) tv_depto_empleado.ExpandAll ( ll_handle ) Compilar el script: en el men Edit Compile Script (Ctrl+L). 44.5.4. En el botn Contraer Todo (cb_contraer): Hacer click con el botn derecho sobre cb_contraer y s eleccionar la opcin script en el men popup. En el editor, seleccionar el evento clicked. El siguiente es el cdigo para dicho evento: -------Evento: clicked--------------------Control: cb_contraer--------Long ll_handle ll_handle = tv_depto_empleado.FindItem ( RootTreeItem!, 0 ) tv_depto_empleado.CollapseItem ( ll_handle ). Compilar el script: en el men Edit Cerrar la ventana del editor. 44.5.5. Para el botn Cerrar (cb_cerrar) -------Evento: clicked--------------------Control: cb_cerrar--------close(w_explorador) Compilar el script: en el men Edit Compile Script (Ctrl+L). 44.6. Guardar el trabajo adelantado y correr la aplicacin para comprobar el funcionamiento del TreeView. 45. Modificar la ventana creada en el paso 40 de la siguiente forma:

Compile Script (Ctrl+L).

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 51 de 52

Explorado r

El control que se aadir se denomina ListView. Un ListView muestra informacin en forma de lista al usuario. Cada tem del ListView consiste de texto y un dibujo. En este caso, el ListVie w mostrar los tems del nivel inferior al que se encuentre seleccionado en el rbol. Los botones Lista, Detalles e Iconos Grandes, cambian la forma de presentacin de los tems en el ListView. Cuando el usuario haga doble click sobre uno de los tems del ListView, se desplegarn los tems del nivel inferior, y se expandir la porcin correspondiente en el rbol. Los tems se ordenarn de acuerdo cuando el usuario oprima las cabeceras de las columnas, de forma similar a como ocurre, por ejemplo, en el explorador de windows. 45.1. Insertar un control ListView en la ventana y darle el tamao adecuado. Seleccionar el nuevo control y hacer click con el botn derecho del mouse sobre l. Con las siguientes especificaciones: Name lv_dept_empleados Seleccionar la opcin Show header View Report (Detalles) Sort Unsorted OK 45.1.1. Insertar los dems controles en la ventana (como lo muestra la figura) Tres botones: Lista (cb_lista), Detalles (cb_detalles), Iconos Grandes (cb_grandes) 45.1.2. Guardar el trabajo adelantado: File Save. 45.2. Declaracin de variable de instancia ii_columnas En la vista de Scipt del treeview desplegar la lista de objetos y seleccionar

(Declare) y aparecer al lado derecho Instance Variables.


Escribir: integer ii_columnsas. OK La variable ii_columnas es un entero que se utilizar para contar el nmero de columnas que se agregan al ListView dependiendo del nivel actual del rbol. 45.3. Crear las Funciones lf_agregar_items y lf_ config_item De ahora en adelante se utilizarn los DataWindow y DataStore creados durante el paso 40 en los nuevos scripts. (ids_datos[], d_depto, d_empleados_por_depto y d_activ_por_empleado) 45.3.1. Funcin wf_agregar_lv_items En la vista de Scipt del treeview desplegar la lista de objetos y seleccionar (Functions)
ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes Pgina 52 de 53

Aparecer debajo un espacio (como el que se mostr en la figura) para que sea declarada la funcin y las variables respectivas. La nueva funcin tiene las siguientes especificaciones: Name wf_lv_agregar_items Access Public Return Integer Arguments: Name ai_nivel, TypeInteger, Pass By Value Oprimir Add Name ai_filas, TypeInteger, Pass By Value OK En la vista de Script colocar el siguiente cdigo para esta funcin: -------funcin wf_agregar_lv_items-------------////////////////////////////////////////////////////////////////////////////////// // //Funcin para agregar items al ListView //usando los datos del DataStore // // Argumentos: // integer ai_nivel (el n ivel en que se insertar) // integer ai_filas (nmero de items a insertar) // ////////////////////////////////////////////////////////////////////////////////// Integer li_Cont ListViewItem llvi_Nuevo // Se borran todas las columnas existentes en el // ListView For li_Cont = 1 To ii_columnas lv_dept_empleados.DeleteColumn(1) Next // Se agregan las columnas al ListView Choose Case ai_nivel Case 2 lv_dept_empleados.AddColumn("Nombre", Left!, 500) lv_dept_empleados.AddColumn("ID", Right!, 150)ii_columnas = 2 Case 3 lv_dept_empleados.AddColumn("Apellido", Left!, 700) lv_dept_empleados.AddColumn("Nombre", Left!, 700) lv_dept_empleados.AddColumn("ID", Right!, 150) ii_columnas = 3 Case 4 lv_dept_empleados.AddColumn("Descripcin", Left!, 900) lv_dept_empleados.AddColumn("ID Nivel", Right!, 250) ii_columnas = 2 End Choose // Se agrega cada item al ListView For li_Cont = 1 To ai_filas // Se llama a la funcin para configurar los valores de los // items del ListView a partir de los datos del DataStore wf_config_lv_ item(ai_nivel, li_Cont, llvi_nuevo) // Se agrega cada item after the last child If lv_dept_empleados.AddItem(llvi_nuevo) < 1 Then MessageBox("Error", "Error al agregar item", Exclamation!) Return -1 End If Next Return ai_filas
ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes Pgina 53 de 54

Compilar el script (Ctrl + L). 45.3.2. Funcin wf_config_lv_item En la vista de Scipt del treeview desplegar la lista de objetos y seleccionar

(Functions)
Aparecer debajo un espacio (como el que se mostr en la figura) para que sea declarada la funcin y las variables respectivas. La nueva funcin tiene las siguientes especificaciones: Name wf_config_lv_item Access Public Return (None) Arguments: Name ai_nivel, TypeInteger, Pass By ValueOprimir Add Name ai_fila, TypeInteger, Pass By ValueOprimir Add Name alvi_nuevo, TypeListViewItem, Pass ByReference OK En la vista de Script colocar el siguiente cdigo para esta funcin: -------funcin wf_config_lv_item -------------/////////////////////////////////////////////////////////////////////////////////////////////////// // Se configuran los atributos Label y Data para el nuevo // item del ListView a partir de los datos en el DataStore. // // Argumentos: // integer ai_nivel (el nivel del tem a configurar) // integer ai_fila (el nmero del item a configurar) // listviewitem alvi_nuevo (el item a configurar) /////////////////////////////////////////////////////////////////////////////////////////////////// Choose Case ai_nivel Case 2 // Label = nombre del departamento | cdigo dedepartamento // Data = codigo de departamento alvi_nuevo.Label = ids_datos[2].Object.dept_nombre[ai_fila]+"~t"+ & string(ids_datos[2].Object.dept_id[ai_fila]) alvi_nuevo.Data = ids_datos[2].Object.dept_id[ai_fila] Case 3 // Label = apellido empleado | nombre empleado | cdigo empleado // Data = codigo de empleado alvi_nuevo.Label = ids_datos[3].Object.emp_apellido[ai_fila]+"~t"+ & ids_datos[3].Object.emp_nombre[ai_fila] + "~t" + & string (ids_datos[3].Object.emp_id[ai_fila]) alvi_nuevo.Data = ids_datos[3].Object.emp_id[ai_fila] Case 4 // Label = descripcin de actividad | cdigo del nivel // Data = codigo de empleado (no se utiliza) alvi_nuevo.Label = ids_datos[4].Object.actividad_act_descripcion[ai_fila] + "~t" + & string(ids_datos[4].Object.actividad_niv_id[ai_fila]) alvi_nuevo.Data = ids_datos[4].Object.empleado_emp_id[ai_fila] End Choose alvi_nuevo.PictureIndex = ai_nivel Compilar el script (Ctrl + L) y guardar el trabajo adelantado. 45.4. Escribir los scripts para los nuevos controles. 45.4.1. En el TreeView tv_depto_empleado: Hacer click con el botn derecho sobre el TreeView y seleccionar la opcin script en el men popup. En el editor, seleccionar el evento selectionchanged. El siguiente es el cdigo para dicho evento: -------control: tv_depto_empleado----------------evento: selectionchanged-------------////////////////////////////////////////////////////////////////////////////////////
ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes Pgina 54 de 55

// Este evento se ejecuta cuando cambia el tem // selecionado en el rbol. // Se cargan los datos desde el DataStore y // se agregan los items del nivel inferior al // ListView //////////////////////////////////////////////////////////////////////////////////// Integer li_nivel, li_DeptID, li_EmpID, li_filas // Se declara un TreeViewItem para el item actual TreeViewItem ltvi_actual SetPointer(HourGlass!) // Se determina el nivel del item que se // encuentra seleccionado actualmente en el TreeView GetItem(newhandle, ltvi_actual) li_nivel = ltvi_actual.Level + 1 // Departamentos if li_nivel = 2 then ids_datos[li_nivel].SetTransObject(sqlca) ids_datos[li_nivel].Reset() ids_datos[li_nivel].SetTransObject(sqlca) // Se cargan los datos del DataStore li_filas = ids_datos[li_nivel].Retrieve() End if // Empleados X Departamento if li_nivel = 3 Then li_DeptID = Integer(ltvi_actual.Data) ids_datos[li_nivel].Reset() ids_datos[li_nivel].SetTransObject(sqlca) // Se cargan los datos del Data Store usando //el argumento cdigo de departamento li_filas = ids_datos[li_nivel].Retrieve(li_DeptID) End if // Actividades X Empleado If li_nivel = 4 Then li_EmpID = Integer(ltvi_actual.Data) ids_datos[li_nivel].Reset() ids_datos[li_nivel].SetTransObject(sqlca) // Se cargan los datos del DataStore usando // el argumento cdigo de empleado li_filas = ids_datos[li_nivel].Retrieve(li_EmpID) End If // Se borran todos los items del ListView lv_dept_empleados.DeleteItems() // La funcin wf_agregar_lv_items agrega un nmero // de items igual a "li_filas" en el ListView, que // pertenecen al nivel "li_nivel" wf_agregar_lv_items(li_nivel, li_filas) Cerrar la ventana del editor y guardar el trabajo adelantado 45.4.2. En el ListView lv_dept_empleados: Hacer click con el botn derecho sobre el ListView y seleccionar la opcin script en el men popup. En el editor, seleccionar el evento doubleclicked. El siguiente es el cdigo para dicho evento: -------control: lv_dept_empleados ----------------evento: doubleclicked--------------ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes Pgina 55 de 56

Long ll_Padre, ll_Item Boolean lb_Encontrado TreeViewItem ltvi_Item ListViewItem llvi_Actual If index <= 0 Then Return // Error // Se toma el tem sobre el que se hizo doble click If GetItem(index, llvi_Actual) = -1 Then Return // Se toma el item actualmente seleccionado en el TreeView. // Este debe ser el padre del item seleccionado en el ListView ll_Padre = tv_depto_empleado.FindItem(CurrentTreeItem!, 0) tv_depto_empleado.GetItem(ll_Padre, ltvi_Item) tv_depto_empleado.ExpandItem(ll_Padre) // Se busca el item del ListView en el rbol lb_Encontrado = False ll_Item = tv_depto_empleado.FindItem(ChildTreeItem!, ll_Padre) Do Until (lb_Encontrado Or ll_Item < 1) tv_depto_empleado.GetItem(ll_Item, ltvi_Item) If Pos(ltvi_Item.Label, llvi_Actual.Label) > 0 Then // Se ha encontrado el item lb_Encontrado = True Else // Se revisa el siguiente item ll_Item = tv_depto_empleado.FindItem(NextTreeItem!, ll_Item) End If Loop If lb_Encontrado Then // Al cambiar el elemento seleccionado en el TreeView, // se ejecuta el cdigo del evento SelectionChanged // para el TreeVier tv_depto_empleado tv_depto_empleado.SelectItem(ll_Item) End If Compilar el script (Ctrl + L). 45.4.3. En el ListView lv_dept_empleados: Hacer click con el botn derecho sobre el ListView y seleccionar la opcin script en el men popup. En el editor, seleccionar el evento columnclick. El siguiente es el cdigo para dicho evento: -------control: lv_dept_empleados ----------------evento: columnclick----------------// Los items en el ListView se ordenan ascendentemente // por la columna presionada por el usuario // "column" es el argumento del evento columnclick // es el nmero de la columna sobre la que se ha hecho click lv_dept_empleados.SetRedraw(false) lv_dept_empleados.Sort(Ascending! , column) lv_dept_empleados.SetRedraw(true) Compilar el script (Ctrl + L). 45.4.4. En el botn Lista (cb_lista): Hacer click con el botn derecho sobre el botn y seleccionar la opcin script en el men popup. En el editor, seleccionar el evento clicked. El siguiente es el cdigo para dicho evento: -------Evento: clicked--------------------Control: cb_lista -----------ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes Pgina 56 de 57

// Muestra los tems del ListView en forma de una lista sencilla lv_dept_empleados.view = ListViewList! Compilar el script: en el men Edit Compile Script (Ctrl+L). Cerrar la ventana del editor. 45.4.5. En el botn Detalles (cb_detalles): Hacer click con el botn derecho sobre cb_detalles y seleccionar la opcin script en el men popup. En el editor, seleccionar el evento clicked. El siguiente es el cdigo para dicho evento: -------Evento: clicked--------------------Control: cb_detalles --------// Muestra los tems del ListView en forma de una lista detallada. // Esta es la forma de presentacin por defecto que se escogi al // crear el control ( en propiedades de lv_dept_empleados: view = // report ) lv_dept_empleados.view = ListViewReport! Compilar el script: en el men Edit Compile Script (Ctrl+L). 45.4.6. En el botn Iconos grandes (cb_grandes): Hacer click con el botn derecho sobre cb_grandes y seleccionar la opcin script en el men popup. En el editor, seleccionar el evento clicked. El siguiente es el cdigo para dicho evento: -------Evento: clicked--------------------Control: cb_grandes --------// Muestra los items del ListView en forma de conos grandes lv_dept_empleados.view = ListViewLargeIcon! Compilar el script: en el men Edit Compile Script (Ctrl+L). Cerrar la ventana del editor. 46. Correr la aplicacin y probar su funcionamiento.

47. Crear un ejecutable de la aplicacin creada.

ENTRENAMIENTO EN P OWERB UILDER 9.0 Ing. Ismael Castaeda Fuentes

Pgina 57 de 58

Nombre de archivo: EntrenamientoPowerBuilder9_0.doc Directorio: C:\OODB\PB_9 Plantilla: C:\WINDOWS\Application Data \Microsoft\Plantillas\Normal.dot Ttulo: Entrenamiento en PowerBuilder 9 Asunto: Ejercicio de entrenamiento Autor: Ismael Castaeda Fuentes Palabras clave: PowerBuilder, Bases de Datos, Aplicativo Comentarios: Herman Sandoval M. colabor en la edicin de esta versin. Fecha de creacin: 30/08/03 11:03 A.M. Cambio nmero: 4 Guardado el: 30/08/03 11:10 A.M. Guardado por: Ismael Castaneda Fuentes Tiempo de edicin: 57 minutos Impreso el: 30/08/03 12:08 P.M. ltima impresin completa Nmero de pginas: 58 Nmero de palabras: 12,899 (aprox.) Nmero de caracteres: 73,529 (aprox.)

Você também pode gostar