2016-08-12 3 views
-1

У меня есть 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 что fetchs цена продукта из БД
  • 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. Не забудьте отметить ответ как полезный, если это ответ на ваш вопрос.

Смежные вопросы