Скрыть / показать базу элементов страницы на основе определенных значений из выбранного списка в верхней части

Я использую версию Oracle Apex 19.1, и я новичок в apex. Я работаю над формой продукта. Там, где под типом продукта, он состоит из 5 продуктов, отображаемых в списке выбора. Когда пользователь выбирает продукт a, b или d из списка, в форме отображаются элемент страницы аксессуаров и элемент страницы плана. Когда пользователь выбирает продукт c или e под типом продукта, элемент страницы аксессуаров и элемент страницы плана будут скрыты из формы.

Я попытался достичь, установив динамическое действие, «событие» настроено на изменение, «тип выбора» установлено на элементы, «элемент (ы)» установлен на product_type

при условии на стороне клиента, 'Item' установлен в item = value, 'item' установлен в product_type, 'value' установлен в a, b, d. Я понимаю, что условие значения не может принимать более одного значения. Есть ли способ преодолеть это?


person user13515069    schedule 11.05.2020    source источник


Ответы (2)


Когда дело доходит до тестирования какого-либо условия, существует ряд декларативных вариаций.

параметры состояния сервера

Где значения элемента / выражения 1 соответственно

  • P1_ITEM
  • A:B:C

Я бы попробовал сначала использовать одно из них, а не выражение PL / SQL, потому что производительность может быть проблемой в зависимости от того, насколько распространены эти условия.

Для некоторых условий просто требуется какое-то вложенное / составное выражение - я предпочитаю простое выражение PL / SQL. Если выражение истинно, вы увидите компонент.

:P1_VALUE in ('a', 'b', 'd') and sec.check('blah') = 'Y'
person Scott    schedule 11.05.2020
comment
Я слежу за предлагаемой настройкой при условии на стороне сервера, для параметра type установлено значение item, в списке, разделенном двоеточиями, для параметра item установлено значение product_type, для параметра list установлено значение a: b: d. но это не работает - person user13515069; 11.05.2020
comment
Я обновил ответ, включив в него требуемые литералы, так как это может быть неоднозначным. - person Scott; 11.05.2020

Я предпочитаю функции, возвращающие логическое значение (вместо типа условия "item = value").

В вашем случае это было бы

return :P1_PRODUCT_TYPE in ('a', 'b', 'd');

используется в аксессуарах и элементах страницы плана "Состояние на стороне сервера".

Что касается элемента списка выбора, измените его «Действие страницы при выборе» на «Перенаправить и установить значение».

person Littlefoot    schedule 11.05.2020
comment
нет логической опции возврата из выбора типа при условии на стороне клиента. Не могли бы вы указать, где установить? под настройкой динамического действия или настройкой истинного действия? - person user13515069; 11.05.2020
comment
Думаю, дело в недоразумении (моя вина, извините). Я отредактировал свое сообщение и добавил дополнительную информацию. Посмотрите, пожалуйста. Я просто попробовал, работает (т.е. отображает / скрывает элементы страницы в зависимости от значения элемента Select List). - person Littlefoot; 11.05.2020
comment
Извиняюсь, я еще не совсем понял. В элементе страницы плана я установил действие страницы при выборе на Перенаправление и установил значение. В условиях на стороне сервера я выбираю выражение pl / sql и ввожу return product_type в ('a', 'b', 'd');, но при проверке запроса получаю сообщение об ошибке. Также мне нужно установить динамическое действие для элемента страницы плана? - person user13515069; 12.05.2020
comment
Нет; не используйте выражение PL / SQL, а используйте тело функции PL / SQL, которое вернет логическое значение. Положите туда return product_type in ('a', 'b', 'd');. Вам не нужно динамическое действие, потому что перенаправление и установка значения сделают эту работу. - person Littlefoot; 12.05.2020
comment
Когда я ввожу return product_type in ('a', 'b', 'd'); в теле функции PL / SQL это дает мне ошибку ORA-06550: строка 1, столбец 131: PLS-00201: идентификатор 'product_type' должен быть объявлен ORA-06550: строка 1, столбец 124: PL / SQL: оператор игнорируется. - person user13515069; 12.05.2020
comment
Наверное, да; product_type должно быть названием элемента. Если это страница 1, то ее имя может быть P1_PRODUCT_TYPE, тогда это будет return :P1_PRODUCT_TYPE in ('a', 'b', 'd');. Извините за путаницу. - person Littlefoot; 12.05.2020
comment
Если после того, как мы установили условие на стороне службы, когда будет выполнено действие скрытия / отображения элемента страницы? когда мы меняем тип продукта? или когда нажимаем кнопку создания? Просто интересно, какое действие это вызовет? - person user13515069; 13.05.2020
comment
каким-то образом элемент страницы плана и аксессуаров скрывается из моей формы, даже если я выбираю правильный product_type 'a', который предполагает отображение элемента страницы плана и аксессуаров, есть идеи, почему? - person user13515069; 13.05.2020
comment
Ваш предыдущий вопрос: да, как только вы измените тип продукта, потому что его значение Redirect и set вызовет условие на стороне сервера. Что касается вашего последнего вопроса: есть ли что-нибудь, что осталось от ваших предыдущих попыток (динамических действий, что угодно), что могло бы повернуть вспять то, что вы делали в последний раз? Если вы не уверены, попробуйте создать новую простую страницу, чтобы проверить, как работает предложенное мной решение. - person Littlefoot; 13.05.2020
comment
Каким-то образом это сработает только тогда, когда я нажму кнопку создания. Но мне удается добиться другого метода. Я устанавливаю «элемент находится в списке» в состоянии на стороне клиента при динамическом действии, а затем определяю список значений. Спасибо за ваш совет. - person user13515069; 13.05.2020