Гость
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Валидация... / 6 сообщений из 6, страница 1 из 1
23.08.2009, 20:47
    #36158944
kasik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Валидация...
Есть репорт:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
select 
apex_item.hidden( 16 , a.KOD_JRN_VID)||
apex_ITEM.checkbox( 11 ,a.KOD_JRN_VID,null)||
apex_item.hidden( 12 , 
wwv_flow_item.md5 (a.DATE_POLU4, 
a.DATE_VOZV, 
a.KOD_RAB)
) "f0",
DECODE(a.DATE_POLU4, NULL, 
apex_item.date_popup( 13 , rownum, a.DATE_POLU4, 'DD-MM-YYYY'), 
apex_item.display_and_save( 13 , a.DATE_POLU4) 
) DATE_POLU4,
DECODE(a.DATE_VOZV, NULL, 
apex_item.date_popup( 14 , rownum, a.DATE_VOZV, 'DD-MM-YYYY'), 
apex_item.display_and_save( 14 , a.DATE_VOZV) 
) DATE_VOZV,
DECODE(a.KOD_RAB, NULL, 
apex_item.select_list_from_query( 15 , NULL,
'select FIO display_value, 
FIO return_value 
from "Rabotnik"', 
NULL, 'YES', NULL, '-Выберите сотрудника-', NULL, NULL, NULL), 
apex_item.display_and_save( 15 , b.FIO) 
) "f2"
from JURNAL_VIDA4A a, 
"Rabotnik" b
where a.KOD_DOC_ = :P30_KOD_GTD
AND a.KOD_RAB = b.KOD_RAB(+)

Код: plaintext
1.
2.
wwv_flow_item.md5 (a.DATE_POLU4, 
a.DATE_VOZV, 
a.KOD_RAB)
вставлено для того что бы отследить изменение хотя бы одного поля из связки.

Делаю валидацию:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
DECLARE
CNT NUMBER;
ERR NUMBER;
CURSOR VID4A_CUR IS
SELECT * FROM JURNAL_VIDA4A WHERE KOD_DOC_=:P30_KOD_GTD;
BEGIN
IF :REQUEST IN ('DEL', 'ADD') THEN
RETURN TRUE; 
END IF;
ERR :=  0 ;
CNT :=  0 ;
FOR i IN  1  .. apex_application.g_f16.COUNT
LOOP

IF apex_application.g_f13(i) IS NULL THEN
ERR :=  1 ;
END IF;
IF apex_application.g_f15(i) IS NULL THEN
ERR :=  1 ;
END IF;
IF apex_application.g_f14(i) IS NULL THEN
CNT := CNT +  1 ;
END IF;
END LOOP;
-- :P30_X := 'err - '||TO_CHAR(ERR)||' cnt-'||TO_CHAR(CNT);
IF CNT> 1  OR ERR= 1  THEN
:P30_MSG := 'Ошибка! Проверяйте соответсвие введенных данных...';
RETURN FALSE;
END IF;

ERR :=  0 ;

FOR i IN  1  .. apex_application.g_f16.COUNT
LOOP
IF apex_application.g_f12 IS NOT NULL
AND wwv_flow_item.md5( apex_application.g_f13(i),
apex_application.g_f14(i),
apex_application.g_f15(i))<>apex_application.g_f12(i)
THEN
IF apex_application.g_f14(i) IS NOT NULL
AND (apex_application.g_f14(i)<apex_application.g_f13(i)) THEN
:P30_MSG := 'Ошибка! Дата возврата должна быть больше.';
RETURN FALSE; 
END IF;
FOR VID4A_O IN VID4A_CUR
LOOP
IF (TO_DATE(apex_application.g_f13(i), 'DD.MM.YYYY') BETWEEN VID4A_O.DATE_POLU4 AND 
VID4A_O.DATE_VOZV)
OR 
(TO_DATE(apex_application.g_f14(i), 'DD.MM.YYYY') BETWEEN VID4A_O.DATE_POLU4 AND 
VID4A_O.DATE_VOZV)
THEN
:P30_MSG := 'Ошибка! Проверьте диапазон дат.';
RETURN FALSE;
END IF;
END LOOP;
END IF;
END LOOP;

RETURN TRUE;
END;

но после ввода одной записи при попытке сохранить изменение при валидации выдает ошибку
Код: plaintext
'Ошибка! Проверьте диапазон дат.'
- то есть проверка всегда идет по всем записям(поэтому сона и срабатывает), а не только по редактированным. почему так, есть же условие
Код: plaintext
1.
2.
3.
IF apex_application.g_f12 IS NOT NULL
AND wwv_flow_item.md5( apex_application.g_f13(i),
apex_application.g_f14(i),
apex_application.g_f15(i))<>apex_application.g_f12(i)
...
Рейтинг: 0 / 0
24.08.2009, 15:10
    #36159984
kasik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Валидация...
Почему то
Код: plaintext
1.
2.
wwv_flow_item.md5( apex_application.g_f13(i),
apex_application.g_f14(i),
apex_application.g_f15(i))
и
Код: plaintext
apex_application.g_f12(i)
всегда разные независимо от того редактировалось поле или нет. по селекту видно что если поле не равно нулл то оно становиться нередактируемо - может быть с этим что нибудь связано?
...
Рейтинг: 0 / 0
25.08.2009, 15:03
    #36161925
kasik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Валидация...
Никто валидацию такого рода не делал?
...
Рейтинг: 0 / 0
26.08.2009, 18:07
    #36164671
kasik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Валидация...
чтобы мне отсечь тогда те поля которые уже введенные (в селекте идет проверка на это - DECODE(a.DATE_POLU4, NULL,
apex_item.date_popup(13, rownum, a.DATE_POLU4, 'DD-MM-YYYY'),
apex_item.display_and_save(13, a.DATE_POLU4) ).

Вопрос: как мне в процедуре валидации проверить поле является display_and_save или является edit?
...
Рейтинг: 0 / 0
27.08.2009, 11:59
    #36165715
Poyasnoy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Валидация...
По первому посту.
Думаю, что несовпадениe md5 возникает из-за неявного преобразования DATE -> CHAR

По поводу авторпроверить поле является display_and_save или является edit -
можно добавить в запрос скрытые столбцы-семафоры и анализировать при валидации значения соответствующих apex_application.g_fxx


Попробуйте так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
select 
apex_item.hidden( 16 , a.KOD_JRN_VID)||
apex_ITEM.checkbox( 11 ,a.KOD_JRN_VID,null)||
apex_item.hidden( 12 , 
wwv_flow_item.md5 (
  to_char(a.DATE_POLU4,'DD-MM-YYYY'), 
  to_char(a.DATE_VOZV,'DD-MM-YYYY'), 
  a.KOD_RAB)
) "f0",
DECODE(a.DATE_POLU4, NULL, 
apex_item.date_popup( 13 , rownum, a.DATE_POLU4, 'DD-MM-YYYY'), 
apex_item.display_and_save( 13 , to_char(a.DATE_POLU4,'DD-MM-YYYY')) 
) DATE_POLU4,
apex_item.hidden( 33 ,  DECODE(a.DATE_POLU4, NULL, 'EDIT', 'DISPLAY' )) flag_DATE_POLU4,
DECODE(a.DATE_VOZV, NULL, 
apex_item.date_popup( 14 , rownum, a.DATE_VOZV, 'DD-MM-YYYY'), 
apex_item.display_and_save( 14 , to_char(a.DATE_VOZV,'DD-MM-YYYY')) 
) DATE_VOZV
apex_item.hidden( 34 ,  DECODE(a.DATE_VOZV,  NULL,  'EDIT', 'DISPLAY' )) flag_DATE_VOZV
...
Рейтинг: 0 / 0
27.08.2009, 19:45
    #36166963
kasik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Валидация...
Спасибо за идею, с небольшими редакциями воспользовался ей для решения. Вроде получилось!
...
Рейтинг: 0 / 0
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Валидация... / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]