Блок данных фильтра со значением LOV в Oracle Forms 10g
Мне нужно реализовать простую форму продукта из блока данных под названием "ПРОДУКТЫ".
Продукты связаны с "Партнером" через поле "COMPANIES_PARTNERS_ID".
Это поле будет представлено LOV для выбора партнера, для которого мы хотим визуализировать ваши продукты.
Если в настоящее время не выбран партнер, все ваши продукты должны отображаться. И когда партнер выбран, должны отображаться только его продукты.
Форма будет выглядеть так:
Кнопка справа от поля поиска должна показать LOV и запустить запрос. Я попробовал следующий код как "Умный триггер", когда нажал кнопку. Но это не работает вообще. Список LOV появляется дважды, и когда партнер не выбран, продукт не отображается.
Может ли кто-нибудь помочь мне реализовать эту функцию? Спасибо
3 ответа
- Вам не нужно использовать
ENTER_QUERY
команда. - лучше использовать
DEFAULT_WHERE
установить в отношенииCOMPANIES_PARTNERS_ID
, Если не выбран ни один из рядов LOV, нажавCANCEL
или увольнениеX
подписать, то все продукты будут перечислены (в этом случае вы увидите первый идентификатор, скорее всего, со значением1
, посколькуCOMPANIES_PARTNERS_ID
не расположен вCONTROL
блок, но в том же блоке, а именноPRODUCTS
, с другими предметами. Когда вы спуститесь вниз по стрелке вниз, вы увидите другойID
значения, когда курсор находится вCOMPANIES_PARTNERS_ID
поле, кажется, что Количество отображаемых элементов установлено в1
для этого поля, потому чтоPRODUCTS
блок был установлен как10
элементы отображаются).
Таким образом, вы можете использовать следующий код в WHEN-BUTTON-PRESSED
спусковой крючок:
DECLARE
V_WHERE VARCHAR2(500);
BEGIN
GO_ITEM('COMPANIES_PARTNERS_ID');
IF SHOW_LOV('COMPANIES_LOV') THEN
V_WHERE:='COMPANIES_PARTNERS_ID='||:COMPANIES_PARTNERS_ID;
ELSE
V_WHERE:='1=1';
END IF;
SET_BLOCK_PROPERTY('PRODUCTS',DEFAULT_WHERE,V_WHERE);
CLEAR_BLOCK(NO_VALIDATE);
EXECUTE_QUERY;
END;
Поместите значение в блок PRODUCTS WHERE clause'свойство.
ГДЕ ОГРОМНАЯ недвижимость:
COMPANIES_PARTNERS_ID LIKE NVL(:lov_block.COMPANIES_PARTNERS_ID, '%')
После того, как вы входите в режим запроса (что к чему ENTER_QUERY
делает), дальнейшая обработка останавливается, пока вы не выполните запрос.
Я предполагаю, что вы создали LoV правильно - самый обычный способ - сначала создать запрос группы записей, а затем создать LoV на его основе.
Поэтому я бы ENTER_QUERY
в WHEN-NEW-FORM-INSTANCE
вызвать и позволить вашей текущей кнопке отобразить LoV и позволить пользователю выбрать значение в пункте "Идентификатор партнера компании". Выполнение запроса (нажатием соответствующей кнопки на панели инструментов, сочетания клавиш (F8?) Или новой кнопки "Выполнить запрос") фактически выполнит запрос. Если отношение "мастер-детализация" создано правильно (наиболее простой вариант - использовать мастер блоков данных), вы получите строки в блоке "Продукты".