Página 1 de 1

Pregunta sobre clases y el método New()

Publicado: Sab Abr 28, 2012 6:25 pm
por Carlos Ortiz
Que conviene mas (llamar a METHOD New()) o bien al definir la DATA ( DATA oProfesionalentidad INIT Profesionalentidad():New() ) inicializarla con la clase que quiero.
En realidad estoy teniendo algunos problemas y quiero ver si viene por ahí­ el tema.
Gracias.
#include "Xailer.ch"
//---------------------------------------------------------- --------------------
CLASS Entidadesturno From TComponent
METHOD DevolverPorID( ID )
METHOD Actualizar()
METHOD Agregar()
METHOD Eliminar()
METHOD CargarTipo(identidadturno)
PROPERTY identidadturno INIT 0
PROPERTY idpersonajsucursal INIT 0
PROPERTY codigo INIT ""
PROPERTY descripcion INIT ""
PROPERTY idtipoentidad INIT 0

DATA oProfesionalentidad INIT Profesionalentidad():New()
METHOD New()

ENDCLASS
//---------------------------------------------------------- --------------------
METHOD New() CLASS Entidadesturno
::oProfesionalentidad := Profesionalentidad():New( Self )
RETURN Self
//---------------------------------------------------------- --------------------
METHOD DevolverPorID( ID ) CLASS Entidadesturno
local ret:=.F.
local hArray:=AppData:oSql:QH( "select idpersonajsucursal,codigo,descripcion from Entidadesturno where identidadturno="+str(ID) )
IF len(hArray)>0
::identidadturno := ID
::idpersonajsucursal := hArray['idpersonajsucursal']
::codigo := hArray['codigo']
::descripcion := hArray['descripcion']
::CargarTipo(::identidadturno)
ret := .t.
ELSE
::New()
::CargarTipo(::identidadturno)
AppData:oSql:cError:="El registro ya no existe en la base de datos."
ENDIF
RETURN ret
--

Pregunta sobre clases y el método New()

Publicado: Dom Abr 29, 2012 10:18 pm
por jfgimenez
Carlos,
como norma general, en la cláusula INIT de las propiedades sólo se
pueden utilizar constantes, esto es, números, cadenas, valores lógicos o
fechas. Pero nunca se debe llamar a funciones (y mucho menos instanciar
objetos) porque te va a dar problemas de todo tipo.
Hay ocasiones en las que se podrí­a hacer, pero a no ser que tengas muy
muy muy claro lo que ocurre por debajo, en las tripas del motor de
objetos, mejor que ni lo intentes.
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info

Pregunta sobre clases y el método New()

Publicado: Lun Abr 30, 2012 7:22 am
por Carlos Ortiz
Entendido y gracias!
Hacerlo en el New() serí­a correcto?, necesito instanciar otras clases.
#include "Xailer.ch"
//---------------------------------------------------------- --------------------
CLASS Entidadesturno From TComponent
METHOD DevolverPorID( ID )
METHOD Actualizar()
METHOD Agregar()
METHOD Eliminar()
METHOD CargarTipo(identidadturno)
PROPERTY identidadturno INIT 0
PROPERTY idpersonajsucursal INIT 0
PROPERTY codigo INIT ""
PROPERTY descripcion INIT ""
PROPERTY idtipoentidad INIT 0

DATA oProfesionalentidad INIT NIL
METHOD New()

ENDCLASS
//---------------------------------------------------------- --------------------
METHOD New() CLASS Entidadesturno
::oProfesionalentidad := Profesionalentidad():New( Self )
// CREO QUE TENDRí‰ QUE REPETIR ESTO AQUI ENTONCES PARA CUANDO
DEVOLVERPORID RETORNE FALSO?
::identidadturno := 0
::idpersonajsucursal := 0
::codigo := ''
::descripcion := ''
RETURN Self
//---------------------------------------------------------- --------------------
METHOD DevolverPorID( ID ) CLASS Entidadesturno
local ret:=.F.
local hArray:=AppData:oSql:QH( "select idpersonajsucursal,codigo,descripcion from Entidadesturno where identidadturno="+str(ID) )
IF len(hArray)>0
::identidadturno := ID
::idpersonajsucursal := hArray['idpersonajsucursal']
::codigo := hArray['codigo']
::descripcion := hArray['descripcion']
ret := .t.
ELSE
::New()
AppData:oSql:cError:="El registro ya no existe en la base de datos."
ENDIF
::CargarTipo(::identidadturno)
RETURN ret
--