Está en la página 1de 30

POWERBUILDER FOUNDATION CLASS

POWERBUILDER FOUNDATION CLASS


Registro de Cambios del documento
Versin
1
1
1

Revisin
0
1
2

Fecha
Responsable
9-03-1999 Jorge Garca Bravo
12-03-1999 Jorge Garca Bravo
12-03-1999 Francisco Lpez

1
1

3
4

16-03-1999 Jorge Garca Bravo


06-04-1999 Francisco Lpez

07-04-1999 Francisco Lpez

12-04-1999 Jorge Garca Bravo

3-05-1999

Eduardo Brox Ortega

Comentarios
Versin Inicial
Se aade el apndice
Se aade al apndice informacin
sobre el servicio statusbar
Informacin sobre los servicios
Informacin sobre el servicio de
ordenacin de la DW por columnas
Informacin sobre los objetos
u_em_calendar y u_em_calcular
Funciones para la presentacin
preliminar.
Revisin del servicio de bsqueda y
reeemplazamiento

POWERBUILDER FOUNDATION CLASS

Introduccin
Lo primero que hay que hacer para empezar a trabajar con las PFC es comprobar que se
tienen en el disco duro las siguientes libreras de PowerBuilder: PFCAPSRV.PBL,
PFCDWSRV.PBL, PFCMAIN.PBL, PFCUTIL.PBL, PFCWNSRV.PBL, PFEAPSRV.PBL,
PFEDWSRV.PBL, PFEMAIN.PBL, PFEUTIL.PBL y PFEWNSRV.PBL.
Las PFC son un conjunto de objetos de PowerBuilder que se utilizan para desarrollar
libreras de clases y aplicaciones en PowerBuilder. Estn basadas en programacin orientada a
objetos y su objetivo es proporcionar una serie de servicios estndar de forma que no sea
necesario escribir el cdigo correspondiente repetidas veces. As la primera de las libreras
contiene los servicios globales y de aplicacin, la segunda los correspondientes a DataWindows,
la tercera contiene todo tipo de objetos comunes a cualquier aplicacin, la cuarta los servicios
de utilidades y la quinta los correspondientes a ventanas.
A pesar de lo anteriormente comentado en realidad disponemos de diez archivos .PBL y
no cuatro. Esto se debe a lo que en PowerBuilder llaman el nivel de extensin, y que est
formado por los cuatro archivos que comienzan con PFE. La idea consiste en que los diferentes
objetos que se proporcionan no tienen porque ajustarse a las necesidades del programador con
lo que este realizara los cambios que considere oportunos. Pero esto sera un problema cuando
apareciese una nueva versin de las PFC ya que al instalarla se machacaran las anteriores
libreras y con ellas los cambios efectuados. Para ello se implementa el nivel de extensin, los
objetos que residen en este nivel se hallan en PBLs diferentes que no son afectadas por las
nuevas versiones. Es en los objetos de este nivel en los que habr que realizar las
modificaciones que sean necesarias. Los objetos de este nivel heredan las variables, funciones y
eventos que tienen los objetos padre presentes en las PFC originales.
Los objetos que pertenezcan al nivel padre llevan todos el prefijo pfc_ mientras que los
del nivel de extensin cumplen con las reglas de nomenclatura. Por ejemplo la ventana que
muestra mensajes en la barra de estado de la aplicacin recibe el nombre de pfc_w_statusbar en
el nivel padre y w_statusbar en el nivel de extensin.
Una ltima caracterstica de las PFC es el message router que se utiliza para manejar la
comunicacin entre ventanas y mens. Es un mecanismo de paso de mensajes que viene en
todos los mens y ventanas de las PFC. Tambin puede ser utilizado para comunicar otros tipos
de objetos con ventanas.

Programar con PFC


Se pueden considerar dos opciones a la hora de empezar a programar con PFC. Una
sera empezar a trabajar directamente sobre el nivel de extensin desarrollando en l los
cambios necesarios de cara a nuestra aplicacin. Es poco recomendable de cara al desarrollo de
diferentes aplicaciones. La otra opcin es codificar en el nivel de extensin eventos y funciones
que puedan ser comunes a diferentes aplicaciones en el futuro, realizando la aplicacin sobre
nuevas PBL que se heredaran a su vez de este nivel de extensin.
En PFC existen dos tipos de objetos de usuario: los visuales y los de clase (visual user
object y class user object) que a su vez se subdividen cada uno de ellos en objetos estndar y
custom, estos ltimos proporcionan funcionalidades que son utilizadas por otros objetos en
situaciones especficas. Por ejemplo existe un objeto de usuario visual estndar para cada uno de
los controles que se pueden insertar en una ventana. Estos objetos traen ya codificados una serie
de eventos y funciones que evitan el tener que codificarlos. De esta forma a partir de ahora en
las ventanas se insertarn estos objetos y no los controles correspondientes. Otro ejemplo es el
objeto de usuario de clase estndar pfc_n_tr que se usa como objeto de transaccin con la base
de datos. Este objeto hereda del objeto de transaccin del sistema pero incluye variables de

POWERBUILDER FOUNDATION CLASS

instancia, eventos y funciones con el fin de encapsular y a la vez extender la comunicacin con
la base de datos. Se puede usar de dos maneras: como sustituto del SQLCA o como
complemento a l.
Siguiendo la filosofa de la programacin orientada a objetos PowerBuilder dispone de
un gran nmero de funciones, la mayora de ellas de objeto; ya que ahora la mayor parte de
operaciones se realizar mediante funciones. Por ejemplo para inicializar y consultar variables
se utilizarn funciones of_Set y of_Get.
Las PFC incluyen tambin bastantes eventos de usuario, viniendo algunos de ellos ya
predefinidos y estando otros listos para ser codificados.
Anteriormente ya se habl del message router; a la hora de programarlo nicamente es
necesario saber el evento de usuario que se quiere ejecutar, no necesita saber cul es la ventana
activa en ese momento o el nombre del control asociado. En realidad el mensaje que lleva el
message router es sencillamente el nombre del evento que se quiere ejecutar. Para ello hay que
utilizar la funcin of_SendMessage. Se pueden ver ejemplos en el men pfc_m_master.
Lo primero a hacer cuando se crea una aplicacin con PFC es heredar un objeto de la
clase Application Manager, declararlo como variable global, siempre con el nombre gnv_app, y
crearlo en el evento Open de la aplicacin. Este objeto ser el encargado de manejar todas las
caractersticas propias de la aplicacin como por ejemplo controlar el fichero .INI, el fichero de
ayuda, la ayuda que se muestra en la barra de estado, etc.
Los PFC estn diseados de forma que se sepa lo que hacen los diferentes objetos y se
usen para ello, es decir, hay que creerse que funcionan bien ya que el intentar seguir la manera
en que se van ejecutando los diferentes scripts es cuando menos complicado. Se puede ahorrar
un paso yendo siempre que se desee consultar uno al nivel padre ya que en el nivel de extensin,
salvo que lo codifiquemos nosotros, los scripts estn vacos.

Servicios PFC

Servicios de Aplicacin
Los servicios de aplicacin se controlan a travs del objeto n_cst_appmanager,
usando las funciones del mismo para habilitarlos y deshabilitarlos. Como gnv_app de tipo
n_cst_appmanager se define como una variable global estos servicios estn disponibles en
toda la aplicacin.
Servicio DataWindow Caching
Almacena datos para los objetos DataWindow, a fin de reducir el acceso a la base de
datos. Usa los DataStores de PB.
PFC habilita este servicio mediante el OU n_cst_dwcache.
Para habilitarlo:
gnv_app.of_SetDWCache(TRUE)
Para usarlo:

Llamada a la funcin: of_Register() de n_cst_dwcache. Hay 7 tipos de llamada


dependiendo de la fuente de datos:
Objeto DataWindow
Sentencia SQL
Control DataWindow
Control DataStore
Filas de un array
Un fichero
En todas ellas se especifica un identificador para ese objeto.

POWERBUILDER FOUNDATION CLASS

Para ver si un objeto DataWindow est ya registrado se llama a la funcin


of_IsRegistered() pasando el identificador del objeto.
Para acceder a los datos se usa la funcin of_GetRegistered() que pone los datos
en un DataStore (se utiliza ShareData() para ponerlos en una DataWindow).
Para parar el almacenamiento:
Of_UnRegister()

Para deshabilitar el servicio:

gnv_app.of_SetDWCache(FALSE)

Servicio de Debugging
Muestra mensajes cuando PFC encuentra condiciones que indican un error. Se utiliza
para resolver problemas en el entorno de desarrollo.
Para habilitarlo:
gnv_app.of_SetDebug(TRUE)

Para deshabilitarlo:

gnv_app.of_SetDebug(FALSE)

Se pueden utilizar el SQL Spy y la ventana DWProperty


Servicio Application preference
Se usa para salvar y recuperar informacin de la aplicacin y el usuario tanto de un
fichero INI como del registro de windows.
Para habilitarlo:
gnv_app.of_SetAppPref(TRUE)

Para indicar si salva a los ficheros INI (aplicacin y usuario) o al registro:


this.inv_apppref.of_SetRestoreApp(TRUE)
this.inv_apppref.of_SetRestoreUser(TRUE)
en constructor de n_cst_appmanager

Servicio de objeto ms recientemente usado


Se usa para mostrar una lista de las ventanas u hojas ms recientemente usadas en el
men Archivo. Se habilita a travs del OU n_cst_mru. El servicio MRU carga la informacin
cuando se abre la aplicacin y la guarda cuando se cierra. La informacin se puede guardar en el
registro o en un fichero INI que se indican mediante:
of_SetUserKey()
[registro]
of_SetUserINIFile() [INI]
Para usar el servicio MRU hay que aadir cdigo a dos eventos en las ventanas que se
mostrarn en la lista.
pfc_MRUProcess la informacin MRU pasada por abrir la ventana
pfc_MRUSave salva la informacin MRU al cerrar la ventana
El men m_master en la PFC incluye cinco elementos MRU al final del men
Archivo.
Para habilitarlo:
gnv_app.of_SetMRU(TRUE)

Especificar donde se va a salvar la informacin MRU usando las funciones:


of_SetUserKey()
[registro]
of_SetUserINIFile() [INI]
Registrar identificadores con el servicio MRU. Un identificador es lo que utilizar la
ventana para recuperar la informacin del servicio MRU. Para ello se utiliza la
funcin of_Register():
IF IsValid(gnv_app.inv_mru) THEN
gnv_app.inv_mru.of_Register("myapp")
END IF

Extender el evento pfc_MRUProcess en cada ventana, aadiendo cdigo para abrir

las hojas pasando los argumentos necesarios:

POWERBUILDER FOUNDATION CLASS

Window lw_frame, lw_window


n_cst_menu lnv_menu
n_cst_mruattrib lnv_mruattrib
// Check parameters.
IF IsNull(ai_row) THEN
Return -1
END IF
IF NOT IsValid(gnv_app.inv_mru) THEN
Return -1
END IF
// Retrieve row from DataStore.
gnv_app.inv_mru.of_GetItem(ai_row, lnv_mruattrib)
// Get the MDI frame, if necessary.
lnv_menu.of_GetMDIFrame(this.menuid, lw_frame)
OpenSheet(lw_window, lnv_mruattrib.is_classname, lw_frame)
Return 1
* Se puede consultar el evento pfc_MRUProcess en la ventana pfc_w_master*

Ampliar el evento pfc_MRUSave en cada ventana que use el servicio MRU. Aqu se
actualizan los campos del objeto n_cst_mruattrib que se van a salvar:
anv_mruattrib.is_id = "myapp"
anv_mruattrib.is_classname = this.ClassName()
anv_mruattrib.is_menuitemname = this.Title
anv_mruattrib.is_menuitemkey = this.ClassName()
anv_mruattrib.is_menuitemmhelp
=
"Opens
"
+
this.Title
Return 1
Ampliar el evento pfc_MRURestore en cada ventana que use el servicio MRU. Aqu

se indica el identificador de la informacin que se quiere mostrar en el men:


If IsValid(gnv_app.inv_mru) Then
Return gnv_app.inv_mru.of_Restore("myapp", This)
End If

Servicio de mensajes de error


Ofrece diversas funcionalidades para mostrar y hacer un log de los mensajes de error de
la aplicacin, usando tanto el MessageBox de PB como la ventana w_message de las PFC.
Funcionalidades:
Message logging: PFC hace un log de los mensajes cuya importancia es
mayor de un nivel especificado.
MAPI support: notificacin automtica de error va correo electrnico.
Message database: acceso a una base de datos de mensajes predefinidos lo
que proporciona estandarizacin de los mensajes de texto, eliminacin de
mensajes duplicados y facilidad de mantenimiento.
Symbolic parameter replacement: los mensajes pueden tener parmetros
que sean reemplazados en tiempo de ejecucin.
Unattended option: se hace un log o se enva un correo de los mensajes
pero no se muestran.
User input and print options: el usuario puede imprimir los mensajes y
opcionalmente aadir comentarios.
Automatic close: la ventana w_message se cerrar automticamente
despus de un nmero especificado de segundos.
* Estas dos ltimas son exclusivas de la ventana w_message*

Se usa este servicio para manejar los errores y mensajes de la aplicacin.


Para habilitarlo se crea una instancia de n_cst_error en el evento pfc_Open de
n_cst_appmanager con la funcin:
this.of_SetError(TRUE)

POWERBUILDER FOUNDATION CLASS

Especificar la fuente de los mensajes de error, hay que tener en cuenta que si se usa

como origen de los datos una base de datos debe existir en esta una tabla llamada
messages con la estructura que viene a continuacin y cuya definicin se puede ver
en el objeto DW d_definedmessages:
N Columna
Campo
Tipo
Longitud
Null
1
Msgid
Texto
40
NO
2
Msgtitle
Texto
255
NO
3
Msgtext
Texto
255
NO
4
Msgicon
Texto
12
NO
5
Msgbutton
Texto
17
NO
6
Msgdefaultbutton
Entero
NO
7
Msgseverity
Entero
NO
8
Msgprint
Texto
1
NO
9
Msguserinput
Texto
1
NO
Nombre de la clave primaria: primary
Columnas:.......msgid
Nombre del ndice: message unique (msgid)
Atributos:.........nico, ascendente
Columnas:.......msgid
Esta tabla ya ha sido creada en la base de datos GENERAL del servidor Oracle.
Si por otro lado lo que se quiere usar como origen de datos es un fichero de texto
tambin hay que generarlo con la estructura anteriormente definida:
this.inv_error.of_SetPredefinedSource("c:\eiserr.txt") [fichero]
this.inv_error.of_SetPredefinedSource(itr_error)
[base de datos]

(Opcional) Especificar el nombre del fichero de log. Para deshabilitar esta opcin

pasar una cadena vaca.


this.inv_error.of_SetLogFile("c:\pb6\errlog.txt")

(Opcional) Indicar el user ID.

this.inv_error.of_SetUser(this.of_GetUserID())
(Opcional) Indicar los tipos de mensajes para los cuales el servicio proporciona

notificacin y log automticos.


this.inv_error.of_SetNotifySeverity(5)
this.inv_error.of_SetLogSeverity(4)
(Opcional) Si se usa la notificacin automtica hay que indicar el e-mail ID y el
password del usuario actual y de los que deban recibir la notificacin ( pfc_Open de
n_cst_appmanager).
this.inv_error.of_SetNotifyConnection(ims_mailsess)
this.inv_error.of_SetNotifyWho(is_autonotify)
En la comprobacin de errores de la aplicacin se llama a la funcin of_Message(),

se puede usar un mensaje de la base de datos o indicar un mensaje de texto:


gnv_app.inv_error.of_Message("EIS0210")

Para usar parmetros simblicos (nicamente con mensajes predefinidos): definir los
mensajes en la tabla, tecleando % para marcar los lugares que sern completados en
tiempo de ejecucin:
EIS1030

Unable to find the file % in %

Crear un array de argumentos de reemplazo:


String ls_parms[ ]
ls_parms[1] = "logfile.txt"
ls_parms[2] = "c:\windows\system"
Llamar a of_Message() pasando el array:
gnv_app.inv_error.of_Message("EIS1030", ls_parms)

PFC muestra el mensaje sustituyendo el primer % por el primer elemento del array.
Servicio de seguridad

POWERBUILDER FOUNDATION CLASS

Incluye componentes administrativos y un objeto de seguridad en tiempo de ejecucin,


n_cst_security.

Para usar el servicio de seguridad de las PFC, primero hay que definir usuarios y
grupos, asociarlos con ventanas, mens, objetos de usuario y controles; y posteriormente aadir
el cdigo a la aplicacin.
Definir los usuarios y grupos como se describe en el captulo 7 PFC Utilities de los
Online Books.
Definir la seguridad de las ventanas, mens, objetos de usuario y controles de la
aplicacin como se describe en el captulo 7 PFC Utilities de los Online Books.
Crear el objeto de seguridad llamando a la funcin of_SetSecurity() en el evento
pfc_Open de n_cst_appmanager:
this.of_SetSecurity(TRUE)

Establecer un objeto de transaccin para la base de datos de seguridad.


itr_sec = CREATE n_tr
CONNECT using itr_sec;
Inicializar el objeto de seguridad (evento pfc_Open n_cst_appmanager):

this.inv_security.of_InitSecurity(itr_sec, "EISAPP", gnv_app.of_GetUserID(), "Default")

Desconectar de la base de datos y destruir el objeto de transaccin al salir de la


aplicacin (evento pfc_Close n_cst_appmanager):
DISCONNECT using itr_sec;
Destroy itr_sec
En los eventos Open o pfc_Open de la ventana para la cual se quiere aplicar la
seguridad llamar a la funcin of_Security():
IF NOT gnv_app.inv_security.of_SetSecurity(this) THEN
MessageBox("Security", "Unable to set security")
Close(this)
END IF
Tambin se puede llamar a esta funcin desde el evento Constructor de una

DataWindow o un men para los cuales se quiere implementar la seguridad.


Servicio Transaction registration
Este servicio controla los objetos de transaccinusados por la aplicacin, estos han de
estar basados en n_tr. Se usa el objeto n_cst_trregistration.
Se utiliza para seguir las transacciones cuando una aplicacin utiliza ms de una.
Cuando la aplicacin se cierra, este objeto automticamente destruye todas las transacciones
abiertas registradas. Guardar FALSE en la variable ib_autorollback de n_tr para realizar
un COMMIT y FALSE para realizar un ROLLBACK. Se puede hacer con la funcin
of_SetAutoRollback().
Para habilitarlo:
gnv_app.of_SetTrRegistration(TRUE)

Para registrar una transaccin:


gnv_app.inv_trregistration.of_Register(SQLCA)
Para controlar si el servicio hace un COMMIT o un ROLLBACK cuando es
destruido:
SQLCA.of_SetAutoRollback(TRUE)

Para indicar un nombre de transaccin:

itr_security.of_SetName("Security")

Para cerrar todas las transacciones explcitamente:


n_tr
ltr_trans[]
Integer li_max, li_count

li_max = this.inv_trregistration.of_GetRegistered(ltr_trans)
Recorrer el array n_tr haciendo COMMIT y destruyendo transacciones de la forma

adecuada:
FOR li_count = 1 to li_max

POWERBUILDER FOUNDATION CLASS

COMMIT using ltr_trans[li_count];


DESTROY ltr_trans[li_count]
NEXT

Servicios de DataWindows
PFC implementa los servicios de DataWindows a travs de un conjunto de objetos de
usuario heredados de un padre comn. El objeto padre contiene funciones, eventos y variables
de instancia necesarias para varios servicios. Cada servicio de DataWindows contiene funciones,
eventos y variables de instancia adicionales.
Para acceder a los servicios se crean objetos DataWindow basados en el objeto de
usuario u_dw que contiene:
Funciones para habilitar y deshabilitar los servicios.
Variables de instancia que permiten hacer referencia a las funciones, eventos y
variables de instancia de los servicios (variables de referencia).
Eventos y eventos de usuario precodificados que llaman a las funciones y eventos
del servicio DataWindow.
Eventos de usuario vacos en los que se puede aadir cdigo para mejorar procesos
especficos de la aplicacin.
Se aconseja usar el objeto de usuario u_dw para todos los controles DataWindow de una
aplicacin. Cada control DataWindow habilita slo los servicios que necesite.
DataWindow services ancestor
Contiene variables de instancia, eventos y funciones para el uso de todos los dems
servicios. Se pueden usar tambin muchas de las funciones del padre. Se habilita por medio del
objeto n_cst_dwsrv.
Este servicio se usa para funcionalidades generales de las DataWindows, como:
# Recibir y enviar informacin a las DataWindow.
# Como una alternativa a las funciones Modify y Describe del PowerScript.
# Servicios por defecto de DataWindow.
Como n_cst_dwsrv es el padre de todos los servicios de DataWindow sus funciones
estn disponibles en cualquiera de los dems servicios.
Para habilitarlo:
dw_emplist.of_SetBase(TRUE)
U_dw destruye el servicio automticamente cuando la DataWindow es destruida.
Para acceder a la informacin de la DataWindow, se puede llamar a alguna de las

siguientes funciones:
Funcin
of_Describe
of_GetHeaderName
of_GetHeight
of_GetObjects
of_GetWidth
of_GetItem
of_GetItemAny

Cuando llamarla
Para acceder a informacin en los atributos y columnas de una DW
Para determinar el nombre de la cabecera para una columna
especfica
Para determinar la altura de una columna
Para acceder a los nombres de los objetos en una DW
Para determinar la anchura de una columna
Para recuperar datos para la columna de una DW, independientemente
del tipo de los datos

Para introducir datos en una DW, se puede llamar a alguna de las siguientes

funciones:
Funcin
of_Modify
of_SetItem

Cuando llamarla
Para establecer los atributos y columnas de una DW
Para establecer o modificar los valores que se muestran en una
columna de una DW independientemente del tipo de dato

Para refrescar todas las DDDW en una DW:


Integer li_return

POWERBUILDER FOUNDATION CLASS

li_return = dw_emplist.inv_base.of_PopulateDDDWs()
gnv_app.of_GetFrame().SetMicroHelp(String(li_return) + "DDDW columns refreshed")

Para acceder a los servicios por defecto de las DW, se puede llamar a alguna de las

siguientes funciones:
Funcin

Cuando llamarla

of_GetColumnDisplayName
Para determinar el nombre de columna que se mostrar
of_GetColumnDisplayNameStyle Para determinar el estilo del nombre de columna que se
mostrar
of_GetDefaultHeaderSuffix
Para determinar el sufijo por defecto de las DW para las
cabeceras de columnas
of_GetDisplayItem
Para determinar el texto que se muestra cuando sale el
of_GetDisplayUnits
mensaje de CloseQuery
of_SetColumnDisplayNameStyle Para especificar que servicio DW se muestra cuando se
hace referencia a las columnas:

Nombres de columnas DW

Nombres de columnas de la base de datos

Nombres de cabeceras de columnas de la DW


of_SetDefaultHeaderSuffix
Para especificar el sufijo por defecto de las DW para las
cabeceras de columnas (por defecto _t)
of_SetDisplayItem
Para especificar el texto que se muestra cuando sale el
of_SetDisplayUnits
mensaje de CloseQuery

Servicio DropDownDataWindow search


Se usa para desplazar las DDDW hasta el primer elemento que comience con la tecla
que se teclee. Si a continuacin se pulsase otra tecla se desplazara hasta el primer elemento que
comience por esta nueva letra. Este servicio se habilita a travs del objeto
n_cst_dwsrv_dropdownsearch. Adems hay que aadir cdigo a dos eventos de la DW.
Para habilitarlo:
this.of_SetDropDownSearch(TRUE)
Aadir en el evento EditChanged de la DW una llamada al evento
pfc_EditChanged de n_cst_dwsrv_dropdownsearch:
this.inv_dropdownsearch.Event pfc_EditChanged(row, dwo, data)

Aadir en el evento ItemFocusChanged una


pfc_ItemFocusChanged de n_cst_dwsrv_dropdownsearch:

llamada

al

evento

this.inv_dropdownsearch.Event pfc_ItemFocusChanged(row, dwo)

Especificar la columna de la DDDW para la cual se va a habilitar el servicio:


this.inv_dropdownsearch.of_AddColumn("dept_id")

Servicio de filtro
Permite facilitar capacidades de uso sencillo de filtro en una DW. PFC habilita el
servicio a travs del objeto n_cst_dwsrv_filter. Este servicio muestra ventanas de dilogo
de filtro automticamente. Todo lo que hay que hacer es habilitar el servicio y especificar que
estilo de filtro se quiere. Hay tres:
Caja de dilogo de filtro de PB.
Una de las dos ventanas de filtro de las PFC:
# w_filtersimple
# w_filterextended
Para habilitar el servicio:
dw_emp.of_SetFilter(TRUE)
dw_emp.of_SetTransObject(SQLCA)
dw_emp.inv_filter.of_SetColumnDisplayNameStyle(dw_emp.inv_filter.HEADER)

Especificar el estilo del filtro:


dw_emplist.inv_filter.of_SetStyle(dw_emp.inv_filter.SIMPLE)

Mostrar la ventana de dilogo:

dw_emplist.inv_filter.Event pfc_FilterDlg( )

Normalmente no se llama a este evento, si no que se selecciona a travs del men.

POWERBUILDER FOUNDATION CLASS

Servicio Buscar y Reemplazar


Permite aadir la funcionalidad de buscar y reemplazar a las DWs de la aplicacin.
PFC habilita y reemplaza este servicio mediante el objeto n_cst_dwsrv_find. Se mostrarn
automticamente las ventanas de dilogo w_find y w_replace cuando el usuario seleccione
Edicin>Buscar o Edicin>Reemplazar de un men heredado del m_master de las PFCs.
Para habilitar el servicio:
dw_emplist.of_SetFind(TRUE)

Para mostrar la ventana de dilogo w_find:

dw_emplist.Event pfc_FindDlg()

Normalmente no se llama a este evento, si no que se selecciona a travs del men.


Para mostrar la ventana de dilogo w_replace:
dw_emplist.Event pfc_ReplaceDlg()

Normalmente no se llama a este evento, si no que se selecciona a travs del men.


Servicio Linkage
Este servicio ayuda a crear ventanas master/detail y otros tipos que requieran
procesamiento coordinado. El servicio tiene las siguientes caractersticas:
Linkage style, controla si la DW recupera filas, las filtra o se desplaza hasta una
determinada fila.
Update style, como el servicio actualiza la DW (de arriba hacia abajo, de abajo hacia
arriba, etc.)
Confirm on row change, cuando cambian las filas en el master esta opcin muestra un
dilogo de confirmacin si las modificaciones hechas a la DW sern perdidas.
Confirm on delete, muestra una ventana de dilogo de confirmacin cuando el usuario
borra filas.
Cascading key changes, el servicio actualiza inmediatamente la DW cuando cambia un
valor clave en el master.
Delete style, cuando se borra una fila en el master, esta opcin especifica si el servicio
borra las filas en el detalle, las descarta o las deja tal cual.
Extended update, permite integrar otros controles (como ListViews, TreeViews y
DataStores) en el proceso por defecto de guardar.
El servicio est completamente integrado con n_cst_luw y el proceso pfc_Save de
w_master. PFC habilita el servicio mediante el objeto n_cst_dwsrv_linkage. Se puede usar
el servicio para coordinar cualquier tipo de procesamiento entre ventanas. El uso ms comn es
el de procesamiento master/detail.
Para habilitarlo:
dw_emplist.of_SetLinkage(TRUE)

Usar el servicio para coordinar el procesamiento Master/Detail:


1 Se habilita el servicio para ambas DWs:
dw_master.of_SetLinkage(TRUE)
dw_detail.of_SetLinkage(TRUE)

2 Establecer el objeto de transaccin para ambas DWs:


dw_master.inv_linkage.of_SetTransObject(SQLCA)

3 Relacionar la DW master con la de detalle:


dw_detail.inv_linkage.of_SetMaster(dw_master)

4 Registrar las columnas relacionadas:


dw_detail.inv_linkage.of_Register("emp_id","emp_id")

5 (Opcional) Especificar que el servicio actualiza las DWs desde la base de la cadena
de unin hacia arriba (por defecto es a la inversa):
dw_detail.inv_linkage.of_SetUpdateStyle(dw_detail.inv_linkage.BOTTOMUP)

6 Establecer la accin a tomar por la DW detalle cuando una fila cambia en la


master:
dw_detail.inv_linkage.of_SetStyle(dw_detail.inv_linkage.RETRIEVE)

POWERBUILDER FOUNDATION CLASS

En este caso la DW detalle recupera una fila cuando quiera que el master cambie.
7 Llamar a la funcin of_Retrieve de la master:
IF dw_master.of_Retrieve( ) = -1 THEN
MessageBox("Error","Retrieve error")
ELSE
dw_master.SetFocus( )
END IF

* Todos estos pasos se pueden codificar en un nico evento como el Open de la ventana *

8 Aadir cdigo en el evento pfc_Retrieve de la DW master:


Return this.Retrieve( )

Para habilitar confirmacin en cambio de fila(slo estilo retrieval):


dw_detail.inv_linkage.of_SetUpdateOnRowChange(TRUE)
dw_detail.inv_linkage.of_SetConfirmOnRowChange(TRUE)

Para habilitar confirmacin al borrar:

dw_detail.inv_linkage.of_SetUpdateOnRowChange(TRUE)
dw_detail.inv_linkage.of_SetConfirmOnDelete(TRUE)

Para habilitar los cambios de clave en cascada:

dw_master.inv_linkage.of_SetSyncOnKeyChange(TRUE)
dw_detail.inv_linkage.of_SetSyncOnKeyChange(TRUE)

Para especificar el estilo de borrado:

dw_master.inv_linkage.of_SetDeleteStyle(dw_cust.inv_linkage.DISCARD_ROWS)

Para habilitar la actualizacin extendida:


PowerObject

lpo_objs[ ]

// This example adds the lv_salesinfo ListView to the


save process.
lpo_objs[1] = lv_salesinfo
dw_master.inv_linkage.of_SetOtherSaveObjects(lpo_objs)

Servicio de actualizacin multitabla


Este servicio hace ms fcil actualizar DWs con columnas de diferentes tablas. PFC
habilita este servicio a travs del objeto n_cst_dwsrv_multitable.
*Este servicio est disponible para el DataStore n_ds a travs del objeto n_cst_dssrv_multitable*

Se utiliza este servicio cuando se necesita actualizar filas para una DW que contiene
datos de ms de una tabla. Cuando se llama al evento pfc_Save de w_master, PFC todas las
tablas especificadas en todas las tablas de la ventana.
Para habilitar el servicio:
dw_emplist.of_SetMultiTable(TRUE)

Para especificar las tablas a actualizar:


String
String

ls_projcols[ ] = {"proj_id"}
ls_taskcols[ ] = {"proj_id", "task_id"}

dw_project.inv_multitable.of_Register("project", ls_projcols)
dw_project.inv_multitable.of_Register("task", ls_taskcols)
(Opcional) para actualizar una DW que contiene datos de mltiples tablas de la base

de datos:
Integer

li_return

li_return = w_sheet.Event pfc_Save()


...

Servicio de presentacin preliminar (Print preview service)


Permite proporcionar capacidades de vista preliminar a la DW: vista preliminar, primera
pgina, siguiente pgina, pgina anterior, ltima pgina, zoom, etc. Los mens que descienden
del m_master de las PFCs tienen acceso automtico a esta funcionalidad. El servicio se habilita
mediante el objeto n_cst_dwsrv_printpreview.

10

POWERBUILDER FOUNDATION CLASS

*Este servicio est disponible para el DataStore n_ds a travs del objeto n_cst_dssrv_printpreview*

Para entrar en el modo de vista preliminar hay que seleccionar Archivo>Presentacin


Preliminar en la barra de men.
Para habilitar el servicio:
dw_emplist.of_SetPrintPreview(TRUE)

Servicio de propiedades de DataWindow


Habilita que se muestre la ventana de propiedades de la DW, la cual permite:
# Habilitar y deshabilitar de forma selectiva los servicios de la DW.
# Ver la sintaxis PFC para el servicio seleccionado.
# Acceder y modificar interactivamente las propiedades de la DW, incluyendo:
DW buffers
Estado de filas y columnas
Estadsticas
Propiedades de todos los objetos en la DW
Para habilitar el servicio:
dw_emplist.of_SetProperty(TRUE)
Cuando se muestre la DW, pulsar el botn derecho del ratn y seleccionar
Propiedades de la DataWindow.
Servicio modo Query
Facilita proporcionar capacidades de consulta en la aplicacin. El servicio tambin
ayuda a los usuarios a comprender y utilizar el modo Query. Mientras se est en est e modo, los
usuarios pueden pulsar el botn derecho del ratn para mostrar un men emergente con
opciones que muestran columnas, operadores y valores. PFC habilita este servicio mediante el
objeto n_cst_dwsrv_querymode. Se utiliza para lo siguiente:
# Empezar y terminar el modo Query.
# Indicar las columnas seleccionables para la consulta.
# Salvar consultas a un fichero y cargar consultas previamente salvadas.
Para habilitar el servicio:
dw_emplist.of_SetQuerymode(TRUE)

Para comenzar el modo consulta:

dw_emplist.inv_querymode.of_SetEnabled(TRUE)

Para finalizar el modo consulta:

dw_emplist.inv_querymode.of_SetEnabled(FALSE)

Para especificar las columnas seleccionables en el modo consulta:


String

ls_cols[]

ls_cols[1] = "emp_dept_id"
ls_cols[2] = "emp_id"
dw_emplist.inv_querymode.of_SetQueryCols(ls_cols)

Para salvar una consulta a fichero:


1 Empezar el modo consulta llamando a of_SetEnabled(TRUE).
2 Permitir al usuario especificar los criterios del modo Query.
3 Llamar a la funcin of_Save(). Esta ventana muestra un cuadro de dilogo que
solicita al usuario el nombre del fichero donde se va a guardar la consulta.
Para cargar una consulta de un fichero:
# Llamar a la funcin of_Load().Esta ventana muestra un cuadro de dilogo que
solicita al usuario el nombre del fichero donde se encuentra la consulta. Este fichero
se utiliza para determinar los criterios de la consulta.
Servicio de informes (Reporting service)

11

POWERBUILDER FOUNDATION CLASS

Este servicio permite proporcionar capacidades mejoradas de presentacin e impresin


para las DWs de la aplicacin. Muchas de las funciones de este servicio proporcionan la opcin
de ejecutar la funcin Modify de las DWs o bien devolver la sintaxis Modify para usarla como
entrada de nuestra propia funcin Modify. Si se codifican ms de dos funciones consecutivas
del servicio, se puede considerar devolver la sintaxis Modify concatenando las cadenas y
usando la funcin Modify desde dentro del cdigo. El servicio se habilita mediante el objeto
n_cst_dwsrv_report.
*Para usar este servicio el objeto DW debe usar como unidades PBU o pixels*
*Este servicio est disponible para el DataStore n_ds a travs del objeto n_cst_dssrv_report*

El servicio se usa para lo siguiente:


# Aadir elementos a una DW.
# Crear una DW composite de una o ms DWs permitiendo imprimir varias DWs como
un nico informe.
# Formatear e imprimir.
# Especificar el color de fondo, de primer plano y el borde.
# Hacer zoom en una DW en relacin a su tamao actual.
Para habilitar el servicio:
dw_emplist.of_SetReport(TRUE)
Para aadir elementos a una DW se llama a alguna de las siguientes funciones de
n_cst_dwsrv_report:
Funcin
Qu hace
Aade una columna de tipo computed
of_AddCompute
Aade una lnea
of_AddLine
Aade un bitmap
of_AddPicture
Aade texto
of_Text

Para crear una DW composite:


1 Llamar a la funcin of_CreateComposite() pasando informacin de las DWs
a incluir:
String
Integer
Boolean

ls_dws[ ], ls_trailfooter[ ], ls_slide[ ], ls_return


li_return
lb_vertical, lbo_border[ ]

lb_vertical = TRUE
ls_dws[1] = "d_employee"
ls_dws[2] = "d_benefits"
ls_trailfooter[1] = "No"
ls_trailfooter[2] = "Yes"
ls_slide[1] = "AllAbove"
ls_slide[2] = "AllAbove"
lbo_border[1] = Lowered!
lbo_border[2] = Lowered!
li_Return = dw_composite.inv_report.of_CreateComposite(ls_dws,&
lb_vertical, ls_trailfooter, ls_slide, lbo_border)
IF li_Return = 1 THEN
dw_composite.SetTransObject(SQLCA)
dw_composite.Event pfc_Retrieve( )
END IF

2 Imprimir o presenta la DW composite de la forma apropiada:


dw_composite.inv_report.of_PrintReport(TRUE, FALSE)

Para imprimir una DW llamar a la funcin of_PrintReport().


Para establecer valores por defecto, colores y bordes, llamar a alguna de las
siguientes funciones de n_cst_dwsrv_report:
Funcin
of_SetDefaultBackColor
of_SetDefaultBorder
of_SetDefaultCharset

Qu hace
Modifica los valores por defecto de la DW

12

POWERBUILDER FOUNDATION CLASS

of_SetDefaultColor
of_SetDefaultFontFace
of_SetDefaultFontSize
of_SetBorder
of_SetColor

Modifica el borde para uno o ms objetos en una


DW
Modifica el color y el color de fondo(si se puede)
de uno o ms objetos en una DW

Para controlar el zoom de la DW, llamar a la funcin of_SetRelativeZoom. Esta


funcin cambia el zoom con respecto al que en ese momento tenga la ventana. As si
se halla al 80% y se especifica of_SetRelativeZoom(50) la ventana quedar al
40%.
Servicio de columna requerida (Required column service)
Este procedimiento habilita y deshabilita el procesamiento por defecto de las DWs para
los campos requeridos. Esto hace ms fcil el manejar campos interdependientes en una DW.
Slo se aplica a columnas de DW que usan la propiedad nilisnull. El servicio se habilita a travs
del objeto n_cst_dwsrv_reqcolumn. El procesamiento de estos campos puede interferir con
el interfaz de uso directo que ofrece una aplicacin GUI. El servicio permite diferir el
procesamiento hasta que el usuario completa la entrada de datos. El servicio ofrece la
posibilidad de indicar columnas para las cuales PB debe realizar el procesamiento de campos
requeridos.
*Cuando se llama al evento pfc_Save automticamente se llevan a cabo las comprobaciones, antes
de actualizar la base de datos*

Para habilitar el servicio:


dw_emplist.of_SetReqColumn(TRUE)
Para evitar que se aplique el servicio a determinadas columnas llamar a la funcin
of_RegisterSkipColumn para especificar que columna debe seguir con el

procesamiento estndar de PB:


dw_emplist.inv_reqcolumn.of_RegisterSkipColumn("dept_id")

Servicio de manejo de filas (Row manegement service):


El servicio permite insertar y borrar filas. Tambin proporciona una funcin para
deshacer el borrado de filas. El servicio se habilita mediante el objeto
n_cst_dwsrv_rowmanager. Se utiliza para lo siguiente:
# Aadir una fila vaca al final de la DW.
# Insertar una fila vaca entre dos existentes.
# Borrar una o ms filas.
# Mostrar un cuadro de dilogo permitiendo recuperar las filas borradas.
Para habilitar el servicio:
dw_emplist.of_SetRowManager(TRUE)
Para aadir una fila vaca al final de la DW:
Long

ll_return

ll_return = dw_emplist.inv_rowmanager.Event pfc_AddRow()


IF ll_return = -1 THEN
MessageBox("Error", "Error adding empty row")
END IF

PFC llama a este evento automticamente cuando el usuario selecciona Aadir del
men emergente m_dw.
Para insertar una fila vaca entre dos existentes (antes de la actual):
Long

ll_return

ll_return = dw_emplist.inv_rowmanager.Event pfc_InsertRow()


IF ll_return = -1 THEN
MessageBox("Error", "Insert error")
END IF

13

POWERBUILDER FOUNDATION CLASS

PFC llama a este evento automticamente cuando el usuario selecciona Insertar del
men emergente m_dw.
Para borrar filas:
Long

ll_return

ll_return = dw_emplist.inv_rowmanager.pfc_DeleteRow()
IF ll_return = -1 THEN
MessageBox("Error", "Deletion error")
END IF

PFC llama a este evento automticamente cuando el usuario selecciona Eliminar del
men emergente m_dw. Para permitir a los usuarios seleccionar varias filas utilizar el servicio de
seleccin de filas (Row selection service).
Para recuperar las filas eliminadas, llamar al evento pfc_RestoreRow que llama, a
su vez, a la funcin of_UnDelete la cual muestra el cuadro de dilogo w_restore,
permitiendo a los usuarios recuperar las filas eliminadas.
Servicio de seleccin de filas (Row selection service)
Permite proporcionar capacidades de seleccin simple, mltiple y extendida para DWs.
Se habilita a travs del objeto n_cst_dwsrv_rowselection. El servicio maneja toda la
seleccin de filas automticamente. Todo lo que hay que hacer es habilitar el servicio y
especificar el estilo de seleccin deseado:
Single-row selection. Maneja la seleccin cuando la DW permite seleccionar una
nica fila.
Multirow selection. Maneja la seleccin permitiendo a los usuarios seleccionar
mltiples filas con clicks simples. Estas filas pueden ser o no ser contiguas.
Cuando este estilo est habilitado, los usuarios cambian el estado de seleccin de una
fila haciendo click en ella. Esta capacidad es similar al atributo MultiSelect de los
listbox.
Extended selection. Maneja la seleccin permitiendo a los usuarios seleccionar varias
filas con SHIFT + click y CTRL + click.
Cuando este estilo est habilitado, los usuarios seleccionan filas contiguas con
SHIFT + click y no contiguas con CTRL + click. Esta capacidad es similar al
atributo ExtendedSelect de los listbox.
Para habilitarlo:
dw_emplist.of_SetRowSelect(TRUE)

Para especificar el estilo de seleccin:

dw_emplist.inv_rowselect.of_SetStyle(dw_emplist.inv_rowselect.EXTENDED)

Servicio de redimensionado de DataWindow (DataWindow resize service)


El servicio permite redimensionar las columnas en un control DW cuando el usuario
cambia el tamao de la ventana. El servicio se habilita a travs del objeto
n_cst_dwsrv_resize. Este servicio no se puede usar con objetos DW que tienen como estilo
de presentacin composite o RichTextEdit.
Para habilitarlo:
dw_emp.of_SetResize(TRUE)
(Opcional) Especificar el tamao original de la DW, llamando a la funcin
of_SetOrigSize. Se llama a esta funcin si se abren hojas MDI en una aplicacin

MDI con una enumeracin distinta de Original!


this.inv_resize.of_SetOrigSize(this.width, this.height)

(Opcional) Especificar el tamao mnimo hasta el que la ventana se puede


redimensionar:
this.inv_resize.of_SetMinSize(this.width-50, this.height-100)

Especificar las columnas que se van a redimensionar y como deben ser


redimensionadas:
this.inv_resize.of_Register("emp_fname", 0, 0, 50, 50)
14

POWERBUILDER FOUNDATION CLASS

this.inv_resize.of_Register("emp_lname", 100, 0, 50, 50)


Habilitar el servicio y registrar la DW (cdigo de un evento Open de una ventana):
this.of_SetResize(TRUE)
this.inv_resize.of_Register(dw_1, 0, 0, 100, 100)
(Opcional) Llamar a la funcin of_UnRegister para quitar las columnas de la lista

de redimensionado.

Servicio de ordenacin (Sort service)


Proporciona capacidades de ordenacin para las DWs. El servicio se habilita mediante el
objeto n_cst_dwsrv_sort. El servicio muestra cuadros de dilogo automticamente, slo hay
que habilitar el servicio e indicar que estilo de ordenacin se desea. Se puede elegir entre cuatro
estilos de cuadros de dilogo:
Cuadro de dilogo de ordenacin de PB.
Ordenacin pinchar y arrastrar (cuadro de dilogo w_sortdragdrop).
Ordenacin multicolumna (cuadro de dilogo w_sortmulti).
Ordenacin por una nica columna (cuadro de dilogo w_sortsingle).
Adicionalmente se puede permitir al usuario ordenar pulsando en las cabeceras de las
columnas (para este tipo de ordenacin el objeto cabecera debe estar en la banda de cabecera
primaria de la DW).
Para habilitar el servicio, llamar a la funcin of_SetSort y especificar que el
cuadro de dilogo de ordenacin usa los nombres de cabeceras:
dw_emp.of_SetSort(TRUE)
dw_emp.inv_sort.of_SetColumnDisplayNameStyle(dw_emp.inv_sort.HEADER)

Para especificar si los cuadros de dilogo ordenan por valores de presentacin o de


datos:
dw_emp.inv_sort.of_SetUseDisplay(TRUE)

Para especificar el estilo de ordenacin:

dw_emp.inv_sort.of_SetStyle(dw_emp.inv_sort.DRAGDROP)

Para presentar el cuadro de dilogo:

dw_emplist.Event pfc_SortDlg()

Normalmente no se llama a este evento, si no que se selecciona a travs de la barra


de men seleccionando Ver>Ordenar...
Servicios de Ventanas
PFC implementa los servicios de ventana mediante:
Funciones, eventos y variables de instancia codificadas en w_master y sus
descendientes.
Objetos de usuario.
Para acceder a los servicios de ventana hay que crear ventanas heredadas de alguno de los
descendientes de w_master: w_child, w_frame, w_main, w_popup, w_response y w_sheet.
W_master contiene:
Funciones para habilitar y deshabilitar los servicios implementados como objetos de
usuario.
Variables de instancia que permiten hacer referencia a las funciones, eventos y
variables de instancia de los servicios (variables de referencia).
Eventos y eventos de usuario precodificados que llaman a las funciones y eventos del
servicio Window.
Eventos de usuario vacos en los que se puede aadir cdigo para mejorar procesos
especficos de la aplicacin.
En la siguiente lista aparecen los servicios de ventana y como estn implementados:
Servicio

Implementacin

15

POWERBUILDER FOUNDATION CLASS

Basic window service


Preference service
Sheet management service
Status bar service

n_cst_winsrv
n_cst_winsrv_preference
n_cst_winsrv_sheetmanager
n_cst_winsrv_statusbar

Servicios bsicos de ventana (Window basic services)


Las ventanas PFC incluyen:
Funciones de ventana.
Eventos precodificados y eventos de usuario.
Eventos de usuario vacos.
Estas funciones y eventos estn disponibles para todas las ventanas de la aplicacin.
PFC implementa muchas de estas funcionalidades automticamente cuando se usan las ventanas
PFC conjuntamente con los objetos visuales PFC y los mens que descienden del men PFC
m_master. Los servicios de ventana incluyen automticamente procesamiento CloseQuery
para todas las DWs de una ventana. Este procesamiento salva todos los cambios pendientes si el
usuario pulsa SI en el cuadro de dilogo Salvar Cambios. Si se quiere implementar este
procesamiento de forma especfica para la aplicacin habra que omitir el evento CloseQuery
en las ventanas de la aplicacin.
Las funciones bsicas de las ventanas PFC incluyen:
Message router e integracin de men.
Eventos de usuario vacos, que son lanzados por los elementos de los mens.
Control de la barra de herramientas (slo w_frame).
Procesamiento de salvado automtico, implementado a travs de la unidad lgica
del servicio de trabajo (work service).
Para usar el message router desde el script de una opcin del men llamar a la
funcin of_SendMessage pasando el evento de usuario que se va a lanzar:
of_SendMessage("pfc_CheckStatus")
Esta funcin pasa la llamada a la funcin of_SendMessage de n_cst_menu, que
llama al evento pfc_MessageRouter de la ventana actual, que a su vez llama

automticamente al evento de usuario especificado.


Para utilizar el message router desde una funcin o evento fuera de un men se llama
al evento pfc_MessageRouter de la ventana activa:
this.Event pfc_MessageRouter("pfc_CheckStatus")
Para usar eventos de usuario vacos se aade cdigo al evento PFC que lleva a cabo
el procesamiento. El ejemplo (evento pfc_PageSetup) muestra un cuadro de

dilogo Preparar Pgina para la DW actual:


Integer

li_return

li_return = idw_active.Event pfc_PageSetup()


IF li_return > 0 THEN
li_return = idw_active.Event pfc_PrintImmediate()
END IF
*En la PFC Object Reference se indica que eventos necesitan codificacin adicional*

Para mostrar un cuadro de dilogo que permita a los usuarios controlar la barra de
herramientas:
gnv_app.of_GetFrame().Event pfc_Toolbars()

Este cuadro de dilogo se muestra automticamente cuando el usuario selecciona


Herramientas>Personalizar barras de herramientas... en un men que desciende de m_master.
Para salvar los cambios a la base de datos:
Integer

li_return

li_return = this.Event pfc_Save()

16

POWERBUILDER FOUNDATION CLASS

Este evento es llamado cuando el usuario selecciona Archivo>Guardar en un men


que desciende de m_master. Tambin lo llama el evento CloseQuery de w_master cuando se
pulsa SI en el cuadro de dilogo Salvar Cambios.
Para centrar una ventana en la pantalla:
this.of_SetBase(TRUE)
this.inv_base.of_Center()

Servicio de preferencias (Preference service)


Proporciona funcionalidades que automticamente salvan y restauran los parmetros de
una ventana del usuario usando bien el registro o un fichero INI. Este servicio salva:
Tamao
Posicin
Parmetros de la barra de herramientas
El servicio se habilita mediante el objeto n_cst_winsrv_preference. Si se habilita
el servicio las ventanas que desciendan de w_master salvan y recuperan los parmetros
automticamente.
Para habilitar el servicio:
this.of_SetPreference(TRUE)

Para indicar que parmetros de la ventana se han de restaurar llamar a alguna de las
siguientes funciones:
of_SetToolbarItemOrder
of_SetToolbarItemSpace
of_SetToolbarItemVisible
of_SetToolbars
of_SetToolbarTitles
of_SetWindow

Servicio de manejo de hojas (Sheet manager service)


Proporciona funciones que ayudan a manejar varias hojas en una aplicacin MDI.
Cuando se habilita el servicio PFC habilita las siguientes opciones en el men de la ventana:
Minimizar todas las ventanas
Deshacer organizar iconos
El servicio se habilita mediante el objeto n_cst_winsrv_sheetmanager.
Para habilitar el servicio:
this.of_SetSheetManager(TRUE)

La funcin est disponible en todos los descendientes de w_frame.


Para acceder a la informacin de alguna de las hojas llamar a alguna de las siguientes
funciones:
of_GetSheetCount
of_GetSheets
of_GetSheetsByClass
of_GetSheetsByTitle

Servicio barra de estado (Status bar service)


Este servicio muestra fecha, hora e informacin de la memoria en la esquina inferior
derecha de una ventana MDI. Otras caractersticas del servicio son:
Threshold monitoring for GDI and free memory.
Soporte para barra de progreso (para ms informacin mirar Using the progress
bar control en los Online Books).
Muestra texto especfico del programador.
El servicio se habilita mediante el objeto n_cst_winsrv_statusbar. La informacin
de la barra de estado se muestra en la ventana popup w_statusbar. Se utilizan las funciones
de n_cst_winsrv_statusbar para controlar los elementos que se muestran.
Para habilitar el servicio:
this.of_SetStatusBar(TRUE)

17

POWERBUILDER FOUNDATION CLASS

La funcin est disponible en todos los descendientes de w_frame.


Llamar a las funciones de n_cst_winsrv_statusbar en el evento pfc_PreOpen
de w_frame para indicar que elementos mostrar. Los elementos se muestran en el
orden en que son llamados de izquierda a derecha:
this.inv_statusbar.of_SetMem(TRUE)
this.inv_statusbar.of_SetTimer(TRUE)
Llamar a otras funciones de n_cst_winsrv_statusbar segn convenga.

Servicio de Men
Este servicio proporciona funciones que facilitan la comunicacin entre un men y una
ventana. Tambin suministra funciones que devuelven informacin de una MDI o los elementos
de una barra de herramientas. Estas funciones se utilizan en los scripts del men. El servicio se
habilita a travs del objeto n_cst_menu. Como PFC define este objeto como autoinstanciable
no es necesario codificar sentencias CREATE o DESTROY. Usar el servicio en mens que no
sean PFC para acceder a la ventana frame y comunicarse con las ventanas.
Para habilitar el servicio, declarar una variable de tipo n_cst_menu:
n_cst_menu

lnv_menu

n_cst_menu

lnv_menu

Para usar el message router:

Message.StringParm = "w_emplist"
lnv_menu.of_SendMessage(this, "pfc_Open")
Para acceder a la ventana frame:
n_cst_menu lnv_menu
w_frame lw_frame
// This is an alternative to of_SendMessage.
lnv_menu.of_GetMDIFrame(this, lw_frame)
Message.StringParm = "w_emplist"
lw_frame.Event pfc_Open()

Servicio de Redimensionado
Proporciona funciones que automticamente mueven y redimensionan los controles
cuando un usuario cambia el tamao de una ventana, tab o tab page. El servicio se habilita
mediante el objeto n_cst_resize.
Para habilitar el servicio:
this.of_SetResize(TRUE)

Esta funcin se puede llamar desde objetos descendientes de w_master, u_tab o


u_tabpg.
Para registrar controles redimensionables llamar a la funcin of_Register

indicando como debe responder el control ante un cambio de tamao. Para cada
control registrado se especifica cuanto debera moverse el control o a que escala
debera quedar cuando se redimensione. En el ejemplo un control DW se expande y
se mueve hacia abajo y a la derecha:
this.inv_resize.of_Register(dw_emplist, 0, 100, 100, 100)
Para especificar un tamao mnimo por debajo del cual no funciona el servicio (en el
evento Open de la ventana):
Integer

li_return

li_return = this.inv_resize.of_SetMinSize(this.width - 200, this.height - 150)

Para usar el servicio con sheets en una aplicacin MDI utilizar uno de los dos
siguientes mtodos:
- Abrir los sheets con su tamao original:
18

POWERBUILDER FOUNDATION CLASS

OpenSheet(w_emp, "w_emplist", w_frame, 0, Original!)


-

Si se abren con un tamao distinto al original llamar a la funcin


of_SetOrigSize antes de registrar los controles.
this.inv_resize.of_SetOrigSize(1200, 1000)

Servicio de Conversin
Proporciona funciones para convertir valores de un tipo de datos a otro. Por ejemplo se
puede llamar la funcin of_Boolean para convertir un entero o una cadena en un valor
booleano. El servicio se habilita mediante el objeto n_cst_conversion. Este objeto utiliza la
opcin autoinstantiate, que elimina la necesidad de codificar sentencias CREATE o DESTROY.
Se pueden las funciones del servicio de conversin para convertir:
De
Integer o String
Boolean, ToolbarAlignment, o SQLPreviewType
Boolean
String
Button
Icon
String

A
Boolean
String
Integer
ToolbarAlignment
String
String
SQLPreviewType

*En la PFC Object Reference se halla ms informacin de las funciones del servicio de conversin*

Hay que definir n_cst_conversion como una variable global, de instancia o local
segn convenga en la aplicacin:
Uso de las funciones de conversin
A lo largo de la aplicacin

Tipo de variable
Variable global o como variable de instancia
en el objeto n_cst_appmanager
En un nico objeto
Variable de instancia para el objeto
En un nico script
Variable local
Para habilitar el servicio hay que declarar una variable de tipo n_cst_conversion:
n_cst_conversion
inv_conversion

Para llamar a una funcin del servicio:


String

ls_checked

ls_checked = inv_conversion.of_String(cbx_confirmed.Enabled)
MessageBox("Conversion", "CheckBox is: " + ls_checked)

Servicio Fecha/Hora (Date/Time service)

Proporciona funciones que se pueden utilizar para realizar clculos con fechas. El
servicio se habilita a travs del objeto n_cst_datetime. Este objeto utiliza la opcin
autoinstantiate, que elimina la necesidad de codificar sentencias CREATE o DESTROY. Las
funciones que se pueden utilizar con este servicio incluyen:
Convertir una fecha Juliana a Gregoriana (Las fechas gregorianas utilizan el tipo de datos
Date).
Convertir segundos a horas.
Convertir segundos a das.
Convertir una fecha Gregoriana a Juliana.
Determinar el nmero de aos entre dos valores fecha/hora.
Determinar el nmero de meses entre dos valores fecha/hora.
Determinar el nmero de semanas entre dos valores fecha/hora.
Determinar el nmero de segundos entre dos valores fecha/hora.

19

POWERBUILDER FOUNDATION CLASS

Determinar el nmero de milisegundos entre dos valores fecha/hora.


Determinar si una fecha es vlida.
Determinar si una fecha cae en un das de la semana.
Determinar si una fecha cae en un da de fin de semana.
Parar el procesamiento hasta una fecha/hora determinada.
Hay que definir n_cst_datetime como una variable global, de instancia o local segn
convenga en la aplicacin:

Uso de las funciones de conversin


A lo largo de la aplicacin

Tipo de variable
Variable global o como variable de instancia
en el objeto n_cst_appmanager
Variable de instancia para el objeto
Variable local

En un nico objeto
En un nico script

Para habilitar el servicio:


n_cst_datetime

inv_datetime

Para llamar a una funcin del servicio fecha/hora:


Long

ll_seconds, ll_days

ll_seconds = Long(sle_seconds.Text)
ll_days = inv_datetime.of_Days(ll_seconds)
MessageBox("Date/Time", String(ll_seconds) + " seconds is equal to " &
+ String(ll_days) + " days.")

Servicio de ficheros (File service)


Proporciona funciones que se pueden llamar para aadir a la aplicacin funcionalidades
para el manejo de ficheros. Incluye soporte diferentes tipos de operaciones especficos de la
plataforma llamando a las funciones apropiadas. El servicio se habilita a travs del objeto
n_cst_filesrv. Entre otras acciones que se pueden realizar con el servicio estn:
Ensamblar un nombre de fichero concatenado.
Crear y eliminar directorios.
Leer, escribir, renombrar, y copiar ficheros, incluyendo ficheros mayores de 32.765 bytes.
Acceder a informacin del fichero, incluyendo fecha y hora.
Crear y ordenar una lista de todos los ficheros en un directorio.
Hay que definir n_cst_filesrv como una variable global, de instancia o local segn
convenga en la aplicacin. Dado que PFC instancia un descendiente de n_cst_filesrv en
funcin de la plataforma no usa la opcin autoinstantiate. Se debe destruir explcitamente la
instancia de n_cst_filesrv.
Para habilitar el servicio:
1 Declarar una variable de tipo n_cst_filesrv:
n_cst_filesrv

inv_filesrv

2 Llamar a la funcin global f_set_filesrv():

f_SetFilesrv(inv_filesrv, TRUE)
que automticamente crea un descendiente de n_cst_filesrv especfico para la

plataforma.
3 Destruir el objeto n_cst_filesrv cuando se termine:
DESTROY inv_filesrv

Para llamar a un funcin del servicio:


Integer
String

li_return
ls_file[ ]

li_return =
inv_filesrv.of_FileRead(sle_filename.text, ls_file)
CHOOSE CASE li_return
CASE -1

20

POWERBUILDER FOUNDATION CLASS

MessageBox("Error", "Error accessing file")


CASE ELSE
// File processing goes here
END CHOOSE

Para destruir el servicio:

DESTROY inv_filesrv

Servicio de fichero INI (INI file service)


Proporciona funciones que se utilizan para leer y escribir en un fichero INI. El servicio
se activa mediante el objeto n_cst_inifile. Se puede usar el servicio para:
Recuperar todas las claves de una seccin del fichero INI.
Recuperar todas las secciones de un fichero INI.
Eliminar una lnea de un fichero INI.
Eliminar una seccin entera de un fichero INI.
Utilizar las funciones ProfileInt, ProfileString y SetProfileString para
acceder a una nica entrada del fichero INI cada vez. El servicio no diferencia entre maysculas
y minsculas.
Para habilitar el servicio:
n_cst_inifile

inv_ini_handler

Este objeto utiliza la opcin autoinstantiate, que elimina la necesidad de codificar


sentencias CREATE o DESTROY.
Para usar el servicio:
String
ls_keys[ ]
Integer li_count, li_size
li_size = inv_ini_handler.of_GetKeys &
(gnv_app.of_GetAppINIFile(), "CustApp", ls_keys)
lb_keys.Reset( )
FOR li_count = 1 to li_size
lb_keys.AddItem(ls_keys[li_count])
NEXT

Servicio numrico (Numerical service)


Proporciona funciones que se pueden llamar para acceder datos binarios. Se habilita el
servicio mediante el objeto n_cst_numerical. Se pueden usar sus funciones para:
Determinar si un determinado bit est on u off.
Convertir un nmero en base 10 a binario.
Convertir un nmero binario a base 10.
Usar este objeto con el Windows SDK. El Windows Software Development Kit (SDK)
incluye varias funciones que devuelven valores bit. Usar la funcin of_GetBit () para acceder a
estos valores. Hay que definir n_cst_numerical como una variable global, de instancia o
local segn convenga en la aplicacin.
Para habilitar el servicio:
n_cst_numerical

inv_numerical

Este objeto utiliza la opcin autoinstantiate, que elimina la necesidad de codificar


sentencias CREATE o DESTROY.
Para llamar a una funcin del servicio:
Long
String

ll_base10
ls_binary

ll_base10 = Long(sle_base10.text)
ls_binary = inv_numerical.of_Binary(ll_base10)
MessageBox("Numerical", String(ll_base10) + &

21

POWERBUILDER FOUNDATION CLASS

" base 10 is equal to " + ls_binary + " in binary.")

Servicio de plataforma (Platform service)


Proporciona funciones que se pueden llamar para aadir funcionalidades especficas de
la plataforma a la aplicacin. Se pueden usar las funciones de este servicio en diferentes
plataformas sin tener que recodificar o aadir lgica condicional que chequee la plataforma
actual. Por ejemplo se puede llamar a la funcin of_GetFreeMemory para determinar la
cantidad de memoria libre, el servicio automticamente llama a la funcin externa apropiada
para la plataforma actual. El servicio se activa mediante el objeto n_cst_platform.
PFC habilita los cuadros de dilogo Print y Page Setup mediante este servicio.
Funciones que se pueden utilizar con este servicio:
Determinar la cantidad de memoria libre.
Determinar la cantidad de servicios libres en el sistema.
Determinar la altura y anchura, en PBU, dadas a una cadena de texto.
Hay que definir n_cst_platform como una variable global, de instancia o local segn
convenga en la aplicacin. Dado que PFC instancia un descendiente de n_cst_platform en
funcin de la plataforma no usa la opcin autoinstantiate. Se debe destruir explcitamente la
instancia de n_cst_platform.
Para habilitar el servicio:
n_cst_platform inv_platform
f_SetPlatform(inv_platform, TRUE)
que automticamente crea un descendiente de n_cst_platform especfico para la

plataforma.
Para llamar a una funcin del servicio:
Long

ll_free_memory

ll_free_memory = inv_platform.of_GetFreeMemory()
gnv_app.of_GetFrame().SetMicroHelp("Free memory: " &
+ String(ll_free_memory) )

Para destruir el servicio:

DESTROY inv_platform

Servicio de seleccin (Selection service)


Proporciona una funcin que muestra el cuadro de dilogo w_selection, el cual
permite a los usuarios seleccionar una fila. Cuando el usuario pulsa OK, la funcin devuelve los
valores en una o ms columnas para la fila seleccionada. El servicio se habilita mediante el
objeto n_cst_selection.
Se utiliza la funcin of_Open del servicio para mostrar el cuadro de dilogo que
permite al usuario elegir un elemento que posteriormente procesa la aplicacin. Hay,
bsicamente, tres versiones de la funcin of_Open. Cada una muestra informacin diferente en
w_selection:
W_selection recupera y muestra todas las filas para un objeto DW especfico.
W_selection muestra un conjunto de filas que se le pasa.
W_selection filas que han sido salvadas como parte de un objeto DW pasado.
Hay que definir n_cst_platform como una variable global, de instancia o local segn
convenga en la aplicacin.
Para habilitar el servicio:
n_cst_selection

inv_selection

Este objeto utiliza la opcin autoinstantiate, que elimina la necesidad de codificar


sentencias CREATE o DESTROY.
Para usar el servicio:

22

POWERBUILDER FOUNDATION CLASS

1 Declarar las variables utilizadas por of_Open:


n_cst_selection lnv_selection
Any la_selected[ ]
String ls_columns[ ]
Integer li_count

2 Especificar las columnas cuyos valores se van a devolver:


ls_columns[1] = "emp_id"
ls_columns[2] = "emp_lname"
ls_columns[3] = "emp_fname"
3 Mostrar la ventana w_selection:
lnv_selection.of_Open("d_empall", la_selected, SQLCA, ls_columns)

4 Acceder a los valores de las columnas devueltos:


FOR li_count = 1 to UpperBound(la_selected)
lb_selected.AddItem(String(la_selected[li_count]))
NEXT

Servicio SQL parsing


El servicio proporciona funciones para ensamblar y dividir sentencias SQL. El servicio se
habilita mediante el objeto n_cst_sql. Se puede usar para:
Construir una sentencia SQL a partir de sus componentes.
Dividir una sentencia SQL en componentes.
Hay que definir n_cst_sql como una variable global, de instancia o local segn
convenga en la aplicacin.
Para habilitar el servicio:
n_cst_sql

inv_sql

Este objeto utiliza la opcin autoinstantiate, que elimina la necesidad de codificar


sentencias CREATE o DESTROY.
Para construir una sentencia SQL a partir de sus componentes:
String ls_sql
n_cst_sqlattrib

lnv_sqlattrib[ ]

lnv_sqlattrib[1].s_verb = sle_verb.text
lnv_sqlattrib[1].s_tables = sle_tables.text
lnv_sqlattrib[1].s_columns = sle_columns.text
lnv_sqlattrib[1].s_values = sle_values.text
lnv_sqlattrib[1].s_where = sle_where.text
lnv_sqlattrib[1].s_order = sle_order.text
lnv_sqlattrib[1].s_group = sle_group.text
lnv_sqlattrib[1].s_having = sle_having.text
ls_sql = inv_sql.of_Assemble(lstr_sql)
MessageBox("SQL", ls_sql)

Para dividir una sentencia SQL en sus componentes:

String
ls_sql
Integer li_return
n_cst_sqlattrib lnv_sqlattrib[ ]
li_return
=
inv_sql.of_Parse(mle_sql.text,
lnv_sqlattrib)
IF li_return > 0 THEN
sle_verb.text= lnv_sqlattrib[1].s_verb
sle_tables.text = lnv_sqlattrib[1].s_tables
sle_columns.text = lnv_sqlattrib[1].s_columns
sle_values.text = lnv_sqlattrib[1].s_values
sle_where.text = lnv_sqlattrib[1].s_where
sle_order.text = lnv_sqlattrib[1].s_order
sle_group.text = lnv_sqlattrib[1].s_group
sle_having.text= lnv_sqlattrib[1].s_having
23

POWERBUILDER FOUNDATION CLASS

END IF

Servicio de manejo de cadenas (String-handling service)


Proporciona funciones que se pueden llamar para operar con cadenas. El servicio se
activa mediante el objeto n_cst_string. Entre las operaciones que se pueden realizar estn:
Separar una cadena delimitada en un array.
Convertir un array en una cadena delimitada.
Determinar si una cadena est en minsculas, maysculas, si es alfabtica o alfanumrica.
Reemplazamiento global.
Contar el nmero de apariciones de una determinada cadena.
Eliminar espacios y caracteres no imprimibles del principio o final de una cadena.
Determinar si una cadena es un operador de comparacin o aritmtico.
Capitalizar todas las palabras en una cadena.
Hay que definir n_cst_string como una variable global, de instancia o local segn
convenga en la aplicacin.
Para habilitar el servicio:
n_cst_string

inv_string

Este objeto utiliza la opcin autoinstantiate, que elimina la necesidad de codificar


sentencias CREATE o DESTROY.
Para llamar una funcin del servicio:
n_cst_string lnv_string
Integer li_newlines
String ls_line[ ]
...
li_newlines = lnv_string.of_ParseToArray(as_text, "~r~n", ls_line)

Servicio Metaclase (Metaclass service)


Contiene funciones que proporcionan informacin de las funciones, eventos y variables
de instancia definidos en otro objeto. El servicio se habilita a travs del objeto
n_cst_metaclass. El uso ms comn para este servicio es el de comprobar si una funcin o
evento de objeto existen antes de llamarlos.
Para usar el servicio:
1 Crear una variable de tipo n_cst_metaclass:
boolean lb_defined
n_cst_metaclass lnv_metaclass
classdefinition lcd_obj
String ls_args[ ]
Integer li_rc

Este objeto utiliza la opcin autoinstantiate, que elimina la necesidad de codificar


sentencias CREATE o DESTROY.
2 Llamar a las funciones del servicio necesarias:
lcd_obj = FindClassDefinition("w_sheet")
lb_defined = lnv_metaclass.of_isFunctionDefined &
(lcd_obj,"of_Validation", ls_args)
If lb_defined Then
// Qualify with instance of w_sheet descendant.
li_rc = w_sheet.Function Dynamic of_Validation ()
If li_rc < 0 Then Return -1
End If

Servicio de unidad lgica de trabajo (Logical unit of work service)

24

POWERBUILDER FOUNDATION CLASS

Proporciona soporte para auto-actualizar objetos. Estos objetos encapsulan toda la


funcionalidad necesaria para actualizarse implementando un conjunto de funciones que
n_cst_luw llama durante el proceso de salvado. Estas funciones llaman a eventos que
actualizan el objeto de forma apropiada. Este servicio llama a estas funciones como parte del
proceso de salvado por defecto. PFC incluye varios de estos objetos, entre ellos:

U_dw
N_ds
U_lvs
U_tab
U_tvs
U_base
W_master

El proceso pfc_Save por defecto de w_master utiliza este servicio para actualizar
todos los objetos de este tipo que halla en una ventana. Para ms informacin ver Using the
pfc_Save process en el captulo 6 de los Online Books.
Implementar objetos auto-actualizables

El servicio actualiza todos los objetos referenciados y actualizables.


*Muchos objetos auto-actualizables no son actualizables por defecto. Para asegurar la compatibilidad hacia atrs,
u_dw es el nico objeto auto-actualizable que es actualizable por defecto.*

Las funciones que definen el objeto API auto-actualizable completo son:


Funcin
of_AcceptText
of_UpdatesPending
of_Validation
of_UpdatePrep
of_Update
of_PostUpdate

Propsito
Llama al evento pfc_AcceptText, el cual llama a las funciones
AcceptText de la forma adecuada.
Llama al evento pfc_UpdatePending, que determina si el objeto ha sido
actualizado.
Llama al evento pfc_Validation, el cual valida datos para el objeto.
Llama al evento pfc_UpdatePrep, el cual prepara el objeto para
actualizarlo de manera adecuada.
Llama al evento pfc_Update, que actualiza la base de datos.
Llama al evento pfc_PostUpdate, el cual realiza el procesamiento
posterior a la actualizacin de la forma apropiada.

Usar el browser para informacin de las caractersticas de estas funciones y eventos.


Escribir un objeto auto-actualizable

Para escribir un objeto auto-actualizable implementar las funciones listadas arriba y


asegurarse de que hay una referencia al objeto en el array pasado a las correspondientes
funciones del n_cst_luw.
Extender el proceso de salvado

Por defecto, el proceso pfc_Save de w_master actualiza todas las DWs modificadas
en la ventana. Se puede extender este proceso como sigue:
Otros objetos auto-actualizables. Se pueden definir otros objetos auto-actualizables como
actualizables llamando a la funcin of_SetUpdatable en el evento Constructor del objeto.
El ejemplo es de un ListView basado en u_lvs:

this.of_SetUpdateable(TRUE)

Ahora el servicio llamar a funciones para actualizar la basa de datos de u_lvs como parte
del proceso de salvado por defecto.
Datastores. Se puede aadir uno o ms Datastores a la lista de objetos a ser actualizados al
llamar a la funcin of_SetUpdateObjects de w_master:
PowerObject lpo_objs[ ]
Integer li_count

lpo_objs = this.control
li_count = UpperBound(lpo_objs)
li_count++
lpo_objs[li_count] = ids_data
this.of_SetUpdateObjects(lpo_objs)
25

POWERBUILDER FOUNDATION CLASS

Ventanas adicionales. Se pueden aadir una o ms ventanas a la lista de objetos a ser


actualizados al llamar a la funcin of_SetUpdateObjects de w_master:
PowerObject lpo_objs[ ]
Integer li_count

lpo_objs = this.control
li_count = UpperBound(lpo_objs)
li_count++
// Update w_other as well as this window
lpo_objs[li_count] = w_other
this.of_SetUpdateObjects(lpo_objs)

** Se puede consultar una completa referencia de objetos, con sus eventos, funciones,
variables y cadena de herencia, as como diferente ayuda referente a las PFC en el
fichero "C:\Archivos de programa\Sybase\PB6\Help\PBPFC60.HLP"

26

**

POWERBUILDER FOUNDATION CLASS

APNDICE

Funciones que se han ido aadiendo o modificando en el nivel PFE


FUNCIN
of_GetDisplayName

OBJETO
ARCHIVO
n_cst_appmanager pfeapsrv.pbl

of_SetDisplayName

n_cst_appmanager pfeapsrv.pbl

of_SetToolbarTips

n_cst_appmanager pfeapsrv.pbl

of_Message

n_cst_error

pfeapsrv.pbl

Diseo de la DW

d_messageprint

pfcapsrv.pbl

of_SetLog

n_tr

pfemain.pbl

of_connect

n_tr

Pfemain.pbl

of_SetMicroHelpDefault

n_cst_appmanager pfeapsrv.pbl

of_cambia_tab_order

n_cst_dwsrv

Pfedwsrv

----------------

u_em_calendar

Pfemain.pbl

----------------

u_em_calcular

Pfemain.pbl

of_paginaanterior

Of_Connect

n_cst_dwsrv_printp pfedwsrv.pbl
review
n_cst_dwsrv_printp pfedwsrv.pbl
review
n_tr
pfemain.pbl

Of_SetLog
Of_ErrorSQL

n_tr
n_tr

of_paginasiguiente

pfemain.pbl
pfemain.pbl

AUTOR
DESCRIPCIN
FLH
Devuelve el nombre de la aplicacin de
la propiedad DisplayName.
JGB
Establece el nombre de la aplicacin en
la propiedad DisplayName.
JGB
Habilita/deshabilita los toolbartips para
la aplicacin.
JGB
Modificada para que muestre en el
MessageBox el identificador de error, en
caso de que sea un error de Oracle.
JGB
No imprima todas las etiquetas, las
desplazo 9 PBU a la derecha.
JGB
Establece los valores de las
propiedades Log ID y Log password
para el objeto transaccin.
JGB
Modificada para que devuelva el
SQLDBCode y no el SQLCode.
JGB
Establece la MicroAyuda por defecto de la
aplicacin en la propiedad MicroHelpDefault.
LFP
Pone a ceros el tab order para hacer no
editable una DW pone valores al tab
order de una DW para hacerla editable
FLH
EditMask preparado para mostar
calendario con el DobleClick
FLH
EditMask preparado para mostar
calculadora con el DobleClick
JGB
Pasa a la pgina anterior en una DW
JGB

Pasa a la siguiente pgina en una DW

JGB

Sustituye a la del padre para devolver el


cdigo de error necesario al abrir la
aplicacin.
Asigna valores a LogID y LogPassword.
Comprueba si se ha producido algn
error al ejecutar cualquier operacin
sobre la base de datos, en caso
afirmativo llama a la funcin of_message
para que muestre el mensaje
correspondiente

JGB
JGB

Precauciones al utilizar los servicios


Servicio de mensajes de error
Para mostrar los mensajes de error en la ventana w_message de las PFC en vez de en
un MessageBox hay que llamar a la funcin of_SetStyle() en el evento pfc_Open de
n_cst_appmanager con el valor 1:
this.inv_error.of_SetStyle(1)

El mostrarlos en la ventana w_message da la posibilidad de que se pueda imprimir el


mensaje de error y que el usuario pueda introducir comentarios. De todas formas estas
opciones habra que habilitarlas en los campos correspondientes de la tabla messages de la
base de datos.
Otro punto que hay que tener en cuenta es que si utilizamos la tabla messages como
una vista en nuestro esquema, es decir, vamos a conectar con ella con la transaccin SQLCA
de nuestra base de datos; no debemos especificar el origen de los datos de error hasta que no
hallamos conectado con la base de datos. En definitiva que el cdigo:
this.inv_error.of_SetPredefinedSource(SQLCA)

27

POWERBUILDER FOUNDATION CLASS

habr que situarlo en el evento pfc_postopen de la ventana frame inicial de nuestra


aplicacin despus del of_Connect() y no en el evento pfc_Open de
n_cst_appmanager.
Por ltimo sealar que si se va a hacer uso de la utilidad de generar un fichero log debe
estar creado antes el path que se pasa a la funcin of_SetLogFile.
Se ha comenzado a codificar los errores que puede generar una aplicacin siguiendo la
siguiente codificacin APL-00000. Se pueden consultar para su utilizacin en la tabla
messages de GENERAL.
Servicio Status Bar
Para colocar diferente informacin en la barra de estado se ha de reservar sitio para
esta informacin con la siguiente funcin:
inv_statusbar.of_Register("userid", "text", "", 620)

posteriormente se introduce la informacin que se va a presentar en la barra de estado:


inv_statusbar.of_Modify("userid", 'Usuario: ' + gnv_app.of_GetUserID())

Cuando se haga el registro de un objeto del statusbar tener muy en cuenta que el
nombre de referencia diferencia las maysculas de las minsculas, por lo que UserId <>
userid.
Cuando se utilice la funcin of_modify poner el mismo nombre que se utilizo en el
registro
..
inv_statusbar.of_register(userid, text, , 620)

inv_statusbar.of_modify(userid, Usuario: + ls_user)

Podemos usar una propiedad para alinear el texto dentro del recuadro usando
Inv_statusbar.of_modify(userid.alignment = 0 )

Los tipos de alineaciones son:


0 Alinear a la Izquierda
1 Alinear a la Derecha
2 Centrar el texto

Servicios de DataWindows
Del servicio de ordenacin

hay

que

tener

en

cuenta

la

funcin

dw_1.inv_sort.of_SetColumnHeader(TRUE) que permite ordenar una DW pulsando la

cabecera de los campos.


Importante para que funcione correctamente el servicio de ordenacion de inv_sort
Hay que tener en cuenta que las cabeceras que generamos para cada columna en la DW recibe
como nombre el mismo que la columna seguido de _t por lo que si queremos desactiar la
ordenacin a una determinada columna (porque no nos interesa que funcione para esa columna)
solamente hemos de asignarle al cuadro de texto otro nombre que no sea igual que la columna.
Ej: Columna id_sucursales
Name: id_sucursales
Cabecera
Name: id_sucursales_t
Text: N Sucursales
Columna Direccion
Name: Direccion
Cabecera
Name: Dir_Sucur

28

POWERBUILDER FOUNDATION CLASS

Text: Direccion.
De esta forma si pulsamos sobre la cabecera n sucursal se ordenaran pero si pulsamos sobre la
direccin esta ordenacin es ignorada.

Importante para que funcione correctamente el servicio de bsqueda y el servicio de


reemplazamiento
Hay que modificar a nivel PFC, en la libreara PFCAPSRV.PBL. En la ventana pfc_w_find, y
en la ventana pfc_w_replace, en el evento pfc_default, modificar estas lneas :
//Set the Direction value.
//inv_findattrib.is_direction = ddlb_searchdirection.text
// No funciona correctamente.
IF ddlb_searchdirection.text = 'Abajo' Then
inv_findattrib.is_direction = 'Down'
ELSE
inv_findattrib.is_direction = 'Up'
END IF

29

También podría gustarte