Вы находитесь на странице: 1из 65

PowerBuilder Foundation Class Library

En versiones anteriores de PowerBuilder, Powersoft introdujo los conceptos de la ventana, el men y la


herencia objeto de usuario para desarrollar aplicaciones. Aunque PowerBuilder ayud acelerar el desarrollo
de Windows GUI, todava requiere mucho trabajo y cdigo. Otros criterios incluyen escribir su propia
biblioteca de clases o el uso de una tercera biblioteca de clases de partido, como PowerFrame o PowerTool.
Marcos de construccin y bibliotecas de objetos requiere esfuerzo y puede ser una tarea compleja para llevar
a cabo. Si su empresa es slo el comienzo de PowerBuilder, la creacin de un marco por su cuenta sera
difcil. Por lo general, usted podra ahorrarse el tiempo de desarrollo y comprar un producto de otros
fabricantes, pero, de todos modos tendr que hacer algunos anlisis y personalizacin. Los principiantes
probablemente no saben qu caractersticas a buscar en un marco.
Powersoft ha respondido a las necesidades de los usuarios con una arquitectura basada en servicios,
biblioteca Class Foundation (PFC). Barcos Powersoft el PFC con la edicin Enterprise de PowerBuilder 5.0. Si
usted no es un usuario de la versin de la empresa, puede obtener PFC al adquirir el kit de desarrolladores
avanzados. Ahora dispone de una biblioteca de clases base que es apoyado por el vendedor, similar a lo que
Microsoft ha hecho con el Microsoft Foundation Class (MFC).
Tener una biblioteca de clases base como la propia herramienta primaria reduce la necesidad de confiar en
las bibliotecas de clases de terceros, pero que slo se dise para proporcionar un marco coherente y
cimientos sobre los que se esperan futuras bibliotecas de terceros para construir.
Despus de esta sesin, usted ser capaz de:

Comprender la estructura.

Entender Servicio bibliotecas de clases orientadas.

Comprender Arquitectura PFC.

Desarrollar aplicaciones que utilizan PFC.

Aplicar las nuevas versiones de PFC.

Entender las bibliotecas de clases.

Tiempo estimado Leccin:


600 minutos +.
Requisitos:

Usted debe tener PowerBuilder profesional / Enterprise Edition o PowerBuilder escritorio con Toolkit
Desarrolladores avanzada instalado en su ordenador.

Marcos
Un marco de aplicacin es un conjunto de clases base reutilizables interdependientes, que forman la base
para una aplicacin.
Ventajas

Reduce los costes y el tiempo de desarrollo.

Usted puede concentrarse en la lgica de negocios / de aplicaciones.

Mejora la coherencia en la aplicacin, tales como:

Mejora la calidad, ya que se prueban previamente.

Pgina 1 de 65

Convenios de denominacin.

Normas de codificacin.

Interfaz de usuario.

Desventajas

Ms sobrecarga podra implicar en la jerarqua de clases.

Curva de aprendizaje empinada.

Los desarrolladores deben aprender antes de empezar a usarlo.

Bibliotecas de clases
Una biblioteca de clases puede ser definido como un conjunto de objetos reutilizables que podemos utilizar
en el contexto de un marco, y tambin como objetos independientes. Hay unos cuantos tipos diferentes de
bibliotecas de clases.

Clases de propsito general.


Clases de propsito general anidadas.

Las clases de uso general


Las clases que ponen toda la funcionalidad potencialmente requerida en una clase ancestro pertenecen a
esta categora. Eso significa que, los mtodos se definen para que sea posible la funcionalidad de ese objeto.
Cuando el desarrollador utiliza esta clase, que se enciende y apaga la funcionalidad en una de las siguientes
maneras:

Llame al mtodo con argumentos con valores verdadero / falso. (En la clase ancestro, el cdigo
utiliza IF ... ELSEIF declaracin para comprobar el valor del argumento y acta en consecuencia)
Llame funciones separadas para activar / desactivar la funcionalidad y luego llamar al mtodo
actual. (En la clase ancestro, variables de instancia booleanos se definen como en el cdigo del
mtodo IF ... ELSEIF declaraciones se utilizan para comprobar los valores de las variables de
instancia de encendido / apagado.).

Un ejemplo tpico de una clase de propsito general es un DataWindow con toda la funcionalidad, como se
muestra en la siguiente imagen:

Diadvantages
Hay algunas desventajas con las clases de uso general:

Clases ancestro grasa.


Funcionalidad potencialmente innecesario en algunas situaciones. Por ejemplo, un mtodo para
agregar un nuevo registro no es necesario cuando se utiliza el DataWindow para los informes.

Pgina 2 de 65

Clases anidadas Uso General


Las clases de este tipo definen la funcionalidad genrica en el sper ancestro. La clase ancestro es subclasificado, y se aade la funcionalidad hasta que se definan todas las combinaciones requeridas de
funcionalidad. Por ejemplo, en el siguiente diagrama, u_dw_for_data_entry tiene mtodos para agregar un
nuevo registro, y para encontrar y reemplazar. u_dw_for_reports tiene mtodo para la clasificacin de la
DataWindow.

Ms adelante, si usted necesita un DataWindow con la adicin de nuevo registro, Buscar y reemplazar, as
como caractersticas de clasificacin, todo lo que tiene que hacer es crear una clase ms heredando de uno
de los dos sub-clases u_dw_for_data_entry, u_dw_for_reports y duplicar el cdigo de la otra clase. Esto es
porque, la herencia mltiple no es posible en PowerBuilder. Qu significa para nosotros?

Potencialmente una jerarqua de clases profunda de proporcionar a cada combinacin de


funcionalidad.
Objetos y duplicacin de cdigo en lugar de volver a usarlas.

Ms de mantenimiento debido a las mltiples copias del cdigo y objetos.

El desarrollador (el usuario de la biblioteca de clases) se activa la funcionalidad mediante el uso de la clase
correspondiente de la jerarqua.
Servicio de Bibliotecas de clases orientadas a
En esta metodologa, toda la funcionalidad est encapsulada en clases reutilizables (se llama como clases de
servicio), por lo general, las clases personalizadas no visuales. Cuando un objeto tiene cierta funcionalidad,
que el objeto de solicitar el servicio de la clase de servicio. Por el bien de ejemplo, tenemos un objeto de
usuario DataWindow en el que queremos ofrecer toda la funcionalidad requerida.

En la forma tradicional de lo que nosotros hemos hecho es, definir los mtodos en el mismo objeto de usuario
DataWindow. Entonces, qu sucede en tiempo de ejecucin? En tiempo de ejecucin que necesita ms
recursos. Esto es debido a que el objeto es la grasa. La razn es que hemos definido todos los
procedimientos que puedan requerirse en el objeto en s mismo.

Pgina 3 de 65

En la metodologa orientada a los servicios, lo que vamos a hacer es, definir todas las funciones por
separado, un objeto para cada funcin, es decir, una clase de clasificar, uno para el filtrado, una para buscar
y reemplazar, etc. Cuando el DataWindow tiene una caracterstica, por ejemplo, clasificar, solicita el servicio
del servicio de ordenacin. Eso quiere decir, creamos una instancia slo las clases de servicios que se
requieren. En trminos tcnicos, esto se llama delegacin y de un consultor que la terminologa se llama
outsourcing. En este ejemplo, DataWindow es delegar el trabajo a diferentes servicios. Es algo as como un
modelo cliente / servidor. El cliente (el objeto de usuario DataWindow) solicita servidor (clase de servicio)
para el servicio. El servidor (clase de servicio) hace el trabajo real que se solicite el cliente (el objeto de
usuario DataWindow). En esta metodologa, utilizamos los eventos en el cliente (DataWindow objeto de
usuario) para dirigir las peticiones a la clase de servicio correspondiente. Este enfoque tiene sus propios
mritos y de-mritos. Sin embargo, las ventajas pesan ms que las desventajas.
Desventajas

Hay una cierta sobrecarga de enrutamiento de las solicitudes para la clase de servicio adecuado y
conseguir el servicio realizado.
Necesita un poco ms de lo normal el diseo de Orientacin a Objetos.
La investigacin-empresa de esta biblioteca de clases tiene que aprender y tener experiencia para
entender y poner en prctica este enfoque.

Ventajas

Clases antepasado ms delgadas.

Puede proporcionar caractersticas reutilizables a los objetos no hereditarios, como objeto de


aplicacin.

La funcionalidad est completamente encapsulado.

Le permite dar la misma funcionalidad que es posible con la herencia mltiple sin tener que usarlo.

Ms objetos reutilizables.

PFC Arquitectura
The Foundation Class Library PowerBuilder (PFC) es una combinacin de clases reutilizables y extensibles y el
marco. PFC es la biblioteca de primera clase que utiliza el enfoque de clases orientada a servicios. PFC viene
con empresa PowerBuilder. Si usted es un usuario de escritorio PowerBuilder, usted puede comprar kit de
desarrolladores de avanzada en la que se incluye PFC. La siguiente es una lista de algunas caractersticas
PFC:

PFC no utiliza las funciones obsoletas.

No sobrecarga jerrquica. (Hasta la versin 5.0, no haba manera de sobrecargar un mtodo sin
utilizar herencia. En la versin 5.0, puede sobrecargar un mtodo en el mismo nivel del objeto sin
necesidad de utilizar la herencia.)

Toma ventaja de la versin 5.0 de sintaxis. (Por ejemplo, crear USAR. Sintaxis Object Notation para
DataWindow, nueva sintaxis de activacin / publicacin de un evento / funcin, eventos
parametrizados, AutoInstantiation, etc)

Pgina 4 de 65

A diferencia de algunas bibliotecas de clases en la que slo obtiene los ejecutables (PBD), PFC viene
con el cdigo fuente.

Incluye capas de extensin que se pueden personalizar. Como ustedes saben, hay una biblioteca de
clases puede satisfacer sus necesidades especficas, y por otra parte, es necesario modificar ya sea
modificando o mejorando algunos objetos.

PFC se extendi por ms de diez bibliotecas.


Bibliotecas de clases base

Extensin de la capa de bibliotecas de clases

PFCMAIN.PBL: Contiene los servicios bsicos

PFEMAIN.PBL

PFCAPSRV.PBL: Servicios de Aplicacin

PFEAPSRV.PBL

PFCDWSRV.PBL: DataWindow Servicios

PFEDWSRV.PBL

PFCWNSRV.PBL: Servicios Ventanas

PFEWNSRV.PBL

PFCUTIL.PBL: Servicios de Utilidad

PFEUTIL.PBL

Hay dos ms bibliotecas PFCSECAD.PBL, PFCSECSC.PBL, que vienen con PFC. La primera biblioteca cuenta
con seguridad servicios relacionados con la administracin y la posterior aplicacin de escner contiene el
sistema de seguridad. Estas dos bibliotecas no tienen bibliotecas de extensin.
Lo que te orientas
En esta sesin, se le re-crear "Sistema de Gestin de Producto" aplicacin con PFC. Al mismo tiempo, usted
aprender acerca de internos PFC. Se supone que ha completado los ejercicios que se dieron al final de "User
Objects" y sesiones de "Advanced DataWindows". Vamos a utilizar los objetos DataWindow existentes. En
lugar de crear una nueva aplicacin, estaramos aadiendo una nueva biblioteca de PowerBuilder y crear
todos los objetos nuevos en la biblioteca. Esto nos permite probar la aplicacin progresivamente a medida
que lo creamos. En un principio, que va a hacer algunas cosas sin ni siquiera entender por qu lo est
haciendo, tenga con nosotros, vamos a explicarlo despus de la configuracin bsica.

Crear una nueva biblioteca, pfc-product.pbl.

Aada las siguientes bibliotecas a la lista de la biblioteca de la aplicacin en el orden indicado a


continuacin:

PFEMAIN.PBL

PFEAPSRV.PBL

PFEDWSRV.PBL

PFEWNSRV.PBL

PFCUTIL.PBL

PFCMAIN.PBL

PFCAPSRV.PBL

PFCDWSRV.PBL

PFCWNSRV.PBL

PFEUTIL.PBL

Abra el pintor solicitud y pfc-product.pbl la primera biblioteca en la lista de bibliotecas.

Pgina 5 de 65

Como ustedes saben, estamos usando un objeto de transaccin definida por el usuario en lugar de la norma
objeto de transaccin. PFC tiene su propia operacin y los servicios de error. Vamos a utilizar en lugar de
nuestro servicio de transaccin.

En el pintor aplicacin, establezca el objeto global SQLCA heredar de n_tr.


Establezca el objeto global ERROR heredar de n_err.

Tenemos un objeto de clase personalizada no visual que proporciona los servicios de nivel de aplicacin,
como proceso de inicio de sesin, error de servicio, servicio de transacciones, etc En cada evento del objeto
de aplicacin, tenemos algo de cdigo. Lo que tenemos que hacer es, deshacerse de ese cdigo y redirigir el
procesamiento de cada evento para el evento que est disponible en el servicio de aplicacin. Antes de
hacerlo, debe declarar el objeto de servicio de aplicacin como una variable global. Esta ser la nica
variable global que va a utilizar en toda la aplicacin.
Por qu debemos redirigir el proceso. Por qu no hemos de escribir el cdigo en el evento en s. Bueno,
buena pregunta. La respuesta es definitivamente no es una respuesta nica lnea. Se va de la siguiente
manera:
Est de acuerdo cuando digo que un objeto de aplicacin no se puede heredar. Incluso si usted no est de
acuerdo sigue leyendo. Cuando se escribe el cdigo en el propio objeto de la aplicacin, y luego tratar de
crear una aplicacin distinta y desea utilizar la funcionalidad del objeto de la aplicacin anterior, usted tiene
slo una opcin. Es decir, copiando el cdigo, pues, un objeto de aplicacin no se puede heredar. Como se
explic anteriormente, el jefe de servicio de aplicacin es un objeto de usuario de clase personalizada no
visual. As, los objetos de usuario pueden ser heredadas. En la nueva aplicacin, puede utilizar el objeto de
usuario o crear un nuevo objeto mediante la herencia de la anterior. Con esta tcnica, indirectamente va a
reutilizar el objeto de aplicacin.

Declare una variable global, como se muestra a continuacin:


n_cst_appmanager gnv_app
Reemplace el cdigo de evento SystemError con:

gnv_app.event pfc_systemerror ()
Reemplace el cdigo de evento Abrir con:

gnv_app = create n_cst_appmanager


gnv_app.event pfc_open (lnea de comandos)
Reemplace el cdigo de evento Idle con:
gnv_app.event pfc_idle ()
Vuelva a colocar el primer cdigo de evento con:
gnv_app.event pfc_close ()
destruir gnv_app

Personalizacin del Gestor de aplicaciones


No biblioteca de clases satisface las necesidades del cliente con exactitud. Tiene que ser modificado para
requisitos aqu y all. La aplicacin no es una excepcin a este hecho.
No vuelvas a hacer cambios en cualquiera de los objetos que reside en las bibliotecas de PFC (Nombre de la
biblioteca comienza con PFC). Cualquier personalizacin que hay que hacer en las bibliotecas de la capa de
extensin (Nombre de la biblioteca comienza con PFE).
Invoque objeto n_cst_AppManager de la biblioteca PFEAPSRV.PBL. Todos los nombres de los eventos que se
declaran como parte de PFC comienzan con "PFC". Si usted necesita declarar cualquier caso definido por el
usuario, comenzar con "ue_". Necesitamos inicializar algunos atributos del objeto n_cst_AppManager, ya sea
cambiando directamente ellos o por mtodos que llama. Estos atributos se utilizan en toda la aplicacin.
Escriba el siguiente cdigo al evento Constructor:
/ / Nombre de la aplicacin
iapp_object.DisplayName = "Sistema de Gestin de Producto"
Pgina 6 de 65

/ / Activar la funcionalidad MicroHelp


of_SetMicroHelp (true)
/ / El nombre de archivo del archivo INI aplicacin
of_SetAppIniFile ("product.ini")
/ / PFC permite el uso de diferentes archivos para la
/ / Aplicacin y el usuario. Estamos utilizando el mismo
/ / Archivo para ambos propsitos.
of_SetUserIniFile ("product.ini")
/ / PFC utiliza el registro si el registro est disponible.
/ / Solicitud de clave de registro
of_SetAppKey ("HKEY_LOCAL_MACHINE \ Software \ ASI \ PMS")
/ Clave de registro / usuario
of_SetUserKey ("HKEY_CURRENT_USER \ Software \ ASI \ PMS")
/ / El nombre de archivo del archivo de ayuda en lnea de la aplicacin
/ / Of_SetHelpFile ("pbpfc050.hlp")
/ / No hay ningn archivo de ayuda an.
/ / La versin de la aplicacin
of_SetVersion ("Versin 1.0")
/ / El logotipo de la aplicacin (nombre del archivo de mapa de bits)
of_SetLogo ("asi.bmp")
/ Mensaje de copyright / Aplicacin
of_SetCopyright ("Copyright @ 1996-1999 Applied Software Inc")
/ / Propiedad Wrapper para el nombre de visualizacin de la aplicacin
is_title = iapp_object.DisplayName
El cdigo anterior se explica por s mismo. Si ejecuta la aplicacin ahora, ver una pantalla de inicio de sesin
diferente. Sin embargo, es posible que no sea capaz de iniciar sesin con xito. Si est utilizando Windows 95
/ NT 4.0, debe crear la entrada del Registro siguiente:
HKEY_LOCAL_MACHINE \ SOFTWARE \ ASI \ PMS
Haga clic en el botn Inicio del sistema operativo y seleccione la opcin Ejecutar. Escriba regedit y haga clic
en Aceptar. Sistema operativo invoca el editor del registro. En el lado izquierdo, expanda
HKEY_LOCAL_MACHINE y Software. Crear una entrada ASI (Applied Software Inc). Por qu usamos el
nombre de la empresa en esta lista? Porque, cada compaa de software cuyos productos estn instalados en
el equipo, tiene una entrada en Software. En la clave de la empresa, que tienen una participacin por
software. Del mismo modo, es necesario crear una entrada en el "Sistema de gestin de productos", es decir,
el sndrome premenstrual.
Del mismo modo crear HKEY_CURRENT_USER \ entrada PMS \ SOFTWARE \ ASI. Segn esto, cree un inicio de
sesin ms clave del registro. En virtud de eso, crear un valor string ID de usuario y ponerlo a DBA.
Agregue las siguientes entradas al archivo product.ini.
[Base de datos]
DBMS = ODBC
Base de datos del producto =
DBParm = ConnectString = "DSN = producto"
Escriba el siguiente cdigo al evento PFC_Open del objeto n_cst_AppManager.
Integer li_rc si of_IsRegistryAvailable () y luego sqlca.of_Init (of_GetUserKey () + "\ PMS") elseif sqlca.of_Init
(is_userinifile, "Base de datos") = -1 entonces MessageBox (is_title, "Error de inicializacin" + & "de archivo"
+ is_userinifile) end detenga en caso de espera (300)
En el cdigo anterior, estamos pidiendo PFC para leer los valores de clave especificados en la funcin
of_SetUserKey () en el caso de Constructor de n_cst_AppManager. funcin of_Init () lee los valores
especificados en el registro y establece los valores en el objeto de transaccin. Ahora, tenemos que mostrar
la ventana de inicio de sesin para el usuario y aceptar su identificador de usuario / contrasea y acceder a
la base de datos. PFC tiene una of_LogonDlg function () que hace todo eso para usted. Aada el siguiente
cdigo al evento PFC_Open del objeto n_cst_AppManager.
li_rc = gnv_app.of_LogonDlg ()
SI li_rc <> 1 ENTONCES
Pgina 7 de 65

MessageBox ("Inicio de sesin", "inicio de sesin fallidos")


Detener Cerrar
End If
abierto (w_mdi_frame)
Usted puede llamar a esta funcin antes de abrir la w_mdi_frame o puede abrirlo en el evento Open del
w_mdi_frame. Vamos a elegir el mtodo ms tarde. Elegimos el primer mtodo.
Ahora, ejecute la aplicacin y usted debera ser capaz de iniciar la sesin. Aparecer la misma ventana MDI y
un men que estbamos utilizando hasta ahora. Ahora, tenemos que crear nuevas ventanas y mens
utilizando los objetos PFC. El siguiente paso sera la creacin de una ventana MDI y un men con las clases
de PFC.
Crear una ventana heredando de w_frame (en el PFEMAIN.PBL). Cambiar el ttulo de la ventana de "Sistema
de Gestin de Producto" y guardar la ventana w_mdi_frame.
Embarque en el uso de PFC
A fin de proporcionar la funcionalidad de inicio de sesin de base de datos en la aplicacin utilizando los
servicios de PFC, es necesario codificar en dos lugares. La primera es en el evento pfc_open de su gestor de
aplicaciones.
/ / Objeto: n_cst_pms_AppManager
/ / Evento: pfc_open
int li_rc
this.of_Splash (1)
Idle (300)
Rendimiento ()
abierto (w_mdi_frame)
li_rc = gnv_app.of_LogonDlg ()
SI li_rc <> 0 Y li_rc <> 1 ENTONCES
MessageBox ("Error", "Conexin anmala" + "~ r" + &
"Mensaje de error:"!! + Sqlca.sqlErrText, exclamacin, OK, 1)
detener cerrar
elseif li_rc = 0, entonces
detener cerrar
final si
En el cdigo anterior, bsicamente estamos viendo una ventana de bienvenida que salpica logo de la
aplicacin o de la compaa de los segundos especificados. Entonces abrimos la ventana de marco MDI y
llamar a la funcin of_LogonDlg.
of_LogonDlg () lee el nombre de usuario utilizado anteriormente en el archivo de registro / INI para que
aparezca en la ventana de inicio de sesin. Si el ID de usuario no est disponible, se crea una instancia de
servicios de plataforma y obtiene el nombre de usuario se conect (en el sistema operativo) actual. Tenga en
cuenta que el nombre de usuario aparece en la ventana de inicio de sesin se lee el valor de cadena ID de
usuario de la clave registry_key_you_supplied + "\ logon" registro. Entonces, esta funcin se abre la ventana
de acceso con objeto de inicio de sesin como parmetro.
evento abierto de w_login valida objeto Message para el objeto de inicio de sesin y muestra identificador de
usuario, contrasea, imagen, nombre de la aplicacin, etc y se centran objeto apropiado en funcin de los
valores proporcionados en el objeto de inicio de sesin. Cuando se llama el usuario hace clic en el botn de
comando OK en la ventana de inicio de sesin, caso pfc_logon en el administrador de aplicaciones (ver la
imagen).
/ / Objeto: n_cst_pms_AppManager
/ / Evento: pfc_logon
si of_IsRegistryAvailable () a continuacin,
sqlca.of_Init (of_GetUserKey ())
ms
si sqlca.of_Init (is_userinifile, "Base de datos") = -1 entonces
MessageBox (iapp_object.DisplayName, + &
"Error de inicializacin del archivo" + is_userinifile)
detener
Pgina 8 de 65

final si
final si
SQLCA.of_SetUser (as_userid, AS_PASSWORD)
SI SQLCA.of_Connect () = -1 entonces
Volver -1
MS
gnv_app.of_SetUserID (as_userid)
Volver 1
END IF
El evento se pfc_logon id de usuario y contrasea como argumentos. Es nuestra responsabilidad el llenar
SQLCA y conectarse a la base de datos y enviar el cdigo de retorno apropiado. of_Init (), una funcin
sobrecargada, le permite leer datos de informacin especfica del archivo de registro / perfil y carga el objeto
SQLCA.
Luego llame SQLCA.of_setuser () para sobrescribir el identificador de usuario y una contrasea con la
suministrada por el usuario. Tenga en cuenta que, esta funcin ajusta UID y PWD opciones del ConnectString
para el parmetro DBPARM. Esto no significa establecer LogPass / O ID de usuario / dbpass atributos de
objeto de transaccin LOGID; El valor especificado en el ConnectString toma precedencia que otros atributos
del objeto de transaccin.
Para conectarse a la base de datos, o bien llame Conectar usando SQLCA, o llame SQLCA.of_Connect ().
Llamar a cualquiera de ellos es bueno, a menos que utilice el servicio SQLSpy que tiene anzuelos de
of_Connect ().

Pgina 9 de 65

En los fallos de conexin, ver "La contrasea no es correcta." mensaje, independientemente del mensaje de
error real error. Esto se debe a que el mensaje no es modificable en caso pfc_default en la ventana
pfc_w_logon. Es posible que desee sobrescribir este evento en su nivel de extensin al copiar y pegar todo el
cdigo a su objeto de extensin y el cambio a SQLCA.sqlErrText.
Mltiples intentos de conexin Funciones
Una aplicacin tpica permite que el usuario intente de inicio de sesin varias veces. Usando PFC, puede
especificar cuntas veces se permite que el usuario intente logins. Para permitir mltiples conexiones, realice
una de las siguientes opciones:
Extienda pfc_PreLogonDlg evento en n_cst_pms_appManager y escribir lo siguiente:
/ / Objeto: n_cst_pms_appManager
/ / Evento: pfc_PreLogonDlg
anv_logonattrib.ii_logonattempts = 4

Pgina 10 de 65

n_cst_logonattrib, que se emplea en of_LogonDlg (), es enviado a pfc_PreLogonDlg evento como un


argumento y lo mismo pasa con w_login como parmetro. pfc_default utiliza este atributo y decide si se debe
cerrar la ventana w_login o mantenerlo abierto para otro intento en funcin del estado de retorno del evento
pfc_logon al gestor de aplicaciones.
Proporcionar Auto-Sign-in funcionalidad sin inicio de sesin en la ventana
Algunas veces, dicen que desea invocar su aplicacin desde otra aplicacin mediante inicio de sesin de
dicha aplicacin atributos, es posible que desee para iniciar sesin automticamente y omitir la ventana de
inicio de sesin. Bueno, se puede implementar esta funcionalidad fcilmente.
El siguiente ejemplo asume Identificacin de usuario y contrasea se envan a esta aplicacin desde la lnea
de rdenes separadas por un espacio.
/ / Ejemplo: pms.exe loginID1 Contrasea1 / / objeto: n_cst_pms_appManager / / Evento: pfc_open int li_rc
this.of_Splash (1) (300) Produccin Idle () abierto (w_mdi_frame) / / Comprobar si el ID de usuario y la
contrasea se envan desde el lnea de comandos IF IsNull ENTONCES as_commandline = "" END
(as_commandline) IF / / parse y obtener el ID de usuario y contrasea en variables separadas. ls_userid =
Trim (inv_string.of_GetToken (as_commandline, "")) ls_password = Trim (inv_string.of_GetToken
(as_commandline, "")) / / Haga el login estndar, si no se suministra ya sea usuario o contrasea. SI ls_userid
= "" O ls_password = "" ENTONCES li_return = this.of_LogonDlg () return END IF this.of_SetUserID (ls_userid)
li_return = pfc_Logon Evento this.Trigger (ls_userid, ls_password) si li_return <> 0 entonces this.of_LogonDlg
() else if of_IsRegistryAvailable () y luego RegistrySet (is_userkey + "\ logon", "usuario", ls_userid) else
SetProfileString (is_userinifile, "inicio de sesin", "usuario", ls_userid) end if of_SetUserID (ls_userid) end if
El cdigo anterior se comprueba si identificador de usuario y la contrasea se pasan en la lnea de comandos
o no. Si no se proporciona, se va a travs de la sesin ordinaria llamando of_LogonDlg (). De lo contrario, se
llama el evento pfc_logon con el ID de usuario y contrasea. Si ese inicio de sesin tiene xito, entonces se
almacena el identificador de usuario en el registro / perfil que se utilizar como valor predeterminado para el
siguiente inicio de sesin. Si el evento pfc_logon falla por lo que sea la razn, nos vamos de nuevo a travs
de la conexin PFC estndar.
En una nota final sobre este tema, cuando se implementa, asegrese de implementar la configuracin del
Registro. Es su responsabilidad de proporcionar una interfaz para que el usuario pueda cambiar ajustes tales
como la conexin a varios cuadros de produccin, etc
Men Servicios
PFC tiene seis mens. Cuatro de cada cinco mens estn pensados para los objetos de ventana. Por ejemplo,
pfc_m_dw est diseado como un men del botn derecho del ratn para un control DataWindow. Es
necesario crear los mens de la ventana por la herencia desde el men m_master.
Nombre del men Propsito
m_edit

Se utiliza como men del botn derecho del ratn para un control modificable como
SingleLineEdit, MultilineEdit, etc.

m_dw

Se utiliza como men del botn derecho del ratn para el control DataWindow.

m_oc

Se utiliza como men del botn derecho del ratn para un control OLE.

m_view

Generales men propsito botn derecho del ratn, para organizar hojas.

m_master

Este es el men de la ventana de la que todos los mens de la aplicacin quedan


heredados.

m_frame

Se hereda de m_master. til para la ventana de marco MDI.

Crear un nuevo men heredando de la m_frame (PFEWnSrv.Pbl). Usted puede ver las opciones adicionales
comparado con nuestro men m_mdi_menu. No te preocupes, la mayora de valor visible de la opcin de
men se establece en false.
Anexar mdulo de la barra de men, es decir, no aparecer hasta haber Help barra de mens en tiempo de
diseo. En tiempo de ejecucin, la opcin del mdulo aparecer antes y ayuda, ya que, y ventanas y & ayuda
del men del bar artculos tienen Shift Arriba / Abajo propiedad encendido. Agregar y Productos, y
Operaciones, y unidades como elementos de men para la barra de mens y mdulos.
Pgina 11 de 65

Antes de escribir secuencias de comandos con estos nuevos elementos de men, tenemos que entender la
forma PFC de comunicacin entre men y otros controles de la ventana / ventana. Primero vamos a examinar
el mtodo de comunicacin que, en la prctica, en la mayora de todos los programas de PowerBuilder.
Evento Tpicamente, los elementos de men hace clic desencadena un evento en la hoja activa. Por ejemplo,
para recuperar datos de un DataWindow en la hoja activa, nos desencadenador de eventos ue_retrieve,
declar en el nivel de la ventana.
Ventana lw_Sheet
lw_Sheet = GetActiveSheet ()
Si IsValid (lw_Sheet) A continuacin,
TriggerEvent (lw_Sheet, "ue_retrieve")
End If
Venir a PFC. Tiene una of_SendMessage function () declarada en el objeto de men. En el guin de cualquier
elemento del men, lo que tenemos que hacer es llamar a la funcin of_SendMessage () con el nombre del
evento para disparar como un parmetro. Eso es todo. Esta funcin trabaja de la siguiente manera:

El evento pfc_MessageRouter se declara en todas las ventanas de PFC. Para abrir una nueva hoja, por
ejemplo maestro de productos, podemos seguir uno de los mtodos siguientes: En el primer mtodo,
declarar un evento para cada elemento del men en la opcin de mdulo y desencadenar los eventos
adecuados mediante la funcin of_SendMessage (). Por ejemplo, declare los tres eventos siguientes en la
ventana w_mdi_frame:

Pgina 12 de 65

open_products (activar este evento desde la opcin de mdulo / Productos, of_SendMessage


("ue_open_products"))
open_trans (activar este evento desde la opcin de mdulo / Transs, of_SendMessage
("ue_open_trans"))
open_units (activar este evento desde la opcin de mdulo / Unidades, of_SendMessage
("ue_open_units"))

En el otro mtodo, simplemente declarar una ue_open_sheet evento definido por el usuario, en la ventana
w_mdi_frame. Dispare este evento como lo hizo en el primer mtodo, es decir, llamando of_SendMessage
("ue_open_sheet"). Antes de esta lnea de cdigo, rellenar el objeto de mensaje con el nombre de la ventana
para abrir. Por ejemplo, el cdigo del mdulo> opcin de men productos sera:
Message.StringParm = "w_product_master"
of_SendMessage ("ue_open_sheet")
En el caso de ue_open_sheet, utilizar el OpenSheet () la funcin como se muestra a continuacin:
Cadena ls_WindowName
Ventana lw_Sheet
ls_WindowName = Message.StringParm
OpenSheet (lw_Sheet, ls_WindowName, Este, 0, cascada!)
El segundo mtodo es fcil y requiere menos mantenimiento al aadir ms opciones a la carta. Guarde el
men como m_mdi_frame en la biblioteca pfc_product. Ahora, abra la ventana w_mdi_frame y cambiar el
nombre del men de esta ventana para m_mdi_frame en el cuadro de dilogo de propiedades de ventana.
Del mismo modo, cree otro m_sheet_menu men heredando de m_master. Guardar este men en la
biblioteca pfc_product. Aadir todas las opciones que haya aadido en el men m_mdi_frame. Es necesario
aadir unos cuantos elementos de men para este men, como se explica a continuacin.
Anexar Print Preview Zoom, -, consultas, recuperar elementos de men a la barra de men de archivos en el
mismo orden. Apague la propiedad visible para el "-" del men situado debajo de la opcin de impresin
inmediata. Ocultar Pegado especial situado bajo la barra de men Editar. Enviar ue_Query de secuencia de
eventos click en la opcin Archivo> del men de consulta mediante la funcin of_SendMessage (). Del mismo
modo enviar un mensaje ue_Retrieve desde Archivo> Recuperar elemento de men. Enviar mensaje
pfc_zoom desde Archivo> Vista preliminar del men Zoom.
Ahora, echemos un vistazo a cada servicio de uno a la vez. A pesar de que le explicamos todos los servicios,
no necesitamos a todos en el "Sistema de Gestin de Producto". Por ejemplo, no tenemos servicio de
vinculacin de DataWindow. Para empezar, utilice slo los servicios que usted necesita en esta solicitud (no
cambie "Sistema de Gestin de Producto" funcionalidad demasiado). Una vez que vea que la aplicacin se
est ejecutando con los servicios de PFC y despus de completar los ejercicios, usted puede poner en
prctica los servicios adicionales.
Servicios de aplicaciones
Como usted sabe, un objeto de aplicacin no se puede heredar. Con la metodologa orientada a servicios, PFC
permite reutilizar el objeto de aplicacin. Los siguientes son los principales servicios a nivel de aplicacin:

Error

Registro de Transaccin

Seguridad

DataWindow Caching

Depurar

Veamos cada uno de los servicios de aplicacin.


Pgina 13 de 65

Servicio Error
Servicio Error proporciona soporte para el procesamiento de errores en la aplicacin PFC. Servicio Error ofrece
las siguientes funciones:

Muestra mensajes para el usuario final.

Soporta el procesamiento de errores desatendida.

Compatible con notificacin por correo electrnico de los errores en un nivel de gravedad
especificado.

Soporta tiempo de espera (toma accin especificada si el usuario no responde en el tiempo


especificado).

Permite al usuario introducir comentarios en el momento o en la pantalla un mensaje de error.


Comentarios de los usuarios tambin se pueden registrar.

Soporta la impresin de mensajes de error.

Capaz de leer los mensajes de error desde una variedad de fuentes:

una cadena

un archivo de texto

una tabla en una base de datos

Capacidad para suprimir los mensajes por debajo de un nivel de gravedad especificado.

Capaz de registrar mensajes de error, ya sea

todos los mensajes de error


ms de un nivel de gravedad especificado

Utilizacin del servicio de Error


El mismo uso del servicio de error requiere una lnea de cdigo. Esto es para dirigir el proceso de errores de
evento SystemError de la aplicacin para pfc_SystemError en el gestor de aplicaciones.
/ / Objeto: objeto Application
/ / Evento: SystemError
pfc_SystemError ()
Para el propsito de la demostracin, hemos creado un error en caso pfc_PostOpen del w_product_master.
PowerBuilder muestra lo siguiente cuando se ejecuta la aplicacin.

Se trata de un cuadro de mensaje simple. Al hacer clic en el botn OK se detiene la aplicacin. La


funcionalidad que hemos creado en el sistema de gestin de producto es mucho mejor que esto. Cierto? No,
no hemos permitido que el servicio de error. Es por eso que usted est consiguiendo la funcionalidad
Pgina 14 de 65

predeterminada. Por lo tanto, lo que hemos aprendido aqu es que, sin habilitar el servicio de error, no se
puede utilizar cualquiera de las funciones de servicio de error.
Habilitacin del servicio de Error
Para activar el servicio de error, es necesario llamar of_SetError (TRUE). Est disponible en el gestor de
aplicaciones. Cualquiera de los siguientes es un buen lugar para llamar a esta funcin.

Constructor de la n_cst_AppManager (que se encuentra en el pfeapsrv.pbl).


evento pfc_open de la n_cst_AppManager.

This.of_SerError (TRUE)

Si ejecuta la aplicacin en este punto, ver el mensaje de error, como se muestra en la imagen. Cuando se
habilita el servicio de error, es necesario la fuente de los mensajes de error. Usted puede preguntar "Por qu
debo fuente del mensaje de error cuando ya est disponible en el objeto de error?" Buena pregunta.
Suministro Mensajes de error
Buenas aplicaciones definen mensajes de error estndar de los posibles errores, que son conocidos en el
momento del diseo. Cada mensaje se le asigna un identificador de mensaje y un nmero de la gravedad.
Esto permite la lectura del mensaje de error con el nmero de error en tiempo de ejecucin. Nmero
Severidad define la gravedad del mensaje. Por ejemplo, en Sybase SQL Server, los mensajes con nivel de
gravedad por debajo de 16 son informativos. Es posible que el usuario pueda continuar si el nivel de
gravedad est por debajo de cierto nmero. Todos estos mensajes definidos se almacenan en un archivo de
texto o en una base de datos. Todos los desarrolladores utilizan estos mensajes estndar con parmetros.
Hay dos ventajas de este mtodo ms de codificar mensajes de error en el programa.

Permite la estandarizacin de los mensajes de error.


Mantenimiento flexible.

Por ejemplo, para mostrar un mensaje de error acerca de un producto que no existe, se puede definir un
mensaje algo as como:
Producto No #% n no existe en la base de datos.
El signo de porcentaje indica la posicin del parmetro. Sistemas como Sybase SQL Server utilizan diferentes
caracteres despus del signo de porcentaje, en funcin del tipo de datos del parmetro que se coloca all.
Decir 'n' para los nmeros, 's' para cuerdas y as sucesivamente. Sin embargo, PFC utiliza 's' para todos los
tipos de datos.
Al almacenar los mensajes de error en el texto / base de datos, se debe utilizar el siguiente formato.

msgid (ID de mensaje)

msgtext (El mensaje de error)

msgicon (El icono que desea mostrar en la parte izquierda del mensaje de error que puede utilizar:...
Informacin, StopSign, exclamacin, pregunta o Ninguno Tenga en cuenta que estos valores no son
el sufijo con un signo de exclamacin)

msgtitle (ttulo que desea mostrar en la ventana de error)

Pgina 15 de 65

msgbutton (botones que desea mostrar a continuacin el mensaje de error de la respuesta del
usuario. Las opciones son bien, OKCancel, SiNo, YesNoCancel, RetryCancel o AbortRetryIgnore.)

msgdefaultbutton (botn predeterminado)

msgseverity (nmero gravedad mensaje de error)

msgprint (Y / N, indica si desea permitir al usuario imprimir un mensaje de error)

msguserinput (Y / N, indica si desea permitir que el usuario introduzca sus palabras cuando se
muestra un mensaje de error)

Barcos PFC con pfc.db base de datos, y tiene una mesa de "mensajes". Si usted decide usar la base
de datos, puede agregar todos los mensajes de error en la tabla de "mensajes". La tabla de
"mensajes" tiene alrededor de cinco mensajes predefinidos que se utilizan por el PFC. Si usted
decide utilizar un archivo de texto, a continuacin, asegrese de seguir el esquema anterior, e
incluyen los mensajes que se definen en la tabla "mensajes":

pfc_CloseQuery_SaveChanges

pfc_CloseQuery_FailsValidation

pfc_RequiredMissing

pfc_DwDbError

pfc_SystemError

Para almacenar los mensajes en un archivo de texto sin problemas, abra la d_definedmessages DataWindow,
e introduzca los datos y exportarlo como texto sin encabezados.
Compruebe que los mensajes de error cargan correctamente en el d_definedmessages. Por cualquier
razn si no lo hace, y se produce un error en la aplicacin, puede entrar en un bucle y el programa
podra llegar abortado.
Ahora vamos a ver cmo podemos utilizar el archivo de texto / base de datos como una fuente de mensajes
de error. En primer lugar, vamos a empezar con el archivo de texto. Tienes que llamar a la siguiente funcin,
ya sea desde el pfc_Open o constructor evento del objeto n_cst_AppManager.
inv_Error.of_SetPredefinedSource ("err-msg.txt")
PFC utiliza un objeto de almacn de datos con el objeto DataWindow d_definedmessages. Cuando se
llama a esta funcin, PFC carga todos los mensajes en el objeto DataStore. Si usted decide usar la base de
datos en lugar del archivo de texto, entonces no hacer la llamada anterior, en lugar de utilizar la siguiente
(en realidad, la funcin anterior se sobrecarga). Antes de escribir el siguiente cdigo, declare una variable de
instancia de tipo itr_error n_tr en el n_cst_AppManager.
n_tr itr_error
Escriba el siguiente al evento pfc_Open del objeto n_cst_AppManager.
Integer li_rc
itr_Error = CREATE n_tr
li_rc = itr_Error.of_Init (of_GetAppINIFile (), "errordb")
Si li_rc <> 1 entonces
MessageBox ("Error", y
"Error de transaccin de objetos no" + &
"Inicializacin. ~ NEste detiene la aplicacin.", Y
Stopsign!, OK!, 1)
This.Event Mensaje pfc_exit ()
Volver
End If
Pgina 16 de 65

li_rc = itr_Error.of_Connect ()
Si li_rc <> 0 entonces
MessageBox ("Error", y
"Error al conectar con el" + &
"Database error. ~ NEste detiene la aplicacin.", Y
Stopsign!, OK!, 1)
This.Event Mensaje pfc_exit ()
Volver
End If
li_rc = inv_Error.of_SetPredefinedSource (itr_Error)
Si li_rc <> 1 entonces
MessageBox ("Error", y
"Error al establecer el error" + &
"Fuente de informacin. ~ NEste detiene la aplicacin.", Y
Stopsign!, OK!, 1)
This.Event Mensaje pfc_exit ()
Volver
End If
En el cdigo anterior, estamos creando un objeto de transaccin de tipo n_tr. El uso de este objeto de
transaccin es para conectarse a la base de datos que tiene la tabla de "mensajes". Despus de eso, se est
completando el objeto de transaccin con la informacin especfica de la base de datos para conectarse a la
base de datos. El of_GetAppINIFile () devuelve el nombre del archivo INI aplicaciones y of_Init () est
disponible en el servicio de error n_cst_error objeto. Esta funcin lee la seccin especificada y rellena el
objeto de transaccin. A continuacin, hacemos un llamado of_Connect () para conectarse a la base de datos.
Una vez que la conexin se realiza con xito, pedimos of_SetPredefinedSource () para cargar todos los
mensajes en el objeto DataStore.
El proceso de instalacin instala las entradas de ODBC para la base de datos PFC. Si usted va al pintor base
de datos, se puede ver las entradas de la base de datos de PFC en el gestor de configuracin de ODBC. Sin
embargo, tenemos que proporcionar detalles en el archivo INI aplicacin como se indica a continuacin, de lo
contrario, PowerBuilder no ser capaz de conectarse a la base de datos de PFC.
[Errordb]
DBMS = ODBC
Database = pfc
ID de usuario = DBA
DatabasePassword = SQL
DBParm = ConnectString = "DSN = pfc '
Ahora bien, si se prueba la aplicacin con el error anterior, PowerBuilder utiliza el ID pfc_SystemError
mensaje predeterminado y el cuadro de mensaje se ve as:

En realidad, slo se ve un botn Aceptar. Hemos cambiado en nuestra base de datos es por eso que ves tres
botones en la imagen de arriba. Vamos a explicar sobre el envo de parmetros de los mensajes definidos en
la siguiente sesin.
Personalizacin del funcionamiento del Servicio Error
Por defecto, PFC muestra el mensaje de error y detiene la aplicacin, independientemente de la respuesta de
los usuarios. Por ejemplo, si muestra Anular, Omitir botones y el usuario hace clic en el botn "Ignorar", la
aplicacin todava se detiene en lugar de continuar. Esto se debe a que, PFC no es atrapando la respuesta del
usuario, en cambio, est deteniendo ciegamente la aplicacin. Usted puede ver este cdigo en el evento
pfc_SystemError del pfc_n_cst_AppManager.
Pgina 17 de 65

Lo que tenemos que hacer es reemplazar este evento en el n_cst_AppManager. Si desea utilizar el cdigo
existente, slo tienes que copiar el cdigo del ancestro en el evento del descendiente. Cambie la siguiente
lnea de cdigo:
inv_error.of_message ('pfc_systemerror', ls_msgparm)
Esto atrapa el cdigo de retorno de la funcin, como se muestra a continuacin:
li_rc = inv_error.of_message ('pfc_systemerror', ls_msgparm)
Actuar en funcin del cdigo de retorno de la funcin, como se muestra a continuacin. La funcin devuelve
el nmero del botn que el usuario hace clic en (Inicio 1 de la izquierda).
Si li_rc = 1 Entonces
this.event pfc_exit ()
Ms
Volver
End If
El cdigo anterior es slo un ejemplo. No se puede actuar con slo saber el nmero del botn pulsado,
porque, realmente no sabe el significado de la tecla. Por ejemplo, el cdigo de retorno 2 significa "No" en el
"YesNoCancel" y "Retry" en el "AbortRetryIgnore". Cmo saber qu botn se utiliza? Si est utilizando los
mismos iconos para todos los errores en toda la aplicacin, entonces es fcil de cdigo. Si su aplicacin
utiliza diferentes iconos dependiendo del error, puede llamar a la funcin of_Message () con los parmetros.
Esta funcin est sobrecargado. Si utiliza el formato siguiente, sabes exactamente que el usuario hace clic en
el icono.
li_rc = inv_Error.of_Message ("Ttulo", y
"Mensaje", StopSign!, Y
AbortRetryIgnore!, 1, 5, TRUE, TRUE)
El of_message function () en el objeto pfc_n_cst_error est sobrecargado. Un sabor de esa funcin toma una
matriz de cadenas como segundo parmetro. Por ejemplo, si ha definido un mensaje de error con tres
parmetros, puede declarar una matriz de cadenas no unido y cargar los parmetros en la matriz y enviar la
matriz a la funcin:
ls_msgparm [1] = "Parmetro 1"
ls_msgparm [2] = "Parmetro 2"
ls_msgparm [3] = "Parmetro 3"
li_rc = inv_error.of_message ('pfc_systemerror', ls_msgparm)
PFC se encarga de la colocacin de los parmetros en las posiciones correctas en el mensaje de error,
primero parmetro reemplazar a la primera ocurrencia de% s y el segundo parmetro, la segunda
ocurrencia de% s, y as sucesivamente.
Servicio Error - Notificaciones por correo electrnico
Si desea enviar un correo electrnico de forma automtica cuando se produce un error, puede hacerlo con
pocas llamadas a funciones. Servicio error PFC proporciona la funcionalidad requerida. En primer lugar, es
necesario especificar el nivel de gravedad por encima del cual desea enviar una notificacin por correo
electrnico. Escriba lo siguiente en el evento pfc_SystemError.
inv_Error.ofSetNotifySeverity (10)
La funcin anterior dice, enva una notificacin por correo electrnico slo para los errores con nivel de
gravedad 10 o superior. Ahora, conecte al sistema de correo electrnico. Antes de eso, declarar las siguientes
variables de instancia:
n_ms ims_MailSession Cadena ls_EMailList []
Escriba el siguiente cdigo al evento pfc_SystemError el objeto n_cst_AppManager.
Pgina 18 de 65

MailReturnCode lmrc_RetCode
ims_MailSession = CREATE n_ms
lmrc_RetCode = ims_MailSession.MailLogOn ()
Si lmrc_RetCode <> MailReturnSuccess! Entonces
MessageBox ("Correo Ingresar Error", y
"No es posible acceder a" + "del sistema de correo.")
Volver
End If
li_rc = inv_Error.of_SetNotifyConnection (ims_MailSession)
Si li_rc = -1 Entonces
MessageBox ("Error Mail",
"No se puede usar la sesin de correo.")
Volver
End if
ls_EMailList [1] = "prasad bodepudi"
li_rc = inv_Error.of_SetNotifyWho (ls_EMailList [])
Estamos creando una sesin de correo e iniciar sesin en el sistema electrnico mediante el MailLogOn ().
Dependiendo de la configuracin del sistema de correo, o bien se le pedirn sus datos de acceso o inicia
sesin en el sistema de correo de forma automtica. Entonces estamos pidiendo al PFC utilizar la sesin de
correo que acabamos de crear para la notificacin por correo electrnico de error.
Nos poblamos los nombres de usuario al que queremos informar cuando se produce un error en una matriz y
pedir al PFC usar esa lista de usuarios. Ahora, cuando se llama of_Message () al objeto inv_Error,
PowerBuilder enva e-mails a cada usuario que figuran en la lista de usuarios. Asegrese de destruir el objeto
de evento destructor del n_cst_AppManager.
Si IsValid (ims_MailSession) luego destruir ims_MailSession
Registro de errores y otros servicios
Si usted decide no mostrar mensajes de error (como trabajos por lotes desatendida), puede llamar a la
siguiente funcin para suprimir mensajes de error.
inv_Error.of_SetUnattended (TRUE)
En el modo automtico, la funcin of_Message () devuelve el nmero de botn por defecto definida en la
definicin del mensaje de error.
Usted puede solicitar un mensaje de error PFC para registrar los mensajes de error. Escriba lo siguiente en el
evento pfc_open / pfc_SystmError de n_cst_AppManager:
inv_Error.of_SetLogFile ("product.err")
El mensaje registrado es el siguiente:
DateTime: 19/09/96 13:47:46 Ttulo: Mensaje de error del sistema: Error Nmero 2.
Texto de error = referencia de objeto nulo.
Ventana / Men / Object = w_product_master.
Error Objeto / Control = w_product_master.
Script = pfc_postopen.
Line en Script = 34. Usuario: Comentarios:
Al establecer el campo "Input" en S, PFC muestra un cuadro de entrada y permite que el usuario introduzca
los comentarios. PFC registra los comentarios tambin.

Pgina 19 de 65

Puede restringir los mensajes que se estn registrando en funcin del nivel de gravedad.
inv_Error.of_SetLogSeverity (0)
Si desea cerrar el cuadro de dilogo de mensaje de error despus de un plazo determinado y tomar la accin
por defecto especificado en la definicin del mensaje de error, a continuacin, establecer el tiempo de
espera, como se muestra a continuacin:
inv_Error.of_SetTimeOut (60)
Servicio de Depuracin
Servicio de depuracin es muy til en el entorno de desarrollo. A pesar de que es una instalacin de
depuracin por defecto, a veces, es posible que desee realizar la depuracin rpida en vez de ir paso a paso
en el pintor de depuracin. Por ejemplo, es posible que desee mostrar un cuadro de mensaje cuando un
router de evento no puede entregar el mensaje, pero no quiere que aparezca en el entorno de produccin. En
ese caso, se puede activar el servicio de depuracin, como se muestra a continuacin:
gnv_app.of_SetDebug (TRUE)
El cdigo anterior crea el servicio de depuracin. Este cdigo tambin muestra un cuadro de mensaje cuando
no se procesa un mensaje (bsicamente el mensaje enviado por el router de mensaje de men). Hay dos
servicios bsicos de depuracin que estn disponibles. Uno de ellos es DataWindow especfico y el otro es
especfico de SQL. Por ejemplo, si quieres ver todas las sentencias SQL que se estn generando por
PowerBuilder para enviar a la base de datos y, a continuacin, debe escribir el siguiente cdigo:
gnv_App.inv_debug.of_SetSQLSpy (TRUE)
El cdigo anterior se convierte en el servicio de espionaje SQL. Ahora, usted tiene dos opciones, o bien iniciar
todas las sentencias SQL a un archivo de registro o mostrar las sentencias SQL en una ventana emergente. Si
desea iniciar sesin, debe llamar a la funcin of_SetLogFile () con el nombre de archivo como parmetro.
gnv_appthis.inv_debug.inv_sqlspy.of_SetLogFile ("SQLSpy.log")
Para mostrar la ventana emergente SQLSpy, llame a la funcin of_OpenSQLSpy (TRUE):
gnv_app.inv_debug.inv_sqlspy.of_OpenSQLSpy (TRUE)

Pgina 20 de 65

La primera casilla en la imagen de arriba no se muestra con el cdigo de seguridad. De forma


predeterminada, la utilidad espa SQL funciona en el modo por lotes, lo que significa, se muestran / registran
todas las sentencias SQL. No permite que la cambie antes de que realmente se ejecuta. En cualquier caso, si
usted desea inspeccionar la instruccin SQL real antes de que se ejecute en realidad, es necesario desactivar
el modo por lotes y activar el modo de inspeccin:
gnv_app.inv_debug.inv_sqlspy.of_SetBatchMode (FALSO)
gnv_app.inv_debug.inv_sqlspy.of_SetAllowInspect (TRUE)
Llame a estos scripts antes de abrir la ventana SQLSpy. Ahora bien, si se ejecuta la aplicacin, usted todava
ver las sentencias SQL. Oye, abre la ventana w_product_master y recuperar datos de la base de datos. A
continuacin podr ver la instruccin SELECT en la ventana SQLSpy. Usted debe estar preguntndose por qu
la utilidad no le aviso para cambiar el SQL. Esta utilidad no le permite cambiar el SQL, mientras que recupera
los datos. Sin embargo, puede cambiar el SQL antes de actualizar / eliminar / insertar. Para ex, si cambia la
descripcin de uno de los productos y guardar los cambios, PFC le pedir que se muestra a continuacin:

En esta ventana, puede hacer cambios en las sentencias SQL. Al igual que el pintor de depuracin, se puede
ejecutar una sentencia SQL a la vez utilizando el botn "Paso", o puede pedir a la espa SQL para ejecutar
todas las sentencias SQL despus de la actual, sin preguntar. Tambin se puede utilizar para SQLSpy
DataWindows y embedded / SQL dinmico.
A veces, es necesario depurar el DataWindow, es decir, conocer el estado de fila / artculo, fuente / el color o
cualquier otra expresin, etc. En ese caso, SQLSpy no es til, ya que slo se ocupa de SQL. Para ello, es
necesario utilizar la ventana w_dwDebugger. No pudimos encontrar window w_dwDebugger en cualquiera de
las bibliotecas PFE (puede ser un error por Powersoft). Crear una ventana heredando de ventana
pfc_w_dwDebugger y guardarlo como w_dwDebugger. Usted no tiene que cambiar nada. Cada vez que desee
depurar el DataWindow, escriba el siguiente cdigo. Por ejemplo, digamos que encontr que algunas cosas
raras estn pasando cuando el usuario hace clic con el botn derecho del ratn y desea depurar en ese
momento. A continuacin, escriba el siguiente cdigo al evento rButtonDown:
s_dwdebugger lstr_parm
Pgina 21 de 65

lstr_parm.DW_obj = dw_product
lstr_parm.Tr_obj = SQLCA
OpenWithParm (w_dwdebugger, lstr_parm)
Ver la siguiente ventana:

En esta ventana, puede ver los valores de todos los atributos de la fila / columna seleccionada. Tambin
puede ver las filas de los tampones borrados / filtrada. Si cambia el valor de un atributo en la ventana, PFC se
aplica automticamente a la DataWindow real, tan pronto como se salga del campo modificado. En la foto de
arriba, hemos cambiado la frontera y tan pronto como pulsamos en la pestaa, PFC cambiamos la frontera de
ese campo. Guay, no escribimos el MODIFY () funcin, PFC se encarg de ello internamente.
Servicio de registro de transacciones
Cuando se utiliza ms de un objeto de transaccin basado en el objeto de transaccin n_tr, usted puede
hacer uso de "servicio de registro de transaccin", para realizar un seguimiento de los objetos de transaccin
que se utilizan en la aplicacin. En primer lugar, es necesario activar el servicio, como se muestra a
continuacin:
gnv_app.of_SetTrRegistration (TRUE)
A continuacin, registrar cada objeto de transaccin como se indica a continuacin:
gnv_app.inv_trregistration.of_Register (SQLCA)
El gestor de aplicaciones destruye el servicio de registro de transacciones cuando se cierra la aplicacin.
Usted puede solicitar el servicio de registro de transacciones para confirmar o deshacer todas las
operaciones abiertas, cuando se destruy el servicio, llamando a la funcin of_SetAutoRollback (). La
siguiente declaracin compromete a todas las transacciones abiertas:
SQLCA.of_SetAutoRollback (TRUE)
Servicio de almacenamiento en cach DataWindow
En algunas situaciones, puede ser necesario para reducir al mnimo el acceso de base de datos y as guardar
los datos recuperados de la memoria para el futuro acceso a la aplicacin. En estos casos, puede utilizar los
servicios de chat DataWindow del PFC. PFC DataStores utiliza internamente para almacenar en cach los
Pgina 22 de 65

datos del DataWindow. Como siempre, es necesario activar el servicio de almacenamiento en cach
DataWindow:
gnv_app.of_SetDWCache (TRUE)
Entonces, es necesario registrar el DataWindow que debe ser almacenado en cach llamando a la funcin
of_Register (). Esta es una funcin sobrecargada. Llame con argumentos adecuados en funcin del tipo de
almacenamiento en cach, como se explica a continuacin:

Deje que el servicio de recuperar y almacenar en cach los datos.

Deje que el servicio de cach los datos en una matriz.

Deje que el servicio de cach los datos que ya est disponible en el DataWindow.

Llame of_IsRegistered () para comprobar si el DataWindow se almacena en cach. Para utilizar los datos en
cach, es necesario llamar primero la funcin of_GetRegistered () y luego compartir los datos. Por ejemplo:
gnv_app.inv_dwcache.of_GetRegistered (&
"D_products_maint", ids_datastore)
ids_datastore.ShareData (dw_product)
El ejemplo anterior utiliza una variable de instancia ids_datastore para apuntar a los datos almacenados en
cach y el DataWindow actual est compartiendo los datos del almacn de datos. Si utiliza el primer mtodo
para almacenar en cach los datos, es decir, cuando se utiliza el servicio de cach para recuperar y
almacenar en cach los datos, puede solicitar el servicio de cach para recuperar los datos llamando a la
funcin of_Refresh (). A pesar de que no es necesario apagar el servicio de cach DataWindow
explcitamente, le recomendamos desactivar el servicio tan pronto haya terminado con l.
Servicio de objetos usados ms recientemente
Es posible que haya visto en todas las aplicaciones ms todos los que se enumeran los documentos /
ventanas abiertas recientemente en la opcin de men Archivo justo encima de la opcin de men Salir.
Algunas aplicaciones sofisticadas como PowerBuilder incluso lleg al extremo de mostrar objetos utilizados
recientemente por categora. PFC tiene un objeto de servicio para proporcionar esta funcionalidad en su
aplicacin PFC habilitado, pero viene con un poco de codificacin.

El MRU es un servicio a nivel de aplicacin y por lo tanto se habilita desde el evento constructor gestor de
aplicaciones.
/ / Habilitar y configurar el MRU Servicio of_SetMRU (true) SI this.of_IsRegistryAvailable () ENTONCES
this.inv_mru.of_SetUserKey (this.of_GetUserKey ()) Else this.inv_mru.of_SetUserINIFile (this.of_GetUserINIFile
()) END IF
Pgina 23 de 65

El servicio ofrece una opcin de archivo INI o el registro para almacenar los datos de MRU. El cdigo anterior
permite que el servicio y lo configura para utilizar el Registro para almacenar la informacin MRU.
Habilitacin ya sea el archivo INI o el registro es suficiente, usted no tiene que hacer otra llamada desvo del
otro. Cuando se llama a la of_SetUserINIFile (), se apaga automticamente el uso del registro para el servicio
MRU y viceversa.
Servicio MRU le permite registrar uno o ms identificadores de grupo. Cada grupo va a mantener su propia
lista de ventanas usadas recientemente. Cada ventana para decirle al servicio de qu lista quiere por su
men a continuacin, puede utilizar el ID de grupo. Los IDs se pueden registrar en el evento constructor
gestor de aplicaciones o el marco de evento abierto MDI, pero el primero es preferible.
gnv_app.inv_mru.of_Register ("PMS")
A fin de que la ventana de participar en el proceso de MRU, cdigo necesita ser aadido a una serie de
eventos de marcador de posicin w_master MRU. Los eventos clave MRU son:

pfc_MRUClicked

pfc_MRUSave

pfc_PreMRUSave

pfc_MRURestore

pfc_MRUProcess

Usted no tiene que escribir ningn cdigo para pfc_MRUClicked; este evento se activa cuando el usuario hace
clic en una de las opciones de men MRU bajo la opcin del men Archivo. Este evento a su vez desencadena
el evento pfc_MRUProcess.
pfc_MRUSave
Servicio MRU mantiene un almacn de datos interno y mantiene todos los datos MRU en ese almacn de
datos. Actualizaciones de servicio MRU este DataStore al registrarse / anular el registro de un objeto de
servicio de MRU y cada vez que se agrega un elemento de men en cualquier ID de grupo.
Cuando se activa, este evento se sumar la ventana actual a la lista MRU. No hay que confundir este evento
con el ahorro de la informacin en el archivo. INI o el registro. El servicio MRU har que la aplicacin cierre.
Este evento se utiliza para indicar el servicio para actualizar su almacn de datos. Las opciones posibles para
despedir a este evento son: Abrir, Guardar o cierre eventos relacionados. No es necesario agregar ningn
cdigo para el evento pfc_MRUSave; Si explora el cdigo de este evento en la ventana pfc_w_master (cdigo
indicado a continuacin), se ver que este evento est disparando el evento pfc_PreMRUSave.
/ / Cdigo pre-escrito
/ / Objeto: pfc_w_master
/ / Evento: pfc_MRUSave
n_cst_mruattrib lnv_mruattrib
/ / Agregar informacin a mru servicio nvo
Si IsValid (gnv_app.inv_mru) A continuacin,
Definida / / ejecutar usuario guarde lgica
this.event pfc_premrusave (lnv_mruattrib)
/ / Id debe estar registrado en el servicio de primera mru
si gnv_app.inv_mru.of_IsRegistered (lnv_mruattrib.is_id) luego
Volver gnv_app.inv_mru.of_additem (lnv_mruattrib)
ms
Volver -1
final si
final si
devolver -1
Escriba el siguiente cdigo en la ventana w_product_master.
Pgina 24 de 65

this.Event pfc_MRUSave ()
pfc_PreMRUSave
Como se explic anteriormente, pfc_PreMRUSave es un evento de marcador de posicin destinada para
rellenar la informacin que se guarda en el servicio MRU. Por lo tanto, en caso pfc_PreMRUSave, debe
agregar cdigo para establecer los atributos N_cst_mruattrib atributo del objeto. Estos son los valores de
servicio MRU utiliza para guardar en su almacn de datos interno. Por lo general, se establecen estos
atributos con la informacin acerca de la ventana actual.
La siguiente es la estructura de n_cst_mruattrib objeto de atributo.

Variable

Longitud

Descripcin

is_id

50

MRU ID de grupo

is_classname

50

Nombre de la clase Window

is_menuitemname

50

Men de texto

is_menuitemkey

100

Parmetro que se pasa a la ventana

is_menuitemmhelp

100

Men MicroHelp

Por lo general, usted no desea escribir cdigo para el evento pfc_PreMRUSave en el marco MDI ya que no
desea mostrar la ventana MDI referencia en su propio men. Si lo hace, no pasar nada en tiempo de
ejecucin cuando el usuario selecciona la opcin de men, ya que no se puede abrir una ventana de marco
MDI con en otra ventana de marco MDI.
/ / Objeto: w_product_master
/ / Evento: pfc_PreMRUSave
anv_mruattrib.is_id = this.classname ()
anv_mruattrib.is_classname = this.classname ()
anv_mruattrib.is_menuitemname = this.title
anv_mruattrib.is_menuitemkey = "pms"
anv_mruattrib.is_menuitemmhelp = "Click to open '" + this.title + "'"
devuelve 1
pfc_MRURestore
caso pfc_mruRestore se desencadena por la ventana Activate, eventos de cierre y apertura. Primer caso en
realidad se dispara este evento para restaurar la ventana principal, si est disponible. Por lo tanto, si usted
tiene una ventana MDI con dos hojas abiertas, si cierra la hoja 1, entonces los MRUs de la ventana MDI sera
restaurado primero e inmediatamente, se restaurara MRUs para la siguiente hoja. El resultado final es, ver
MRUs para la segunda hoja en su men.
/ / Objeto: w_product_master
/ / Evento: pfc_MRURestore
Si IsValid (gnv_app.inv_mru) A continuacin,
Volver gnv_app.inv_mru.of_Restore ("pms", Este)
Ms
Return - 1
End If
Pgina 25 de 65

Si usted no escribe cdigo para llamar a la funcin of_Restore (), PFC no mostrar las opciones de men MRU.
pfc_MRUProcess
Cuando el usuario hace clic en el elemento de men MRU, dispara evento pfc_MRUClicked que a su vez
activa el evento Pfc_MRUProcess. Debe contener el cdigo necesario para responder a un elemento de men
MRU clic. Este es el evento que va a utilizar para abrir la ventana solicitada. Un argumento de evento
contiene una fila en el almacn de datos interno. Esta fila se puede utilizar para rellenar una instancia del
objeto n_cst_mruattrib con la informacin necesaria para abrir la ventana.
/ / Objeto: w_product_master / / Evento: pfc_MRUProcess ventana lw_frame, lw_window n_cst_menu
lnv_menu n_cst_mruattrib lnv_mruattrib / / Comprobar parmetros. IF IsNull (ai_row) luego regresar -1 SI NO
IsValid (gnv_app.inv_mru) luego regresar -1 / / Recuperar la fila de DataStore. gnv_app.inv_mru.of_GetItem
(ai_row, lnv_mruattrib) / / Obtenga el marco MDI, si es necesario. lnv_menu.of_GetMDIFrame (this.menuid,
lw_frame) OpenSheet (lw_window, lnv_mruattrib.is_classname, lw_frame) Regresar 1

Como se explic anteriormente, el servicio MRU utiliza el archivo INI o el registro para guardar MRU mens
informacin especfica entre varias ejecuciones de la aplicacin. INI o el registro slo puede guardar
informacin de la cadena (PowerBuilder tiene una funcin para leer los datos numricos del archivo INI). Si se
abre la ventana con los tipos de datos no tradicionales tales como PowerBuilder clase de objeto, la
estructura, los datos contenidos en dicho objeto tiene que ser codificado en una cadena. Esto puede hacerse
reemplazando el evento pfc_Encode en su versin del objeto que se hereda de n_cst_mru y llamar al evento
ancestro al final. Del mismo modo lgica de decodificacin debe ser aadido al evento pfc_Decode. Tenga en
cuenta que hay un lmite de 100 caracteres impuesto por el DataStore MRU. Si utiliza el archivo INI, entonces
hay una limitacin 4K por entrada clave y el tamao total del archivo INI 64K.
Servicios DataWindow
PFC proporciona una gran cantidad de servicios de DataWindow. Algunos servicios tienen una gran
funcionalidad y usted no la encuentran en cualquier aplicacin tpica PowerBuilder. Estamos seguros de que
te hace la vida fcil. La forma ms sencilla de utilizar servicios DataWindow es utilizar el DataWindow usuario
u_dw objeto, donde se utiliza el control normal DataWindow. Activar los servicios necesarios. La mayora de
los servicios se pueden activar en caso pfc_PostOpen ventana. Empecemos con la adicin de los registros al
servicio DataWindow.

Pgina 26 de 65

Agregar datos a la DataWindow


De forma predeterminada, para cada usuario u_dw DataWindow objeto, men emergente est activada.
Usted no tiene que encender o apagar cualquier servicio.

Con este men emergente, el usuario puede aadir un registro o insertar un registro antes de la fila actual.
Usted no tiene que escribir ningn cdigo. Si utiliza DataWindow usuario u_dw objeto de informar propsito,
este men est disponible. Es posible que desee deshabilitar / insertar opciones al escribir el cdigo
siguiente al evento pfc_PreRmbMenu del objeto especfico del usuario DataWindow en la ventana.
am_dw.m_table.m_insert.enabled = False
am_dw.m_table.m_addrow.enabled = False

Pgina 27 de 65

Antes de mostrar el men emergente, PFC activa este evento y enva el men como am_dw argumento.
Coloque una u_dw objeto de usuario en el w_product_master (de la biblioteca pfc_product) y el nombre como
dw_product. Asignar d_products_maint objeto DataWindow a este control.

Pgina 28 de 65

Guardar los cambios en la base de datos


Este servicio est activado por defecto para el usuario u_dw DataWindow objeto. Cuando el usuario
selecciona Archivo> Guardar en el men, PFC guarda automticamente los datos. Si el usuario hace algunos
cambios y cierra la ventana sin guardar los cambios, PFC le pide guardar los cambios. Este tema se analiza
en profundidad en la sesin por delante ", PFC - LUW (unidad lgica de trabajo)".
Eliminar datos del DataWindow
Esto tambin es un servicio bsico DataWindow y est disponible de forma predeterminada con ningn
cdigo. Sin embargo, la opcin de borrar el registro no est disponible desde la opcin de men Edicin. Est
disponible desde el men emergente del DataWindow.
PFC no se aplica a los elimina de la base de datos de inmediato. Necesidades de los usuarios para aplicar los
cambios (incluyendo eliminaciones) a la base de datos seleccionando Archivo> Guardar en el men. PFC pide
al usuario if (s) que se cierra la ventana sin guardar los cambios.
De forma predeterminada, PFC no confirma elimina. Usted puede pedir PFC para confirmar cada eliminacin
por escribir el siguiente cdigo:
dw_product.inv_RowManager.of_SetConfirmOnDelete (TRUE)
Si ha habilitado la seleccin de mltiples filas, y si el usuario selecciona la opcin "Eliminar" en el men
emergente cuando se seleccionan varias filas, PFC borra slo la ltima fila seleccionada. Si desea
proporcionar la funcionalidad de eliminar todas las filas seleccionadas, puede hacerlo llamando a la funcin
of_DeleteSelected ():
dw_product.inv_RowManager.of_DeleteSelected ()
Pgina 29 de 65

Este men est disponible, incluso si se utiliza el DataWindow usuario u_dw objeto a efectos de notificacin.
Es posible que desee desactivar la opcin de eliminacin por escribir el cdigo siguiente al evento
pfc_PreRmbMenu del objeto especfico del usuario DataWindow en la ventana.
am_dw.m_table.m_delete.enabled = False
Antes de mostrar el men emergente, PFC activa este evento y enva el men como argumento, am_dw.

Puede definir el nombre para mostrar de una sola fila llamando a la funcin of_SetDisplayName (). Esta
funcin se declara en pfc_n_cst_dwsrv objeto base y se utiliza en el cuadro de confirmacin al usuario elimina
una sola fila. Del mismo modo, se puede establecer el nombre para mostrar de varias filas llamando
of_SetDisplayUnits () funcin.
Recuperar los datos
PFC ha definido una definida por el usuario pfc_retrieve acontecimientos para el DataWindow usuario u_dw
objeto. Sin embargo, no hay ningn cdigo escrito a ese evento y lo que necesita para escribir el cdigo.
Si no ha definido Recuperar opcin de men en la opcin Archivo en m_sheet_menu, definir una ahora.
Mtodo 1: Si la ventana tiene slo un DataWindow, decir como en w_product_master, puede escribir este
cdigo en el evento pfc_retrieve.
/ / Objeto: w_product_master.dw_master
/ / Evento: pfc_retrieve
Volver This.Retrieve ()
Si utiliza este mtodo, es necesario enviar el mensaje de pfc_retrieve 'del Archivo> Recuperar del evento
click llamando of_SendMessage (' pfc_Retrieve ')
El uso de este mtodo puede aumentar la par de cuestiones. Uno de ellos, lo que si, si el foco est en algn
otro control en la ventana y el control concentrado hasta ahora no es el DataWindow que desea recuperar?
En segundo lugar, qu pasara si, si tiene varias DataWindows en la ventana? La respuesta es el segundo
mtodo se explica a continuacin.
Pgina 30 de 65

Mtodo 2: Si la ventana tiene varios DataWindows enlazadas / desvinculadas, definir un evento definido por
el usuario ue_retrieve en el nivel de la ventana y escribir el cdigo. Devuelve el nmero de filas recuperadas
como el valor de retorno. Si todos DataWindows estn vinculados con el servicio de vinculacin, entonces
usted necesita para recuperar de la DataWindow maestro.
/ / Objeto: w_product_master
/ / Evento: ue_retrieve
Volver dw_product.of_Retrieve ()
Siga el segundo mtodo, ya que estamos enviando mensajes ue_retrieve Del Archivo> Recuperar elemento
de men. Sabemos que w_product_master no tiene mltiples DataWindows, pero estamos usando el segundo
mtodo para que sea coherente.
Si utiliza este mtodo, es necesario enviar el mensaje de ue_retrieve 'del Archivo> Recuperar del evento click
llamando of_SendMessage (' ue_Retrieve ')

Exportacin del DataWindow


Si est utilizando una ventana que se hereda de w_sheet, usted encontrar un evento definido por el usuario
pfc_saveas en el nivel de la ventana. Sin embargo, no hay ningn cdigo en ese evento. Usted tiene que
escribir el siguiente cdigo si desea utilizar el cuadro de dilogo Guardar como PowerBuilder defecto:
dw_product.SaveAs ()
Sin embargo, si desea utilizar la ventana desarrollada en el usuario de la sesin los objetos, escribir el
siguiente cdigo:
OpenWithParm (w_export, dw_product)
Cortar, Copiar, Pegar (especial), Clear Servicios
Todos ellos estn disponibles como servicios bsicos. Es posible que desee desactivar las opciones de men
relevantes para el informe DataWindows, como se muestra a continuacin:
/ / Objeto: objeto de usuario DataWindow en la ventana
/ / Evento: pfc_PreRmbMenu
am_dw.m_table.m_cut.enabled = False
am_dw.m_table.m_copy.enabled = False
am_dw.m_table.m_paste.enabled = False
am_dw.m_table.m_selectall.enabled = False
Si pintas un men diferente para ventanas informe, entonces est bien. De otra manera, escribir el siguiente
cdigo.
/ / Objeto: ventana que se utiliza para el informe / / Evento:.... Pfc_PostOpen This.MenuID.Item [2] del artculo
[1] Activado = FALSO This.MenuID.Item [2] Artculo [3] Enabled = FALSO This.MenuID.Item [2]. artculo [4].
Pgina 31 de 65

Enabled = FALSO This.MenuID.Item [2]. artculo [5]. Enabled = FALSO This.MenuID.Item [2]. artculo [6].
Enabled = FALSO This.MenuID.Item [2]. artculo [7]. Enabled = FALSO This.MenuID.Item [2]. Artculo [9].
Enabled = FALSO
Le recomendamos que para pintar un men separado para las ventanas informe y ocultar las opciones que
no son necesarios para el informe.
Ordenar Servicio
Servicio de tipo de PFC ofrece muchas funcionalidades, y se puede configurar este servicio en cualquier
aplicacin de PowerBuilder. Para utilizar los servicios de DataWindow, utilice el objeto de usuario u_dw lugar
de un control DataWindow estndar. u_dw tiene una funcin of_SetSort (), que toma un parmetro booleano.
Llamar a la funcin con un parmetro real se activa el servicio de ordenacin y crea el servicio de
ordenacin. El servicio de tipo n_cst_dwsrv_sort objeto se declara como una variable de instancia en u_dw.
Para habilitar la funcionalidad de ordenacin, slo tiene que activar la funcionalidad de ordenacin llamando
a la funcin of_SetSort ().
dw_product.of_SetSort (TRUE)
Si se ejecuta la aplicacin, ver el cuadro de dilogo Criterios de ordenacin estndar, como se muestra en la
siguiente imagen.

Con este comportamiento por defecto, usted no puede tomar ventaja real del servicio de ordenacin. Usted
puede pedir PFC para mostrar su cuadro de dilogo, en lugar del cuadro de dilogo Criterios de tipo estndar.
/ / Tipos de ordenacin:
/ / DEFAULT 0 o cuadro de dilogo Ordenar PowerBuilder (por defecto)
Cuadro de dilogo w_sortdragdrop de 1 PFC / / dragdrop o
Cuadro de dilogo w_sortsingle de PFC / / SIMPLE o 2
Cuadro de dilogo w_sortmulti de 3 PFC / / DROPDOWNLISTBOX o
dw_product.inv_sort.of_setStyle (1)
Oregn
dw_product.inv_sort.of_setStyle (dw_product.inv_sort.DRAGDROP)
El cdigo anterior se convierte en el Drag & cuadro de dilogo estilo gota, en lugar del cuadro de dilogo de
criterios de tipo PowerBuilder estndar.

Pgina 32 de 65

Cuadro de dilogo de criterios de ordenacin por defecto de PowerBuilder y el estilo 1 de servicio clase son
similares, salvo la diferencia 3D. Usted puede preguntar por qu PFC est duplicando la funcionalidad
existente? Buena pregunta. El modo por defecto no permite restringir al usuario clasificar en algunas
columnas, sino que siempre muestra todas las columnas. Por eso, crearon una, a pesar de que tiene un
aspecto similar. Adems, el PFC se permite ordenar por la columna Nombre del DataWindow / Nombre /
DataWindow texto encabezado de la columna de base de datos.
En cualquier caso, si desea permitir al usuario ordenar slo en una columna, llame a la funcin con 2 como
parmetro.
dw_product.inv_sort.of_SetStyle (2)

La imagen siguiente muestra el cuadro de dilogo Ordenar estilo DDLB, similar a la anterior, pero permite la
ordenacin de columnas mltiples.
dw_product.inv_sort.of_SetStyle (3)

Si observas el cdigo, ver que estamos llamando of_SetSort () funcin, definida en el objeto de usuario
u_dw. Sin embargo, hacemos un llamado a la funcin of_SetStyle () del servicio (declarado como una variable
de instancia). Una vez que decida el tipo estilo de la caja de dilogo, puede utilizar otras funciones.
Algunos DataWindows como la que usamos en la ventana w_transactions tienen algunas columnas ocultas.
Cuando se llama a la funcin dw_tran_header.Sort estndar (), PowerBuilder muestra todas las columnas en
el cuadro de dilogo de tipo, con independencia de la condicin de propiedad visible. Cuando se utiliza
Pgina 33 de 65

cualquiera de las cajas de dilogo de criterios especie PFC, puede elegir no mostrar las columnas ocultas,
como se muestra a continuacin:
dw_product.inv_sort.of_SetVisibleOnly (TRUE)
Antes de saltar a otros temas, es necesario comprender algunas cosas sobre DataWindow. Es posible que
haya observado algn tiempo de codificacin, pero queremos asegurarnos de que usted lo sepa.
Empecemos con un ejemplo sencillo. Oye, que ha pintado un DataWindow con una columna,
product_description de product_master. Cuando se hace referencia a esta columna en la funcin Modificar (),
se refieren a ella, ya sea usando el nmero de la columna o el nombre de la columna. Cuando se hace
referencia a la columna, se hace referencia como product_description. Este product_description se llama
"nombre de la columna DataWindow". Cuando usted est en el pintor DataWindow, si ve las propiedades de
esta columna, usted encontrar el nombre como product_description. Puede cambiar este nombre por el de
cualquier otro nombre que desee, siempre y cuando siga las convenciones de nombres.
Si selecciona Filas> Especificaciones columna en el men, podr ver una propiedad ms ", nombre de la
base" y ver 'Product_master.Product_description "bajo el" nombre de la base "la partida. Cuando
PowerBuilder enva instrucciones SQL, utiliza este nombre. Esto se llama "nombre de la columna de base de
datos". No se puede cambiar esto en PowerBuilder.
Para cada columna se coloca en el DataWindow, PowerBuilder crea una etiqueta / cabecera en funcin del
estilo de presentacin. De forma predeterminada, el nombre de la cabecera de la etiqueta / sera el nombre
de la columna DataWindow con un sufijo "_t". As, por product_description el nombre de la etiqueta / de la
cabecera sera product_description_t. Usted puede cambiar esto, si quieres. El valor de texto de esta etiqueta
/ cabecera sera el nombre de la columna con el subrayado reemplazados por espacios, "Descripcin del
producto". Esto se llama "nombre de encabezado de la columna".
PowerBuilder por defecto muestra los "nombres de columna DataWindow" en el cuadro de dilogo de
criterios de clasificacin. Usted no tiene ninguna opcin de usar uno diferente. Sin embargo, usted tiene la
opcin de utilizar cualquiera de los tres anteriores, cuando se utiliza el cuadro de dilogo de tipo PFC:
dw_product.inv_sort.of_SetColumnNameSource (3)
En el cdigo anterior estamos pidiendo PowerBuilder para mostrar los encabezados de columna en lugar de
nombres de columna DataWindow.

Parmetro Significado
0

Utilice nombres de columna DataWindow estndar (por defecto)

Utilice nombres de columna de base de datos

Utilizar nombres de encabezado de columna

/ / Se definen en pfc_n_cst_dwsrv
/ / Constante DEFAULT entero = 0
/ / Constante DBNAME entero = 1
/ / HEADER entero constante = 2
dw_product.inv_sort.of_SetColumnDisplayNameStyle (2)
Oregn
dw_product.inv_sort.of_SetColumnDisplayNameStyle (&
dw_product.inv_sort.HEADER)
Cuando se utiliza 2 como parmetro, PFC supone que los "nombres de encabezado de columna" estn
utilizando el sufijo por defecto "_t". Si no encuentra ningn nombre de esta convencin para las columnas, se
utiliza el "nombre de la columna DataWindow". Si usted est usando un sufijo diferente que no sea "_t",
vamos PFC saber sobre l llamando a la funcin of_SetDefaultHeaderSuffix ().

Pgina 34 de 65

dw_product.inv_sort.of_SetDefaultHeaderSuffix (&
"El sufijo Here")
Algunas veces, no quieren que el usuario ordenar en alguna columna en particular. Usted lo puede evitar
llamando a la funcin of_SetExclude ().
/ / Declarar una variable de instancia mediante la seleccin Declarar / Instancia
/ / Variables, junto a la ventana, como se muestra a continuacin.
Cadena is_ExcludeColumns []
/ / Escribir el siguiente cdigo.
is_ExcludeColumns [1] = "product_description"
dw_product.inv_sort.of_SetExclude (is_ExcludeColumns [])
En el ejemplo anterior, estamos excluyendo product_description desde el cuadro de dilogo Ordenar.
Clasificacin DataWindow En Windows 95 Way
PFC tambin es compatible con tipo de ordenacin de Windows 95. Si usted es un usuario de Windows 95,
puede que haya observado en el Explorer que, al hacer clic en una de las columnas, dice, "Tipo de archivo",
de Windows 95 clasifica automticamente para la columna sin pedir con cualquier cuadro de dilogo de
criterios de clasificacin.
Slo tiene que llamar a of_SetColumnHeader () funcin, eso es todo.
dw_product.inv_sort.of_SetColumnHeader (TRUE)
Cuando el usuario hace clic en uno de los encabezados de columna DataWindow, PFC clasifica
automticamente para la columna en orden ascendente. Si el usuario hace clic de nuevo en la misma
columna, PFC ordena la columna en orden descendente. Si el usuario selecciona la opcin de clasificacin en
el men, PFC muestra un cuadro de dilogo apropiado, dependiendo de la of_SetStyle () parmetro enviado
por usted. Puede que no quieras para que este tipo de servicio para FreeForm DataWindows estilo de
presentacin. El servicio de tipo trabaja en el modo de vista previa de impresin tambin. Encabezado de
columna Haga clic en la clasificacin (el camino de Windows 95) no funciona en N-Up DataWindow estilo de
presentacin. Sin embargo, of_SetExclude () no tiene efecto en la clasificacin al estilo de Windows 95, es
decir, la clasificacin de la columna cuando el usuario hace clic en el encabezado de la columna.
Ordenar por valores de visualizacin en lugar de valores de datos
Como ustedes saben, en DataWindows, cuando se utiliza editar estilos como DDDW, puede hacer uso de dos
valores. Uno de ellos es el valor de datos (almacenado en la base de datos) y el otro es el valor de la
pantalla. Del mismo modo, cuando se utiliza EditMask estilo de edicin, puede utilizar tablas de cdigos para
el mismo propsito. Por ejemplo, estamos utilizando DDDW estilo de edicin para product_measurement_unit
en la ventana w_product_master. Al clasificar el DataWindow en una columna con los estilos de edicin antes
mencionadas, PowerBuilder tipo automticamente en el valor de los datos. Por ejemplo, si clasifica por
product_measurement_unit, tipo PowerBuilder en los datos del valor, como se muestra a continuacin.

En la foto de arriba, hemos cambiado el product_measurement_unit con fines de demostracin y que


antepone un carcter a la descripcin en la tabla de unidades. Recuerde que nosotros no cambiamos el valor
de los datos, es decir, la unidad en la tabla de unidades. Entonces, nos lo solucionaron el DataWindow en el
Pgina 35 de 65

product_measurement_unit. PowerBuilder DataWindow ordena la de los valores de los datos, de forma


predeterminada. Sin embargo, para el usuario que no es un programador PowerBuilder, parece extrao,
porque, lo que se ve no se pregunta. Tenemos que ordenar los valores de la pantalla y no en los valores de
los datos.

En la imagen superior, se puede ver el DataWindow ordenada en el valor de la pantalla. Cmo lo hacemos?
Slo una lnea de cdigo:
dw_product.inv_sort.of_SetUseDisplay (TRUE)
Si est utilizando un men que se hereda en el men PFC, usted no tiene el cdigo en el evento clic del men
y en la ventana (que no sea el cdigo se explica ms arriba). Usted tambin no tiene que definir los eventos
definidos por el usuario con el fin de ordenar el servicio.
Orden personalizado
Digamos, la columna de la product_balance tiene los siguientes valores. La siguiente tabla muestra los
resultados de los diferentes criterios de ordenacin. El usuario quiere que la ltima orden de izquierda a
derecha. Cmo se logra esto utilizando el servicio de tipo PFC?

Ascendente Orden

Orden Descendente

La Orden de Clasificacin usuario desea

-20

20

-10

-10

10

-20

10

-10

10

20

-20

20

El cdigo es simple. Usted tiene que escribir:


dw_product.inv_sort.of_setsort (&
"Firmar (product_balance) A, abs (product_balance) A")
dw_product.inv_sort.of_sort ()
Cada vez que abra el cuadro de dilogo Criterios de clasificacin, que muestra los criterios de clasificacin
actuales. Esto se aplica a los valores de un tanto de PowerBuilder, as como todos los estilos de ordenacin
de PFC. Sin embargo, cuando se ordena una DataWindow uso de expresiones como el anterior, el cuadro de
dilogo Criterios de tipo no muestra los criterios de ordenacin actuales en absoluto.
Pgina 36 de 65

Si est utilizando un men que se hereda de m_sheet de PFC, a continuacin, Ver> opcin de men Ordenar
cuida de la clasificacin de la DataWindow actual. En caso que si desea ordenar de otra parte, es necesario o
bien llame como se muestra a continuacin o necesita un cdigo similar al que se muestra en la seccin
'Ordenar Personalizado'.
dw_product.Event pfc_SortDlg ()
Si usted quiere saber si el servicio especie est utilizando los valores de indicacin o valores de datos para
ordenar, llame al:
dw_product.inv_sort.of_GetUseDisplay ()
Servicio filtro
Para habilitar el servicio de filtro, simplemente escriba la siguiente lnea.
dw_product.of_SetFilter (TRUE)
Algunos programadores escriben el cdigo en el evento constructor del DataWindow. Sera mejor cuando se
escribe en caso pfc_PostOpen de la ventana especfica. Cuando se sigue el mtodo ms tarde, la ventana se
abre primero y el guin escrito en la ventana de pfc_PostOpen se ejecuta ms tarde. Esto se debe a que, el
evento se registr en lugar de ser disparado. Por esto, el usuario ver la ventana con ms rapidez.
Si se ejecuta la aplicacin, PFC muestra el cuadro de dilogo de filtro estndar. Al igual que el servicio de
ordenacin, PFC tiene diferentes cuadros de dilogo para el servicio del filtro. La siguiente pregunta al PFC
utilizar su cuadro de dilogo.
dw_product.inv_filter.of_SetStyle (1)
La siguiente imagen es el resultado del cdigo anterior.

Su semejante cuadro de dilogo de filtros por defecto de PowerBuilder con la adicin de "Valores" a. PFC
recupera los valores distintos de la columna seleccionada en la ficha Columnas. Si usted tiene un
DataWindow con miles de filas, no utilice este estilo, en lugar de elegir la opcin por defecto. PFC recupera
los valores de esta ficha mediante el SQL incorporado, que no comparten los valores de la DataWindow. Eso
significa, que utiliza una cantidad considerable de recursos.
Si establece el objeto de transaccin de este DataWindow de una manera normal, dw_product.SetTransObject
(SQLCA), PFC no mostrar los valores de esta ficha. Establezca el objeto de transaccin usando:
dw_product.of_SetTransObject (SQLCA).
Pgina 37 de 65

Hay un cuadro de dilogo ms filtros PFC:


dw_product.inv_filter.of_SetStyle (2)

Este es el cuadro de dilogo Filtro estilo DDLB. A medida que escribe en el tercer DDLB, PFC busca el valor
ms cercano / a juego y muestra el valor en el DDLB. La parte mala es que, no se puede seleccionar un
nombre de columna, slo puede seleccionar los valores de la tercera DDLB.
Al igual que el servicio de ordenacin, usted tiene la opcin de usar "nombres de encabezado de columna" /
"Los nombres de columna de base de datos" / "Los nombres de columna DataWindow". Tienes que llamar a la
funcin of_SetColumnnameSource (). Si desea permitir la filtracin del usuario slo en las columnas visibles,
se le puede restringir mediante la funcin of_SetVisibleOnly (TRUE) llamando.
En el tercer estilo, apesar de que muestra los criterios de filtro antes, no ocupa toda la parte inferior del
cuadro de criterios de filtro, es decir, los criterios que establezca segunda vez sobrescribe la primera, que no
aade a los criterios existentes.
Al igual que el servicio de ordenacin, puede excluir una o ms columnas que se filtren. Sin embargo, si
usted conoce el nombre de la columna, puede escribir en el cuadro de dilogo de filtros, aunque no se
muestra debido a of_setExclude ().
Si est utilizando un men que se hereda en el men PFC, usted no tiene el cdigo en el evento clic del men
y en la ventana (que no sea el cdigo se explica ms arriba). Adems, usted no tiene que definir los eventos
definidos por el usuario con el propsito de servicio del filtro. Adems, usted no tiene que destruir el servicio
del filtro, creado por la funcin of_SetFilter (TRUE). El PFC se encarga de que, en caso destructor del u_dw.
Buscar y reemplazar Servicio
PFC viene con un buen descubrimiento y reemplazar el servicio, que una aplicacin tpica de PowerBuilder no
ofrece. Usted tiene que escribir una sola lnea de cdigo, como se muestra a continuacin:
dw_product.of_setfind (TRUE)
Eso es todo, nada ms. (Suponemos que usted est usando un men que se hereda en el men PFC). Ejecute
la aplicacin y seleccione Editar> Buscar en el men y aparecer un cuadro de dilogo como se muestra a
continuacin.

Pgina 38 de 65

Puede buscar hacia arriba / abajo y puede elegir para que coincida con el caso o no. Hay otra opcin que
Powersoft puede aadir a esto, es decir, "Slo palabras completas" opcin.

L a imagen de arriba muestra el cuadro de dilogo Buscar y Reemplazar servicio. Es realmente una
caracterstica interesante del PFC. Sera genial si pueden proporcionar la seleccin de varias columnas. Por
ejemplo, un DataWindow con lleno de columnas de texto y el usuario quiere encontrar en cualquier columna
y reemplazar. Sera fcil para el usuario, si es capaz de hacer eso. Esta versin de PFC no lo soporta.
Del mismo modo, este servicio puede ser mejorado para permitir al usuario construir Bsqueda expresiones
similares a las expresiones de filtro, que falta en la versin actual.
si desea mostrar el cuadro de dilogo Buscar de otro evento / funcin, llamada:
dw_product.event PFC_Finddlg ()
//O
dw_product.inv_find.event PFC_Finddlg ()
Si por cualquier razn, si desea habilitar encontrar el servicio, pero no "Buscar y reemplazar" de servicios,
puede desactivarlo llamando al:
dw_product.inv_find.of_SetAllowReplaceDlg (false)
Del mismo modo, puede desactivar encontrar un servicio nico:
dw_product.inv_find.of_SetAllowFindDlg (false)
DropDown DataWindow / ListBox Buscar
Esto se puede utilizar para buscar DDDW as como DDLB. Cuando la columna de 'Permitir edicin' propiedad
est activada, al escribir un carcter y pulse la flecha hacia abajo toma el primer lugar de los datos que se
inician con el valor que ha escrito. Sin embargo, cuando se utiliza este servicio, el usuario no tiene que pulsar
la flecha hacia abajo para ver los datos. Al activar este servicio cuando la columna no est en 'Permitir
edicin' no tiene sentido, ya que el comportamiento predeterminado PB es lo suficientemente bueno.
/ / Objeto: w_product_master / / Evento: pfc_PostOpen dw_product.of_SetDropDownSearch (TRUE)
dw_product.inv_dropdownsearch.of_Register ("product_measuring_unit") / / objeto:
w_product_master.dw_product / / Evento: inv_dropdownsearch.Event EditChanged pfc_EditChanged (fila, dwo,
datos) / / Objeto: w_product_master.dw_product / / Evento: inv_dropdownsearch.Event ItemFocusChanged
pfc_ItemFocusChanged (fila, dwo)
No se puede buscar y reemplazar valores en una DDDW, lo cual tiene sentido.
Servicio de consultas
Las siguientes son las caractersticas del servicio de consulta:

Capacidad para restringir la consulta a ciertas columnas


Recuerda la consulta y muestra que los criterios anteriores cuando el DataWindow poner en el modo
de consulta de nuevo
Pgina 39 de 65

Permite guardar los criterios de consulta y cargar de nuevo

Le permite seleccionar y pegar el valor real de la columna actual en el modo de consulta.

Al igual que cualquier otro servicio de PFC, necesita habilitar el servicio de consulta si desea utilizarlo.
/ / Objeto: w_product_master
/ / Evento: pfc_PostOpen
dw_product.of_SetQueryMode (TRUE)
El cdigo anterior crea una instancia del objeto de servicio de modo de consulta. Para poner el DataWindow
en el modo de consulta, puede seguir el mtodo tradicional de usar Modificar () o llamar a la funcin de
servicio modo de consulta.
/ / Objeto: w_product_master
/ / Evento: ue_query
/ / Mtodo tradicional de poner el dw en modo de consulta.
dw_product.Object.DataWindow.QueryMode = 'Yes'
//O
/ / Dw_product.Modify ('DataWindow.QueryMode = Yes')
/ / Objeto: w_product_master
/ / Evento: ue_query
/ / PFC manera de poner el peso seco en el modo de consulta.
dw_product.inv_querymode.of_SetEnabled (TRUE)
Con el fin de recuperar los datos como por criterios de consulta del usuario, debe escribir uno de los
siguientes, dependiendo del mtodo que despus de poner el DataWindow en modo de consulta.
/ / Objeto: w_product_master
/ / Evento: ue_query
/ / Escribir el siguiente cdigo si has seguido mtodo tradicional antes.
dw_product.AcceptText ()
dw_product.object.DataWindow.QueryMode = 'No'
dw_product.of_Retrieve ()
/ / Objeto: w_product_master
/ / Evento: ue_query
/ / Escribir el siguiente cdigo si se llama of_SetEnabled (TRUE) antes.
dw_product.inv_querymode.of_SetEnabled (false)
En el segundo mtodo, el PFC se encarga de aceptar el texto, girando el DataWindow en modo normal y
recuperar los datos. Esto le proporciona la misma funcionalidad que el modo de consulta que se utilizan
normalmente. No funcionalidad increble extra, como servicio de ordenacin. Cuando se utiliza el segundo
mtodo, asegrese de llamar a la funcin of_SetRetrieveOnDisabled () antes de poner el DataWindow en el
modo de consulta.
/ / Objeto: w_product_master
/ / Evento: pfc_PostOpen
/ / Anexar el cdigo siguiente si desea utilizar of_SetEnabled ().
dw_product.inv_querymode.of_SetRetrieveOnDisabled (Falso)
De forma predeterminada, PowerBuilder no recuerda la consulta anterior. Por ejemplo, se hace una consulta
en el DataWindow en tiempo de ejecucin y recuperar los datos y volver al modo de consulta de nuevo, ver
los registros en blanco en lugar de los criterios de consulta anterior. Sin embargo, con el PFC, puede mostrar
la consulta anterior.
/ / Objeto: w_product_master
/ / Evento: pfc_PostOpen
/ / Aada el siguiente cdigo.
dw_product.inv_QueryMode.of_SetResetCriteria (Falso)
Ahora, ejecutar la aplicacin y ver cmo funciona.

Pgina 40 de 65

Despus de entrar en la consulta en el modo de consulta, si el usuario cierra la ventana sin recuperar los
datos, PFC solicita al usuario guardar los cambios. Establecer ib_DisableCloseQuery en TRUE antes de activar
el modo de consulta en el modo ue_query. Ajuste el mismo en FALSE en caso ue_retrieve de
w_product_master antes de recuperar los datos.
PFC crea dinmicamente una sentencia SELECT para retrive los distintos valores de la columna de la
solicitada (actual). Si usted tiene una mesa grande y no desea permitir al usuario seleccionar los valores de
determinadas columnas, es posible que desee desactivar la opcin de "valores" en el men emergente del
DataWindow. Sabe usted dnde escribir el cdigo? Puede ser hecho rbuttonUp de dw_product. No, usted
debe escribir el cdigo al evento pfc_PreRmbMenu de dw_product, porque, PFC tiene cdigo para crear el
men emergente en caso rButtonUp del ancestro DataWindow y se dispara el evento pfc_PreRmbMenu antes
de que los pop-ups en el men. El cdigo siguiente hace lo mismo con la columna de la product_description
en dw_product DataWindow.
/ / Objeto: w_product_master :: dw_product
/ / Evento: pfc_PreRmbMenu
booleano lb_enable_or_disable
lb_enable_or_disable = NOT (this.GetColumnName () = &
"Product_description")
si this.object.datawindow.QueryMode = "yes", entonces
am_dw.m_table.m_values.enabled = lb_enable_or_disable
final si
La segunda lnea del cdigo anterior es una especie de misterioso. lb_enable_or_disable se establece en false
si la columna actual es product_description, de lo contrario, se establece en true. Debajo de eso, estamos
activacin o desactivacin de la opcin de men Valores si la ventana de datos est en modo de consulta. De
lo contrario, no hagas nada.
En el cdigo anterior, no estamos permitiendo al usuario seleccionar el valor en el men emergente. Sin
embargo, (s) se puede escribir en siendo el operador y el valor en el campo de edicin. Por ejemplo, (s) se
puede escribir "Escritorio" en el campo product_description. Qu pasa si, si no quiere permitir que cualquier
pregunta en esa columna? Bueno, PFC tiene una solucin para usted. El cdigo siguiente inhabilita
product_description de consulta.
/ / Objeto: w_product_master
/ / Evento: pfc_PostOpen
/ / Aada el siguiente cdigo.
int li_rc
Ls_cols cuerda []
ls_cols [1] = "product_no"
ls_cols [2] = "product_balance"
ls_cols [3] = "product_reorder_level"
ls_cols [4] = "product_measuring_unit"
li_rc = dw_product.inv_querymode.of_SetQueryCols (ls_cols)
Por defecto, todas las columnas estn activadas en el modo de consulta. Para deshabilitar algunas columnas
en el modo de consulta, es necesario llamar al mtodo of_SetQueryCols () del servicio de modo de consulta.
Este mtodo toma un argumento de matriz de cadena que contiene todos los nombres de las columnas
habilitadas consulta. Se puede ver que product_description nombre de la columna no se encuentra en el
cdigo anterior, lo que significa que est inhabilitado de consulta. En este caso, product_description se
desactiva incluso si se establece el orden de tabulacin en un valor distinto de cero en tiempo de diseo y no
protegido. Tan pronto como se recuperan los datos, es decir, establecer el DataWindow al modo normal, esa
columna se activa automticamente.
Como se ha explicado al principio de este tema, puede guardar los criterios de consulta y cargarlo cuando lo
necesite. El cdigo siguiente se supone que se ha creado 'Save Query "y las opciones de men" Load
consulta "en la opcin del men" Archivo "en el men m_sheet_menu. Si no, crearlos.
Anexe el cdigo siguiente al evento ue_query ya que queremos estas opciones habilitadas en el modo de
consulta solamente.
/ / Objeto: w_product_master
/ / Evento: ue_query
/ / Anexar este cdigo.
Pgina 41 de 65

m_sheet_menu lm_menu1
lm_menu1 = this.menuid
si isValid (lm_menu1), entonces
lm_menu1.m_file.m_savequery.enabled = TRUE
lm_menu1.m_file.m_loadquery.enabled = TRUE
final si
Los siguientes cdigos desactiva guardar y cargar las opciones de men de consulta.
/ / Objeto: w_product_master
/ / Evento: ue_retrieve
/ / Anexar este cdigo.
m_sheet_menu lm_menu1
lm_menu1 = this.menuid
si isValid (lm_menu1), entonces
lm_menu1.m_file.m_savequery.enabled = FALSO
lm_menu1.m_file.m_loadquery.enabled = FALSO
final si
Definir un ue_save_query evento de usuario en w_product_master y escribir el siguiente cdigo. Este cdigo
llama al mtodo of_Save () del servicio de modo de consulta que se encarga de preguntarle por el nombre
del archivo y guardar la consulta en el archivo.
/ / Objeto: w_product_master
/ / Evento: ue_save_query
Ls_path_name cadena, ls_doc_name
dw_product.inv_querymode.of_Save y
("Seleccionar un archivo para guardar esta consulta", y
ls_path_name, ls_doc_name)
El siguiente cdigo activa ue_save_query caso de la opcin de men "Guardar consulta '.
/ / Objeto: m_sheet_menu :: m_SaveQuery
/ / Evento: Seguido
of_sendMessage ('ue_save_query')
PFC guarda los criterios de consulta en formato separado por tabuladores, similar al llamado SaveAs () con el
texto! argumento.
Del mismo modo, definir otro evento ue_load_query usuario en w_product_master y escribir el siguiente
cdigo. Este cdigo llama al mtodo of_Load () del servicio de modo de consulta que se encarga de
preguntarle por el nombre del archivo y la carga de la consulta en el archivo.
/ / Objeto: w_product_master
/ / Evento: ue_load_query
Ls_path_name cadena, ls_doc_name
dw_product.inv_querymode.of_Load y
("Seleccione un archivo de consulta", ls_path_name, ls_doc_name)
Asegrese de que usted los activa ue_load_query caso de la opcin de men "Cargar consulta 'con el
siguiente cdigo.
/ / Objeto: m_sheet_menu :: m_LoadQuery
/ / Evento: Seguido
of_sendMessage ('ue_load_query')
PFC no soporta operador LIKE en la opcin de men emergente los operadores. Si desea proporcionar una
para el usuario, es necesario personalizar objeto n_cst_dwsrv_querymode.
Si alguna vez quiere saber si el modo de bsqueda se activa, llame a:
dw_product.inv_querymode.of_GetEnabled ()
Pgina 42 de 65

Usted no tiene que desactivar el servicio, ya PFC se encarga de esto en el evento Destructor del u_dw.
Despus de entrar en la consulta en el modo de consulta, si el usuario cierra la ventana sin recuperar los
datos, PFC pide guardar los cambios. Escribe ib_DisableCloseQuery = TRUE, antes de activar el modo de
consulta en el modo ue_query. Ponemos a false en caso de ue_retrieve w_product_master, antes de recuperar
los datos.

Servicio de Seleccin Fila


Al igual que cualquier otro servicio, es necesario activar el servicio antes de utilizar el servicio:
/ / Objeto: w_product_master
/ / Evento: pfc_PostOpen
dw_product.of_SetRowSelect (TRUE)
Este servicio cuenta con tres estilos de seleccin de fila, individuales, mltiples y extendidas. Cuando este
servicio est habilitado de forma predeterminada, PFC selecciona slo una fila en cualquier punto del tiempo,
que es el comportamiento por defecto, incluso si usted no utiliza este servicio. Paso 1 como parmetro
seleccionar la fila pulsada, hacer clic en la fila seleccionada volver a anular la seleccin de la fila
seleccionada. Si desea permitir al usuario seleccionar varias filas con la ayuda de las teclas Shift o Ctrl
(llamado como Extended Select), debe seleccionar el estilo 2.
/ / Objeto: w_product_master
/ / Evento: pfc_PostOpen
/ / Anexar este cdigo.
dw_product.inv_rowselect.of_SetStyle (2)
//O
/ / Dw_product.inv_rowselect.of_SetStyle (&
dw_product.inv_rowselect.EXTENDED)
/ / Que es ms fcil de leer que la primera.

Extienda Seleccione no admite la seleccin de varias filas utilizando el teclado solo. Tienes que llamar
of_SetKeyBoard ().
/ / Objeto: w_product_master
/ / Evento: pfc_PostOpen
/ / Anexar este cdigo.
dw_product.inv_rowselect.of_SetKeyboard (TRUE)
Este cdigo permite al usuario seleccionar varias filas con el teclado, por ejemplo, MAYS, CONTROL y
FLECHA. El usuario debe seleccionar primero una fila haciendo clic sobre ella y puede utilizar otras teclas
para la seleccin.

Pgina 43 de 65

A diferencia del explorador que le permite hacer clic en cualquier archivo / directorio con el botn derecho
del ratn sin necesidad de cambiar el directorio actual, PFC cambia automticamente la fila, es decir todas
las filas seleccionadas se han ido, sobre todo cuando se utiliza la seleccin extendida.
Si las necesidades de su aplicacin, puede agregar una opcin de men para permitir al usuario invertir la
seleccin como se muestra a continuacin:
dw_product.inv_RowSelect.of_InvertSelection ()

Service Manager Row


No hay que confundir el servicio Administrador de Fila con el servicio Administrador de seleccin de filas. Este
ltimo permite seleccionar filas de diferentes maneras en que el anterior le permite insertar / aadir / borrar /
restaurar las filas de un DataWindow. Tambin tiene la funcionalidad de eliminar las filas seleccionadas y
todas las filas de la dw. Con el fin de permitir al usuario eliminar varias filas a la vez, ya sea que usted
necesita para escribir la lgica o habilitar gerente seleccin de filas.
Llame a las siguientes funciones RowManager si necesitas llamarlos de algn lugar del cdigo.
of_DeleteAll () Elimina todas las filas de la DataWindow of_DeleteSelected () Borra las filas seleccionadas.
of_DeleteRow () Elimina la fila especificada. of_InsertRow () Inserta una fila antes de la fila especificada.
Pgina 44 de 65

of_Undelete () Permite restaurar una o ms filas eliminadas.


Cuando usted puede llamar InsertRow del DataWindow (), por qu llamar a of_InsertRow de RowManager ()?
Buena pregunta! Este ltimo se encarga de desplazarse a la fila y establecer el foco a la primera columna de
acuerdo con el orden de tabulacin.
Para utilizar este servicio, todo lo que necesita hacer es habilitar el servicio, como se muestra a continuacin.
Usted no tiene que escribir ningn otro cdigo.
/ / Objeto: w_product_master
/ / Evento: pfc_PostOpen
/ / Anexar al cdigo existente.
dw_product.of_SetRowManager (Verdadero)
dw_product.inv_RowManager.of_SetConfirmOnDelete (Verdadero)
De forma predeterminada, PFC elimina la fila en silencio cuando el usuario seleccione la opcin Eliminar del
men emergente. La ltima lnea del cdigo anterior solicita al usuario la confirmating la eliminacin. Tenga
en cuenta que, no se elimina de la base de datos hasta que se cierre la ventana o que haya programado para
guardar los cambios en el cambio de foco fila en el servicio gestor de enlaces.
Men emergente DataWindows 'ya insertar / eliminar / aadir / las opciones de restauracin. Las primeras
tres opciones de men se activan incluso si usted no utiliza el servicio RowManager. Al seleccionar Restaurar
opcin activar slo se elimina al menos una fila, PFC muestra un cuadro de dilogo en el que deber
seleccionar una o ms filas que desea restaurar. Sin embargo, no se restaurar a la misma posicin de la fila
de donde fue eliminado.

Al restaurar una fila eliminada, la fila se mueve de DataStore restauracin interna de PFC al DataWindow
original y el estado sera su estado antes de borrar. Restauracin de la fila en s no hace que el estado de fila
cambi, sin embargo, si el estado de fila se DataModified! entonces se har la DataWindow cambiado, es
decir, despus de recuperar los datos en el DataWindow, si elimina una fila y restaurar y cerrar la ventana,
no se le pedir a "Guardar cambios? '. Sin embargo, si cambia una fila antes de eliminarlo y restaurar y
cerrar la ventana, entonces se le pedir para guardar los cambios. Nuevo filas-New!-Y las nuevas filas con
datos NewModified!-No son elegibles para la restauracin.
Servicios de impresin
Si desea imprimir una sola DataWindow como es, usted no tiene que escribir ningn cdigo. PFC imprime
automticamente el DataWindow que est enfocado. Sin embargo, si est utilizando varios DataWindows
para mostrar los datos o el uso de DataWindow / DataStore para imprimir informes oculta, es necesario tener
cuidado de todo el cdigo. Servicio de impresin PFC da una funcionalidad mayor, es decir, imprimir slo las
filas seleccionadas. Esta funcin no est disponible en una aplicacin tpica de PowerBuilder. Para permitir al
usuario imprimir slo las filas seleccionadas, debe activar el servicio de seleccin de mltiples filas.
Si desea utilizar el servicio de vista previa de impresin, es necesario activar el servicio. Escriba lo siguiente
en el evento pfc_PostOpen de la ventana w_product_master:
Pgina 45 de 65

dw_product.of_SetPrintPreview (TRUE)
En tiempo de ejecucin, cuando el usuario selecciona Archivo> Vista preliminar en el men, PFC convierte el
DataWindow al modo de vista previa de impresin. Es necesario seleccionar Ver> Regla en el men, si desea
ver las reglas.

PFC tiene la funcionalidad para mostrar el DataWindow en el modo de zoom cuando el DataWindow se
encuentra en el modo de vista previa de impresin. Cuando se hace zoom al usuario la DataWindow, PFC
muestra el DataWindow en una ventana diferente, en lugar de hacer zoom en la misma ventana. Este
comportamiento es bueno cuando tienes mltiples DataWindows en pantalla y desea utilizar una
DataWindow para la impresin.
El objetivo del control EditMask en la ventana Zoom es aceptar el porcentaje de zoom personalizado del
usuario. A partir de este momento por escrito, debe seleccionar uno de esos porcentajes predefinidos
solamente. Si usted proporciona cualquier otro porcentaje de zoom, que no funciona.
Escriba el cdigo siguiente en el evento click del 'Print Preview zoom' en la opcin Archivo. Recuerda que
hemos definido la opcin de men "Vista preliminar Zoom". No se existe en el men PFC.
of_SendMessage ("pfc_zoom")
El servicio de clase trabaja en modo de vista previa de impresin tambin.
Encuentra El servicio no funciona en este modo, es decir, del cuadro de dilogo Buscar / Buscar y reemplazar
sigue apareciendo, pero no se desplaza a la primera fila que encuentra. Ya que no resalta la fila no se
desplaza a la fila, el usuario piensa que no encontr ninguna fila para los criterios de bsqueda. Por lo tanto,
es posible que desee desactivar 'Buscar' opcin de men cuando el DataWindow est en modo de vista
previa de impresin.
Desde 'Ver> Zoom' no funciona si el dw no est en el modo de vista previa de impresin, es posible que
desee deshabilitar de forma predeterminada y cambiar el modo de forma adecuada. Abra la m_sheet_menu y
desactivar opcin Zoom en la opcin View. Haga lo mismo para "Ruler".
Cuando el DataWindow se encuentra en el modo de vista previa de impresin, PFC no coloca una marca de
verificacin antes de la> opcin de men Vista preliminar del archivo. No crees que es una buena idea
colocar una as? Escriba lo siguiente en el evento pfc_printPreview en tu dw, es decir, el objeto de usuario
DataWindow que colocado en la ventana.
/ / Objeto: w_product_master.dw_product
/ / Evento: pfc_PrintPreview
m_sheet_menu lmenu1
lmenu1 = parent.menuID
si isValid (lmenu1), entonces
lmenu1.m_view.m_zoom.Enabled = AncestorReturnValue
lmenu1.m_view.m_ruler.Enabled = AncestorReturnValue
lmenu1.m_edit.m_find.Enabled = NO AncestorReturnValue
lmenu1.m_edit.m_replace.Enabled = NO AncestorReturnValue
lmenu1.m_file.m_printpreview.Checked = AncestorReturnValue
Pgina 46 de 65

final si
volver AncestorReturnValue
AncestorReturnValue es una variable especial introducida en v6.5. Esta variable est disponible en los
objetos descendientes slo cuando se extiende el evento. Si reemplaza el evento y trata de usar esta
variable, se obtiene un error de compilador. El tipo de AncestorReturnValue datos se ajusta automticamente
al tipo de valor de retorno del evento ancestro datos.
En este caso, AncestorReturnValue contiene TRUE cuando el DataWindow est en modo de vista previa de
impresin, de lo contrario su valor es FALSO.
Informe del Servicio de
Muchas de las funciones de este servicio ofrecen la opcin de ejecutar el DataWindow modificar la funcin o
devolver sintaxis Modificar para su uso como insumo para su propia funcin Modificar. Si el cdigo de ms de
dos funciones de servicio de informes consecutivos, considerara volver la sintaxis Modificar, concatenando
las cadenas, y la emisin de la funcin Modificar desde dentro de su propio cdigo.
Tiene una gran cantidad de funciones para crear objetos en el DataWindow, es decir, todas aquellas opciones
que estn disponibles en la opcin de men Insertar en el pintor DataWindow. Usted puede incluso crear un
DataWindow compuesto llamando of_CreateComposite ().
Para utilizar este servicio, el objeto DataWindow debe utilizar PBUS o pxeles como unidad DataWindow. No
funciona con DataWindows que utilizan milsimas de pulgada o milsimas de centmetro como unidad
DataWindow.
Tabla Multiple DataWindow Update Service
Como se explic anteriormente en la sesin DataWindows avanzada, es tedioso para actualizar varios
DataWindows mesa. Tienes que llamar Modificar () de un montn de veces con tildes, etc.
PFC hace fcil para usted. Slo tiene que llamar dos funciones sin tildes. El cdigo siguiente es para la
actualizacin de un DataWindow, que tiene product_master y mesas trans.
Cadena ls_table, ls_KeyCols [], [] ls_UpdatableCols dw_product.of_SetMultiTable (TRUE) / / Registro Actualice
Caractersticas de / / la tabla "product_master" ls_table = ls_KeyCols "product_master" [1] = "product_no"
ls_UpdatableCols [1] = "product_balance" este . inv_MultiTable.of_AddToUpdate (ls_table, y ls_KeyCols,
ls_UpdatableCols []) / / Se registra caractersticas de actualizacin de la tabla "trans" ls_table = ls_KeyCols
"trans" [1] = "ls_KeyCols tran_no" [2] = "tran_serial_no" ls_UpdatableCols [1] = ls_UpdatableCols "tran_date"
[2] = "tran_type" ls_UpdatableCols [3] = "tran_item_no" ls_UpdatableCols [4] = "tran_qty"
this.inv_MultiTable.of_AddToUpdate (ls_table, y ls_KeyCols, ls_UpdatableCols [])
En primer lugar, estamos haciendo posible que el servicio de actualizacin mltiple de mesa llamando a la
funcin of_SetMultiTable (). A continuacin, hacemos un llamado a la funcin of_AddToUpdate () con tres
parmetros. El primero es el nombre de la tabla, el segundo es un conjunto de columnas de clave para la
mesa y el tercero es un conjunto de columnas actualizables en esa mesa. Tienes que llamar a la
of_AddToUpdate () funcin una vez para cada tabla.
Si se llama a la funcin en el formato anterior, PFC utiliza "Borrar e insertar" y "slo los valores clave en la
clusula WHERE". Si desea utilizar valores diferentes, como "UpdateInPlace" y otras opciones (se pueden ver
las opciones disponibles en el pintor DataWindow, mediante la seleccin de filas> Actualizar en el men
Caractersticas) de la clusula WHERE, utilice el siguiente formato.
of_AddToUpdate (TableName, KeyCols [], UpdatableCols [], y
Key_Modification_Flag, WHERE_Cluase_option)
Recuerde, of_AddToUpdate () funcin est sobrecargado.
Servicio de Enlace

Pgina 47 de 65

A veces, usted puede venir a travs de una situacin en la que usted necesita para mostrar montones y
montones de informacin. Para empezar, se muestra la informacin de resumen de alto nivel, por ejemplo,
una lista de clientes. Cuando el usuario selecciona un cliente, mostrar todas las rdenes de venta para la
empresa seleccionada. Cuando el usuario selecciona una orden de venta, mostrar todos los elementos en el
orden de las ventas. Cuando el usuario selecciona un elemento de la orden de venta, mostrar el elemento
(producto) detalles y as sucesivamente.
Nos puede mostrar toda esta informacin en el propio comienzo, pero no va a ser eficiente. Siempre es mejor
para mostrar la informacin requerida por el usuario.
En situaciones como sta, por lo general se utilizan varios DataWindows. Hay dos mtodos de visualizacin
de los datos. Uno de ellos es, mostrar una ventana diferente para cada nivel. Otro estilo es, lo mostrar en la
misma ventana.
La siguiente imagen es de la aplicacin ExampPFC que viene con PFC. Cambiamos las fronteras DataWindow,
por lo que, se puede ver claramente cuatro DataWindows en la ventana.

En el ejemplo anterior, el DataWindow parte superior que muestra la informacin de resumen de alto nivel se
llama el DataWindow maestro. Todas las dems DataWindows son subordinados a la de arriba, es decir, el
tercero es un subordinado a la segunda y as sucesivamente. En situaciones como sta, por lo general, se
escribe cdigo para el evento clic / doble clic en el DataWindow y recuperar datos de las DataWindows
subordinados. PFC tambin hace lo mismo, sin embargo, le da opciones en la funcionalidad, con un mnimo
de cdigo.
Si desea utilizar el servicio de PFC vinculacin, lo primero que hay que hacer es activar el servicio de
vinculacin, para todos los DataWindows que se encuentra en la cadena de enlace con la siguiente sintaxis:
DataWindowControlName.of_SetLinkage (TRUE)
El siguiente paso es, para enlazar cada subordinado a la de su maestro inmediata. En el ejemplo anterior, es
necesario vincular el segundo con primero, tercero con el segundo, etc:
dw_SalesOrder.inv_Linkage.of_LinkTo (dw_cust)
dw_LineItems.inv_Linkage.of_LinkTo (dw_SalesOrder)
dw_Pictures.inv_Linkage.of_LinkTo (dw_LineItems)

Pgina 48 de 65

El siguiente paso es, para definir una relacin entre estos DataWindows. Por ejemplo, cust_id es la relacin
entre la primera y la segunda, sales_order_no es para el segundo y el tercero y as sucesivamente.
dw_Cust.inv_Linkage.of_SetArguments ("cust_id", "cust_id")
En el cdigo anterior, el primer argumento es la clave en el maestro DataWindow y el segundo en el
DataWindow subordinado. El ltimo paso consiste en definir el estilo. Puede configurar el estilo con la funcin
inv_Linkage.of_SetUseColLinks (). Hay tres estilos diferentes que estn disponibles.
En el primer estilo, los datos en el DataWindow subordinado se recuperan en funcin de los argumentos de
recuperacin. Por ejemplo, al seleccionar un cliente, PFC recupera automticamente los datos del
subordinado inmediato, slo para slo ese cliente. La ventaja de este mtodo es que se necesita menos
memoria. Desde entonces, slo los datos requeridos en el DataWindow subordinada se recuperan.
En el segundo estilo, PFC recupera los datos de todos los DataWindows, incluyendo todos los DataWindows
subordinadas. Tan pronto como se selecciona un registro en el maestro DataWindow, PFC se desplaza
automticamente el registro correspondiente en el DataWindow subordinado y lo convierte en el primer
registro en la pantalla DataWindow. Para los datos pequeos, este mtodo es bueno, porque, PFC no tiene
que recuperar todo el tiempo, slo tiene que desplazarse a la fila de la derecha.
En la tercera estilo, PFC recupera los datos similares a la segunda estilo. En este mtodo, en lugar de
desplazarse a la fila correcta en el DataWindow subordinado, en funcin del registro seleccionado en el
maestro DataWindow, PFC filtra los datos en el DataWindow subordinado y slo muestra que los datos.

Parmetro Descripcin
1

Utilice el mtodo de filtro

Utilice el mtodo de recuperacin

Utilice Desplcese hasta la fila


mtodo

Despus de actualizar los DataWindows enlazados, simplemente llamar al evento pfc_Save para el
DataWindow maestro. A veces, es posible que desee actualizar el fondo DataWindow ms subordinada
primera y actualizar el maestro de inmediato y as sucesivamente (inferior al Enfoque de arriba). Luego llame
a la funcin of_SetUpdateBottomUp (TRUE). Llame a la misma funcin con falsas como parmetro para
actualizar DataWindows de arriba a abajo. Esta ltima es la opcin por defecto.
En cualquier momento del tiempo, si se quiere desvincular las DataWindows, llame a la funcin of_UnLink ().
Un ltimo punto, la siguiente funcin establece el objeto de transaccin a todos los DataWindows que se
encuentran en la cadena.
MasterDataWindowName.inv_Linkage.of_SetTransObject (SQLCA)
Comprobacin de servicio 'columnas necesarias'
Como se explic en la sesin DataWindows avanzada, se puede establecer una columna como un "valor
necesario" columna. Esto significa que cuando una columna obtiene el foco, el usuario no puede ficha de la
columna si no introduce un valor en ella. Sin embargo, si el usuario no entr en esa columna en absoluto,
entonces, PowerBuilder no va a obligar al usuario para el valor. Una cosa buena es que, usted puede llamar a
la funcin FindRequired () para comprobar las columnas que requieren valor, pero no tienen ningn valor,
antes de guardar los cambios en la base de datos. Si desea utilizar el servicio de PFC en lugar de llamar a la
FindRequired (), como de costumbre, es necesario activar el servicio en primer lugar:
dw_product.of_SetReqColumn (TRUE)
Pgina 49 de 65

Para hacer el cheque real, llamar a la funcin siguiente.


dw_product.of_CheckRequired (Primary!, ll_row, ll_Col, y
ls_ColumnName, TRUE)
Parmetro Descripcin
No
Primero

El buffer de comprobar. Los valores vlidos son Primary! y filtro!

Segundo

El nmero de fila de la que debe comenzar la bsqueda. PowerBuilder almacena el primer


nmero de filas de error en este parmetro.

Tercero

El primer nmero de la columna de la que debe comenzar la bsqueda. PowerBuilder almacena


el primer nmero de la columna de error en este parmetro.

Cuarto

Despus de la bsqueda, PowerBuilder almacena el nombre de la columna error.

Quinto

Verdadero / Falso. Es cierto que los medios de bsqueda solamente las columnas que se han
cambiado o aadido. De lo contrario, PowerBuilder comprueba todas las filas y columnas.

Servicio calendario desplegable


El servicio de calendario desplegable le permite mostrar el calendario por cualquier columna de fecha en un
DataWindow o en un control EditMask en una ventana. Slo par de llamadas a funciones har el trabajo y por
lo general se le llama algunas funciones ms para que sea un poco de fantasa.

El siguiente cdigo permite este servicio para la columna tran_date en el DataWindow dw_tran_head en la
ventana w_transactions.
/ / Objeto: dw_tran_head en w_transactions
/ / Evento: Constructor
this.of_SetDropDownCalendar (TRUE)
this.iuo_calendar.of_Register ('tran_date', y
this.iuo_calendar.DDLB_WITHARROW)
Una vez que encienda el servicio para el DataWindow, tendr que registrar la columna que necesitan este
servicio. El nombre de la columna pasa a esta funcin es el nombre de la columna en el DataWindow, no el
nombre de la columna de base de datos en el DataWindow. Puede especificar uno de los tres estilos
diferentes para este servicio, es decir, DDLB, DDLB con la flecha y sin estilo.
/ / Display sbados y domingos en negrita.
iuo_calendar.of_SetSaturdayBold (TRUE)
iuo_calendar.of_SetSundayBold (TRUE)
iuo_calendar.of_SetSaturdayColor (RGB (255, 0, 0))
Pgina 50 de 65

iuo_calendar.of_SetSundayColor (RGB (255, 0, 0))


Puede mostrar las fechas de los das de semana de sbado y domingo en negrita y / o con un color diferente.
El cdigo anterior los muestra en negrita y en color rojo.
/ / Set vacaciones
ldt_holidays fecha []
ldt_holidays [1] = Fecha ('01-01-1996 )
ldt_holidays [2] = Fecha ('07-04-1996 )
ldt_holidays [3] = Fecha ('12-25-1996 )
iuo_calendar.of_SetHoliday (ldt_holidays)
iuo_calendar.of_setHolidayBold (TRUE)
Sbado y domingo no son das festivos en algunos pases. El viernes es un da de fiesta en pocos pases,
algunos pases tienen el domingo como un da de fiesta pero el sbado es un da de trabajo. En esos casos,
es posible que desee para mostrar los sbados y domingos en el color normal y establecido su pas y / o
festivos especficos de la empresa utilizando of_SetHoliday () y luego los muestra en un color diferente y
audaz si lo desea. Eso es exactamente el cdigo de seguridad que est haciendo. Una aplicacin en el mundo
real tpica recupera todas las fechas de vacaciones de una tabla en la base de datos y en lugar de codificar
como se muestra en el ejemplo anterior se pone.
/ / Establecer das especiales, por ejemplo de la empresa nmero 100 Ann.
Fecha ldt_special []
ldt_special [1] = Fecha ('11-29-1996 )
iuo_calendar.of_SetMarkedDay (ldt_special)
iuo_calendar.of_SetMarkedDayColor (RGB (0, 255, 0))
Puede marcar algunos otros das y los muestra con un color diferente y audaz si lo desea. Por ejemplo, la
empresa puede tener das de donacin de sangre, fechas de aniversario de la compaa y as sucesivamente.
Se establecen llamando a la funcin of_SetMarkedDay ().
/ / Que desaparece cuando el usuario haga doble clic en una fecha.
iuo_calendar.of_setCloseOnClick (FALSO)
iuo_calendar.of_setCloseOnDClick (TRUE)
El cdigo anterior dice que el servicio de calendario, cuando debera desaparecer de la pantalla, al hacer clic
con simple / doble? Doble click sera la mejor opcin. Cuando se habilita, asegrese de desactivar con un solo
clic, de lo contrario solo clic estara todava en vigor.
Servicio DropDown Calculadora
El servicio de calculadora desplegable le permite visualizar la calculadora para cualquier columna numrica
en un DataWindow o en un control EditMask en una ventana. Slo par de llamadas a funciones puede hacer
el trabajo y no tiene muchas funciones como el otro.

El siguiente cdigo permite este servicio para la columna product_balance en el dw_product_master


DataWindow en la ventana w_product_master.
/ / Objeto: dw_tran_head en w_transactions
/ / Evento: Constructor
this.of_SetDropDownCalculator (TRUE)
iuo_calculator.of_Register ('product_balance', y
Pgina 51 de 65

this.iuo_calculator.DDLB_WITHARROW)
iuo_calculator.of_setCloseOnClick (FALSO)
Cuenta con estilos similares similares al servicio de calendario desplegable. Este servicio muestra cada clic
en el campo social viven. Asegrese de hacer clic en el signo = antes de hacer clic en el otro campo, si usted
est haciendo los clculos, de lo contrario, dejar la ltima parte del clculo en el campo. Por ejemplo, si
hace clic en 850/32 y haga clic en el otro campo sin hacer clic en el signo =, el campo tendr 32, no el
resultado de 850/32.
Deje PFC Escriba su cdigo para usted
PFC tiene un maravilloso servicio DataWindow, 'DataWindow Propiedades del servicio "que es til en tiempo
de desarrollo. Todo lo que tienes que hacer es escribir una sola lnea de cdigo y ejecutar la aplicacin PFC
habilitado. En este ejemplo, colocamos un CommandButton en w_product_master y escribimos lo siguiente:
dw_product.of_SetProperty (TRUE)

Si muestra el men emergente para dw_product en tiempo de ejecucin, ver 'Propiedades DataWindow ...
"una opcin adicional. Haga clic en l para ver un cuadro de dilogo con las pginas con fichas. Usted
encontrar todos los servicios DataWindow que figuran en la pgina de servicios. Seleccione el servicio que
desea y la activa e ir a propiedades de ese servicio y especificar valores. En el ejemplo, seleccionamos el
servicio calculadora. Una vez que haya terminado, haga clic en la pestaa Sintaxis para ver el cdigo
completo. Puede cortar y pegar o guardarlo en un archivo. No es maravilloso?
Como todos los objetos, sus nombres y servicios estn normalizados en el PFC, espero terceros, vienen con
herramientas que pueden generar cdigo de PFC para usted. PowerBuilder tambin cuenta con funciones
integradas de clase meta como FindClassDefinition () (que se explica en 'OOP - Sesin de Implementacin
PB), etc En la parte superior de la misma, PFC tambin cuenta con servicio de clase meta que har las cosas
ms fciles para crear generador de cdigo de PFC herramientas.
Servicios Ventanas
PFC tiene una ventana en la capa de extensin para cada tipo de ventana. Por ejemplo, w_child, w_popup,
w_response, w_main y w_frame. Tiene una w_sheet ventana que tiene la funcionalidad de hoja. Para utilizar
estos servicios de ventanilla, debe heredar las ventanas de una de las ventanas mencionadas. Como ya
Pgina 52 de 65

sabes, hemos creado la ventana w_mdi_frame heredando los genes de la ventana w_frame. La siguiente
ilustracin muestra la ventana de jerarqua de herencia PFC.

La siguiente es una lista de los servicios de ventanilla:

Servicio Window Basic

Servicio de Gestin de Hoja

Servicio de barra de estado

Servicio de Preferencia

El siguiente es el diagrama de servicios jerarqua de herencia ventana.

Window Servicios Bsicos


Como se explica en los servicios de men, cada ventana PFC tiene un evento pfc_MessageRouter (), para
encaminar los mensajes desde el men para el objeto apropiado. Otro de los servicios bsicos es, procesar el
evento CloseQuery. Cuando el usuario cierra la ventana, PFC comprueba automticamente cualquier trabajo
no guardado y solicita al usuario y acta en consecuencia. En cualquier caso, si usted no quiere PFC se debe
solicitar el trabajo no guardado, puede deshabilitar el servicio estableciendo ib_disableclosequery en TRUE.
Muchos programadores de PowerBuilder podran haber llegado a travs de la situacin en la que se abre una
ventana en la parte superior / inferior del marco, pero quiere que se abra en el centro de la pantalla. PFC
resuelve este problema proporcionando servicio de centro de ventana.
this.inv_base.of_Center () / / Este script es para uno de los eventos ventana.
Pgina 53 de 65

Antes de utilizar el servicio de la ventana, es necesario activarlo:


this.of_SetBase (TRUE)
Servicio de Preferencias
Este servicio le permite guardar tamao de la ventana del usuario, posicin de la ventana, la configuracin
de la barra de herramientas y restaurarlos cuando sea necesario. Para utilizar este servicio, es necesario
activar el servicio:
this.of_SetPreference (TRUE)
/ / Escribimos en el evento Open Window.
Puede controlar la configuracin que desea guardar llamando a las siguientes funciones. Llame a slo
aquellas funciones cuyos ajustes correspondientes que desea guardar.

of_SetToolbarItemOrder ()

of_SetToolbarItemVisible ()

of_SetToolbars ()

of_SetToolbarTitles ()

of_SetWindow ()

of_SetToolbarItemSpace ()

PFC tiene el cdigo para guardar estas preferencias y para restaurarlos. Si desea salvarlos de algn otro
lugar, por cualquier motivo, es necesario llamar a la funcin of_Save () para guardar la configuracin.
this.inv_preference.of_Save y
(Gnv_app.of_GetUserINIFile (), "WindowSettings")
Para restaurar la configuracin, llame a la funcin of_Restore ().
Servicios de planos
Este servicio es til cuando usted est escribiendo una aplicacin MDI. Para utilizar este servicio, necesita
activar este servicio:
this.of_SetSheetManager (TRUE)
Caso pfc_PostOpen de MDI ventana es un buen candidato para este script. Las siguientes funciones estn
disponibles en este servicio:
Funcin

Descripcin

of_GetSheetCount

Devuelve un recuento de las hojas que estn abiertos.

of_GetSheets

Devuelve una lista de hojas.

of_GetSheetsByClass

Devuelve una lista de hojas de la clase dada.

of_GetSheetsByTitle

Devuelve una lista de las hojas con el ttulo dado.

Servicio de barra de estado


Mediante el uso de los servicios de PFC barra de estado, se puede visualizar la fecha y hora actual, memoria
total, la memoria libre (usuario y GDI). Usted puede pedir al PFC para actualizar todos los datos cada cierto
tiempo. Normalmente, se utiliza este servicio desde la ventana w_frame. Para utilizar el servicio de la barra
Pgina 54 de 65

de estado, primero debe activar el servicio, como se muestra a continuacin y escriba el siguiente cdigo, ya
sea en pfc_PostOpen o evento Open.
this.of_SetStatusBar (TRUE)
Ahora, preguntmonos PFC para mostrar la memoria total disponible.
This.inv_statusbar.of_SetMem (TRUE)
Si usted desea aumentar la pantalla de ancho de rea de memoria, llamar a la funcin of_SetMemWidth ().
This.inv_statusbar.of_SetMemWidth (400)
Por defecto, el valor de la memoria se muestra en la barra de estado con un fondo Negro. Cuando la memoria
est por debajo de un valor umbral (se puede ajustar el umbral con la funcin of_SetMemThreshold ().), La
memoria se muestra con un fondo de color rojo.
/ / Establecer el umbral de 1 Mg.
que This.inv_statusbar.of_SetMemThreshold (1048576)
El cdigo siguiente es para la memoria de usuario.
This.inv_statusbar.of_SetUserThreshold (-2)
This.inv_statusbar.of_SetUser (TRUE)
This.inv_statusbar.of_SetUserWidth (400)
El cdigo siguiente es para la GDI.
This.inv_statusbar.of_SetGDIThreshold (-2)
This.inv_statusbar.of_SetGDI (TRUE)
This.inv_statusbar.of_SetGDIWidth (400)
Tambin puede pedir PFC utilizar diferentes frontera para el servicio de visualizacin de estado.
This.inv_statusbar.of_SetBorderType (3)
El siguiente cdigo pide PFC para mostrar la fecha y hora en la barra de estado. Tambin establece el formato
de fecha y hora.
This.inv_statusbar.of_SetTimer (TRUE)
This.inv_statusbar.of_SetTimerFormat ("md-yyyy")
El cdigo siguiente establece el intervalo de actualizacin de 5 segundos.
This.inv_statusbar.of_SetTimerInterval (10)
Si ha diseado un objeto que se mostrar en la barra de estado, puede pedir PFC utilizar el objeto mediante
su registro, es decir, tiene que llamar a la funcin of_Register ().
Servicio Redimensionar ventana
El servicio de cambio de tamao la ventana cambia de tamao los objetos registrados en una ventana cada
vez que cambia el tamao de una ventana. Al igual que cualquier otro servicio, es necesario activar el
servicio de cambio de tamao de ventana de todas las ventanas que desee utilizar.
/ / Objeto: w_product_master
/ / Evento: pfc_PostOpen
this.of_SetResize (TRUE)
Pgina 55 de 65

Luego llame par de funciones para ajustar el tamao de la ventana original y el tamao mnimo de la
ventana.
Especificar el tamao de la ventana min utilizando of_SetMinSize () no impide que el usuario pueda cambiar
el tamao de la ventana ms pequea que el tamao especificado. PFC no cambia de tamao los objetos
registrados dentro de la ventana cuando el tamao de la ventana est por debajo del tamao min.
/ / Objeto: w_product_master
/ / Evento: pfc_PostOpen
this.inv_resize.of_SetOrigSize (this.width, this.height)
this.inv_resize.of_SetMinSize (this.width, this.height)
A continuacin, registrar cada objeto que desee cambiar de tamao. Lo siguiente registra dw_product.
/ / Objeto: w_product_master
/ / Evento: pfc_PostOpen
this.inv_resize.of_Register (dw_product, this.inv_resize.SCALE)
//O
this.inv_resize.of_Register (dw_product, 'Escala')
La siguiente es una lista de las opciones de cambio de tamao declarados en el objeto pfc_n_cst_resize. En
las llamadas a funciones, puede utilizar esas constantes o el valor de la constante, como se muestra en el
ejemplo anterior.
Constante de cadena FIXEDRIGHT = 'FixedToRight'
Constante de cadena FIXEDBOTTOM = 'FixedToBottom'
Constante de cadena FIXEDRIGHTBOTTOM = 'FixedToRight y bottom'
ESCALA constante de cadena = 'Escala'
Constante de cadena SCALERIGHT = 'ScaleToRight'
Constante de cadena SCALEBOTTOM = 'ScaleToBottom'
Constante de cadena SCALERIGHTBOTTOM = 'ScaleToRight y bottom'
Constante de cadena FIXEDRIGHT_SCALEBOTTOM = 'FixedToRight y ScaleToBottom'
Constante de cadena FIXEDBOTTOM_SCALERIGHT = 'FixedToBottom y ScaleToRight'
Recuerde que PFC utiliza el mtodo de porcentaje. Si originalmente pintado de la ventana con 10 PBU brecha
entre cada objeto y la distancia entre cada objeto puede ser mayor cuando la ventana est maximizada. Este
servicio no cambiar el tamao de los objetos que se encuentran con un DataWindow. Usted necesidad de
utilizar el servicio de cambio de tamao DataWindow para tal fin. Registro de objetos de usuario colocados en
una ventana no funciona si tiene un objeto de usuario en una ventana.
LUW (unidad lgica de trabajo) Servicio
LUW, unidad lgica de trabajo, mantiene la integridad de los datos. El mismo se llama como transacciones en
bases de datos relacionales. O bien se completa todo el trabajo en el mbito de la transaccin con xito o
deshace todo lo especificado en la transaccin. Esto se explica en detalle en "Operaciones - AutoCommit
'tema en la sesin' SQL dinmico Integradas e '.
PFC tiene n_cst_luw objeto clase personalizada que se ocupa la mayor parte de la funcionalidad LUW. Los
delegados objeto Window todo el trabajo relacionado con LUW a este servicio. Para entender esto, vamos a
empezar con w_master evento pfc_save.

Pgina 56 de 65

Pgina 57 de 65

En una aplicacin tpica no PFC la secuencia de la aplicacin de los cambios a la base de datos consiste en
llamar a Update () funcin en el control DataWindow / DataStore, comprobar si hay errores y llamar a
cualquiera COMMIT TRAN o ROLLBACK TRAN declaraciones en funcin del xito de la actualizacin. Qu
pasa si, si tiene varios DataWindows y algunos objetos de los usuarios a su vez tienen algunos DataWindows
y todos forman parte de la transaccin? Usted va a terminar mucho IF y ELSE IF y as sucesivamente.

El Archivo> Guardar men en m_master dispara evento pfc_save declar en la ventana w_master. Este
evento desencadena una gran cantidad de funciones / eventos. Primero dispara of_UpdateChecks () para
averiguar si hay algn objeto que necesita ser actualizado. Si los hay, entonces se activa el evento
pfc_UpdatePrep. Aqu es el lugar para que usted escriba el cdigo para preparar el DataWindow para la
actualizacin. En caso de w_product_master, usted no tiene que escribir ningn cdigo aqu, sin embargo, en
la ventana w_trans, usted necesita leer dw_tr_head y dw_tr_detail y poblar el almacn de datos. Tambin
debe evitar que estos dos DataWindow de actualizacin, ya que se est actualizando la base de datos a
travs de DataStore. Este tema se trata en un momento. Ms tarde se dispara pfc_PreUpdate () evento. En
caso de w_tran ejemplo, usted puede tambin mover el cdigo de pfc_UpdatePrep () para pfc_PreUpdate ().
Pgina 58 de 65

Ms tarde se dispara pfc_BeginTran () evento. Este es un evento de marcador de posicin y no tiene ningn
cdigo. Usted tiene que escribir cdigo en este evento. Llame a la funcin SQLCA.of_Begin (). De nuevo, esto
es tambin una funcin virtual y hay que ponerlo en prctica. Si la confirmacin automtica es FALSO,
entonces usted no necesita escribir nada aqu, pero si el AutoCommit se establece en TRUE, entonces usted
necesita para iniciar la transaccin llamando SQLCA.of_Execute ("BEGIN TRANSACTION").
Independientemente de la confirmacin automtica, tiene que escribir el cdigo en el evento pfc_EndTran.
Llame SQLCA.of_End () y aplicar esta funcin en el objeto de transaccin que fue heredado de n_tr.
Dependiendo del xito, puede llamar SQLCA.of_Commit () o SQLCA.of_RollBack () funciones. Ms tarde PFC
contina con los eventos pfc_PostUpdate ().
Cuando el usuario intenta cerrar la ventana haciendo clic en el icono de cerrar ventana o seleccionando>
Cerrar opcin de men Archivo, el PFC hace mucho ms comprobaciones para averiguar objetos
actualizables y los errores de validacin y, finalmente, llama evento PFC_Save. La lgica PFC_Close se
muestra en la primera imagen de este tema. En este proceso, PFC actualiza todos DataWindows que son
actualizables e ignora DataWindows / DataStores no actualizables. Si se toma el caso de w_tran, tenemos
que hacer bien ambas DataWindows no pueden actualizarse o bandera PFC a no actualizar esos
DataWindows llamando a la funcin of_SetUpdatable funcin u_dw (FALSO).
Adems de actualizar DataWindow / objetos DataStore, LUW tambin actualiza suos (Self objetos
actualizables). Los siguientes son Suos en PFC.

U_dw

U_lvs

U_tab

U_tvs

U_base

W_master

N_ds

Para que un objeto auto-actualizable, lo que necesita para poner en prctica las siguientes funciones.

Funcin

Propsito

of_AcceptText

Llama al evento pfc_AcceptText, que llama a funciones AcceptText segn corresponda

of_UpdatesPending

Llama al evento pfc_UpdatesPending, que determina si el objeto se ha actualizado

of_Validation

Llama al evento pfc_Validation, que valida los datos para el objeto

of_UpdatePrep

Llama al evento pfc_UpdatePrep, que prepara el objeto de la modificacin en su caso

of_Update

Llama al evento pfc_Update, que actualiza la base de datos

of_PostUpdate

Llama al evento pfc_PostUpdate, que realiza el procesamiento post-actualizacin,


segn proceda

Despus de la aplicacin de las funciones antes mencionadas, es necesario informar a PFC al respecto
llamando al:
this.of_SetUpdateable (TRUE)
Pgina 59 de 65

Si desea actualizar ciertos objetos en cierto orden con PFC Guardar proceso, es posible. Tienes que llamar
of_SetUpdateObjects w_master () con una serie de objetos como argumento. Por ejemplo:
/ / Lo siguiente hace SOLO uo_1 y uo_2 actualizable.
PowerObject lpo_objs []
lpo_objs [1] = uo_1
lpo_objs [2] = uo_2
this.of_SetUpdateObjects (lpo_objs)
/ / Lo siguiente hace que aade uo_1 y uo_2 actualizable.
PowerObject lpo_objs []
Integer li_count
lpo_objs = this.control
li_count = UpperBound (lpo_objs)
li_count + +
lpo_objs [li_count] = uo_1
lpo_objs [(li_count + 1)] = uo_2
this.of_SetUpdateObjects (lpo_objs)
Tambin puede hacer uso del servicio LUW para una actualizacin de una sola vez de un conjunto de objetos.
Por ejemplo, las siguientes actualizaciones uo_1 y uo_2 de inmediato y se aplica sin perturbar Ventana
objetos actualizables.
int li_rc
PowerObject lpoa_Save []
lpoa_Save = {uo_1, uo_2}
rc = lnv_LUW.of_Save (lpoa_save, SQLCA)
SI rc <= 0 THEN
Manipulacin / / Error
END IF
Otros Servicios
PFC viene con muchos servicios pequeos, y son muy tiles en la aplicacin.
Servicios DateTime
Este servicio le ofrece las funciones que no estn disponibles en PowerBuilder. Por ejemplo, encontrar el
ltimo da del mes, revisando el da de la semana / fin de semana, la conversin de fechas julianas, fecha
relativa, la comprobacin de ao bisiesto, y as sucesivamente. No hay mucho que explicar acerca de este
servicio, usted puede encontrar las funciones disponibles, navegando por el objeto de usuario
pfc_n_cst_datetime, ubicado en el pfcapsrv.pbl. Tenga en cuenta que, de la propiedad auto-instantiate se
enciende para este servicio.
Servicios numricos
PowerBuilder no admite las operaciones bit a bit como bit a bit AND, OR, XOR y xy. Este servicio implementa
operaciones bit a bit y la conversin de decimal a binario y viceversa. Usted puede navegar por las funciones
disponibles en el servicio pfc_n_cst_numerical, en la biblioteca pfcapsrv.pbl. Al igual que el servicio de fecha y
hora, este servicio est la propiedad "auto-instantiate" activada.
Servicios de cuerda
Servicio de cuerdas le da poder. Los servicios incluyen, comprobar si una cadena dada es en el caso inferior /
superior, si se trata de una cadena alfanumrica, contar las ocurrencias de un valor dado, la bsqueda de un
determinado valor en la cadena y su sustitucin por el mundo, aprovechando la primera letra, la eliminacin
de espacio en blanco, la conversin de cadena en una matriz y viceversa, y as sucesivamente. Usted puede
encontrar estos servicios en pfc_n_cst_string en la biblioteca pfcapsrv.pbl. Propiedad AutoInstantiate est
activada para este servicio.
Servicios de archivos
Este servicio hace que muchos archivos relacionados Windows SDK llama transparente para usted. PFC tiene
una pfc_n_cst_filesrv servicio en el directorio pfcapsrv.pbl. Este servicio tiene dos hijos, uno
Pgina 60 de 65

pfc_n_cst_filesrv16 para los Windows de 16 bits y otra pfc_n_cst_filesrv32 para los Windows de 32 bits.
Algunos de los servicios de archivos incluyen, la creacin de un directorio, borrar un directorio
recursivamente, listado de directorios, de archivos de lectura / escritura / renombrar, encontrar el directorio
actual, letra de la unidad actual, espacio en disco, enumerar / modificar los atributos de archivo, como la
creacin del archivo de fecha y hora , etc Para utilizar este servicio, primero saber el sistema operativo con la
funcin of_GetEnvironment () y crear una instancia del descendiente apropiado.
Servicios de plataforma
Al igual que los servicios de archivos, servicios de plataforma se definen para las versiones de 16 bits y 32
bits. Sin embargo, muy pocos servicios de Windows se definen, como obtener el ID de usuario, los recursos y
la bsqueda de la ventana especfica. Puede que tenga que definir algunas funciones ms frecuentemente
necesarios. El uso de este servicio es similar a los "servicios de archivos".

Servicio de anlisis de SQL


Este servicio n_cst_sql, permite ensamblar y analizar las sentencias SQL. Para el montaje de la sentencia de
SQL, llame of_Assemble () funcin. Esta funcin toma una matriz de tipo n_cst_SQLAttrib como parmetro,
por lo que, declare una variable de matriz del tipo n_cst_SQLAttrib y rellenarla con valores. Para analizar la
instruccin SQL en las tablas, columnas, WHERE, etc, llamar a la funcin of_Parse ().
Extender PFC
Una de las decisiones ms importantes en un proyecto de PFC consiste en la seleccin del mtodo de
extensin y se debe hacer en el primer proyecto basado en la PFC. Los mtodos de extensin deben ser
seleccionados con cuidado y las decisiones tomadas no se revierten fcilmente. Como es el caso con
cualquier biblioteca de clases, una de las primeras preguntas es: "Dnde coloco el cdigo?". Encontrar el
evento adecuado proporciona la mitad de la respuesta. Usted tiene que determinar si la lgica adicional
pertenece a la capa de extensin.
Hay tres opciones disponibles para nosotros.

Cambiar objetos de PFE directamente y utilizarlos

Inserte otra capa entre PFC y PFE

Aadir otra capa heredando de PFE

Estrategia # 1: Cambiar PFE Objetos


Pgina 61 de 65

La capa de extensin se pretende que nos permitir hacer cambios especficos de la aplicacin sin afectar a
los objetos de la clase base. No hay ningn cdigo en los objetos de la capa de extensin, que pretende ser
un marcador de posicin para cualquier lgica personalizada. Los objetos descendientes de PFC se heredan
de los de PFE. Si nos fijamos en la aplicacin Ejemplos PFC que viene con PowerBuilder, que acaba de
cambiar el nombre de las bibliotecas PFE con prefijo APP y poner su cdigo en esas bibliotecas.

Ventajas

Como se explic anteriormente, no necesita ninguna planificacin en la capa de aplicacin y es el


fuera de la solucin. Slo tienes que copiar cinco bibliotecas PFE en su directorio de aplicaciones y
comenzar a utilizarlas. Si lo desea, puede cambiar sus prefijos con los prefijos de aplicacin.

Desventajas

La aplicacin de PFC correcciones de errores es muy difcil y necesita ser hecho en la copia de cada
solicitud de bibliotecas PFE.
A menos que cambie los prefijos de la biblioteca como se ha descrito anteriormente, es difcil
mantener copias separadas en tiempo de ejecucin.

Es difcil crear objetos reutilizables para su uso en la corporacin.

Es una buena idea no combinar cdigo especfico de la aplicacin con cdigo genrico como el
cdigo de PFC.

Estrategia # 2: Aadir una capa debajo PFE


Este es tambin un mtodo directo. Puedes crear capa corporativa heredando objetos de PFE y usted no
tiene que molestar a los objetos de biblioteca PFE.

Ventajas

PFC y PFE bibliotecas y archivos DLL pueden ser compartidos entre las aplicaciones de la empresa,
ya que no va a cambiar en absoluto.
La aplicacin de PFC correcciones de errores es fcil, ya que no los cambie. Usted necesita
simplemente cambiar las PBL existentes por otras nuevas y generar PBD o DLL.

Desventajas

No es posible aadir otra capa marco continuacin PFE. Esto es porque, los objetos en el PFC se
refieren a PFE objetos y / o heredar de ellos. Un ejemplo podra ser cualquier servicio DW. Si crea
objetos de la capa empresarial heredando de PFE objetos de servicio DataWindow y agregar
funciones a ellos, no se puede acceder desde u_dw desde pfc_u_dw se refiere a los objetos
colocados en el PFE, no en los objetos de la capa empresarial.
Pgina 62 de 65

Estrategia # 3: Insertar una capa entre PFC y PFE


Los objetos en el nivel de ZFP estn en el nivel ms bajo de la extensin. Cuando PFC crea y crea una
instancia de un objeto su "tipo de datos es un objeto en el nivel PFE. Cuando se introducen los niveles de
extensin adicionales entre PFC y PFE los atributos y mtodos a objetos en estos niveles extensiones
insertados estarn disponibles para PFC. Por ejemplo, cuando el of_SetError () es llamada en una aplicacin
para activar el servicio de error se crea una variable de referencia de la instancia:
n_cst_error inv_error
inv_error = CREATE n_cst_error
Para ampliar los servicios de PFC existentes en la capa CORP:

Heredar objetos de servicio desde el nivel del PFC y ahorrar en el nivel CORP

Heredar objetos de servicio de nivel CORP y ahorrar en el nivel PFE

Regenerar la jerarqua de objetos.

Modificar objetos de servicio, agregar mtodos (variables de instancia, funciones, eventos, etc ...)

Si no hay servicios / variables que se aaden / modificado, entonces no hay razn para aadir una capa
adicional en la jerarqua de herencia.
Este es el mtodo ms flexible y potente para aadir una capa de marco corporativo. Es necesario poner la
capa corporativa entre PFC y PFE, es decir, los objetos de PFE heredan de objetos de la capa empresarial. Eso
significa, que usted puede utilizar PFE como capa de aplicacin o se puede aadir la capa de aplicacin
especfica a la ZFP.

Ventajas

Fcil de aplicar PFC actualizaciones / correcciones de errores.

Este mtodo consiste en herramientas de generacin de cdigo third-party/PFC amigable ya las


empresas se inserta antes PFE. La mayora de estas herramientas hacen uso de los nombres de PFE
para generar el cdigo. Por ejemplo, tomar el servicio de propiedad DataWindow de PFC.

Es ms flexible, puesto que la capa de ZFP est disponible para el cdigo de la aplicacin. Si pones
el cdigo de aplicacin de PFE, le quita la primera ventaja que aparece arriba.

Desventajas

Pgina 63 de 65

Presenta un nivel ms de herencia.

La estrategia recomendada
Estrategia # 3 es de la mejor arquitectura y proporciona un alto grado de flexibilidad toda la estrategia. Esta
estrategia se recomienda por las siguientes razones:
Estrategia # 2 no se recomienda debido al hecho de que los mtodos y atributos aadidos no estar
disponible para servicios de PFC existente.
Estrategia # 1, si bien es muy similar a la estrategia 3, no permite objetos significativos estndares de
nomenclatura en la aplicacin / nivel departamental sencilla ya que la aplicacin / nivel departamental es el
nivel PFE. Tambin se mezcla cdigo de marco con el cdigo especfico de la aplicacin que no es bueno. En
esta estrategia, el nivel de extensin sub-departamentales no se puede aadir entre el nivel de
departamento y PFE.
Estrategia # 3, mientras que es similar a la estrategia 1, proporciona la flexibilidad de tener nombres de
objetos significativos para cada departamento y es ms fcil de escalar y promover objetos de nivel
empresarial de varios niveles de aplicacin / departamental porque los objetos a nivel de aplicacin /
departamentales pueden tener sentido application / nombres departamento especfico. Permite la flexibilidad
de agregar niveles ya sea antes o sub departamentales, si es necesario.
Tres estrategias para la ampliacin de PFC a varios departamentos
En esta seccin se supone que un nivel de extensin corporativa ya se ha insertado entre PFC y PFE. Las tres
estrategias para sumar los niveles de extensin del departamento son:

Utilice PFE como el nivel de extensin Departamental

Introduzca el nivel de extensin departamental entre el nivel de la extensin Corporativo y PFE

Los pros y los contras son los mismos que los explicados en la seccin anterior.

Introduzca el nivel de extensin Departamental abajo PFE

Uso de la herramienta Extender PFC Insertar Corp capa entre PFC y PFE
Usted puede saber cmo tedioso y lento si es necesario insertar cada objeto en la capa CORP al insertar
CORP entre PFC y bibliotecas PFE. PowerBuilder incluye una herramienta 'PFC Extender ", que hace esta tarea
por usted en pocos minutos. En versiones anteriores, era una herramienta independiente, pero en la versin
7.0 que se presenta bajo etiqueta de la herramienta en la pgina Nuevo asistente. Si ya ha realizado algunos
cambios en el PFE, se puede elegir entre mover todos esos cambios a la capa CORP o retener en la capa PFE
s.

Pgina 64 de 65

Visualizacin> Nueva opcin de men y haga doble clic en archivo 'Extender PFC "bajo solapa Herramienta.
O seleccione su objeto de aplicacin o especificar PFC y PFE camino bibliotecas. Seleccione el prefijo para los
objetos de la capa CORP. Esta herramienta agrega automticamente un guin bajo al prefijo especificado, por
lo que no sufijo a destacar.
Puede seleccionar los objetos que desea colocar en la capa media de lo contrario todos los objetos se colocan
en la capa media y sern parte de la jerarqua de herencia. Si no va a aadir los atributos / funcionalidades
adicionales o modificar la funcionalidad existente, entonces no hay razn para colocar una capa adicional en
el medio, as que excluirlos. Si usted lo necesita ms adelante, siempre lo hace.
Dependiendo de la velocidad de la computadora que puede tomar un tiempo para generar todos los objetos.
Una vez completa, la nueva capa (capa intermedia) y la capa de ZFP se colocarn en un directorio diferente,
por lo general es NewExt directorio bajo el directorio de PFC. Tambin genera la nueva lista de bibliotecas y
lugares en el portapapeles y / o de un archivo.
Ejercicios
Con varios ejemplos de trabajo en cada tema, hemos demostrado que se puede crear ventana
w_product_master con PFC. Ahora, es su turno para crear el resto de las ventanas usando los servicios de PFC
y para terminar la aplicacin.
Crear el Sistema de Gestin de Producto con PFC.

Pgina 65 de 65

Вам также может понравиться