In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Pregunta sobre clases y el método New()

Foro público de Xailer en español
Responder
Avatar de Usuario
Carlos Ortiz
Mensajes: 873
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

Pregunta sobre clases y el método New()

Mensaje 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
--
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Pregunta sobre clases y el método New()

Mensaje 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
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
Carlos Ortiz
Mensajes: 873
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

Pregunta sobre clases y el método New()

Mensaje 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
--
Responder