Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle Apex 4.2具有自定义事件的动态操作”;“卸载前”;不起作用_Oracle_Oracle Apex - Fatal编程技术网

Oracle Apex 4.2具有自定义事件的动态操作”;“卸载前”;不起作用

Oracle Apex 4.2具有自定义事件的动态操作”;“卸载前”;不起作用,oracle,oracle-apex,Oracle,Oracle Apex,因此,我创建了一个自定义动态操作,该操作应该在“卸载前”运行(以防用户意外关闭选项卡/浏览器或以非预期的方式离开页面)。此动态操作运行一个简单的plsql过程()。几天前,Chrome浏览器更新为80版,在这个新版本中,“beforeunload”是不允许的,现在我的动态操作不起作用 有人知道我如何以不同的方式构建此功能吗?Apex 4.2有问题 我猜你是在解雇页面中点击了不允许同步XHR,所以要翻页 您的DA为异步DA尝试设置的等待结果属性 你的动态行为是错误的 这里有一个完整的答案,你应该能

因此,我创建了一个自定义动态操作,该操作应该在“卸载前”运行(以防用户意外关闭选项卡/浏览器或以非预期的方式离开页面)。此动态操作运行一个简单的plsql过程()。几天前,Chrome浏览器更新为80版,在这个新版本中,“beforeunload”是不允许的,现在我的动态操作不起作用

有人知道我如何以不同的方式构建此功能吗?Apex 4.2有问题

我猜你是在解雇页面中点击了不允许同步XHR,所以要翻页 您的DA为异步DA尝试设置的等待结果属性 你的动态行为是错误的


这里有一个完整的答案,你应该能够适应你的情况

  • 创建新表以记录发送信标数据

    create table beacons (
      id        number generated always as identity primary key,
      app_user  varchar2(255),
      date_sent date,
      data      varchar2(4000)
    );
    
    我对数据使用了varchar2,但如果需要,可以使用CLOB。我将使用Ajax的p_clob_01参数传递数据

  • 在共享组件中创建一个名为RECEIVE\u BEACON的应用程序进程。将以下代码用于PL/SQL代码:

    insert into beacons (
      app_user,
      date_sent,
      data
    ) values (
      :APP_USER,
      sysdate,
      apex_application.g_clob_01
    );
    
  • 在卸载之前创建一个名为窗口的动态操作。将事件设置为自定义自定义事件设置为卸载前选择类型设置为JavaScript表达式JavaScript表达式设置为窗口

  • 为步骤3中创建的动态动作选择动作。将操作设置为执行JavaScript代码。将以下内容复制/粘贴到代码字段中

    var beaconData = {
      test: 'value'
    };
    
    var formData = new FormData();
    
    formData.append('p_flow_id', '&APP_ID.');
    formData.append('p_flow_step_id', '&APP_PAGE_ID.');
    formData.append('p_instance', '&APP_SESSION.');
    formData.append('p_debug', '');
    formData.append('p_request', 'APPLICATION_PROCESS=RECEIVE_BEACON');
    formData.append('p_clob_01', JSON.stringify(beaconData));
    
    navigator.sendBeacon('/pls/apex/wwv_flow.ajax', formData);
    

  • 保存更改并运行页面。然后刷新页面以触发动态操作并发送信标。本例展示了如何从JavaScript发送随机数据,同时获取与会话相关的数据,如用户名。

    您看到了吗?是的,我有…但我不知道如何在apexI中实现这一点,我可能会向您展示如何实现,但首先,请告诉我一些关于操作中的PL/SQL代码和JavaScript代码正在做什么(我需要确保您仍然可以这样做)。另外,您是否有能力在SQL Workshop中创建RESTAPI。。。我想我有一些足够通用的东西,你可以不用ORD。我很快会发布一个答案。谢谢你如此详尽的回答。即使取消勾选“等待结果”的动态行动解决了我的问题,我一定会研究你的解决方案!这使得它成为一个异步Ajax请求。一定要用不同的浏览器测试它。这篇文章似乎暗示它可能不适用于所有这些方法:“确保在卸载文档期间发送数据历来很困难,因为用户代理通常会忽略卸载处理程序中的异步XMLHttpRequests。”上述解决方案使用
    sendBeacon
    方法,它是为了做你正在做的事情而构建的,但是IE不支持它:关于这个的一点更新。所以我的解决方案不可靠。运行的过程是一个简单的delete语句,其中我传递了一个id,它从一个具有该id的表中删除了一行。我发现它并不是在测试环境中删除行(每次进行测试时,它都工作)。所以我决定试试你的解决方案。让它工作(当我测试它时)。但再一次,在测试中,我看到它并没有删除行。你知道为什么它不能100%的工作吗?所有用户都使用Chrome浏览器。所以“测试环境”是一群人使用Chrome手动测试应用程序?它不是自动化的吗?不,它不是自动化的。我能找到DA不触发的唯一情况是会话超时。考虑到行不被删除的频率,我怀疑这是一直在发生的事情。