Está en la página 1de 13

Ejemplo de desarrollo de componentes

Pgina 1 de 6
Este ejemplo muestra la construccin de un componente bsico que usa herencia, Error
Logging, Manejo de Excepciones y Acceso a Datos.

Descarga e Instalacin del EAServer

La ltima versin del EAServer puede ser descargada de la pgina de Sybase a travs del
siguiente vnculo:

http://www.sybase.com/easerver4dev
(Debes tener una cuenta para poder descargar el EAServer)

Para poder instalar el EAServer basta con descomprimir el archivo descargado y ejecutar
setup.exe, luego se debe seguir el asistente de instalacin y aceptar las opciones por defecto.
Debemos asegurarnos que los puerto por defecto para los protocolos iiop sea 9000 y para http
sea 8080.

Arrancar el Servidor

Cuando haya terminado la instalacin debemos arrancar el Jaguar y para hacerlo debemos
seguir los siguientes pasos: Inicio | Programas | Sybase | EAServer | Jaguar Server. Si todo fue
correcto debemos observar la siguiente ventana:
Importante: No debemos cerrar esta ventana pues finalizaramos el Jaguar.

Iniciar EAServer Manager

El EAServer Manager es un programa que nos permite administrar, entre otras cosas, todo el
trabajo que realicemos sobre los componentes PowerBuilder que vamos a programar y para
arrancarlo debemos seguir los siguientes pasos: Inicio | Programas | Sybase | EAServer
Manager.
Luego debemos conectarnos al jaguar de la siguiente manera: Tools | Connect | EAServer
Manager. Aparecer una ventana en la cual debemos digitar la siguiente informacin:
User Name: jagadmin
Password: No escribir nada.
Host Name: Nombre de su maquina
Port Number: 9000

Configurar el Cach de Conexiones

Una vez conectados al EAServer Manager podemos configurar el Cach de Conexiones, para
ello debemos ubicarnos en la opcin Connection Caches, escojer EASDemo y hacerle ping, tal
como se muestra en la siguiente imagen:

Cuando el ping es correcto debemos observar la siguiente ventana:


Ahora ya tenemos todo listo para empezar a construir nuestros componentes!!

Preparando el Workspace

Debemos crear un Workpace con nombre ejemplo el mismo que debe contener dos targets:
servidor y cliente. La aplicacin servidor la utilizaremos para guardar los componentes
genricos que corrern en el Jaguar y la aplicacin cliente nos servir para probar nuestros
componentes.

Creando EAServer Profile

Para iniciar con el trabajo de componentes debemos crear un Perfil (Profile) al Jaguar de la
siguiente manera: Tools | EAServer Profile... Clic en el botn ADD y digitamos la siguiente
informacin:

Creando el objeto base

Este objeto tendr la funcionalidad de LOG para que todos sus descendientes la ocupen en
diferentes tareas.

Para crear el objeto base: New | PBObject | EAServer Component Wizard. Debemos
asegurarnos que las propiedades del asistente estn de la siguiente manera:
Propiedad Valor
Interface Options Implement New Interface
PowerBuilder Object Name n _base
EAServer Component Name base
EAServer Profiles localhost
Package Name ejemplo
Component Type Standard Component
Instance Pooling Supported
Transaction Support Requires Transaction
Project p_servidor

Ahora que ya tenemos el objeto base, empecemos a escribir algo de cdigo:

Declaracin de las variables ErrorLogging y TransactionServer

Declarar variables de instancia:

Protected:
// Acceso al servicio LOG
ErrorLogging el
// Para llamadas entre componentes
TransactionServer ts

Iniciar el acceso a los servicios ErrorLogging y TransactionServer

En el evento constructor:

GetContextService("TransactionServer", ts)
GetContextService("ErrorLogging", el)

Ahora todos los objetos que sean heredados de n_base tendrn la funcionalidad de LOG y
llamadas internas entre componentes.

Creando el objeto de acceso a datos


Empezamos heredando un objeto de n_base y lo llamaremos n_base_datos. Este objeto nos
ayudar a la gestin con datos desde una base de datos.

La funcin de n_base_datos ser la siguiente:

Conectarse a la base de datos usando un cach de conexin


Crear un componente DataStore
Asociar un DataWindow con el componente DataStore
Manejar transacciones
Desconectarse de la base de datos

Declarar DataStore

En las variables de instancia:

Protected:
DataStore ids_data

Funcin of_conectardb de n_base_datos

Esta funcin conecta el componente a la base de datos usando el objeto de conexin SQLCA

el.log( "--------- Inicio of_conectardb ---------" )

Throwable ProcessException

Try
// Profile EAS Demo DB V10
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "cachename='EASDemo',UseContextObject='yes',DisableBind=1"

CONNECT USING SQLCA;


IF SQLCA.SQLCode <> 0 THEN
IF SQLCA.SQLDBCode = 0 THEN
RETURN 1
End If

ProcessException = Create Throwable


ProcessException.setmessage("Database Connection Error: " + SQLCA.sqlerrtext )
Throw ProcessException
End If

Catch (Throwable ProcessError)


el.Log( ProcessError.GetMessage() )
Throw ProcessException
End Try

el.Log( "---------- Fin of_conectardb ----------" )

RETURN 1

Funcin of_setdataobject de n_base_datos

Argumento:

Pass By Argument Type Argument Name


value string as_dataobject

el.Log("DWObject: " + as_dataobject)

Throwable ProcessException
Try
IF NOT isValid(ids_Data) THEN
ProcessException = Create Throwable
ProcessException.setmessage("SetDataObject Error<"+as_dataobject+">: DataStore no es
vlido")
Throw ProcessException
End If
IF IsNull(as_dataobject) THEN
ProcessException = Create Throwable
ProcessException.setmessage("SetDataObject Error<"+as_dataobject+">: Objeto es
NULL")
Throw ProcessException
END IF

ids_data.dataobject = as_dataobject
Catch (Throwable ProcessError)
el.log( ProcessError.GetMessage() )
Throw ProcessException
End Try

return 1

Funcin of_settransobject de n_base_datos

Throwable ProcessException
Try
ids_data.SetTransObject(SQLCA)
el.Log("SetTransObject Successful")

Catch (Throwable ProcessError)


el.Log(ProcessError.GetMessage() )
Throw ProcessException
End Try

RETURN 1

Las funciones setDataObject y settransobject fueron codificadas por propsitos de depuracin y


para controlar errores comunes en la programacin. Recuerde que estamos construyendo una
aplicacin distribuida por lo que toda la codificacin ser ejecutada en el lado del Servidor y no
en el lado del Cliente.

Desconectar de la base de datos

En el evento Deactivate:

DISCONNECT USING SQLCA;

Heredando n_base_datos

Ahora ya estamos listos para crear nuestro primer componente que nos permita recuperar datos
de clientes. Lo primero que debemos hacer es crear un DataWindow Object Tabular
(d_customer) que recupere informacin de la tabla customer. Nos podra quedar algo as:
Heredemos de n_base_datos y creemos el componente n_customer con la funcin of_recuperar

Funcin of_recuperar de n_customer

Argumento:

Pass By Argument Type Argument Name


reference blob ablb_data

Throwable ProcessException
Try
ids_data = create DataStore
of_conectardb( )
of_SetDataobject( "d_customer")
of_SetTransObject()
ids_data.retrieve( )
ids_data.GetFullState( ablb_data )

el.Log( "Filas: " + String(ids_data.rowcount()))

Catch (Throwable ProcessError)


el.Log("Error: " + ProcessError.GetMessage() )
RETURN -1
End Try

RETURN 1

Por supuesto que este componente es muy bsico pero til para empezar el trabajo con
componentes PowerBuilder.
Ahora nos queda por publicar el componente n_customer al servidor Jaguar, para lo cual vamos
a configuar el objeto p_servidor que anteriormente creamos y para hacerlo debemos seguir los
siguientes pasos:

Doble Click en el objeto p_servidor, luego Edit | Select Objects... luego nos aseguramos que
est marcado el objecto n_customer, as:

Ahora vamos a las propiedades, Edit | Properties | Components y cambiamos algunos valores tal
como se muestra en la siguiente imagen:
Deploy

Estamos listos para publicar el componente, lo nico que debemos hacer es click en Design |
Deploy Project, si todo fue correcto debemos visualizar el siguiente mensaje:

Hasta aqu nuestro trabajo con el Servidor. En las siguientes secciones vamos a
construir la aplicacin del Cliente.
Creando el Objeto Proxy en el lado del Cliente

Un objeto proxy nos sirve para tener acceso a mtodos de componentes remotos. Para crear el
objeto proxy: New | Project | EAServer Proxy Wizard, debemos asegurarnos de tener los
siguientes valores en el asistente de creacin:

Propiedad Valor
Application Libraries cliente.pbl
Project p_cliente_easproxy
EAServer Profiles localhost
Componentes ejemplo/n_customer
Proxy Library cliente

Por ltimo debemos hacer Deploy al objeto p_cliente_easproxy (click derecho sobre
p_cliente_easproxy | Deploy). Si todo fue bien, deberamos tener los siguientes objetos en el
Workspace:

Creando ventana de datos

Ya es hora de crear una ventana para ver resultados!!. Lo nico que debe tener la ventana es un
DataWindow Control que es donde se mostrarn los datos. Y el cdigo que logra ese resultado
se debe escribir en el evento Open:

Variables de Instancia

Connection conn
n_customer in_customer

Evento Open de w_customer

// Conexin al servidor Jaguar


Integer li_rc
Blob lblb_data

conn = create Connection

conn.Application = "ejemplo"
conn.Driver = "jaguar"
conn.UserID = "jagadmin"
conn.Password = "rednose"
conn.Location = "desarrollo:9000"

li_rc = conn.Connecttoserver( )

if li_rc <> 0 then


MessageBox("Error", "Conexin fall. Rtn: " + string(li_rc) )
return
end if

if conn.createinstance( in_customer ) <> 0 then


MessageBox("Error", "No se pudo instanciar in_customer" )
return
end if

// Recupero los datos


in_customer.of_recuperar( lblb_data )
dw_1.SetFullState(lblb_data)

La ventana puede quedar algo as: