Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
3-05-1999
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
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.
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:
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)
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
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
this.inv_error.of_SetUser(this.of_GetUserID())
(Opcional) Indicar los tipos de mensajes para los cuales el servicio proporciona
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
PFC muestra el mensaje sustituyendo el primer % por el primer elemento del array.
Servicio de seguridad
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)
itr_security.of_SetName("Security")
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
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
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
llamada
al
evento
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)
dw_emplist.inv_filter.Event pfc_FilterDlg( )
dw_emplist.Event pfc_FindDlg()
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)
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 *
dw_detail.inv_linkage.of_SetUpdateOnRowChange(TRUE)
dw_detail.inv_linkage.of_SetConfirmOnDelete(TRUE)
dw_master.inv_linkage.of_SetSyncOnKeyChange(TRUE)
dw_detail.inv_linkage.of_SetSyncOnKeyChange(TRUE)
dw_master.inv_linkage.of_SetDeleteStyle(dw_cust.inv_linkage.DISCARD_ROWS)
lpo_objs[ ]
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)
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
10
*Este servicio est disponible para el DataStore n_ds a travs del objeto n_cst_dssrv_printpreview*
dw_emplist.inv_querymode.of_SetEnabled(TRUE)
dw_emplist.inv_querymode.of_SetEnabled(FALSE)
ls_cols[]
ls_cols[1] = "emp_dept_id"
ls_cols[2] = "emp_id"
dw_emplist.inv_querymode.of_SetQueryCols(ls_cols)
11
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
Qu hace
Modifica los valores por defecto de la DW
12
of_SetDefaultColor
of_SetDefaultFontFace
of_SetDefaultFontSize
of_SetBorder
of_SetColor
ll_return
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
13
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)
dw_emplist.inv_rowselect.of_SetStyle(dw_emplist.inv_rowselect.EXTENDED)
de redimensionado.
dw_emp.inv_sort.of_SetStyle(dw_emp.inv_sort.DRAGDROP)
dw_emplist.Event pfc_SortDlg()
Implementacin
15
n_cst_winsrv
n_cst_winsrv_preference
n_cst_winsrv_sheetmanager
n_cst_winsrv_statusbar
li_return
Para mostrar un cuadro de dilogo que permita a los usuarios controlar la barra de
herramientas:
gnv_app.of_GetFrame().Event pfc_Toolbars()
li_return
16
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
17
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
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)
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
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
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
ls_checked
ls_checked = inv_conversion.of_String(cbx_confirmed.Enabled)
MessageBox("Conversion", "CheckBox is: " + ls_checked)
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
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
inv_datetime
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.")
inv_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
li_return
ls_file[ ]
li_return =
inv_filesrv.of_FileRead(sle_filename.text, ls_file)
CHOOSE CASE li_return
CASE -1
20
DESTROY inv_filesrv
inv_ini_handler
inv_numerical
ll_base10
ls_binary
ll_base10 = Long(sle_base10.text)
ls_binary = inv_numerical.of_Binary(ll_base10)
MessageBox("Numerical", String(ll_base10) + &
21
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) )
DESTROY inv_platform
inv_selection
22
inv_sql
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)
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
END IF
inv_string
24
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
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.
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
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
**
APNDICE
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
JGB
JGB
JGB
27
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)
Podemos usar una propiedad para alinear el texto dentro del recuadro usando
Inv_statusbar.of_modify(userid.alignment = 0 )
Servicios de DataWindows
Del servicio de ordenacin
hay
que
tener
en
cuenta
la
funcin
28
Text: Direccion.
De esta forma si pulsamos sobre la cabecera n sucursal se ordenaran pero si pulsamos sobre la
direccin esta ordenacin es ignorada.
29