powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Валидация...
6 сообщений из 6, страница 1 из 1
Валидация...
    #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
Валидация...
    #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
Валидация...
    #36161925
kasik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никто валидацию такого рода не делал?
...
Рейтинг: 0 / 0
Валидация...
    #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
Валидация...
    #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
Валидация...
    #36166963
kasik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за идею, с небольшими редакциями воспользовался ей для решения. Вроде получилось!
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Валидация...
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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