Está en la página 1de 9

Script For each simple sintaxis completa y tabla base

En suma, todos los atributos participan de igual modo en la determinacin de la tabla base salvo los del when none, si hubiera:

Por lo que cada atributo presente en el for each (y no en el when none) pertenecer fsicamente a la tabla base, o alguna otra tabla de la extendida:

La nica restriccin se produce con la clusula Defined by. All no podr suceder que, perteneciendo a la tabla extendida, ninguno de los atributos pertenezca a la tabla base:

Video filmado con GeneXus X Evolution 2

Page

El for each acepta ms clusulas opcionales. Por ejemplo, existe otra manera de filtrar la informacin con la que se desea trabajar, y es a travs del uso de Data Selectors. Este tema se ver en otro video, pero aqu podemos decir que un Data Selector especifica, en base a los parmetros recibidos, un conjunto de condiciones y ordenamientos para la informacin de manera centralizada, de modo de no tener que repetir las clusulas order, where y defined by en cada lugar en que se necesiten.

Al indicarle al for each que use {clusula using} un Data Selector:

Video filmado con GeneXus X Evolution 2

Page

le estaremos diciendo que agregue sus orders, condiciones y defined by, a los explcitos:

Por eso, los atributos que figuren como parmetros, sern considerados para la determinacin de la tabla base del for each (as como los que se encuentren internamente en el DataSelector).

Video filmado con GeneXus X Evolution 2

Page

La otra posibilidad, es filtrar de acuerdo a los valores devueltos por un Data Selector. Aqu le estamos diciendo que filtre los registros del for each segn el atributo mencionado se encuentre en

el conjunto de valores devueltos al ejecutar el Data Selector como si fuera una consulta a la base de datos:

Video filmado con GeneXus X Evolution 2

Page

Aqu, el nico atributo que participa de la determinacin de la tabla base del for each es el del where:

Los que aparecieran como parmetros o los internos al Data Selector no participarn:

Video filmado con GeneXus X Evolution 2

Page

Otra clusula opcional que se agrega cuando el comando for each se est ejecutando dentro de un procedimiento, para actualizar o eliminar registros de la base de datos, es la clusula Blocking, que permite especificar que la actualizacin o eliminacin se realice en bloques de N registros, reduciendo as los accesos a la base de datos.

Video filmado con GeneXus X Evolution 2

Page

Cuando el for each se encuentra dentro de un procedimiento, y se est queriendo actualizar el valor de un atributo que no puede tener valores repetidos, por ejemplo supongamos que AttractionName tiene definido un ndice Unique:

y se est ejecutando el for each sobre el registro 1 al intentar cambiarle el valor a AttracionName de ese registro, para que asuma el valor Eiffel Tower el ndice Unique indicar que ya existe un registro con ese valor y la actualizacin no se realizar: Page Video filmado con GeneXus X Evolution 2

Pero si queremos tomar alguna accin ante ese caso, programamos la clusula when duplicate Los atributos que estn presentes en esta clusula, tampoco participarn de la determinacin de la tabla base del for each:

Video filmado con GeneXus X Evolution 2

Page

El for each puede utilizarse tanto en procedimientos, como en eventos de otros objetos, en los que est permitido consultar la base de datos:

La misma lgica del for each se encuentra en otras formas de consulta de la base de datos, como: Los grupos de Data Providers y los grids con tabla base, Por lo que haber aprendido esta lgica, significar haber aprendido buena parte del corazn de GeneXus.

Video filmado con GeneXus X Evolution 2

Page