powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / сложная валидация (pls help)
4 сообщений из 4, страница 1 из 1
сложная валидация (pls help)
    #38122798
grok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как сделать валидацию формы, затрагивающую несколько блоков ?
на каких триггерах лучше реализовать ?

пример-1:
BLOCK_1.FIELD_1 = 10 -- нормально для этого блока
BLOCK_2.FIELD_2 = 99 -- тоже может быть нормально для этого блока
но когда эти два поля одновременно принимают такие значения это должно считаться ошибкой

пример-2:
сумма всех значений DETAIL_BLOCK.FIELD_1 для каждой данной записи в MASTER_BLOCK не должна превышать 100.

WHEN-VALIDATE-ITEM / WHEN-VALIDATE-RECORD подходят плохо
так как не дают выйти из поля или записи
а нужна свободная навигация по форме, кроме может быть перехода на другую запись в самом главном мастер-блоке.
потому что может потребоваться исправить несколько полей.
...
Рейтинг: 0 / 0
сложная валидация (pls help)
    #38122937
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
grokкак сделать валидацию формы, затрагивающую несколько блоков ?
На кнопку ОК
...
Рейтинг: 0 / 0
сложная валидация (pls help)
    #38147980
Фотография UK0IAI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На кнопке "ОК". Вот таким макаром
Код: plsql
1.
2.
3.
if  PROGA  = 'ПРОВЕРКА НЕ ПРОШЛА' then
	 raise form_trigger_failure;
end if;	



Еще могу предложить вам "прятать" от пользователя айтемы, в которые ввод вдруг запрещен (или открывать).

При помощи вызова вот таких (красивых) процедур.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
PROCEDURE OPEN_TIME IS -- откроем для ввода поле ввода 
BEGIN
     SET_ITEM_PROPERTY ('T.T_TIME',VISIBLE,PROPERTY_TRUE);
     SET_ITEM_PROPERTY ('T.T_TIME',ENABLED,PROPERTY_TRUE);
     SET_ITEM_PROPERTY ('T.T_TIME',NAVIGABLE,PROPERTY_TRUE);
END ;
PROCEDURE CLOSE_TIME IS -- закроем и спрячем от юзера поле ввода 
BEGIN
  SET_ITEM_PROPERTY ('T.T_TIME',VISIBLE,PROPERTY_FALSE);
END ;
PROCEDURE OPEN_BT_TIME IS -- покажем юзеру кнопку
BEGIN
     SET_ITEM_PROPERTY ('T.BT_TIME',VISIBLE,PROPERTY_TRUE);
     SET_ITEM_PROPERTY ('T.BT_TIME',ENABLED,PROPERTY_TRUE);
     SET_ITEM_PROPERTY ('T.BT_TIME',NAVIGABLE,PROPERTY_TRUE);
END ;
PROCEDURE CLOSE_BT_TIME IS -- спрячем от юзера кнопку. 
BEGIN
     SET_ITEM_PROPERTY ('T.BT_TIME',VISIBLE,PROPERTY_false);
END ;



Если у вас в форме есть много полей с валидацией, то Вы можете написать такие процедуры (набор) для всех полей формы.
И после этого, у вас появится отличная возможность для написания простого и понятного кода:, например:

У вас есть бизнес-правило, как то:
Если в FIELD_1 ввели VALUE_1 то бизнес_правило_1 запрещает ввод значений в FIELD_2 и FIELD_3
Вы в итоге пишете вот такой красивый программный код, который легко читать и отлаживать.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
if FIELD_1 = VALUE_1 then  
   CLOSE_FIELD_2;
   CLOSE_FIELD_3;
END IF;
...
if FIELD_1 <> VALUE_1 then
   OPEN_FIELD_2;
   OPEN_FIELD_3;
END IF;



Вызов этих процедур делается в двух местах:

1. в триггере уровня блока PRE_BLOCK
зная набор бизнес-правил, мы в этом тригерре УЖЕ, заранее прячем от юзера поля и кнопки если ему это не положено
Это почти на 50% закрывает все проблемы.. валидации вообще.

2. в триггере уровня блока WHEN-FALIDATE-ITEM
просто вызываем процедуру комплексной проверки состояний всех бизнес правил, что автоматом открывает/прячет поля
и кнопки.
Код: plsql
1.
2.
3.
4.
5.
6.
  if not Комплексная_проверка_бизнес-правил then
	 raise form_trigger_failure;
  end if;	 

--где, Комплексная_проверка_бизнес-правил = это функция, что может быть очень даже сложна, но она делает главное  
--она "включает" и "выключает" айтемы и кнопки (кнопку SAVE например).


3. Предельно минимизируем вывод юзеру каких-либо алертов и сообщений. (когда поля прячутся и так все ясно.. и очень даже красноречиво).

Зачем "прятать поля" ??

Ну просто , что бы не писать процедуры валидации для каждого айтема. В смысле писать то можно, а вот потом отлаживать и сопровождать код.. Б-р-р.
...
Рейтинг: 0 / 0
сложная валидация (pls help)
    #38148928
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grokкак сделать валидацию формы, затрагивающую несколько блоков ?
на каких триггерах лучше реализовать ?


Если допускается отложить валидацию до нажатия на "Сохранить", то используйте POST-FORMS-COMMIT.

Кстати сложную валидацию в этом триггере делать проще.
Не нужно "ходить" по записям детального блока, чтобы сумму посчитать.
Т.к. команды insert, update, delete уже выполнены, можно пользоваться select-ами.
В случае аварийного завершения в POST-FORMS-COMMIT выполняется rollback.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / сложная валидация (pls help)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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