Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Entrenamiento Powerbuilder 7 PDF
Entrenamiento Powerbuilder 7 PDF
w Objetos.
Un objeto es una forma de comunicación con el usuario, por ejemplo una ventana o un
menú.
Nombres de objetos PowerBuilder:
F Application object
F Window
F DataWindow
F Menu
F Global functions
F Queries
F Structures
F User objects
F Libreries
F Projetcs
w Eventos.
Un evento puede ocurrir cuando un usuario ejecuta una acción con el ratón, el teclado, por
una orden del lenguaje PowerScript de PowerBuilder o por el mismo sistema.
w Scripts.
Un script es un conjunto de órdenes escritas en lenguaje PowerScript que se deben ejecutar
al ocurrir un evento.
w Controles.
Un control es un objeto colocado en una ventana.
Los controles son:
F CheckBox
F CommandButton
F DataWindow
F DropDownListBox
F DropDownPictureListBox
F EditMask
F Graph
F GroupBox
F HscrollBar
F Line
F ListBox
F ListView
F MultiLineEdit
F OLEcontrol
F OLECustomControl
F Oval
F Picture
F PictureButton
F PictureListBox
F RadioButton
F Rectangle
F RichTextEdit
F RoundRectangle
F SingleLineEdit
F StaticText
F Tab
w Focus.
Identifica el lugar de la pantalla donde va a suceder la siguiente acción. Para establecer el
foco en un sitio deseado, el usuario puede:
F Mover con el ratón el apuntador a un control y hacer clic.
F Presionar la tecla del tabulador hasta el control deseado.
w Atributos.
Los objetos y controles tienen atributos que definen su:
F Apariencia.
F Comportamiento.
LENGUAJE POWERSCRIPT
Es un lenguaje de alto nivel basado en objetos con el cual se pueden construir scripts.
PowerScript tiene:
w Comandos, por ejemplo IF ... THEN.
w Funciones predefinidas para manipular objetos, números, textos, para procesar fechas y
datos de tiempo, imprimir reportes, ejecutar DDE (Dynamic Data Exchange), manejar
archivos; por ejemplo SHOW, MOVE, OPEN, MAX, HIDE.
w Las funciones regresan un valor (return value) que puede ser utilizado o ignorado.
w Proposiciones SQL, por ejemplo SELECT, INSERT, UPDATE.
w Variables:
F Locales en un script.
F A nivel de una ventana/objeto.
F Globales.
Cuando se están creando los objetos, PowerBuilder sugiere un nombre para el objeto utilizando
el prefijo de la tabla anterior y un número. Ellos aconsejan cambiar este número por algo
significativo para el usuario que está elaborando el aplicativo.
Elaborar una Aplicación sencilla, que permita manipular información 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 selección de un empleado ver
sus datos detallados. La aplicación también debe estar en capacidad de ejecutar las acciones de
impresión, adición, modificación y borrado de datos de empleados. Como un servicio adicional de
la Aplicación, se debe proporcionar una Calculadora que esté en capacidad de ejecutar las cuatro
operaciones aritméticas básicas: suma, resta, multiplicación y división de dos valores dados por
el usuario.
Estructura de la aplicación:
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 las características del control (hay que tener
seleccionado el control deseado):
ü En barra de herramientas F Properties, o,
ü En la vista de “Properties”..., o
ü Con botón derecho dentro del control F Properties..., o
ü Doble clic dentro del control
6.5.4. En la vista de “Properties”, las características de un ComandButton están agrupadas en:
“General”, “Font” y “Other”. Dar al control CommandButton dar las características del
control, tales como:
ü Nombre del control (cb_salir).
ü Texto deseado dentro del control. (Salir)
ü Características de aparición.
ü Características de las fuentes.
ü Posición dentro de la ventana.
6.5.5. F OK
Esta ventana debe heredar las propiedades de la ventana anterior (ICF -Pantalla básica).
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á
selección no funcionará)
ü En la ventana “Inherit From Window” seleccionar la ventana que da las
características a heredar.
Esta ventana debe heredar las propiedades de la ventana anterior (ICF - Pantalla básica
para búsqueda), con las siguientes particularidades:
8.1. Mirar y/o cambiar las características de la ventana heredada.
Cambiar el texto del RadioButton heredado “Otro” por “Todos”
8.2. Añadir 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
• Administración
• Sistemas
// open icf_1
// Punto inicial del aplicativo.
open (w_icf_calculadora) //Nombre de la ventana que se desea activar.
18. Cambiar los programas asociados con los botones de operaciones de la ventana de la
calculadora para que utilicen la función anterior.
18.1. Para el botón 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 )
18.2. Proceder de manera similar para la suma, multiplicación y división.
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:
21. Crear las tablas (Estando la base de datos activa) Definir las columnas y sus
características: nombre, tipo de datos, aceptación o no de nulos, valor por omisión.
Colocar letreros significativos para encabezamientos de columnas, rótulos identificadores
de campos y comentarios a nivel de tabla y columna. Para ello:
ü En la barra de herramientas F Create Table, o,
ü Conectarse a la base de datos, click para desplegar sus componentes dentro de ellos
se encuentran Tables y mediante click derecho con el ratón 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 foráneas: 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 ratón escoger la opción F Alter table.
23.1.1. En la ventana “Choose Data Source for Tabular Datawindow” (selección 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: Código del empleado, Nombre del empleado, Apellido del empleado.
23.4. En tabla Departamento: F Nombre del departamento
23.5. En carpeta “Sort”: â Apellido del empleado (hacer “drag and drop”). Si se quiere
cambiar algo en la sintaxis del código SQL, esto se puede ver con la opción del menú F
Design F Convert to sintax.
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 elaboración 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 condición deseada, por ejemplo:
Column Operator Value Logical
"empleado"."empl_nombre" = :nombre Or
"empleado"."empl_apellido" = :apellido
26. Elaborar un DataWindows que muestre toda la información contenida en la base de datos
relacionada con un empleado. En este caso el argumento de búsqueda puede ser el código
del empleado y el estilo de presentación puede ser Freeform.
27. Cambiar el Punto de Inicio del Aplicativo, para que active la ventana que muestra las
opciones de búsqueda de personal y adicionalmente conecte la base de datos que se va a
utilizar. Elaborar un programa similar al siguiente (evento abrir la aplicación):
// open icf_1
// Punto inicial del aplicativo.
// ------------------------------------------------------------------------------------------------------------------
// CONEXIÓN AL MOTOR DE BASE DE DATOS
// Conexión 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 búsqueda
28. Correr la aplicación y comprobar que funciona el nuevo punto de entrada.
ü Si desea colocar separadores entre los submenus como aparece en las figuras, en
“Properties” F General del submenu: colocar en Text: “-“ y seleccionar la opción
Default.
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
dw_act_empleados.SetFocus()
l_fila_actual = dw_act_empleados.getrow() //el número 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 botón 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 número 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 botón Cargar Datos (cb_cargar), evento clicked:
//-------Evento: clicked--------------
//-------Control: cb_cargar----------
long l_numfilas
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)
if l_numfilas = 0 then
cb_borrar.enabled = false
else
cb_borrar.enabled = true
end if
ü Para el botón 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
long l_fila_actual
tab_actualizaciones.tabpage_empleados.dw_act_empleados.SetRedraw (false)
tab_actualizaciones.tabpage_empleados.dw_act_empleados.SetRedraw (false)
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)
if tab_actualizaciones.tabpage_empleados.dw_act_empleados.RowCount() = 0 then
cb_actualizar.enabled = false
else
cb_actualizar.enabled = true
end if
ü Agregar un nuevo botón, hacer click derecho sobre él y elegir la opción “Properties”
del menú popup.
w Name F cb_exportar
w Text F Exportar.
w OK
ü Hacer click derecho sobre el botón Exportar y elegir la opción 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
END CHOOSE
39.8. De manera similar, agregar un botón 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 botón es:
Close (parent)
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 botón derecho sobre la nueva ventana, modificar las propiedades de la ventana
vista de “Properties”:
ü Window Type F Popup.
ü Las opciones Resizable y Maximize Box no deberán seleccionarse.
40.2. Insertar un control TreeView en la ventana y darle el tamaño adecuado. Seleccionar el
control insertado y hacer click con el botón 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 opción Lines at Root
w Indent410
w OK
40.2.1. Insertar los demás 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 opción actualizar del menú, para que se abra la nueva ventana:
ü En la barra de herramientas abrir el menu principal: Open F Object Type:Menu
FSeleccionar menu principal (p.ej. m_entrenamiento) F OK
ü Agregar la opción Explorar en el menú Personal
ü Click derecho con el ratón sobre el treeview y seleccionar la opción Script
ü Escribir open(w_explorador)
ü Guardar las modificaciones hechas al menú.
40.2.4. Correr la aplicación 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 botón 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 código de departamento y nombre de departamento.
ü Pasar a diseño de salida o vista de diseño: 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 edición 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
condición).
ü En la barra de herramientas F New F DataWindow: Tabular
Integer li_Cont
//se declara un objeto TreeViewItem para manipular los valores del item
//que se agregará
TreeViewItem ltvi_Nuevo
Return ai_filas
//Se agrega el primer item (el único) del primer nivel del treeview.
//Los parámetros 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
SetPointer(HourGlass!)
// Departamentos
if li_nivel = 2 then
// 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)
// 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)
Long ll_handle
Integer li_Cont
ListViewItem llvi_nuevo
Return ai_filas
ü Compilar el script (Ctrl + L).
41.3.2. Función 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 función y las variables respectivas.
ü La nueva función 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 código para esta función:
-------función 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 número del item a configurar)
// listviewitem alvi_nuevo (el item a configurar)
///////////////////////////////////////////////////////////////////////////////////////////////////
Choose Case ai_nivel
Case 2
// Label = nombre del departamento | código dedepartamento
alvi_nuevo.PictureIndex = ai_nivel
ü Compilar el script (Ctrl + L) y guardar el trabajo adelantado.
SetPointer(HourGlass!)
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)
// 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)
// 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)
ll_Padre = tv_depto_empleado.FindItem(CurrentTreeItem!, 0)
tv_depto_empleado.GetItem(ll_Padre, ltvi_Item)
lb_Encontrado = False
ll_Item = tv_depto_empleado.FindItem(ChildTreeItem!, ll_Padre)
If lb_Encontrado Then
// Al cambiar el elemento seleccionado en el TreeView,
// se ejecuta el código 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 botón derecho sobre el ListView y seleccionar la opción script en el
menú popup.
ü En el editor, seleccionar el evento columnclick. El siguiente es el código para dicho
evento:
-------control: lv_dept_empleados----------
-------evento: columnclick-----------------
lv_dept_empleados.SetRedraw(false)
lv_dept_empleados.Sort(Ascending! , column)
lv_dept_empleados.SetRedraw(true)
-------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 aplicación y probar su funcionamiento.