Предотвратить выполнение When-Validate-Item в Oracle Forms

У меня есть сложная форма в Oracle Forms, в которой есть некоторая логика пересчета в триггере When-Validate-Item. Моя проблема в том, что я хочу, чтобы эта логика выполнялась только тогда, когда пользователь изменил значение элемента, а не когда оно было изменено программно, как при заполнении элемента при запуске формы. Естественно, я мог бы добавить некоторую логику состояния, чтобы предотвратить программное предотвращение логики проверки при запуске формы, но это добавит дополнительную сложность форме.

Мой вопрос в том, что в Oracle Forms есть какой-либо способ предотвратить выполнение логики проверки, например. установка статуса элемента на действительный?


person Peter Å    schedule 26.09.2013    source источник


Ответы (2)


Когда значение изменяется программно,

set_item_property('block_name.item', item_is_valid, property_true);
person PAPP    schedule 30.09.2016

Есть несколько возможных способов сделать это в зависимости от того, как изменился ваш элемент и какие свойства находятся в элементе.

1) если ваш элемент является элементом базы данных, и вы заполняете его во время обычного запроса, триггер when-validate-item не сработает.

2) если вы не заполните его обычным запросом, вы можете изменить время проверки с элемента на запись или даже на форму. Таким образом, он будет проверен только в тот момент, когда вы выполните коммит или покинете форму.

3), конечно, отслеживать эти изменения и не позволять проверке пройти.

PS: обычно вы ничего не делаете в своем триггере when-validate-item, что будет проблемой, когда он заполняется из-за кулис, поэтому я не знаю, какой у вас код внутри триггера, но он должен только быть проверкой входного значения, и если это неправильно, он должен сказать об этом, даже если он заполнен кодом вместо пользователя.

person nightfox79    schedule 27.09.2013
comment
Спасибо за ответ. Я думал примерно так же, как и вы. Я заполняю элемент программно, а не из запроса к базе данных. Логика триггера When-Validate-Item на самом деле является логикой проверки, которая включает конвертацию валюты и синхронизацию. Некоторую часть логики можно было бы перенести на уровень форм и цикла коммитов, но это приведет к ухудшению взаимодействия с пользователем. Я несколько раз решал такие проблемы, отслеживая, когда проверять, а когда нет. Не приятно и легко поддерживать, но рабочее решение. - person Peter Å; 29.09.2013