Para validar un Tabular form de APEX según si se quiere analizar sólo los seleccionados o todo el form:
El count del bucle
Podemos apreciar que cuenta el g_f01 a diferenciar del anterior que contaba el g_f02, esto se debe a que cuenta los marcados, o sea, que g_f01 son los checkbox.
Todos las demás secciones son iguales al ejemplo 1.
Este ejemplo ha sido extraido de la web de Denes Kubicek. http://apex.oracle.com/pls/otn/f?p=31517:41:4387440571164486::NO
1. Analizar de todo el form
Este ejemplo está pensado para ponerlo en una validación que devuelva una cadena de texto con el error.DECLARE
l_error VARCHAR2 (4000);
BEGIN
FOR i IN 1 .. apex_application.g_f02.COUNT
LOOP
IF NVL (apex_application.g_f07 (i), 0) > 2000
AND NVL (apex_application.g_f08 (i), 0) = 20
THEN
l_error :=
l_error
|| '</br>'
|| 'Row '
|| i
|| ': Commission can not be higher '
|| ' than 2000 for department '
|| apex_application.g_f08 (i)
|| ' Employee: '
|| apex_application.g_f03 (i)
|| ' Requested value: '
|| apex_application.g_f07 (i);
END IF;
END LOOP;
RETURN LTRIM (l_error, '</br>');
END;
l_error VARCHAR2 (4000);
BEGIN
FOR i IN 1 .. apex_application.g_f02.COUNT
LOOP
IF NVL (apex_application.g_f07 (i), 0) > 2000
AND NVL (apex_application.g_f08 (i), 0) = 20
THEN
l_error :=
l_error
|| '</br>'
|| 'Row '
|| i
|| ': Commission can not be higher '
|| ' than 2000 for department '
|| apex_application.g_f08 (i)
|| ' Employee: '
|| apex_application.g_f03 (i)
|| ' Requested value: '
|| apex_application.g_f07 (i);
END IF;
END LOOP;
RETURN LTRIM (l_error, '</br>');
END;
1.1 Analicemos el código.
Declaramos las variables necesarias:DECLARE
l_error VARCHAR2 (4000);
BEGIN
En este bucle nos fijamos en esto apex_application.g_f02.COUNT esto nos devuelve las filas que tiene el form. Es concreto nos cuenta las filas que tiene la segunda columna.l_error VARCHAR2 (4000);
BEGIN
FOR i IN 1 .. apex_application.g_f02.COUNT
LOOP
...
...
END LOOP;
En este condicional se comprueba, NVL (apex_application.g_f07 (i), 0) > 2000 que en la columna 7 para la fila i no tenga un valor superior de 2000 y NVL (apex_application.g_f08 (i), 0) = 20 que en la columna 8 para la fila i el valor sea 20. Si se cumplen esas condiciones se pasa a construir el mensaje de error o las acciones que requiramosLOOP
...
...
END LOOP;
IF NVL (apex_application.g_f07 (i), 0) > 2000
AND NVL (apex_application.g_f08 (i), 0) = 20
THEN
...
...
END IF;
AND NVL (apex_application.g_f08 (i), 0) = 20
THEN
...
...
END IF;
2. Analizar sólo los marcados
DECLARE
vRow BINARY_INTEGER;
BEGIN
:p38_text := NULL;
FOR i IN 1 .. apex_application.g_f01.COUNT
LOOP
vRow := apex_application.g_f01(i);
:p38_text :=
:p38_text
|| CHR (10)
|| vRow
|| '. '
|| apex_application.g_f02 (vRow)
|| ' / '
|| apex_application.g_f03 (vRow)
|| ' / '
|| apex_application.g_f04 (vRow)
|| ' / '
|| apex_application.g_f05 (vRow);
END LOOP;
IF :p38_text IS NOT NULL THEN
:p38_text := 'You have selected: '
||chr(10)||:p38_text;
END IF;
END;
vRow BINARY_INTEGER;
BEGIN
:p38_text := NULL;
FOR i IN 1 .. apex_application.g_f01.COUNT
LOOP
vRow := apex_application.g_f01(i);
:p38_text :=
:p38_text
|| CHR (10)
|| vRow
|| '. '
|| apex_application.g_f02 (vRow)
|| ' / '
|| apex_application.g_f03 (vRow)
|| ' / '
|| apex_application.g_f04 (vRow)
|| ' / '
|| apex_application.g_f05 (vRow);
END LOOP;
IF :p38_text IS NOT NULL THEN
:p38_text := 'You have selected: '
||chr(10)||:p38_text;
END IF;
END;
3. Diferencias entre los dos casos
Son varias pasamos a analizarlas a continuaciónEl count del bucle
...
FOR i IN 1 .. apex_application.g_f01.COUNT
...
FOR i IN 1 .. apex_application.g_f01.COUNT
...
Podemos apreciar que cuenta el g_f01 a diferenciar del anterior que contaba el g_f02, esto se debe a que cuenta los marcados, o sea, que g_f01 son los checkbox.
3.1 ¿Porqué vRow?
vRow := apex_application.g_f01(i);
Esto se debe a que la casilla marcada no está localizada, con vRow extraemos el id de la fila, por así decirlo, y a partir de ahí extraemos los datos usando vRow como id en los acceso a datos.Todos las demás secciones son iguales al ejemplo 1.
4. Nota importante
El campo de selector de fila, lo que se suele ver como un checkbox no se cuenta; pero sí se cuentan las columnas que están ocultas.Este ejemplo ha sido extraido de la web de Denes Kubicek. http://apex.oracle.com/pls/otn/f?p=31517:41:4387440571164486::NO
No hay comentarios:
Publicar un comentario