посттекстовый элемент не может принять фиксацию

Может ли кто-нибудь предложить хороший триггер, который я могу использовать в текстовом поле. Операция, которую я намереваюсь использовать в текстовом поле, — это когда пользователь изменяет значение в текстовом поле, я вызываю процедуру, которая обновляет это значение в таблице базы данных с фиксацией. Однако в тот момент, когда пользователь изменяет значение и нажимает ввод, он должен перейти к следующему элементу, перед которым он обновляет БД. Он отлично работает в триггере KEY-NEXT-ITEM. Однако одна проблема заключается в том, что, скажем, пользователь изменяет значение в fld , но не нажимает вкладку или ввод, а напрямую F10 для фиксации. Мой триггер в текстовом поле (например, KEY-NEXT-ITEM) не срабатывает. Я попробовал POST-TEXT-ITEM , но он не позволяет мне использовать встроенные функции COMMIT или NEXT_ITEM. Я хочу, чтобы триггер срабатывал в тот момент, когда пользователь выходит из элемента, а также должен переходить к следующему элементу в форме.


person Mario R.Ayoub    schedule 25.04.2017    source источник


Ответы (1)


Используйте триггер WHEN-VALIDATE-ITEM. Этот триггер в основном предназначен для проверки значения, введенного пользователем. Он срабатывает каждый раз, когда формы решают, что пользователь завершил значение поля - когда пользователь покидает поле, когда пользователь нажимает фиксацию и т. д.

К сожалению, вы не можете использовать COMMIT_FORM в этом триггере. Формы рекомендуют вносить прямые изменения в базу данных только в транзакционных триггерах. Чтобы реализовать изменение базы данных с фиксацией, запустите процедуру базы данных в автономной транзакции:

CREATE OR REPLACE PROCEDURE do_somethning (some_id NUMBER, some_value VARCHAR2) AS
  PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
  UPDATE some_table SET some_column = some_value
    WHERE table_id = some_id;
  COMMIT;
END do_somethning;

Ваш триггер WHEN-VALIDATE-ITEM может быть таким:

BEGIN
   -- probably do some validations
   ...
   -- call your procedure
   do_something(:some_block.id, :some_block.your_field);
END;
person Petr Pribyl    schedule 26.04.2017
comment
Это отличная идея... большое спасибо ПРИМЕЧАНИЕ. Когда я использовал PRAGMA AUTONOMOUS_TRANSACTION; Это дало мне обнаруженный тупик ORA-00060, но когда я удалил его, он работал хорошо. Еще раз спасибо. - person Mario R.Ayoub; 26.04.2017
comment
вы, вероятно, изменяете ту же запись базы данных, что и выбранная в формах. Это желаемое поведение? - person Petr Pribyl; 26.04.2017
comment
есть ли в блоке больше полей базы данных? Как вы меняете эти предметы? - person Petr Pribyl; 26.04.2017