Блок данных фильтра со значением 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?) Или новой кнопки "Выполнить запрос") фактически выполнит запрос. Если отношение "мастер-детализация" создано правильно (наиболее простой вариант - использовать мастер блоков данных), вы получите строки в блоке "Продукты".

Другие вопросы по тегам