Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Персонализация / 9 сообщений из 9, страница 1 из 1
06.09.2011, 16:32
    #37427492
asimakov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Персонализация
Всем привет!
Есть форма, в которой вводятся строки. Каждый раз, когда вводится новая строка, ее копия записывается по временную табличку через триггер WVR. Пока пользователь "ходит" по строкам туда-сюда - синхронизация строк с табличкой работает нормально. Но стоит только удалить строку (или очистить запись) - синхронизация строк и записей в табличке нарушается. Т.е. например было введено на форме 5 строк. Во временную табл. тоже записалось 5 строк. Но потом взяли и две строки удалили с формы. А в табличке так и осталось 5 записей. Подскажите, пожалуйста, как можно синхронизировать данный процесс? Как через персонализацию "отреагировать" на нажатие кнопок "Удалить" или "Очистить запись"?

Модератор: Тема перенесена из форума "Oracle".
...
Рейтинг: 0 / 0
07.09.2011, 11:17
    #37428555
Maratus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Персонализация
В том то и дело, что синхронизация в данном случае настроена не нормально - не описана синхронизация удаления строк. Ее и надо описать. Необходимо отслеживать в формсах это событие и одновременно удалять строки из временной таблицы. Например, можно использовать триггер ON-DELETE или POST-DELETE.
...
Рейтинг: 0 / 0
07.09.2011, 12:39
    #37428789
asimakov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Персонализация
Maratus, но ведь речь идет о персонализации. Используется стандартная форма и я в нее не имею права влезать.
Странно конечно, но получается, что через персонализацию никак не отследить нажатие кнопок "Удалить"
...
Рейтинг: 0 / 0
07.09.2011, 13:29
    #37428910
Maratus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Персонализация
asimakovMaratus, но ведь речь идет о персонализации.
На самом деле тяжело понять о чем идет речь. Не понятен термин "Персонализация". Что используется под временной таблицей и что делает триггер WVR?
asimakovСтранно конечно, но получается, что через персонализацию никак не отследить нажатие кнопок "Удалить"
Можно отслеживать события в базе данных, если что-то реальное происходит в ней по кнопке "Удалить".
...
Рейтинг: 0 / 0
07.09.2011, 14:19
    #37429017
asimakov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Персонализация
Maratus,
Персонализация = Индивидуализация.
Временная таблица - временная табличка, которую я сам создаю (CREATE GLOBAL TEMPORARY TABLE my_table_tmp ...)
Триггер WVR = WHEN-VALIDATE-RECORD
В том-то и дело, что в базе пока ничего не происходит, все происходит на форме без сохранения (пока) данных.
...
Рейтинг: 0 / 0
07.09.2011, 15:37
    #37429251
Maratus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Персонализация
Если нет доступа к редактированию формы, то ничего не сможете сделать.
Если есть - то на блок из которого удаляются строки вешается триггер, который перехватывают событие удаления строк из блока и переопределяет или дополняет его.
On-Delete - Заменяет стандартный процесс управления удаляемыми записями в Oracle Forms
Post-Delete - Проверочные транзакции при удалении записи из БД.
...
Рейтинг: 0 / 0
07.09.2011, 16:09
    #37429336
asimakov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Персонализация
Maratus,
К сожалению доступа к форме нет, но все равно, спасибо за обстоятельный ответ!
...
Рейтинг: 0 / 0
08.09.2011, 09:02
    #37430078
va_kochnev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Персонализация
asimakov,
Допустим, текущая персонализация складывает записи во временную таблицу. Каждой записи в качестве уникального идентификатора присваивает порядковый номер строки в блоке (:SYSTEM.CURSOR_RECORD).

Можно попробовать следующее:
Настраиваем обработку следующих событий
1. На событии WHEN-NEW-FORM-INSTANCE инициализируем глобальную переменную XX_PREV_REC = 0
2. На событии WHEN-NEW-RECORD-INSTANCE нужного блока сравниваем значение XX_PREV_REC и :SYSTEM.CURSOR_RECORD. Если совпадают, значит запись была удалена и произошел сдвиг нумерации строк блока. Удаляем из временной таблицы запись с индикатором=:SYSTEM.CURSOR_RECORD. Затем update временная_таблица set индикатор=индикатор-1 where индикатор > :SYSTEM.CURSOR_RECORD.
3. На событии WHEN-NEW-RECORD-INSTANCE нужного блока присваиваем глобальной переменно XX_PREV_REC значение :SYSTEM.CURSOR_RECORD.

Должно сработать, поскольку триггер WHEN-NEW-RECORD-INSTANCE срабатывает при перемещении на новую строку. При этом меняется и номер строки :SYSTEM.CURSOR_RECORD. Если триггер сработал, а номер строки не изменился, значит произошло удаление или очистка записи. Только удаление строки от очистки тут не различишь. Хотя и тут, наверное, можно извернуться, запоминая значение системной переменной RECORD_STATUS.
...
Рейтинг: 0 / 0
13.09.2011, 10:31
    #37437463
asimakov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Персонализация
va_kochnev,

Спасибо, это то, что надо!
...
Рейтинг: 0 / 0
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Персонализация / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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