Oracle DB, Oracle APEX, Linux etc.

пятница, 2 октября 2009 г.

ApEx: Popup Key LOV, null key и небольшой баг

Недавно наткнулся на подобный баг: есть страница, на ней есть элемент типа Popup Key LOV (выбор нужного значения из списка во всплывающем окне). Если разрешить отображать строку с ключом NULL (aka return value) и, например, описанием "Это строка с ключом NULL", то обработчик для щелчка по ней во всплывающем окне будет следующим:
<a href="javascript:passBack('');">Это строка с ключом NULL</a>

В функцию passBack передаётся один фактический параметр, хотя формальных там два. И вот второй, который отвечает за ключ списка, будет неопределённым. Поэтому при сабмите мы запишем в значение переменной для этого элемента undefined, и, соответственно, произойдёт ошибка при выполнении запроса, определяющего LOV.

Решение: 0. Поменять запрос LOV, добавив в него
select 'Это строка с ключом NULL' d, null r from dual union all

1. Добавить Computation на страницу, где можно выбирать значение с ключом NULL, для элемента, основанного на этом LOV, заменяя его значение либо функцией:
FUNCTION f_lov_null(p_item_name IN VARCHAR2) Return VARCHAR2 IS
BEGIN
IF v(p_item_name) = 'undefined' THEN
Return(NULL);
ELSE
return(v(p_item_name));
END IF;
END;

либо каждый раз конкретно:
nullif(lower(v('YOUR_ITEM_NAME')), 'undefined')


Мне пока хватило варианта с nullif.

3 комментария:

  1. Добрый день!
    У меня на LOV основан Report column. Ни для него, ни для Report'а computations не предусмотрено. Подскажите, к чему привязать вызов функции или тот же nullif, чтобы заменить значение перед сабмитом?

    ОтветитьУдалить
    Ответы
    1. Привет!

      Укажите, пожалуйста, версию APEX, тип отчёта, тип отображения столбца. Возможно, этот баг уже исправлен.

      Удалить