powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Как в Forms сделать правильно использовать триггеров при навигации
8 сообщений из 8, страница 1 из 1
Как в Forms сделать правильно использовать триггеров при навигации
    #36855288
MikTar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе время суток всем!
Проблема в следующем. Я перехожу с Delphi на Forms. У меня Forms6i. Есть два блока банных основанных на вьюхах и связанные между собой как мастер-деталь. Часть Item зависит от значений других : например, если транзакция такого-то типа, то поля "Склад Получателя", "МОЛ Получателя" и т.д. не редактируемые. А другие поля становтяся обязательные. Причем часть полей в том же блоке, часть в дочернем. Тоже с кнопками, часть кнопок активна при таких значениях полей, часть не активна. Это все происходит при навигация(и вверх и вниз!) но записям мастер-блока (после нажатия Ctrl+F11) и также при редактирование- изменение значений тех полей, от которых и зависят редактируемость или нет других.
Я сделал по своему, на куче триггеров, но во многих местах идет явное дублирование, а внекоторых случаях идишь вниз - все нормально, начинаешь идти вверх - что-то не сработало....
Есть какая-нибудь стандартная схема задействования триггеров на которых реализуются эти проверки? Причем какие триггера лучше задействовать в мастере, какие в детали?
...
Рейтинг: 0 / 0
Как в Forms сделать правильно использовать триггеров при навигации
    #36855393
Фотография John.D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MikTarесли транзакция такого-то типа, то
Надеюсь, термин "транзакция" вы употребляете в финансовом смысле. То есть, имеется поле, значение которого указывает на тип транзакции.

MikTarЕсть какая-нибудь стандартная схема задействования триггеров на которых реализуются эти проверки?
Правильно все проверки оформить в виде процедуры и вызывать её в When-New-Record_Instance мастер блока и в When-Validate-Item полей, от которых зависит видно-не видно. Добавьте условие :SYSTEM.MODE = 'NORMAL', что бы не делать лишнего при выполнении запроса.
...
Рейтинг: 0 / 0
Как в Forms сделать правильно использовать триггеров при навигации
    #36855614
MikTar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
John.D
Надеюсь, термин "транзакция" вы употребляете в финансовом смысле. То есть, имеется поле, значение которого указывает на тип транзакции.


Да все правильно, транзакция в финансовом смысле- я просто привел для примера.

John.D
Правильно все проверки оформить в виде процедуры и вызывать её в When-New-Record_Instance мастер блока...


Проблема в том, что When-New-Record_Instance возникает, когда строка появляется первый раз- если я бегу по записям блока с начало вниз, а потом начну вверх, этот триггер уже не срабатывает. Я сделал процедуру и повесил ее на PRE-RECORD, это триггер срабатывает и когда мы перебираем строки в одну стороны и потом обратно и т.д. Но у него слишком много лишних срабатываний...
Вот если дополнительно поиграть с :SYSTEM.MODE = 'NORMAL' или другими режимами, чтобы уменьшить количество срабатываний....
...
Рейтинг: 0 / 0
Как в Forms сделать правильно использовать триггеров при навигации
    #36856034
-=APS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 MikTar
Вам же советовали When-Validate-... на случай изменения видно/не видно. Зачем вам анализировать заново уже проанализированные строки в случае "пробегания туда-сюда"?
...
Рейтинг: 0 / 0
Как в Forms сделать правильно использовать триггеров при навигации
    #36856101
MikTar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=APS=-,

Вид на форме для каждой строки может быть разный, если у этой строки к примеру итема "тип транзакции" = 'Выдача в монтаж' то итем "Склад получателя" должен быть не редактируем, а если "Изменение места хранения" то наоборот этот итем должен быть обязателен для заполнения.

При изменение значения итема "тип транзакции" - да подходит триггер When-Validate-Item. А вот при переходи по строкам как раз и не могу подобрать, сейчас сделал на PRE-RECORD, но он слишком много раз срабатывает - излишние операции, хотя итоговый результат верный.
...
Рейтинг: 0 / 0
Как в Forms сделать правильно использовать триггеров при навигации
    #36856164
-=APS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот как раз я и не могу понять, почему у вас надо что-то делать дополнительно, если вы это уже настроили в триггере when-new-item-instance с помощью set_item_instance_property? Или вы использовали какой-то другой метод?
...
Рейтинг: 0 / 0
Как в Forms сделать правильно использовать триггеров при навигации
    #36856169
-=APS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправочка: в "when-new-RECORD-instance"
...
Рейтинг: 0 / 0
Как в Forms сделать правильно использовать триггеров при навигации
    #36856573
Фотография John.D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MikTar возникает, когда строка появляется первый раз- если я бегу по записям блока с начало вниз, а потом начну вверх, этот триггер уже не срабатывает. Я сделал процедуру и повесил ее на PRE-RECORD, это триггер срабатывает и когда мы перебираем строки в одну стороны и потом обратно и т.д. Но у него слишком много лишних срабатываний...
Так ведет Post-Query. When-New-Record_Instance срабатывает каждый раз после перемещения фокуса на новую запись (PRE-RECORD до ! Будут косяки с определение текущей записи). Для улучшения производительности рекомендую создать несколько наборов "видимости", обозвать или пронумеровать их, и хранить в какой-нибудь переменной инфу о текущем состоянии.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Как в Forms сделать правильно использовать триггеров при навигации
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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