Professional Documents
Culture Documents
POWERBUILDER 9.0
-2-
CONTENIDO
Propiedades de controles.
Objeto DataWindow.
Animaciones.
DataWindow Dinamicos.
Enviar Correo.
Api s en Power
Control treeview
Trucos en Power.
Profesor
-3-
-4-
Template Application .- es cuando se abre una nueva aplicacin pero con una plantilla
de trabajo
Existing Application .- Para abrir una aplicacin que se encuentra en otra versin del
power.
-5-
CAPITULO DE FUNCIONES
Funciones del Control:
CLEAR()
Borra el contenido de un objeto
Syntax
objectname.Clear ( )
Controls
DataWindow, EditMask, MultiLineEdit, SingleLineEdit, RichTextEdit,
DropDownListBox, DropDownPictureListBox, OLE controls, and OLEStorage
objects
DELETEITEM()
Borra un item desde una lista de valores
Syntax
objectname.DeleteItem ( index )
Controls
ListBox, DropDownListBox, PictureListBox, and DropDownPictureListBox controls
Ejemplo:
Esta sentencia borra el primer item seleccionado en Lb_productos
integer Xindex
ADDITEM()
Adiciona nuevos items para una lista de valores
Syntax
objectname.AddItem ( item )
Controls
ListBox and DropDownListBox controls
Ejemplo:
integer Xrow
-6string s
s = "Insertar Item"
integer XIndex
XIndex = lb_software.FindItem("Power Builder", 1)
En este ejemplo el valor de index ser 6
INSERTITEM
Inserta un item dentro de una lista de valores
Syntax
objectname.InsertItem (item, index)
Controls
ListBox and DropDownListBox controls
SELECTEDTEXT
Obtiene el texto seleccionado en un control editable
Syntax
editname.SelectedText ( )
Controls
DataWindow, EditMask, MultiLineEdit, SingleLineEdit, RichTextEdit,
DropDownListBox, and DropDownPictureListBox controls
ejemplo:
integer XIndex
XIndex = lb_software.SelectItem("Power Builder", 2) // si encuentra el texto lo resalta y si no
// el valor devuelto es 0
b) lobjectname.SelectItem (itemnumber)
Resalta el item especificado en la lista, si el valor es cero no se selecciona ningn tem
Syntax
objectname.SelectItem (itemnumber)
-8Controls
ListBox, DropDownListBox, PictureListBox, and DropDownPictureListBox controls
ejemplo
ddlb_software.Selecitem(0)
lb_software.SelectItem(5)
// resalta el item 5
TOTALITEMS
Determina el nmero total de items
Syntax
listcontrolname.TotalItems ( )
Controls
ListBox, DropDownListBox, PictureListBox, DropDownPictureListBox, and ListView
controls
STATE
Determina si un elemento de la lista esta resaltada.
Syntax
Listboxname.State ( index )
Controls
ListBox and PictureListBox controls
ejemplo:
-9Syntax
objectname.SetState (index, state)
Controls
ListBox and PictureListBox controls
ejemplo
lb_software.SetState(6, TRUE)
-10-
FUNCIONES DE CADENA.
ASC Obtiene el cdigo ASCII correspondiente, de un carcter de tipo cadena.
ejemplo :
Asc(
// retorna 65
,5)
// *****
// Cla
LEFTTrim Retorna una copia de una cadena sin los espacios en blanco del lado
izquierdo.
Ejemplo:
String Xcad
Xcad = LeftTrim(
LEN(Cad)
Claudia )
// Retorna Claudia
Ejemplo:
String Xcad
Xcad = Len( Claudia )
// Retorna 7
// Retorna claudia
// retorna ud
POS retorna la posicin donde comienza una cadena dentro de otra cadena .
Ejemplo:
Integer Xpos
Xpos = Pos( Power Builder Bu ) // Retorna 7
REVERSE(Cad) Cambia el orden de los caracteres de una cadena.
Ejemplo
String Xrev
Xrev = Reverse( Hola )
// aloH
// dia
// devuelve
costados.
UPPER(cad) Convierte toda la cadena a letras maysculas
Ejemplo:
-12Cad= especializacin
// devuelve ESPECIALIZACION.
FUNCIONES FECHA
DAY Retorna el da de una fecha.
Ejemplo:
Dia = String(Day(2001-04-21)) // retorna 21, convertimos el dato de tipo
nmerico a
cadena, con la funcion string.
DAYNAME Retorna el nombre de da de la semana
Ejemplo:
Cad = DayName(2001-04-22)
// retorna Sunday.
// Retorna 1
// retorna 4
-13Ejemplo
Hora = String(now(), HH:mm:ss ) // string(dato,tipo de salida del dato), en este
caso es
hora:minuto:segundo.
RELATIVEDATE Retorna la fecha con respecto a un determinado nmero de da.
Ejemplo:
Date Fecha
Fecha=Relativedate(today(), -25) // la fecha hace 25 das respecto a la fecha
actual.
SECOND Retorna el nmero de segundos.
Ejemplo:
Cad = string(Second(14:13:45)) // retorna 45 expresado en un dato de tipo
cadena.
-14-
FUNCIONES NUMRICAS
ABS obtiene el valor absoluto de un nmero
Ejemplo:
Num= (abs(-34) // retorna 34
CEILING Obtiene el menor nmero entero que es menor o igual al nmero especificado
Ejemplo: Donde Deci es una variable de tipo decimal
Deci = String(Ceiling(-4.8)) // retorna 4
COS Obtiene el coseno de un ngulo el ngulo debe estar en radianes
EXP El resultado de un nmero elevado a la potencia.
Ejemplo:
Deci = String(exp(1))
// 2.718
-15-
Ejemplo:
Num = Rand(10) // devuelve un nmero comprendido entre el 1 a 10
RANDONMIZE(0) Randomize Regenera o inicializa el nmero aleatorio generador.
Ejemplo:
Randomize(0)
ROUND Obtiene el nmero entero comprendido en un nmero decimal
Ejemplo:
Num = Round(3.598,0)
// devuelve 4
-16-
Aplicaciones
Em_1 control de
edicion
Mle_1 Contol de
mltiple linea
Num=345
Funciones a crear
Num
Num
Tipo int
F_mil
F_centena
F_mill
Letra
Letra
Devuelve en letras:
Trescientos cuarenta y cimco
a
a)
b)
c)
d)
e)
String cad1,cad2
Int c,res,d,uni
c=num/100
res= mod(num,100)
if c>0 Then
if c=1 and res=0 then cad1="Cien" else cad1=vec4[c]
end if
choose case res
case 1 to 9
cad2=vec1[res]
case 11 to 19
cad2=vec2[res - 10]
case 10, is >=20
d=res/10
uni=mod(res,10)
if uni=0 then
cad2=vec3[d]
else
cad2=vec3[d]+ " y "+ vec1[uni]
end if
end choose
return cad1 + cad2
-18Funcion miles
Cad1=f_centena(mil)+" Mil"
if res>0 Then
cad2=f_centena(res)
end if
return cad1 + " " + cad2
-19-
Edit Control
Un objeto DataWindow debe ser insertado con una ventana regular, en todo diseo de un
DataWindow forman parte dos objetos.
1.- DataWindow Object.- que es diseado con el DataWindow Painter.
2.- DataWindow Control.- Es un control donde se insertar el DataWindows Object.
-20-
SetTransObject
Hace que un control DataWindow use un objeto de transaccin especificado por el
programador. El objeto de transaccin proporciona la informacin nesecesaria para
comunicarse con la Base de Datos. Retorna -1 si ha ocurrido un error.
Sintaxis Dwn. Settransobject(Transaccin)
Argument
Description
Dwn
Transaccin
Descripcion
Dwn
Fila
Ejemplo:
-21DwnSoftware.InsertRow(0)
Retrieve()
Recupera todas las filas de una tabla de la BDD en un control DataWindow, Si incluyen
argumentos, estos son usados por los argumentos de recuperacion de la sentencia SQL
SELECT del objeto DataWindow. Retorna el nmero de filas recuperadas, -1 si ocurre un
error.
Sintaxis Dwn.Retrieve({Arg1, Arg2,
})
Argument
Descripcion
Arg1, Arg2
Ejemplo:
DwnSoftware.Retrieve( C001 )
SetRowFocusIndicator
Especifica el indicador visual que identifica la fila actual en un control DataWindow.
Sintaxis Dwn.SetRowFocusIndicator (Indicador)
Indicador
Off!
Sin indicador.
Un dedo indice.
El nombre de un Picture Control.
SelectRow
Selecciona la fila especificada en el control de un DataWindows.
Sintaxis Dwn.SelectRow (Fila, Boolean)
Ejemplo:
DwnSoftware.SelectRow(0,False)
DwnSoftware.SelectRow(15,true)
-22-
SetItem
Establece el valor en una fila y columna especificada, un valor dentro del datawindow,
retorna -1 si ocurre un error.
Sintaxis DwnSoftware.Setitem (Fila, columna/campo, valor)
Ejemplo:
Dwn.SetItem(5, "sueldo",670)
Tambin en vez del nombre de campo, puede ser el nmero de campo de acuerdo como
ha sido seleccionado en el objeto DataWindow.
GetItemString
Obtiene datos de tipo cadena de un buffer especificado de un control DataWindow.
Ejemlo: Capturar en variables, sueldo del empleado, su edad y fecha de nacimiento del
empleado, cuya posicin se encuentre en la fila nmero 3.
-23-
Int edad
Dec Sbas
Date Fenac
Edad= DwnEmpleado.GetItemNumber(3,"emp_Edad")
Sbas= DwnEmpleado.GetItemDecimal(3, "emp_Sbas")
Fenac=DwnEmpleado.GetItemDate(3,"emp_Fenac")
Sintaxis dwn.Gettext ()
Por ejemplo si este radio button se encuentra dentro del DataWindow, y al seleccionar
una de estas opciones se desea saber su valor seleccionado basta emplear:
String Tmoneda
Tmoneda = DwnSalario.Gettext()
Setsort
Especifica, el criterio de ordenamiento para un DataWindow, retorna 1 si tuvo xito y -1 si
se encontro un error.
Sintaxis Dwn.SetSort (campo1 [A|D])
Ejemplo:
DwnEmpleado.setsort()
Dwn.Sort()
// Procede al ordenamiento.
GetRow
Retorna el nmero de la fila actual de un DataWindow, como un valor Long,
Retorna 0 si no hay fila activa y -1 si se ha producido un error grave.
Sintaxis Dwn.GetRow ()
SetRow
Establece la fila deseada, mueve el cursor a la fila especificada, pero no hace Scroll en el
DataWindow.
Sintaxis Dwn.SetRow (Fila)
ScrollToRow
Hace un Scroll en un DataWindow, hasta alcanzar la fila especificada.
ScrollToRow cambia la fila actual pero no la columna actual. Retorna 1 si hubo xito, -1 en
caso contrario. Scrolltorow no ilumina la fila a la cual se hace scroll.
Sintaxis Dwn.ScrolltoRow(fila)
Si la fila toma un valor mayor que el nmero total de la fila, se hace scroll a la ltima fila.
RowCount
Obtiene el nmero de filas que se encuentran disponibles en un DataWindow
Sintaxis Dwn.RowCount()
ScrollToRow
Causa que el control se deslice a la fila especificada, cambiando la fila actual, a donde se
le indique.
Sintaxis Dwn.Scrolltorow(fila)
-25-
ScrollToPriorRow
Se desliza a la fila previa, sin cambiar la columna activa
Sintaxis Dwn.ScrollPriorRow(fila)
ScrollNextRow
Se desliza a la siguiente fila.
Sintaxis Dn.ScrollNextRow(fila)
DeleteRow
Suprime la fila especificada del control DataWindow, se actualiza directamente la tabla
enlazada al control.
Sintaxis Dwn.DeleteRow(fila)
Si la fila es igual a cero, elimina la fila activa donde se encuentra el puntero, cada vez que
se emplee esta sentencia, se tiene que actualizar el DataWindow ejemplo:
Dwn.deleteRow(8)
Dwn.Update()
DeletedCount
Retorna el nmero de filas que hayan sido suprimidas desde el control DataWindow pero
que todavia no hayan sido actualizadas en la tabla de la BDD asociada.
Sintaxis Dwn.DeletedCount()
Ejemplo:
Long Nf
Nf=Dwn.DeletedCount()
Update
Se envia a la base de datos todas las inserciones, eliminaciones y actualizaciones del
control DataWindow, retorna 1 si tuvo xito, -1 si ocurrio un error.
Sintaxis Dwn.Update()
-26-
SetFIlter)
-27Pasos 1.- La BDD VENTA.DB puede estar en cualquier motor de Base de dato,
para este caso se hace uso del AnyWhere del SYSBASE (entorno del
PowerBuilder)
Estructura:
Vendedor:
Codv Char
4
Nomv varchar 30
Sbas Numeric 8,2
Factura
Nfac char
6
Codv char
4
Impor Numeric 8,2
Tipov char
1
TABLAS
Ingresar datos consistentes en las tablas creadas, como se muestra a
continuacin:
FACTURA
VENDEDOR
Null(no)
-28-
Presentacin
Composite
Freeform
Graph
Grid
Group
Label
Rich Text
Tabular
Descripcin
Utiliza como presentacin, un reporte previamente creado.
La presentacin es libre, cada campo se muestra en una lnea
distinta. Muy utilizado para el ingreso de datos.
Disea un grfico dependiendo de una consulta, esta debe
contener datos relacionados.
Disea una malla de datos en forma columnada, y cada
columna con una justificacin completa.
Disea listado por agrupacin de campos. Muy utilizado para
reportes de resumen de informacin.
El diseo es de etiquetas, donde Ud. podr elegir el tipo de
etiqueta de las prediseadas, en papel continuo o separado, y
otras opciones.
Permite definir una carta con combinacin de campos del
Origen de Datos fijado. Se pueden utilizar todas las
caractersticas del formato de texto RTF.
Presenta el Origen de Datos en forma columnada pero sin
ajuste total. Permite una mayor libertad en el diseo.
-29-
El modo de trabajo define como se trabajara con el Origen de Datos. Existen 5 tipos de
modos de trabajo.
Modo
Quick Select
Sql Select
Query
External
Stored
Procedure
Descripcin
Nos presenta las tablas en forma grfica, y solo permite las
sentencias ordinarias de SQL (Sort y Criteria). La primera para
sentencia sirve para poder ordenar por el campo especfico y la
segunda sentencia para indicar registros a mostrar dependiendo
de un valor condicional (Ejemplo: <39)
Presenta las tablas en forma grfica, y permite trabajar con
todas las caractersticas de Sql estndar (Sort, Group, Having,
Compute y Where, entre otros)
El Origen de Datos es una consulta definida previamente en el
Area de Trabajo Query; esta consulta queda almacenada como
un objeto de PowerBuilder; Ud. debe seleccionar la consulta que
desee utilizar como Origen de Datos de este DataWindows.
El Origen de Datos no esta relacionado con ninguna Tabla. Ud.
debe definir los campos que interactan (nombre, tipo y tamao)
Utilice los botones Add para aadir un nuevo campo al final de
los ya existentes, el botn Insert le permitir insertar un campo
entre otros y el botn Delete le permitir eliminar el campo
actual.
El Origen de Datos es un procedimiento que ha sido
almacenado en la Base de Datos. Seleccione uno si lo ha
creado, o crelo previamente.
-30-
Seleccione las tablas a usar y precione el boton Open, de inmediato apareceran lasa
tablas seleccionadas
Paso 3.- Seleccione la Tabla Vendedor
Luego Seleccione los campos de la Tabla como se muestra a continuacin:
-31-
Color de fondo
del DW
Color del texto
del DW
Estilo del texto
del DW
Color de las
Cabeceras del DW
Estilo de las
cabecera del DW
Diseo
Propiedades
Preview
Columns Specification
-32-
ddplb_1
Dw_1
Dw_2
-33-
Propiedades complementarias al
control DataWindow.
-35end if
end if
Paso 7.- Codificar en el control sle_1, evento modify(), lo siguiente
STRING cad
// la funcion Trim suprime los blancos
cad = "Sbas " + trim(ddplb_1.text) + " " + trim(sle_2.text)
dw_2.setfilter(cad)
dw_2.filter()
Paso 8.- Codificar en el cb_1, evento clicked(), lo siguiente
int r
r=dw_1.getrow()
dw_1.selectrow(0,false)
dw_1.selectrow(r,true)
Script a Nivel de la Aplicacin:
// Profile Venta
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "Connectstring='DSN=venta'"
//nos conectamos con la Base de Datos
connect;
//preguntamos si ha ocurrido un error en la conexin
If Sqlca.Sqlcode<>0 then
Messagebox ("Error de Conexin",Sqlca.SqlErrText)
Halt
else
//abrimos la ventana 1 de nuestro proyecto
open(ventana01)
end if
Esta conexin se puede traer desde el entorno de la BDD
-36-
Clic en el
siguiente icono
y obtendremos
la siguiente
ventana
-37-
Paso 3.- Del men de opciones seleccionar Design, luego seleccionar Retrieval
Arguments.
-38-
Nombre de la Variable
Paso 4.- En la opcin Where seleccionar el campo para realizar la condicin con la
variable definida anteriormente, la variable debe ser precedida por dos puntos(:Var)
Observe el grafico
Luego Pulse ctrl. + W
-39-
-40-
Para ver como esta saliendo el diseo puede comprobarlo mediante la opcin Row del
men principal y seleccionando Retrieve, para ello le pedir ingresar un cdigo de
vendedor.
Paso 6.- Completar los campos de comisin, comisin total y pago total a travs de las
opciones del men principal: Insert submenu Control opcion Compute Field.
-41Al seleccionar esta opcin Computed Field , llevar el cursor en la posicin donde desea
colocar el calculo de la comisin (Detail), luego mostrara la ventana de Modify Expresin
donde colocara la expresin para la comisin , para facilitar la edicin de esta expresin
haga un Clic en los campos mostrados en Columns.
Codificar la siguiente sentencia, para determinar la comisin del empleado, si tipo de
empleado es
en tonces su comisin ser del 8 %, de lo contrario ser el 5%.
Paso 7.- Cambie de nombre en name (compute_1 nombre por defecto, por Comision)
Ampliar la seccin resumen, para colocar el total del campo calculado comisin y pago
total.
-42Para la suma del comisin marcar el campo calculado comisin, similar al Paso 6 Insert
Control- Elegir Sum, entonces autmicamente mostrara el campo sumado en name
colocar el nombre (Tcom).
Para el calculo pago total, de forma similar seleccionar el paso anterior seleccionar
Insert-Control-Computed Field y editar la siguiente expresin.
-45-
Paso 2.- Crear el DataWindow estilo FreeForm de la tabla vendedor y realizar las
validaciones respectivas en cada campo, aunque es opcional dependiendo del proyecto
que este elaborando.
1.
2.
3.
4.
-46-
5. Ademas dar formato de fecha y formato monetario a los campos: fecha de ingreso
y sueldo bsico; en la misma propiedad Edit pero seleccionado EDIT MASK en
Style Type.
-47-
-49cb_graba.enabled=false
cb_recupera.enabled=false
Script clicked for Cb_Busca
open(ventana03)
Script clicked for Cb_Recupera
dw_1.setfilter("")
dw_1.filter()
dw_1.setsort("#1 A")
dw_1.sort()
dw_1.retrieve()
cb_graba.enabled=false
Script clicked for Cb_Salir
Halt
-50-
-51xfac=0
end if
xfac++
dw_1.reset()
f=dw_fac.insertrow(0)
dw_fac.scrolltorow(f)
dw_fac.setitem(f,1,string(xfac,"000000"))
dw_fac.setitem(f,3,today())
dw_fac.setcolumn(2)
dw_1.setfocus()
A nivel de Dw_1 (detalle factura elaborar el siguiente evento)
if keydown(keyf2!) then
int f
f=dw_1.insertrow(0)
dw_1.scrolltorow(f)
dw_1.setfocus()
int m
m=dw_1.getitemnumber(1,"maxitem")
if isnull(m) then
m=0
end if
m++
dw_1.setitem(f,"item",m)
dw_1.setitem(f,"nfac",string(xfac,"000000"))
open(w_pro)
end if
Cb_Borrar
Clicked
//Borrar Item
int fila
fila=dw_1.getrow()
-53-
Dw_1
int r
dec precio
if key=keyenter! then
r=dw_1.getrow()
cad=dw_1.getitemstring(r,1)
precio=dw_1.getitemNUmber(r,"puni")
W_factura.dw_1.setitem(W_factura.dw_1.getrow(),"codpro",cad)
W_factura.dw_1.setitem(W_factura.dw_1.getrow(),"puni",precio)
W_factura.dw_1.setcolumn(4)
close(parent)
end if
if key=keyescape! then
dw_1.setfilter("")
dw_1.filter()
sle_1.text=""
sle_1.setfocus()
end if
Sle_1
Modified
string criterio
criterio=" upper(Despro) Like '"+upper(sle_1.text)+"%'"
dw_1.setfilter(criterio)
dw_1.filter()
dw_1.setfocus()
dw_1.selectrow(1,true)
-54-
Aplicacion
Considerando que tenemos el mantenimiento de la tabla cursos, al realizar un click en el
boton Alumnos, se carga la ventana de alumnos, pero solo se mostrarn los datos de
aquellos alumnos de dicho curso (Fila activa de la Tabla Cursos).
Para la Ventana alumnos elaboramos:
Un Objeto DataWindow
Data Source SQL Select
Style
Tabular
Nombre
Dw_Notas
Luego seleccione todos los campos a utilizar.
Especificamos el argumento de recuperacion de curso.
-55Paso 4.- Luego especifique La creacion del Obejeto Estructura, utilizando (Structure
painter) del Menu Principal(Power Bar)
File New pestaa PB Object - Structure.
En la venta de dialago, especifique:
Codigo_Curso de tipo String
Nombre_Curso de Tipo de string
Se debe almacenar como S_curso
Paso 5.- En la ventana alumnos (VenAlumnos)
Declarar una variable de instancia
String vi_codcur
Paso 6.- Codificacin de eventos para obtener la lista de los alumnos por curso.
Se realiza a traves de un boton de la ventana Cursos VenCursos (Mantenimiento de
cursos).
La ventana VenAlumnos debe recibir el parametro (cdigo del curso), que se envia desde
la Ventana VenCursos.
Paso 7
Script -Clicked for Cb_alumnos (W_cursos)
long nf
S_curso Origen //asignamos una variable llamada origen de tipo S_curso
nf=dw_1.getrow()
origen.codcur=dw_1.getitemstring(nf,"cur_cod")
origen.nomcur=dw_1.getitemstring(nf,"cur_des")
openwithparm (VenAlumnos,origen)
paso 8
Script -Open for (VenAlumnos)
S_curso Destino
Destino=message.powerobjectparm
vi_codcur=Destino.codcur
this.title=vi_codcur + " - " + Destino.nomcur
cb_graba.enabled=false
dw_1.SETTRANSOBJECT(sqlca)
dw_1.retrieve(vi_codcur)
Dw_Alumnos.SetRowFocusIndicator(Hand!)
if dw_1.rowcount()<>0 then dw_1.modify("alu_pro.color='0~t
if(alu_pro>=11,RGB(0,0,255),RGB(255,0,0))'")
Paso 9.- Codificacion de los botones de desplazamiento
-57dw_1.scrolltorow(1)
end if
3.- En la consulta de Facturas por Clientes, se debe tener una ventana con los
siguientes controles DataWindow: (VConFacturas)
3.1
3.2
3.3
3.4
3.5
-62-
tipo
Long
Cod_rut
Nom_rut
Pago_cho
Char
Varchar
Numeric
Viajes
tipo
Nro_via
Cod_rut
Fsal_via
Hsal_via
Cos_via
Nro_vac
Cod_cho
Flag
Char
Char
Date
Time
Numeric
Numeric
Char
Char
Pasajeros
tipo
Nbol
Nrovia
Nom_pas
Tipo
Pago
Numeric
Char
Varchar
Char
Numeric
Chofer
Cod_cho
Nom_cho
Sba_cho
tipo
Long
Char
4
Varchar
25
Numeric 6 1
4
15
6 1
Long
6
4
6 1
3
4
1
Long
5
6
25
1
6 1
Texto
Codgo de ruta
Nombre de ruta
pago por viaje al chofer
Texto
Nro de Viaje
Codigo de ruta
Fecha de salida
Hora de Salida
Costo del Viaje
Nro de vacantes
Codigo del Chofer
S(si) N(no) viaje realizado
Texto
Numero de Boleto
Nro de Viaje
Nombre del pasajero
(E)studiante (A)dulto (N)io
Texto
Codigo del Chofer
Nombre del chofer
Sueldo basico
Realizar:
1.- Colocar las claves principales y forneas para cada tabla, cuando relacione cada tabla
conformar la opcion:
Delete any Dependent Rows (CASCADE), por ejmplo cuando se anule un registro en
viaje anule a todos los pasajeros.
2.- La aplicacin debe permitir realizar el manteniemiento para cada tabla
-633.- En el mantenimiento del archivo de viajes debe tener un botn de Pasajeros de tal
modo que permita visualizar solo los pasajeros de ese viaje en otra ventana (adicion,
anulacion y modificacion), en la adicion se trae el campo nro de viaje y costo de la
ventana anterior(ambos de estilo tabular), el pasajero tendra un descuento de acuerdo
al tipo :
Estudiante
Nio
Adulto
30%
50%
0%
El nro de viaje se genera AA9999 los primeros 2 digitos ao del sistema y los cuatro
ltimos digitos un correlativo.
Para el DataWindow de viaje el campo codgo de ruta y codgo del chofer debe
incorporarse un DataWindow para cada uno, para que su seleccin sea ms explcita.
El nmero de Boleto se genera a partir del 00001 de manera correlativa
Luego de cada adicion de pasajeros las vacantes en ese viaje debe disminuirse en la
unidad.
5.- Consulta de viajes por rutas. En esta ventana; al elegir una ruta (en un control
DataWindow) debe mostrar todos los viajes programados (en otro control data) al
seleccionar el viaje debe mostrar la relacion de pasajeros.
6.- Consulta de viajes por fecha, en esta ventana se debe ingresar dos fechas: fecha
inicial y final en caso que solo se ingrese la fecha inicial se debe tomar hasta la ltima
fecha de viaje, mostrando en un control DataWindow las siguientes columnas:
NroViaje,Nombre de ruta , Nombre del pasajero y tipo
7.- Elabore un men para relacionar cada opcion con las tareas pedidas.
8.- El diseo y presentacin de cada ventana es de acuerdo a criterio del alumno.
Nota
Eeste trabajo es para 2 semanas de laboratorio, sera revisado cada avance.
-64-
Objetos de Usuario
Tema Custom Clases Visuales
Por ejemplo se desea realizar el siguiente evento de usuario:
ST_2
Power Builder 9.0
ST_1
-66-
Clases
Crear las siguientes clases de Objetos de usuarios
1.- Los Visuales
a) Un Progres segn se muestra en la figura
2.- No Visuales
a) Una funcin que permita sumar una columna numrica, se pasa como valor el
control DataWindow y el nmero de columna.
b) Un evento que permita centrar una ventana, se pasa como valor una ventana.
c) Una funcin que permita generar un cdigo, se pasa como dato un control
DataWindow, el valor inicial del cdigo, el cdigo puede empezar con una letra o
nmero.
d) Un evento que permita cambiar el color de una columna de un control
DataWindow, pasar como dato el control DataWindow y el nmero de columna.
-67-
-68-
Aplicacin
Se tiene las Base de Datos (EMPRESA), que tiene las siguientes tablas:
Tablas
Departamento
y Salarios
Departamento
y Salarios
Empleado
Campos
Nom_dept,
Cod_emp
Cod_emp,sueldo
Category
Values
Nom_dept
Count(Cod_emp)
Cod_emp
Sueldo
Todos
Retrieval
Arguments
Nom_dept
Cod_emp
-69-
Laura
Moreno Lee
-74i_row=this.getrow()
if i_row<1 then return
this.selectrow(0,false)
this.selectrow(i_row,true)
7.- Eventos para el menu01
7.1 Script m_alumnos for dw_1
window lw_win
opensheet(lw_win,"w_alu",parentwindow,0,layered!)
7.2 Script m_cursos for dw_1
window lw_win
opensheet(lw_win,"w_cursos",parentwindow,0,layered!)
7.3 Script m_vertical for menu01
parentwindow.triggerEvent("ue_vertical")
7.4 Script m_horizontal for menu01
parentwindow.triggerEvent("ue_horizontal")
7.5 Script m_cascada for menu01
parentwindow.triggerEvent("ue_cascada")
7.6 Script m_totalw for menu01
parentwindow.triggerEvent("ue_totalw")
7.7 Script m_close for menu01
close(parentwindow)
7.8 Script m_salir for menu01
Halt
ALUMNOS
Campo
Codal
NomAl
Ape
Femat
Tipo
C(6)
C(15)
C(15)
Date
Descripcin
Cdigo
Nombre
Apellido
Fecha de Matricula
CURSOS
Campo
Tipo
CodCur
C(4)
NomCur
C(15)
NHrCur
N
Descripcin
Cod. Curso
Asignatura
Nro de Horas
-75NOTAS
Campos
Codal
Codcur
Exp
Exf
Tipo
C(6)
C(4)
N
N
Descripcion
Cdigo Alumno
Curso
Ex. Parcial
Ex . Final
1)
2) Hacer una consulta por apellido , para ello digitara solo los primeros caracteres de
un apellido y en un DataWindow de tipo tabular mostrara a todos los alumnos que
comienzan con esos caracteres
3) Consulta por curso, Se ingresara por teclado El cdigo o Nombre de Curso luego
en un DataWindow mostrara a todos los alumnos que llevaron dicho curso
ordenado por promedio de manera descendente, los promedios menores a 11
mostrarlos con rojo de lo contrario con azul.
-764) consulta por fechas, para ello se ingresara dos fechas por teclado la fecha inicial y
la Fecha final, en caso de no ingresar la fecha final se tomara en cuenta hasta la
fecha actual del sistema. Y mostrara en un DataWindow la relacin de alumnos
matriculados en ese rango.
5) Repita el Proceso 1 haciendo una consulta en Cascada, es decir en un formulario
habr dos DataWindow, en el primer DataWindow mostrara la relacin de alumnos
y en el segundo todos los cursos que ese alumno ha llevado con su promedio
respectivo, de tal modo que al hacer un ClicK o cambiar la fila del DataWindow
alumno cambiara automticamente el segundo DataWindow.
6) Realice solo el mantenimiento de la tabla alumno, el cdigo del alumno se va a
generar a partir A00001
Customer
ID
(N)
Fname
(C)
Lname
(C)
Company_name ( C)
State
( C)
Clientes
Identificacin del Clie
Primer Nombre
Ultimo Nombre
Nombre _Compaa
Rstado
Sales_Order
ID ( N)
Cust_id ( N )
Order_Date ( D )
Region
(C)
Orden dePedido
Nro de Pedido
Identificacin del Clie
Fecha de pedido
Sales_Order_Items
ID ( N )
Line_Id (N)
Prod_ID
Quanty
Ship_Date
Product
ID ( N)
Description
Unit_Price
Producto
Codigo de Prod.
Descripcin
Precio Unitario
-77Clientes
Codigo
Nombre y apellido
Compaia
Telefono
Orden de Pedido
Nro de Pedido
Fecha de Pedido
Region
Cantidad
Precio
Total
Animaciones
Por ejemplo si se desea mostrar una papelera de reciclaje cuendo se elimina un registro o
cuando se copia emplear controles ole.
Cb_graba
Clicked
ole_1.insertfile("c:\Iamgenes\filecopy.avi")
ole_1.activation=activateongetfocus!
ole_1.setfocus()
Cb_anula
Clicked
ole_1.insertfile("c:\Imagenes\filedel.avi")
-78ole_1.activation=activateongetfocus!
ole_1.setfocus()
int rs
OLEObject ole1
ole1 = create OLEObject
rs = ole1.SetAutomationTimeOut(10000)
DataWindow Dinamicos
Sin utilizar objetos datawindow se puede mostrar en un control dartawindow resultados de
una instruccin SQL.
SyntaxFromSql Genera datawindow fuente, basado en instrucciones SQL.
Syntax
transaction.SyntaxFromSQL (sqlselect, presentation, err)
Argument
Description
transaction Objeto de Transaccionn
sqlselect
Una Cadena que contiene instrucciones SQL
presentation una cadena donde se define el estilo del datawindow mediante
Style(Type=presentationstyle)
Los valores del estilo de presentacin son: Grid, Form, Group(reporte), Graph, tabular
err
Una cadena donde se va a recepccionar . el mensaje de error en caso que
lo hubiera.
Ejemplo:
La siguiente sentencia crea un Datawindow grid en dw_1 desde la fuente generada por
la funcin SyntaxFromSQL Si ocurre un error, la cadena ERRORS podra contener
cualquier mensaje de error que es generada, mostrando un mensaje al usuario. Observe
que debe efectuarse a travs del Objeto SQLCA:
Utilizando la tabla empleados
-79-
Alberto
Moreno Cueva
Bayona Ramos
Cb_Carga
Clicked
Envio de e-m@il
Si se tiene instalado el Outlook se debe de configurar
ddlb_destinatario
Power Builder 9.0
-80-
sle_titulo
mle_text
o
lb_archivos
Pb_1
Pb_1
Clicked
string docname, named
integer value
value = GetFileOpenName("Selecione Fichero", docname, named, "DOC", &
+ "Text Files (*.TXT),*.TXT, All Files (*.*),*.*")
IF value = 1 THEN
lb_archivos.additem(docname)
end if
cb_1
Clicked
mailSession
mailReturnCode
mailMessage
mailFileDescription
string
ls_filename
string
int
boolean
mSes
mRet
mMsg
mAttach[]
ls_ret, ls_syntax, ls_name, ls_open_pathname,
ls_attach_name='c:\pbl\error.psr'
li_index, li_nret, li_nrecipients, li_nfile
lb_noerrors
// destinatario
// subject
APIS DE EN POWER
Declaracin de Funciones externas
Mostrar la Barra de
estado
cb_ocultar
Clicked
Long HBar
// Esconder la barra de tareas
HBar = FindWindowExA( 0, 0, "Shell_TrayWnd", ls_Null )
ShowWindow( HBar, 0 )
Cb_Mostrar
Clicked
Cb_maquina
Clicked
long ll_ret
string ls_ComputerName ,ls_UserName
ulong BufferLength = 250
ll_ret = GetComputerNameA(ls_ComputerName, BufferLength)
messagebox("maquina",ls_ComputerName)
-83-
Control Tv_1
Objetos a emplear:
1.-estructura (stremp)
-84-
ue_populate()
TreeviewItem Vitem
SetPointer(hourglass!)
Vitem.Label="Marketing"
Vitem.Data= "D001"
vitem.PictureIndex=1
vitem.SelectedPictureIndex=7
Vitem.children=true
tv_1.insertitemlast(0,vitem)
Vitem.Label="logistica"
Vitem.Data= "D002"
vitem.PictureIndex=2
tv_1.insertitemlast(0,vitem)
Vitem.Label="Ventas"
Vitem.Data= "D003"
vitem.PictureIndex=3
tv_1.insertitemlast(0,vitem)
Vitem.Label="Contabilidad"
Vitem.Data= "D004"
vitem.PictureIndex=4
tv_1.insertitemlast(0,vitem)
Vitem.Label="Administracion"
Vitem.Data= "D005"
vitem.PictureIndex=5
tv_1.insertitemlast(0,vitem)
-85tv_1
begindrag(long handle ) return long
//Inicio del Arrastre
TreeViewItem t_Source
Getitem(Handle,T_source)
ST_9.TEXT=STRING(T_Source.Level)
if T_Source.Level<>2 then
This.Drag(cancel!)
Else
//Almacena el Handle del item antes de comenzar el arrastre parent(departament)
r_dragsource=handle
r_dragparent=finditem(parentTreeItem!,handle)
end if
tv_1
int li_pend
long li_newitem
treeviewitem lt_target,lt_source,lt_parent,lt_new
if getitem(r_droptarget,lt_target)=-1 then return
if getitem(r_dragsource,lt_source)=-1 then return
getitem(r_dragparent,lt_parent)
if messagebox("Transferir empleado","Desea Transferir "+lt_source.label+" form
"+lt_parent.label+&
"~n hACIA "+ lt_target.label+"?",question!,yesno!)=2 then return
li_pend=upperBound(vecEmp)+1
messagebox("lt_source",string(lt_source.data))
messagebox("lt_target",string(lt_target.data))
VecEmp[li_pend].vemp=lt_source.data
VecEmp[li_pend].vdep=lt_target.data
deleteitem(r_dragsource)
//setnull(lt_source.itemhandle)
li_newitem=insertitemSort(r_droptarget,lt_source)
selectitem(li_newitem)
tv_1
treeviewitem t_over
long a,b
if getitem(handle,t_over)=-1 then // si estamos en el primer nivel
setDropHighlight(0)
r_droptarget=0
return
end if
-87-
Trucos en Power
01 - Cambiar el color alternativamente en las filas de una datawindow
Para que las filas de una DataWindow tengan el aspecto de papel de impresora
aade la siguiente expresin en el color de la banda de detalle.
IF (Mod(GetRow(),2)=0, RGB(0,255,0), RGB(255,255,255))
Estos colores de fondo no aparecern cuando se imprima el informe.
Si quieres imprimir este efecto tienes que aadir un rectangulo o un campo de texto
en blanco detrs de las columnas de detalle y poner la expresin anterior.
02.- Ordenar una DropDown Datawindow pulsando la cabecera
Una caracterstica que tienen los DataWindow es que te permiten ordenar las
columnas pulsando en la cabecera de la columna. La funcin Sort te permite
especificar el nombre de la columna o el nmero de columna por la cual se ordenar
el dataWindow. Funciona para la mayora de columnas y tipo de datos, pero no
funciona bien cuando la columna pertenece a una DropDown DataWindow
El problema es que la funcin Sort ordena los datos por detrs de la DataWindow no
los valores que el usuario est viendo en pantalla.
Para solucionar esto puedes usar el comando LookUpDisplay.
Esta funcin devuelve la visualizacin de los datos de la columna. Poniendo el
nombre de la columna dentro de esta funcin y usndola para ordenar los datos, el
usuario podr ver los datos ordenados.
Por ejemplo:
dw_1.SetSort( 'LookUpDisplay( dept_id )' )
dw_1.Sort()
03.- Ordenar un DataWindow pulsando en la cabecera
Por ejemplo: El nombre de la cabecera de la columna tiene que tener el mismo
nombre que en la base de datos y acabado en '_t'
Nombre de la columna: 'emp_id' = Nombre de la cabecera: 'emp_id_t'
Slo se puede ordenar por una columna cada vez.
String ls_old_sort, ls_column
-88Char lc_sort
/* Chequea cuando el usuario hace click en la cabecera */
IF Right(dwo.Name,2) = '_t' THEN
ls_column = LEFT(dwo.Name, LEN(String(dwo.Name)) - 2)
/* Guarda la ltima ordenacin, si hubiera alguna*/
ls_old_sort = dw_1.Describe("Datawindow.Table.sort")
/* Chequea cuando prviamente se orden una columna y en la que se hace click
actualmente es la misma o no. Si es la misma, entonces se chequea el orden de
ordenacin del ordenamiento anterior (A - Ascendente, D - Descendente) y lo
cambia. Si las columnas odenadas no son las mismas, las ordena en orden
ascendente. */
IF ls_column = LEFT(ls_old_sort, LEN(ls_old_sort) - 2) THEN
lc_sort = RIGHT(ls_old_sort, 1)
IF lc_sort = 'A' THEN
lc_sort = 'D'
ELSE
lc_sort = 'A'
END IF
dw_1.SetSort(ls_column+" "+lc_sort)
ELSE
dw_1.SetSort(ls_column+" A")
END IF
dw_1.Sort()
END IF
04.- Determinar el uso de memoria de una datawindow
A menudo es necesario saber cuanta memoria esta usando una DataWindow o
datastore para prevenir un "out of memory" o para facilitar la depuracin.
Cuando se sabe la memoria que se est usando, el proceso de datos o la
recuperacin de los mismos, puede ser detenida cuando se llegue a un lmite
mximo.
Para deteminar la cantidad de memoria virtual que est usando una DataWindow o
datastore, se usa el atributo Storage.
Este puede ser invocado desde cualquiera de de los dos mtodos siguientes:
Notacin DOT: dw_control.Object.DataWindow.Storage
Describe: dw_control.Describe("DataWindow.Storage")
En ambos caso devuelve una cadena con el valor utilizado en bytes.
05.- Pasar el contenido de una Datawindow a otra ventana
Llamar a la segunda ventana pasndole como referencia la DataWindow:
OpenWithParm( w_window, dw_1 )
Entonces en el evento OPEN de la ventana escribe:
datastore lds_parm
lds_parm = Message.PowerObjectParm
-89dw_1.DataObject = lds_parm.DataObject
lds_parm.ShareData(dw_1)
Y en el evento CLOSE:
dw_1.ShareDataOff()
06.- Copiar datos de un Grid Datawindow al portapapeles de Windows
Los DataWindow grid tienen la capacidad nica de dejarte seleccionar un nmero de
celdas en el DataWindow (o la totalidad de filas o de columnas de datos).
Este ejemplo ilustra como proporcionar soporte de copia para los datos
seleccionados desde un DataWindow de tipo grid.
Asumimos que un nuevo elemento de menu llamado m_SpecialCopy ha sido
aadido bajo el menu m_Edit .
Aadir el siguiente cdigo para determinar si el elemento Special Copy deber ser
habilitado.
GraphicObject lg_Object
DataWindow lg_DW
string ls_SelectedText
lg_Object = GetFocus ()
CHOOSE CASE TypeOf (lg_Object)
CASE DataWindow!
lg_DW = lg_Object
This.m_SpecialCopy.Enabled = (lg_DW.dwDescribe ("datawindow.selected.data") <>
'')
END CHOOSE
==============================
Codifica lo siguiente en m_SpecialCopy o en un evento disparado por
m_SpecialCopy):
graphicobject lg_Object
datawindow lg_DW
lg_Object = GetFocus ()
CHOOSE CASE TypeOf (lg_Object)
CASE DataWindow!
lg_DW = lg_Object
ClipBoard (lg_DW.dwDescribe ("datawindow.selected.data"))
END CHOOSE
07.- Permitir al usuario aadir solo columnas clave nuevas
A veces es deseable impedir a los usuarios que editen columnas clave una vez que
las han creado. Esto se puede hacer fcilmente usando expresiones de columna en
el DataWindow.
Aade esta expresin en el campo "background color" de la columna clave. Esto
cambiar el color de la columna y mostrar que la columna no es editable:
if ( IsRowNew(), 1090519039, Long(Describe("Datawindow.Color")))
Aade esta expresin en el campo "protect" de la columna clave:
if ( isRowNew(), 0, 1)
Si usas el modo consulta (query mode) utiliza esta expresin:
Sugerencias:
d91041@idat.edu.pe
mmoreno@ucss.edu.pe