powerbuilder manual2

Embed Size (px)

Citation preview

  • 8/2/2019 powerbuilder manual2

    1/26

    IntroduccinEl uso de esta herramienta de desarrollo de software est destinada hacia el lenguaje de manipulacin(DML) en cerca de un 80%. Por lo que su interaccin con motores de bases de datos es muy extensa;principalmente a travs del objetoData Windows que posteriormente se discutir ampliamente.Un detalle importante en relacin a los S I es que, siempre que se pueda las reglas del negocio debenestar presentes en la definicin de los modelos de datos, para de esta manera hacer ms giles lasmodificaciones que a futuro se le tengan que hacer a los S I de la organizacin.Ahora bien, con relacin a los motores de bases de datos, es importante destacar que un motor puede ser

    accesado desde una herramienta de diseo como lo es Power Builder de dos formas: Driver nativos: aqu se necesita que tanto fabricante del DBMS como el desarrolador de la herramientase pongan en contacto para incluir en la herramienta de desarrollo los drivers nativos del Sistema Gestor.Esto tiene la ventaja que entonces al sistema gestor le sern explotadas casi el 100% de sus vondades.

    Driver ODBC: por otra parte, si no hay contacto entre los proveedores, se puede hacer uso del sistemaGestor mediante conexiones ODBC (Open Data Base Conection -Conexiones Abiertas de Base deDatos-), la deficencia aqu es que no se aprovecha el 100% tanto de la herraimienta de desarrollo comodel sistema gestor.

    NativoDDLDriver SQL DMLDCL

    ODBCToda aplicacin en Powel Builder est respaldada en al menos una o ms libreras (.pbl). por lo quese podra afirmar que una aplicacin es en realidad un conjunto de una o ms libreras.Men inicial

    de la Herramienta Picture listBox:

    Incluye el conjunto de todas las dems opciones que podemos ver en la barra de men Aplicacin:

    Power Builder a iniciar cada sesin abre por default la ultima aplicin sobre la que se ha estado trabajando Proyect:

    Permite tomar una o varias libreras.Aqu cabe el comentario que para el desarrollo de proyectos es posible (recomendado) guardar todos losobjetos visuales(formularios, grficos, ect) en un .pbl y todos lo objetos(cdigo) no visuales en otro .pbl.

    Window:Es el famoso formulario, que premie entre otras cosas comenzar una aplicacin.

    User Object:Son objetos definidos por el usuario, pueden bien ser ventanas de tipo general, las cuales se puedan usaren distintas aplicaciones, etc.En este punto hay que distinguir que los objetos definidos por el usuario pueden ser de dos tipos: 1) declase y 2) Visuales. Adems dentro de cada categora se pueden escoger si son del tipo estndar-yatienen la clase definida- opersonalizados-aqu el programador se encarga de su definicin por completo-

    Men:Se usan principalmente para enlazar ventanas, y mantener la seguridad dentro de la aplicacin.Es decisin del desarrollador en qu momentos desea crear el men de la aplicacin lo cual lo puedehacer en el inicio o bien al final del desarrollo de la aplicacin.

    Structure:Objeto que permite definir variables de tipos de datos (el famoso Record de otras herramientas).Existen dos tipo de estructuras: Generales: Se definen desde el cono de la barra de men - sin tener ningn formulario abierto- , estrn disponibles

    para toda la aplicacin; por ejemplo si crearamos una estructura en este punto estara disponible para toda la

    aplicacin

    Locales: Se define desde el men Declare (Declare | window structures) si se crea una estructura con un formulario

    abierto est estar disponible solo en el mbito de ese formulario.

    Function:Las que se encuentran disponibles desde aqu son funciones que han sido definidas, como de alcanceglobal (= public) por la aplicacin que se tiene en uso.

    Data Window:Aqu nos encontramos con dos connotaciones el control Data Window y el objeto Data Window. Elsegundo ser de gran uso para enlazar los requerimientos del control data Window, el cual se crea desdeeste cono.

    Query:

  • 8/2/2019 powerbuilder manual2

    2/26

    Permite construir consultas sobre uno o varios esquemas de la base de datos. La consulta luego desalvada es almacenada como un objeto ms de la aplicacin; por lo que hay que asignarlo a una librera,ect.*No tocar sin acceso a una base de datos.

    Pipeline:Permite hacer migraciones de datos. El importar tanto como exportar se puede hacer desde aqu.La migracin la hace tabla por tabla. Si la tabla existe actualiza los registros.Se debe tener mucho cuidado con la integridad; es preferible durante la migracin quitar la integridad de

    las tablas involucradas si no se tiene un conocimiento profundo de lo que se est haciendo. ODBC:Permite ver conexiones odbc ya hechas, o bien crearlas editarlas o incluso eliminar conexiones yadefinidas

    DB Profile:Cuando una base de datos ya tiene la conexin ODBC, o si en su defecto se tiene el driver nativo, se lepuede ya entonces gererar perfiles (= Profile) sobre la misma)Adems se pueden generar o modificar conexiones OBDC, desde aqu pero esto no es recomendadoEs desde aqu que se puede por medio no de cdigo conectar a un modelo de datos.Se tienen divididos los diferentes drivers nativos incluidos en Power Builder, y adems las conexionesODBC generadas por medio del generador de conexiones odbc (de la herramienta o el proporcionado porel sistema operativo)

    Table:Wizard para la generacin o alteracin de tablas.No tocar si no se tiene acceso a ningn modelo de datos.

    Data BaseSe conecta a la lltima base de datos que se usCon una aplicacin abierta en el conect del men file tambien aparecen los esquemas de de datos que sepuede accesar (=abrir)Es mejor escoger la conexin desde el DB Profile.

    Browser:Forma rdida de ver los objetos de la aplicacin actual.Es un formulario con diferentes leguetas que presenta todos los objetos definidos y creados en laaplicacin actual.

    Library:Muestra las diferentes libreras de la aplicacin.Este objeto permite entre otras cosas exportar libreras de diferentes versiones, regenerar libreras, y ver ymodificar ciertas propiedades de diferentes objetos.Dentro de una misma librera se pueden tener varias aplicaciones.

    Edtit:Para libreras

    OLE:Permite agregar objetos del tipo OLE

    Run:Permite correr toda la aplicacin.

    DebugPermite depurar la aplicin

    Run Window:Permite correr solo la ventana abierta. Si se tienes que hacer acceso a datos de algn modelo esta opcinno estar disponible.

    Ms all del men inicial de la herramientaUna ves que se tiene abierta la ltima aplicacin sobre la cual se trabaj - el men de trabajo se ampla -, ylo que se desea es crear una nueva aplicacin, o bien abrir otra aplicacin, se puede hacer esto desde elmen File, escogiendo New, o tambin sobre el cono new de la barra de men.

    Nueva aplicacin:Lo primero que hace es pedir informacin sobre la librera que respaldar la aplicacin, que por usogeneral se le da el mismo nombre que posteriormente se le dar a la aplicacin.

    Posteriormente pide la informacin requerida para la aplicacin en cuestin: Nombre de la aplicacin Comentarios de la librera que la reapalda Comentario de la aplicacin propiamente dicha Libreras asociadas a la aplicaicin.

  • 8/2/2019 powerbuilder manual2

    3/26

    Una vez que se ha clicado sobre el botn OK se genera un cuadro de dilogo que pregunta si se quieregenrerar una plantilla base para la aplicaicin que se est generando.Si se responde que s, se corre un wizard que generar tal plantilla misma que incluir algunas ventanasbsicas, un men para la aplicacin y un rea de cominicacin con sql (a traes de la variable SQLCA), elcuel posee el cdigo necesario para conectar con cualquier motor de base de datos, pero por defaultpegar la ultima con la que se trabaj.Tal vez aqu es importante destacar que en Power Builder, as como muchos otros lenguajes de 4GL, todoobjeto tiene dos aspectos que destacar:

    Propiedades Script Propiedades del objeto APLICACIN:

    Si se pulsa sobre el cono propiedades o con click derecho sobre el ratn, se puede ver en modo delectura algunas de ellas las propiedades del objeto aplicacin. Si se desea modifocar alguna que aparezcaen modo de lectura se debe hacer dando click sobre el cono Library el cual ya fue discutido en la seccinanterior.Algunas propiedades por destacar:

    General:Aqu se musetra el conjunto de propiedades que se definieron al crear la aplicacin ms algunas otras queel mismo PB defini en el momento tambin de generar la aplicacin en cuestin.

    Icon: el seleccionado aqu ser el que se muestre en el ejecutable de la aplicacin, una vez que esta

    haya sido compilada. Los que trae por defecto Power Builder estn ubicados en: Archivos de programaPowerSoft ArtGal Variable Types: cada una de las variables aqu definidas cumle con una funcin especfica y algunas

    trabajas tambien en conjunto: SQLCA:(rea de comunicacin con SQL), Esta variables tienes todos los parmetros necesarios para

    conectarse con cualquier motor de base de datos.Si solo se va a conectar con una base de datos en la aplicacin no se hace necesario dedinir msvariables Transaction.E.g: connect using SQLCAODBC o noUsuarioPassword

    Base de datosNombre de base de datos

    SQLDA: (dinamic area) SQLSA: (static area)donde queda la instruccin SQL

    Las dos variables definidas anteriormente trabajan juntas para obtener consultas dinmicas, osea en lasque el usuario define que campos quiere extraer y de que tablas

    Error:para pasar mensaje de error del motor de la base de datos a Power Builder.Se pueden capturar los errores ms comunes en una tabla ms del modelo de datos, para determinar lasacciones a seguir cuando el usuario cometa tal error.Por ejemplo se le podra informar al usuario que esta introduciendo un nmero de factura que ya existe(sera poco ilustrativo para el usuario si se le dice que est intentando duplicar un refistro de PK!!)En los dems errores solo se le avisa al usuario para que contacte con el departamento de sistemas de laorganizacin.El error se captura en la variable DbError.

    Message:en la progrmacin orientada a objetos se pueden enviar mensajes entre objetos (parmetros,etc). Esta es la forma de hacerla de PB. Esta variable se usa junto a una funcin llamada Power Object.(se menda a traves del Power Object un mensage de una ventana a otra por ejemlo.)

    Libraries:Presenta el conjunto de libreras que tiene asociada la aplicaicin sobre la que se est trabajando.

    Resto de las propiedades:Se refieren a la forma de presentar los diferentes textos y etiquetas y dems mensajes en tiempo tanto dediseo como de ejecucin.Algunas de estas propiedades se pueden cambiar en tiempo de ejecucin tambin.

    La gran mayoras de los objeto en la programcin orientada a objetos posee tre caractersticas: Propiedades: las caractersticas propias de cada objeto, muchas veces manipulables en run time. Mtodos: Forma en que va a operar el objeto Son procedimientos asociados a los controles; es decir

    rutinas ya establecidas que podemos invocar desde nuestras aplicaciones para que se realice algunaoperacin sobre el control

  • 8/2/2019 powerbuilder manual2

    4/26

    En PB hay dos tipos de mtodos, los generados por el usuario y los que genera PB. La diferencia entreambos es que a los primeros hay que invocarlos mientras que los segundos no.

    Eventos: son el conjunto de instrucciones que se disparan al ejercer una accin sobre el objeto.Un evento es el conjunto de acciones que pueden ser motivadas por el propio usuario o por el mismosistema operativoCada objeto dispone de un conjunto especfico de eventos, de los cuales el analista/programador solotiene que encargarse de escribir el cdigo necesario para hacer el evento funcional para losrequerimientos de la aplicacin, es el sistema operativo es quien se encarga de determinar cuando se

    produce tal o cual evento. Haciendo Aplicaciones FuncionalesEl objeto Ventana:Una forma de agregar una ventana a una aplicacin es clicando sobre el cono de Window que aparece enla barra de men.Presenta el cuadro de dilogo Select Window, del que se puede hacer varias cosas:

    Agregar una nueva ventana. (New) Abrir una ventana ya existente en la aplicacin Agregar una ventana de otra librera (Other)

    De las ventanas ya existentes se puede ver el comentario asignado a cada una de ellas en el rea que elcuadro de dilogo preporciona para ello.Se puede tambin heredar una ventana. En este punto es importante hacer notar que una cosa es la

    herencia y otra muy distinta el copiar una ventana; pues cuando se hereda y se hace un cambio en laventana principal el mismo se reflejar en la ventana subordinada.Trabajando con una nueva ventanaSi del cuadro de dilogo lo que se escogi fue crear una nueva ventana, la misma aparecer sobre el reade trabajo de PB, no es necesario darle nombre en un inicio, pero si es recomendado salvarla de una vezpara tener el objeto protegido por cualquier eventualidad que se pueda presentar.Una ventana como cuaquier otro objeto dispone de una serie de propiedades de las cuales quiz la quemerezca discutirse para no dejar espacio a la confucin es la propiedad del tipo de ventana:

    Main: primer ventana que interactua con el usuario, por fuerza debe llevar marco y ttulo. Puede tambienposeer un men, son del tipo MDI

    MDI: son contenedores de ventanas tipo childMDI frame:

    MDI frame Microhelp Child: ventanas que no pueden salirse del marco de la MDI que la contiene. Si se cierra el padre se

    cierra el hijo tambin Popup: para desplegar listas de valores. Son diferentes a los men emergentes.. Este tipo de ventana si

    se puede salir del marco de la tipo MDI que le contiene y si se cierra el padre la Popup puede quedarabierta.

    Message: para interactuar con el usuario. Detienen la corrida de la aplicacin hasta que se cierre.Dos detalles importantes a manera de comentario es que hay que tener mucho cuidado con el tamao ycolor de las ventanas; hay que recordar que no todo el mundo dispone de monitores de 14' 16' en 256 512 colores. Muchas veces nos encontraremos con monitores bastante ms pequeos como los queposeen los agentes repartidores y que por lo general son de tipo monocramticos.En este sentido trabajar con colores bastante suaves y con una resolucion bastante baja. Lo anterior sepuede controlar las propiedades de la ventana, las cuales se pueden observar clicando dos veces sobre laventana. La propiedad que controla esto se localiza en la lengeta llamada Position. Se podra tener untamao definido de ventana (como un machote- con coordenadas y tamao, adems de colores amistosos- ) y luego solo copiarlo cada ves que se necesite un formulario.Otra propiedad para destacar sobre las venatnas es Tool Bar; que se refiere a la ubicacin dentro de laventana de un men que se tenga asociado a ella.Las propiedades de una ventana las podemos ver clicando dos veces sobre la ventana, dando clickderecho sobre la misma y escojiendo propiedades, en el men Edit escojiendo propiedades, secogiendo elcono de properties sobre la barra de men, entre otros.Por otra parte el objeto ventana tambin dispone de una serie de eventos a los que se les puede darun cdigo (=script) funcional.

    La forma de agregar cdigo a una ventana es dar click derecho y escoger Script con el mouse, o bien en elmenu Edit escoger Script, o bien escoger el cono de script sobre la barra de men, entre otras.Algunos otros conos que se generan al tener abierta una ventana

    Los conos que se describirn son los que se musetran cuado se tienes visible el formulario New: genera una nueva ventana

  • 8/2/2019 powerbuilder manual2

    5/26

    Open: presenta el cuadro de dilogo que se presenta cuando se da click sobre el cono Window Save: salva la ventana actual Picture ListBox: presenta los objetos de ventana que se pueden agregar a la ventna que se encuentra

    activa Undo: remueve la ultima accin efectuada sobre la ventana Clear: Align left edges: aopciones para alinear Script: muestra el script de la control activo

    BackGround Color: color de fondo ForeGround Color: color de relleno No border: elimina bordes Properties: del control activo Tab order: para determinar el orden en que se le ir dando el foco a cada control de la ventana activa Preview: mustra como se ver la ventana activa segn las propiedades actuales Close: cierra la ventana activa

    Controles de ventana y sus prefijosControl Prefijo

    Command Button Cb_Picture Button Pb_Check box Cbx_

    Radio Button Rb_Static Text St_Picture P_Group Box Gb_Line Ln_Oval Oval_Rectangle R_Round Rectangle Rr_Single Line Edit Sle_Edit Mask Em_Multi Line Edit Mle

    Rich Text Edit Rte_Hscroll bar Hsb_Vscroll bar Vsb_DropDown List Box Ddlb_DropDown Picture List Box Ddplb_List Box Lb_List View Lv_Tree View Tv_Tab Tab_Data Window Dw_Graph Gr_

    OLE Ole_User Object Uo_Window W_

    SCRIPTS (Script Painter)Ya se ha visto lo poner cdigo sobre la aplicacin (en el evento open), pero no se ha discutino nada acercadel mismo.VariablesLa mayora de los lenguajes de 4GL soportan el concepto de mbito de las variables. El ambito describednde se puede usar la variable.Este concepto es importante. El mbito permite a un analista/progrmador escribir una funcin o suceso sinescribir sobre las variables en otra zona de la aplicacin, incluso si las variables tienen el mismo nombre.Hay 4 niveles de mbito en Power Builder:Ambito Local: las variables de ambito local (o simplemente varialbes locales), son variables que se declaran en elscript. Muchas variables definidas por el analista/programador que se emplean en el script son variables locales, que

    solo existen en el interior del suceso o funcin en la que estn definidas. El valor que adquiera la variable se pierde

    una ves que salga del suceso o funcin

  • 8/2/2019 powerbuilder manual2

    6/26

    Ambito de rplica:las varibles de rplica son las que se permiten el acceso al objeto completo. Si se declara unacomo variable de rplica de un objeto, cada suceso, funcin o control tiene acceso a la variable.

    Para declararla de pulsa Declare | Instance replica, y aparece cuadro de dialogo Declare | InstanceVariablesLas variables de rplica se salen de su mbito suando se cierra y se reinicializa al volver a abrirlo Ambito compartido: con una aplicacin de tipo MDI se puede abrir ms de una ventana del mimo tipo (en otraspalabras, se pueden abrir dos ventanas w_item al mismo tiempo). Estas versiones multiples de la misma ventana se

    llaman rplicas de esa ventana. Las variables compartidas son varialbes cuyas funciones, sucesos controles de cada

    rplica de un objeto pueden compartirse.Para declarar una varialbe compartida se pulsa Declare | Shared Variables, y se detalla la varialbecompartidaAmbito global: la aplicacin completa puede acceder a las varialbes globales. Estas variables nunca se salen de

    mbito hasta que se cierra la aplicacin.

    No se deberas usar variables globales si se emplea otro tipo de variables, usndolas se viola el principiode encapsulacin; en otras palabras, si se establece una variable global en un suceso, otro suceso lapuede reinicializar sin que el primero se llegue a dar cuenta de ello.Para declarar una variable global se pulsa Declre | Global variables y luego se detalla la misma.La forma de declarar variables de tipo local en un determinado evento es el siguiente:Tipo_de_dato nombre_variable{ [nmero de elementos] }Cuando se abre la ventana de script sea de una ventana o de un objeto de ventana, aparte del rea de

    trabajo, existen el la parte superior de la misma cinco cajas de pegado de listas, con las cuales se puedenpegar rpidamente variables y objetos de uso frecuente al codificar los scripts

    Paste instance: esta caja despliega todas las declaraciones de variable de rplica. Con una doblepulsacin sobre una variable de rplica se puede pegar en el script

    Paste global: esta caja permite pegar en el texto cualquier variable de mbito global Paste object: esta caja permite pegar objetos que estn relacionados con el script que se est

    escribiendo; por ejemplo botones de comando, list boxes, etc. Paste Argument: Select event: da la opcin de seleccionar un evento del ojbeto al que se le desea agregar cdigo.

    Cuando un evento de un objeto espedcfico posee cdigo, aparece una marca sobre la esquina izquierdadel evento

    Comentarios:En PB existen dos formas de agregar comentrios a una aplicacin.

    // para un comentrio de una lnea /* lineas de comentarios */ para comentarios de ms de una lnea

    Dentro del Script Painter, existen tres objetos que son muy funcionales a la hara de agregarcdigo a laaplicacin; los describimos acontinunacin:Paste function: permite agregar (cada vez) uno de los tres tipos de funciones que PB soporta.

    Built-in: cualquiera de las funciones que tiene interconstruidas PB User-defined: alguna funcin definida por el progrmador External: alguna funcin externa a Power Builder y que se ha extraido hasta aqu por medio de una

    librera asosiada a la aplicacinPaste SQL: para declarar por medio de un ayudante alguna consulta sobre un modelo de datos

    Paste statement: para pegar en el script cualquier sentencia ya predefinida de PB, como un cilco una sentencia Ifthen o if then else, etc.

    Como se puede notar con estas herramientas practicamente podemos generar cdigo PB sin conocer laestructura de su sintaxis!!!.Algunos conos tiles para este momento:

    Select all: seleciona todo el texto que se encuetre en el script Comment: pone como comentario todo lo que se encuentre seleccionado. Si no hay texto sellecionado

    pone como comentario el cdigo de la lnea en la que se encuentre el cursor UnComment: quita la seleccin hecha anteriormente. Find: para buscar algn texto. Find next: busca la siguiente ocurrencia Replace: reemplaza algn texto seleccionado por otro que se proporcione Compile: compila la vnetana actual Select object: selecciona un objeto en particular Browse Object: determina las caractersticas de un objeto que se encentre seleccionado Return: vuelve al formulario.

    Creacin de Funciones Definidas por el Programador

  • 8/2/2019 powerbuilder manual2

    7/26

    Power Builder ofrece al progamador la posibilidad de crear funciones definidas por el mismo. Para agregaruna funcin definida por el usuario se escoje el men DECLRE y ah se escoje Windows functions lo quedar como resltado un cuadro de dilogo cuyo propsito es pegar una funcin definida por el usuario en elscript del control que est activo o bien agregar una nuevo funcin a nuestra aplicacin; eventulamente sepueden elininar funciones ya previamente definidas.Una ves que se haya escogido NEW de las opciones que preseta el cuadro de dilogo se debe dar ladefinicin de la funcin tomando en cuenta lo siguiente:

    Definir el nombre de la funcin

    Definir el tipo de acceso que se tendr; en donde Public: ser a nivel de aplicacin Private: ser a nivel de objeto que contenga la fncin Protected:ser que solo el objeto que contenga la funcin y sus decendientes Definir el tipo de datos que la funcin devolver La lista de posibles argumentos de la funcin se definen como sigue: Name: el nombre del argumento Type: el tipo de dato del argumento Pass by: la forma en que el parmetro ser pasado a la funcin; donde: Value: indica que ser pasada una copia del valor del argumento Reference: enva un indicador del valor real del argumento pudiendo este ser cambiado por la funcin ReadOnly: enva un indicador del valor real del argumento pero con la restriccin de que este no podr

    ser modificado por la funcin. Aqu el argumento es tratado como una constante y no se tiene que gastarrecursos en una nueva copia de la variable como es el caso del argumento por valorPor otra parte desde el cono FUNCTION tambin se pueden definir funciones (de tipo global); se hace dela misma forma que se hace desde el men Declare. Un aspecto que es de notar en este punto es quetodo objeto que aqu se envoque debe ser declarado (controles de ventana incluidos). En este mismosentido si dentro de la funcion se usan algn control de ventana este se debe declarar como parmetro-.Las funciones declaradas desde aqu (desde el cono), sern disponibles para toda la apliacin y por tantose podrn ver en el Built-in del cono Paste Fuction.Ahora bien una vez definidas, las funciones se pueden invocar (si estn bien definidas claro!) para quecumplan su objetivo. Para invocar una funcin desde un evento de un control de ventana, se debe poner elnobre de la funcin seguido de los argumentos (caso que los tuviera)

    CONFIGURACIN DE ODBC

    Power Builder ofrece la posibilidad de crear la configuracin para conexiones ODBC (cono ConfigureODBCdel la barra de men), pero desde aqu no es posible determinar la versin del driver del motor dela base de datos con el que se est haciendo la conexin, por tanto no se puede estar seguro si la mismaproporcionar los resultados esperados, pues si el motor de la base de datos es de una versin msreciente que el driver que se posee para la conexin ODBC no dar un resultado adecuado.Ante esta perpectiva lo adecuado es hacer la conexin desde un producto (de cualquier marca, incluso elque est proporcionado por el sistema operativo -caso que est usando windows 9x o windows nt - en laparte del Panel de control -Control Panel-) para conexiones ODBC.Desde un producto para conexiones ODBC, se puede en la gran mayora de los casos escoger la versindel driver que corresponda con la versin del sistema gestor que se est usando.Ahora bien ya en el producto ODBC, lo que se tiene que definir es el DSN (Data Souse Name), para lo quese siguen los siguientes pasos:

    Buscar el diver que corresponda a la versin del DBMS que se est usando.Inicialmente, lo que presentan los productos ODBC, es la lengeta con los DSN que ya han sidopreviamente definidos, por lo que si se quiere agregar una nuevo se debe escoger Agregar... (Add...), queest en la misma lengeta.

    Luego escoger la opcin de Finalizar; con lo cual se presenta un cuador de dilogo que proporciona laoportunidad de configurar el DSN, segn el driver que es haya escogido.

    Independientemente del driver que se escoja, se debe completar el compo del Data Source Name, que esel que se refiere a la base de datos que se le esta haciendo la conexin ODBC. Adicionalmente se puedencompletar el usuario y password, pero esto en un ambiente cliente servidor carecera de sentidoUna vez que se haya completado el Data Source Name, se esgoje la opcin de Terminar para que se creeel y User DSN.

    MANEJO DEL DB PROFILEEsta herramienta, que ya brevemente se discuti en la introduccin a Power Builder, da la oportunidad deconfugurar Profiles (= Perfiles), que vienen a ser como una vista que se tiene de una base de datos enparticular.

  • 8/2/2019 powerbuilder manual2

    8/26

    Los profiles se crean sea sobre un diriver nativo, o sobre un DSN creado mediante ODBC, permite tener(sobre la misma DB), diferentes enfoques para que diferentes analistas se conecten a la misma base dedatos pero con diferentes caractersticas de acceso a la misma. Esto aplica en casos de que una mismaestacin de trabajo tenga que ser compartida por diferentes analistas. Con esto queremos decir que desdePB se pueden crear vaios profiles sobre la misma base de datos.NOTA: si recien se ha cerrado el DSN, todava no aparece ningn perfil en el DB Profile, puesto queovbiamente no se he definido ninguno; pero en el Configure Data Base ya aparece en el DSN que sedefini. Tambin se puede destacar que si se borra en perfil el DSN an permanece

    Una vez que se ha determinado que existe el DSN al que se le quiere hacer el perfil se debe abrir el dbProfile.Los pasos para crear un perfil son los siguientes:

    Determinar el driver nativo o Odbc segn se quiere hacer el perfil Escoger New

    Uno de los parmetros ms importantes para desarrollar perfiles, es el Catlogo de tablas de PB.El catlogo de tablas, permite definir propiedad extendidas que entre otra cosa son para:

    Combos: (el no aparezca en un combo Bach -que es lo que est almacenado en la db- sino queaparezca Bachiller por ejemplo)

    Mscaras: Validaciones:

    El catlogo se crea bajo un Usuario comn, por lo que se dispone para varios analistas. El catlogo est

    compuesto por 5 tablas que se definen bajo el usuario que trabaja sobre el catlogo, puediendocompartirse como ya se dijo. En la lengeta CONNECTION, completar la siguiente informacin: Profile name: el nombre escogido para el perfil Data Source: que corresponde al DSN que le esthaciendo el perfil Deahabilitar el usuario y password En la lengeta SYSTEM, definir la siguiente informacin: (es aqu donde se crea el catlogo de cuentas) PB catalog table owner: el usuario -con derechos sobre la base de datos-, que ser propietario del

    catlogo. Table Criteria: es cdigo sql, que se pone sobre el catlogo que se va a definir. La ficha PREVIEW del cuadro Database Profile Setup muestra la sintaxis database Conection para

    establecer las propiedades de un objeto de transaccin. Se puede usar este sintaxis en el script (por

    ejemplo en el script del suceso Open de la aplicacin). La primera vez que se conecta a la base de datos y se tiene acceso a crear datos, se crean las 5 tablas

    del catlogoCabe recordar que el dueo de las tablas que se crean en el catlogo es el Dueo del Catlogo definidodesde del db Profile y por Default quedan en el DbSpace de System. -esto en el caso de Sybase-Por otra parte al borrar el perfil de la base de datos no se borran las tablas de que han creado.Si por algn motivo se pierden las tablas que conforman el catlogo, se pierden todas las referencias a laspropiedades extendidas que se tengan sobre un modelo en particular; por lo que hay por tanto que estarrespaldndolas como cualquier otra tabla importante del modelo. El catlogo solo se crea una vez.

    ARCHIVOS INIEs uno de los medios para conectarse a bases de datos a travs de cdigo. Presentan la caracterstica deque si se encuentran en el cliente se debe tener una logstica para distribuirlos a los dems clientes.Adems se debe tener mucho cuidado del lugar donde quedan los .ini puesto que como son archivos ascii,cualquier persona podra meter mano con dolo.El enfoque que se presenta como alternativo es tener un servidor que sirva como nexo entre los clientes yel servidor de base de datos; ambos enfoques se presentan en la siguiente figura; mostrando de diferentecolor el servidor que servira de enlace.Los archivos ini, como es conocido, trabajan por secciones; mismas que empiezan por un corchete ydentro de cada seccin se determinan las variables necesarias junto con sus valores.Un caso tpico de archivo .ini puede ser el siguiente[DATABASE]DBMS = ODBCDBPARM = ConnectString='dsn=Proyecto'

    USERID =DBPASS =LOGID =LOGPASS =SERVERNAME =

  • 8/2/2019 powerbuilder manual2

    9/26

    ;mismo que podra servir de enlace para conectar una aplcacin PB con un sistema de gestin de basesde datos.Donde:

    DBMS: es ODBC o el driver nativo del sistema gestor que se valla a usar DBPARM: puede contener toda la informacin concernniente a la conexin usando el parmetro

    ConnectString; es decir el DSN, Usuario y Password. USERID: repersenta el usuario DBPASS: representael password

    LOGID: LOGPASS: SERVERNAME: representa el nombre de servidor en cuestin.

    Configuracin del SQLCASe hace mediante una window, en un botn que tenga el cdigo necesario para la coneccin.El cdigo que podra presentarse en esta venatana se presenta a conticuacin:int nfile1sle_usuario.SetFocus()if Trim(sle_usuario.Text) = '' thenbeep(1)messageBox("Error","Usuario Invalido !",Exclamation!)sle_usuario.Text = ''

    sle_usuario.SetFocus()ReturnEnd ifif Trim(sle_clave.Text) = '' thenbeep(1)messageBox("Error","Clave Invalida !",Exclamation!)sle_clave.Text = ''sle_clave.SetFocus()ReturnEnd if//leer archivo labs.ini// FileOPen abre un archivo: StreamModel = leer hileras

    // Read = como solo lectura//retorna un nmero de archivo, si falla retorna -1nfile1 = FileOpen("c:\mis documentos\power builder\clase 03\labs.ini",StreamMode!,Read!)if nfile1 = -1 thenMessageBox("Error","No Existe Archivo *.INI",Exclamation!)Halt CloseelseFileClose(nfile1)End if//se leen los parametros del labs.ini//ProfileString permite recuperar parmetros de un .ini//SetProfileString permite modificar parmetros de un .ini// Lo que retorna el ProfileString, es una cadena. La cadena contenida en la variable de la seccin a la cualse le hace referencia.SQLCA.DBPARM = Profilestring("c:\mis documentos\power builder\clase03\labs.ini","database","dbparm","")//El comando anterior empieza a descargar el .ini://La instruccin anterior le dice que habra el archivo .ini en la seccin //database y la variable dbparm. //Lo que hace la instruccin anterior es//tomar el dbparm del del .ini y se lo pone al dbparm de SQLCA// La instruccin siguiente lo que hace es tomar todo lo contenido en la variable //DbParm de SQLCA(`ConnectString='dsn=Dsn_ejemplo') y quitarle la //ultima comilla, despus le agrega el contenido de lostextboxes (usuario y //password) y finalmente le asigna de nuevo la comilla que le quit.

    SQLCA.DBPARM = LEFT(SQLCA.DBPARM, LEN(SQLCA.DBPARM)-1)+";"+ &"UID="+trim(sle_usuario.text)+";" + &"PWD="+trim(sle_clave.text)+";'"//El resultado almacenado en SqlCa.Dbparm sera: ConnectString = `Dsn= proyecto; Uid=Nombre_Usuario; Pwd= Palabra_paso;'

  • 8/2/2019 powerbuilder manual2

    10/26

    //El resto del cdigo del SqlCa solo garantiza que el .ini es igual que el cdigo //del programa pera ya no esnecesario; exepto el SqlCa.DbmsSQLCA.DBMS = Profilestring("c:\mis documentos\power builder\clase 03\labs.ini","database","dbms","")SQLCA.DATABASE = Profilestring("c:\mis documentos\power builder\clase03\labs.ini","database","database","")SQLCA.USERID = Profilestring("c:\mis documentos\power builder\clase 03\labs.ini","database","userid","")SQLCA.DBPASS = Profilestring("c:\mis documentos\power builder\clase03\labs.ini","database","dbpass","")

    SQLCA.LOGID = Profilestring("c:\mis documentos\power builder\clase 03\labs.ini","database","logid","")SQLCA.LOGPASS = Profilestring("c:\mis documentos\power builder\clase03\labs.ini","database","logpass","")SQLCA.SERVERNAME = Profilestring("c:\mis documentos\power builder\clase03\labs.ini","database","servername","")//Esta lnea de cdigo garantiza que se haya escogido sea el driver nativo o la //conexin ODBC quecorresponda.If trim(SQLCA.DBMS) = "" THENMessageBox("Error","No Existe Archivo DBMS",Exclamation!)Halt CloseEnd IfSetpointer(Hourglass!)

    //Conect es un comando de sql incrustado, despus de esta sentencia PB le da el //control de la aplicacinpara la conexin con la base de datos al sistema gestor //que se haya escogido.// en PB todo el sql que se introduzca debe decir ... using SqlCa o la variable de //trasaccin que se tengadefinida para tal efecto.connect Using SQLCA; //no esta en PB pbScrit es un Sql Incrustado. ;//obligado internamente open odbc para que abra el //driversSetpointer(Arrow!)//La funcin SqlCode de SqlCA determina como se produjo la conexin con la //base de datos. //Los valores que retona son:// 0 cuando la conexin tubo xito// - 1 cuando existe algn problema en la base de datos// 100 cuando una consulta debi retornar un registro pero retorn //ms de uno.IF SQLCA.SQLCODE 0 THENbeep(1)messageBox("Error","-No hizo acceso a base datos !",Exclamation!)sle_usuario.Text = ''sle_usuario.SetFocus()returnElsemessageBox("OK","-Acceso Correcto Bienvenido !",Exclamation!)END IFw_entrada.hide()Open(w_cursores)//Fin de cdigo del evento cliked de la ventana entrada.

    Variables de TransaccinEn la introduccin al inicio de este manual, y en la seccin anterior ya se ha abordado el tema de lasvariables de transaccin; al menos de la que Power builder trae como Default (SQLCA). La StructuredQuery Language Comunication Area -rea de Comunicacin del Lenguaje Estructurado de Consultas-, essuficiente si nuestra aplicacin solo necesita comunicarse con una sola base de datos.En la tabla siguiente se pressentan las propiedades de los objetos de transaccin retornados por la basede datos.ATRIBUTO TIPO DE DATO DESCRIPCIN

    SqlCode Largo

    El xito o fallo del cdigo de la operacin SQL ms reciente:0 = xito100 = no retorna resultado (ms de un registro)

    - 1 = Error (se usa SQLDBCode para ver detalles)SqlNRows Largo El nmero de filas afectadasSQLDBCode Largo El codigo de error del vendedor de la base de datosSQLErrText Cadena El menasje de error del vendedor de la base de datosSQLReturnData Cadena El dato de retorno especfico de DBMS

  • 8/2/2019 powerbuilder manual2

    11/26

    Como ya se he dicho si nuestra aplicacin solo necesita conectarse a una base de datos con elTransaction que por defoul trae Powr Builder es suciente (=SQLCA); pero en los casos en que seanecesario que nuestras aplicaciones interacten con ms de una base de datos. El caso tpico aqu es elejemplo de los agentes de ventas; quienes portan su propia base de datos en su PC y al final del dapasan las transaccioes al servidor de la organizacin; aqu se debe (al final del da por ejemplo) estarconectado al mismo tiempo a la base de datos centralizada y la personal.Ya aqu estamos en necesidad de definir al menos una varialble de tranasccin ms aparte del SQLCA.Incluso podemos definir otro transaction diferente si no queremos usar el SQLCA, pero en realidad carece

    de sentido pues SQLCA trae ya implcito lo necesario para comunicarse con SQL.Definicin del transaction (mediante cdigo)Transaction MiTransactionMiTransaction = CREATE transactionMiTransaction.DBMS = 'ODBC' ... una vez creada hay que definir las varialbes de transaccin de igualforma que como se hace con la SQLCAEliminacin de la transactionUna vez que la transaction ha cumplido con su objetivo, se debe destruir la variable de transaccin paraliberar recursos del sistema.La eliminacin de la variable de transaccin se hace mediante el comando DESTROY.Ejemplo: DESTROY MiTransactionOrden Lgico:

    Para trabajar con una variable de transaccin que no sea la SQLCA, se debe seguir un orden especfico afin de no ocacionar problemas al usuario en tiempo de ejecucin:Pasos: Definir la variable de transaccin

    Conectarse al sistema de gestin

    Ejecutar el codigo necesario

    Desconectarse del sistema de gestin

    Destruir el transaction que se haya definido

    Manejo de menesAgregar un menLa forma ms prcita de hacer lo es mediente el pintor de men de la PowerBar. Aqu dentro de lasopciones ms destacadas que presenta son:

    Agergar un nuevo men Escoger una men ya existente en la librera actual (to modified it) Heredar un men de la librera actual Escoger una librera diferente para agregar un men que ya exista, mismo que se puede salvar como

    una men de la librera actual para luego heredarlo, modificarlo, etc.Trabajando con un nuevo men

    Insertar las barras principales:cada barra principal que se inserte en el nuevo men, ser capaz decontener como es lgico, elementos dentro de ella. Pero en primer lugar hay que darle un nombre a cadauna de ellas (ejemplo archivo, Edicin, ect). Esto se hace en el Men Bar Items. El cono insertde labarra de men, es quien nos ayuda en esta labor. Por otra parte el cono movees quien nos permitedesplazarnos entre las diferentes barras una vez stas ya definidas. Opcionalmente se pueden borrar

    barras ya perviamente definidas mediente el empleo del cono deleteque se encuentra en la misma barrade herramientas. Se pueden agregar otra barra tambin clicando a la par de la ltima barra que se tiene.. Elementos de cada barra: el siguiente paso es insertar las opciones de cada barra principal

    previamente definida; para esto nos valemos delMenu foren el que una vez que se alla escogido labarra correspondiente; el nombre de la misma se aadir al caption de Menu for (por ejemplo dir algoas como Menu For Archivo). La barra se puede escoger clicando sobre el ttulo de la misma o medianteel scroll que aparece en la parte posterios a stas.

    Ahora bien, una barra principal puede estar compuesta por un nmero indefinido de opciones dentro deella; por lo que lo que hay que hacer para agregar cada nueva opcin es dar sobre el textbox de laopcin actual una vez sta definida. Se pueden agregar dentro de cada barra tantas opciones como seanecesario. Una forma de desplazarse por las opciones de cada barra es con las direccionales o el uso delmouse, etc.

    Insercin de barras separadoras: para agregar una barra separadora dentro de un men en particularsolo se debe agregar un guin medio ( - ), en el lugar correspondiente al nombre de la opcin del menque se tenga escogido (en el nombre del Menu Object Text).

    Agregar ms niveles a una opcin de men determinada: es posible al igual que en otros lenguajesde programacin definir dentro de una opcin de men determinada otras opciones ms. El ejemplo

  • 8/2/2019 powerbuilder manual2

    12/26

    tpico de esto es la opcin Imprimir de un men Archivo que presenta dentro de ella algunas otrasopciones tales como definir impresora, imprimir docuemento, etc. En Power Builder hacer esto requieresolo de usar el cono Next Levelque se encuentra en la barra de herramientas; una vez hecho esto eldefinir las opciones de ese subnem se hace de la misma forma que se definieron en el nivel previo.Pueden existir tantos niveles como sea necesario. Se puede entonces desplazarse entre niveles con losconos Next Levely Prior Level.

    Definir teclas de acelerator y shortCut:es conveniente agregar a cada men sus respectivas teclas deacelerator y shortCut apegandose a un estndar. Para definir acelerator, se antepone un Ampersan (&) a

    alguna letra de la opcin a la que se le est agregando el acelerator. De esta forma el usuario podradesplegar la respectiva opcin del men mediante la combinacin de ALT + la letra que se hayaescogido como acelerator; los acelerators trabajan nivel a nivel; as que si por ejemplo se tiene una Acomo acelerator para archivo y una S para la opcin Salir del men archivo, si se quiera salirdelformulario en cuestin mediente teclas de acelerator, se debe oprimir primero ALT + A y luego ALT +S. Por otra parte para agregar shortCuts, se debe escoger la combinacin deseada de teclas en lalengeta ShortCur (aqu hay que asegurarse que el shortCut se le est agregando a la opcin de mendeseada). Un usario que desee por ejemlpo otener ayuda en linea que tpicamente se encuentra en elmen ayuda y en la seccin Help context de ste la puede accesar solo opriendo la tecla F1.

    Barra de herramientas:es la cuarta lenguega de las propiedades del men y trabaja en conjunto con lalengeta Pictures, en la toolbar se define el texto que puede o no aparecer sobre el cono que se defineen la lenguega Pictures.

    Cabe apuntar que el lengeta General(si la ventana es MDI, se puede definir un MDIMicroHelp el texto queaparece sobre el atatus bar) Cgido a las opciones del men:un men solo es funcional una vez que este posee el cdigo

    necesario para volver operativas todas sus definiciones. La forma de agregar cdigo a una opcindeterminada del men es clicando sobre el cono Script una vez que se haya escogido la opcin a laque se le desea agregar cdigo. Una vez dentro de la ventana de cdigo se debe escoger el evento queactivar dicho cdigo pues Power Builder posee ms de un evento que puede hacer posible la ejecucinde un cdigo en particular; este evento por lo general siempre ha sido el Clicked pero aqu existe laposibilidad de invocar otro evento que desencadene dicho cdogo.

    Un factor que es muy importante hacer notar es que el cdigo de los menes se debe hacer tan generalcomo se pueda, pues un men en particular puede ser heredado a otro formulario, aplicacin o inclusivelibreras; por lo que lo ideal sera por ejemplo tener en la aplicacin dentro de la que se piensa ejecutar el

    men un evento definido por el usuario que realice todo el trabajo de cdigo y dentro del cdigo del mensolo se debera llamar dicho evento. Por ejemplo tener definido un evento que realice todo el trabajo deimpresin para un caso en particular y despues dentro del codigo de la opcin Imprimir del men solollamar ese evento (definido bajo un nombre tambien estandar), de esta manera podremos usar un menen particular en cualquier aplicacin mediante la herencia.Copiar un menLos pasos necesarios para copiar un men de otra aplicacin se pueden presentar tal com sigue

    Escoger el cono Menu de la barra de herramientas. Esgoger la opcin Other del cuadro de dalogo que se presenta Escoger la librera adecuada segn el path donde se encuentre el menu Seleccionar el men deseado de la librera en mencin Mediante la opcin Save As del men archivo de Power Builder darle el nombre y uviccin adecuada

    dentro de la librera que se quiere pegar. En este punto ya existe un men independiente del que se tiene en la otra librera.

    Heredar un men:Para heredar un men Power Builder pregunta de cual librera se desea hacer la herencia y se salva. Paraagregarlo a una ventana, sta tiene que ser Main o MDI.La principal diferencia entre un men heredado y otro copiado esque este ltimo no se le puede modifcarnada previo, se puede modificar los cambios hechos en l, pero no se puede modificar nada que no hayasido hecho sobre l.Sucesos definidos por el usuarioSe pueden definir en Power Builder argumentos para sucesos no planeados. Generalmente se declaranlos argumentos para sucesos de definicin de usuario cuando se declara por primera vez el suceso, para

    ello se selecciona Declare| User Event. se escribe el nombre del suceso y luego se dan la lista deparmetros que el suceso incluir. Hay que declarar los argumentos antes de declarar el Event IDcasocontrario se provacar un error.

  • 8/2/2019 powerbuilder manual2

    13/26

    Ahora bien, una vez definido el nombre del evento [y sus argumentos], es posible agregarle el cdigo quelo vuelva operacional escogiendo dicho evento desde la ventana se Script del control en el que fuedeclarado el evento.El evento puede ser invocado como consecuencia de la activacin de un evento predefinido de un controlde ventana mediante un TriggerEvent.Uso del TriggerEvent: es un mtodo que poseen ciertos objetos visuales o de clase, el cual tiene comofinalidad ejecutar el cdigo del evento que se indique del control que lo invoque. Por ejemplo se puedeinvocar el cdigo de un evento predefinido o de un evento definido por el usuario; el ejemplo siguiente

    activara el evento clicked de cb_OK que es un botn decomando: cb_OK.TriggerEvent(Clicked!); adicionalmente puede tener una lista de parmetros msamplia pero la sintaxis que se describi es la minina para que este evento sea operativo

    Uso de treeviewsWindows usa este tipo de vistas para representar los directorios o subdirectorios de una unidad de discoen particularPasos para el uso de treeviews

    definir las figuras que se van a usar en la pgina de propiedades del treeview. (desde luego un arbol quesolo tenga texto no necesita usar figuras, pero es por esttica)

    codificar un PowerScript para aadir nudos al rbol, lo que probablemente se hace mejor con unafuncin y as se codifica el powerScrip una solo vez.

    Ejemplo de uso de treeviews

    En el ejemlpo siguiente se emplean tres funciones para procesar un treeview. La primera,of_add_to_treview (ver listado siguiente) declara un treeviewitem, que es un nudo de un arbol; luegorellena ese item y lo aade al treeview usando la funcin (intrseca) InsertItemLast.La definicin del encabezado de la funcin que posteriormente se ver es como sigue:

    Name: of_add_to_treeview Access: public Return: long Argumets: Atv_treeview treeview value

    As_label string value

    Aa_data any value

    Al_handle long value

    CUERPO DE LA FUNCION:Treeviewitem ltvi_newlong ll_newhandleltvi_new.label = as_labelltvi_new.data = aa_datall_newhandle = atv_treeview.insertitemlast(al_handle, ltvi_new)if ll_newhandle < 1 thenmessagebox('Treeview Error', &'InsertLastItem error on the oof_add_person ' + &'function of w_Treeview')End if

    return ll_newhandleSi un gestor de otro nodo se enva al treeview, InserItemLast aade el nuevo nudo como una sud-divisindel nodo gestor. Si se enva 0 como gestor, InsertLastItem aade el nuevo nudo como un nudo raiz (sinmatriz).En la ventana w_treeview (objeto dentro del cual se debe declarar la funcin anterior), la funcin deventanaof_buildtree (definida a continuacin), llama a of_add_to_ treeview para construir el arbolLa definicin del encabezado de la funcin que posteriormente se ver es como sigue:

    Name: of_buildtree Access: public Return: any Argumets: Tv_1 treeview value

    CUERPO DE LA FUCIONlong ll_company_handlelong ll_office_handlell_company_handle = &of_add_to_treeview (tv_1, "Make More Money, Inc.", 1, 0)

  • 8/2/2019 powerbuilder manual2

    14/26

    ll_office_handle = &of_add_to_treeview (tv_1, "East Coast Division", &2, ll_company_handle)of_add_to_treeview (tv_1, "Jack Horner", &1, ll_office_handle)of_add_to_treeview (tv_1, "Mary Q. Contrary", &2, ll_office_handle)ll_office_handle = &

    of_add_to_treeview (tv_1, "West Coast Division", &3, ll_company_handle)of_add_to_treeview (tv_1, "L. boo Peep", &1, ll_office_handle)of_add_to_treeview (tv_1, "I. John Henry", &2, ll_office_handle)ll_office_handle = &of_add_to_treeview (tv_1, "Intl. Division", &4, ll_company_handle)of_add_to_treeview (tv_1, "K. Cole", &1, ll_office_handle)of_add_to_treeview (tv_1, "Ali Babba", &

    2, ll_office_handle)of_add_to_treeview (tv_1, "Santa clause", &3, ll_office_handle)tv_1.SetLevelPictures(1,2,1,0,0)tv_1.SetLevelPictures(2,3,1,0,0)tv_1.SetLevelPictures(3,4,4,0,0)return ''por otra parte evento que es usado para capturar cualquir cambio en el arbol es el SelectionChanged enel se puede decir undo ha cambiado en usuario el nudo actual seleccionado. El script que sirve deejemplo se puede dictar as como sigue:TreeviewItem ltvi_olditemTreeviewItem ltvi_newitem

    string level_name[] = {"Company", "Sales oficce", "Employee"}string ls_messagegetitem (oldhandle, ltvi_olditem)getitem (newhandle, ltvi_newitem)if ltvi_olditem.level > 0 then //First time throughmessagebox("Treeview Change", &"Old Selection: " +&char(13) + level_name[ltvi_olditem.level] + &" Name:" + ltvi_olditem.label + &"~r" + level_name[ltvi_olditem.level] + &" ID: " + string(ltvi_olditem.data) +&"~r~rNewSelection: " + &"~r" + level_name[ltvi_newitem.level] + &" Name:" + ltvi_newitem.label + &"~r" + level_name[ltvi_olditem.level] + &" ID: " + string(ltvi_newitem.data))end ifen el anterior script los argumentos oldhandle y newhadle se han enviado al evento SelectionChanged.Con el cdigo precedente, cada vez que un treeview cambia los nudos, se aber un cuadro de mensagecon un texto que indica los cambios.

    Acceso a datos desde Power BuilderSi bien es cierto en este documento ya hemos tratado el el tema de las conexiones con modelos de datose incluso hemos dado las pautas para crear Transactions diferentes al SQLCA, el acceso a datos de esos

    modelos no se ha tocado y ha llegado el momento para hablar del tema.En reiterados casos ya se ha mencionado que se debera comprobar el SQLCode cada vez que se accedea la base de datos, si no es 0, se puede saber que existe un error y se puede actuar en consecuencia.Clusula SelectLa clusula seclect dentro de Power Builder tiene dos formas generales de poder ser usada:

  • 8/2/2019 powerbuilder manual2

    15/26

    Aquella que retorna solo un registro (donde SQLca.SQLCode = 0)

    Aquella donde se retorna ms de un registro (donde SQLca.SQLCode = 100), a este tipo de select se le considera

    con el uso de CURSORESSelect para un registro para los casos en que se est seguro de que la consulta al modelo de datos noretornar ms de un registro, la sintaxis del script en el PowerScript de PowerBuilder para la consulta sercasi igual a un SQL estandar excepto que cada campo que se retorne se debe descargaren una variabledel programa declarada previamente (no se permiten descargas a controles de ventana), dentro de laseccin INTO. A cada variable de descarga se le debe anteponer dos puntos ( :).

    El script siguiente determinara el nombre salario y departamento de trabajo para la persona que ms ganedentro de un modelo de datos de dos tablas, a saber Empleado y Departamento.//se definen las variables que servirande descargastring name, deplong salSELECT salario, nombre, desdep &INTO :sal, :name, :dep &FROM departamento D, empleado E &where D.coddep = E.coddep &and Salario = (select max(salario) &from empleado )using SQLCa; // se usa el transaction por default

    //si se presentara algn error...If sqlca.sqlcode 0 thenmessagebox ("ERROR", "Se present un error al intentar recuperar + & el registro" ,StopSign!)Return //...se retornaend if//si se tiene xito, entonces se presentan los resultados en los labelst_3.text = namest_5.text = string(sal)st_7.text = depSelect para ms de un registro (Cursores)en SQL embebido (= incrustado) se producir un error si setratade recuperar ms de una fila; aun as habr ocaciones que se quiera recuperar muchas filas que

    cumplan ciertos criterios, para este caso se debe usar un cursor. Un cursor es una tabla temporal que SQLestablece en todas las filas que cumplen ciertos criterios, as que se puede acceder a esas filas de una enuna.Uso de cursores

    El mandato declare: antes de usar un cursor, primero hay declararlo con el mandato DECLAREEjemplo:declare cursor_name

    La clasula select: una ves declarado lo que sigue es la clasula select que se apoye en el selectincluida la sentencia que determina cul transaction se usa.

    Ejemplo: cursor for select_statement using transaction; El mandato open: ahora lo que falta es solo abrir su posterior uso

    Ejemplo: open cursor_name; El mandato Fetch: despus de abierto el cursor hay que traer (= fetch) cada fila. Fetch es quien permite

    procesar cada fila, para ahora s por cada fila descargar los campos que haya recuperado la instruccinselect. Al igual que el select para un solo registro se debe descargar cada campo en una variable deprogama anteponindole a este dos puntos (:).

    Ejemplo: fetch cursor nameInto host_variable_list;

    El mandato clase: el ltimo paso de uso de un cursor es cerrarlo. El cierre de un cursor libera lamemoria usada por las tablas temporales y permite reabrir el cursor bajo nuevos criterios de seleccin

    Ejemplo: close cursor name;EJEMPLO COMPLETO DE CURSOR://se declara el cursor con su clasula selectDECLARE dep CURSOR FOR SELECT coddep &

    FROM DEPARTAMENTO &ORDER BY 1 DESC &USING SQLCA; //en la variable de transaccin////se declara la variable de descarga (= host variable -variable anfitrina-)

  • 8/2/2019 powerbuilder manual2

    16/26

    STRING DEPARTAMENTO//se abre el cursorOPEN dep;//se determina si el cursor se ha completado con xito (= 0), es hasta aqu que se evala //el resultado dela consulta (ojoel resultado no la consulta)IF SQLCA.SQLCode 0 THENMessageBox("Estado","Error abriendo cursor "+SQLCA.SQLErrText)RETURN

    END IF//descarga el primer registro en departamentoFETCH dep INTO :departamento;//seguir descargando mientras se retorne un registro (= mientras haya registros //por leer)DO WHILE SQLCA.SQLCode=0//agrega el resultado almacenado en la variable anfitriona a un //DropDownListboxddlb_1.AddItem(departamento)//Contina con el siguiente registro, si no existe SQLCA.SQLCode //retornar diferente de 0 y no se iterarde nuevo, evitando as el error.FETCH dep INTO :departamento;LOOPCLOSE dep;

    DataWindowsLos data windows son como controles limitados a los datos, incoppran interfaces de usuario tales comoeditores de una lnea y campos de texto estticos. Pero a diferencia de stos los DataWindows sontratados como un solo objeto.En algunos casos un Datawindow permite toda la sintaxis SQL en otros casos no toda.El pintor de datos windows tiene realmente tres ventanas principales. La priemera (= el SQL Painter), esdonde se define el dato fuente para el datawindows, as como su estilo de presentacin. La segundaventana (=diseador de DataWindows),es donde se delinea su formato usando argumentos de informe;hay 4 argumentos en la mayora de los DataWindows, a saber, encabezamiento, detalle, pie y resumen. Laultima ventanaes la de vista perliminar, donde se puede observar el DataWindows con los datosrecuperados desde el modelo de datos.Para abrir el Pintor de DataWindows, se realizan los siguientes pasos: Se pulsa el botn DataWindowsde la powerBar para abrir el cuador de dilogo Abrir DataWindows Se puede crear un nuevo DataWindows o modificar uno ya existente

    En el cuadrode dilogo New DataWindows se seleccciona elDataSource ypresentation Style, tambien se puedefijar laDataWindows OptionSQL Painter:Una vez que se ha escogido el tipode consultaque se pienza hacer y el estilo de presentacines horadeselecccionar las tablasque se desea que sean parte del control DataWindows que se est creando.Despus de seleccionar las tablas de la consulta se deben escoger los campos de esas tablas queaparecern el el resultado del DataWindows. Se puede adems escoger aqu el criterio de seleccin de loscampos.Diseador de DataWindos: (es diferente dependiendo del DataSource escogido)

    Una vez que se pulsado OK, se abre el diseador de DataWindows, internamente ya se tiene el estilo depresentacin que previamente se ha escogido; usando el ratn, simplemente hay que arrastrar los camposadnde se quiera que aparezcan dentrol del DataWindows.Una vez que se han hecho los ajustes necesarios dentro del diseador, es tiempo de guardar el trabajo;para ello se pulsa dos veces en el cuadro de control del men del pintor, PowerBuilder preguntar siefectivamente se desea guardar el trabajo realizado.NOTA: para mostrar solo un detalle a lavez, se debe correr hacia abajo las franjas de los diferentescomponentes (detail, summary, etc.)Se puede, en cualquier momento hacer un preview para ver como va quedando el resultado de laclausula select que se est diseando.Adems se puede, en el pintor de SQL, mediante el men: Design Convert to syntax, ver o modificar, elcdigo de la consulta que se tiene hasta el momento. Para volver al modo grfico se

    escoge Design convert to graphics.Columnas para la clusula Select escogidaSi se est en el diseador de DataWindows en le modo grfico, bajo las tablas que se tengan escogidas,aparecen varias lengetas propias de SQL, que se describen ahora:

  • 8/2/2019 powerbuilder manual2

    17/26

    Sort: permite hacer que la conslta aparezca en forma ordenada. Para ello, se escoge la columna por laque se quiere hacer el ordenamiento y se traslada hacia el campo que aparece a mano derecha de lasmismas; una vez aqu se puede escoger si el ordenamiento se desea hacer ascendiente odescendentemente.

    Where: condicin cual se desea que cumpla la consulta, se pueden usar adems de los conocidos Like,between, is, etc operadores de tipo relacional. Varias condiciones pueden estar unidas medianteoperadores lgicos.

    Es aqu donde podemos pasar parmetros trados del programa al DataWindow, los agregamos mediante

    el men:Design Retrieval Arguments...; de esta forma establecemos un vnculo entre el DataWindow y elprograma de aplicacin.Los agregamos a la clausula where como se agregan variables anfitrionas, es decir, se les antepone :.Para eleminar argumentos se escoge de nuevo Design Retrieval Arguments... y se elinina el argumento.Se puede elininar una condicin completa, escogiendo el boton derecho del mouse y clicando en Clear.

    Group: para agrupamientos Having: condicin del agrupamiento. Compute: son columnas calculadas para la consulta que se est haciendo. Sintax: es el cdigo de la consulta segn hasta el momento. (Desde aqu no se puede modificar)

    FiltrosSe definen mediante Rows Filter... Lo que hacen es ocultar las columnas que cumplan con la condicin delfiltro, pero no las elimina del DataWindow, por tanto no reducen el trafico en la red.

    NOTA: una vez que se da por OK en esta parte se entra al diseo del DataWindows,Se puede modificar la presentacin de los datos (pero no modificar el estilo de presentacin, pues estesolo se puede modificar con cdigo en RunTime), o incluso se puede mofificar el select que se hayaesgogido, mediante el uso del cono SQL de la PowerBar.Diseo de un DataWindos con varios segmentos (una factura)Los pasos iniciales son iguales, se debe crear un nuevo Datawindows para luego escoger el tipo deconsulta y la forma de presentacin de sta.Ahora bien, una factura tpica tiene varios componentes: Informacin del encabezamiento: situado en la parte superior; aqu la informacin a almacenar ser detalles comoel nmero de la factura, lugar de compra, fecha, nombre de la persona encargada de la compra, puesto dela persona

    que realice la compra.

    Informacin del detalle: consiste en el nmero de lnea, la descripcin del artculo, la cantidad ordenada y precio

    unitario y el precio total por lnea. Inforacin del pie: normalmente puede incluir comentarios, cargos varios por impuestos y la cantidad total a pagar.

    Entonces para introducir, mostrar o imprimir una factura, se deben crear tres datawindows; a saber lacabecera, el detalle y el pie.Por cada columna nmerica que se escoja Power Builder genera un sum() de la misma.

    Propiedades de actualizacin de un objeto DatawindowsPara ingresar a la propiedades de actualizacin de un DataWindows se debe escoger de laPowerBar: Rows | Update Properties...Ya una vez aqu, en un Datawindows, solo se puede actualizar una tabla a la vez, debido a queprobablemente se tengan seleccionado datos de diversas tablas, Power Builder no sabe cul es la que hayque actualizar.

    Lo primero es activar Allow Updatespara que los usuarios de la aplicacin puedan actualizar esteDataWindow. Luego se selecciona la tabla que se desea actualizar Table to UpdateA continuacin se pulsa sobre las columnas que se quieren actualizar de la tabla seleccionada.Tambien se pueden elegir opciones para la clausula Whereque el DataWindow utilizar en laactualizaciones o cancelaciones del mismo. Estas opciones son importantes en el supuesto de mltiplesusuarios, que pueden estr actualizando una misma tabla al mismo tiempo. Pulsando Key and Updatablecolumns, o bien Key and modified columnsse amplia la proteccin -un usuario no puede escribir sobreuna tabla que otro est actualizandoEn el Group de key modificationse dispone de opciones de actualizar Delete thenInsert o Update paracambiar el valor de la clave principal. En este group si se escoje delete then insert Power Builder primeroeliminar la tupla a la que se refiere y posteriormente har un insert con los nuevos valores insertados; sibien hay que considerar el efecto de actualizaciones y cancelaciones en cascada cuando se toma esta

    opcin. Usar Update para cambiar la clave puede ser ms rpido para actualizar, pero puede ser mslento para el proceso secuencial subsiguiente.Finalmente, se toma la clave principal (= clave nica) para la tabla que se est actualizando. Si se hadefinido una clave principal para la tabla actualizable, se pulsa primary Key y se deja a Power Builder quetome por si mismo la columnas de clave principal.

  • 8/2/2019 powerbuilder manual2

    18/26

    Pulsando OK se vuelve al pintor de DataWindow; una vez listo todo el proceso de diseo del DataWindow,ste puede ser guardado.Data sources: (aqu iremos describiendo cada uno conforme se necesiten)

    Quick select: solo permite relacionar tablas que tenga relacin directa; o sea, por medio de llavesforneas

    SQL select: permite cualquier tipo de relacin entre tablas incluso para aquellas en las que no existeninguna relacin

    Queries: es muy parecido al SQL select, la nica diferencia entre los dos es que se pueden

    emplear queriescomo una fuente de datos predefinida para distintos DataWindows en lugar de definir elSQL select en cada DataWindows. Una Query es como un SQL select reutilizable que se emplea paracontruir muchos DataWindows. Un DataWindows se puede incluso guardar como una Query en el pintorSQL dentro del pintor de DataWindows.

    External: cuando se usan fuentes de datosexternas para un Datawindows, generalmente se le dacontenido a ste por medio de PowerScript, toda vez que hay un SQL select asociado a l. Cuando seempieza la contruccin de un Datawindows usando una fuente de datos externa, se abre el cuadro dedilogo Result Set Description, se definen ah los campos y lo que son su tipo y su logitud, luego secontina la contruccin como si se estuviera un Quick Select o un SQL select como fuente de datos. LosDatawindows con fuentes de datos externas son tiles cuando se necesita mostrar o introducir datos queno estn almacenados en una base de datos relacional

    Stored procedure: son extremadamente populares para los DataWindows de solo-mostrar que pueden

    ser usados si el sistema de gestin de que contiene la base de datos los soporta. Algunas bases dedatos tienen procedimientos almacenados altamente eficientes. Con frecuencia se puede mejorar lavelocidad de la aplicaicin situando algunas de las sentencias SQL en estos procedimientosalmacenados. Se pueden usar Procedimientos almacenados dentro de DataWindows si y stos lo quedevuelven es una consulta Select.

    Estilos de presentacin: (aqu iremos describiendo cada uno conforme se necesiten) Freeform: se usa frecuentemente para las ventanas de entrada de datos. Normalmente solo se muestra

    una fila a la vez y no tiene informacin de encabezamiento ni de resumen. Es un DataWindows sinformato (Sin formato =Freeform).

    Este tipo de DataWindowsse uas para talbas nicas o entradas de datos de una solo lnea Tabular: muestra tpicamente varias filas de informacin a la vez. Es normal que este estilo tenga un

    segmento de encabezamiento que contenga los ttulos de las columnas (en vez de etiquetas en el

    segmentos de detalle, como en el caso de los estilo libre) tambin suele tener un pie de pgina y filas deresumen al final del informe. Una factura es un excelente ejemplo de un DataWindows tabular, ya qiemuestra muchas filas a la vez (lneas de la factura) y tiene informacin de encabezamiento (nombres declientes, compaias, fecha, etc.) as como una informacin de resumen (impuestos,de scuentos, total.).con este estilo de presentacin los ttulos de columnas aparecen en el segmento de encabezamiento,mientras que las columnas aparecen en el detalle. La nica diferencia entre un DataWindows de estilotablar y otro sin setilo es la forma de disponer los objetos (=columnas y texto) al crearlos.

    Compuesto: no se puede usar para mantenimiento CrossTab: se puede usar para mantenimento, la representacin es tipo matriz Graph: tipo grfico Group: no se puede usar para mantenimentos y se usa para agrupamientos Label: N-Up: si se puede usar par amantenimientos y aprovecha al mximo el papel cuando se pasa a

    impresin. Ole: para incrustados RTF: para formatos enriquecidos.

    Objetos informatizados: en DataWindows se usan para crear columnas que no estn presentes en latabla pero que se requieren para algn proceso o manipulacin por parte del usuario. Enel PainterBar est reprentado por un smbolo de +/= (+/=), una vez que se ha escogido el objetoinformatizado se debe escoger la parte del DataWindow en donde se quiere que aparezca el objeto y unavez hacho esto aparece la pgina de propiedades Compute Object y en ella se puede introducir unaexpresin para el objeto informatizado, como ya se detallar. Tambien se puede escoger el smobolo desumatoria (= ") pero aqu antes de escoger el objeto informatizado, se debe escoger alguna columna que

    sirva de referencia a la funcin que vamos a crear. Por defecto se crea un sum() para todas las columnasescogidas y la pone como summary sobre el Datawindows, pero lego de esto se puede situar en cualquierlugar, as como modificar la expresin que dar com resultado.Para modificar la expresin se debe escoger las propiedades del objeto informatizado y despus modifcarel texto Expresin por la expresin requerida. Pulsando el botn More en esa misma lengeta, se

  • 8/2/2019 powerbuilder manual2

    19/26

    pueden escoger una gran cantidad de funciones preconstuidas para dar formato a la expresin, solo hayque tener cuidado pues el formato de esas funciones difiere un poco de lo usual.Por ejemplo si para validar un If lo hacemos usualmete as: If then; en ese tip de funciones elformato esIf(cond, true, false); donde cond representa la condicin propiamente dicha con su consecenteposible resultado, trueespecifica el resultado a mostrar si se cumple la condicin y false el resultado amostrar si no se cumple.

    Objeto DataWindows # Control DataWindowsA veces esite confusin sobre la terminologa cuando se hablade DataWindows. Desde el inicio de este

    documento se ha mecionado la diferencia entre le objeto DataWindows (= todos los que se crean dede elcono de la PinterBar) y el control DataWindows. La lista siguiente puede aclarar alguna ambiguedad deldel tema

    Un objeto DataWindows es la que se pinta usando el pintor de DataWindows. No son visibles estosobjetos hasta que se han asociado a un control de ventana. Se los conoce con el nombre genrico deDataWindows (por ejemplo: crear un DataWindow para la entrada de datos de una tabla deartculos)

    Un control de DataWindows es un control de ventana, al que algunas veces se le llama DataWindow (porejemplo, aadir algn PowerScript al suceso de DataWindow ItemChanged). Estos controles noson tiles salvo que estn asociados a un objeto DataWindow.

    Un objeto de usuario de DataWindow es un control de DataWindow antecedente creado en el pintor deobjetos de usuario. Estos objetos tambien son conocidos como DataWindows (por ejemplo, se necesita

    heredar un DataWindows antecedente) o controles DataWindows Los objetos dataWindows muestan texto, figuras, columnas, etc. Dentro del pintor de DataWindow estos

    objetos son tambin objetos dentro de un DataWindow (por ejemplo, aadir un objeto informatizado aun Datawindow en particular)

    Asociacin de Controles DataWindow con ObjetosDataWindowEn los trminos ms simples se puede crear una ventana y luego dentro de ella ir creando controlesDataWindow y asociarles a cada control un objeto segn sea necesario. Opcionalmente se puede definirun DataWindow definido por el usuario de tipo objeto y asociarle a cada instancia de este tipo de control unbjeto DataWindow.NOTA: el sufijo para el objeto DataWindow es solamente D y para el control DataWindow se usa DW.Editar campos del DataWindowPara definir o revisar un estilo de edicin, basta con pulsar doble chlick sobre la columna del DataWindow

    que se quiere editar, luego ah se elige la ficha cual se quiere editar, existen varias entre las que podemoscitar: Edit: dentro de las propiedades ms importantes que podemos encontrar aqu est STYLE, donde se define elformato para la columna, por defecto esEDIT, que es un campo SLE, ademas entre los ms destacables podemos citar

    el DDDW, DDLB; ambos se discutirn el la siguiente seccin de DataWindows desplegables.

    Format: (= utilizacin de formatos de muestra), estos formatos son similares a los EditMask, la principal diferenciaes que los formatos de muestra cambian la forma en que el valor de una columna se muestra en un informe, mientras

    que los EditMask cambian la forma que los datos se introducen en el formulario. Si se est usando un formato de

    cadena hay que usar el signo @ para que se pueda mostrar cualquier carcter. En una columna numrica se usa elsigno #; en formatos numricos tambien se pueden introducir formatos en los que los nmeros negativos aparezcanen rojo: e.g: #,##0.00; [red] #,##0.00. cuando se introducen los datos en una columan estos no cambian hasta que el

    campo pierde la atencin.

    Validation: (utilizacin de reglas de validacin): evitan que una columna pierda el foco si el valor introducido noes adecuado. El texto introducido en la columna se recupera con la funcin gettext(), de ah en adelante se puede hacer

    la validacin necesaria y mostran un mensage en caso que se produzca un erro a la regla

    Expressions: (empleo de expresiones condicionales) supongamos que se desea cambiar el color de la columna siel valor en ella es menor de 10 por ejemplo. Para ellos se pulsa 2 veces sobre la propiedad color, con lo cual aparece el

    cuadro de dilogo Modify expression, donde se introduce la validacin correspondiente, que en este caso podra ser: if

    (nombre_columna < 10, rgb(255,0,0), 0) rgb red, green, blue

    Las dems lenguetas son comunes a todos los controles: general, font, pointer, etc.DataWindows desplegables

    Con frecuencia se necesitarn cajas de lista desplegables para contener valores desde las tablas delmodelo de datos. Es mejor poner una lista desplegable con los cdigos de los clientes a obligar al usuario

    a memorizar cada uno de los cdigos de todos los usuarios.Para que Power Builder pueda recuperar la lista despleglable desde una tabla, las listas se construyenusando los DataWondows desplegables. En lugar de usar un tabla de difcil cdigo, el Drop-DownDataWindow (=DDDW) recupera su lista de valores de datos y los muestra por medio de un DataWindow;por lo que el DDDW es un DataWindow descendiente o lo que es lo mismo un DataWindow dentro de otro.

  • 8/2/2019 powerbuilder manual2

    20/26

    Para aadir un DDDW el estilo de edicin de una columna lo primero que hay que hacer es crear elDataWindow usado para mostrar la lista de valores. Normalmente, los DataWindows se construyen con elestilo tabular. Primero se selecciona la columna de dato y muestra en la lista desplegable.Una vez definida la consulta que servir como soporte al DataWindows anidado se cancelan todos lostitulares de columna y todas las columnas que no se quieran mostrar. Supongamos que lo que deseamostrar el nombre de los empleado de una compaa X; si la clave primaria es el cdigo pues se eliminantodos los encabezados de columna adems del cdigo del empleado. Si lo que se desea es mostrar msde un valor (=contenido del DDDW) y no se desea que el Datawindow que contiene el DDDW pierda

    esttica(=definir una caja de texto de 50 char, para mostrar solo el cdigo), lo que se debe hacer esampliar el ancho del DDDW con relacin al Datawindow (=Width of DropDown), con esto se consegir queal clicar (=en tiempo de RunTime o Preview) sobre la columna que posea el DDDW sta se expanda demanera que muestra toda la informacin que se necesite.Aunque se elimine una columna en el diseador de DataWindow sta permanecer en el SQL Select y enel conjunto de resultados del DataWindow, pero no se ver nunca ms.El prefijo para este tipo de DataWindow es D_DDDWUna vez salvado el DataWindow, se vuelve al Item DataWindow, se selecciona una columna, se abren laspropiedades de edicin y se elige DropDownDW como estiloen la lenguega Edit.Hecho se debe editar el campo que contendra el DDDW. El estilo de este campo debe de serDropDownListBox. Aqu se predeterminan las propiedades del campo, se elige el Datawindow que sequiere asociar con esa columna (=el DDDW), despues de eligir esto, se pulsa sobre la columna de datos

    que se mostratar al usuario y luego el valor que se pasar al programa internamente. El valor del dato sesita en el bffer de datawindow cuando un valor de muestra se selecciona en la lista. Luego de esto, secompleta el resto de las propiedades del datawindow; stas son identicas a las de las cajas de lista (= yaque se dijo que un DDDW se un tipo de caja de lista). Lo nico que falta es pulsar OK.NOTA: Para ejecutar el DDDW hay que introducirle datos en la tabla a la que hace referenciaComo ya se dijo, obviamente el campo en el que se desplegarn los valores resultantes de la consultadebe ser un DropDownListBox.A los DataWindow desplegables se les llama tambin DataWindow descendientes (= Child DataWindow)

    Empleo del pintor DataBase para definir formatos de muestra, estilos de edicin y reglas devalidacin

    El en depositario de Power Builder para la base de datos se pueden guardar formatos de muestra, estilosde edicin y reglas de validacin, aplicables dentro de las propiedades de las columnas en los

    DataWindows.Para ello una vez habiendo escogido el cono DataBase en la Powerbar (sin seleccionar tabla alguna), seescoje en el men Disign la opcin deseada , a saber:

    Edit style maintenance Display format maintenance Validation maintenance

    Definicin de diferentes columnas por defectoSe pueden tambien definir estilos de edicin, formatos de muestra, reglas de validacin y valores pordefecto para las columnas, tanto en el pintor de datawindows como en el DataBaseDefinicin de valores por defecto usando el pintor de DataBase (= Propiedades extendidas): en elpintor de base de datos se abre la tabla (con lo que se abre el cuadro de dilogo Alter Table) y ah sedefinen las propiedades adecuadas. Es en este mismo cuadro de dilogo que podemos tambin usar losformatos de muestra, reglas de validacin, y estilos de definicin que definimos en la seccin anterior.Tambien es posible cambiar los valores por defecto, pulsando en botn derecho del mouse sobre lacolumna de la tabla y encogiendo aqu Properties.Fijacin una propiedad extendidaSe puede crear una propiedad extendida para luego agregarla a alguna columna de alguna tabla delmodelo de datos o bien esgoger la columna y acto seguido crear la propiedad extendida sobre esacolumna. Suponiendo que se ha previamente seleccionado una columna presionado el botn derecho delmouse y clicado sobre Properties, estos son lospasos que se deben seguir para crear una propiedadextendida:

    Abrir la lengeta Edit Style (si lo que se quiere es agregar una propiedad que ya existe solo se escoge y acabado el asunto)

    escoger New (para crear la propiedad) Deterninar el nombre para lapropiedad extendida (para poder agregarla luego a ms columnas) Escoger el estilo de presentacin que se desea para la propiedad. En este punto lo ms usual es

    escoger un DDDW para cargarle los valores de el obtenidos pero tambin se podra generar como uncheck o un boton de radio, etc. Vamos a partir del supuesto que se est generando sobre un DDDW

  • 8/2/2019 powerbuilder manual2

    21/26

    Escoger el DDDW que servir de soporte a la columna Escoger el valor que mostrar al usuario Escoger el valor que internamente se pasar al sistema de gestin Las dems propiedades son similares a otras ya antes descritas; en este caso a las de un DDLB.

    Si dentro de un DataWindow no se desea usar una propiedad definida a una columna, se escoge lacolumna (del DataWindow) y se va a las propiedades de la misma, ah se define el estilo de presentacinbajo el cual quiere mostrarse la columna.Eliminacin de una propiedad extendida

    Para ello se escoge el men Design Edit Style Maintenance ah se deternina cual propiedad quiere sereliminada o bien mofificada.NOTA: cuando se aade una definicin por defecto a la base de datos se aplicar solamente a losDataWindows que se creen en los sucesivo y no a los que ya estn creados. Para los ya existentes, sepuede usar la utilidad DataWindow Extended Attributes Synchronizer (DWEAS), para sincronizar laspropiedades de la columna del DataWindow con las de la columna de la base de datos.Definicin de valores por defecto usando las especificaciones de columna en Row:(sobre elDataWindow)seleccionando Rows| Column specifications..., es posible tambin fijas valores por defectopara las columnas en el dataWindows.Aqu es posible fijar el valor inicial, la expresin de validacin, un mensaje para validar y la columna de labase de datos relativa a la columna del Datawindow. Este cuador de dilogo es uno de los mejores mediospara manipular los valores por defecto.

    Resumen de DataWindows Paso 1 Origen Estilo Paso 2 Instruccin SQL Paso 3 Diseo del dataWindows

    Manipulacin de datos usando DataWindows IniciarCausa que un control Datawindow o almacen de datos use un objeto de transaccin que el programador elindique. El objeto transaccin provee la informacin necesaria para comunicarse con la base de datos.

    La sintaxis que se usa para iniciar es por lo general:nomre_dw.SetTansobject(nombre_transaccin);lo cual se indica en elevento open de la ventana donde est el control DataWindow; y lo que causa es como se dijo que seactive el objeto transaccin con relacin al control DataWindow. Recuperacin de datos en el DataWindowsAl usar la funcin Retrieve() de DataWindow se limpia el bfer de este y se edita un SQL Select deDatawindow para la base de datos. El conjunto de resultados retornados desde la base de datos sealmacena sobre el cliente en el bfer de DataWindow.Por ejemplo si se declarara un evento de usuario llamado ue_retrieve en un control DataWindow el cdigopordria ser como sigue:This . retrieve( )This . setfocus( )Si por el contrario se deseara llamar la funcin retrieve desde un botn de comando por ejemplo se podrausar:Nombre_dw.retrieve(); si se tuveran argumentos definidos cuando se diseo el DataWindow en laseccin Retreval Arguments..., los mismos se indican como argumentos de lafuncin nombre_dw.retrieve(lista_argumentos[,...])Si se incluye un argumento para la recuperacin y posteriormente se desean hacer actualizaciones sobreel resultado devuelto no es necesario indicar el where como argumento otra vez pues el data windowtrabaja con el resultado revuelto por el evento de recuperacin.NOTA: para modificar algn registro obtenido por el datawindow se modifica su valor directamente delresultado devuelto por el retrieve(). Luego en el evento que se tenga dispuesto para la actualizacin de labase de datos los cambios se harn permanentes.

    Insercin de filas en un DataWindowLa funcin InsertRow( ) de DataWindow aade una nueva fila al DataWindow antes de la fila especificada,si sta es cero, la nueva fial se aade al final del donjunto de resultado.

  • 8/2/2019 powerbuilder manual2

    22/26

    Un suceso de definicin de usuario tal como ue_insertrow, podra insertar una fila en el DataWindow conla llamada de funcin Insertrow(0). Se podra usar este mtodo para insertar una nueva lnea dentro deuna factura, con un cdigo como este:Long ll_rowLl_row = This . InsertRow(0)This . ScrollToRow(ll_row)This . SetColumn(1)This . Setfocus()

    Si se desea hacer la llamada a la funcin InsertRow, dentro de un boton de comando el cdigo a introducirsera algo como este:Long ll_rowLl_row = nombre_dw. InsertRow(0)Nombre_dw. ScrollToRow(ll_row)Nombre_dw. SetColumn(1)Nombre_dw. Setfocus()Si la funcin InsertRow se llama sin ninguna otra funcin, el usuario debe hacer el scroll hasta la fila quePowerBuider disoponga para tal efecto, es por ello que se usan las funciones scrollToRow, SetColumn, ySetFocus(). Cancelacin de filas en un DataWindow

    Es importante confirmar una peticin antes de cancelar una fila. Un cdigo como el que sigue sobre un

    evento definido por el usuario que podra llamarse ue_deleterow, sobre la ventana que contiene elDataWindowInt li_rcLi_rc = messaggeBox(`Delete requested', &`Are you sure you wnt to delete row' + &string(This.getRow()) + `?', &StopSign!, yesno!, 2)If li_rc = 1 thenThis . DeleteRow(0)End ifIf this . Rowcount() = 0 thenThis . event ue_insertRow()

    End ifSetfocus(This)Si se desea llamar la funcin deleteRow() desde un boton de comando la sintaxis puede ser como sigue:Nombre_dw.deleteRow(0), para eliminar la fila actual, o se especifica cual es la lnea que se deseaeliminar. Actualizacin de la base de datosLa funcin UpDate() de DataWindow actualiza la base de datos con los cambios efectuados en elDataWindow. Un evento de usuario que bien podra llamarse ue_update de un Control DataWindow conun cdigo como este podra cumplir esta funcinThis. Update()This . SetfocusSi la funcin se desea llamar desde un botn de comando el cdigo siguiente podra ser til:If nombre_dw.update() > 0 thenCommit using sqlca;If sqlca.sqlcode < 0 then...fall el commitEnd ifElseRollback using sqlca;End ifAqu es importante destacar que la funcin update() trabaja como se ha dicho sobre el objeto datawindowque se indique. Esta funcin devuelve dos valores 1 cuando tiene xito y -1 cuando fracasa; por lo que senecesita hacer permanentes los cambios en la base de datos mediante un commit y devolverla a us estado

    original mediante rollback si el commit falla. El update bien puede fallar por la intgridad de la base de datosya que antes del update todo se mantiene en un buffer y es hasta el update que Power Builder validacontra la base de datos.Lo que se puede hacer para evitar posibles fallos en la funcin Update() es traspasar la integridad de labase de datos hacia las validaciones de las columnas del DataWindows o a las reglas de validacin de las

  • 8/2/2019 powerbuilder manual2

    23/26

    columnas de una tabla, para de esta manera obtener un aviso en el momento de la violacin y no hastaque se ejecute el update().La funcin Print() de DataWindow imprime el contenido del bfer principal de DataWindow tal como sehaya formateado en el pintor de DataWindow. Acontinuacin se muestra el cdigo para un evento que bienpuede llamarse ue_PrintThis . accepText()This . print()This . setfocus()

    Driver NativoPower Builder no solo puede comunicarse son sistemas gestores por medio de conexiones ODBC; sinoque posee una serie de drivers nativos de diferentes sistemas gestores, a saber Informix, SQL Server,Oracle, Sybase, para hacer ms eficiente su comunicacin con los sistemas gestores que ya hemosmencionado.La configuracin de un perfil de driver Nativo es muy similar a la configuracin de un perfil para conexinmediante ODBC.Para crear un perfil mediante un dirver nativo, se escoge el cono de perfil de la PowerBar y se escoge elsistema de gestin con el que se desea que la aplicacin se comunique, una vez hecho esto, se escogeNew del men que se presenta.Con esto se consigue abrir el cuadro de dilogo Database Profie Setup. La principal diferencia entre stey uno para conexin ODBC es la lengeta conexin la cual pasamos a describir a continuacin:

    Profile Name Connect Information Sever nombre del servidor donde se encuentra instalada la base de datos Log Id un usuario vlido Password el password que corresponda al Log Id DataBase nombre de la base de datos (solo el nombre sin extensin) Language lenguaje que se desea usar en la comunicacin a SQL Server Other Isolation Level: nivel de aislamiento Autocommit mode: autocommit despues de cada transaccin Commit on disconnect: commit despues de que desconecte la aplicacin Prompt for database information: Select this checkbox to be prompted for connection information when

    creating or selecting a profile to access a database. Generate trace Select this checkbox to start the Database Trace tool in order to trace your connection.

    NOTA: Se puede trabajar por medio de driver nativo y adems tener un archivo .Ini para la conexin de nusuarios.La principal diferencia entre los preview de una conexin de Driver nativo y una con ODBC, es que endriver nativo no se hace uso del DBPARM, que en conexiones con ODBC, con una cadena de conexinpodamos almacenar todos los parmetros necesarios para realizar la conexin, almacenbamos elnombre del DSN, usuario, password, ect.Ejemplo de preview con ODBC:// Profile Perfil_empleadoSQLCA.DBMS = "ODBC"SQLCA.AutoCommit = FalseSQLCA.DBParm ="ConnectString='DSN=DSN_Empleado;UID=MakerTables;PWD=MakerTables;',PBCatalogOwner='MakerTables'"En cambio en el preview con dirver nativo se presenta una conexin como la siguiente:// Profile prf_Pubs_NativoSQLCA.DBMS = "MSS Microsoft SQL Server 6.x"SQLCA.Database = "pubs"SQLCA.ServerName = "Gerardo"SQLCA.LogId = "sa"SQLCA.LogPass = "**"SQLCA.AutoCommit = False

    SQLCA.DBParm = ""Es ovbio, sin embargo lo apuntamos, en un ambiente de cliente servidor, tanto el usuario como elpassword se deben cargar en RunTime.

    Anlisis de la aplicacin Clase10

  • 8/2/2019 powerbuilder manual2

    24/26

    La estructura general de la aplicacin es tres ventanas (=w_ entrada, w_principal y w_mant), dos menes(m_principal y m_mantenimiento -heredado de m_principal-), una estrucuctura -que en buena medida esparte fundamental de la aplicacin- y varios data windows.Por otra parte la idea que est detrs de la aplicacin es con solo un par de ventanas como lasmensionadas, poder dar mantenimento a todas las tablas que una aplicacin puedad tener, mediante eluso de funciones propias de Power builder que permiten entre otras cosas crear las ventanas que senecesiten en tiempo de ejeuccin, pudiendo de esta manera eliminarlas, tambien en tiempo de ejecucin,de una manera completamente transparente al usuario.

    Estructura: param_mantEst compuesta por dos campos de tipo string: data object: es el nombre del objeto data windows que se usara para captura Title: es el titulo que se desea para la ventana del mantenimiento

    En estas aplicacin se posible tener abiertas (al mismo tiempo) diferentes ventanas del mismo tipo; esdecir, diferentes ventanas por ejemplo para darle mantemimiento a una tabla de empleados al mismotiempo. Es bajo este supuesto que se declara en la ventana w_principal, como varialbe de instancia,un arreglo del tipo w_mantFuncin: wf_abrir_mant ventana w_principalLo que pretende es abrir una ventana, creada dinmicamente del arreglo de ventanas explicado antes,para dar mantenimento a una tabla en particular que pudiera ser cualquiera del modelo de datos, que estrespaldada en una