powerbuilder-1

57
POWER BUILDER Definición Es un entorno gráfico de programación que está compuesto de diferentes herramientas que permiten el desarrollo rápido de aplicaciones. Con estas herramientas se pueden desarrollar aplicaciones Cliente / Servidor a través de ODBC (Open DataBase Connectivity) o Drivers Nativos para la Base de Datos. Una aplicación Cliente / Servidor pone en comunicación una estación de trabajo con un Servidor de Base de Datos Central. Este modelo consiste en utilizar una Base de Datos que reside en una máquina separada denominada Servidor. El Software de gestión de Base de Datos se ubica en las estaciones de trabajo remotas (Clientes). Las aplicaciones que se ejecutan en las estaciones cliente, acceden a los datos que se encuentran en el servidor

Transcript of powerbuilder-1

Page 1: powerbuilder-1

POWER BUILDER

Definición

Es un entorno gráfico de programación que está compuesto de diferentes herramientas que permiten el desarrollo rápido de aplicaciones. Con estas herramientas se pueden desarrollar aplicaciones Cliente / Servidor a través de ODBC (Open DataBase Connectivity) o Drivers Nativos para la Base de Datos. Una aplicación Cliente / Servidor pone en comunicación una estación de trabajo con un Servidor de Base de Datos Central. Este modelo consiste en utilizar una Base de Datos que reside en una máquina separada denominada Servidor. El Software de gestión de Base de Datos se ubica en las estaciones de trabajo remotas (Clientes). Las aplicaciones que se ejecutan en las estaciones cliente, acceden a los datos que se encuentran en el servidor

Barra de herramientas

Page 2: powerbuilder-1

New: Permite la creación de cualquier objeto, espacio de rabajo, aplicación, ventana, datawindow.

Perfil de Base de Datos: Permite configurar las conexiones a la Base de Datos.

Base de Datos: abre un painter que permite consultar tablas, vistas y demás objetos que se encuentran en la BD.

Correr: Ejecutar el programa

Cuando se abre a un pintor, PowerBuilder exhibe una ventana nueva que tenga un espacio de trabajo en el cual se diseña el objeto que usted está construyendo. PowerBuilder también exhibe un o más PainterBars con los botones que proporcionan el acceso fácil a las herramientas disponibles en el pintor o el editor.

Ahora se preguntaran que es un painter:

Un painter(pintor) es un ambiente de desarrollo donde podremos manipular los objetos de forma sencilla, basta con mirar la representación de cada icono y tendremos una idea de se funcionalidad. A continuación vemos el painter(pintor) de window

Page 3: powerbuilder-1

Workspace(espacio de trabajo):

El Workspace o espacio de trabajo es un archivo de extensión .pbw el cual PB crea, donde se guardan las configuraciones del proyecto que se esta desarrollando.

Se encuentra ubicado en la powerbar ó file/open workspace

Elegimos en donde deseamos guardar nuestro workspace y le damos un nombre.

Aplicación

Page 4: powerbuilder-1

Una vez creado el espacio de trabajo, debemos crear nuestra aplicación. Una aplicación tiene como elementos a las ventanas, los menús, los DataWindows y los objetos de usuario.

Ingresamos un nombre a nuestra aplicación(target) y le damos click en finish

Page 5: powerbuilder-1

Con esto nos crea una estructura similar a la siguiente figura.

Objeto aplicación:

El objeto aplicación, es una colección de ventanas de powerbuilder que desempeñan actividades relacionadas.

El objeto aplicación es el punto de inicio(entrada) de cada prorograma(sistema). Cuando un usuario ejecuta una aplicación, el código que es escrito en el evento open es disparador o ejecutado.

Evento Descripción

Open Las acciones cuando inicie la ejecución de la aplicación.

Close Las acciones cuando termine la

Page 6: powerbuilder-1

ejecución de la aplicacion

Por ejemplo:

La figura muestra que estamos en el evento open de la aplicación.Como en este caso estamos trabajando con conexión a base de datos, elegimos este evento para realizar la conexión a una base de datos accces.Luego la parte que esta sombreada indica que se abrirá la ventana w_principal.

Open(w_principal)Donde “open” es la instrucción y w_principal es el objeto(ventana o window) que se abrirá.

En el evento close, podemos poner instrucciones, que deseamos realizar justo cuando se termina o cierra la aplicación, como por ejemplo realizar una copia de seguridad de la base de datos, mostrar un mensaje de despedida, etc.

Ventanas Las Ventanas son como contenedores, es posible poner en ellos una diversidad de objetos.

Para crear una nueva ventana, le damos clic en new(el icono que parece una ventana con un símbolo “+”)

En la siguiente ventana elegimos pb object y seleccionamos window

Le damos clic en ok y ya tenemos nuestra ventana lista para trabajar

Page 7: powerbuilder-1

Realizamos los cambios a nuestra ventana recién creado y le damos click en el icono del disket.

Nos pedirá que ingresemos un nombre para nuestra ventana, después de haber ingresado el nombre le damos click en ok y ya tenemos nuestra ventana grabada.

Un Ventana consta de:

Atributos: Son los que definen el comportamiento y apariencia de la ventana. Estos pueden ser cambiados . Ejm (color, título, etc).

Page 8: powerbuilder-1

Eventos: Especifican lo que sucede cuando un window es manipulado. Ejem: evento close (ocurre al cerrar una ventana)

Controles: Colocados sobre un windows, para recibir y brindar información al usuario. Ejm (command button, singleline edit, radio button, etc).

EVENTOS DEL OBJETO VENTANA:Activate: Ocurre inmediatamente después de abrirse la ventana. La ventana activa se muestra con un título sumamente iluminado.

Clicked: Ocurre cuando se hace un click en una ventana, pero no dentro de los controles (así como un command Bottom).

Close:Ocurre antes de que la ventana esté desactivada y cerrada.

CloseQuery: Los query de una ventana le dan una oportunidad de manejar cualquier último detalle, así como guardar cualquier cambio actual a un archivo o una tabla. El evento ocurre antes del cierre de eventos y es posible que reuse a permitir que la ventana se cierre.

Desactivate: Este evento es impulsado antes de que la ventana llegue a estar inactiva.

DoubleClicked: Ocurre cuando se hace doble click en una ventana, pero no dentro de los controles.

DragDrop: Ocurre cuando el modo drag y el puntero drop están en un objeto de la ventana (no dentro de un control)

DragEnter: Ocurre cuando el modo drag está en un objeto de entrada de la ventana.

DragLeave: Ocurre cuando el modo drag está en los objetos que van a salir de la ventana.

DragWithin: Cuando el modo drag está en los eventos que son impulsados periódicamente mientras que un objeto está dentro de la ventana.

Hide: Esta ventana se hace invisible.

HotLinkAlarm: Ocurre después que una conexión DDE ha sido efectuada.

Key: Ocurre cuando el teclado es presionado y el foco no está dentro de un control de edición.

MouseDown: Ocurre cuando se da click al botón izquierdo del mouse.

MouseMove: Ocurre cuando el mouse se ha movido dentro de la ventana.

MouseUp: Ocurre cuando el botón del mouse es soltado dentro de la ventana y el señalador no está localizado dentro de cualquier control activado.

Page 9: powerbuilder-1

Open: Este evento ocurre al abrirse, antes de que el usuario vea nada.

Other: Todo los eventos de la otra ventana que han sido señalados por los eventos del PB, están ruteados en este evento, raramente se usará este evento.

RbuttonDown: Ocurre cuando se presiona el botón derecho del mouse.

Resize: Ocurre al cambiar el tamaño de la ventana.

Show: Este evento es impulsado antes de llamar a la función show.

SystemKey: Evento impulsado antes que el usuario presione la tecla Alt (usualmente en combinación con otra tecla) y el foco no estará dentro de un tipo de edición activa del control.

Timer: Ocurre con intervalos específicos como colocar la función de tiempo. El evento del tiempo es solamente impulsado si la función del timer fue llamada.

LAS FUNCIONES QUE SE MENCIONAN A CONTINUACIÓN SE APLICAN ESPECÍFICAMENTE A LOS OBJETOS DE LAS VENTANAS:

ArrangSheets: Organiza a las hojas de las ventanas en un estilo específico, como tiled o cascada.

Change Menu: Asigna el menú asociado con una ventana a una named menú

ClasName: Retorna el nombre de la ventana.

GetActiveSheet: Retorna cual es la ventana que está actualemente activa en la ventana de hoja.

Hide: Hace que la ventana se haga invisible.

Move: Cambia la ventana a una nueva posición.

ParentWindow: Retorna cual es la ventana padre.

Pointer X: Devuelve la actual posición horizontal del puntero.

Pointer Y: Devuelve la actual posición vertical del puntero.

Postevent: Adiciona un evento a la cola de mensaje de un objeto (un mensaje asincrónico).

Page 10: powerbuilder-1

Resize: Cambia el actual tamaño de la ventana.

SetFocus: Activa el foco de la ventana, haciendo que ésta sea la actual ventana activa.

Setmicrohelp: Asigna un texto en línea de status del MDI y lo displaya.

SetPosition: Mueve la ventana al frente o posterior a otra ventana.

SetRedraw: Enciende o apaga el estado de actualización para una ventana.

Show : Displaya una ventana.

TriggerEvent: Envía un mensaje para un evento del objeto.

TypeOff: Retorna el tipo de objeto

TIPOS DE VENTANAS

Windows Main: Significa principal y es el tipo de ventana predeterminado, este tipo de ventana se recomienda usarla para aplicaciones que usen una sola ventana o varias ventanas que trabajen de forma independiente.

Page 11: powerbuilder-1

(ventana del tipo Main con un datawindow)

Window Popup: Este tipo de ventana se caracteriza porque al ser llamada desde otra ventana no detiene la ejecución de la ventana desde la cual fue llamada, esto significa que usted puede pasar a la primera ventana(ventana que llamó a la ventana del tipo popup) sin que se oculte o se cierre la ventana del tipo POPUP.

Window Child: Child significa hijo y consiste en una ventana que solo se puede mostrar de una ventana del tipo principal o padre. Este tipo de ventana no puede ser la primera que se abra o visualice en una aplicación.

Window Response: Este tipo de ventana se caracteriza porque cuando se muestra, no se puede pasar a otra ventana sin que esta se cierre. Funciona como una ventana de dialogo de la cual no podemos salir hasta que el usuario responda a la ventana o la cierre.

Page 12: powerbuilder-1

MDI : Significa Multiple Document Interface( interfaz de documentos Multiples) y se caracteriza porque dentro de este tipo de ventanas se pueden abrir varias ventanas a las cuales también se les llama paginas. La ventaja de abrir varias ventanas dentro de un MDI es que nos podemos pasar de una ventana a otra de una manera muy fácil.

Este tipo de ventanas requiere que se le asigne un menú en la propiedad MenuName de lo contrario mostrara un mensaje de error.

Mdi Help: Este tipo de ventana es similar al MDI, se diferencia porque este nuevo tipo de ventana agrega al final de la ventana una barra de estado donde se puede enviar pequeños mensajes a los usuarios de la aplicación.

Page 13: powerbuilder-1

Podemos poner

Si nos fijamos bien nos muestra el mensaje “Mostrando los registros de produccion”

Page 14: powerbuilder-1

¿Cómo logramos esto?

Simplemente asignándole un texto en la propiedad Microhelp del menú

Si queremos agregar el mensaje dinámicamente, podemos hacerlo con la instrucción SetMicrohelp.

w_principal.setMicrohelp( "Mensaje")

donde w_principal es el nombre de mi ventana(ventana principal del tipo MdiHelp)

setMicroHelp el la instrucción y dentro de los de los paréntesis el texto(mensaje) que queremos mostrar

Propiedades de las ventanas

Page 15: powerbuilder-1

Las propiedades de las ventanas las podemos hallar en la parte derecha del pinor de window, la cual esta dividida en varias pestañas.

Aquí podemos hallar las propiedades de la ventana. A continuación mencionaremos algunas:

Title: Titulo de la ventana que se mostrara en la barra de titulo.

MenuName: Menu asignado a la ventana

Visible: Si esta activado quiere decir que la ventana esta visible, de caso contrar no lo estará.

MaxBox: indica si el botón se maximizar será mostrado.

Introducción a los controles

Cuando se ejecuta la aplicación los usuarios interactúan generalmente con los controles colocados en la ventana (window).

Hay dos tipos de controles:

- Controles que tienen eventos- Controles sin eventos (Group Boxes y los drawing objects (objetos para dibujar)).

Hay controles para:

Mostrar y / o manipular valores:

Static text  Caja de texto, como etiqueta. Solo para mostrar información, no hay posibilidad que pueda escribirse directamente en el.

 

Page 16: powerbuilder-1

SingleLineEdit Caja de edición de texto, es posible que el usuario en tiempo de ejecución escriba un texto dentro de la misma caja

MultilineEditCaja de edición de texto multilinea, es posible que el usuario en tiempo de ejecución escriba un texto dentro de la misma caja

Picture: Caja de dibujo, permite visualizar una n. Esta puede ser definida en tiempo de diseño, o puede ser modificada en tiempo de ejecución.

Commandbutton:

Para implementar botones con los que se inician procesos o por el contrario para terminarlos, cancelarlos o cerrar ventanas.

Picturebutton:

Page 17: powerbuilder-1

Igual que el anterior, con la diferencia que este permite agregar una imagen al botón.

Datawindow:

Datawindow Control, es el que se vincula con un objeto datawindow. Es en donde se muestra o incrusta el objeto datawindow.

A continuación, se muestra una lista con los principales controles y sus prefijos:

DECLARACION DE VARIABLES.

Al declarar una variable nosotros lo que hacemos es reservar espacio de memoria para

recibir el contenido de esta variable, entonces debemos declarar que tipo debe ser esta

variable para establecer el tamaño de memoria que va a reservar la variable.

Se almacena un valor en una variable con el fin de leer y trabajar con el valor de la

variable o cambiar el valor.

NOMBRANDO UNA VARIABLE.

Page 18: powerbuilder-1

El nombre de una variable puede ser tan largo como 99 caracteres.

Puede elegir cualquier nombre que quiera.

El primer carácter deberá ser una letra y los caracteres restantes debe ser letras

dígitos o caracteres especiales como: ($),(#),(%),(¡),(¿)

DECLARAR UNA VARIABLE.

El compilador de Power Builder requiere que cada variable sea declarada. DECLARE

VARIABLES – significa notificar a Power Builder acerca de los nombres de las

variables que el Power Script utilizará y el tipo de datos que cada una tendrá.

Para declarar una variable., ingrese el tipo de datos seguidos por uno o más espacios y el

nombre de la variable.

Ejemplo:

STRING NOMBRE

INTEGER COSTO

También se puede declarar variables múltiples del mismo tipo de datos en una línea.

Emplee comas entre los nombres de variables:

Ejemplo:

Page 19: powerbuilder-1

Nota. Para el Power Script le es indiferente el uso de mayúscula y/o minúsculas.

TIPOS DE DATOS.

Cada variable en la aplicación Power Builder debe tener un tipo de dato específico. El

tipo de dato especifica, la clase de datos que una variable especifica puede contener, tal

como un String, Integer, Date. Existen cuatro tipos de categorías en los tipos de datos

en el lenguaje power Script:

TIPOS DE DATOS STANDARTTIPO DE

DATOS

DESCRIPCION EJEMPLOS

String Una cadena de texto de hasta 60,000 caracteres. S= “enrique”

Caracter o char Un carácter simple C=”K”

Integer o Int Un entero corto, o más precisamente un entero

con signo de 16 bits, un número completo sin

I=32000

Page 20: powerbuilder-1

fracción en el rango –32768 a 32767. I=-32000

UnsignedInteger,

UnsignedInt o

Uint

UnsignedInteger

Un entero sin signo de 16 bits en el rango de 0 a

65535

U=0

U=60000

Long Un entero largo, entero con signo de 32 bit en el

rango –2,147,483,648 a 2,147,483,647

I=1000000

I=-1000000

UnsignedLong o

Ulong

Un entero sin signo de 32 bits en un rango de 0 a

4,249,967,295

U=200000

Decimal o Dec Un número decimal con signo de mas de 18

dígitos, con un punto decimal en cualquier parte

de los 18 dígitos.

D=256.369

Real Un número de 32 bits con signo y punto flotante

con aproximadamente 6 dígitos de exactitud y un

rango de 1.17E-38 a 3.4E+38

R=256.369

Double Un número con signo y punto flotante con

aproximadamente 15 dígitos de exactitud y un

rango de 2.2E-308 a 1.7E+308

Dbl=256.369

Date Una fecha, con año, mes y día en el rango 1000-

01-01 a 3000-12-31

D=2005-04-16

Time Una hora del día; hora, minuto, segundo y más de

6 dígitos por segundo fraccional, en el rango

T=13:50:00

Page 21: powerbuilder-1

00:00:00 a 23:59:59.99999

Datetime Combinación de una fecha y una hora en un único

tipo de datos. Se usa para mantener un valor de

este tipo recuperado de la base de datos.

Boolean Tipo de datos lógico, donde contiene dos posibles

valores: true o false

B=false

Blob (Binary

Large Object)

Utilizado para almacenar una cantidad ilimitada

de datos tal como una cantidad grande de texto o

un gráfico. Datos sin formato, por ejemplo, una

imagen o un bloque de texto.

Any Un tipo de dato genérico capaz de mantener

cualquiera de los tipos de valores

Todas las variables de Power Script declaradas con un tipo de dato estándar se le asigna

un valor inicial, ya sea una declaración hecha o por Power Builder. Un valor inicial es el

primer valor que una variable contiene cuando recién aparece.

Las declaraciones de variables que hemos visto. No especifican un valor inicial. Por ello

Power Builder le asigna un valor en base al tipo de dato.

Por ejemplo:

Los strings se inicializan como cadenas vacias (“”).

Los Integers decimales y otros números como 0.

Page 22: powerbuilder-1

Los booleanos como se inicializan como false

Si quiere reemplazar los valores iniciales, solo incluya un nuevo valor en la declaración

de variables, como en estos ejemplos:

String apellido=”pando”

Date fechanac=1977-07-26

Integer edad=28

TIPO DE DATOS OBJECT CLASS (CLASE DE OBJETOS)

Una variable declarada con un tipo de dato object class puede utilizarse para referirse a

un objeto.

Cada control dentro de una ventana es una clase de objeto y así mismo un objeto es una

ventana. Suponga que tiene dos controles static text: st_codigo y st_nombre, en una

ventana. Ambos son objetos static text y este script convertirá rojo a ambos. Ejemplo :

St_nombres.backcolor= 255

St_apellidos.backcolor=255

Como alternativa, puede declarar una variable static text y utilizarla como referencia

para estos objetos static text. De esta manera el script cambia a ambos controles al color

rojo:

Statictext etiqueta // declara "etiqueta" para ser una variable Static Text

etiqueta=st_nombres //asigna la variable al primer control.

Page 23: powerbuilder-1

etiqueta.backcolor=255 // cambia el color del fondo a rojo

etiqueta=st_apellidos // Asigna la variable al segundo control.

etiqueta.backcolor = 255 //cambia el color del fondo a rojo

Cada tipo de objeto, tal como el Static Text, es un tipo de dato object class, en otras

palabras se puede utilizar para declarar variables.

Un uso importante de tipos de datos object class es declarar y crear instancias de objetos

no visuales, especialmente para clases de objetos definidos por el usuario.

Parte II

Analizando el programa

Page 24: powerbuilder-1

En la figura podemos observar que tenemos un workspace llamado wOlansystem, el cual consta del target correspondiente.

Esta aplicación contiene datawindows y ventanas.

Ahora como primer punto abrimos el objeta tar, por defecto nos muestra la ventana con el evento open.

Page 25: powerbuilder-1

En este evento es donde debemos indicar que ventana será la que se abra primero.

Pero como esta aplicación trabaja con conexión a base de datos, Access en esta ocasión, necesitamos crear una conexión en el pintor de base de datos.

PowerBuilder no trae un driver nativo para trabajar con Access, es por eso que usaremos el ODBC.

Nota: Las líneas de código que llevan los slash dobles no son tomadas en cuenta por el compilador, son consideradas como comentarios.

Para crear un DSN el cual nos permitara conectarnos a la base de datos, abrimos el panel de control, escogemos herramientas administrativas y luego orígenes de datos ODBC.

Page 26: powerbuilder-1

Al darle dobleclick nos aparecerá la siguiente ventana

Seleccionamos DNS de Sistema.

Le damos click en agregar y nos muestra la siguiente ventana.

Page 27: powerbuilder-1

Seleccionamos driver do Microsoft Access

Y le damos click en finalizar.

En Nombre del origen de datos le colocamos un nombre que este acorde con nuestra base de datos.

Luego click en seleccionar bara buscar la base de datos.

Page 28: powerbuilder-1

Click en aceptar en las ventanas que queden abiertas y ya tenemos nuestro DSN.

Ahora nos vamos a powerbuilder, al pintor de base de datos.

En ODB ODBC le damos click derecho y aparece el siguiente menú y seleccionamos New Profile

Page 29: powerbuilder-1

Ingresamos un nombre al profile y seleccionamos el DSN que habíamos creado.

Luego nos vamos a la pestaña preview para probar la conexión y le damos click a test connection.

Y nos debe aparecer el siguiente mensaje indicando que la conexión tuvo éxito.

Page 30: powerbuilder-1

Luego clic en copy y luego en Ok.

Después nos dirigimos al objeto tar y en el evento open pegamos lo que tenemos en el portapapeles.

SQLCA.DBMS = "ODBC"

SQLCA.AutoCommit = False

SQLCA.DBParm = "ConnectString='DSN=bdproduccion;UID=;PWD='"

Con estas lineas estamos indicando que base de datos vamos a usar

Page 31: powerbuilder-1

connect using sqlca;// estamos indicando que nos conectaremos usando la transanccion por defecto sqlca

si el código devuelto es cero, que indica que no hay ningún error y si estamos conectados a la base de datos

if sqlca.sqlcode=0 then

abrimos la ventana principal con la instruccion open y dentro de los parentesis el nombre de la ventana que queremos abrir.

open(w_principal)

else

//De caso contrario muestra el error mostramos un mensaje con el error devuelto

messagebox("ERROR",sqlca.sqlerrtext)

halt // con esta instrucción terminamos la aplicacion

end if

Si ejecutamos la aplicación y todo va bien nos mostrara la ventana principal

Page 32: powerbuilder-1

Si hacemos click en el menú

Mostrar registros

Aparecerá la ventana con un datawindow en el.

Ahora cerramos la aplicación y abrimos el menú m_principal, con esto estamos trabajando con el pintor de menú.

Page 33: powerbuilder-1

Nos ubicamos en el menú MostrandoRegistros

En la parte derecha del pintor tenemos las propiedades el menú.

Entre las mas usadas tenemos:

Name: Es el nombre del menú, el cual se utiliza para hacer referencia a dicho menú.

Page 34: powerbuilder-1

Text: Es el texto que llevara el menú.

MicroHelp: Es el texto que aparecerá en la parte inferior del MDIHELP.

MenuImage: Aquí podemos asignarle una imagen para nuestro menú.

Y en la parte de abajo tenemos los eventos del menú, el evento mas común es el clicked(click).

OpenSheet(w_produccion,w_principal,2,Original!)La instrucción opensheet abre la ventana como si fuera una hoja que pertenece a la ventana w_principalDentro del paréntesis van 4 parametrosEl primero indica la ventana a abrir que en este caso es el w_produccion, segundo parámetro el padre que será la ventana w_principal, que es del tipo MDI.Tercer parámetro es opcional:posición (opcional) El número de elemento de menú (en el menú asociado con la hoja) a la que desea anexar los nombres de las hojas abiertas. Elementos del menú barra de menú se numeran de izquierda a derecha, empezando por 1. El valor predeterminado de 0 listas de las hojas de abrir con el tema del siguiente menú a la última.Cuarto parámetro también es opcional.arrangeopen (opcional) Un valor del tipo de datos enumerado ArrangeOpen especificar cómo desea que la hoja sea organizada en el marco en relación con otras hojas cuando se abre: · cascaded! - (Por defecto) Cascada de la hoja en relación con otras hojas abiertas, de modo que la barra de título está por debajo de la hoja anteriormente abrió · layered! - Capa de la hoja para que ocupe el marco y cubre las hojas abiertas con anterioridad · Original! - Abra la hoja en su tamaño original y en forma de cascada.

Ahora nos dirigimos a la ventana w_produccion.

Al abrir la ventana w_produccion nos muestra automáticamente el pintor de window.

Page 35: powerbuilder-1

Si seleccionamos el dw(datawindow) control veremos sus propiedades en la lado derecho del pintor.

Name: nombre del dw, es que usamos para programar.

Page 36: powerbuilder-1

DataObject: Es el nombre del dw object, esta propiedad también se puede cambiar en tiempo de ejecución como se muestra a continuación:

dw_1.dataobject="miobjecto dw"

donde dw_1 es el control dw que esta insertado en la ventana(window), mientras dataobject es la propiedad con la cual asignamos el objeto dw que contendrá el control dw.

Entre las comillas ira el nombre del objeto dw.

En la figura anterior vemos que la propiedad dataobject esta asignada en tiempo de diseño con el datawindow object “dwgrid_produccion”, el cual esta previamente creado y esta en nuestra aplicación.

Si queremos modificar el dwo(datawindow object) le damos click derecho sobre el control dw.

Y seleccionamos Modify datawindow, pero verificamos que esta conectada la base de datos a través del pintor para poder trabajar con el diseñador.

Nos dirigimos al pintor de base de datos

Page 37: powerbuilder-1

En este caso myprofile es el profile que uso para conectarme a mi base de datos, entonces como no esta conectada lo que hago es click derecho y le doy click en connect.

Ahora si me voy a modificar el dwo, click derecho sobre el dw control y selecciono Modify datawindow.

Page 38: powerbuilder-1

Lo que estamos observando es el dwo con su respectivo pintor.

Si le damos click en el icono data source podremos modificar los campos que se mostraran en el dwo, es decir podemos seleccionar varias tablas y de estas tablas podemos seleccionar los campos que necesitemos.

Page 39: powerbuilder-1

Actualmente solo nos muestra una tabla, pero si queremos agregar otra tabla, solo le damos clic derecho y le damos clic en select table

Con esta opción nos muestra las tablas y consultas que tenemos en la base de datos.

Page 40: powerbuilder-1

En la parte inferior del pintor tenemos varias pestañas con las siguientes opciones:

Sort: Aquí podemos ordenar los el dw según el campo que nosotros seleccionemos.

Where: Para las condiciones where

Group: Para hacer las agrupaciones

Having: para comparaciones con un campo agregado

Page 41: powerbuilder-1

Compute fields: para generar los campos calculados

Sintaxis

En el menú Desing tenemos la opción retrieval arguments

Aquí podemos agregar los argumentos que queramos y usarlos en la clausula where

Por ejemplo:

Page 42: powerbuilder-1

Y para usarlo voy a pestaña where, elijo el campo por el cual quiero comparar luego en en la otra columna indico el operador, después le doy clic derecho y en el menú eligo Arguments

Y en la siguiente ventana aparecerán los argumentos que habíamos creado, como solo creamos uno, solo aparece un argumento, lo seleccionamos y le damos clic en paste.

El resultado es el siguiente:

Page 43: powerbuilder-1

si observamos en la columna value, el argumento que acabamos de insertar se le antecede los dos puntos, esto es para indicarle que es una variable. Ahora para poder usar el dwo al momento de hacer el retrieve, tenemos que pasarle como parámetro dicho argumento o valor, por ejemplo.

Suponiendo que el dw_1(dw control) tenga dicho dwo(datawindow object) que necesita un parámetro, entonces tendría que hacer lo siguiente.

Dw_1retrieve(“0001”)

Con esto solo nos recuperará las filas que tengan como idproduccion el 0001.

Ahora regresamos a la ventana w_produccion y entramos al dw_1(datawindow control), para esto le damos doble click al control datawindow y esto nos lleva a los eventos, seleccionamos el evento constructor, aquí tenemos lo siguiente.

Page 44: powerbuilder-1

Analizando el codigo:

this.settransobject(sqlca)

this=este, es lo mismo que decir dw_1, si estuviéramos programando en otro control, el this hace referencia al control donde se esta programando. Entonces

this es igual al control u objeto donde estoy programando.

Después tenemos settransobject que indica que estamos seteando o le vamos a dar un valor al objeto de transacción del dw el cual será el parámetro que recibe, ese parámetro es el que esta entre paréntesis, por defecto se pone sqlca, esta es la transacción que usamos al iniciar la aplicación.

Con esto ya tenemos el dw asociado a la transacción, pero aún no mostrara nada de datos, porque aún no le hemos dicho que haga eso, la siguiente instrucción se encarga de recuperar los datos de la bd.

this.retrieve()

Con esto recupero los datos.

dw_1.modify("datawindow.readonly=yes")

La instrucción modify recibe como parámetro un string, en el cual indicamos que es lo que queremos modificar del objeto dw, con datawindow.readonly=yes, indico que el objeto dw sea de solo lectura y no pueda modificarse.

Page 45: powerbuilder-1

Alcances

Abrimos el menú m_principal y nos ubicamos en el editar persona

Interpretando el código

//variables del tipo integer

Integer li_cod,li_retorno

//se obtiene el valor de la columna idpersonal de la fila actual y se la almacena en la variable li_cod

li_cod = w_personal.dw_1.getitemnumber( w_personal.dw_1.getrow(),'idpersonal')

//se abre la ventana w_editper y se le paso como parámetro o mensaje la variable li_cod

OpenWithParm(w_editper,li_cod)

//la ventana w_editper supuestamente devuelve un valor

li_retorno = message.Doubleparm

if li_retorno=0 then

else

w_personal.dw_1.retrieve( )

end if

Page 46: powerbuilder-1

Cuando se trabaja con mensajes(pasando parámetros a otras ventanas) las ventanas que reciben el parámetro deben ser del tipo response.

Luego abrimos la ventana w_ediper y en el evento open de esta ventana

Encontramos lo siguiente:

integer li_destino

li_destino = message.Doubleparm//es aqui donde recibe el parámetro

if li_destino=1 then

dw_1.retrieve(li_destino)

dw_1.insertrow(0)

dw_1.scrolltorow(0)

else

dw_1.retrieve(li_destino)

end if

si la ventana w_personal no esta abierta, entonces se producirá al siguiente error

Con lo cual nos indica que es nulo el objeto porque nunca abrimos la ventana w_personal.

Pongas un botón en w_personal que llame a la ventana w_editper y esa ventana la pongas del tipo response