68648738 Manual Power Builder

Embed Size (px)

Citation preview

  • -1-

    Power Builder 9.0

    POWERBUILDER 9.0

    Ing. Alberto Moreno C.

    Universidad Nacional de Ingenieria

  • -2-

    Power Builder 9.0

    CONTENIDO

    Entorno del PowerBuilder

    Propiedades de controles.

    Funciones de cadena, numricas y fechas.

    Aplicacin con Arreglos y Funciones de Usuario DFU.

    Objeto DataWindow.

    Aplicaciones con DataWindow Filter y Find.

    Datawindow con Retrieval Arguments y Campos calculados.

    Validaciones de campo y mantenimiento de una tabla.

    Aplicacin elaboracin de un factura.

    Estructura de datos y OpenWithParm.

    Objetos de usuario, visuales y no visuales.

    Grficos uso del estilo Graph.

    Animaciones.

    DataWindow Dinamicos.

    Enviar Correo.

    Api?s en Power

    Control treeview

    Trucos en Power.

    Profesor :Ing. Alberto Moreno C..

    Prohibida cualquier copia sin permiso del autor

    Correo :[email protected]

    ?La frase debo hacer algo resuelve mas problemas que la frase hay que hacer algo?

  • -3-

    Power Builder 9.0

    Que es Power Builder?Es una herramienta de desarrollo de aplicaciones grficas, principalmente para el

    desarrollo de aplicaciones Cliente/Servidor de N capas.

    Antes de empezar a desarrollar cualquier aplicacin se debe crear:

    a) Un espacio de trabajo Workspace, que asignara la extensin ( *.pbw)

    b) Una aplicacin que esta ligado a una librera o biblioteca (*.pbl)

  • -4-

    Power Builder 9.0

    Template Application .- es cuando se abre una nueva aplicacin pero con una plantillade trabajoExisting Application .- Para abrir una aplicacin que se encuentra en otra versin delpower.

  • -5-

    Power Builder 9.0

    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 // Variable de tipo entero

    Xindex = lb_software.SelectedIndex() // Capturamos la posicin del cursor en la

    lista

    lb_ software.DeleteItem(Xindex) // Eliminamos el item seleccionado

    ADDITEM()

    Adiciona nuevos items para una lista de valores

    Syntax

    objectname.AddItem ( item )

    Controls

    ListBox and DropDownListBox controls

    Ejemplo:

    integer Xrow // Variable de tipo entero

  • -6-

    Power Builder 9.0

    string s // Variable de tipo cadena

    s = "Insertar Item" // Almacenamos un valor a la variable

    Xrow = lb_software.AddItem(s) // Insertamos el valor de la variable (s) en el

    listbox

    FINDITEM()

    Busca un texto dentro de una lista de valores, retorna un valor ?1 si no encuentra el dato

    a buscar.

    Syntax

    objectname.FindItem (text, index)

    Controls

    ListBox, DropDownListBox, PictureListBox, and DropDownPictureListBox controls

    Ejemplo

    Inserta en un control listbox el siguiente contenido:

    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

  • -7-

    Power Builder 9.0

    Respecto al ejemplo anterior:

    Lb_software.InsertItem(?Apache?,6) // inserta el item en la sexta posicin, es decir en el item 6

    SELECTEDTEXT

    Obtiene el texto seleccionado en un control editable

    Syntax

    editname.SelectedText ( )

    Controls

    DataWindow, EditMask, MultiLineEdit, SingleLineEdit, RichTextEdit,

    DropDownListBox, and DropDownPictureListBox controls

    ejemplo: inserta un dropdownpicturelistbox e ingresale como minumo 5 items, en un

    control, y en el evento que desees ingresa lo siguiente

    string Xubica

    Xubica = ddlb_software.SelectedText()

    SELECTITEM

    Encuentra y resalta un item dentro de una lista.

    Controls

    ListBox, DropDownListBox, PictureListBox, and DropDownPictureListBox controls

    Syntax

    a) objectname.SelectItem (item, index)

    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)

  • -8-

    Power Builder 9.0

    Controls

    ListBox, DropDownListBox, PictureListBox, and DropDownPictureListBox controls

    ejemplo

    ddlb_software.Selecitem(0) // ningn tem es seleccionado

    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:

    integer XItemTotal, XItemCount

    XItemTotal = lb_software.TotalItems( )

    // Verifica que items esta seleccionado

    FOR XItemCount = 1 to XItemTotal

    IF lb_software.State(XItemCount) = 1 THEN // Si esta seleccionado

    MessageBox("Selected Item", lb_software.text(XItemCount))

    END IF

    NEXT

    SETSTATE

    Resalta un item dentro de una lista solo es aplicable cuando esta lista es de mltiple

    seleccin es decir propiedad Multiselect = TRUE

  • -9-

    Power Builder 9.0

    Syntax

    objectname.SetState (index, state)

    Controls

    ListBox and PictureListBox controls

    ejemplo

    lb_software.SetState(6, TRUE)

  • -10-

    Power Builder 9.0

    FUNCIONES DE CADENA.ASC Obtiene el cdigo ASCII correspondiente, de un carcter de tipo cadena.

    ejemplo :

    Asc(???) // retorna 65

    CHAR Retorna el carcter correspondiente al cdigo ASCII

    String XS

    XS=Char(42) // retorna *

    FILL retorna una cadena con una longitud determinada del carcter especificado.

    ejemplo

    Fill(???,5) // *****

    LEFT Retorna un nmero especificado de caracteres comenzado por la izquierda

    Ejemplo:

    String Xcad

    Xcad = Left(?Claudia?,3) // Cla

    LEFTTrim Retorna una copia de una cadena sin los espacios en blanco del lado

    izquierdo.

    Ejemplo:

    String Xcad

    Xcad = LeftTrim(? Claudia?) // Retorna ?Claudia?

    LEN(Cad) Retorna la longitud de una cadena

    Ejemplo:

    String Xcad

    Xcad = Len(?Claudia?) // Retorna 7

    LOWER(Cad) Convierte toda la cadena a minsculas

    Ejemplo:

    String Xcad

    Xcad = Lower(?CLAUDIA?) // Retorna claudia

    MATCH Determina si la cadena contiene un patrn particular de caracteres.

    Ejemplo:

  • -11-

    Power Builder 9.0

    Esta sentencia retorna TRUE si el texto contiene una letra Mayscula:

    Match(sle_Id.Text, "[A-Z]")

    MID Extrae caracteres a partir de una Posicin

    Ejemplo:

    String Xcad

    Xcad = Mid(?Claudia?,4,2) // 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?

    RIGHT(CAD, n) devuelve caracteres a partir de la derecha

    Ejemplo:

    String Xcad

    Xcad = right(?Claudia?,3) // dia

    SPACE(N) Inserta espacios en blanco

    Ejemplo:

    Cad=Space(5) // devuelve ? ? , cinco espacios en blanco.

    TRIM(Cad) suprime blancos a ambos extremos de la cadena.

    Ejemplo:

    Cad=? claudia ? // devuelve ?claudia?, cadena sin espacios en blanco a los

    costados.

    UPPER(cad) Convierte toda la cadena a letras maysculas

    Ejemplo:

  • -12-

    Power Builder 9.0

    Cad= ?especializacin? // devuelve ESPECIALIZACION.

    FUNCIONES FECHADAY 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.

    DAYNUMBER Retorna el nmero de da de la semana

    Ejemplo:

    Cad = string(DayNumber(2001-04-22)) // Retorna 1

    DAYAFTER Devuelve los das que hay entre dos fechas

    Ejemplo

    Cad = DayAfter(2001-04-22, 2001-04-18) // retorna -4

    HOUR Retorna un entero que corresponde al nmero de horas, que se encuentre en un

    dato de

    tipo hora

    Ejemplo:

    Hour(19:12:42) // retorna 19.

    MINUTE retorna los minutos

    Ejemplo:

    Minute(19:42:13) // retorna 42.

    MONTH Retorna el nmero correspondiente al mes de una fecha

    Ejemplo:

    Month(2001-04-22) // retorna 4

    NOW devuelve la Hora del sistema

  • -13-

    Power Builder 9.0

    Ejemplo

    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.

    TODAY Retorna la Fecha y hora del sistema

    Ejemplo:

    Cad = string(today(),?DD/MM/YY?) // retorna una cadena con la fecha del sistema

    en un

    formato de dd/mm/y yes decir , 12/04/03

    YEAR Retorna el ao de una fecha.

    Ejemplo

    Num = year(today())

  • -14-

    Power Builder 9.0

    FUNCIONES NUMRICASABS 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 radianesEXP El resultado de un nmero elevado a la potencia.

    Ejemplo:

    Deci = String(exp(1)) // 2.718

    FACT Obtiene el factorial de un nmero

    Ejemplo:

    Num= Fact(4) // retorna 24

    MAX Retorna el mayor de dos nmeros

    Ejemplo:

    Num = Max(-4,-7) // retorna -4

    MIN Menor entre dos nmeros

    Ejemplo:

    Num = Min(4,7) // retorna 4

    MOD Obtiene el residuo de dos nmeros

    Ejemplo:

    Num = Mod(20,7) //retorna 6

    PI (n) multiplica PI(3.1416 por un numero)

    Ejemplo:

    Deci = Pi(1) // devuelve 3.14159.....

    RAND(10) Obtiene un nmero entero aleatorio entre 1 y el nmero especificado

  • -15-

    Power Builder 9.0

    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-

    Power Builder 9.0

    AplicacionesDFU (Funciones Defindas por el Usuario).Pueden ser a nivel de Ventana o a nivel de toda la aplicacin

    Ejemplo: Ingresar un monto en soles y lo convierta a letras

    por ejemplo si:

    Funciones a crear

    Es ms simple hacer la conversin trabajando con vectores

    Paso 1.- Declarar a nivel de instancia (Pestaa Instancia)

    Declare InstanciaString vec1[]={"Uno","dos","Tres","cuatro","cinco","seis","siete","ocho","nueve"}String vec2[]={"Once","doce","trece","catorce","quince","dieciseis", "diecisiete", & "dieciocho","diecinueve"}String vec3[]={"Diez","viente","trienta","cuarenta","cincuenta","sesenta", & "setenta","ochenta","noventa"}String vec4[]={"Ciento","Doscientos","trescientos","cuatroscientos","quinientos", & "seiscientos", "setecientos","ochocientos","novecientos"}

    Em_1 control deedicion

    Mle_1 Contol demltiple linea

    F_centena

    Num=345

    Devuelve en letras:Trescientos cuarenta y cimco

    F_mil F_mill

    Num

    Letra

    NumTipo int

    Letra

  • -17-

    Power Builder 9.0

    Paso 2.- Crear las funciones: NumLetras (a nivel de ventana)

    a) Clic en (Insert) del men principal.b) Clic en (Function).

    a) Tipo de acceso a la funcin.b) Tipo de dato de retorno.c) Nombre de la funcin.d) Tipo de datos que se va a referenciar, en este caso ser un valor.e) Tipo de dato del valor.

    En la ventana de cdigo, tipeamos la siguiente estructura:

    String cad1,cad2Int c,res,d,unic=num/100res= mod(num,100)if c>0 Then if c=1 and res=0 then cad1="Cien" else cad1=vec4[c]end ifchoose 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 ifend choose return cad1 + cad2

    ba c fd g

  • -18-

    Power Builder 9.0

    Funcion miles

    Tipeamos el siguiente cdigo:

    String cad1,cad2Int res,milmil=num/1000res= mod(num,1000)

    if mil>0 then if mil=1 then cad1="Mil " else Cad1=f_centena(mil)+" Mil"end if

    if res>0 Thencad2=f_centena(res)

    end if return cad1 + " " + cad2

    Procedemos a ejecutar la aplicacion y veremos los resultados.

  • -19-

    Power Builder 9.0

    FUNCIONES APLICADAS A CONTROL DATA WINDOWS

    Estructura de un Datawindows

    Datawindows.- Es una carateristicas ms importante del Power Builder. El DataWindows

    es la forma en que sus aplicaciones presentan los datos de la base de datos y quizas

    incluso datos no especficamente de una base de datos al usuario final; DataWindows

    pueden ser pantalla de consulta, formato de entrada de datos, reportes de impresin, etc.

    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.

    Edit Control

  • -20-

    Power Builder 9.0

    Funciones principales de un Datawindows

    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 El nombre del Control data window, con el cual se desea usar un

    objeto de transaccin.

    Transaccin Nombre del Objeto de transaccin, por defecto es SQLCA.

    Generalmente se establece el objeto de transaccin en el evento Open de la ventana

    que contiene el control DataWindow.

    En resumen el SettransObject(SQLCA) asocia el objeto transacin con el control

    DataWindow.

    Ejemplo:

    DwnSoftware.settransobject(SQLCA)

    InsertRow

    Inserta una fila en un DataWindow, Si alguna columna tiene valores por defecto, La fila es

    inicializada con estos valores, retorna el nmero de la fila que se ha aadido, retorna -1

    si ha ocurrido un error.

    Sintaxis Dwn.InsertRow(fila)Argument Descripcion

    Dwn El nombre del control DataWindow en el cual se desea insertar una

    fila.

    Fila Un entero Largo (long) que identifica la fila antes de la cual desea

    insertar una fila nueva. Si el valor es cero insertar al final de la

    tabla.

    Ejemplo:

  • -21-

    Power Builder 9.0

    DwnSoftware.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 Argumentos de recuperacion, de la tabla de BDD

    Ejemplo:

    DwnSoftware.Retrieve(?C001?)

    SetRowFocusIndicator

    Especifica el indicador visual que identifica la fila actual en un control DataWindow.

    Sintaxis Dwn.SetRowFocusIndicator (Indicador)

    Indicador El indicador visual para la fila actual, los valores validos son:

    Off! Sin indicador.

    FocusRect! Un rectangulo de puntos alrededor de la fila.

    Hand! 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) // desactiva la fila anterior

    DwnSoftware.SelectRow(15,true) // resalta toda la fila 15

  • -22-

    Power Builder 9.0

    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)

    En la fila 5, en el campo sueldo se asigna 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.

    Sintaxis Dwn.GetitemString (Fila, Columna)

    Ejemplo

    String cad

    Cad=DwnSoftware.GetItemString(3, "sfw_Nombre")

    Extrae el dato que se encuentra en el campo sfw_nombre, en la fila 3, dependiendo del

    tipo de dato que se va extraer tenemos:

    Dwn.GetitemNumber (Fila, columna) Cuando el campo es de manera general

    numrico, puede ser real o entero.

    Dwn.GetitemDecimal (Fila, columna) Cuando el dato a extraer es exclusivamente

    decimal o real.

    Dwn.GetitemDate (Fila, columna) Si el campo es de tipo fecha.Dwn.GetitemTime (Fila, columna) Si el campo es de tipo hora.Dwn.GetitemDateTime (Fila, columna) Cuando el campo es de tipo fecha y hora.

    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-

    Power Builder 9.0

    Int edad

    Dec Sbas

    Date Fenac

    Edad= DwnEmpleado.GetItemNumber(3,"emp_Edad")

    Sbas= DwnEmpleado.GetItemDecimal(3, "emp_Sbas")

    Fenac=DwnEmpleado.GetItemDate(3,"emp_Fenac")

    Nombre del campos en la tabla.

    Gettext

    Obtiene el valor de un control de edicion en la fila y columna actuales, antes que este sea

    aceptado.

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

  • -24-

    Power Builder 9.0

    Ejecuta la clasificacin con un previo criterio de seleccin

    Sintaxis Dwn.Sort ()

    Ejemplo:

    DwnEmpleado.SetSort("emp_ape A, #2 D") // ordena apellido y sueldo asumiendo

    // que el #2 sea el campo sueldo.

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

    Power Builder 9.0

    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) // elimina la fila nmero 8

    Dwn.Update() // actualiza la base de datos enlazada

    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-

    Power Builder 9.0

    Utilizacin del Datawindows

    El objeto DataWindows en si no es de ninguna utilidad, si no se vincula con un

    DataWindow control. Este objeto, es visual y es posible de insertar directamente

    en una ventana; para que pueda ser utilizado por el usuario.

    Desarrollar la Siguiente aplicacin.

    Uso de filtros (Find ? SetFIlter)

    A.- Seleccionamos en el control sueldo el carcter de condicin e ingresamos un

    valor numrico que representa al sueldo bsico, luego presionamos clic en el

    boton Mostrar y tendremos los requeridos.

    B.- Se ingresa solo los primeros caracteres del nombre, si huviera algn registro

    que contenga dichos caracteres, deber resaltar el primer registro tal como

    observamos en el ejemplo.

    A

    A

    B

  • -27-

    Power Builder 9.0

    Pasos 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)

    TABLAS

    Ingresar datos consistentes en las tablas creadas, como se muestra a

    continuacin:

    FACTURA VENDEDOR

    Paso 2.- Disear el DataWindow - (File-New-DataWindow)

    - Se elige el estilo de Presentacin: (Elegir el Tipo Tabular)

    Estructura:Vendedor:Codv Char 4 Null(no)Nomv varchar 30Sbas Numeric 8,2

    FacturaNfac char 6Codv char 4Impor Numeric 8,2Tipov char 1

  • -28-

    Power Builder 9.0

    Presentacin DescripcinComposite Utiliza como presentacin, un reporte previamente creado.Freeform La presentacin es libre, cada campo se muestra en una lnea

    distinta. Muy utilizado para el ingreso de datos.Graph Disea un grfico dependiendo de una consulta, esta debe

    contener datos relacionados.Grid Disea una malla de datos en forma columnada, y cada

    columna con una justificacin completa.Group Disea listado por agrupacin de campos. Muy utilizado para

    reportes de resumen de informacin.Label El diseo es de etiquetas, donde Ud. podr elegir el tipo de

    etiqueta de las prediseadas, en papel continuo o separado, yotras opciones.

    Rich Text Permite definir una carta con combinacin de campos delOrigen de Datos fijado. Se pueden utilizar todas lascaractersticas del formato de texto RTF.

    Tabular Presenta el Origen de Datos en forma columnada pero sinajuste total. Permite una mayor libertad en el diseo.

  • -29-

    Power Builder 9.0

    Modos de trabajo: (Seleccione SQl Select)

    El modo de trabajo define como se trabajara con el Origen de Datos. Existen 5 tipos demodos de trabajo.

    Modo DescripcinQuick Select Nos presenta las tablas en forma grfica, y solo permite las

    sentencias ordinarias de SQL (Sort y Criteria). La primera parasentencia sirve para poder ordenar por el campo especfico y lasegunda sentencia para indicar registros a mostrar dependiendode un valor condicional (Ejemplo:

  • -30-

    Power Builder 9.0

    Al seleccionar SQL SELECT mostrara la siguiente pantalla:

    Seleccione las tablas a usar y precione el boton Open, de inmediato apareceran lasatablas seleccionadas

    Paso 3.- Seleccione la Tabla Vendedor

    Luego Seleccione los campos de la Tabla como se muestra a continuacin:

    y al grabar mostrara la siguiente solicitud (control + W):

    Presionamos S, para aceptar los cambios

    Ud. Puede modificar el color de las columnas y estilo:

    La presentacin final ser:(Detallando las siguientes partes opcion View)

  • -31-

    Power Builder 9.0

    Teniendo opcin a validar cada campo de ingreso o de salida a traves de suspropiedades.

    Proceda a grabar el objeto DataWindow (almacene en la biblioteca creada y asignarle uncomentario, para determinar cuando se debe de usar dicho DW), tendremos la siguiente

    vista:

    Color de fondodel DW

    Color del textodel DW

    Color de lasCabeceras del DWEstilo de lascabecera del DW

    Estilo del textodel DW

    Preview

    Diseo

    Propiedades

    Columns Specification

  • -32-

    Power Builder 9.0

    Una vez Grabado colocarlo en el formulario: (File-New-Project-Window)A traves de la caja de herramientas.Controles DataWindows (dw_1, dw_2), como se observa acontinuacin:

    Dw_1

    Dw_2

    ddplb_1

  • -33-

    Power Builder 9.0

    Objeto DataWindow Control (Caja de Herramientas)

    El Objeto DataWindow Control se selecciona del listado de objetos que se pueden

    insertar en una ventana, simplemente haga un clic sobre el siguiente icono .Luego haga un clic en la posicin de la ventana, donde desea poner elDataWindow Control.

    Paso 4.- En el control ddplb ingresamos los siguientes tems:

    Paso 5.- Codificar en el control ventana1, evento open(), lo siguiente

    //establece las conexiones con los Objetos DataWindowsdw_1.settransobject(sqlca)dw_2.settransobject(sqlca)

    //carga los datos en el bufferdw_1.retrieve()dw_2.retrieve()

    Nombre por defecto del ControlDataWindow.

    Seleccionar el Objeto DataWindow,previamente creado.

    Propiedades complementarias alcontrol DataWindow.

  • -34-

    Power Builder 9.0

    //ordena el DataWindow por el campo nombre ascendentemente.dw_1.setsort ("#1 a")dw_1.sort()

    //establece las posiciones de orden, segun el TABULADORsle_1.taborder=0ddplb_1.taborder=1sle_2.taborder=2cb_1.taborder=3dw_1.taborder=4dw_2.taborder=5

    //limpia las cajas de textosle_1.text=""sle_2.text=""

    //establece el foco del cursorsle_1.setfocus()

    //posiciona en el primer item del ddplb (combobox)ddplb_1.selectitem(1)

    Paso 6.- Codificar en el control sle_1, evento modify(), lo siguiente

    //declaramos las siguientes variablesstring buscaint nf,r

    //preguntamos si se ha escrito algna letra en el control sle_1If len(sle_1.text)>0 then

    //almacenamos en la variable busca la siguiente sentencia busca="Nomv like '" + trim(sle_1.text) + "%' "

    //contamos el nmero de filas del control DW nf=dw_1.rowcount()

    //realizamos la busqueda de la sentencia ya antes almacenada r=dw_1.find(busca,1,nf)

    // preguntamos si se ha obtenido un valor mayor a cero // si este fuera el caso entonces significa que ha encontrado // uno o varios valores en la busqueda (dependiendo de la sentencia) if r>0 then

    //marcamos y nos posicionamos en la fila encontrada dw_1.selectrow(0,false) dw_1.selectrow(r,true) dw_1.scrolltorow(r)

  • -35-

    Power Builder 9.0

    end ifend if

    Paso 7.- Codificar en el control sle_1, evento modify(), lo siguiente

    STRING cad

    // la funcion Trim suprime los blancoscad = "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 siguienteint r

    r=dw_1.getrow()dw_1.selectrow(0,false)dw_1.selectrow(r,true)

    Script a Nivel de la Aplicacin:

    // Profile VentaSQLCA.DBMS = "ODBC"SQLCA.AutoCommit = FalseSQLCA.DBParm = "Connectstring='DSN=venta'"//nos conectamos con la Base de Datosconnect;//preguntamos si ha ocurrido un error en la conexinIf Sqlca.Sqlcode0 then Messagebox ("Error de Conexin",Sqlca.SqlErrText) Haltelse

    //abrimos la ventana 1 de nuestro proyecto open(ventana01)end if

    Esta conexin se puede traer desde el entorno de la BDD

  • -36-

    Power Builder 9.0

    Clic en elsiguiente iconoy obtendremosla siguienteventana

    Clic en el boton Edit.

    Clic en la siguiente pestaaObtendremos la siguiente vista

  • -37-

    Power Builder 9.0

    Copie el contenido en la aplicacin.

    Lugo proceda a ejecutar el programa

    DataWindow Retrieval Arguments con Campos Calculados

    Aplicacin.Mostrar las Facturas por cada vendedor, se ingresa por teclado el cdigo del vendedor.

    Con las Tablas: Vendedor y Facturas, elaborar el siguiente DataWindow:

    Paso 1.- Seleccionar el tipo Tabular en el DataWindow.Paso 2.- Abrir las tablas Facturas y Vendedor, luego seleccione los campos que necesiteen la consulta como se observa a continucacin:

    Paso 3.- Del men de opciones seleccionar Design, luego seleccionar RetrievalArguments.

  • -38-

    Power Builder 9.0

    Colocar la variable receptora, a travs de esta variable ingresar un cdigo y procederh realizar la bsqueda en el DataWindow.

    Paso 4.- En la opcin Where seleccionar el campo para realizar la condicin con lavariable definida anteriormente, la variable debe ser precedida por dos puntos(:Var)

    Observe el grafico

    Luego Pulse ctrl. + W

    Nombre de la VariableTipo de dato querecibirla variable

  • -39-

    Power Builder 9.0

    Paso 5.- El estilo Tabular mostrar 3 secciones de trabajo que son:1. Header1 (cabecera).2. Detail (detalle).3. Summary (donde se muestran los campos totales).

    Cada campo tiene un conjunto de propiedades que se muestran en la parte lateralderecha, dar forma a la presentacin de la consulta moviendo las cabeceras y etiquetasde cada campo de la siguiente manera:

    1 2 3

  • -40-

    Power Builder 9.0

    Para ver como esta saliendo el diseo puede comprobarlo mediante la opcin Row delmen principal y seleccionando Retrieve, para ello le pedir ingresar un cdigo devendedor.

    Paso 6.- Completar los campos de comisin, comisin total y pago total a travs de lasopciones del men principal: Insert submenu Control opcion Compute Field.

  • -41-

    Power Builder 9.0

    Al seleccionar esta opcin Computed Field , llevar el cursor en la posicin donde deseacolocar el calculo de la comisin (Detail), luego mostrara la ventana de Modify Expresindonde colocara la expresin para la comisin , para facilitar la edicin de esta expresinhaga un Clic en los campos mostrados en Columns.

    Codificar la siguiente sentencia, para determinar la comisin del empleado, si tipo deempleado 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 pagototal.

  • -42-

    Power Builder 9.0

    Para la suma del comisin marcar el campo calculado comisin, similar al Paso 6 Insert? Control- Elegir Sum, entonces autmicamente mostrara el campo sumado en namecolocar el nombre (Tcom).

    Para el calculo pago total, de forma similar seleccionar el paso anterior seleccionarInsert-Control-Computed Field y editar la siguiente expresin.

    Luego complete las etiquetas, para mostrar la objeto DataWindow final.

    Grabarlo como Data01.

  • -43-

    Power Builder 9.0

    Paso 8.- Luego Inserte un formulario o ventana para colocar el DataWindow, lapresentacin final sera:

    Grabar la ventana con el nombre de Ventana01

    Paso 9.- Codificar los scripts:

    - En la ventana, evento open(), codifique lo siguiente:Dw_1.SettransObject(Sqlca)Sle_1.text = ??Sle_1.setfocus()

    - En el control sle_1, evento modify(), codifique lo siguiente:String CadCad=Trim(Sle_1.text)If Dw_1.Retrieve(Cad) =0 Then // Sino se recupera ninguna fila

    MessageBox(? Error?, ?Cdigo no existe, verificar?,information!)End if

    En la aplicacin hacer la conexin con la BDD

    // Profile VentaSQLCA.DBMS = "ODBC"SQLCA.AutoCommit = FalseSQLCA.DBParm = "Connectstring='DSN=venta"connect;

  • -44-

    Power Builder 9.0

    If Sqlca.Sqlcode0 then Messagebox ("Error de Conexin",Sqlca.SqlErrText) Haltelse open(ventana01)end if

    Mantenimiento de una BDD

    Utilizar la tabla vendedor agregando los campos feing (fecha de ingreso) y grado (gradode estudios).

    Realizar tambin las validaciones correspondientes en cada campo:

    Paso 1.- crear una funcin a nivel de la aplicacin (file-new-project-Function)

  • -45-

    Power Builder 9.0

    Paso 2.- Crear el DataWindow estilo FreeForm de la tabla vendedor y realizar lasvalidaciones respectivas en cada campo, aunque es opcional dependiendo del proyectoque este elaborando.

    Al campo grado editarlo como un combo:

    1. Seleccione dicho campo y en propiedades seleccionar la pestaa EDIT.2. En tipos de estilos existen seis tipos, seleccione DropDownListBox.3. Marca el check Always Show Arrow, para que tenga el aspecto de un combo.4. Ingrese 3 valores en la grilla (code Table) como se muestra en el grfico.

    Observe como se incorpora la funcin en el campo a nivel de columnas, specificaciones,si desea una rea ms amplia hacer doble click en Validation Expresin.

  • -46-

    Power Builder 9.0

    5. Ademas dar formato de fecha y formato monetario a los campos: fecha de ingresoy sueldo bsico; en la misma propiedad Edit pero seleccionado EDIT MASK enStyle Type.

    Paso 3.- Disear el siguiente Formulario:

    Nombre de la Ventana: Ventana02

  • -47-

    Power Builder 9.0

    Nombre de la Ventana: Ventana03

    Script Open for aplicacin

    // Profile VentaSQLCA.DBMS = "ODBC"SQLCA.AutoCommit = FalseSQLCA.DBParm = "Connectstring='DSN=venta"connect;If Sqlca.Sqlcode0 then Messagebox ("Error de Conexin",Sqlca.SqlErrText) Haltelse open(ventana02)end if

    Script clicked for pb_priDw_1.Scrolltorow(1)Dw_1.Setfocus()

  • -48-

    Power Builder 9.0

    Script clicked for pb_antDw_1.ScrollPriorRow()Dw_1.Setfocus()

    Script clicked for pb_SgteDw_1.ScrollNextRow()Dw_1.Setfocus()

    Script clicked for pb_Ultlong nfnf=dw_1.rowcount()dw_1.scrolltorow(nf)dw_1.setfocus()

    Script clicked for Cb_NuevoInt Nflong nfnf=dw_1.insertrow(0)dw_1.scrolltorow(nf)dw_1.setfocus()dw_1.setcolumn("codv")cb_graba.enabled=true

    Script clicked for Cb_grabaint resres=dw_1.update()if res=1 then commit using sqlca; //cd_recupera.enabled=falseelse rollback using sqlca;end ifcb_recupera.triggerevent(clicked!)cb_graba.enabled=falseEnd if

    Script clicked for Cb_Anulalong nfnf=dw_1.getrow()if nf>0 then dw_1.deleterow(nf) dw_1.update() dw_1.scrolltorow(1)end ifcb_recupera.triggerevent(clicked!)cb_anula.enabled=false

    Script clicked for Cb_RecuperaDw_1.Retrieve()

  • -49-

    Power Builder 9.0

    cb_graba.enabled=falsecb_recupera.enabled=false

    Script clicked for Cb_Buscaopen(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_SalirHalt

    Paso 4.- En la ventana 03 codificar los siguientes script

    Script Load for Ventana03sle_1.text=""sle_1.setfocus()

    Script Modify for sle_1string cadlong nfnf=ventana02.dw_1.getrow()cad="codv = '" + trim(sle_1.text) + "'"ventana02.dw_1.setfilter(cad)ventana02.dw_1.filter()

    if ventana02.dw_1.rowcount()=0 then ventana02.dw_1.setfilter("") ventana02.dw_1.filter() ventana02.dw_1.setsort("#1 A") ventana02.dw_1.sort( ) ventana02.dw_1.scrolltorow(nf) messagebox("Error","Cdigo no existe" + string(nf))else close(ventana03) ventana02.cb_graba.enabled=true ventana02.dw_1.setfocus() ventana02.dw_1.setcolumn(1)end if

  • -50-

    Power Builder 9.0

    Elaboracion de una factura

    Tablas Bsicas para la elaboracin de la factura

    Los Script para cada evento1.- W_Factura Opendw_1.settransobject(sqlca)dw_fac.Settransobject(Sqlca)dw_1.retrieve(" ")

    Cb_Nueva Clickedint fselect max(Nfac) into :xfac from fac_cab;if isnull(xfac) then

  • -51-

    Power Builder 9.0

    xfac=0end ifxfac++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)

    En Event Id Seleccionar Pbm_dwnkey

    Dw_1 Tecla (Keycode Key,UnsignedLong Keyflags)

    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 Itemint filafila=dw_1.getrow()

  • -52-

    Power Builder 9.0

    if fila>0 thendw_1.deleterow(fila)dw_1.update()end if

    Cb_Totaliza Clickeddec tot,igv,netotot=dw_1.getitemnumber(1,"totgen")igv=tot*0.18 ; neto=tot+igvst_venta.text=string(tot,"##,###.00")st_igv.text=string(igv,"#,###.00")st_neto.text=string(neto,"###,###.00")

    Cb_Graba Clicked//Compleatar los campos para La tabla Fac_Cabe

    dw_fac.setitem(dw_fac.getrow(),"impor",dec(st_venta.text))dw_fac.setitem(dw_fac.getrow(),"igv",dec(st_igv.text))dw_fac.setitem(dw_fac.getrow(),"neto",dec(st_neto.text))int rr=dw_fac.Update()if r=1 then commit;else Rollback;end if// Grabacion del detalle Facturar=dw_1.update()if r=1 then Commit;Else Rollback;End if// Actualizar La tabla Stockint Fila,xcanString XcodFor Fila=1 to Dw_1.Rowcount()Xcod=Dw_1.GetItemString(fila,"codpro")Xcan=Dw_1.GetItemNumber(Fila,"can")

    Update Fac_detaSet Stock = Stock - :Xcan Where Codpro= :Xcod;NextCommit;

    Dw_pro Activate ( en la ventana de consulta de productos)sle_1.setfocus()dw_1.retrieve()

    Dw_pro Opendw_1.settransobject(sqlca)

  • -53-

    Power Builder 9.0

    Dw_1 Tecla(Keycode Key, UnsignedLong KeyFlags)

    int rdec precioif key=keyenter! thenr=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 ifif key=keyescape! then dw_1.setfilter("") dw_1.filter() sle_1.text="" sle_1.setfocus()end if

    Sle_1 Modified

    string criteriocriterio=" upper(Despro) Like '"+upper(sle_1.text)+"%'"dw_1.setfilter(criterio)dw_1.filter()dw_1.setfocus()dw_1.selectrow(1,true)

  • -54-

    Power Builder 9.0

    Aplicacion

    Considerando que tenemos el mantenimiento de la tabla cursos, al realizar un click en elboton Alumnos, se carga la ventana de alumnos, pero solo se mostrarn los datos deaquellos alumnos de dicho curso (Fila activa de la Tabla Cursos).Para la Ventana alumnos elaboramos:

    Un Objeto DataWindowData Source SQL SelectStyle TabularNombre Dw_Notas

    Luego seleccione todos los campos a utilizar.

    Especificamos el argumento de recuperacion de curso.

    Paso 1.- Del Menu de Design seleccione la Opcion Retrival Arguments.

    Paso 2.- En name seleccione cualquier nombre de variable de tipo igual al campoutilizado como argumento.

    Paso 3.- En la Ficha Where se debe especificar, la relacion entre el campo y la variable

  • -55-

    Power Builder 9.0

    Paso 4.- Luego especifique La creacion del Obejeto Estructura, utilizando (Structurepainter) 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 instanciaString 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 decursos).La ventana VenAlumnos debe recibir el parametro (cdigo del curso), que se envia desdela Ventana VenCursos.

    Paso 7Script -Clicked for Cb_alumnos (W_cursos)long nfS_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 8Script -Open for (VenAlumnos)

    S_curso Destino

    Destino=message.powerobjectparmvi_codcur=Destino.codcurthis.title=vi_codcur + " - " + Destino.nomcurcb_graba.enabled=falsedw_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~tif(alu_pro>=11,RGB(0,0,255),RGB(255,0,0))'")

    Paso 9.- Codificacion de los botones de desplazamiento

  • -56-

    Power Builder 9.0

    Script clicked for pb_priDw_1.Scrolltorow(1)Dw_1.Setfocus()

    Script clicked for pb_antDw_1.ScrollPriorRow()Dw_1.Setfocus()Script clicked for pb_SgteDw_1.ScrollNextRow()Dw_1.Setfocus()

    Script clicked for pb_UltInt nfNf=dw_1.RowCount()Dw_1.Scrolltorow(Nf)Dw_1.Setfocus()

    Script clicked for Cb_Nuevolong nfnf=dw_1.insertrow(0)dw_1.scrolltorow(nf)dw_1.setitem(nf,"cur_cod",vi_codcur)dw_1.setitem(nf,"alu_nota1",0)dw_1.setitem(nf,"alu_nota2",0)dw_1.setitem(nf,"alu_nota3",0)dw_1.setitem(nf,"alu_nota4",0)dw_1.setitem(nf,"alu_pro",0)dw_1.setfocus()cb_graba.enabled=true

    Script clicked for Cb_grabalong resres=dw_1.update()if res=1 then commit using sqlca;// cb_graba.enebled=falseelse rollback using sqlca;end ifdw_1.retrieve(vi_codcur)dw_1.scrolltorow(1)

    Script clicked for Cb_Anulalong nfnf=dw_1.getrow()if nf>0 then dw_1.deleterow(nf)

  • -57-

    Power Builder 9.0

    dw_1.scrolltorow(1)end if

    Script clicked for Cb_Recuperadw_1.retrieve(vi_codcur)cb_graba.enabled=false

    Script RowFocusChanged For Dw_1// evento que se activa cada vez que se enfoca un nuevo registrolong nfilas,factnfilas=dw_alumnos.Rowcount()fact= dw_alumnos.GetRow()st_mensaje1.text="Fila" +String(fact)+" de"+string(nfilas)

    Script ItemFocusChanged For Dw_alumnos// Este evento se dispara cada vez que nos situamos en un nuevo campo o columnaint ncnc=dw_1.getcolumn()st_mensaje2.text="Columna " + string(nc)

    Script ItemChanged For Dw_1

    /* se activa cada vez que realizamos cualquier cambio dentro de la ventana */

    dec nota,n1,n2,n3,n4,pro

    dw_1.modify("alu_pro.color='0~t if(alu_pro>=11,RGB(0,0,255),RGB(255,0,0))'")

    if pos("alu_nota1,alu_nota2,alu_nota3,alu_nota4",dwo.name)>0 then// dwo.name es equivalente a GetColumnName() devuelve el nombre

    if isnumber(dw_1.gettext()) then //si no es numerico, mantiene el foco el el campo nota=dec(dw_1.gettext()) if nota20 then messagebox("Error","El dato debe estar en un rango de 0 a 20") return 1 end if if dw_1.accepttext()=1 then n1=dw_1.getitemnumber(row,"alu_nota1") // row equivale Getrow() n2=dw_1.getitemnumber(row,"alu_nota2") n3=dw_1.getitemnumber(row,"alu_nota3") n4=dw_1.getitemnumber(row,"alu_nota4")

    pro=(n1+n2+n3+n4)/4 dw_1.setitem(row,"alu_pro",pro) Cb_graba.enabled=true

    end ifend if

  • -58-

    Power Builder 9.0

    Script ItemError For Dw_alumnosReturn 1

    PRIMERA PRCTICA CALIFICADA

    1. Especificaciones de la aplicacinCreadas las tablas con sysbase SQL Anywhere para almacenar las facturas de losclientes

    Productos (Clave principal cod_Prod) Clientes (Clave principal Cod_Cli) Facturas (Clave Principal Num_Fact,

    Clave Foranea Codigo del Cliente) Deta_Factura (Clave Principal Num_fact,Cod_prod

    Clave Foranea Num_fact Clave Foranea Cod_Prod)

    Relacione las tablas con sus respectivas Claves.Los registros para cada tabla se adjunta a este proyecto.

    2.- La aplicacin debe permitir realizar las operaciones:

    2.1 Tener una ventana principal (VMain) con las siguientes opciones: 2.1.1 Mantenimiento de la Tabla Clientes (VManClientes) 2.1.2 Mantenimiento de la tabla Productos (VManProductos) 2.1.3 Consulta de Facturas.

    3.- En la consulta de Facturas por Clientes, se debe tener una ventana con lossiguientes controles DataWindow: (VConFacturas)

    3.1 DW_Clientes (estilo Grid), donde solo debe mostrar los campos(Cod_cli,Nom_Cli,Tel,Ruc)

    3.2 Dw_Facturas (estilo Tabular), donde debe mostrar las columnas (Num_fact,Fecha, Subtotal, Igv, total).

    3.3 En esta ltima ventana debe solo extraer las facturas de un cliente seleccionado,Obteniendo al final un resumen (suma del campo total) para ver cual es su totalgeneral.

    3.4 La ventana (VConFacturas) tendra un boton Detalle donde permite visualizar enotra ventana( VFacDetalle) el detalle de la factura

    3.5 Ventana (VFacDetalle) debe mostrar todos los campos de la tabla detalle facturacon el campo descripcion del producto (tabla producto).

  • -59-

    Power Builder 9.0

    Nota.- El diseo de la aplicacin es a criterio del alumno. Su presentacion y estetica tambin se considera.

    Aplicacin Cuenta Corriente

    Esta aplicacin permite generar un campo en este caso es el nmero de movimiento yactualizar el saldo en el archivo ahorro.

  • -60-

    Power Builder 9.0

    Script open for aplicacin:

    // Profile conexion con sqlserverSQLCA.DBMS = "MSS Microsoft SQL Server 6.x"SQLCA.Database = "BDBANCO"SQLCA.ServerName ="(local)"SQLCA.LogId = "SA"SQLCA.AutoCommit = FalseSQLCA.DBParm = ""CONNECT; if sqlca.sqlcode0 then messagebox("Error de coneccion",sqlca.sqlerrtext) haltend if

    open(Venahorro)

    Script modified for Sle_1int r,vnro,fila,xnro,nfstring cad cad=trim(sle_1.text) dw_1.settransobject(sqlca) r=dw_1.retrieve(cad) if r0 then xnro=integer(dw_2.getitemstring(1,"maximo"))+1 else xnro=1 end if*/ select count(numcta) into :xnro from movimiento where numcta=:cad;

    if sqlca.sqlcode=0 then xnro++ end if fila=dw_2.insertrow(0) dw_2.scrolltorow(fila) dw_2.setitem(fila,"numcta",cad) dw_2.setitem(fila,"nummov",xnro) dw_2.setcolumn(3) dw_2.setfocus()end if

  • -61-

    Power Builder 9.0

    Script Itemchanged for Dw_2

    string nomcolint filadec monchar tpfila=this.getrow()nomcol=this.getcolumnname()mon=this.getitemnumber(fila,"monto")choose case Lower(nomcol) case "tipoopr" //tp=trim(this.getitemstring(fila,"topr")) //valor obtenido en el datawindow tp=this.gettext() // valor que se da en el edit control nsal=dw_1.getitemnumber(dw_1.getrow(),"saldo") if upper(tp)="D" then nsal=nsal + mon else nsal=nsal - mon end if

    this.object.tsaldo.text=string(round(nsal,2))end choose

    scrpt Clicked for Cb_graba

    int rstring cadcad=dw_1.getitemstring(dw_1.getrow(),"numcta")

    // Actualizacion en el archivo ahorro//modo 1//dw_1.setitem(1,"saldo",nsal)//dw_1.update()//modo 2Update ahorroset saldo = :nsalwhere numcta=:cad;

    r=dw_2.update()if r=1 then commit;else rollback;end if// borrar el contenido de los control data windowdw_2.reset()dw_1.reset()

  • -62-

    Power Builder 9.0

    SEGUNDA PRCTICA CALIFICADA

    Se requiere un programa para automtizar las ventas de pasajes areos, para ello secuenta con las siguientes tablas:Base de datos Vuelos DB

    Tablas:

    Rutas tipo Long Texto

    Cod_rut Char 4 Codgo de rutaNom_rut Varchar 15 Nombre de rutaPago_cho Numeric 6 1 pago por viaje al chofer

    Viajes tipo Long Texto

    Nro_via Char 6 Nro de ViajeCod_rut Char 4 Codigo de rutaFsal_via Date Fecha de salidaHsal_via Time Hora de SalidaCos_via Numeric 6 1 Costo del ViajeNro_vac Numeric 3 Nro de vacantesCod_cho Char 4 Codigo del ChoferFlag Char 1 S(si) N(no) viaje realizado

    Pasajeros tipo Long Texto

    Nbol Numeric 5 Numero de BoletoNrovia Char 6 Nro de ViajeNom_pas Varchar 25 Nombre del pasajeroTipo Char 1 (E)studiante (A)dulto (N)ioPago Numeric 6 1

    Chofer tipo Long TextoCod_cho Char 4 Codigo del ChoferNom_cho Varchar 25 Nombre del choferSba_cho Numeric 6 1 Sueldo basico

    Realizar:

    1.- Colocar las claves principales y forneas para cada tabla, cuando relacione cada tablaconformar la opcion:

    Delete any Dependent Rows (CASCADE), por ejmplo cuando se anule un registro enviaje anule a todos los pasajeros.

    2.- La aplicacin debe permitir realizar el manteniemiento para cada tabla

  • -63-

    Power Builder 9.0

    3.- En el mantenimiento del archivo de viajes debe tener un botn de Pasajeros de talmodo 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 laventana anterior(ambos de estilo tabular), el pasajero tendra un descuento de acuerdoal tipo :

    Estudiante 30% Nio 50% Adulto 0%

    El nro de viaje se genera AA9999 los primeros 2 digitos ao del sistema y los cuatroltimos digitos un correlativo.

    Para el DataWindow de viaje el campo codgo de ruta y codgo del chofer debeincorporarse 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 launidad.

    4.- Consulta de viajes por chofer, debe mostrarse en una ventana.La lista de Choferes, al seleccionar uno de ellos, deber presentar los viajesrealizados, al final debe aparecer su pago total

    5.- Consulta de viajes por rutas. En esta ventana; al elegir una ruta (en un controlDataWindow) debe mostrar todos los viajes programados (en otro control data) alseleccionar el viaje debe mostrar la relacion de pasajeros.

    6.- Consulta de viajes por fecha, en esta ventana se debe ingresar dos fechas: fechainicial y final en caso que solo se ingrese la fecha inicial se debe tomar hasta la ltimafecha 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.

    NotaEeste trabajo es para 2 semanas de laboratorio, sera revisado cada avance.

    Trabajo en forma grupal, solo se tomara en cuenta a los alumnos regulares.

  • -64-

    Power Builder 9.0

    Objetos de Usuario

    Tema Custom Clases Visuales

    Por ejemplo se desea realizar el siguiente evento de usuario:

    Paso 1.- En New seleccionar PB OBJECT

    Seleccionar Custom Visual

    El cual va a mostrar una pantalla similar a la window estndar, para disear su plantilla:Realizar el siguiente diseo: tiene dos controles etiquetas, uno encima de otro, uno confondo blanco y el otro con fondo azul, una tercera etiqueta para ver el porcentaje delproceso.

    ST_1ST_2

  • -65-

    Power Builder 9.0

    St_pg (para ver el porcentaje)

    Codificacin del uo_progresoDeclare Instancia Int Ir_alfinal

    Functions Uf_iniciar(int vini) return noneir_alfinal=vinist_2.width=0

    Functions Uf_avance(integer valor) return noneInt porcen, anchoReal razonAncho=st_1.widthRazon=valor / ir_alfinalPorcen=round(razaon*100,0)St_pg.text= string(valor)+ ? de ? +string(ir_alfinal)+ ???+ string(porcen)+???

  • -66-

    Power Builder 9.0

    Clases

    Crear las siguientes clases de Objetos de usuarios

    1.- Los Visuales

    a) Un Progres segn se muestra en la figura

    b) Un control para desplazamiento de paginas y de Impresin

    c) Colocando una caja de texto que permita adicionar o restar das a una fecha atravs de Vscroll

    d) Colocando dos listBox , al desplazarse en uno de ellos que se encuentresincronizado

    e) Pasando una cadena a una etiqueta que dicha cadena sea tipo Blink

    f) Colocando un cuadro texto que solo acepte letras y espacios en Blanco.

    2.- No Visuales

    a) Una funcin que permita sumar una columna numrica, se pasa como valor elcontrol 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 controlDataWindow, el valor inicial del cdigo, el cdigo puede empezar con una letra onmero.

    d) Un evento que permita cambiar el color de una columna de un controlDataWindow, pasar como dato el control DataWindow y el nmero de columna.

  • -67-

    Power Builder 9.0

    Capitulo de Graficos en Power Builder

    Es un estilo de un DataWindow, pero tambin se pueden efectuar grficos a travs delcontrol graph.

    Pasos para crear un grafico.

  • -68-

    Power Builder 9.0

    AplicacinSe tiene las Base de Datos (EMPRESA), que tiene las siguientes tablas:

    Realizar el grafico como se muestra en la figura.Para ello Disear los siguientes DataWindow

    Datawindow Tablas Campos Category Values RetrievalArguments

    Datag01 Departamentoy Salarios

    Nom_dept,Cod_emp

    Nom_dept Count(Cod_emp)

    Datag02 Departamentoy Salarios

    Cod_emp,sueldo Cod_emp Sueldo Nom_dept

    Datag03 Empleado Todos Cod_emp

    Data01 y Data02 son estilos graficos, mientras Data03 estilo freeform

  • -69-

    Power Builder 9.0

    Aplicar las propiedades correpondientes a los mencionados DataWindowsAl hacer Click en un empleado mostrar una ventana con sus datos personales, como semuestra en el ejemplo

    LauraMoreno Lee

  • -70-

    Power Builder 9.0

    Script open for Aplicacion

    // Coneccion con la Base de Datos// Profile conexion con sqlserverSQLCA.DBMS = "MSS Microsoft SQL Server 6.x"SQLCA.Database = "Empresa"SQLCA.ServerName ="(local)"SQLCA.LogId = "SA"SQLCA.AutoCommit = FalseSQLCA.DBParm = ""connect;open(VenEstadistica1)

    Script open for ventana VenEstadistica1

    dw_1.settransobject(sqlca)dw_2.settransobject(sqlca)dw_1.retrieve()

    Script Cliked for dw_1 (VenEstadistica1)

    GrObjectType ClickedObjectstring nomdept,nomgraf="gr_1"int v_series,v_categoria

    ClickedObject=This.ObjectAtPointer(nomgraf,v_series,v_categoria)

    if ClickedObject=Typedata! or ClickedObject=TypeCategory! then nomdept= this.CategoryName(nomgraf,v_categoria) string cad cad="EMPLEADOS EN "+nomdept dw_2.modify("gr_1.title='"+cad+"' ") dw_2.retrieve(nomdept)Else Messagebox(parent.title,"Click en departamento para ver empleados")end if

    Script Cliked for dw_2 (VenEstadistica1)

    GrObjectType ClickedObjectstring nomgraf='gr_1'int v_series,v_categoriastring id_emp

    ClickedObject=This.ObjectAtPointer(nomgraf,v_series,v_categoria)

  • -71-

    Power Builder 9.0

    if ClickedObject=Typedata! or ClickedObject=TypeCategory! then id_emp= this.CategoryName(nomgraf,v_categoria) openwithparm(venfichae,id_emp)Else Messagebox(parent.title,"Click en departamento para ver Detalle de empleado")end if

    Open for VenFichaEmpstring coddw_1.settransobject(sqlca)cod=message.stringparm

    dw_1.retrieve(cod)

    Script Cliked for cb_1 (VenFichaEmp)close(venfichae)

    Aplicacin Formularios MDI y Objetos de Usuario.

    En esta aplicacin se ha utilizado Ventanas con herencia (inheret) donde la ventanaw_sheet-dw es la ventana padre que contiene funciones definidas por el usuario

    Creacin de Objetos de Usuario empleado para contener controles de tipo general queseran empleados, por las otras ventanas descendientes (w_alumnos y W_cursos);ademas se han elaborado las funciones de objeto usuario con la finalidad de generalizarlas tareas de los eventos.

    1.- Para crear un objeto usuario siga los pasos del profesor:a)b)c)

    2.- Crear un menu (menu01) con todas las opciones descritas:

  • -72-

    Power Builder 9.0

    2.1 Crear un menu02 heredado(inheret) del menu01

    3.- Elaborar las siguientes Ventanas:3.1 Ventana W_frame aquel que va a contener el menu01 y el objeto de Usuario

    Creado en el punto 13.2 Ventana W_sheet_dw ventana padre que contiene un control datawindow(dw_1)

    sin relacionar a ningun objeto datawindow3.3 Ventana W_alumno heredado de la ventana (W_sheet_dw) y relacionarlo con el

    menu023.4 Ventana W_cursos heredado de la ventana (W_sheet_dw) y relacionarlo con el

    menu02

    4.- Creacion de eventos:4.1 Anivel de objeto de Usuario

    Variable InstanciaDatawindow idw_udo

    4.2 Funcion de Objeto de usuarioUf_setdw(datawindow dw_parm)idw_udo=dw_parm

    4.3 Script Clicked for Cb1idw_udo.scrolltorow(1)idw_udo.setfocus()

    4.4 Script Clicked for Cb2idw_udo.scrollnextrow()idw_udo.setfocus()

    4.5 Script Clicked for Cb3idw_udo.scrollPriorRow()idw_udo.setfocus()

    4.6 Script Clicked for Cb4int nfnf=idw_udo.rowcount()idw_udo.scrolltorow(nf)idw_udo.setfocus()

    4.7 Script Clicked for Cb5idw_udo.retrieve()idw_udo.triggerEvent(rowfocusChanged!)idw_udo.setfocus()

    4.8 Script Clicked for Cb6int nfnf=idw_udo.insertrow(0)idw_udo.scrolltorow(NF)idw_udo.setfocus()

  • -73-

    Power Builder 9.0

    4.9 Script Clicked for Cb7 int r r=idw_udo.update() if r=1 then commit; else rollback; end if

    5.- Eventos para la ventana W_frame Script Risize for w_frame

    int nX, nY, nWidth, nHeight

    /*nX = WorkSpaceX (this)nY = WorkSpaceY (this) */

    nWidth = this.WorkSpaceWidth( )nHeight = this.WorkSpaceHeight( )

    nHeight = nHeight - (uo_1.y + uo_1.height)nHeight = nHeight - mdi_1.MicroHelpHeight

    mdi_1.Move (0, uo_1.y + uo_1.height)mdi_1.Resize (nWidth, nHeight + 4)

    6.- Evento para la ventana W_sheet_dw declarar la Variable Instancia w_frame iw_frame

    integer i_row

    6.1 Script activate for w_sheet_dwiw_frame.uo_1.uf_setdw(dw_1)

    6.2 Script open for w_sheet_dw iw_frame=This.parentwindow() dw_1.settransobject(sqlca)

    6.3 Script Ue_cascada for w_sheet_dw iw_frame.arrangeSheets(cascade!)

    6.4 Script Ue_Horizontal for w_sheet_dwiw_frame.arrangeSheets(tile!)

    6.5 Script Ue_totalw for w_sheet_dw iw_frame.arrangeSheets(layer!)

    6.6 Script Ue_vertical for w_sheet_dwiw_frame.arrangeSheets(tilehorizontal!)

    6.7 Script rowfocuschanged for dw_1

  • -74-

    Power Builder 9.0

    i_row=this.getrow()if i_row

  • -75-

    Power Builder 9.0

    NOTAS

    Campos Tipo DescripcionCodal C(6) Cdigo AlumnoCodcur C(4) CursoExp N Ex. ParcialExf N Ex . Final

    Establecer los campos principales y las claves Forneas

    Se Pide elaborar:

    1) La Observacin Mostrar aprobado (Azul) desaprobado (rojo), el examen final esde Peso Doble.

    2) Hacer una consulta por apellido , para ello digitara solo los primeros caracteres deun apellido y en un DataWindow de tipo tabular mostrara a todos los alumnos quecomienzan con esos caracteres

    3) Consulta por curso, Se ingresara por teclado El cdigo o Nombre de Curso luegoen un DataWindow mostrara a todos los alumnos que llevaron dicho cursoordenado por promedio de manera descendente, los promedios menores a 11mostrarlos con rojo de lo contrario con azul.

  • -76-

    Power Builder 9.0

    4) consulta por fechas, para ello se ingresara dos fechas por teclado la fecha inicial yla Fecha final, en caso de no ingresar la fecha final se tomara en cuenta hasta lafecha actual del sistema. Y mostrara en un DataWindow la relacin de alumnosmatriculados en ese rango.

    5) Repita el Proceso 1 haciendo una consulta en Cascada, es decir en un formulariohabr dos DataWindow, en el primer DataWindow mostrara la relacin de alumnosy en el segundo todos los cursos que ese alumno ha llevado con su promediorespectivo, de tal modo que al hacer un ClicK o cambiar la fila del DataWindowalumno cambiara automticamente el segundo DataWindow.

    6) Realice solo el mantenimiento de la tabla alumno, el cdigo del alumno se va agenerar a partir A00001

    CUARTA PRCTICA CALIFICADA

    De La BDD del Demo de Power Builder Considerar las siguientes Tablas y campos paracada una de llas:

    Customer Clientes Sales_Order Orden dePedidoID (N)Fname ( C )Lname ( C )Company_name ( C)State ( C)

    Identificacin del CliePrimer NombreUltimo NombreNombre _CompaaRstado

    ID ( N)Cust_id ( N )Order_Date ( D )Region ( C )

    Nro de PedidoIdentificacin del ClieFecha de pedido

    Sales_Order_Items ( detalle del Orden) Product ProductoID ( N )Line_Id (N)Prod_IDQuantyShip_Date

    Nro de PedidoNro de ItemCodigo de ProductoCantidadFecha de Envio

    ID ( N)DescriptionUnit_Price

    Codigo de Prod.DescripcinPrecio Unitario

    Las Tablas ya tienen datos consistentes:Realizar:

    1) Seleccionando un ao en un combo (1996 - 1999) muestre la cantidad de pedidospor Mes durante ese ao , los meses deben ser Enero,febre,... (10 Puntos)

    2) En una Ventana Muestre la siguiente consulta en Cascada:

  • -77-

    Power Builder 9.0

    ClientesCodigo Nombre y apellido Compaia Telefono

    Orden de Pedido

    Nro de Pedido Fecha de Pedido Region

    Detalle del Pedido

    Item Descripcin del Producto Cantidad Precio Total

    Total por Pedido

    Animaciones

    Por ejemplo si se desea mostrar una papelera de reciclaje cuendo se elimina un registro ocuando se copia emplear controles ole.

    Cb_graba Clickedole_1.insertfile("c:\Iamgenes\filecopy.avi")ole_1.activation=activateongetfocus!ole_1.setfocus()

    Cb_anula Clicked

    ole_1.insertfile("c:\Imagenes\filedel.avi")

    Control Ole , insertcontrol Avi

  • -78-

    Power Builder 9.0

    ole_1.activation=activateongetfocus!ole_1.setfocus()int rsOLEObject ole1ole1 = create OLEObjectrs = ole1.SetAutomationTimeOut(10000)

    .DataWindow Dinamicos

    Sin utilizar objetos datawindow se puede mostrar en un control dartawindow resultados deuna instruccin SQL.

    SyntaxFromSql Genera datawindow fuente, basado en instrucciones SQL.

    Syntax

    transaction.SyntaxFromSQL (sqlselect, presentation, err)Argument Descriptiontransaction Objeto de Transaccionnsqlselect Una Cadena que contiene instrucciones SQLpresentation 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, tabularerr Una cadena donde se va a recepccionar . el mensaje de error en caso quelo hubiera.

    Ejemplo:

    La siguiente sentencia crea un Datawindow grid en dw_1 desde la fuente generada porla funcin SyntaxFromSQL Si ocurre un error, la cadena ERRORS podra contenercualquier mensaje de error que es generada, mostrando un mensaje al usuario. Observeque debe efectuarse a travs del Objeto SQLCA:

    Utilizando la tabla empleados

  • -79-

    Power Builder 9.0

    Cb_Carga Clicked

    string ERRORS, sql_syntaxstring presentation_str, dwsyntax_strsql_syntax = "SELECT * from empleado"presentation_str = "style(type=grid)"dwsyntax_str = SQLCA.SyntaxFromSQL(sql_syntax, presentation_str, ERRORS)IF Len(ERRORS) > 0 THEN MessageBox("Caution", "SyntaxFromSQL caused these errors: " + ERRORS) RETURNEND IF

    dw_1.Create( dwsyntax_str, ERRORS)IF Len(ERRORS) > 0 THEN MessageBox("Caution", "Create cause these errors: " + ERRORS) RETURNEND IFdw_1.settransobject(sqlca)dw_1.retrieve()

    Envio de e-m@il

    Si se tiene instalado el Outlook se debe de configurar

    ddlb_destinatario

    Alberto Moreno Cueva

    Bayona Ramos

  • -80-

    Power Builder 9.0

    Pb_1 Clickedstring docname, namedinteger valuevalue = 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 mSesmailReturnCode mRetmailMessage mMsgmailFileDescription mAttach[]string ls_ret, ls_syntax, ls_name, ls_open_pathname,ls_filenamestring ls_attach_name='c:\pbl\error.psr'int li_index, li_nret, li_nrecipients, li_nfileboolean lb_noerrors

    mSes = create mailSessionmRet = mSes.mailLogon ( mailNewSession! )

    sle_titulo

    mle_texto

    Pb_1lb_archivos

  • -81-

    Power Builder 9.0

    If mRet mailReturnSuccess! Then MessageBox ("Mail Logon", 'Return Code mailReturnSuccess!' ) mSes.mailLogoff() returnEnd IfSetPointer(HourGlass!)mMsg.notetext = mle_texto.text // Mensaje a adjuntar ficheros a enviarlong tt,hayhay=lb_archivos.totalitems()for tt=1 to hay mAttach[tt].FileType = mailAttach! mAttach[tt].PathName = lb_archivos.text(tt) mAttach[tt].FileName = lb_archivos.text(tt) mAttach[tt].Position = len(mMsg.notetext) - 1 mMsg.AttachmentFile = mAttachnext

    mMsg.Recipient[1].name = ddlb_destinatario.text // destinatariomMsg.Subject=sle_titulo.text // subjectSetPointer(HourGlass!)mRet = mSes.mailsend ( mMsg )mSes.mailLogoff()

    APIS DE EN POWERDeclaracin de Funciones externas

    DescripcinLas funciones externas son escritas en diferentes lenguajes y almacenadas en librerias dinamicascon la extensin DLL, antes de utilizar estas funciones primero debe declararse definiendo su tipo.

    Global external functions Estos son disponibles en toda la aplicacinLocal external functions Estos son definidos a nivel de ventana u objeto de usuario

    External function syntax Usa la siguiente sintaxis:

    Mostrar la Barra deestado

    Ver el Nombre de la maquina

  • -82-

    Power Builder 9.0

    { access } FUNCTION returndatatype name ( { { REF } datatype1 arg1, ..., { REF } datatypen argn } ) LIBRARY "libname" ALIAS FOR "extname"

    Paso1.- Primero declarar las funciones externas ya sea a travs del visor Apis o digitarlosdirectamente

    cb_ocultar Clicked

    Long HBar // Esconder la barra de tareasHBar = FindWindowExA( 0, 0, "Shell_TrayWnd", ls_Null )ShowWindow( HBar, 0 )

    Cb_Mostrar Clickedonstant Long SW_SHOW = 5// Nombres del shell de Windows que deberiamos buscarString ls_NullLong HBar, ll_HDeskTopHBar = FindWindowExA( 0, 0, "Shell_TrayWnd", ls_Null )ShowWindow( HBar, SW_SHOW )// Muestra el escritorioll_HDeskTop = FindWindowExA( 0, 0, "Progman", ls_Null )ShowWindow( ll_HDeskTop, SW_SHOW )

    Cb_maquina Clickedlong ll_retstring ls_ComputerName ,ls_UserNameulong BufferLength = 250ll_ret = GetComputerNameA(ls_ComputerName, BufferLength)messagebox("maquina",ls_ComputerName)

    Ubicar la clase dentro de la DLL

  • -83-

    Power Builder 9.0

    Control Trreview y procesos de arrastre

    Aplicacin: Cambio de empleados en otro departament

    Objetos a emplear:1.-estructura (stremp)

    2.-Datawindow estilo tabular datemptablas:Departamento, empleado y salarios ( de la BDD empresa utilizado anteriormente)campos:Departamento(id_dep,,nom_dep), empleado(cod_emp,nom_emp,ape_emp)Retrieval argument id_dep (codigo del departamento)

    Control Tv_1

  • -84-

    Power Builder 9.0

    Descripcin de los eventosBeginDrag.-ocurre cuando el usuario presiona el boton izquierdo del mouse, sobreuna etiqueta en el control treeview inicindose el arrastre.

    DragWithin Ocurre cuando el usuario esta arrastrando con el control.

    DragDrop.- Ocurre cuando el usuario arrastra un objeto sobre el control y libera el botondel mouse y deja el objeto.

    Itempopulate.-Ocurre cuando un item delTreview llena los demas items hijos

    Occurs when the user presses the left mouse button on a label in the TreeView controland begins dragging.

    Ven01 openidsource=create Datastoreidsource.dataobject="Datemp"idsource.settransobject(sqlca)triggerEvent("ue_populate")

    ven01 ue_populate()

    TreeviewItem Vitem

    SetPointer(hourglass!)Vitem.Label="Marketing"Vitem.Data= "D001"vitem.PictureIndex=1vitem.SelectedPictureIndex=7Vitem.children=truetv_1.insertitemlast(0,vitem)Vitem.Label="logistica"Vitem.Data= "D002"vitem.PictureIndex=2tv_1.insertitemlast(0,vitem)Vitem.Label="Ventas"Vitem.Data= "D003"vitem.PictureIndex=3tv_1.insertitemlast(0,vitem)Vitem.Label="Contabilidad"Vitem.Data= "D004"vitem.PictureIndex=4tv_1.insertitemlast(0,vitem)Vitem.Label="Administracion"Vitem.Data= "D005"vitem.PictureIndex=5tv_1.insertitemlast(0,vitem)

  • -85-

    Power Builder 9.0

    tv_1 begindrag(long handle ) return long//Inicio del ArrastreTreeViewItem t_SourceGetitem(Handle,T_source)

    ST_9.TEXT=STRING(T_Source.Level)if T_Source.Level2 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 dragdrop(dragobject source, long handle) return long

    int li_pendlong li_newitemtreeviewitem lt_target,lt_source,lt_parent,lt_newif getitem(r_droptarget,lt_target)=-1 then returnif 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 dragwithin(dragobject source, long handle) return long

    treeviewitem t_overlong a,bif getitem(handle,t_over)=-1 then // si estamos en el primer nivel setDropHighlight(0) r_droptarget=0 returnend if

  • -86-

    Power Builder 9.0

    if t_over.level=1 then // resalta el departamento que va ser arrastrado if handler_droptarget then setDropHighlight(handle) r_droptarget=handle else setDropHighlight(0) r_droptarget=0 end if

    else r_droptarget=finditem(parenttreeItem!,handle)

    if r_droptargetr_dragparent then setDropHighlight(r_droptarget) else setDropHighlight(0) r_droptarget=0 end ifend if

    tv_1 itempopulate(long handle)int nf,cfTreeViewItem tvidep, tvempif getitem(Handle,tvidep)=-1 then returnsetPointer(hourglass!)idsource.reset()nf=idsource.retrieve(tvidep.data)tvemp.pictureIndex=6tvemp.selectedpictureIndex=6tvemp.children=falsefor cf=1 to nf tvemp.label=idsource.object.empleado_nom_emp[cf] +","+idsource.object.empleado_ape_emp[cf] tvemp.data=idsource.object.empleado_cod_emp[cf] insertitemsort(handle,tvemp)

    next

  • -87-

    Power Builder 9.0

    .

    Trucos en Power

    01 - Cambiar el color alternativamente en las filas de una datawindowPara que las filas de una DataWindow tengan el aspecto de papel de impresoraaade 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 textoen 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 lascolumnas pulsando en la cabecera de la columna. La funcin Sort te permiteespecificar el nombre de la columna o el nmero de columna por la cual se ordenarel dataWindow. Funciona para la mayora de columnas y tipo de datos, pero nofunciona bien cuando la columna pertenece a una DropDown DataWindow

    El problema es que la funcin Sort ordena los datos por detrs de la DataWindow nolos 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 elnombre de la columna dentro de esta funcin y usndola para ordenar los datos, elusuario podr ver los datos ordenados.Por ejemplo:

    dw_1.SetSort( 'LookUpDisplay( dept_id )' )dw_1.Sort()

    03.- Ordenar un DataWindow pulsando en la cabeceraPor ejemplo: El nombre de la cabecera de la columna tiene que tener el mismonombre 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

  • -88-

    Power Builder 9.0

    Char lc_sort

    /* Chequea cuando el usuario hace click en la cabecera */IF Right(dwo.Name,2) = '_t' THENls_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 clickactualmente es la misma o no. Si es la misma, entonces se chequea el orden deordenacin del ordenamiento anterior (A - Ascendente, D - Descendente) y locambia. Si las columnas odenadas no son las mismas, las ordena en ordenascendente. */IF ls_column = LEFT(ls_old_sort, LEN(ls_old_sort) - 2) THENlc_sort = RIGHT(ls_old_sort, 1)IF lc_sort = 'A' THENlc_sort = 'D'

    ELSElc_sort = 'A'END IFdw_1.SetSort(ls_column+" "+lc_sort)ELSEdw_1.SetSort(ls_column+" A")END IFdw_1.Sort()END IF

    04.- Determinar el uso de memoria de una datawindowA menudo es necesario saber cuanta memoria esta usando una DataWindow odatastore 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 larecuperacin de los mismos, puede ser detenida cuando se llegue a un lmitemximo.Para deteminar la cantidad de memoria virtual que est usando una DataWindow odatastore, se usa el atributo Storage.

    Este puede ser invocado desde cualquiera de de los dos mtodos siguientes:Notacin DOT: dw_control.Object.DataWindow.StorageDescribe: 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 ventanaLlamar 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_parmlds_parm = Message.PowerObjectParm

  • -89-

    Power Builder 9.0

    dw_1.DataObject = lds_parm.DataObjectlds_parm.ShareData(dw_1)

    Y en el evento CLOSE:dw_1.ShareDataOff()

    06.- Copiar datos de un Grid Datawindow al portapapeles de WindowsLos DataWindow grid tienen la capacidad nica de dejarte seleccionar un nmero deceldas en el DataWindow (o la totalidad de filas o de columnas de datos).Este ejemplo ilustra como proporcionar soporte de copia para los datosseleccionados desde un DataWindow de tipo grid.Asumimos que un nuevo elemento de menu llamado m_SpecialCopy ha sidoaadido bajo el menu m_Edit .Aadir el siguiente cdigo para determinar si el elemento Special Copy deber serhabilitado.GraphicObject lg_ObjectDataWindow lg_DWstring ls_SelectedTextlg_Object = GetFocus ()CHOOSE CASE TypeOf (lg_Object)CASE DataWindow!lg_DW = lg_ObjectThis.m_SpecialCopy.Enabled = (lg_DW.dwDescribe ("datawindow.selected.data") '')END CHOOSE==============================Codifica lo siguiente en m_SpecialCopy o en un evento disparado porm_SpecialCopy):graphicobject lg_Objectdatawindow lg_DWlg_Object = GetFocus ()CHOOSE CASE TypeOf (lg_Object)CASE DataWindow!lg_DW = lg_ObjectClipBoard (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 quelas han creado. Esto se puede hacer fcilmente usando expresiones de columna enel DataWindow.

    Aade esta expresin en el campo "background color" de la columna clave. Estocambiar 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:

  • -90-

    Power Builder 9.0

    - Background Colourif ( Describe("Datawindow.QueryMode") = "yes" or isRowNew(), 1090519039,ong(Describe("Datawindow.Color")))- Protectif ( Describe("Datawindow.QueryMode") = "yes" or isRowNew(), 0, 1)

    8.- Cargar un array con los nombres de cada columnas en una Datawindowint colNum, numColsstring colName[]numCols = Integer(dw_control.Describe("Datawindow.Column.Count"))FOR colNum = 1 TO numCols // Obtenemos el nombre de la columna con la funcin Describe colName[colNum] = dw_control.Describe("#" + String(colNum) + ".name")

    NEXT

    9.- Saber que ficheros hay en un directorioPuedes usar las API's de Windows:

    Function ulong GetWindowsDirectoryA (ref string dirtext, ulong textlen) library"KERNEL32.DLL"ls_dir = space(lul_size)lul_rc = GetWindowsDirectoryA(ls_dir, lul_size)La cual retornar una cadena conteniendo todos los ficheros que hay en esedirectorio, o tambin puedes usar la funcin DirList()listboxname.DirList ( filespec, filetype {, statictext } )La cual mostrar un ListBox con los ficheros que coincidan con el criterio especificado.Si no quieres que el usuario vea estos ficheros, tienes que hacer el ListBox invisible.

    10.- Obtener una lista de las impresoras instaladasPor Ral GagnonEn este truco abriremos un listbox con una lista de las impresoras instaladas:string printers[]int rtn, i, nbPrintersrtn =RegistryKeys("HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print\Printers", printers)nbPrinters = UpperBound(printers)FOR i = 1 TO nbPrinterslb_1.addItem(printers[i])NEXT

    11.- Detectar la versin de PowerBuilderstring ls_PBverenvironment envGetEnvironment(env)ls_PBver = string(env.pbmajorrevision) + '.' + string(env.pbminorrevision) + '.' +string(env.pbfixesrevision)

  • -91-

    Power Builder 9.0

    12.- Obtener el ltimo da del mesSe coge una fecha, se incrementa el mes, se cambia el da por "01" y entoncesrestamos 1:int li_retdays,ld_previousMonthLastDay,li_month,li_yeardate ad_date, ld_newdatead_date= today()li_month = Month(ad_date)li_year = year(ad_date)IF li_month < 12 THENli_month ++ELSEli_month = 1li_year ++END IF// construimos una fecha nuevald_newdate = date(li_year,li_month,1)// extraemos el ltimo da del mes anteriorld_previousMonthLastDay = day(relativedate(ld_newdate, -1))

    13.- Realizar un "Mouse Over" sobre un componenteSuponte que tienes un Static Text sobre una ventana. Cuando el puntero del ratnpasa por encima, el color del texto del Static Text cambia a color rojo. Cuando elpuntero del ratn sale del Static Text, el color del texto es negro.[Evento mousemove de la ventana]// Simplemente para visualizar algost_1.text = string(xpos) + ", " + string(ypos)IF xpos >= st_1.X AND (xpos = st_1.y AND (ypos

  • -92-

    Power Builder 9.0

    ** El cdigo que quieres testear

    */ll_elapsed = CPU ( ) - ll_Start

    Sugerencias:

    [email protected]@ucss.edu.pe