PiensoPienso IV
Sigue la serie PiensoPienso.
Tengo una tabla con los valores
Id* Descripcion
10 Diez
20 Veinte
30 Treinta
Hago un procedimiento GeneXus que hace
for each
where Id=20
call(PAgrego,Id)
Descripcion='Cambio el 20'
endfor
commit
donde pAgrego es
parm(Id);
New
Id=90
Descripcion='Noventa'
Endnew
commit
Las preguntas son:
1) Cual es el contenido de la tabla al terminar el procedimiento?
a)
10 Diez
20 Veinte
30 Treinta
90 Noventa
b)
10 Diez
20 Cambio el 20
30 Treinta
90 Noventa
c)
10 Diez
20 Veinte
30 Treinta
90 Cambio el 20
3) Si modifico el procedimiento alterando el orden del call con la asignación
for each
where Id=20
Descripcion='Cambio el 20'
call(PAgrego,Id)
endfor
commit
Cual es el contenido de la tabla al terminar el procedimiento?
a)
10 Diez
20 Veinte
30 Treinta
90 Noventa
b)
10 Diez
20 Cambio el 20
30 Treinta
90 Noventa
c)
10 Diez
20 Veinte
30 Treinta
90 Cambio el 20
En la primera, el a) no puede ser porque alguna tiene que quedar con "Cambio el 20"... La respuesta lógica sería la b), aunque no tendría gracia la pregunta.
ResponderBorrarEn la segunda, es lo mismo que la primera, porque de todas formas el update se hace en el endfor.
Marcos:
ResponderBorrarAl final no te la jugaste categoricamente por ninguna!!.
De cualquier forma, el jurado te da la prueba como superada. Te ganaste un artistico jarron.
Si, para ambas la respuesta es c).
O sea el procedimiento modifica el valor de ID y a pesar que lo leyo con Id=20, al hacer el New, pasa a tener un Id=90 y hace el UPDATE a un registro que no leyo.
No son errores faciles de detectar en el codigo, cuando el codigo es mas complejo, cosa que sucede en la vida real.
Las posibles soluciones son:
i) poner In y Out en la regla parm
ii) utilizar variables en los parametros que se puedan modificar y que dichas variables no intevengan en las condiciones del for each.
No conozco si existe alguna forma de detectar estas situaciones. Si lo hubiera, creo que se podrian explicar muchos misterios y corregirlos.
Enrique
Esta vez no me dejaste contestar!
ResponderBorrarSi estuvieramos en la version 1.0 de GX y reportaran esto, creo que seria catalogado como bug. Hoy no lo podemos arreglar porque no se cuantas cosas se 'rompen'.
Hola Enrique, te consteste al correo sobre el tema de un curso en Colombia.
ResponderBorrarun saludo
Jose Nadim Mendez