Script For each simple – sintaxis completa y tabla base

Anuncio
Script For each simple – sintaxis completa y tabla base
En suma, todos los atributos participan de igual modo en la determinación 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á
físicamente a la tabla base, o alguna otra tabla de la extendida:
Page
1
La única restricción se produce con la cláusula 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
El for each acepta más cláusulas opcionales.
Por ejemplo, existe otra manera de filtrar la información con la que se desea trabajar, y es a
través 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 parámetros recibidos, un conjunto de
condiciones y ordenamientos para la información de manera centralizada, de modo de no
tener que repetir las cláusulas order, where y defined by en cada lugar en que se necesiten.
Page
2
Al indicarle al for each que use {cláusula using} un Data Selector:
Video filmado con GeneXus X Evolution 2
le estaremos diciendo que agregue sus orders, condiciones y defined by, a los explícitos:
Page
3
Por eso, los atributos que figuren como parámetros, serán considerados para la determinación
de la tabla base del for each (así como los que se encuentren internamente en el
DataSelector).
Video filmado con GeneXus X Evolution 2
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 según el atributo mencionado se
encuentre en…
Page
4
…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
Aquí, el único atributo que participa de la determinación de la tabla base del for each es el del
where:
Page
5
Los que aparecieran como parámetros o los internos al Data Selector no participarán:
Video filmado con GeneXus X Evolution 2
Page
6
Otra cláusula 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 cláusula
Blocking, que permite especificar que la actualización o eliminación se realice en bloques de N
registros, reduciendo así los accesos a la base de datos.
Video filmado con GeneXus X Evolution 2
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…
Page
7
… 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
actualización no se realizará:
Video filmado con GeneXus X Evolution 2
Pero si queremos tomar alguna acción ante ese caso, programamos la cláusula when
duplicate…
Page
8
Los atributos que estén presentes en esta cláusula, tampoco participarán de la determinación
de la tabla base del for each:
Video filmado con GeneXus X Evolution 2
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 lógica 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,
Page
9
Por lo que haber aprendido esta lógica, significará haber aprendido buena parte del corazón de
GeneXus.
Video filmado con GeneXus X Evolution 2
Descargar