Pfc

Gustaría conocer más acerca de las pfc me puede colaborar. ¿Dónde consigo manuales para en conocimiento de las pfc?
Respuesta
1
Las PFC son funciones, objetos, ventanas, procesos, que otras personas desarrollaron para dar una solución rápida y especifica a una serie de necesidades, si recuerdas un poco en lo que era antes la programación procedural, la cual se basaba en procedimientos y funciones, y en algunos casos los programadores generaban una serie de funciones que se convertían en genéricos, los cuales podían ser reutilizados una y otra vez,
La idea es exactamente la misma, la creación de pfc's de los señores de power soft, es esto exactamente, una recopilación 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 instalación 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 ocasión alguien que trabajaba con pfc's me dijo que eran muy buenas y se podía 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 utilización de las famosas pfcs, hay que tener mucho cuidado puesto que están 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 todo, 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 generación de aplicaciones, por ejemplo, lo que se repite mucho son, mantenimientos, reportes, menús, mensajes, errores, búsquedas, 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 botón para la configuración 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 leído por esta utilidad, y así búsquedas, 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.
Experto muchas gracias, me quedan dudas acerca del ejemplo que describes en tu opinión, por favor puedes ser un poco más especifico y si te queda fácil me puedes dar un ejemplo por favor.
Jessie Cordoba mena
Claro que si, con mucho gusto:
Como expuse en la respuesta anterior, mi opinión personal es básicamente tener el control total o casi total de las aplicaciones que yo genero, por esta razón las lagunas que puedan provocar las librerías de terceros pueden impedir este control, y en algunos casos el descrontrol de tus propias aplicaciones.
Por esta razón, he decidido generar mis propias funciones, librerías, pantallas base, etc. utilizando de base la filosofía de la HERENCIA y el POLIMORFISMO, conceptos que no son muy difíciles de comprender, y una vez que los pones en practica estos permiten hacer cosas mucho más practicas que las que pueden ofrecer las librerías de terceros.
Un ejemplo concreto puede ser un mantenimiento, o ABC, (Altas, Bajas, Cambios), el cual afecte a una tabla especifica, esto surgió como necesidad de el numero de tablas que intervienen en una ampliación y que son necesarias para parametrizar dicha aplicación, es aquí donde empieza la repetición de código, pantallas, botones, etc., por esto llego a la conclusión 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 básicamente unos eventos los cuales son disparados en función 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 función de cancelar una operación 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 botón, este ejecuta una tarea relacionada con su actividad, por ejemplo, bulso el botón 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 envío la fila, que en este momento estoy insertando, puesto que la función 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 código, un status, etc. es aquí donde los inicializo utilizando simplemente la función SETITEM(), una vez que el botón es activado, este cambia su titulo de ALTAS a GRABAR, y el botón de SALIDA, cambia a CANCELAR, como ya te habrás imaginado, esto lo hago simplemente utilizando una función tipo protegida, en la misma forma, la cual dependiendo de las variables que me indican altas, o modificación, configuran los botones, de tal forma que cada vez que pulso uno de estos, envío el control a las funciones adicionales, luego al evento o eventos del usuario, y después al datawindow control,
entonces: si existe un botón para las altas exite una variable que es afectada y que tiene la misma finalidad, igualmente si existe un botón para los cambios, también hay una variable para este proceso, de esta forma se o conozco en que momento estoy, y la función que configura mis botones también,
claro, cuando pulso el botón de altas, cambia el valor de la variable, configura los botones, dispara el evento y da el control al datawindow,
el botón de altas cambia su titulo de ALTAS, a GRABAR, y el botón 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 acción, y así ejecutan un proceso u otro, en el caso del botón 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 acción de grabación 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 podría servir para adicionar un registro o modificar otro, se me ocurre afectar una tabla en la cual registre el próximo numero o código relacionado con la tabla que en este momento estoy utilizando, así pues si efectuara un error cualquiera que sea dicha tabla secundaria, esto lo podría reflejar en la variable abort, y suspender el proceso de grabación, si esto no es así, entonces regresa del evento del usuario, y luego ejecuta la función 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 función de configuración de botones, y por supuesto, devuelve el control al datawindow, claro que existen muchas más cosas entre proceso y proceso, pero eso puede ser generado por tus necesidades, imaginación, y aplicación.
Esto se lo aplicas a los demás 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 librería la cual puedes llamar, manto_lib, por ejemplo, se me ocurre por colocar todo lo relacionado con temas de mantenimiento, y esta pantalla peculiar, la utilizas siguiendo la filosofía de la herencia. Así 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 explicación básica, y una situación básica, la pantalla puede contener muchos más 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 más 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, asegurándote 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á automáticamente disponible en todos los demás mantenimientos, y que no tendrás que ir uno por uno modificando, o lo que es más 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 así vas conformando tus librerías genéricas, 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,

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas