En las siguientes partes de este tutorial de PowerBuilder Fundation Class veremos los pasos para configurar, ejecutar y crear una aplicación usando PFC.
Para poder seguir el tutorial y usar ejemplos prácticos, se desarrollara un pequeño sistema de ventas de artículos, el cual contara con mantenimiento de tablas maestras, cliente, artículos; Generación de comprobante de venta, Boleta o Factura y creación de reportes de ventas. Para ello haremos uso intensivo de los servicios que nos brinda PFC.
Primeros Pasos:
- Creamos nuestro Workspace y nuestro objeto Application.
- Para efectos del tutorial se creara el Workspace y el objeto Application con el nombre demoventas.
- Añadimos las librerías PFC a nuestro target:
PFCAPSRV.PBL
PFCDWSRV.PBL
PFCMAIN.PBL
PFCUTIL.PBL
PFCWNSRV.PBL
PFEAPSRV.PBL
PFEDWSRV.PBL
PFEMAIN.PBL
PFEUTIL.PBL
Objeto de usuario n_cst_appmanager
n_cst_appmanager es el gestor de la aplicación y funciona como sustituto del objeto Application. Este objeto contiene muchas funciones útiles así como referencia a variables para los servicios de aplicación.
n_cst_appmanager entre otras cosas nos permite conectarnos a la Base de Datos y definir los servicios que tendrá nuestra aplicación. Este objeto lo encontramos en la librería PFEAPSRV.PBL, la cual contiene los servicios de Aplicación.
![]() |
n_cst_appmanager |
La clase ancestro de n_cst_appmanager es pfc_ncst_app_manager, en la siguiente imagen se puede apreciar la jerarquía de herencia para la clase n_cst_appmanager.
Instanciando n_cst_appmanager
La mejor manera de hacer uso de la clase n_cst_appmanager es creando un objeto descendiente del mismo, en el cual se agregara el código para personalizar nuestra aplicación.
Para efectos del tutorial usaremos y modificaremos directamente la clase n_cst_appmanager, pero ¡cuidado!, no modificar la clase ancestro pfc_n_cst_appmanager.
- Definimos una variable global llamada gnv_app, que se lee Global No Visual Application, esta variable será del tipo n_cst_appmanager.
n_cst_appmanager gnv_app
- En el evento Open de nuestro objeto Application instanciamos la clase n_cst_appmanager e invocamos al evento pfc_Open.
gnv_app = CREATE n_cst_appmanager
gnv_app.Event pfc_Open(commandline)
- En nuestro objeto Application, en la pestaña General, abrimos la ventana de preferencias Additional Properties y modificamos el valor de SQLCA, por n_tr, y el de Message, por n_msg.
Configurando nuestra aplicación.
Ahora codificamos el objeto n_cst_ appmanager para que se ajuste a nuestro propósito, para ello haremos uso de las variables de instancia e inicializaremos algunos servicios.
- En el evento constructor de n_cst_appmanager agregamos el siguiente código.
- Creamos la ventana principal, el cual será heredado del objeto w_frame, que se encuentra en la librería PFEMAIN.PBL. A esta nueva ventana la llamaremos w_principal_ventas.
- Codificamos el evento pfc_open del objeto n_cst_appmanager. En este evento mostraremos una venta splash, y activaremos los servicios de registro de transacciones y de mensajes de error. Seguidamente abriremos la ventana principal de nuestra aplicación.
//Muestra el la ventana Splashof_Splash(1)
/*Este servicio es util cuando se utiliza más de un objeto de transaccion, al usar el servicio se consigue que al cerrar la aplicacion todos los objetos transaction se cierren ydestruyan*/of_SetTrRegistration(TRUE)
//Inicia el servicio de mensajes de error.of_SetError(TRUE)
//Abrimos la ventana principalOpen(w_principal_ventas)
- Al invocar la ventana w_principal_ventas, en el evento open invocaremos la función gnv_app.of_logondlg() , la cual mostrara la ventana de Login para ingresar el usuario y contraseña, para conectarnos a la Base de Datos.
En el evento open de la ventana w_principal_ventas ingresamos el siguiente código.
integer li_return
//Invocamos la ventana de Login para la validacion de Ingresoli_return= gnv_app.of_logondlg()
If li_return=1 ThenSetMicroHelp("Validación de Ingreso Correcta")Elsemessagebox(gnv_app.iapp_object.DisplayName,"Validación de Ingreso Incorrecta", StopSign!)Close(This)ReturnEnd If
El código invoca la ventana de Login para el ingreso de las credenciales de conexión, seguidamente al hacer clic en aceptar invoca al evento pfc_logon del objeto n_cst_appmanager.
- En el evento pfc_logon del objeto n_cst_appmanager ingresamos el siguiente código.
String ls_inifile
//Recupera el nombre del archivo INIls_inifile = gnv_app.of_GetAppIniFile()
//SQLCA.of_Init, inicia los valores registrados en el archivo INI, como el DBMS, SERVERNAME, DATABASE,If SQLCA.of_Init(ls_inifile, "Login") = -1 ThenThis.inv_error.of_message(gnv_app.iapp_object.DisplayName, + &"Error iniciando los valores de conexión, .INI no encontrado.")Return -1Else//Setea los datos del usuario y contraseña ingresadosSQLCA.of_setlogidandpassword(as_userid,as_password)If SQLCA.of_Connect() = -1 ThenThis.inv_error.of_message(gnv_app.iapp_object.DisplayName, + &"Error conectando a la Base Datos.", StopSign!, OK!)Return -1ElseReturn 1End IfEnd If
El código obtiene los datos de conexión del archivo INI, y seguidamente realiza la conexión usando las credenciales ingresadas en la ventana de Login.
/*El objeto ContextInformation, provee de informacion referente a la aplicacion que esta ejecutandose como Numero de Versión, Nombre de la Compania, Nombre del Ejecutable, etc.*/ ContextInformation lcx_Aplicacion int li_version_mayor,li_version_menor date ld_ahora ld_ahora = Today() /*Obtiene la version*/ GetContextService ( 'ContextInformation', lcx_Aplicacion ) lcx_Aplicacion.GetMajorVersion(li_version_mayor) lcx_Aplicacion.GetMinorVersion(li_version_menor) /*Establece el nombre de la aplicación*/ iapp_object.displayname = 'Demo Sistema Ventas - Tutorial PFC' /*Activa el servicio Microhelp*/ of_SetMicroHelp ( True ) /* Establece el nombre del archivo de ayuda. Poner esto solo si se dispone de la ayuda correspondiente.*/ of_SetHelpFile ( 'ayuda.hlp' ) /* Establece la versión de la aplicacion*/ of_SetVersion ( 'Version ' + String ( li_version_mayor ) + '.' + String ( li_version_menor ) + '.00' ) /* Establece el logo de la aplicacion*/ of_SetLogo ( 'DemoVentas.bmp' ) /* Establece el mensaje de copyright*/ of_SetCopyRight ( 'Copyright (c) 2011-' + String ( Year ( ld_ahora ), '0000' ) + ' Demo Sistema Ventas' ) /*Activa el servicio de preferencia de la aplicacion*/ of_SetAppPreference ( True ) If IsValid ( inv_apppref ) Then inv_apppref.of_SetRestoreApp ( False ) inv_apppref.of_SetRestoreUser ( True ) inv_apppref.of_SetUserKey ( of_GetUserKey ( ) ) End If /*Establece el nombre del archivo INI*/ of_SetAppIniFile('conexion.ini') |
Llegado a este punto, tenemos nuestra aplicación con su respectiva ventana Login y su ventana principal.
Como se puede observar las librerías PFC nos ahorran mucho trabajo de codificación para construir herramientas de calidad.
Si desea puede descargar las fuentes de la aplicación con lo avanzado hasta el presente tutorial.
10 comentarios:
Muy interesante el tutorial pero te comento que el archivo comprimido esta dañado, por favor te agradeceria si lo subieras nuevamente gracias.
Gracias por el dato, pero volveré a subirlo el lunes, porque las fuentes están en la maquina del trabajo :D.
Listo, ya colgue nuevamente el archivo.
Muy buen tutorial estoy empezando con las pfc y en verdad hay poca información al respecto sobre todo en nuestro idioma, seguire tus publicaciones.
Muy interesante... felicidades y sobre todo gracias por el tiempo dedicado... hay muy poca información sobre esto.
Gracias por la información. Además de que hay poca de este tema, la que hay es algo confusa.
gracias por la info soy nuevo en esto y de verdad no logro hacer la conexión cual es el usuario y la clave gracias!!
que tal, nose aquien acudir tengo un problema grande, quiero crear o conectar mi BD y me arroja un error, crEes que puedas ayudarme?
SQLTATE=08003
(MICROSOFT) (ADMINISTRADOR DE CONTROLADORES ODBC) CONEXION NO ABIERTA
Gracias man, ya llegué a este punto y bueno, aunque no hice nada más que copiar y pegar (ya después leeré..creo yo), ya me estoy acostumbrando un poco más al uso de estas librerías, quizás el sueño no me deje pensar muy bien, dejaré la parte 4 ya para mañana, y de nuevo gracias.
Parece que no hay cuarta parte del tutorial...T_T
Publicar un comentario