Oracle DB, Oracle APEX, Linux etc.

понедельник, 29 марта 2010 г.

APEX: Popup Key LOV, onChange и Submit

Сегодня на повестке дня три небольших вопроса, которые возникают относительно Popup Key LOV в APEX. В ответах P1_POPUP_KEY будет использоваться в качестве элемента этого типа.

Внимание: ответы верны для APEX версии 3.2. В принципе, они должны быть правильными и для более ранних версий, но если что не так - задавайте вопросы в комментариях.

0. Как получить значение ключа выбранного значения?


Если попробовать использовать $v("P1_POPUP_KEY"), то мы получим отображаемое значение, а не ключ, ради которого и используется обычно Popup Key LOV. Но если взглянуть в исходный код страницы, то рядом с элементом P1_POPUP_KEY мы увидим ещё один скрытый - P1_POPUP_KEY_HIDDENVALUE, который и хранит ключ.

1. Можно ли использовать событие onChange у элемента Popup Key LOV?


Можно. :) Попробуйте добавить элементу следующий код в HTML Form Element Attributes и изменить его значение в приложении:
onChange="alert($v(this) + ';' + $v(this.id+'_HIDDENVALUE'))"

2. Можно ли сделать Popup LOV, выполняющий SUBMIT при изменении значения?


Зная ответ на предыдущий вопрос, легко понять, что можно. Вот небольшой JavaScript-код с объектом, автоматизирующим этот процесс:
/* Помните, этот код использует jQuery. */
submitPopupLov = {
addSubmitHandlerToPopupLov : function (pLovId, pSubmitRequest){
$("#" + pLovId).addClass("submit-popup-lov submit-popup-lov-processed");
$("#" + pLovId + "_HIDDENVALUE").change(function (){
doSubmit(!!pSubmitRequest ? pSubmitRequest : pLovId);
});
},
setPopupLovSubmit : function (pLovId){
$("#" + pLovId).addClass("submit-popup-lov submit-popup-lov-not-processed");
},
processSubmitablePopupLovs : function (){
$(".submit-popup-lov-not-processed").each(function(){
$(this).removeClass("submit-popup-lov-not-processed").addClass("submit-popup-lov-processed");
$("#"+this.id + "_HIDDENVALUE").change(function(){
doSubmit(this.id);
});
});
}
};


Я надеюсь, вопросов без ответов стало меньше. :)

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

  1. Можно ли сделать Popup LOV, выполняющий скрытие других item-ов, в зависимости от выбранной записи. Ответ конечно можно, но вопрос как?

    ОтветитьУдалить
  2. Довольно просто: добавить в обработчик события onChange код, который будет проверять значение/текст выбранной записи и вызывать соответствующую функцию API для необходимых элементов. Приглядитесь к функциям $x_Hide, $f_Hide_On_Value_Item и $f_Hide_On_Value_Item_Row.

    ОтветитьУдалить
  3. Спасибо! Очень полезный сайт.
    А можно ли переопределить кнопочку вызова Popup LOV таким образом, чтобы можно было вызвать это окно в модальном окне, а не в отдельном окне браузера, как это реализовано в APEX.
    Спасибо!

    ОтветитьУдалить