Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Entrenamiento Powerbuilder 7 PDF
Entrenamiento Powerbuilder 7 PDF
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.
Pgina 1 de 55
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.
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
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
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
Locales en un script.
A nivel de una ventana/objeto.
Globales.
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
Pgina 3 de 55
ddlb_
ddlb_caja_para_escoger_opciones
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.
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:
Pgina 5 de 55
5.1.
5.2.
5.3.
Pgina 6 de 55
5.4.
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.
5.7.
6.
6.1.
F Properties...
En barra de herramientas
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.
Pgina 9 de 55
F OK
6.5.
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
F OK
Pgina 10 de 55
6.5.7. En
6.5.8.
F OK
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.
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.
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.
7.5.
7.6.
7.7.
Ver cmo va quedando el diseo y si es necesario hacer las modificaciones que estime
convenientes.
8.
Esta ventana debe heredar las propiedades de la ventana anterior (ICF - Pantalla bsica
para bsqueda), con las siguientes particularidades:
8.1.
8.2.
Contabilidad
Personal
Ventas
Mercadeo
Desarrollo
Recursos
Administracin
Sistemas
Pgina 12 de 55
8.3.
8.4.
8.5.
Ver cmo va quedando el diseo y si es necesario, hacer las modificaciones que estime
convenientes.
9.
9.2.
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.
otro
para
encerrar
los
9.3.
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
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:
Pgina 14 de 55
10.3.
10.4.
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:
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:
15.2.
15.3.
15.4.
15.5.
15.6.
16. Crear una funcin que sirva para ejecutar las cuatro operaciones bsicas aritmticas:
sumar, restar, multiplicar y dividir.
16.1.
16.2.
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.
19. Crear una base de datos que implemente lo mostrado en la siguiente figura:
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
Pgina 18 de 55
En Windows Inicio
(32 bits):
Pgina 19 de 55
w
w
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
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.
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.
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.
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.
23.9.
F Run/Preview
F Save
F OK
24. De manera similar elaborar un DataWindows donde se muestre el listado de personas, dado
el cdigo del Departamento donde trabajan.
Pgina 23 de 55
24.1.
24.1.1. En men:
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.
25. Elaborar un tercer DataWindows que muestre los empleados que tengan el Nombre y/o el
Apellido digitado por el usuario.
25.1.
25.2.
F OK
25.3.
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.
Pgina 24 de 55
Pgina 25 de 55
31.1.
31.2.
31.3.
Crear los mens y submens, junto con sus caractersticas, para ello:
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.
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
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.
32.5.
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.
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.
36.2.
36.3.
36.4.
36.5.
Pgina 28 de 55
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
Pgina 29 de 55
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)
Los botones para desplazarse por las filas del DataWindow: Primero (cb_primero),
Siguiente (cb_siguiente), Anterior (cb_anterior), Ultimo (cb_ultimo).
39.2.4. Modificar la opcin actualizar del men, para que se abra la nueva ventana:
Pgina 30 de 55
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).
Pgina 31 de 55
39.3.4. Crear un DataWindow Object en el que se relacionen el cdigo y nombre de los niveles.
39.3.5. Crear un DataWindow Object para actualizar los datos relacionados con los actividades
de los empleados.
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
Hasta ahora no se han escrito los programas (scripts) para ninguno de los eventos de los
controles creados.
Hacer click con el botn derecho sobre la pgina y seleccionar la opcin script en el
men popup.
Pgina 33 de 55
dw_act_empleados.SetFocus()
l_fila_actual = dw_act_empleados.getrow()
Pgina 34 de 55
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)
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)
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:
Con el botn derecho sobre la nueva ventana, modificar las propiedades de la ventana
vista de Properties:
40.2.
40.2.3. Modificar la opcin actualizar del men, para que se abra la nueva ventana:
F Object Type:Menu
En la barra de herramientas
Pgina 38 de 55
Pgina 39 de 55
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
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
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)
Hacer click con el botn derecho sobre el TreeView y seleccionar la opcin script en
el men popup.
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.
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
Pgina 44 de 55
Pgina 45 de 55
Sort 4Unsorted
OK
41.1.1. Insertar los dems controles en la ventana (como lo muestra la figura)
41.3.
F Save.
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
Pgina 47 de 55
Pgina 48 de 55
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.
Pgina 50 de 55
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.
Pgina 51 de 55
Pgina 52 de 55
Pgina 53 de 55
w
w
w
F Next
w
w
Pgina 54 de 55
Pgina 55 de 55