Как использовать динамическое действие в табличной форме в Oracle Apex?
У меня есть Oracle APEX 4. Я создал табличную форму вручную (с apex_item
пакет). Он содержит три поля.
- apex_application.g_f03: LOV (
select name display, product_id return from products
) - apex_application.g_f04: текстовое поле "цена"
- apex_application.g_f05: текстовое поле "количество".
Я хотел бы видеть цену товара в f04 после выбора названия товара (...f03). Оператор SQL выглядит так:
select price from products where product_id = {..from f03}.
Как это сделать с помощью динамического действия или функции JavaScript?
1 ответ
Хорошо, я дам вам подсказку, как реализовать ваш сценарий.
Вещи, которые вам нужны, чтобы заставить его работать:
custom tabular
для - у вас уже естьon demand process
который выбирает цену продукта из дБdynamic action
слушать, если значение вf03
изменено
по требованию
Создать по запросу процесс с именем getPrice
со следующим кодом
declare
v_price number;
begin
select
price
into
v_price
from
products
where
product_id = apex_application.g_x01;
htp.p( v_price );
exception
when others then
htp.p(SQLERRM);
end;
динамическое действие
Вы должны прослушать изменение события в селекторе jQuery :input[name=f03]
, Создать динамическое действие с истинным действием Execute JavaScript Code
,
В рамках истинного действия вы должны сделать ajax вызов on demand process
, Пример кода (рабочий) приведен ниже:
var
xhr2,
self = $(this.triggeringElement),
productId = self.val(),
row = self.closest('tr');
xhr = $.ajax({
url:'wwv_flow.show',
type:'post',
dataType: 'text',
traditional: true,
data: {
p_request: "APPLICATION_PROCESS=getPrice",
p_flow_id: $v('pFlowId'),
p_flow_step_id: $v('pFlowStepId'),
p_instance: $v('pInstance'),
//p_arg_names: [ item_id ],
//p_arg_values: [ itemValue ],
x01: productId
},
success: function( resultData, textStatus, ajaxObj ){
//do stuff after fetching product price
row.find( ':input[name=f04]' ).val( resultData )
},
error: function(jqXHR, textStatus, errorThrown){
alert('Error occured while retrieving AJAX data: '+textStatus+"\n"+errorThrown);
}
});
Соберите все вместе, и у вас будет ответ на ваш вопрос.
Ps. Не забудьте пометить ответ как полезный, если это ответ на ваш вопрос.