Oracle Apex Ghosting Javascript外部文件(bug?)

Oracle Apex Ghosting Javascript external file (bug?)

本文关键字:bug 文件 外部 Apex Ghosting Javascript Oracle      更新时间:2023-09-26

这是一个棘手的问题(至少对我来说):

我创建了一个Javascript文件,我们称之为"test.js",我将其上传到SharedComponents->StaticFiles存储库,没有特别关联的应用程序。

这个文件被页面X引用,没有缓存设置,在Javascript->file URL字段上,如下所示:#WORKSPACE_IMAGES#test.js

到目前为止,库中的函数都被正确地调用和执行了。

但我在文件中遇到了一个小错误,我已经纠正了这个错误,然后在上传的文件版本中进行了修改(如果文件小于30000字节,我可以当场修改,点击应用更改)。在此之后,我删除了浏览器上的历史记录和临时文件。然而,当我再次运行该页面时,错误仍然存在,因为如控制台上所示,使用的文件是以前的文件,而不是固定版本。有点奇怪。。。好的,但这还不是全部,我决定从存储库中删除该文件,并在没有应用程序关联的情况下再次上传(同名"test.js"),再次删除浏览器上的历史记录和临时文件,然后再次运行页面。再一次(呵呵…)错误仍然存在,并且被调用的文件是不存在的。

因此,最后我决定做一个小魔术,删除文件但不上传,在页面属性中留下对#WORKSPACE_IMAGES#test.js的引用,在浏览器上删除历史记录和临时文件并再次运行,这次决定破坏页面,但它起作用了!,错误地,因为它是有缺陷的文件,但它在那里!,然后我说:"好吧,浏览器问题……",在Chrome上运行它(第一次)和它所在的文件,然后我说,"好的,机器问题。。。

该文件尚未被任何其他应用程序引用。在运行时,不存在的url的文件是:

http://192.168.141.14/apex/wwv_flow_file_mgr.get_file?p_security_group_id=3321831433497474&p_fname=test.js

我已经用一个新名称上传了同一个文件,比如test_1.js,将页面引用更改为这个新名称,然后页面加载正确的新文件。但这不是一个理想的行为,我很幸运,这是对文件的第一次引用,但如果这种情况发生在更高级的阶段,那将是一个大问题。

很抱歉让它有点宽泛,但我试着对此进行彻底的阐述,我错过了什么吗?为什么会发生这种情况?任何帮助都将不胜感激。

我正在使用:

APEX版本4.2.3.00.08

数据库

  • CORE 11.1.0.7.0生产
  • NLSRTL 11.1.0.7.0版-生产
  • Oracle数据库11g企业版11.1.0.7.0-64位
  • 生产PL/SQL版本11.1.0.7.0-生产
  • 适用于Solaris的TNS:11.1.0.7.0版-生产版

我找到了解决这个问题的方法,看起来它从APEX v3.1 开始就存在了

从PLSQL Developer运行以下代码作为顶点工作区所有者:

set serveroutput on
declare
  l_security_group_id number;
begin
  select workspace_id into l_security_group_id
  from   APEX_040200.APEX_WORKSPACES;
  wwv_flow_api.set_security_group_id
      (p_security_group_id => l_security_group_id);
  wwv_flow_api.create_or_remove_file
    ( p_name           => 'test.js'
    , p_location       => 'WORKSPACE'
    , p_mode           => 'REMOVE'
    , p_type           => 'JS'
    );
  commit;
end;

第一部分将顶点引擎设置为指向apex中正确的工作区id。

第二部分是从数据库中删除文件的过程。

尽管如此,如果apex引擎按预期删除了文件,那么这应该没有必要。。。

我已经看过这个问题好几次了(例如https://community.oracle.com/thread/867412?start=0&tstart=0),我觉得这是一个已知的问题,但我找不到一个像样的参考

下面是关于这个话题的更深入的对话https://community.oracle.com/thread/674635?start=0&tstart=0

我发现删除文件并重新加载是一种变通方法,或者将文件存储在web服务器上(如果可能的话)。