Pfc

Experto:
Usuario:
Fecha: 26/07/2003
Valoración: (5,00 sobre 5) Categoría: Power Builder
16/05/2003
jessiejcm, usuario preguntando en Power Builder
Usuario
gustaria conocer mas acerca de las pfc me puede colaborar. donde consigo manuales para en conocimiento de las pfc?

GRACIAS

JESSIE CORDOBA MENA
16/05/2003
jessiejcm, experto respondiendo en Power Builder
Experto
las PFC son funciones, objetos, ventanas, procesos, que otras personas desarrollaron para dar una solucion rapida y especifica a una serie de necesidades, si recuerdas un poco en lo que era antes la programacion procedural, la cual se basaba en procedimientos y funciones, y en algunos casos los programadores generaban una serie de funciones que se convertian en genericos, los cuales podian ser reutilizados una y otra vez,

la idea es exactamente la misma, la creacion de pfc's de los señores de power soft, es esto exactamente, una recopilacion de programas o funciones, clases y objetos, que otros programadores alguna vez colaboraron para hacerlas publicas, y que el resto del grupo de programadores no nos encontremos en que tenemos que desarrollar lo que ya esta desarrollado, no se desarrolle.
una de las mejores formas de conocer las pfc's es por medio de un curso (pero claro esto es costoso), sin embargo no es una ciencia del otro mundo, existe una demo la cual esta incluida en el cd de instalacion de pb. y esto considero que es uno de los mejores manuales para poder ver como funcionan, en esta demo encontraras ejemplos, y lo que es mejor, los fuentes,

manuales en la red con respecto a esto pues no tengo mucha idea pero sin embargo creo y casi estoy seguro que puedes encontrar en www.sybase.com\support

PUNTO DE VISTA PERSONAL:
en alguna ocacion alguien que trabajaba con pfc's me dijo que eran muy buenas y se podia programar muy rapido, sin embargo, que cuando cambio de version de la 6.x a la 7.x estas dejaron de funcionar, y tuvieron que hacer un reemplado de las antiguas sobre las nuevas, esto dice mucho de la utilizacion de las famosas pfcs, hay que tener mucho cuidado puesto que estan basadas en comandos e instrucciones propias de pb, y cuando estas se vuelven obsoletas, pb, en algunos casos las bloquea y ya no deja utilizarlas.

por este motivo, personalmente me dedique a generar mis propios modelos de pfc's, claro esto lleva un tiempo adicional de desarrollo, pero te da la seguridad que toooodo, lo controlas tu, y cualquier cambio es posible, puesto que no solo tienes los fuentes, sino que tu forma de ver las cosas, tu forma de programar, etc.
esto de crear tus propias pfc's no creas que es complicado, simplemente tienes que aislar ciertas cosas que repites mucho, en la generacion de aplicaciones, por ejemplo, lo que se repite mucho son, mantenimientos, reportes, menus, mensajes, errores, busquedas, pues basado en esto yo genere una serie de objetos, clases funciones, pantallas, las cuales simplemente al heredarlas estas generan lo que necesito, por ejemplo, he generado una pantalla que me permite presentar un reporte, esta pantalla posee varios botones, uno para generar, otro para imprimir, otro graba, otro carga, y el de salida, ademas tiene unas barras a la izquierda y abajo que permiten hacer zoom visual y relocacion en la hoja para la impresora, acompañado a esto existe un boton para la configuracion de la impresora a elegir, con todo lo que te digo, para un reporte simplemente necesito integrar el datawindow object, y ya ta, el reporte funciona completo, ademas permite generar un fichero tipo excel el cual puede ser leido por esta utilidad, y asi busquedas, mantenimientos, errores, procesos, funciones. en fin
todo aquello que se repite,

FINALIZANDO:
la mejor forma de aprovechar estos recursos de pfc's propios o de pb, es por medio de la herencia, hasta la fecha no he encontrado otra forma de poder utilizarlas, no solo te da la comodiad de que generas un padre y a partir de este todos son iguales, sino que cualquier cambio en el padre, los hijos o heredados inmediatamente adquieren los cambios.

espero esto pueda servir para resolver tu problema
saludos
agdsys
16/05/2003
jessiejcm, usuario preguntando en Power Builder
Usuario
Experto muchas gracias, me quedan dudas acerca del ejemplo que describes en tu opinion, por favor puedes ser un poco mas especifico y si te queda facil me puedes dar un ejemplo por favor.

JESSIE CORDOBA MENA
19/05/2003
jessiejcm, experto respondiendo en Power Builder
Experto
claro que si, con mucho gusto:
como expuse en la respuesta anterior, mi opinion personal es basicamente tener el control total o casi total de las aplicaciones que yo genero, por esta razon las lagunas que puedan provocar las librerias de terceros pueden impedir este control, y en algunos casos el descrontrol de tus propias aplicaciones.
por esta razon, he decidido generar mis propias funciones, librerias, pantallas base, etc. utilizando de base la filosofia de la HERENCIA y el POLIMORFISMO, conceptos que no son muy dificiles de comprender, y una vez que los pones en practica estos permiten hacer cosas mucho mas practicas que las que pueden ofrecer las librerias de terceros.
un ejemplo concreto puede ser un mantenimiento, o ABC, (Altas, Bajas, Cambios), el cual afecte a una tabla especifica, esto surgio como necesidad de el numero de tablas que intervienen en una apliacion y que son necesarias para parametrizar dicha aplicacion, es aqui donde empieza la repeticion de codigo, pantallas, botones, etc., por esto llego a la conclusion que, (al igual que todo el mundo), un mantenimiento es simplemente ALTAS, BAJAS, CAMBIOS, y que esto se repite siempre, bueno pues entonces me dedique a generar una ventana en la cual existiera un control datawindow, 4 botones y basicamente unos eventos los cuales son disparados en funcion de una tarea.

EXPLICANDO:

el control datawindow permite integrar un datawindow object el cual diseño previamente, de los 4 botones uno esta determinado para hacer la funcion de cancelar una operacion o cerrar el mantenimiento, claro esto depende de que actividad este efectuando, de los 3 botones adicionales,

*- uno esta destinado para las altas
*- otro para cambios
*- y el otro para las eliminaciones o bajas

cuando pulso cualquier boton, este ejecuta una tarea relacionada con su actividad, por ejemplo, bulso el boton de altas, internamente en el evento click lo que hace es un INSERTROW(0) al datawindow control, de esta misma pantalla, le cambia el valor a una variable que me informa por el estado de las altas, la cual es de tipo boolean, y dispara un evento del usuario al cual llamo ue_init_values(<ROW>) como veras, en este evento envio la fila, que en este momento estoy insertando, puesto que la funcion insertrow(0) devuelve el numero de fila que insertó, en este evento ue_init_values(), puedo integrar instrucciones de valores iniciales, por ejemplo, si necesito colocar valores en campos que son o no visibles, como una fecha, un codigo, un status, etc. es aqui donde los inicializo utilizando simplemente la funcion SETITEM(), una vez que el boton es activado, este cambia su titulo de ALTAS a GRABAR, y el boton de SALIDA, cambia a CANCELAR, como ya te habras imaginado, esto lo hago simplemente utilizando una funcion tipo protegida, en la misma forma, la cual dependiendo de las variables que me indican altas, o modificacion, configuran los botones, de tal forma que cada vez que pulso uno de estos, envio el control a las funciones adicionales, luego al evento o eventos del usuario, y despues al datawindow control,
entonces: si existe un boton para las altas exite una variable que es afectada y que tiene la misma finalidad, igualmente si existe un boton para los cambios, tambien hay una variable para este proceso, de esta forma se o conozco en que momento estoy, y la funcion que configura mis botones tambien,
claro, cuando pulso el boton de altas, cambia el valor de la variable, configura los botones, dispara el evento y da el control al datawindow,
el boton de altas cambia su titulo de ALTAS, a GRABAR, y el boton de SALIDA cambia a CANCELAR, por supuesto que cada uno de estos en su evento CLICK pregunta por el valor de las variables relacionadas con la accion, y asi ejecutan un proceso u otro, en el caso del boton ALTAS-GRABAR, cuando se encuenta en GRABAR, y se pulsa, este dispara un evento del usuario que llamo ue_before_save(<row>, <abort>), el cual recibe el numero de la fila que estoy afectando, y utiliza una variable tipo boolean, y como referencia, de tal forma que si cambie el valor de la variable abort, el cual en principio es FALSE, detengo la accion de grabacion y espero hasta que el usuario reclame de nuevo el proceso o lo cancele, este evento me permite adicionar una tarea, la cual por ejemplo podria servir para adicionar un registro o modificar otro, se me ocurre afectar una tabla en la cual registre el proximo numero o codigo relacionado con la tabla que en este momento estoy utilizando, asi pues si efectuara un error cualquiera que sea dicha tabla secundaria, esto lo podria reflejar en la variable abort, y suspender el proceso de grabacion, si esto no es asi, entonces regresa del evento del usuario, y luego ejecuta la funcion UPDATE() del datawindow, la cual actualiza la tabla, y las variables relacionadas con los buffers del datawindow, cambia el valor a la variable que controla las altas, y ejecuta la funcion de configuracion de botones, y por supuesto, devuelve el control al datawindow, claro que existen muchas mas cosas entre proceso y proceso, pero eso puede ser generado por tus necesidades, imaginacion, y aplicacion.
esto se lo aplicas a los demas botones, y el resultado es sorprendente.

una vez que ya tienes montada la pantalla y estas segura que funciona bien, pues la integras dentro de una libreria la cual puedes llamar, manto_lib, por ejmplo, se me ocurre por colocar todo lo relacionado con temas de mantenimiento, y esta pantalla peculiar, la utilizas siguiendo la filosofia de la herencia. asi pues cuando necesites darle mantenimiento a una tabla, simplemente generas el datawindow, y creas una pantalla basada en la herencia de la ventana que acabamos de crear, y el resultado puede darte muchas satisfacciones, claro, como te digo esto es una explicacion basica, y una situacion basica, la pantalla puede contener muchos mas proceso, funciones e incluso, eventos del usuario los cuales se disparan, en momentos clave, como cuando modificas, borrar, o si se da el caso añadir mas botones, que por ejemplo den la posibilidad de buscar, imprimir, etc. y cada uno dispare sus propios eventos de usuario, de tal manera que cuando sea heredado, los eventos sean utilizados para colocar esas cosas que son diferentes entre si, pero siempre utilizaras una pantalla, asegurandote que esta funciona, que es eficiente, y que solo una vez la vas a escribir, y que cuando necesites hacer un cambio, en ella, este estará automaticamente disponible en toooodos los demas mantenimientos, y que no tendras que ir uno por uno modificando, o lo que es mas complicado, que se te pase por alto, alguno y empiezan los tediosos errores, en fin,
esto mismo lo puede aplicar a una pantalla para generar un reporte, para hacer una busqueada, para controlar un mensaje de error, para una pantalla inicial, en fin para todo, y asi vas conformando tus librerias genericas, con funciones, clases, pantallas, etc. y por supuesto, herendando o haciendo instancias de las clases, y programando con una eficiencia y velocidad superior a la de lo normal,

espero que esto pueda servir para resolver tu problema
saludos
agdsys
26/07/2003
jessiejcm, usuario preguntando en Power Builder
Usuario
Excelente. Una fantástica solución.
Enlaces patrocinados