Desarrollo de Sistemas de Gestión Manual Instructivo Setiembre

Anuncio
PowerBuilder
Sistemas de Gestión
Curso de Programación (Power Builder)
Desarrollo de Sistemas de Gestión
Manual Instructivo
Setiembre, 2011
Asunción - Paraguay
Prog. Rodrigo Velázquez
1
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Introducción
Prog. Orientada a Objetos:
La programación orientada a objetos (POO) es un modelo
de programación que utiliza objetos, ligados mediante mensajes, para la solución de
problemas. Puede considerarse como una extensión natural de la programación
estructurada en un intento de potenciar los conceptos de modularidad y reutilización de
código.
Es una técnica de programación que aumenta la velocidad
de desarrollo de los programas y hace que su
mantenimiento sea más fácil al volver a utilizar “objetos”
que tienen comportamientos, características y relaciones
asociadas con el programa. Los objetos son organizados
en grupos que estén disponibles para la creación y
mantenimiento de aplicaciones.
La programación orientada a procedimientos clásica
presenta ciertos problemas que han ido haciéndose cada
vez más graves, a medida que se construyan aplicaciones
y sistemas informáticos más complejos.
Es difícil modificar y extender los programas, pues suele
haber datos compartidos por varios subprogramas, que
introducen interacciones ocultas entre ellos.
Es difícil mantener los programas. Casi todos los sistemas
informáticos grandes tienen errores ocultos, que surgen a
la luz hasta después de muchas horas de funcionamiento.
Es difícil reutilizar los programas. Es prácticamente
imposible aprovechar en una aplicación nueva las
subrutinas que se diseñaron para otra.
La programación orientada a objetos (OOP, por las siglas
inglés Object-Oriented Programming) es una nueva forma
de programar que proliferó a partir de los años ochenta y
trata de encontrar solución a estos problemas utilizando los
siguientes conceptos:
Objetos.
Entidades complejas provistas de datos (propiedades, atributos) y comportamiento
(funcionalidad, programas, métodos). Corresponden a los objetos reales del mundo que
nos rodea. Un objeto es una forma de comunicación con el usuario (por ejemplo, una
ventana o un menú). Cada objeto tiene atributos que defíne su apariencia y
comportamiento. Por ejemplo, los atributos height y width para un CommandButton definen
su apariencia, donde los atributos; visible y enabled definen su comportamiento.
Clases.
Conjunto de objetos comparten propiedades y comportamientos. Tipo de objetos definido
por el usuario. Ej. Windows, Menús, controles, etc.
Herencia.
Las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de
clasificación. Los objetos heredan las propiedades y el comportamiento de todas las clases
a las que pertenecen.
Encapsulamiento.
Cada objeto está aislado del exterior, es un módulo natural, y la aplicación entera se
reduce a un agregado o rompecabezas de objetos. El aislamiento protege a los datos
asociados a un objeto contra su modificación por quien no tenga derecho a acceder a ellos,
eliminando efectos secundarios e interacciones.
Polimorfismo.
EL polimorfismo permite que una misma operación pueda llevarse a cabo de forma
diferente en clases diferentes, dependiendo de la referencia del objeto y el número de
argumentos. Por ejemplo la operación mover, es distinta para una pieza de ajedrez que
para una ficha de damas, pero ambos objetos pueden ser movidos. Una operación es una
acción o transformación que realiza o padece un objeto.
Prog. Rodrigo Velázquez
2
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Evento.
Es un suceso en el sistema (tal como una interacción del usuario con la máquina, o un
mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje
adecuado al objeto pertinente. También se puede definir como evento, a la reacción que
puede desencadenar un objeto, es decir la acción que genera.
Cuando el usuario selecciona un objeto o ingresa/modifica información en un objeto, ocurre
un evento. Los eventos pueden ocurrir para muchos objetos (aplicaciones, ventanas,
controles, etc.). Un evento ocurre cuando el usuario ejecuta una acción con el ratón o el
teclado. Los eventos también pueden ser provocados por declaraciones en PowerScript y
por el sistema mismo. Los eventos comunes incluyen:
 Click
 DoubleClicked
 Modified
 Open
 Close
 GetFocus
 LoseFocus
 SelectionChanged
¿Qué es Power Builder?
Una Aplicación puede
contener:
PowerBuilder es una herramienta de desarrollo de software
que permite construir variados tipos de sistemas y
aplicaciones. Es una herramienta que integra el grupo de
los productos “Sybase” que juntos proveen las
herramientas necesarias para desarrollar aplicaciones
cliente/servidor y aplicaciones web.
* Una interfaz de Menús, ventanas, controles con los
cuales el usuario interactúa directamente con una
aplicación. Básicamente Objetos, eventos y script.
* Procesamiento, eventos lógicos, funciones y código
conteniendo la lógica del negocio, reglas de validación y
otros procesamientos. PowerBuilder permite codificar el
procesamiento lógico como parte de la interfaz de usuario
ó en módulos llamados “custom class user object”
* Acceso y Administración de Bases de Datos.
* Apoyo para intercambio Dinámico de Datos (DDE:
Dynamic Data Exchange), Bibliotecas de Enlace Dinámico
(DLL: Dynamic Link Libraries), Objetos Incrustados (OLE:
Object Linking and Embeddign), Texto ASCII.
* Apoyo para importación y Exportación de formatos de
archivos populares.
Arquitectura Cliente/Server: Una aplicación que utiliza la arquitectura cliente/servidor
requiere de servicios de una base de datos servidora a
través de sentencias SQL. La base de datos puede
localizarse virtualmente en cualquier lugar. Los mensajes
son traspasados entre el cliente y el servidor. Una vez que
los datos requeridos han sido traspasados al cliente, el
procesamiento toma lugar al nivel de cliente. Los datos
pueden estar disponibles para muchos usuarios, pero el
procesamiento tiene lugar localmente.
Arquitectura Web:
Prog. Rodrigo Velázquez
Esta arquitectura incluye lo que se denomina Web Forms
Applications que se desarrolla para servidores IIS usando
la tecnología ASP.NET. Esta arquitectura utiliza la
tecnología ASP.NET.
Esto tiene una arquitectura de “tres hileras”, con el cliente
“navegador” como el frontal, y los componentes
PowerBuilder sobre el servidor IIS como la hilera media. La
hilera de base de datos permanece inalterada.
3
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Programación de Eventos:
En una aplicación cliente, los usuarios controlan lo que
sucede por la acción que ellos eligen. Por ejemplo, cuando
el usuario hace click sobre un botón, elige un ítem de
menú, o ingresa dato en un cuadro de texto, uno o más
eventos son inducidos. El programador sólo escribe el
código que especifica el procesamiento que se debe
realizar cuando el evento es inducido.
Las ventanas, los controles, y los demás componentes que
el programador puede crear con PowerBuilder, tiene un
conjunto de eventos predefinidos. Por ejemplo, cada botón
tiene un evento “clicked” asociado con él, y cada cuadro de
texto tiene un evento “modified” asociado. En la mayoría de
los casos, los eventos predefinidos son los más
necesarios, sin embargo, en algunas situaciones, el
programador también puede definir sus propios eventos.
Workspaces y Targets:
El significado de workspace es espacio de trabajo y el
significado de target es destino
En Power Builder, se trabaja con uno o más targets en un
workspace. Se pueden agregar tantos targets como se
necesite, abrir y editar objetos en múltiples targets, y
construir y distribuir varios targets a la vez.
Web Target:
Una aplicación Web que puede contener todos los
elementos que se necesite para construir un sitio web archivos HTML, scripts, imágenes, componentes que se
descargan – o una aplicación JavaServer Pages (JSP).un
Web target además contiene configuraciones para
construir opciones, realizar conexiones a base de datos y
distribución.
La capacidad de crear Web Targets está disponible
únicamente en la versión Enterprise de Power Builder
(Enterprise Edition)
Una aplicación es una colección de objetos. Power Builder
provee de diversos tipos de objetos, inclusive objetos
gráficos tales como ventanas, menús, botones y los
objetos no visuales tales como los datastore, exception y
objetos de transacción. En un Web Target, el objeto con el
que se trabaje incluye páginas HTML, imágenes y hojas de
estilo.
Librerías:
Todos los objetos o controles que se crean en Power
Builder se guardan en una o más librerías asociadas con la
aplicación (que están formadas por uno o más de dichos
objetos y controles que estarán agrupados en archivos de
extensión PBL), cuando se ejecutan las aplicaciones,
Power Builder recupera los objetos de las librerías Pintores
y editores.
Algunas herramientas que se usen para editar o crear
objetos y controles se les llama Pintores (Painters). Por
ejemplo, se puede crear una ventana en el pintor ventana.
Dentro del pintor de ventanas se puede definir las
propiedades de las mismas, agregar controles tales como
botones y etiquetas, crear miniprogramas (scripts) usando
Power Script para la ventana y para los controles que la
misma contenga con el fin de instrumentar la funcionalidad
que se desee obtener.
Prog. Rodrigo Velázquez
4
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Power Builder proporciona pintores para ventanas
(windows), menús, DataWindow objetos, objetos visuales y
no visuales definidos por el usuario, funciones, estructuras,
base de datos, data pipelines, y la aplicación en sí. Para
cada uno de estos tipos de objetos, habrá también un
editor de código en el que se puede modificar el código
directamente.
Para webs, existen editores especializados para HTML y
archivos JSP, frames sets, y hojas de estilo.
Datawindow:
Las aplicaciones que se construyen giran alrededor de la
organización de los datos. Con Power Builder se puede
definir objetos DataWindow para recuperar, mostrar y para
las operaciones de actualización de datos.
Aquí nos encontramos con dos connotaciones el control
Data Window y el objeto Data Window. El segundo será
de gran uso para enlazar los requerimientos del control
data Window, el cual se crea desde este ícono.
Target Application:
Objeto almacenado en una biblioteca
La colección de objetos que constituyen la aplicación. La
aplicación define una o más bibliotecas en la cual se
almacenan todos los objetos relacionados.
En PowerBuilder, siempre se desarrolla en el contexto de
la aplicación. Se puede asociar otros objetos, tales como
ventanas. menúes, etc., con la aplicación.
La definición del objeto aplicación está constituida por
varios componentes: Definición de la aplicación.
Template Application:
Se usa el wizard del target Template Application para crear
una plantilla de aplicaciones basada en PowerScript. Se
puede usar esta plantilla para iniciar la aplicación, en lugar
de tener que crear todos los objetos desde el principio. Si
la aplicación requiere una conexión a un EAServer o a una
base de datos, el wizard automáticamente crea un objeto
Conection.
En el wizard Template Application, se puede seleccionar
uno de los dos tipos de aplicación : MDI Application y SDI
Application.
Los MDI Application:
Si se selecciona MDI Application with MicroHelp en el
wizard Template Application, el wizard automáticamente
generará la interfaz y codificación para una aplicación
básica Multiple Document Interface (MDI) que incluye estos
objetos:
Application object
Frame window
Frame menú
Base sheet window
Sheet menú
Sheet menú service object
Sheet windows
About window
Toolbar window
Connection service object (si la conexión a la base de
datos es necesaria o al EAServer)
Project object (optional; puede ser creada después, usando
el Wizard del objeto Project)
Se puede ejecutar la aplicación MDI inmediatamente
presionando el botón Run en el PowerBar.
Prog. Rodrigo Velázquez
5
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Se pueden abrir hojas, mostrar la ventana About, y
seleccionar items desde el menú. Se puede entonces usar
la aplicación como un punto de inicio para continuar el
desarrollo de la aplicación MDI. El To-Do List puede
ayudarte a hacer esto.
Los SDI Application:
En el wizard Template Application, se puede también
seleccionar para crear un SDI application. Un SDI
application tiene una sola ventana principal con un menú y
una ventana de Acerca de. Si la aplicación requiere una
conexión a una base de datos, el wizard automáticamente
crea un objeto Connection.
Funciones:
Power Script proporciona un muy variado grupo de
funciones pre definidas que se usan para actuar sobre los
objetos y controles de una aplicación. Hay funciones para
abrir una ventana, cerrar la misma, habilitar un botón,
recuperar datos, actualizar una base de datos así por el
estilo.
Se puede además definir funciones propias para que
procesen de manera particular una aplicación.
Puede utilizar las funciones de PowerScript para:

Manipular objetos, números y texto

Procesar fechas y horas

Imprimir informes

Ejecutar Intercambio Dinámico de Datos (DDE)

Manipular archivos de texto para entrada y salida
Funciones Predefinidas:
Prog. Rodrigo Velázquez
6
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Painters de PowerBuilder.
Painters
Uso
Application
Editar el objeto aplicación. También especificamos aquí la lista de las pbl que van a
componer nuestra aplicación. Seleccionar el ícono de la aplicación.
Project
Generar los ejecutables una vez que la aplicación está terminada.
Window
Diseño visual de las ventanas y también donde incluiremos una parte muy importante
del código de la aplicación.
User Object
Diseño de los objetos reutilizables. Métodos reutilizables o conjuntos de controles,
siendo estos visuales o no-visuales
Menu
Generación de los menús que después podremos asociar a una o más ventanas.
Structure
Estructuras de datos (del tipo utilizado en el lenguaje C) globales a la aplicación.
Function
Funciones globales a la aplicación.
Datawindow
Diseño de los formularios asociados a una consulta SQL en sus diversos formatos
(Monoregistro, tabular, hoja de cálculo, etc). Punto fuerte de PowerBuilder.
Query
Consultas SQL que guardamos para usar varias veces (generalmente poco utilizado).
Pipeline
Traspaso de datos desde una tabla a otra en la misma base de datos o en dos
diferentes. Muy útil, ya que ahorra teclear sentencias SQL muy complejas. Podemos
utilizarlos manualmente para hacer traspasos de datos de una aplicación antigua a
otra nueva o llamarlo desde un programa PowerBuilder que realice traspasos
automáticos.
Database
Diseño de la base de datos. Podemos prescindir de este painter y utilizar las
herramientas propias de la base de datos si queremos.
Library
Crear librerías, mover objetos de una a otra, borrar objetos, recompilar el código
cuando ha habido modificaciones en herencias intermedias son algunas de la
funciones de este painter.
Prog. Rodrigo Velázquez
7
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Datawindow.
Los datawindow son como controles limitados a los datos, incorporan interfaces de usuario
tales como editores de una línea y campos de texto estáticos. Pero a diferencia de éstos
los DataWindows son tratados 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 vistas principales.
La primera (el SQL Painter), es donde se define el dato fuente para el
datawindows, así como su estilo de presentación.
La segunda ventana (diseñador de DataWindows), es donde se delinea su
formato usando argumentos de informe; hay 4 argumentos en la mayoría de los
DataWindows, encabezamiento, detalle, pie y resumen.
La última ventana es la de (vista preliminar), donde se puede observar el
DataWindows con los datos recuperados desde el modelo de datos.
Para abrir el Pintor de DataWindows, se realizan los siguientes pasos:
1. Se pulsa el botón New de la powerBar para abrir el cuadro de diálogo general y
en la solapa DataWindows se selecciona el tipo de datawindow.
2. Se puede crear un nuevo DataWindows o modificar uno ya existente
3. En el cuadro de diálogo New DataWindows se seleccciona el DataSource y
presentation Style.
SQL Painter.
Una vez que se ha escogido el tipo de consulta que se desea hacer y el estilo de
presentación es hora de seleccionar las tablas que se desea que sean parte del control
DataWindows que se está creando.
Después de seleccionar las tablas de la consulta se deben escoger los campos de esas
tablas que aparecerán en el resultado del DataWindows. Se puede además escoger aquí
el criterio de selección de los campos.
Diseñador de DataWindows: (es diferente dependiendo del DataSource escogido).
Una vez que sea pulsado OK, se abre el diseñador de DataWindows, internamente ya se
tiene el estilo de presentación que previamente se ha escogido; usando el ratón,
simplemente hay que arrastrar los campos adónde se quiera que aparezcan dentro del
DataWindows.
Una vez que se han hecho los ajustes necesarios dentro del diseñador, es tiempo de
guardar el trabajo; para ello se pulsa dos veces en el cuadro de control del menú del pintor,
PowerBuilder preguntará si efectivamente se desea guardar el trabajo realizado.
NOTA: para mostrar solo un detalle a la vez, se debe correr hacia abajo las franjas de los
diferentes componentes (detail, summary, etc.).
Se puede, en cualquier momento hacer un preview para ver cómo va quedando el
resultado de la cláusula select que se está diseñando.
Además se puede, en el pintor de SQL, mediante el menú: Design  Convert to syntax,
ver o modificar, el código de la consulta que se tiene hasta el momento. Para volver al
modo gráfico se escoge Design  convert to graphics.
Columnas para la cláusula Select escogida
Si se está en el diseñador de DataWindows en el modo gráfico, bajo las tablas que se
tengan escogidas, aparecen varias lengüetas propias de SQL, que se describen ahora:
 Sort: permite hacer que la consulta aparezca en forma ordenada. Para ello, se escoge
la columna por la que se quiere hacer el ordenamiento y se traslada hacia el campo que
aparece a la mano derecha de las mismas; una vez aquí se puede escoger si el
ordenamiento se desea hacer ascendente o descendentemente.
 Where: la condición cuál se desea que cumpla la consulta, se pueden usar además de
los conocidos Like, between, is, etc, operadores de tipo relacional. Varias condiciones
pueden estar unidas mediante operadores lógicos.
Prog. Rodrigo Velázquez
8
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Es aquí donde podemos pasar parámetros traídos del programa al DataWindow, los
agregamos mediante el menú: Design  Retrieval Arguments...; de esta forma
establecemos un vínculo entre el DataWindow y el programa de aplicación.
Los agregamos a la cláusula where como se agregan variables anfitrionas, es decir, se les
antepone “:”. Para eliminar argumentos se escoge de nuevo Design  Retrieval
Arguments... y se elimina el argumento. Se puede eliminar una condición completa,
escogiendo el botón derecho del mouse y clicando en Clear.
 Group: para agrupamientos
 Having: condición del agrupamiento.
 Compute: son columnas calculadas para la consulta que se está haciendo.
 Sintax: es el código de la consulta según hasta el momento. (Desde aquí no se puede
modificar)
Filtros
Se definen mediante Rows  Filter... Lo que hacen es ocultar las columnas que cumplan
con la condición del filtro, pero no las elimina del DataWindow, por tanto no reducen el
tráfico en la red.
NOTA: una vez que se da por OK, en esta parte se entra al diseño del DataWindows,
Se puede modificar la presentación de los datos (pero no modificar el estilo de
presentación, pues éste sólo se puede modificar con código en RunTime), o incluso se
puede modificar el select que se haya escogido, mediante el uso del ícono SQL de la
PowerBar.
Propiedades de actualización de un objeto Datawindows.
Para ingresar a las propiedades de actualización de un DataWindows se debe escoger de
la PowerBar: Rows | Update Properties...
Ya una vez aquí, en un Datawindows, sólo se puede actualizar una tabla a la vez, debido a
que probablemente se tengan seleccionado datos de diversas tablas, Power Builder no
sabe cuál es la que hay que actualizar.
Lo primero es activar Allow Updates para que los usuarios de la aplicación puedan
actualizar este DataWindow. Luego se selecciona la tabla que se desea actualizar Table
to Update
A continuación se pulsa sobre las columnas que se quieren actualizar de la tabla
seleccionada.
También se pueden elegir opciones para la cláusula Where que el DataWindow utilizará en
la actualizaciones o cancelaciones del mismo. Estas opciones son importantes en el
supuesto de múltiples usuarios, que pueden estar actualizando una misma tabla al mismo
tiempo. Pulsando Key and Updatable columns, o bien Key and modified columns se
amplía la protección –un usuario no puede escribir sobre una tabla que otro esté
actualizando
En el Group de key modification se dispone de opciones de actualizar Delete then Insert
o Update para cambiar el valor de la clave principal. En este grupo si se escoge delete
then insert Power Builder primero eliminará la tupla a la que se refiere y posteriormente
hará un insert con los nuevos valores insertados; si bien hay que considerar el efecto de
actualizaciones y cancelaciones en cascada cuando se toma esta opción. Usar Update
para cambiar la clave puede ser más rápido para actualizar, pero puede ser más lento para
el proceso secuencial subsiguiente.
Finalmente
Prog. Rodrigo Velázquez
Se toma la clave principal (clave única) para la tabla que se
está actualizando. Si se ha definido una clave principal
para la tabla actualizable, se pulsa primary Key y se deja
a Power Builder que tome por sí mismo las columnas de
clave principal.
Pulsando OK se vuelve al pintor de DataWindow; una vez
listo todo el proceso de diseño del DataWindow, éste
puede ser guardado.
9
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Data sources.
 Quick select: solo permite relacionar tablas que tenga relación directa; o sea, por
medio de llaves foráneas
 SQL select: permite cualquier tipo de relación entre tablas incluso para aquellas en las
que no existe ninguna relación
 Queries: es muy parecido al SQL select, la única diferencia entre los dos es que se
pueden emplear queries
como una fuente de datos predefinida para distintos
DataWindows en lugar de definir el SQL select en cada DataWindows. Una Query es
como un SQL select reutilizable que se emplea para construir muchos DataWindows. Un
DataWindows se puede incluso guardar como una Query en el pintor SQL dentro del pintor
de DataWindows.
 External: cuando se usan fuentes de datosexternas para un Datawindows,
generalmente se le da contenido a éste por medio de PowerScript, toda vez que hay un
SQL select asociado a él. Cuando se empieza la construcción de un Datawindows usando
una fuente de datos externa, se abre el cuadro de diálogo Result Set Description, se
definen ahí los campos y los que son su tipo y su longitud, luego se continúa la
construcción como si se estuviera un Quick Select o un SQL select como fuente de datos.
Los Datawindows con fuentes de datos externas son útiles cuando se necesita mostrar o
introducir datos que no están almacenados en una base de datos relacional
 Stored procedure: son extremadamente populares para los DataWindows, que
pueden ser usados si el sistema de gestión contiene la base de datos que los soporta.
Algunas bases de datos tienen procedimientos almacenados altamente eficientes. Con
frecuencia se puede mejorar la velocidad de la aplicación situando algunas de las
sentencias SQL en estos procedimientos almacenados. Se pueden usar Procedimientos
almacenados dentro de DataWindows, y éstos lo que devuelven es una consulta Select.
Estilos de presentación.
 Freeform: se usa frecuentemente para las
ventanas de entrada de datos. Normalmente sólo se
muestra una fila a la vez y no tiene información de
encabezamiento ni de resumen. Es un DataWindows
sin formato (Sin formato = Freeform).
Este tipo de DataWindows se usa para tablas únicas
o entradas de datos de una sola línea
 Tabular: muestra típicamente varias filas de
información a la vez. Es normal que este estilo tenga
un segmento de encabezamiento que contenga los
títulos de las columnas (en vez de etiquetas en el segmentos de detalle, como en el caso
de los estilo libre) también suele tener un pie de página y filas de resumen al final del
informe. Una factura es un excelente ejemplo de un DataWindows tabular, ya que muestra
muchas filas a la vez (líneas de la factura) y tiene información de encabezamiento
(nombres de clientes, compañías, fecha, etc.) así como una información de resumen
(impuestos, descuentos, total.). con este estilo de presentación los títulos de columnas
aparecen en el segmento de encabezamiento, mientras que las columnas aparecen en el
detalle. La única diferencia entre un DataWindows de estilo tablar y otro sin estilo es la
forma de disponer los objetos (=columnas y texto) al crearlos.
 Compuesto: no se puede usar para mantenimiento
 CrossTab: se puede usar para mantenimiento, la representación es tipo matriz
 Graph: tipo gráfico
 Group: no se puede usar para mantenimientos y se usa para agrupamientos
 Label:
 N-Up: si se puede usar para mantenimientos y aprovecha al máximo el papel cuando
se pasa a impresión.
 Ole: para incrustados
 RTF: para formatos enriquecidos.
Prog. Rodrigo Velázquez
10
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Objetos informatizados (campos calculados): los DataWindows se usan para crear
columnas que no estén presentes en la tabla pero que se requieren para algún proceso o
manipulación por parte del usuario. En el PainterBar está representado por un símbolo de
+/= (+/=), una vez que se ha escogido el objeto informatizado se debe escoger la parte del
DataWindow en donde se quiere que aparezca el objeto y, una vez hecho esto, aparece la
página de propiedades Compute Object y en ella se puede introducir una expresión para
el objeto informatizado, como ya se detallará. También se puede escoger el símbolo de
sumatoria (= ) pero aquí antes de escoger el objeto informatizado, se debe escoger
alguna columna que sirva de referencia a la función que vamos a crear. Por defecto se
crea un sum() para todas las columnas escogidas y la pone como summary sobre el
Datawindows, pero luego de esto se puede situar en cualquier lugar, así como modificar la
expresión que dará como resultado.
Para modificar la expresión se debe escoger las propiedades del objeto informatizado y
después modificar el texto “Expresión” por la expresión requerida. Pulsando el botón
“More” en esa misma lengüeta, se pueden escoger una gran cantidad de funciones
predefinidas para dar formato a la expresión, solo hay que tener cuidado pues el formato
de esas funciones difiere un poco de lo usual.
Por ejemplo si para validar un If lo hacemos usualmente así: If <cond> then; en ese tipo
de funciones el formato es If (cond, true, false); donde cond representa la condición
propiamente dicha con su consecuente posible resultado, true especifica el resultado a
mostrar si se cumple la condición y false el resultado a mostrar si no se cumple.
Objeto DataWindows  Control DataWindows.
A veces existe confusión sobre la terminología cuando se habla de DataWindows. Desde
el inicio de este documento se ha mencionado la diferencia entre el objeto DataWindows
(todos los que se crean desde el ícono de la PinterBar) y el control DataWindows. La lista
siguiente puede aclarar alguna ambiguedad del tema.
 Un objeto DataWindows es la que se pinta usando el pintor de
DataWindows. No son visibles estos objetos hasta que se han asociado a un
control de ventana. Se los conoce con el nombre genérico de DataWindows
(por ejemplo: “crear un DataWindow para la entrada de datos de una tabla
de artículos”)
 Un control de DataWindows es un control de ventana, al que algunas veces
se le llama DataWindow (por ejemplo, “añadir algún PowerScript al suceso
de DataWindow ItemChanged”). Estos controles no son útiles salvo que estén
asociados a un objeto DataWindow.
 Un objeto de usuario de DataWindow es un control de DataWindow
antecedente creado en el pintor de objetos de usuario. Estos objetos también
son conocidos como DataWindows (por ejemplo, se necesita heredar un
DataWindows antecedente) o controles DataWindows
 Los objetos dataWindows muestran texto, figuras, columnas, etc. Dentro del
pintor de DataWindow estos objetos son también objetos dentro de un
DataWindow (por ejemplo, “añadir un objeto informatizado a un
Datawindow en particular”)
Asociación de Controles DataWindow con ObjetosDataWindow.
En los términos más simples se puede crear una ventana y luego dentro de ella ir creando
controles DataWindow y asociarles a cada control un objeto según sea necesario.
Opcionalmente se puede definir un DataWindow definido por el usuario de tipo objeto y
asociarle a cada instancia de este tipo de control un objeto DataWindow.
NOTA: el sufijo para el objeto DataWindow es solamente “D” y para el control
DataWindow se usa “DW”.
Prog. Rodrigo Velázquez
11
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Editar campos del DataWindow.
Para definir o revisar un estilo de edición, basta con pulsar doble click sobre la columna del
DataWindow que se quiere editar, luego ahí se elige la ficha cual se quiere editar, existen
varias entre las que podemos citar:
1. Edit: dentro de las propiedades más
importantes que podemos encontrar aquí,
está STYLE, donde se define el formato
para la columna, por defecto es EDIT , que
es un campo SLE, además entre los más
destacables podemos citar el DDDW, DDLB;
ambos se discutirán la siguiente sección de
DataWindows desplegables.
2. Format: (= utilización de formatos de
muestra), estos formatos son similares a los
EditMask, la principal diferencia es 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 en 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 carácter. En una columna numérica se usa el signo
“#”; en formatos numéricos también se pueden introducir formatos en los que
los números negativos aparezcan en rojo: e.g: #,##0.00; [red] #,##0.00. cuando
se introducen los datos en una columna estos no cambian hasta que el campo
pierde la atención.
3. Validation: (utilización de reglas de validación): evitan que una columna
pierda el foco si el valor introducido no es adecuado. El texto introducido en la
columna se recupera con la función gettext(), de ahí en adelante se puede
hacer la validación necesaria y mostrar un mensaje en caso que se produzca
un error a la regla
4. Expressions: (empleo de expresiones condicionales) supongamos que
se desea cambiar el color de la columna si el valor en ella es menor de 10 por
ejemplo. Para ello se pulsa 2 veces sobre la propiedad color, con lo cual
aparece el cuadro de diálogo Modify expression, donde se introduce la
validación correspondiente, que en este caso podría ser: if (nombre_columna <
10, rgb(255,0,0), 0)
rgb red, green, blue
5. Las demás lenguetas son comunes a todos los controles: general, font,
pointer, etc.
Prog. Rodrigo Velázquez
12
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Lenguaje PowerScript.
En powerBuilder se escriben scripts usando el lenguaje PowerScript, el lenguaje de
PowerBuilder. Los scripts consisten en comandos, funciones y sentencias que forman y
dan una estructura específica a los procedimientos de cada evento.
Variables.
La mayoría de los lenguajes de 4GL soportan el concepto de ámbito de las variables. El
ámbito describe dónde se puede usar la variable.
Este concepto es importante. El ámbito permite a un analista/programador escribir una
función o suceso sin escribir sobre las variables en otra zona de la aplicación, incluso si las
variables tienen el mismo nombre.
Hay 3 niveles de ámbito en Power Builder:
1. Ámbito Local: las variables de ámbito local (o simplemente variables
locales), son variables que se declaran en el script. 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 función en
la que están definidas. El valor que adquiera la variable se pierde una
vez que salga del suceso o función.
2. Ámbito Compartido: con una aplicación de tipo MDI se puede abrir más
de una ventana del mismo tipo (en otras palabras, se pueden abrir dos
ventanas w_item al mismo tiempo). Estas versiones múltiples de la
misma ventana se llaman réplicas de esa ventana. Las variables
compartidas son variables cuyas funciones, sucesos controles de cada
réplica de un objeto pueden compartirse.
3. Ámbito Global: la aplicación completa puede acceder a las variables
globales. Estas variables nunca se salen de ámbito hasta que se cierra
la aplicación.
4. Ámbito Instancia: Una variable de instancia puede ser:
 Nivel de aplicación. Utilizado sólo en los scripts del objeto aplicación
 Nivel de menú. Utilizado sólo en los scripts para el menú en el cual
fue declarada y sus ítems dentro del menú
 Nivel de ventana. Utilizado sólo en los scripts para la ventana en la
fue declarada y los controles de dicha ventana
 Nivel de Objeto de Usuario. Utilizado sólo en los scripts para el objeto
de usuario en el cual fue declarado.
No se deberían usar variables globales si se emplea otro tipo de variables, usándolas se
viola el principio de encapsulación; en otras palabras, si se establece una variable global
en un suceso, otro suceso la puede reinicializar sin que el primero se llegue a dar cuenta
de ello.
La forma de declarar variables de tipo local en un determinado evento es el siguiente:
Tipo_de_dato  nombre_variable{ [número de elementos] }
Cuando se abre la ventana de script sea de una ventana o de un objeto de ventana, aparte
del área de trabajo, existe, al realizar click derecho con el mouse, un sub-menú de pegado
especial, con las cuales se pueden pegar rápidamente variables y objetos de uso frecuente
al codificar los scripts.
 Paste instance: ese sub-menú despliega todas las declaraciones de variable
de instancia. Con una simple pulsación sobre una variable de réplica se puede
pegar en el script
 Paste global: este sub-menú permite pegar en el texto cualquier variable de
ámbito global.
 Paste object: este sub-menú permite pegar objetos que estén relacionados con
el script que se está escribiendo; por ejemplo botones de comando, list boxes,
etc.
 Paste Argument.
Prog. Rodrigo Velázquez
13
www.nativos.com.py
PowerBuilder

Sistemas de Gestión
Select event: da la opción de seleccionar un evento del objeto al que se le
desea agregar código. Cuando un evento de un objeto específico posee código,
aparece una marca sobre la esquina izquierda del evento.
Comentarios.
En PB existen dos formas de agregar comentarios a una aplicación.
 //  para un comentario de una línea
 /* lineas de comentarios */ para comentarios de más de una línea
Dentro del Script Painter, existen tres sub-menús que son muy funcionales a la hora de
agregar código a la aplicación; los describimos a continuación:
1. Paste function: permite agregar (cada vez) uno de los tres tipos de funciones
que PB soporta.
 Built-in: cualquiera de las funciones que tiene predefinidas PB
 User-defined: alguna función definida por el programador
 External: alguna función externa a Power Builder y que se ha extraído hasta
aquí por medio de una librería asociada a la aplicación
2. Paste SQL: para declarar por medio de un ayudante alguna consulta sobre un
modelo de datos
3. Paste statement: para pegar en el script cualquier sentencia ya predefinida de
PB, como un ciclo una sentencia If then o if then else, etc.
Como se puede notar con estas herramientas prácticamente podemos generar código PB
sin conocer la estructura de su sintaxis.
Algunos íconos útiles para este momento:
 Select all: selecciona todo el texto que se encuentre en el script
 Comment: pone como comentario todo lo que se encuentre seleccionado. Si no
hay texto seleccionado pone como comentario el código de la línea en la que se
encuentre el cursor
 UnComment: quita la selección hecha anteriormente.
 Find: para buscar algún texto.
 Find next: busca la siguiente ocurrencia
 Replace: reemplaza algún texto seleccionado por otro que se proporcione
 Compile: compila la ventana actual
 Select object: selecciona un objeto en particular
 Browse Object: determina las características de un objeto que se encuentre
seleccionado.
 Return: vuelve al formulario.
Prog. Rodrigo Velázquez
14
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Manipulación de datos usando DataWindows.
1. Iniciar
Causa que un control Datawindow o almacén de datos use un objeto de transacción que el
programador le indique. El objeto transacción provee la información necesaria para
comunicarse con la base de datos.
La sintáxis que se usa para iniciar es por lo general:
nombre_dw.SetTansobject(nombre_transacción); lo cual se indica en el evento open
de la ventana donde está el control DataWindow; y lo que causa, es como se dijo que se
active el objeto transacción con relación al control DataWindow.
2. Recuperación de datos en el DataWindows
Al usar la función Retrieve() de DataWindow se limpia el búfer de este y se edita un SQL
Select de Datawindow para la base de datos. El conjunto de resultados retornados desde
la base de datos se almacena sobre el cliente en el búfer de DataWindow.
Por ejemplo si se declarará un evento de usuario llamado ue_retrieve en un control
DataWindow el código podría ser como sigue:
This . retrieve( )
This . setfocus( )
Si por el contrario se deseara llamar la función retrieve desde un botón de comando por
ejemplo se podría usar:
Nombre_dw.retrieve(); si se tuvieran argumentos definidos cuando se diseñó el
DataWindow en la sección Retreval Arguments..., los mismos se indican como argumentos
de la función nombre_dw.retrieve(lista_argumentos[,...])
Si se incluye un argumento para la recuperación y posteriormente se desean hacer
actualizaciones sobre el resultado devuelto no es necesario indicar el where como
argumento otra vez, pues el data window trabaja con el resultado devuelto por el evento de
recuperación.
NOTA: para modificar algún registro obtenido por el datawindow se modifica su valor
directamente del resultado devuelto por el retrieve(). Luego en el evento que se tenga
dispuesto para la actualización de la base de datos los cambios se harán permanentes.
3. Inserción de filas en un DataWindow
La función InsertRow( ) de DataWindow añade una nueva fila al DataWindow antes de la
fila especificada, si ésta es cero, la nueva fila se añade al final del conjunto de resultado.
Un suceso de definición de usuario tal como ue_insertrow, podría insertar una fila
en el DataWindow con la llamada de función Insertrow(0). Se podría usar este método
para insertar una nueva línea dentro de una factura, con un código como este:
Long ll_row
Ll_row = This . InsertRow(0)
This . ScrollToRow(ll_row)
This . SetColumn(1)
This . Setfocus()
Si se desea hacer la llamada a la función InsertRow, dentro de un botón de comando el
código a introducir sería algo como este:
Long ll_row
Ll_row = nombre_dw. InsertRow(0)
Nombre_dw. ScrollToRow(ll_row)
Nombre_dw. SetColumn(1)
Nombre_dw. Setfocus()
Si la función InsertRow se llama sin ninguna otra función, el usuario debe hacer el scroll
hasta la fila que PowerBuider disponga para tal efecto, es por ello que se usan las
funciones scrollToRow, SetColumn, y SetFocus().
Prog. Rodrigo Velázquez
15
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
4. Cancelación de filas en un DataWindow
Es importante confirmar una petición antes de cancelar una fila. Un código como el que
sigue sobre un evento definido por el usuario que podría llamarse ue_deleterow, sobre la
ventana que contiene el DataWindow
Int li_rc
Li_rc = messaggeBox(„Delete requested‟, &
„Are you sure you want to delete row‟ + &
string(This.getRow()) + „?‟, &
StopSign!, yesno!, 2)
If li_rc = 1 then
This . DeleteRow(0)
End if
If this . Rowcount() = 0 then
This . event ue_insertRow()
End if
Setfocus(This)
Si se desea llamar la función deleteRow() desde un botón de comando la sintáxis puede
ser como sigue:
Nombre_dw.deleteRow(0), para eliminar la fila actual, o se especifica cual es la
línea que se desea eliminar.
Prog. Rodrigo Velázquez
16
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Conexión con los datos.
El uso de esta herramienta de desarrollo de software está destinada hacia el lenguaje de
manipulación (DML) en cerca de un 80%. Por lo que su interacción con motores de bases
de datos es muy extensa; principalmente a través del objeto Data Windows que
posteriormente se discutirá ampliamente.
Un detalle importante en relación a los S I es que, siempre que se pueda las reglas del
negocio deben estar presentes en la definición de los modelos de datos, para de esta
manera hacer más ágiles las modificaciones que a futuro se le tengan que hacer a los S I
de la organización.
Ahora bien, con relación a los motores de bases de datos, es importante destacar que un
motor puede ser accesado desde una herramienta de diseño como lo es Power Builder de
dos formas:
 Driver nativos: aquí se necesita que tanto el fabricante del
DBMS como el desarrollador de la herramienta se 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 serán explotadas casi el 100%
de sus bondades.
 Driver ODBC: por otra parte, si no hay contacto entre los
proveedores, se puede hacer uso del sistema Gestor
mediante conexiones ODBC (Open Data Base Conection –
Conexiones Abiertas de Base de Datos-), la deficiencia aquí
es que no se aprovecha el 100% tanto de la herramienta de
desarrollo como del sistema gestor.
Ventajas / Desventajas de ODBC.
1. „ ODBC le permite a tu aplicación conectarse a muchas base de datos a través de
una interfaz estándar
2. „ Cualquier base de datos que tiene un driver ODBC puede ser accesado a través
de una aplicación PowerBuilder
3. „ No todas las características de las bases de datos son implementadas.
4. „ La performance de acceso a los datos puede degradarse
Nativo
Driver
SQL
DDL
DML
DCL
ODBC
Toda aplicación en PowerBuilder está respaldada en al menos una o más librerías (.pbl),
por lo que se podría afirmar que una aplicación es en realidad un conjunto de una o más
librerías.
// Ejemplo de script de conexión a los datos
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False // AutoCommit es puesto a false
SQLCA.DBParm =
"ConnectString='DSN=sybhealth;UID=sybhealth;PWD=sybhealth'"
Connect Using SQLCA; // Conectarse a la base de datos
// Inserta una fila en la tabla patient.
INSERT INTO PATIENT (patient_ID,fist_name,last_name)
VALUES ( 1025,„Christopher‟,‟Columbus‟ );
if SQLCA.sqlcode = 0 then
COMMIT using SQLCA;
Else
ROLLBACK USING SQLCA;
end if
// Commit cambia y desconecta desde la base de datos.
DISCONNECT USING SQLCA;
Prog. Rodrigo Velázquez
17
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Variables de Transacción.
En la introducción al inicio de este manual, y en la sección anterior ya se ha abordado el
tema de las variables de transacción; al menos de la que Power builder trae como Default
(SQLCA). La Structured Query Language Comunication Area –Área de Comunicación del
Lenguaje Estructurado de Consultas-, es suficiente si nuestra aplicación solo necesita
comunicarse con una sola base de datos.
En la tabla siguiente se presentan las propiedades de los objetos de transacción
retornados por la base de datos.
ATRIBUTO
TIPO DE DATO DESCRIPCIÓN
SqlCode
Largo
El éxito o fallo del código de la operación SQL más
reciente:
0 = éxito
100 = no retorna resultado (más de un registro)
- 1 = Error (se usa SQLDBCode para ver detalles)
SqlNRows
Largo
El número de filas afectadas
SQLDBCode
Largo
El código de error del vendedor de la base de datos
SQLErrText
Cadena
El mensaje de error del vendedor de la base de
datos
SQLReturnData Cadena
El dato de retorno específico de DBMS
Como ya se he dicho, si nuestra aplicación solo necesita conectarse a una base de datos
con el Transaction que por default trae Power Builder es suficiente (SQLCA); pero en los
casos en que sea necesario que nuestras aplicaciones interactúen con más de una base
de datos. El caso típico aquí es el ejemplo de los agentes de ventas; quienes portan su
propia base de datos en su PC y al final del día pasan las transacciones al servidor de la
organización; aquí se debe (al final del día por ejemplo) estar conectado al mismo tiempo a
la base de datos centralizada y la personal.
Ya aquí estamos en necesidad de definir al menos una variable de transacción más aparte
del SQLCA. Incluso podemos definir otra transaction diferente si no queremos usar el
SQLCA, pero en realidad carece de sentido pues SQLCA trae ya implícito lo necesario
para comunicarse con SQL.
Definición del transaction (mediante código)
Se define la variable de
Transaction MiTransaction
transacción
MiTransaction = CREATE transaction
MiTransaction.DBMS = 'ODBC' ...
 una vez creada hay que definir las variables
de transacción de igual forma que como se hace con la SQLCA
Eliminación de la transaction
Una vez que la transaction ha cumplido con su objetivo, se debe destruir la variable
de transacción para liberar recursos del sistema.
La eliminación de la variable de transacción se hace mediante el comando
DESTROY.
Ejemplo:
DESTROY MiTransaction
Orden Lógico:
Para trabajar con una variable de transacción que no sea la SQLCA, se debe seguir un
orden específico a fin de no ocasionar problemas al usuario en tiempo de ejecución:
Pasos:
1. Definir la variable de transacción
2. Conectarse al sistema de gestión
3. Ejecutar el código necesario
4. Desconectarse del sistema de gestión
5. Destruir el transaction que se haya definido
Prog. Rodrigo Velázquez
18
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Aplicación.
Las aplicaciones son implementadas a través de objetos Application, los que presentan
propiedades, evento y funciones (métodos) que serán revisados. Una aplicación es un
objeto no visual, desde el que se invocan a las interfaces (ventanas) que serán parte de
una aplicación además de poder declarar variables globales, usar objetos de usuario, etc.
Propiedades de una Aplicación.
Las propiedades de una aplicación son las características globales de la aplicación como
por ejemplo las fuentes predeterminadas de las letras para las cajas de texto, etiquetas,
etc. También se puede definir el icono que tendrá la aplicación cuando se haga el archivo
ejecutable de ésta.
PROPIEDADES PREDEFINIDAS EN POWER BUILDER
EVENTO
DESCRIPCION
AppName
De sólo lectura, es el nombre del objeto aplicación que se indica al
momento de grabar, luego de crearlo.
DisplayName
De sólo lectura, es el nombre de la aplicación que es mostrada por
otras aplicaciones al utilizar la aplicación.
DWMessage Title
Es un título para las cajas de mensaje que se apreciará en la barra
de título de las mismas.
PROPIEDADES ADICIONALES.
Son aquellas como fuente de los textos(Text Font),
fuente de las columnas (Column font), Fuente de
etiquetas (Label font), fuente de las cabeceras
(Header Font), Icono (Icon) y tipos de variables
(Variable Types).
Fuente de los textos (Text Font) permite cambiar el
tipo de fuente de windows en cuanto a tipo de letra,
estilo de la letra (Font styles) como Regular
(Normal), Italic (Itálicas)m Bold (negritas) y Bold
Italic (en negrita e Italic), tamaño (Size), color de la
letra (Text Color), y color de fondo de letra
(Background).
EVENTOS DE UNA APLICACIÓN.
Los eventos son todos aquellos sucesos que le
ocurren a la aplicación y a los que se puede asignar
un script para que se realicen alguna acción cada
vez que ocurra el suceso.
Eventos Pre-Definidos.
EVENTO
Close
ConnectionBegin
ConnectionEnd
Idle
Open
SystemError
Prog. Rodrigo Velázquez
DESCRIPCIÓN
Ocurre cada vez que se termina la ejecución de una aplicación.
Obsoleto (usado para conexiones distribuidas con Power
Builder)
Obsoleto (usado para conexiones distribuidas con Power
Builder)
Cuando la función Idle ha sido llamada en un script de una
aplicación y el número de segundos que han transcurrido sin
que el teclado o el ratón hayan sido usados.
Ocurre cada vez que se ejecuta una aplicación.
Cuando un error crítico ocurre en tiempo de ejecución (como
tratar de abrir una aplicación no existente). Si no se pone un
script para éste evento Power Builder muestra un mensaje con
el número de error y mensaje de error que ha ocurrido. Puede
usarse para personalizar los errores.
19
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
A continuación vemos como crear una nueva aplicación.
Toda nueva aplicación debe estar contenida en un Workspace (espacio de trabajo), por lo
que antes debemos crear el mismo.
Crear un Workspace
En el menú de Power Builder elija FILE y luego NEW aparecerá la siguiente ventana:
Después aparecerá:
A la nueva carpeta le daremos de nombre “APPPB” (referencia a lo que haremos en
nuestra aplicación) y entramos en ella:
Dentro de dicha carpeta digitamos el nombre del archivo de nuestra aplicación. (Ejemplo:
“mi aplicación) y finalmente click en Guardar.
Con esto hemos creado el WorkSpace “Mi aplicación”, lo que significa que el archivo
WorkSpace se llama: mi aplicación.pbw
Prog. Rodrigo Velázquez
20
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Crear una Aplicación.
Dé click derecho en el Workspace Mi
aplicación y elija la opción New...
Pulsar el
New
sub-menú
Luego aparecerá la ventana con las siguientes opciones:






Application: Para una nueva aplicación.
Template Application: Para crear una nueva aplicación que viene con objetos
preconstruidos, útil para quienes ya conocen Power Builder.
Existing Application: Para incorporar una aplicación que existe ya sea que esté
construida en una versión anterior de Power Builder o no.
EAServer Component: Para crear una aplicación que use componentes de Power
Builder usando el Servidor EASserver
COM/MTS: Para crear una aplicación que use componentes Microsoft.
Automation Server: Para crear una aplicación que use una aplicación de Windows
como servidor.
De todas ellas elegiremos la primera opción: Template Application.
Prog. Rodrigo Velázquez
21
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Le asignamos un nombre a nuestra primera aplicación. Por ejemplo aplicacionpw.
Despliegue el árbol del sistema (System Tree) y se muestra de la siguiente manera
Donde observes este símbolo
da click en él para
desplegar una rama del árbol. Cuando una rama está
desplegada le antecede el siguiente símbolo
Realizamos el desplegado hasta ver lo mismo que en la
figura. Para entrar al código y propiedades de esta nueva
aplicación da click derecho del mouse en la aplicación
aplicacionpw y a continuación click en Edit.
Prog. Rodrigo Velázquez
22
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Creación de Window (Ventana).
Para crear la primera ventana seleccione NEW... (o CTRL + N) en la ficha PB Object
seleccionar el objeto Window.
Se muestra un área de diseño de ventanas (formulario), seleccionaremos la propiedad
Title y digitaremos el título de la ventana. Ejemplo: “Ventana de aplicación”. Si la Ventana
de Properties no aparece, dar click derecho en el Layout y elegir Properties para que
aparezca.
Prog. Rodrigo Velázquez
23
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Luego grabaremos la ventana con el icono de Guardar o eligiendo FILE y después SAVE
en el Power Menú.
A partir de este momento agregar los controles que sean necesarios para nuestra primera
aplicación, así por ejemplo:
Hacer un click en este
elemento para
desplegar la lista de
controles que
podemos agregar a
nuestro objeto
window.
Esta ventana principal tiene 5 zonas esenciales para poder iniciar a diseñar nuestra
aplicación
1. System Tree (Arbol de Sistema). Muestra todos los objetos visibles o no visibles que
vamos creando para nuestra aplicación.
2. Ventana de diseño de controles. Donde pegaremos todos los controles que requiera
nuestra aplicación, el primer objeto que vemos allí es el window.
3. La ventana de codificación (Script). En esta ventana se codifican todos los objetos
según el evento que deseamos que se desencadene o suceda.
4. La ventana de Propiedades. En esta ventana encontramos todas las características o
atributos referentes al control seleccionado.
5. Ventana de Salida (Output). Esta ventana nos mostrará la salida de los sucesos
ocurridos durante la compilación de la aplicación.
Comenzaremos nuestra aplicación colocando el nombre
que llevará nuestra ventana cuando se ejecute, para ello
vamos a la ventana de propiedades y en la opción Title,
escribimos “Ventana Sumar dos números”.
Además de la ficha General también vemos 3 opciones
más :
Prog. Rodrigo Velázquez
24
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Propiedades de la Ventana.
Las propiedades de la ventana están organizadas en forma de FICHAS, aquí la descripción
de sus principales características:
FICHA
General
Scroll
Toolbar
Other
DESCRIPCION
La casilla TITLE, indica el texto de título de la ventana. La casilla “menú
Name”, indica el nombre del objeto menú para la ventana. Window Type,
indica el tipo de ventana:
 Child!, ventana que permanece inserta dentro de una ventana MDI
 Main!, ventana normal (principal) con posibilidad de menú.
 Mdi!, ventana que posee área interna para contener otras ventanas.
 MdiHelp!, igual que la anterior, y sirve como ayuda.
 Popup!, ventana de contexto o emergente.
 Response!, necesita cerrar esta ventana para continuar la ejecución.
Permite definir si la ventana tendrá barras de desplazamiento, y la unidad a
utilizarse por ellas.
Permite definir si se utilizará la caja de herramientas definida para el menú, su
presentación y posición.
Permite indicar la posición y tamaño de la ventana dentro de la pantalla, como
será presentada.
Prog. Rodrigo Velázquez
25
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Configuración de ODBC.
Power Builder ofrece la posibilidad
de crear la configuración para
conexiones ODBC (ícono Configure
ODBC de la barra de menú), pero
desde aquí no es posible determinar
la versión del driver del motor de la
base de datos con el que se está
haciendo la conexión, por tanto no se
puede estar seguro si la misma
proporcionará
los
resultados
esperados, pues si el motor de la
base de datos es de una versión más
reciente que el driver que se posee
para la conexión ODBC no dará un
resultado adecuado.
Ante esta perspectiva lo adecuado
es hacer la conexión desde un
producto (de cualquier marca,
incluso el que está proporcionado
por el sistema operativo -caso que
esté usando windows XP o superior – en la parte del Panel de control –Control Panel-)
para conexiones ODBC.
Desde un producto para conexiones ODBC, se puede en la gran mayoría de los casos
escoger la versión del driver que corresponda con la versión 1 del sistema gestor que se
esté usando.
En
ambientes
cliente
servidor, se requiere instalar
en el cliente una versión
mínima del DBMS, que en el
caso
de
Oracle
es
Oracle/client
Ahora bien ya en el producto ODBC, lo que se tiene que definir es el DSN (Data Souse
Name), para lo que se siguen los siguientes pasos:
 Buscar el driver que corresponda a la versión del DBMS que se esté usando.
Inicialmente, lo que presentan los productos ODBC, es la lengüeta con los DSN que ya han
sido previamente definidos, por lo que si se quiere agregar uno nuevo se debe escoger
Agregar... (Add...), que está en la misma lengüeta.
 Luego escoger la opción de Finalizar; con lo cual se presenta un cuadro de
diálogo que proporciona la oportunidad de configurar el DSN, según el driver que se haya
escogido.
Independientemente del driver que se escoja, se debe completar el campo del Data
Source Name, que es el que se refiere a la base de datos que se le está haciendo, la
conexión ODBC. Adicionalmente se pueden completar el usuario y password, pero esto en
un ambiente cliente servidor carecería de sentido
Una vez que se haya completado el Data Source Name, se escoje la opción de Terminar
para que se cree el User DSN.
1
Si la versión del driver es mayor a la versión del sistema gestor que se use no tiene perjuicio, lo que
importa es que la versión del driver contenida en el producto ODBC no sea menor a la del DBMS
Prog. Rodrigo Velázquez
26
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Conexión con Driver Nativo.
Power Builder no solo puede comunicarse son sistemas gestores por medio de conexiones
ODBC; sino que posee una serie de drivers nativos de diferentes sistemas gestores, a
saber Informix, SQL Server, Oracle, Sybase, para hacer más eficiente su comunicación
con los sistemas gestores que ya hemos mencionado.
La configuración de un perfil de driver Nativo es muy similar a la configuración de un perfil
para conexión mediante ODBC.
Para crear un perfil mediante un driver nativo, se escoge el ícono de perfil de la PowerBar
y se escoge el sistema de gestión con el que se desea que la aplicación se comunique,
una vez hecho esto, se escoge New del menú que se presenta.
Con esto se consigue abrir el cuadro de diálogo Database Profie Setup. La principal
diferencia entre éste y uno para conexión ODBC es la lengüeta, conexión la cual pasamos
a describir a continuación:
 Profile Name
 Connect Information
 Server
nombre del servidor donde se encuentra instalada la base de datos
 Log Id
un usuario válido
 Password el password que corresponda al Log Id
 DataBase nombre de la base de datos (solo el nombre sin extensión)
 Language lenguaje que se desea usar en la comunicación a SQL Server
 Other
 Isolation Level: nivel de aislamiento
 Autocommit mode:
autocommit después de cada transacción
 Commit on disconnect: commit después de que desconecte la aplicación
 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 además tener un archivo .Ini para la
conexión de n usuarios.
La principal diferencia entre los preview de una conexión de Driver nativo y una con ODBC,
es que en driver nativo no se hace uso del DBPARM, que en conexiones con ODBC, con
una cadena de conexión podíamos almacenar todos los parámetros necesarios para
realizar la conexión, almacenábamos el nombre del DSN, usuario, password, ect.
Ejemplo de preview con ODBC:
// Profile Perfil_empleado
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm
=
"ConnectString='DSN=DSN_Empleado;UID=MakerTables;PWD=MakerTables;',PBCatalog
Owner='MakerTables'"
En cambio en el preview con driver nativo se presenta una conexión como la siguiente:
// Profile prf_Pubs_Nativo
SQLCA.DBMS = "MSS Microsoft SQL Server 6.x"
SQLCA.Database = "pubs"
SQLCA.ServerName2 = "Gerardo"
SQLCA.LogId = "sa"
SQLCA.LogPass = "**"
SQLCA.AutoCommit = False
SQLCA.DBParm = ""
Es obvio, sin embargo lo apuntamos, en un ambiente de cliente servidor, tanto el usuario
como el password se deben cargar en RunTime.
2
El servidor de ULACIT se representa como: @tns.labs  TNS = tnsnames, que es una cadena de
configuración del servidor. Para más información: Oracle  NetWork  Adm  tnsnames.ora.
Prog. Rodrigo Velázquez
27
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Compilar y Ejecutar la Aplicación.
Como primer punto se debe crear un proyecto aplicación, accediendo al menú New y luego
seleccionar la opción Application como muestra la siguiente figura.
Una vez aceptado el proyecto se dispone una ventana como la siguiente;
Se debe especificar el nombre del ejecutable que se desea obtener, y de ser el caso
también se debe especificar el nombre del archivo pbr.
Prog. Rodrigo Velázquez
28
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Conceptos necesarios en el momento de generar la aplicación.
Cuando usar un PBR
Siempre que los recursos externos sean asignados dinámicamente
Bitmaps
picture_control.PictureName = "bmp_or_rle_filename"
Icons
dw_control.Icon = "ico_filename"
Siempre que los recursos internos sean asignados dinámicamente, y se está compilando
un EXE en lugar de PBD o DLL
DataWindows
dw_control.DataObject = "d_object_name"
Archivos de recursos no son necesarios para objetos DataWindow en PBD o DLL
Todos los objetos PowerBuilder en el source PBL son incluidos en el PBD o DLL resultante
Opciones de Generación de Código.
Machine Code
Machine Code compila DLLs
Ventajas
 Rápido para expresiones matemáticas complejas y looping constructs
 Ningún efecto en la velocidad de instanciación de objetos, acceso a base de datos,
o llamada de funciones DataWindow
Desventajas
 Toma más tiempo compilar
 Plataforma específica
 El archivo ejecutable significativamente más grande puede bajar lentamente la
performance
Pcode
Pcode compila PBDs
Ventajas
 Compila más rápido– bueno para propósitos de prueba
 Produce ejecutables más pequeños
 Interpretado – ejecuta en todas las plataformas soportadas por PowerBuilder
Desventajas
 Interpretado – Puede ejecutarse más lentamente
Machine Code o Pcode?.
„ Se recomienda que pruebas de performance se realicen dentro de las condiciones
actuales del usuario final para determinar el uso de machine code Runtime DLLs
Necesarias
„ Para Ejecutar la Aplicación Standalone, las siguientes DLLs son requeridas para estar en
el mismo fólder de la aplicación o en el fólder de Sistema para el Sistema Operativo
 libjcc.dll
 pbvm115.dll
 pbodb115.dll
 ppdwe115.dll
 PBVM 11.5 (actual)
Prog. Rodrigo Velázquez
29
www.nativos.com.py
PowerBuilder
Sistemas de Gestión
Convertir el tutorial de PowerBuilder a Web Forms Application.
Esta sección provee información necesaria para convertir el PowerBuilder tutorial
application a un ASP.NET Web Forms application.
Se asume que está instalado el Microsoft .NET Framework 2.0 y una version del IIS server
en la computadora de desarrollo. Se puede usar una computadora diferente para correr el
Web Forms application desde un standard Web browser.
Pasos para convertir el proyecto tutorial a Web Forms Application:
 Abrir el workspace tutorial en PowerBuilder
 Realizar cambios para .NET Web Forms application
 Crear un .NET Web Forms target y proyecto.
 Seguir el Wizard.
 Compilar el proyecto .NET Web Forms.
 Correr la aplicación desde un explorador.
Prog. Rodrigo Velázquez
30
www.nativos.com.py
Descargar