Page 1 of 1
Propiedades del GET
Posted: Mon Nov 09, 2009 1:10 pm
by Pedro
Hola a todos
Veamos si me explico lo que quiero. Me gustaría saber como acceder a tres propiedades del objeto get, si las tiene.
La primera es la de saber si ha cambiado, es decir si se ha editado o no.
La segunda es, si se ha editado, que contiene el buffer de edición.
La tercera sería saber que contenía el get antes de ser editado.
Mirando la clase TGET he visto que hay un bChange / bChanged, y pensando que me podría valer para saber si el get se editó o no, lo he utilizado en una función, pero siempre me devuelve NIL, edite o no el GET.
Así mismo he visto un ::oGet:Buffer y un ::oGet:Original, pero no logro acceder ya que me da un error que no encuentra estos mensajes, no los encuentro como métodos, el modulo TGET.
¿Alguno sabría indicarme como acceder, en caso de que las haya, a estas propiedades?
Lo necesito para comparar el buffer original de un get, con el buffer editado, a fin de saber si debo cambiar o no otras variables del diálogo de edición, en función de si se cambió o no un get
Gracias a todos
Re: Propiedades del GET
Posted: Mon Nov 09, 2009 1:41 pm
by ADBLANCO
Cuando una propiedad de un objeto empiece por 'b'; te indica que es un bloque de código
Ahora bién dicho bloque sirve generalmente para modificar un comportamiento de la clase
Entonces cuando tu te refieres a bchange : es el bloque que efectuará cada vez que detecte un cambio en el contenido de Tget (inclusive cada nueva tecla pisada)
Code: Select all
REDEFINE GET oGetFilt ;
VAR cSeek ;
ID 201 OF oDlg ;
MESSAGE 'Escriba los datos para la búsqueda'
oGetFilt:bChange := { || FiltroSql( @oLbx , cSeek , @oQuery , eval(bSeek,cSeek)) ,;
eval(bRowCount) }
oGetFilt:bKeyDown := { | nKey | iif( nKey==VK_RETURN , oLbx:Setfocus() , NIL ) }
Otro ejemplo con más propiedades modificadas
Code: Select all
REDEFINE GET oRamo VAR cRamo ID 202 OF oDlg;
PICTURE "@!@K";
MESSAGE "Indique El Ramo, (F4 o Doble Click=>Lista)";
ON CHANGE val_val({||IIF(!EMPTY(cRamo),Verifica_cRamo(cRamo),.f.),oPlan:Refresh(),oPlan:Click(.t.)});
WHEN !lEdit
oRamo:bKeyDown := { |nKey|iif(nKey==VK_F4,eval(bRamo),;
(iif(nKey==VK_RETURN,(Verifica_cRamo(cRamo),oPlan:Refresh(),oPlan:Click(.t.)),)))}
oRamo:bLDblClick:= {|| eval(bRamo)}
oRamo:bGotFocus := {|| oButMod:Disable() ,;
oButActiva:Disable() ,;
oButInserta:Disable(),;
oButDupli:Disable() ,;
oButElim:Disable() ,;
oSay1:Hide() ,;
EVAL(bSay2) ,;
oButListar:Enable()}
Espero que esto te pueda dar algunas luces
Re: Propiedades del GET
Posted: Mon Nov 09, 2009 3:02 pm
by Pedro
Hola Angel
Gracias por la explicación, que me ha quedado claro por si en otra ocasión necesito usar de esto, pero no es lo que busco.
Como decía, necesito saber si el get se editó, es decir, en la validación que hago de él necesito saberlo, después necesitaría saber el valor original del get antes de su edición, el buffer lo puedo saber por oGet:Varget(), que contiene el valor después de la edición. Por ponerte un ejemplo, imagina un albarán que al hacerlo se le cambian algunos datos que vienen de la tabla de clientes, al modificar el albarán y validar el cliente, los datos se modifican y yo lo que quiero es saber si el cliente se editó, entonces modifico los datos, si el cliente no se editó dejo los datos que están ya grabados en el albarán, independientemente de si esos datos son los del cliente o modificados para ese albarán en concreto.Por eso quiero comparar el original con el buffer, por si el usuario digita de nuevo el mismo cliente, le cambio los datos por los originales del cliente, si digita otro, _ por los del nuevo cliente y si no edita el cliente dejo los que están.
Gracias de nuevo, Angel
Re: Propiedades del GET
Posted: Mon Nov 09, 2009 3:26 pm
by ermatica
Hola Pedro,
No sé si te sirve, pero una posibilidad es comparar el valor que tiene el GET, si usas una variable, con lo que hay en la base de datos antes de grabar.
Un cordial saludo
Ernesto
Re: Propiedades del GET
Posted: Mon Nov 09, 2009 4:13 pm
by Pedro
Hola Ernesto
No se trata de verificar cuando grabo, yo saco el registro a un array y lo manejo desde el array, lo que necesito es verificar si se editó el get, para al validarlo, si se ha editado, poner los valores del cliente en el array, pero si no se ha editado, dejar los valores como están. De ahí el saber si se ha editado, o no ese get.
Re: Propiedades del GET
Posted: Mon Nov 09, 2009 6:25 pm
by ADBLANCO
Bueno, y si utilizas una variable local lógica que le cambias el valor en el ON MODIFY del get
Algo Asi:
LOCAL oGet,;
cVariable,;
lChange:=.F.,;
bModif
bModif:={ || lChange:=.T. }
REDEFINE GET oGET VAR cVariable .......,;
ON CHANGE eval(bModif)
.
.
.
.
.
IF lChange
// Almaceno
ENDIF
No se, pudiera trabajar...
Re: Propiedades del GET
Posted: Mon Nov 09, 2009 10:44 pm
by FiveWiDi
Pedro wrote:Hola Ernesto
No se trata de verificar cuando grabo, yo saco el registro a un array y lo manejo desde el array, lo que necesito es verificar si se editó el get, para al validarlo, si se ha editado, poner los valores del cliente en el array, pero si no se ha editado, dejar los valores como están. De ahí el saber si se ha editado, o no ese get.
A ver si lo digo bien:
10,20 GET oMiGet VAR cMiGet When ( ValorDummy := oMiGet:oGet:Original, .T.) VALID ( IF(ValorDummy <> oMiGet:oGet:Buffer, Hagoloquequiero(), Nil),.T.)
Saludos
Carlos G.
Re: Propiedades del GET
Posted: Tue Nov 10, 2009 10:06 am
by Pedro
Hola Carlos
Gracias por la aportación, al menos ya no me da error de que no encuentra el método o el mensaje, pero no sé porque buffer y original me vienen a nil.
Hago la comprobación en una función, a donde envío el get, el changed del get me viene bien, F si no ha habido edición T si la ha habido, eso ya es un paso importante, pero no logro extraer ni el buffer ni el Original, haré unas cuantas pruebas más a ver si lo consigo
Re: Propiedades del GET
Posted: Tue Nov 10, 2009 3:50 pm
by FiveWiDi
Pedro wrote:Hola Carlos
Gracias por la aportación, al menos ya no me da error de que no encuentra el método o el mensaje, pero no sé porque buffer y original me vienen a nil.
Hago la comprobación en una función, a donde envío el get, el changed del get me viene bien, F si no ha habido edición T si la ha habido, eso ya es un paso importante, pero no logro extraer ni el buffer ni el Original, haré unas cuantas pruebas más a ver si lo consigo
Más pruebas:
10,20 GET oMiGet VAR cMiGet When ( ValorDummy := cMiGet, .T.) VALID ( oMiGet:Assign(),IF(ValorDummy <> cMiGet, Hagoloquequiero(), Nil),.T.)
o quizás:
10,20 GET oMiGet VAR cMiGet When ( ValorDummy := cMiGet, .T.) VALID ( Self:Assign(),IF(ValorDummy <> cMiGet, Hagoloquequiero(), Nil),.T.)
Suerte,
Carlos G.