sábado, 24 de septiembre de 2011

Argumentos en DataWindows

Para crear argumentos de recuperación en un DataWindows debemos seguir los siguientes pasos:
  • Ingresar al DataWindows y darle clic a la opción Data Source del PainterBar:
  • Luego clic en Retrieval Arguments de la opción del menu Design:
  • Por ultimo creamos el argumento:

martes, 9 de agosto de 2011

Asociar Menu a un Window por PowerScript

Un Menu Object puede ser asociado a un Window Object con la siguiente sintaxis:

w_nombre_window.ChangeMenu(m_nombre_menu)

domingo, 7 de agosto de 2011

Migrando de Versión a Aplicaciones PowerBuilder

En los últimos años he participado en migraciones de Aplicaciones PowerBuilder desarrolladas en versiones 6.5, 7.0, 8.0 y 9.0 a versiones 10.5, 11.0 y 11.5.

Pero hay un detalle que se debe tener en cuenta antes de comenzar a migrar de versión, si es mejor desarrollar un nuevo software o migrar de versión las Aplicaciones PowerBuilder. Algunos clientes no solo quieren migrar de versión sus Aplicaciones PowerBuilder, también quieren migrar de Base de Datos sea a una nueva versión, a una Base de Datos de distinta tecnología Licenciada o Libre. Algunos clientes prefieren migrar de versión sus Aplicaciones PowerBuilder porque piensan que se ahorra mas tiempo, es mas barato, van a poder utilizar las nuevas bondades de ultima versión migrada, etc.

He tenido la oportunidad de migrar distintas Aplicaciones PowerBuilder encontrándolas sin estándares de programación, con exagerado SQL Embebido, sin POO, etc y en estos casos es donde aplico Refactoring (dedicare un post sobre mi experiencia en Refactoring a Aplicaciones PowerBuilder).

PowerBuilder cuenta con un asistente que nos permite ver que sintaxis es obsoleta y lo encontraremos seleccionando File - New

sábado, 6 de agosto de 2011

Programación Orientada a Objetos en PowerBuilder

El día de ayer recomendaron (En clases) un libro muy bueno que de verdad me gusto leer ya hace un buen tiempo atrás (Enero del 2009) Programación Orientada a Objetos de Luis Joyanes Aguilar, recordé entonces el primer libro que leí sobre Programación Orientada Objetos, Aprendiendo Programación Orientada A Objetos en 21 Lecciones (Octubre 2008), ambos me ayudaron mucho para entender sobre la Programación Orientada a Objetos.

Antes de leer estos libros solo tenia la idea de heredar es por eso que en el 2007 publico este post Herencia en PowerBuilder, pero faltaba Encapsulación y Polimorfismo, entonces no aplicaba POO en PowerBuilder siendo una herramienta Orientada a Objetos.

El punto de partida y que me cambio totalmente la idea sobre POO en PowerBuilder fue cuando di mantenimiento a una aplicación desarrollada con PFC, sinceramente fue muy complejo todo al comienzo, luego empece a entender y a manejar las PFC pero jamas me agrado, es así que en el 2008 publico este post PowerBuilder Foundation Class.

Trabajar con aplicaciones desarrolladas con PFC y el querer aplicar POO en PowerBuilder me lleva a buscar en la web sobre POO y es cuando me encuentro los libros ya mencionados anteriormente y también con documentación en ingles sobre POO en PowerBuilder aunque muy poca.

Bueno llego el momento de explicar lo que me faltaba aplicar o lo que se no sabia aplicar:

Encapsulación

La encapsulación es un proceso de ocultar el funcionamiento interno de un objeto.

PowerBuilder soporta la encapsulación de variables, eventos y funciones a nivel de objeto para las ventanas, menus y user object. Mediante el uso de variables instancia, eventos definidos por el usuario y funciones de nivel de objeto.
Polimorfismo

El polimorfismo permite que una operación se comporte de manera diferente, dependiendo del contexto en el que se llama a la operación.
PowerBuilder soporta Overloading y Overriding
  • Overloading: funciones con el mismo nombre en el mismo objeto.

  • Overriding: funciones descendientes suelen tener los mismos argumentos, pero el código dentro de la función es diferente.

sábado, 2 de octubre de 2010

Función que abre Windows desde un TreeView

Esta función permite abrir un Window desde un TreeView leyendo o recorriendo cada Item y/o Sub Item de un Objeto Menu.

Esta funcion la tengo creada en mi Objeto TreeView, en mi caso mi función tiene por nombre of_openwindow con dos parametros:

am_menu de tipo Menu
as_label de tipo String
Copiar y Pegar:

Long ll_Item
Long ll_Items
Long ll_SubItem
Long ll_SubItems
String ls_TextSubItem
Menu lm_menu

ll_Items = UpperBound(am_menu.Item)

FOR ll_Item = 1 TO ll_Items
ll_SubItems = UpperBound(am_menu.Item[ll_Item].Item)
FOR ll_SubItem = 1 TO ll_SubItems
lm_menu = am_menu.Item[ll_Item].Item[ll_SubItem]
ls_TextSubItem = am_menu.Item[ll_Item].Item[ll_SubItem].Text

IF ls_TextSubItem = as_Label THEN
lm_menu.EVENT Clicked()
EXIT

END IF
NEXT
NEXT

Luego en el Evento Clicked del Objeto TreeView:

//Creando el Objeto Menu y usando el Menu
Menu lm_Menu

lm_Menu = CREATE USING m_nombre_menu

//Declarando variable TreeviewItem
TreeViewItem itv_TreeViewItem

//Declarando variable String para obtener la Etiqueta o Label del Item del Objeto TreeView
String ls_Label
ls_Label = ltv_TreeViewItem.Label

//Invocamos a la Funcion of_openwindow dandole los parametros que necesita
of_openwindow(lm_Menu, ls_Label )

NOTA: Para el ejemplo se declararon las variables de manera local en el mismo Evento Clicked del Objeto TreeView, ya depende mucho de cada uno como implementar este aporte quizás como es mi caso declarando las variables de tipo instancia porque tengo un Objeto TreeView Ancestro y las variables las utilizo para otras funcionalidades, lo importante es poder compartir con esta función y sea de gran utilidad.

domingo, 29 de agosto de 2010

Transaction Object

Un Transaction Object u Objeto Trasacción es un objeto no visual que contiene la información necesaria para conectarse a una base de datos. El objeto Transaction tiene muchas propiedades, estas se usan de manera diferente segun la base de datos a la cual se desea conectar.

Las Propiedades del Objeto Transaction se dividen en:

Propiedades para la comunicación de base de datos

PropiedadTipoDescripción
DBMS String Nombre del DBMS
Database String Nombre de la Base de Datos
UserID String Nombre de usuario o identificador de usuario
DBPass String Contraseña que se utiliza para conectarse a la base de datos
Lock String Nivel de bloqueo
LogID String Nombre o identificador de usuario que se conectará al servidor
LogPass String Contraseña utilizada para conectarse al servidor
ServerName String Nombre del Servidor
AutoCommit Boolean Activa el procesamiento de transacciones True / False
DBParm String Especifica un DBMS

Propiedades que retornan información:

PropiedadTipoDescripción
SQLCode Long

El código de éxito o de error de la operación más reciente.

0 = Exito

100 = No existe un conjunto de resultados obtenidos

-1 = Error

SQLNRows Long Número de filas afectadas
SQLDBCode Long Especifica código de error del DBMS
SQLErrText String Especifica mensaje de error del DBMS
SQLReturnData String Especifca el DBMS

sábado, 28 de agosto de 2010

Conexión a Firebird desde PowerBuilder

Para conectarse a Firebird desde PowerBuilder se debe instalar primero el controlador odbc que lo podemos conseguir de la web oficial de Firebird:

http://www.firebirdsql.org/index.php?op=files&id=odbc
Descargamos la versión que corresponde, luego configuramos en:

Panel de control - Herramientas administrativas - Origenes de datos ODBC.


Una vez instalado y configurado el odbc, vamos a PowerBuilder:
Verificamos si la conexión es satisfactoria luego de haber ingresado los datos respectivos en la pestaña Connection.
Espero sea de gran utilidad.