Está en la página 1de 56

ENTRENAMIENTO EN POWER BUILDER

Ing. Ismael Castaeda Fuentes

Departamento de Ingeniea de Sistemas


UNIVERSIDAD NACIONAL DE COLOMBIA
Bogot, Diciembre de 2000

ENTRENAMIENTO EN POWER BUILDER

PowerBuilder es una herramienta computacio nal 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 7.0 del entorno integrado para desarrollo de aplicaciones
empresariales
ofrece
mejoras
significativas
en
rendimiento
y
productividad, y un amplio soporte para componentes estndar, basados
en Web. Con el Nuevo Web DataWindow, usted puede desplegar sus
aplicaciones en cualquier browser comercial. La completa integracin con
Enterprise Application Server 3.0, tanto en la etapa de desarrollo, como
en la fase de implantacin, proporciona alta confiabilidad, disponibilidad y
escalabilidad para aplicaciones PowerBuilder desarrolladas para la Web.

COMPONENTES DE UNA APLICACIN POWERBUILDER.


w

Objetos.
Un objeto es una forma de comunicacin con el usuario, por ejemplo una ventana o un
men.
Nombres de objetos PowerBuilder:
F
F
F
F
F
F
F
F
F
F

Application object
Window
DataWindow
Menu
Global functions
Queries
Structures
User objects
Libreries
Projetcs

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.

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 1 de 55

Algunos de los eventos ms comunes son:


F
F
F
F
F
F
F
F

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.


w

Controles.
Un control es un objeto colocado en una ventana.
Los controles son:
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F

CheckBox
CommandButton
DataWindow
DropDownListBox
DropDownPictureListBox
EditMask
Graph
GroupBox
HscrollBar
Line
ListBox
ListView
MultiLineEdit
OLEcontrol
OLECustomControl
Oval
Picture
PictureButton
PictureListBox
RadioButton
Rectangle
RichTextEdit
RoundRectangle
SingleLineEdit
StaticText
Tab

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 2 de 55

F
F
F

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:
F
F

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:


F
F
F

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:
F
F

Apariencia.
Comportamiento.

LENGUAJE POWERSCRIPT
Es un lenguaje de alto nivel basado en objetos con el cual se pueden construir scripts.
PowerScript tiene:

w
w
w
w
w

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.
Variables:
F
F
F

Locales en un script.
A nivel de una ventana/objeto.
Globales.

Convenciones aconsejadas por PowerBuilder para dar nombre a los objetos:

OBJETO

PREFIJO

EJEMPLO

C heckBo x

cbx_

cbx_caja_para_control

C o mmandButto n

cb_

cb_boton_para_comando

DataWindo w C o ntro l

dw_

dw_ventana_para_datos_tabulares

DataWindo w Object

d_

d_objeto_para_datos_tabulares

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 3 de 55

Dro pDo w nListBo x

ddlb_

ddlb_caja_para_escoger_opciones

Dro pDo w nPictureListBo x

ddplb_

ddplb_lista_de_dibujos

EditMask

em_

em_formato_para_datos

Functio n

f_

f_nombre_de_funcion

Graph

gr_

gr_grafico

Gro upBo x

gb_

gb_caja_para_agrupar

Hscro llBar

hsb_

hsb_deslizamiento_horizontal

Line

ln_

ln_linea

ListBo x

lb_

lb_caja_para_presentacion

ListView

lv_

lv_despliegue_de_lista

Menu

m_

m_menu

MultiLineEdit

mle_

mle_multiples_lineas

OLEco ntro l

ole_

ole_a_ms_word

Oval

oval_

Oval_ovalo

Picture

p_

p_dibujo

PictureButto n

pb_

pb_boton_grafico

PictureListBo x

plb_

plb_caja_con_graficos

Pro ject

p_

p_proyecto

Radio Butto n

rb_

rb_boton_exclusivo

Rectangle

r_

r_rectngulo

RichTextEdit

rte_

rte_texto_enriquecido

Ro undRectangle

rr_

rr_rectangulo_bordes_redondeados

SingleLineEdit

Sle_

sle_linea_para_edicion

StaticText

st_

st_titulos

Tab

tab_

tab_carpetas

TreeView

tv_

tv_explorador

Structure

s_

s_estructura

UserObject

u_

u_objeto_del_usuario

Vscro llBar

vsb_

vsb_deslizamiento_vertical

Windo w

w_

w_nombre_de_ventana

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.

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 4 de 55

EJERCICIO PRCTICO
El ejercicio deben hacerlo de forma individual y presentarlo funcionando perfectamente, desde
ejecutable y desde PowerBuilder.
En grupo deben presentar un informe, indicando sus
comentarios sobre este documento, errores encontrados, 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:

Los pasos indicados a continuacin corresponden a un procedimiento que se puede seguir


utilizando PowerBuilder 7.02 y Sistema Operativo Windows 98 (de forma similar en Windows 95,
NT y 2000):
1. Entrar a Windows.
2. Escoger un directorio exclusivo para dejar todos los archivos del ejercicio (recomendado).
3. Copiar en este directorio:
Tres (3) archivos tipo *.bmp
Tres (3) archivos tipo *.ico
4. Activar PowerBuilder.

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 5 de 55

5. Crear una aplicacin:

5.1.

Crear una nueva aplicacin:

5.2.

En barra de herramientas F New F Start Wizards F Application, o,


En men F File F New F Start Wizards F Application
Llenar los datos de la ventana Specify New Application and Library, as:

5.3.

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.

F Finish. Automticamente PowerBuilder genera un archivo

con extensin .pbl y


una aplicacin con el mismo nombre del archivo. Si se quieren colocar comentarios a la
aplicacin creda, y/o crear una aplicacin con otro nombre, se abre y al guardar, se
coloca el nuevo nombre y/o se escriben los comentarios deseados, as:

En barra de herramientas F Open


nombre de la aplicacin F OK

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

F Object Type: Application FSeleccionar el

Pgina 6 de 55

F File F Save as F Seleccionar archivo F Guardar


F Save Application F 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) F Comments: Escribir un comentario significativo
relacionado con la aplicacin F OK

5.4.

Escritorio de la Aplicacin: Mediante la opcin Library de la Barra de Herramientas se


puede tener un explorador (similar al Explorador de Windows) en el cual se pueden
visualizar y seleccionar: los directorios, las librerias .pbl existentes y los objetos
respectivos.

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 7 de 55

5.5.

Se debe tener en cuenta que estando una aplicacin activa para abrir otra aplicacin se
debe antes cerrar todos los objetos de ella abiertos y luego seleccionar la aplicacin
mediante la opcin del men o de la barra de herramientes Select Application.

5.6.

Seleccionar propiedades de la aplicacin:


En escritorio de aplicacin: Oprimir botn derecho del ratn

5.7.

6.

6.1.

F Properties...

Regresar a la ventana inicial (cerrar ventanas abiertas):


En barra de herramientas F Close, o
En men F File F Close, o
Ctrl + W
Elaborar una ventana como la siguiente:

En barra de herramientas

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

F New F Object F Window F OK.

Pgina 8 de 55

6.2.

Para manejar el objeto creado PowerBuilder 7.02 abrir por omisin cuatro vistas
bsicas en una ventana: Layout (donde podr visualizar la forma del objeto), Script,
Control y Properties; en este caso las propiedades de una ventana son agrupadas
bajo tres grupos de caractersticas: General, Scroll, Toolbar y Other. 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 F
Properties...

6.3.

Para la ventana Window en el tipo de caractersticas 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!

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 9 de 55

En la serie de caractersticas Other


Dentro de Position se puede colocar la ubicacin y tamao dentro de la pantalla
6.4.

F OK

6.5.

Colocar los objetos deseados dentro de la ventana y darle sus caractersticas.

6.5.1. Insertar el control CommandButton en la ventana, as:

En el men: F Insert F Control F CommandButton


En barra de herramientas: F Control F CommandButton

6.5.2. En la ventana, hacer clic en el sitio donde se desea ubicar el control seleccionado.
6.5.3. Mirar, comprobar y/o modificar
seleccionado el control deseado):

las

caractersticas

del

control

(hay

que

tener

En barra de herramientas F Properties, o,


En la vista de Properties..., o
Con botn derecho dentro del control F Properties..., o
Doble clic dentro del control
6.5.4. En la vista de Properties, las caractersticas de un ComandButton estn agrupadas en:
General, Font y Other. Dar al control CommandButton dar 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.
6.5.5.

F OK

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 10 de 55

6.5.6. Grabar el trabajo adelantado (Salvar la ventana en la librera):

6.5.7. En

6.5.8.

En barra de herramientas F Save, o


En men F File F Save, o
En men F File F Save as..., o
Ctrl + S
la ventana Save Window escribir:
Nombre de la ventana (por ejemplo, w_icf_basica).
Un comentario.

F OK

6.5.9. Para ver cmo va quedando el diseo de la pantalla:


En barra de herramientas F Preview, o
En men F Design F Preview, o
Ctrl + Shift + P
7.
Elaborar una ventana como la siguiente:

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:
7.1.

Cierre la ventana anterior y Cree la nueva ventana:

En el men F File F Inherit... (si la ventana de la cual hereda est abierta est
seleccin no funcionar)
En la ventana Inherit From Window seleccionar la ventana que da las
caractersticas a heredar.

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 11 de 55

7.2.
7.3.

F OK
Mirar y/o cambiar las caractersticas de la ventana heredada.
Aadir los otros
RadioButton).

controles

mostrados

en

la

figura

(un

CommandButton

un

7.4.

Cambiar el texto del CommandButton heredado Salir por Cancelar.

7.5.

Los controles deben quedar con las caractersticas de visible y enabled

7.6.

Grabar el trabajo adelantado (Salvar la ventana en la librera; nombre sugerido:


w_icf_busqueda)

7.7.

Ver cmo va quedando el diseo y si es necesario hacer las modificaciones que estime
convenientes.

8.

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:
8.1.

Mirar y/o cambiar las caractersticas de la ventana heredada.


Cambiar el texto del RadioButton heredado Otro por Todos

8.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

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 12 de 55

Para agregar la lista de Departamentos, en la vista Properties del DropDownListBox


en el grupo de caractersticas: Items

8.3.

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).
Dar las dems caractersticas deseadas, tanto a la ventana como a los controles.

8.4.

Grabar el trabajo adelantado. (nombre sugerido: w_icf_pordepto_nom)

8.5.

Ver cmo va quedando el diseo y si es necesario, hacer las modificaciones que estime
convenientes.

9.

Elaborar una ventana como la siguiente:

El objetivo es tener una calculadora en la cual se va a obtener un resultado aritmtico


dados dos operandos.
9.1.

Crear la ventana y colocar sus caractersticas (ventana tipo popup).

9.2.

Colocar los objetos y sus caractersticas, as:

Dos SingleLineEdit, para primer y segundo operando.

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 13 de 55

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


CommandButton de las operaciones aritmticas.

otro

para

encerrar

los

9.3.

Grabar el trabajo adelantado.

9.4.

Ver cmo va quedando el diseo y (si es necesario) hacer las modificaciones que estime
convenientes.

10. Colocar el punto de entrada del aplicativo (inicio de ejecucin). Inicialmente direccionar
directamente a la Calculadora.
10.1.

En barra de herramientas
de la aplicacin F OK

F Open F Object Type: Application FSeleccionar el nombre

Al abrir el objeto Application PowerBuilder abre por omisin tres vistas bsicas:
Script, Declare instance variables y Non Visual Object List
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)
Elaborar un programa asociado con el evento open, similar al siguiente:

10.2.

// open icf_1
// Punto inicial del aplicativo.
open (w_icf_calculadora) //Nombre de la ventana que se desea activar.

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 tipearlo) utilizando las ventanas desplegables: Paste
Windows, Paste Global y Paste Instance 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.

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 14 de 55

10.3.

Compilarlo (paso opcional):

10.4.

En barra de herramientas: F Compile, o


En men: F Edit F Compile, o
Ctrl + L
Volver a la ventana principal de PowerBuilder:

En barra de herramientas: F Close


Si no hizo el paso de compilacin, confirmar (compilar y grabar) o descartar los
cambios realizados, en la ventana de dilogo Application: F S, o F No, o F
Cancelar.
11. Probar que la aplicacin se puede ejecutar:

En barra de herramientas: F Run, o


En men: F File F Run, o
Ctrl + R
12. Escribir las dems acciones que se desean tener al utilizar la calculadora.
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.
12.1.

Seleccionar la ventana de la calculadora.

12.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
Para el control que recibe el segundo operando, escribir un programa similar al que
recibe el primer operando.

12.3.
12.4.

12.5.

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)
Elaborar programas similares para las operaciones de resta, multiplicacin y divisin.

12.6.

Dejar el resultado en blanco, cuando se pase el cursor al campo que recibe el primer o
segundo operando (programar el evento getfocus: st_resultado_n.text = ).

12.7.

Probar la aplicacin.

13. 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:

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 15 de 55

// clic cb_salir
If MessageBox("Salir", "Cerrar esta ventana?", Question!, YesNo! ) = 1 then
Close( Parent )
End If
14. Correr la ventana para probar su funcionamiento:

En barra de herramientas F File F Run/Preview


nombre de la ventana, en este caso: w_icf_basica

F Object Type: Windows F Object:


F OK

15. Seleccionar la ventana donde se pueden hacer bsquedas.


15.1.

15.2.
15.3.

15.4.
15.5.

15.6.

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
Correr la ventana para probar su funcionamiento.
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
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
Correr la ventana para probar su funcionamiento.
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
Correr la ventana para probar su funcionamiento.

16. Crear una funcin que sirva para ejecutar las cuatro operaciones bsicas aritmticas:
sumar, restar, multiplicar y dividir.
16.1.

En barra de herramientas o en el men seleccionar:

16.2.

Llenar los datos solicitados:

F NEW F Object F Function.

16.2.1. Valor a retornar (Return Type): string.


16.2.2. Nombre de la funcin.

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 16 de 55

16.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)
17. Escribir las instrucciones que van a conformar la funcin. Puede ser un programa como el
siguiente:
// Nombre de la funcion: f_operaciones
// Objetivo: Hacer 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
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)
18. Cambiar los programas asociados con los botones de operaciones de la ventana de la
calculadora para que utilicen la funcin anterior.
18.1.

18.2.

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 )
Proceder de manera similar para la suma, multiplicacin y divisin.

18.3.

Probar su funcionamiento.

18.4.

Comprobar el funcionamiento de la Calculadora para valores con punto decimal. En caso


que no funcione, hacer las modificaciones necesarias.

19. Crear una base de datos que implemente lo mostrado en la siguiente figura:

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 17 de 55

19.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: F Database, o,
En el men: F File F New F Database F Database Painter, o,
F Window F Database Painter, o,
Shift + F7

Se crea una base de datos local:


w En Database Painter aparece la vista de Objects, en el rbol Installed Database
Interfaces F ODBC F Utilities F Create ASA Database.

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 18 de 55

Aparece la ventana Create Adaptive Server Anywhere Database, se deben llenar


los datos all pedidos:
w Database Name: Camino y nombre del archivo en Windows donde se va a
guardar el archivo fsico. Se sugiere:
F Browse,
Llegar al directorio deseado, y
Dar el nombre al archivo.
w User ID: Identificacin del usuario. Valor por omisin: DBA
w Password: Clave. Valor por omisin: SQL.
w F OK

20. Es bueno comprobar lo siguiente:

En Windows Inicio
(32 bits):

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

F Configuracin F Panel de Control F Fuentes de datos ODBC

Pgina 19 de 55

w
w

En ventana Administrador de Orgenes de Datos ODBC: F DSN de usuario 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 6.0.
Al dar doble click 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.

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 click derecho sobre el perfil seleccionado F Properties:
se puede ver la ventana Database Profile Setup ODBC:
w En el tab Connection se encuentra: el nombre de la fuente de datos (Data
Source Name) y del perfil (Profile Name), adems de los datos de User ID y
Password; en el tab Preview se observa la sintaxis de la conexin a la base de
datos perteneciente al perfil creado.

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 20 de 55

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 F Remove).
21. 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:

F Create Table, o,

En la barra de herramientas

Conectarse a la base de datos, click para desplegar sus componentes dentro de ellos
se encuentran Tables y mediante click derecho con el ratn F New Table F Definir
las columnas F Save Table as

22. Seleccionada una tabla:

Definir llave primaria: click derecho sobre la cualidad Primary key F New Primary key
Crear ndices: click derecho sobre la cualidad Index F New Index
Crear llaves forneas: click derecho sobre la cualidad Foreign key F New Foreign key
Llenarla de datos:
w Click derecho sobre la tabla F Edit Data (grid, tabular o freeform)
w F Insert Row
w Digitar los datos
w F 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 F Close o, en el men, F File F Close.
Si se le quiere hacer un cambio posterior a la tabla es posible posicionadndose sobre la
tabla y mediante click derecho con el ratn escoger la opcin F Alter table.

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 21 de 55

23. 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:
23.1. En barra de herramientas : F New F DataWindow F Tabular F OK, o,
En men: F File F New F DataWindow F Tabular F OK

23.1.1. En la ventana Choose Data Source for Tabular Datawindow (seleccin de la fuente de
datos para el datawindow escogido): F SQL Select F Next
23.2.

En ventana Select Tables, seleccionar las tablas Empleado y Departamento F Open

23.3.

En tabla Empleado: Cdigo del empleado, Nombre del empleado, Apellido del empleado.

23.4.

En tabla Departamento:

23.5.

En carpeta Sort: Apellido del empleado (hacer drag and drop). Si se quiere
cambiar algo en la sintaxis del cdigo SQL, esto se puede ver con la opcin del men F
Design F Convert to sintax.

23.6.

Pasar a diseo de la salida: En barra de herramientas:

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

F Nombre del departamento

F Return

Pgina 22 de 55

23.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.

23.8.

A continuacin aparece la vista de diseo Design del datawindow acompaada (por


omisin) de la vista de propiedades Properties y de la vista de controles Control List,
apareceran los datos de las tablas seleccionados. En la vista de diseo se puede 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!!

23.9.

Si se quiere volver a la ventana de Select correspondiente, escoger en barra de


herramientas F SQL (icono que dice SQL)

Ver resultado del diseo. En el men File

F Run/Preview

23.10. Hacer modificaciones al diseo.


23.11. Probar inserciones, borrados y modificaciones a la base de datos.
23.12. Grabar el trabajo adelantado: En barra de herramientas:

F Save

23.13. En ventana Save DataWindow:


23.14. Colocar el nombre de la ventana (d_...)
23.15. Escribir un comentario significativo
23.16.

F OK

24. De manera similar elaborar un DataWindows donde se muestre el listado de personas, dado
el cdigo del Departamento donde trabajan.

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 23 de 55

24.1.

Seguir un procedimiento similar a la creacin del anterior DataWindows. Adicionalmente,


en la ventana donde se seleccionan campos de las tablas (donde tambin aparecen las
carpetas Sort, Where, Group, Having, Compute y Syntax), dar la informacin del
argumento:

24.1.1. En men:

F Design F Retrieval Arguments...

24.1.2. En ventana Specify Retrieval Arguments: escribir el nombre del argumento (por
ejemplo departamento) y seleccionar el tipo de dato (por ejemplo Number)
24.1.3. F OK
24.2.

En carpeta Where, especificar la condicin deseada, por ejemplo:

25. Elaborar un tercer DataWindows que muestre los empleados que tengan el Nombre y/o el
Apellido digitado por el usuario.
25.1.

Seguir un procedimiento similar a la elaboracin del DataWindows anterior. En este caso


es necesario especificar dos argumentos (por ejemplo: nombre de tipo String y apellido
de tipo String).

25.2.

F OK

25.3.

En carpeta Where: especificar la condicin deseada, por ejemplo:


Column
Operator
Value
Logical
"empleado"."empl_nombre"
=
:nombre
Or
"empleado"."empl_apellido"
=
:apellido
26. Elaborar un DataWindows 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.

27. 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
28. Correr la aplicacin y comprobar que funciona el nuevo punto de entrada.

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 24 de 55

29. 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.
29.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 pasarselo como entrada al datawindow:
dw_datos_empleados.retrieve(DOUBLE(ddlb_departamento.selectitem(ddlb_departamento.text,1)))
END IF
29.2. Correr la aplicacin y comprobar su correcto funcionamiento.
30. Programar el evento doble click doubleclicked para el DataWindows Control de la ventana
que permite bsqueda. Por ejemplo:
// doble click 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.dataobject='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
31. Crear una ventana, que sea el nuevo punto de entrada y exhiba en mens las posibilidades
que presenta el aplicativo, ver las siguientes cinco figuras:

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 25 de 55

31.1.

Para hacer el men, se puede seguir un procedimiento similar al siguiente:

31.2.

En Barra de herramientas o en men:

31.3.

Crear los mens y submens, junto con sus caractersticas, para ello:

F New F Object F Menu

F Insert F Submenu item, o,

En el men

Ctrl+Shift+S, o,

Click derecho con el ratn sobre untiled() en la vista untiled() activa y seleccionar:
F Insert Submenu item

F Save

31.4.

En barra de herramientas:

31.5.

En ventana Save Menu: Dar Nombre y Comentarios.

32. Escribir los programas asociados con el evento clic para cada una de las opciones de los
mens, por ejemplo:
32.1.

Para: F Calculadora
// click m_servicios.m_calculadora
open ( w_icf_calculadora )

32.2.

Para: F 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

32.3.

Para:

F Buscar F Todos

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 26 de 55

// 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!)
32.4.

Para: F Buscar F Por Nombre


// Clic m_personal.m_buscar.m_pornombre
open ( w_icf_pordepto_nom)
w_icf_pordepto_nom.rb_nombre.setfocus()

32.5.

Para: F Buscar F Por Departamento


// Clic m_personal.m_buscar.m_pordepto
open ( w_icf_pordepto_nom)
w_icf_pordepto_nom.rb_departamento.setfocus()

33. A la nueva ventana creada (w_aplicativo_entrenamiento) en la vista de Properties F


General: colocar nombre, asociar el men recin elaborado en Menu Name, seleccionar un
icono en Icon (desde que los icoconos 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).
34. Modificar el punto de Inicio para arranque con la ventana recin diseada.
35. Agregar facilidades de men a la ventana de la calculadora, ver ejemplo presentado en las
siguientes tres grficas:

Si desea colocar separadores entre los submenus como aparece en las figuras, en
Properties F General del submenu: colocar en Text: - y seleccionar la opcin
Default.

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 27 de 55

36. Escribir los programas asociados con el evento clic para cada una de las opciones de los
mens, por ejemplo:
36.1.

Para: F Archivo F Cerrar Ventana


// click m_archivo.m_cerrarventana
Close( ParentWindow )

36.2.

Para: F Archivo F Salir del Aplicativo


// click m_archivo.m_salirdelaplicativo
Close ( w_aplicativo_entrenamiento ) //Ventana principal del aplicativo

36.3.

Para: F Editar F 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 = ""

36.4.

Para: F Editar F Resultado a Memoria


// click m_editar.m_resultadoamemoria
// Objetivo: Llevar el resultado al clipboard
clipboard ( w_icf_calculadora.st_resultado_n.text )

36.5.

Para: F Editar F Memoria a Operando 1


// clic m_editar.m_memoriaaoperando1
// Copia el contenido del clipboard al Primer Operando
w_icf_calculadora.sle_operando1.text = clipboard ( )

Para: F Ayuda F Temas


// clic m_ayuda.m_temas
ShowHelp ( "C:\Archivos de programa\Sybase\PB6\Help\pbhlp60.hlp", index! )
37. Elaborar un ejecutable de la aplicacin.
36.6.

38. Salir de PowerBuilder.


39. Correr desde Windows el ejecutable que contiene el aplicativo.

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 28 de 55

40. Crear una ventana como la siguiente:


En esta ventana se utilizar un nuevo control (TabControl), y el DropDown DataWindow.

El Drop Down
DataW indow es til en
c as o de que s e
requiera hac er
referenc ia a datos de
otras tablas .

Ultima Fila

Siguiente Fila

Anterior Fila

Primera Fila

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 29 de 55

La estructura de las pginas Departamentos y Niveles es la misma.


39.1.

Crear una nueva ventana:

En barra de herramientas F New F Object F Window, o,


En men F File F New F Object F Window
Con el botn derecho sobre la nueva ventana, modificar las propiedades de la
ventana Properties:
39.2.

Window Type: Popup.


Las opciones Resizable y Maximize Box no debern seleccionarse.
Insertar un control Tab en la ventana y darle el tamao adecuado.

En el men Insert F Control F Tab, o,


En la barra de herramientas F 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 F General:
Name: tab_actualizaciones
Seleccionar Bold Selected Text (El texto de la pgina seleccionada se muestra en
negrilla)
OK
39.2.1. Hacer click con el botn derecho dentro de la primera pgina (la que tiene el texto none)
y elegir propiedades generales, Properties F General :
Name: tabpage_empleados
Tab Text: Empleados
OK
39.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).

39.2.3. Guardar el trabajo: File

F Save. El nombre de la nueva ventana ser w_actualizaciones.

39.2.4. Modificar la opcin actualizar del men, para que se abra la nueva ventana:

En la barra de herramientas F Open F Object Type: Menu.


Seleccionar el men ya realizado (p.ej. m_entrenamiento) F OK
Seleccionar la opcin Actualizar en 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.

39.2.5. Correr la aplicacin y probar el funcionamiento del men y la nueva ventana.


39.2.6. Crear un DataWindow Object en el que se relacionen el cdigo y nombre de los
departamentos.

En la barra de herramientas F New F DataWindow: Grid


w Data Source F SQL Select F Next
En la ventana Select Tables seleccionar la tabla departamento. FOpen
Seleccionar las columnas cdigo de departamento y nombre de departamento.
Pasar a diseo de salida o vista de diseo: F Return
Seleccionar colores y bordes F Aceptar selecciones F Finalizar

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 30 de 55

Colocar los encabezados apropiados.


File F Save. En la ventana Save DataWindow:
w Name: ddd_depto (ser utilizado como DropDownDatraWindow)
w OK
w Cerrar la ventana de edicin del DataWindow
39.2.7. Crear un DataWindow Object para actualizar los datos relacionados con los empleados.

En la barra de herramientas F New F DataWindow: Grid


w Data Source F SQL Select F Next
En la ventana Select Tables seleccionar la tabla Empleado FOpen
Seleccionar todas las columnas de la tabla empleado.
Pasar a diseo de salida o vista de diseo: F Return
Seleccionar colores y bordes F Aceptar selecciones F Finalizar
Elegir Properties (con el botn derecho sobre el datawindow, vista de diseo)
w En la pgina General: Color F ButtonFace
Para los encabezados de todas las columnas, en la pgina general: Border F Raised
Text F modificar el texto
Para la columna dept_id (cdigo de departamento): Elegir Properties :
w En la pgina General: Borde F Lowered.
w En la pgina Font: Background F WndBkrnd.
w En la pgina Edit:
Style 4DropDownDW
DataWindow 4dd_depto (el que se cre en el paso 40.2.6.)
Display Column 4dept_nombre (nombre de departamento)
Data Colum 4dept_id (cdigode departamento)
Width of DropDown (ancho del DropDown) 4300%
Seleccionar VscrollBar
w OK
File4Save. En la ventana Save DataWindow:
w Name: d_act_empleados
w OK
w Cerrar la ventana de edicin del DataWindow

39.2.8. Seleccionar el DataWindow dw_act_empleados en la pgina Empleados. Hacer click con


el botn derecho y seleccionar la opcin properties del men poup.
DataWindow Object Name4browse... 4d_act_empleados (el que se cre en el
apartado anterior:39.2.7)
OK
39.3. Para agregar una nueva pgina al control Tab, se hace click con el botn derecho sobre
el control. En el men popup 4Insert Tab Page
39.3.1. Hacer click con el botn derecho dentro de la nueva pgina (la que tiene el texto none) y
elegir propiedades generales, Properties F General en el men poup:
Name: tabpage_actividades
Tab Text: Actividades
OK
39.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),
Actualizar
(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), Anterior (cb_anterior_a), Ultimo (cb_ultimo_a).

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 31 de 55

39.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 F New F DataWindow: Grid


w Data Source F SQL Select F Next
En la ventana Select Tables seleccionar la tabla Empleado FOpen
Seleccionar las columnas cdigo de empleado, nombre y apellido del empleado.
Pasar a diseo de salida o vista de diseo: F Return
Seleccionar colores y bordes F Aceptar selecciones F Finalizar
Colocar los encabezados apropiados.
File F Save. En la ventana Save DataWindow:
w Name: ddd_empleado (ser utilizado como DropDownDatraWindow)
w OK
w Cerrar la ventana de edicin del DataWindow

39.3.4. Crear un DataWindow Object en el que se relacionen el cdigo y nombre de los niveles.

En la barra de herramientas F New F DataWindow: Grid


w Data Source F SQL Select F Next
En la ventana Select Tables seleccionar la tabla nivel. FOpen
Seleccionar las columnas cdigo de nivel y nombre de nivel.
Pasar a diseo de salida o vista de diseo: F Return
Seleccionar colores y bordes F Aceptar selecciones F Finalizar
Colocar los encabezados apropiados.
File F Save. En la ventana Save DataWindow:
w Name: ddd_nivel (ser utilizado como DropDownDatraWindow)
w OK
w Cerrar la ventana de edicin del DataWindow

39.3.5. Crear un DataWindow Object para actualizar los datos relacionados con los actividades
de los empleados.

En la barra de herramientas F New F DataWindow: Tabular


w Data Source F SQL Select F Next
En la ventana Select Tables seleccionar la tabla Actividad. FOpen
Seleccionar todas las columnas de la tabla Actividad.
Pasar a diseo de salida o vista de diseo: F Return
Seleccionar colores y bordes F Aceptar selecciones F Finalizar
Elegir Properties en el menu poup (con el botn derecho sobre el DataWindow):
w En la pgina General: Color F ButtonFace
Para los encabezados de todas las columnas: Elegir Properties en el menu poup (con
el botn derecho):
w En la pgina General: Borde F 3D Raised. Text F modificar el texto
w En la pgina Font: Background F ButtonFace.
w OK
Para la columna emp_id (cdigo del empleado): Elegir Properties en el menu poup
(con el botn derecho):
w En la pgina General: Borde F 3D Lowered.
w En la pgina Font: Background F WndBkrnd.
w En la pgina Edit:
Style 4DropDownDW
DataWindow 4ddd_empleado (el que se cre en el paso 40.3.3.)
Display Column 4emp_id (cdigo del empleado)
Data Colum 4emp_id (cdigo del empleado)
Width of DropDown (ancho del DropDown) 4400%
Seleccionar VscrollBar
OK

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 32 de 55

Para la columna niv_id (cdigo del nivel): Elegir Properties en el menu poup (con el
botn derecho):
w En la pgina General: Borde F 3D Lowered.
w En la pgina Font: Background F WndBkrnd.
w En la pgina Edit:
Style 4DropDownDW
DataWindow 4ddd_nivel (el que se cre en el paso 40.3.3.)
Display Column4niv_id (cdigo del nivel)
Data Colum 4niv_id (cdigo del nivel)
Wdth of DropDown (ancho del DropDown) 4250%
Seleccionar VscrollBar
OK
File F Save. En la ventana Save DataWindow:
w Name: d_act_actividades
w OK
w Cerrar la ventana de edicin del DataWindow

39.3.6. Seleccionar el DataWindow dw_act_actividades en la pgina Empleados. Hacer click con


el botn derecho y seleccionar la opcin properties del men poup.
DataWindow Object Name4browse... 4d_act_actividades (el que se cre en el
apartado anterior: 39.3.5)
OK
39.4. El procedimiento utilizado para agregar las dos pginas restantes (Departamentos y
Niveles) es bastante similar al descrito anteriormente.
39.5.

Hasta ahora no se han escrito los programas (scripts) para ninguno de los eventos de los
controles creados.

39.5.1. En la ventana w_actualizar, seleccionar la pgina Empleados (tabpage_empleados)

Hacer click 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 F Compile; o Ctrl+L; o F Edit


F 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

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 33 de 55

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 seleccona 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()

//el nmero de la fila


//seleccionada actualmente
dw_act_empleados.ScrollToRow(l_fila_actual - 1)
//se desplaza a la
//fila anterior
dw_act_empleados.SetColumn(1) //se seleccona 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 filase inserta al final del datawindow
fila_nueva = tab_actualizaciones.tabpage_empleados.dw_act_empleados.InsertRow(0)

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 34 de 55

//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 nmero de la fila seleccionada, que es la que se
//eliminar
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 dehacen
//todos los cambios con la orden rollback.
//De locontrario, 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

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 35 de 55

39.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.

39.7.

Se agregar un nuevo botn, que permitir exportar los datos del datawindow a
diferentes formatos. La apariencia de la ventana ser la siguiente:

Agregar un nuevo botn, hacer click derecho sobre l y elegir la opcin Properties
del men popup.
w Name F cb_exportar
w Text F Exportar.
w 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_departamentos.dw_act_departamentos.SaveAs("",
EXCEL!, TRUE)

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 36 de 55

//la funcin SaveAs permite guardar los datos que estn en un datawindow
//en diferentes formatos de archivo. Esta funcin utiliza el 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
39.8.

De manera similar, agregar un botn adicio nal para cerrar la ventana de actualizaciones
(w_actualizaciones)
Properties F Name F cb_cancelar
Properties F Text F Cancelar
OK
El script para el evento clicked de este botn es:
Close (parent)

40. Crear una ventana como la siguiente:

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

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 37 de 55

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 empleados.
40.1.

En la barra de herramientas:

File F New F Object F Window

Con el botn derecho sobre la nueva ventana, modificar las propiedades de la ventana
vista de Properties:

40.2.

Window Type F Popup.


Las opciones Resizable y Maximize Box no debern seleccionarse.

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: F Treeview


En el menu Insert FControl F Treeview
w Name 4tv_depto_empleado
w Seleccionar la opcin Lines at Root
w Indent410
w OK
40.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)

40.2.2. Guardar el trabajo: File

F Save. El nombre de la nueva ventana ser w_explorador.

40.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

FSeleccionar menu principal (p.ej. m_entrenamiento) F OK

F Object Type:Menu

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.
40.2.4. Correr la aplicacin y probar el funcionamiento del men y la nueva ventana.
40.2.5. Crear un DataWindow Object en el que se relacionen el nombre de los departamentos.
(se usa el botn DataWindow de la barra de herramientas PowerBar)
En la barra de herramientas F New F DataWindow: Tabular
w Data Source F SQL Select F Next
En la ventana Select Tables seleccionar la tabla departamento FOpen
Seleccionar las columnas cdigo de departamento y nombre de departamento.
Pasar a diseo de salida o vista de diseo: F Return
Seleccionar colores y bordes F Aceptar selecciones F Finalizar
Colocar los encabezados apropiados.
File F Save. En la ventana Save DataWindow:
w Name: d_depto
w OK
w Cerrar la ventana de edicin del DataWindow
40.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

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

F New F DataWindow: Tabular

Pgina 38 de 55

Data Source F SQL Select F 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: F Return
Seleccionar colores y bordes F Aceptar selecciones F Finalizar
Colocar los encabezados apropiados.
En el men Design elegir la opcin Retrieval Arguments...
En la ventana Specify Retrieval Arguments: name 4dept_id, type4number
OK
Oprimir el Tab "Where" en la parte inferior de la pantalla:
w Column 4"empleado"."dept_id" (Al hacer click en el espacio en blanco se puede
elegir la columna deseada)
w Operator 4= (Al hacer click en el espacio en blanco se puede elegir el operador
deseado)
w 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 F Save. En la ventana Save DataWindow:
w Name: d_empleados_por_depto
w OK
w Cerrar la ventana de edicin del DataWindow

40.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 F New F DataWindow: Tabular
w Data Source F SQL Select F Next
En la ventana Select Tables seleccionar la tabla actividad y la tabla empleado F
Open
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: name4emp_id (cdigo del empleado),
type 4number
OK
Oprimir el Tab "Where" en la parte inferior de la pantalla:
w Column 4"empleado"."emp_id" (Al hacer click en el espacio en blanco se puede
elegir la columna deseada)
w Operator 4= (Al hacer click en el espacio en blanco se puede elegir el operador
deseado)
w 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 F Save. En la ventana Save DataWindow:
w Name: d_activ_por_empleado
w OK
w Cerrar la ventana de edicin del DataWindow
Guardar el trabajo adelantado hasta el momento File F Save.
40.3.

Declaracin de variable de instancia ids_datos


En la vista de Scipt del treeview desplegar la lista de objetos y seleccionar
(Declare) y aparecer al lado derecho Instance Variables.
Escribir: datastore ids_datos[4].
OK

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 39 de 55

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 40.2.6. y 40.2.7.
40.4. Crear las Funciones:
lf_agregar_items
lf_config_item
40.4.1. Funcin lf_agregar_items

En la vista de Scipt del treeview desplegar la lista de objetos y seleccionar F


(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:


w Name4lf_agregar_items
w Access 4Public
w Return 4Integer
w Arguments:
Name4al_parent, Ttype4Long, Pass By4Value4 Oprimir Add
Name4ai_nivel, Type4Integer, Pass By4Value4Oprimir Add
Nam4ai_filas, Type4Integer, Pass By4Value
Colocar el siguiente 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
//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
ENTRENA MIENTO EN POWERBUILDER 7.02
Ing. Ismae l Cast aeda F uent es

Pgina 40 de 55

//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.

40.4.2. Funcin lf_config_item


En la vista de Scipt del treeview desplegar la lista de objetos y seleccionar F
(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:
w Name4lf_config_item
w Access 4Public
w Return 4 (None)
w Arguments:
Name4ai_nivel, Type4Integer, Pass By4Value 4 Oprimir Add
Name 4ai_fila, Type4Integer, Pass By4Value 4Oprimir Add
Name 4atvi_nuevo, Type4TreeViewItem, Pass By4Reference 4OK
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 despliega 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 informacin
// 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
// palabra "empresa", en este caso no se usa niungn
// DataStore
ENTRENA MIENTO EN POWERBUILDER 7.02
Ing. Ismae l Cast aeda F uent es

Pgina 41 de 55

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
40.5. Escribir los scripts para los controles creados.
40.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 evento 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

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 42 de 55

ids_datos[3].DataObject = "d_empleados_por_depto"
ids_datos[3].SetTransObject(sqlca)
//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 F 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).

40.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
// Departamentos
if li_nivel = 2 then

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 43 de 55

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
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 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.
40.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 F Compile Script (Ctrl+L).
40.5.4. En el botn Contraer Todo (cb_contraer):
Hacer click con el botn derecho sobre cb_contraer 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_contraer--------Long ll_handle

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 44 de 55

ll_handle = tv_depto_empleado.FindItem ( RootTreeItem!, 0 )


tv_depto_empleado.CollapseItem ( ll_handle ).
Compilar el script: en el men Edit F Compile Script (Ctrl+L).
Cerrar la ventana del editor.
40.5.5. Para el botn Cerrar (cb_cerrar)
-------Evento: clicked--------------------Control: cb_cerrar--------close(w_explorador)
Compilar el script: en el men Edit F Compile Script (Ctrl+L).
40.6.

Guardar el trabajo adelantado y correr la aplicacin para comprobar el funcionamiento


del TreeView.

41. Modificar la ventana creada en el paso 40 de la siguiente forma:

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 ListView 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.
41.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 4lv_dept_empleados
Seleccionar la opcin Show header
View 4Report (Detalles)

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 45 de 55

Sort 4Unsorted
OK
41.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)

41.1.2. Guardar el trabajo adelantado: File


41.2.

41.3.

F Save.

Declaracin de variable de instancia ii_columnas


En la vista de Scipt del treeview desplegar la lista de objetos y seleccionar F
(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.
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)

41.3.1. Funcin wf_agregar_lv_items


En la vista de Scipt del treeview desplegar la lista de objetos y seleccionar F
(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:
w Name4wf_lv_agregar_items
w Access 4Public
w Return 4Integer
w Arguments:
Name4ai_nivel, Type4Integer, Pass By 4Value 4 Oprimir Add
Name 4ai_filas, Type4Integer, Pass By 4Value 4OK
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 nivel 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)
ENTRENA MIENTO EN POWERBUILDER 7.02
Ing. Ismae l Cast aeda F uent es

Pgina 46 de 55

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 fucin 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
Compilar el script (Ctrl + L).
41.3.2. Funcin wf_config_lv_item
En la vista de Scipt del treeview desplegar la lista de objetos y seleccionar F
(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:
w Name4wf_config_lv_item
w Access 4Public
w Return 4 (None)
w Arguments:
Name4ai_nivel, Type4Integer, Pass By 4Value4Oprimir Add
Name4ai_fila, Type4Integer, Pass By 4Value4Oprimir Add
Name4alvi_nuevo, Type4ListViewItem, Pass By4Reference
w 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

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 47 de 55

// 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.
41.4.

Escribir los scripts para los nuevos controles.

41.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-------------////////////////////////////////////////////////////////////////////////////////////
// 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)

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 48 de 55

// 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 DataStore 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
41.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--------------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)

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 49 de 55

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).
41.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).
41.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-----------// Muestra los tems del ListView en forma de una lista sencilla
lv_dept_empleados.view = ListViewList!
Compilar el script: en el men Edit F Compile Script (Ctrl+L).
Cerrar la ventana del editor.

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 50 de 55

41.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 F Compile Script (Ctrl+L).
41.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 F Compile Script (Ctrl+L).
Cerrar la ventana del editor.
42. Correr la aplicacin y probar su funcionamiento.

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 51 de 55

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 52 de 55

43. Crear un ejecutable de la aplicacin creada.


Crear un proyecto:
w En la barra de herramientas F New F Project F Aplication Wizard
w About the Aplication Wizard: Informacin acerca de la ayuda prestada por
el wizard para construir el proyecto de la aplicacin. F Next
w Specify Destination Library: Aparece la ruta o directorio donde se van a
almacenar los objetos generados. F Next

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 53 de 55

Specify Project: aparece un nombre sugerido por convencin debe ser


p_nombre_proyecto, puede cambiar el nombre o aceptar el sugerido F Next

Specify Executable and Resource Files: Aqu usted debe proporcionar el


nombre que dara al ejeutable y la ruta o directorio donde quedar; es
opcional que seleccione Resource Files (archivos fuente) o .pbr. F Next
Specify Build Options: Opciones de construccin seleccionar: F Full F
Next
Generate Machine Code: No (sugerido) F Next
Specify dynamic library options: paso opcional (no seleccionar sugerido)

w
w
w

F Next
w
w

Ready to create application: Aparecen las opciones seleccionadas, si se


quiere cambiar algo retroceda sino F Finish
Ahora en su .pbl aparecer un nuevo objeto que es el proyecto que acaba
de crear: p_nombre_proyecto

Construir el proyecto para generar el ejecutable:


w De doble click sobre el proyecto recin creado
w Seleccione la forma de construir el proyecto para generar el ejecutable:
En la ventana del proyecto seleccione incremental o full (sugerida), y
luego en la barra de herramientas F Build
En el menu Design F Incremental Build o, F Full Build (sugerida)
Crear un acceso directo para el ejecutable:
w En el explorador de windows situse en el directorio donde qued el
ejecutable, ahora con el click derecho elija crear nuevo acceso directo, elija
como destino: la ruta donde est el ejecutable y en iniciar en coloque la ruta
donde se encuentran los recursos compartidos de Sybase para
PowerBuilder,
en
este
caso:
"C:\Archivos
de
programa\Sybase\Shared\PowerBuilder".
(Ver imagen que aparece a
continuacin)
w Pruebe que dando click sobre este acceso directo funciona la aplicacin.
ENTRENA MIENTO EN POWERBUILDER 7.02
Ing. Ismae l Cast aeda F uent es

Pgina 54 de 55

ENTRENA MIENTO EN POWERBUILDER 7.02


Ing. Ismae l Cast aeda F uent es

Pgina 55 de 55

También podría gustarte