Power Builder - Obtener datos después de cambiarlos

 
Vista:

Obtener datos después de cambiarlos

Publicado por antonio (1271 intervenciones) el 28/04/2020 16:40:58
Un saludo a todos:

Resulta que tengo una rutina para saber en un datawindow que campos han sido modificados, después de realizar esto, en una tabla guardo el nombre del campo, usuario, fecha, etc, etc. como un registro de seguridad.

Ahora bien, necesito agregar a esa rutina el valor inicial y el nuevo valor. Pondré un ejemplo:

Cuando el usuario ingresa a modificar los datos se posesiona en un campo llamado cantidad, pero al ingresar a la ventana el valor es de 30, luego, el usuario lo cambia a un valor de 35.

Dentro de mi rutina debo obtener el valor de 30 y el valor de 35 para guardarlo en una tabla e indicar que el valor original era de 30 y el nuevo valor registrado es 35.

Esta es mi rutina que aplico:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
dwItemStatus dwIstatus
long nUpperBound,nNext
string sTag
 
// asColumnas es un Array{} con los nombres de los campos
// asDataWindow es el Datawindow que contiene los campos
// f_Registra_Modificaciones() Funcion que registra los cambios en la tabla
 
nUpperBound = UpperBound(asColumnas)
 
for nNext = 1 to nUpperBound
	dwIstatus = GetItemStatus(asDataWindow,1,asColumnas[nNext], Primary!)
		if dwIstatus = DataModified! then
			sTag = Describe(asDataWindow,asColumnas[nNext]+'.tag')
			if sTag <> '?' then f_Registra_Modificaciones(asModulo,sTag)
		end if
next

Espero haberme explicado y agradeciéndoles por su apoyo y comentarios y también espero les sirva la rutina a quien les interese...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Obtener datos después de cambiarlos

Publicado por Bunker (1 intervención) el 29/04/2020 03:54:44
hola Antonio-
Entiendo que recuperas la data mediante un retrieve,,,

Consultar el valor Anterior
Si recuperas un solo registro Puedes : en el evento retrieveend

1
2
3
String MiDatoAnterior
 
MiDatoAnterior  =  This.Object.midato [This.GetRow()]


Si Recuperas una dw grid por ej con varios Registro Puedes : Recuperar el valor en el evento Clicked de la dw.
con algo asi:

1
2
3
4
5
String MiDatoAnterior
 
If dwo.name = "midato" Then
   MiDatoAnterior  =  This.Object.midato [row]
End If

Consultar el valor Nuevo

Puedes hacerlo en el mismo momento que realizas el Update en el Mismo Boton
o en el evento UpdateEnd


Existen muchisimas formas de hacerlo . pero creo que con estas te sirven
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Obtener datos después de cambiarlos

Publicado por antonio (1271 intervenciones) el 29/04/2020 16:03:16
Hola Bunker:


Mil gracias por tu respuesta, pero esa solución que me indicas solo es para obtener el dato de un solo campo cuando se realiza el retrieveend(), sin embargo, mi función es cuando guardo los datos ejecuto mi función que verifica campo por campo, es decir, en el datawindow hay mas de un campo por lo que no puedo hacerlo de esa manera, ya que si en el datawindow agrego un campo,mi función recorre nuevamente ese datawindow e incluye al nuevo campo.

Si lo realizo como indicas, tendría que recuperar los datos en muchas variables y luego comparar con lo que recupero en mi función y determinar si es el mismo campo y luego guardarlo.


La idea es que todo sea dinámicamente.

De cualquier manera, te reitero mi agradecimiento y seguiré investigando, si encuentro la solución te la haré saber.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Leonardo Daniel A.
Val: 821
Oro
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Obtener datos después de cambiarlos

Publicado por Leonardo Daniel A. (479 intervenciones) el 29/04/2020 19:51:59
Pues las funciones GetItem pueden obtener los valores originales y modificados


1
2
3
4
5
GetItemString ( ll_row, li_column, Primary!, True)
 
// O esta
 
GetItemString ( ll_row, li_column, Primary!, False).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Obtener datos después de cambiarlos

Publicado por antonio (1271 intervenciones) el 29/04/2020 22:56:44
Gracias Leonardo...

Eso es lo que necesitaba...

Necesito completar mi funcion con lo siguiente:

Quiero saber que tipo de campo es en el datawondow y hacerlo dinamicamente, es decir, nececisto saber si un campo es de tipo numerico, o decimal o datetime o string, etc, etc y el valor colocarlos en una variable de tipo texto

¿Como puedo hacer dinamicamente determiarlo?

en cuanto tenga todo terminado y probado lo pondré en este foro para que los que requieran esa función

Gracias,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Leonardo Daniel A.
Val: 821
Oro
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Obtener datos después de cambiarlos

Publicado por Leonardo Daniel A. (479 intervenciones) el 29/04/2020 23:42:32
Hola, estoy en la comida y atendiendo Al baby de 2 años, de rato lo reviso... Pero si mal no recuerdo es con

1
2
3
String ls_coltype
 
ls_coltype  = dw_1.Describe("tu_columna.colType")
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar