23 de noviembre de 2015

Usando la Nueva clase Empty de VFP 8

Este es un Ejemplo de Como Aprovechar la Nueva Clase "Empty" que nos proporciona VFP8.

Esta Rutina, nos permite Leer Los Nombres de las variables que usaremos en Nuestro Programa, en una Tabla y su Respectivo Valor, para No Tener que recompilar el programa cada vez que tengamos que cambiar el valor de una variable.

En Lugar de Variables Publicas, podemos tener un Objeto Global, que contendra una propiedad por cada Registro que encuentre en la tabla, y su valor correspondiente.

La Ventaja es que el objeto solo contendra propiedades, ningun metodo o evento, por lo tanto sera mas que liviano. y pueden ser facilmente pasado como parametro a otras aplicaciones nuestras variables.

El Codigo Es Este:

Define Class oEntorno As Session
  Procedure LeerConf
  Lparameters cArchivo, cCampo, cValor
  If Type('cArchivo')<>'C' Or Type('cCampo')<>'C' Or Type('cValor')<>'C' Or ;
    Len(Alltrim(cArchivo))= 0 Or Len(Alltrim(cCampo))= 0 Or Len(Alltrim(cValor))= 0
    Wait Window 'Error del Programador!'
    Return .F.
  Endif
  Local uValor, cCad, nCiclo, oProp, cAlias
  Use In Select('Origen')
  Use (cArchivo) Alias Origen Again In 0 Shared
  cCad=',.*+/- =()[]{}<>^&%$#"!@)(¿?'+"'"
  Select Distinct (&cCampo) As cOpcion, (&cValor) As uValor From Origen Into Cursor CurProp Readwrite
  If Reccount('CurProp')>0
    Update CurProp Set cOpcion =Chrtran(Alltrim(CurProp.cOpcion), cCad, Replicate('_',Len(cCad)))
    oProp = Createobject("Empty")
    Select CurProp
    Scan
      AddProperty(oProp, Alltrim(CurProp.cOpcion),'')
      Do Case
      Case Alltrim(Upper(transform(curprop.uValor)))='.NULL'
        cCad = [Store .Null. to Oprop.]+Alltrim(CurProp.cOpcion)
      Case Type(Evaluate("curprop.uValor"))='L'
        cCad = [Store ]+ Upper(Transform(CurProp.uValor))+[ to Oprop.]+Alltrim(CurProp.cOpcion)
      Case Getwordcount(CurProp.uValor,'/-')=3 And Len(Alltrim(CurProp.uValor))=10
        cCad = [Store {^] +Alltrim(CurProp.uValor)+ [} to Oprop.]+Alltrim(CurProp.cOpcion)
      Case Type(Evaluate([curprop.uValor]))='N'
        cCad = [Store ]+ Upper(Transform(CurProp.uValor))+[ to Oprop.]+Alltrim(CurProp.cOpcion)
      Otherwise
        cCad = [Store "]+ Upper(Transform(CurProp.uValor))+[" to Oprop.]+Alltrim(CurProp.cOpcion)
      Endcase
      &cCad
    Endscan
  Endif
  Use In Select('CurProp')
  Use In Select('Origen')
  Return oProp
  Endproc
Enddefine

Los parametros que deben pasarse son:

  • La ruta al Archivo que leeremos
  • El Nombre del Campo que contendra los nombres de las propiedades
  • El Nombre del Campo que contendra los valores

Para Usarlo, suponiendo que Nuestra Tabla es: "C:\configuravariables.dbf" y la estructura es:

Id Numeric(2), Nombre char(16), Valor Char(200)

Hariamos

Set Library to oEntorno.prg  && donde oEntorno.prg es el nombre con que grabaron esta rutina
Local oEnt
Public oGlobal
oEnt = CreateObject("oEntorno")
oGlobal = oEnt.LeerConf("C:\configuravariables.dbf","Nombre","Valor")

y a partir de este momento, oGlobal ya tiene tantas propiedades como registros en la tabla.

NOTA: Ambos campos tienen que ser Caracter. La rutina intenta detectar el tipo de dato que es, para las variables de tipo Date, debe ir almacenada en el formato AAAA/MM/DD. Acepta registros con campo =Null para los valores.

Saludos desde Guatemala.

Jorge Mota

1 comentario :

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.