Oracle apex Oracle APEX将值设置为Ajax进程中的页面项

Oracle apex Oracle APEX将值设置为Ajax进程中的页面项,oracle-apex,oracle-apex-19.1,Oracle Apex,Oracle Apex 19.1,我正在尝试将文档从APEX页面上传到S3 bucket,在插件的帮助下,我成功了: 插件演示如何检索上传结果并插入到表中,如下所述 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"

我正在尝试将文档从APEX页面上传到S3 bucket,在插件的帮助下,我成功了:

插件演示如何检索上传结果并插入到表中,如下所述

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");
},
并在Ajax过程中检索x0值并插入到表中

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;
但是,我需要在Ajax过程中捕获X0值并分配给表单页面项,因为我必须将输出与其他表单字段一起存储并存储到表中。我已经试过了,但是没有更新。非常感谢您的帮助

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;

:P12_DOCUMENTURL:=l_服务器_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;
更多详情请参阅-

也请看一下这个


有关发布的提交的更多讨论。

最后,这对我很有用

动态动作

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\u Ajax\u进程”,带有一些伪语句。如果没有这一点,我将得到“错误:SyntaxError:JSON中位置0处的意外标记P”


你是如何证实它不起作用的?对于P12_DOCUMENTURL,您是否看到Source下的维护会话状态设置?如果是,它设置为什么?它设置为每个请求。我希望在上传文档后,输入项应该显示数据(x01),但是它是空的,并且在表中插入为空,正如您所说的“一旦上传文档”。但是,更新会话状态与更新DOM/web页面不同。如果希望在页面上显示值,则需要:a)刷新页面(使用会话状态中的值重新提交页面)或b)将值作为Ajax调用的一部分带回DOM,并将其映射到页面中的正确项。我推荐选项b。我尝试过同样的方法,无论是否有明确的提交,仍然没有运气。声明l_server_id varchar2(4000):=apex_application.g_x01;l_name varchar2(4000):=apex_application.g_x02;l_尺寸编号:=apex_应用程序g_x03;l_型varchar2(4000):=apex_应用程序g_x04;开始APEX_UTIL.set_session_state('P12_DOCUMENTURL',l_server_id);:P12\u文档类型:=l\u类型;:P12_DOCSIZE:=l_大小;owa_util.status_行(nstatus=>204,creason=>“无内容”);犯罪结束@aaludra,你是在检查会话还是页面上的项目?页面上的项目将显示旧值。只有会话状态将显示新值。正在查找要用值更新的页面项。如何从会话状态获取值?目标是在成功上传文件后向用户显示输出您可以使用--apex.item('P12_DOCUMENTURL').setValue(this.browservevent.originalEvent.detail.serverId)从javascript函数更新它;
begin
  owa_util.status_line(nstatus => 204, creason => 'No Content');
end;