Как использовать динамическое действие в табличной форме в 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. Не забудьте пометить ответ как полезный, если это ответ на ваш вопрос.

Другие вопросы по тегам