Oracle APEX Установить значение для элемента страницы из Ajax процесса - PullRequest
1 голос
/ 19 апреля 2020

Я пытаюсь загрузить документ со страницы APEX в корзину S3 и добился успеха с помощью плагина из https://www.apexutil.com/ords/prod/f?p=700: 200: 1349309139567 :::::

Плагин демонстрирует получение результата загрузки и вставку в таблицу, как описано ниже.

Create new dynamic action;
Choose Upload Success [FM Component];
Choose "Execute JavaScript Code" action;
Inside the "Code" textarea define code:

apex.server.process("my_ajax_process", {
x01: this.browserEvent.originalEvent.detail.serverId,
x02: this.browserEvent.originalEvent.detail.file.name,
x03: this.browserEvent.originalEvent.detail.file.body.size,
x04: this.browserEvent.originalEvent.detail.file.body.type
}, {
success: function() {
console.log("success");
},

и получение значений x0 в процессе Ajax и вставку в таблицу.

Create Ajax Process, name: "my_ajax_process"
Define PL/SQL code:

declare
l_server_id varchar2(4000) := apex_application.g_x01;
l_name varchar2(4000) := apex_application.g_x02;
l_size number := apex_application.g_x03;
l_type varchar2(4000) := apex_application.g_x04;
begin
insert into MY_TABLE (MT_SERVER_ID, MT_NAME, MT_SIZE, MT_TYPE)
values (l_server_id, l_name, l_size, l_type);
owa_util.status_line(nstatus => 204, creason => 'No Content');
end;

Однако Мне нужно захватить значения X0 в процессе Ajax и назначить элементам страниц формы, так как я должен сохранить выходные данные вместе с другими полями формы и сохранить в моей таблице. Я пытался, но его не обновляют. Любая помощь высоко ценится

declare
l_server_id varchar2(4000) := apex_application.g_x01;
l_name varchar2(4000) := apex_application.g_x02;
l_size number := apex_application.g_x03;
l_type varchar2(4000) := apex_application.g_x04;
begin
:P12_DOCUMENTURL := l_server_id;
:P12_DOCUMENTTYPE := l_type;
:P12_DOCSIZE := l_size;
owa_util.status_line(nstatus => 204, creason => 'No Content');
end;

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Наконец-то это работает для меня.

Динамо c action

var l01 = this.browserEvent.originalEvent.detail.serverId;
var l03 = this.browserEvent.originalEvent.detail.file.body.size;
var l04 = this.browserEvent.originalEvent.detail.file.body.type;
apex.server.process 
( "upload_ajax_process", 
    {},
    { success: function( pData ) {
         $s("P12_DOCUMENTURL",l01 );  
         $s("P12_DOCSIZE", l03);  
         $s("P12_DOCUMENTTYPE", l04);  
      }
    }
);

Также Ajax обрабатывают "upload_ajax_process" с некоторым фиктивным утверждением. Без этого я получаю «Ошибка: SyntaxError: Неожиданный токен P в JSON в позиции 0»

begin
  owa_util.status_line(nstatus => 204, creason => 'No Content');
end;
0 голосов
/ 21 апреля 2020

: P12_DOCUMENTURL: = l_server_id; - Этот тип назначения не будет работать в ajax процессе

, но вы можете использовать APEX_UTIL.SET_SESSION_STATE

BEGIN
APEX_UTIL.SET_SESSION_STATE('my_item','myvalue');
END;

Пример

BEGIN
APEX_UTIL.SET_SESSION_STATE('P12_DOCUMENTURL',l_server_id);
END;

Подробнее здесь - https://docs.oracle.com/cd/E37097_01/doc.42/e35127/GUID-62AA4333-160D-44FD-9F07-D188A2F4BC55.htm#AEAPI181

Также, пожалуйста, посмотрите на это https://jeffkemponoracle.com/2014/02/apex_util-set_session_state-may-or-may-not-commit/

Для более подробного обсуждения выданных коммитов.

...