Como llamar a una funcion que se encuentra en un prg que no esta en el set procedure

4,530 views
Skip to first unread message

Germán Montini

unread,
Jun 7, 2013, 9:09:47 PM6/7/13
to Grupo Fox
Queria consultarles como puedo hacer para llamar a una funcion que se encuentra en otro prg que no esta dentro de set procedure
Para ser mas claro, de los formularios tengo una funcion validar en cada campo que lo tengo en el evento valid.
RETURN VALIDAR(THISFORM, "CLIENTE", THIS.VALUE)
 
 
La funcion validar esta en un prg codifica, que este prg esta en SET PROCEDURE TO
Y Esta funcion me llamaria a una funcion XVALIDAR que esta en el prg ABM_CLIENTE.PRG
Los parametros que tengo son THISFORM.NAME, que es ABM_CLIENTE, con el mismo nombre que el prg, Cliente que es el campo, y el valor del campo
 
FUNCTION Validar
PARAMETERS _Formulario, m.Campo, m.Valor
    PRIVATE m.Ok
    m.Ok = XVALIDAR(m.Campo, m.Valor)  && Pero no se como seria aqui porque se encuentra en ABM_CLIENTE.PRG
    && O SINO
    DO XVALIDAR WITH m.Campo, m.Valor IN (_Formulario.Name) && Pero no se como recibir el valor de XVALIDAR 
RETURN m.Ok
 
Muchas Gracias
 
Germán Montini
Analista de sistemas
S.M. de Tucumán

Ricardo Pina

unread,
Jun 7, 2013, 9:26:48 PM6/7/13
to Grupo VFP
Hola Germán
 
Por lo que dices la solución sería poner esa función en el procedure
también, puede adicionar ese prg con
SET PROCEDURE  ABM_CLIENTE.PRG ADDI
 
Saludos
 
 
 
--
            

                   Ricardo Pina

Desarrollo y Servicios Informáticos

                  Profesionales
               www.dsip.com.ar

 

 

Germán Montini

unread,
Jun 7, 2013, 9:56:38 PM6/7/13
to publice...@googlegroups.com
Creo que si, lo que pasa es que no queria llegar a eso, ya que queria un prg con cada uno de los forms y son aproximadamente 15 los forms, o sea que va a ser bien largo ese set procedure, sino las tendre que agrupar a todas las validaciones en un prg que sea de validaciones.
Saludos
 
Germán Montini
Analista de sistemas
S.M. de Tucumán

Ricardo Pina

unread,
Jun 7, 2013, 11:00:46 PM6/7/13
to Grupo VFP
Si tienes una validacion por cada formulario entonces no lo pongas como función sino como un método dentro de cada formulario.
 
El proposito de una función es la reutilizacion desde varios formularios, pero por lo que dices no es el caso.
 
Saludos

Fidel Charny

unread,
Jun 8, 2013, 10:24:33 AM6/8/13
to publice...@googlegroups.com
Aunque coincido con Ricardo Pina y no tengo claro tu propósito, para el caso que planteas te resultará más práctico utilizar una clase Custom en lugar de PRG. Pegas la Custom en el form (o en cada form que la necesite) y ya tienes todo a disposición.

Carlos Miguel FARIAS

unread,
Jun 8, 2013, 11:09:37 AM6/8/13
to Grupo Fox
Si una función es de uso genérico a varios puntos del programa (formularios, procesos, procedimientos, etc.), en vfp
tenemos (o tengo) tres formas de hacerlo.
a) En un modo estructurado, la función de uso común se agrega a la lista de funciones/procedimientos generales, eso se hace con un set procedure to ArchivoConFuncionUsoGeneral.prg, allí puedo colocar todas las de uso genérico, y funciona como una "extensión" de las funciones que dispone el lenguaje.
Esto es fácil de hacer, porque con que se declare en el main, ya queda disponible en todo el ámbito de la aplicación.
b) Otra solución, es decir como comentaban, agregar la función a una clase custom (no visible), en el único caso de que sería mas ventajoso que que a) sería si en esa clase, hay varias funciones que se usan en forma conjunta en mas de un formulario y además comparten datos entre si.

DEFINE CLASS miFunciones AS CUSTOM
   DIMENSION aListaDatos[2,2]
   cCadena = ""
   nNumero = 1.2
   iEntero = 5

   PROCEDURE INIT
      * Aca se cargan datos necesarios y comunes a todas las funciones/procedimientos en miFunciones
   ENDPROC

   PROCEDURE unaFuncion(lista parámetros requerida)
      * Parámetros así declarados son locales::LPARAMETERS
      * Funcion que hace algo con los parámetros y aprovecha datos de la clase
   ENDPROC

   PROCEDURE otraFuncion
      PARAMETERS lista parámetros requerida
      * Parámetros así declarados pueden ser afectados en llamados a otras funciones desde esta funciòn, puede ser útil si se responde a requerimientos, un problema de depuración si no se previno.
      * Funcion que hace algo con los parámetros y aprovecha datos de la clase
   ENDPROC

   PROCEDURE funcionNoHay2sin3
      LPARAMETERS lista parámetros requerida && Parámetros así declarados entiendo es la mejor y la única que puedo hacer desde los asistentes (el modo de la primera, solo es factible si la clase la declaro en un prg.
      * Funcion que hace algo con los parámetros y aprovecha datos de la clase
   ENDPROC

ENDDEFINE

c) La otra opción es crear una jerarquía de clases de formularios, donde incluyen esos métodos o funciones son parte de los métodos del formulario, y el código específico lo sobre escribo y/o re-aprovecho en los formularios específicos.

O sea, las alternativas son varias, cada cual verá cual le conviene o se adapta a su problema particular o a su modo de trabajar, es más, es muy probable que convenga usar combinaciones de estas técnicas.

Saludos: Miguel, La Pampa (RA)


Jose Mario

unread,
Jun 28, 2013, 12:27:25 PM6/28/13
to publice...@googlegroups.com
la segunda opcion se muestra inetresante
una pregunta
en main como le llamas tu
se tendria que definir
SET CLASSLIB TO miclase   ADDITIVE 
o es diferente
o si podes agregar un procedure simple
para observar como se llama el procedimiento
gracias
Reply all
Reply to author
Forward
0 new messages