You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle APEX中保存订单后自动运行Jasper Report的实现方法

在Oracle APEX中实现保存后自动生成Jasper报表的方案

方法一:利用保存按钮的成功回调

  • 找到你的保存按钮(如P58_SAVE),进入编辑界面
  • 在行为属性组中,找到成功时的JavaScript选项
  • 将你的打印报表代码直接粘贴到该输入框中:
    var order_no = $v('P58_ORDER_NO');
    if (order_no) {
      var url = 'http://jasper.maxapex.net:8090/JasperReportsIntegration/report?_repName=A244785/LabOrderReport&_repFormat=pdf&standAlone=true&_dataSource=ZIA_A244785_2064&order_id=' + order_no;
      window.open(url, '_blank');
    } else {
      alert('Order number is required.');
    }
    
  • 注意:如果订单号是保存后才生成的,需确保P58_ORDER_NO已被刷新为最新值——可在保存的页面处理中先通过APEX_UTIL.SET_SESSION_STATE('P58_ORDER_NO', 新订单号)设置会话状态,再在按钮回调中先执行apex.item('P58_ORDER_NO').refresh()刷新项,再执行报表代码。

方法二:通过动态动作触发

  • 创建新动态动作,触发条件选择按钮点击,关联你的保存按钮
  • 设置动态动作的执行顺序为晚于保存对应的页面处理(确保保存流程先完成)
  • 添加第一个执行动作:刷新,选择要刷新的项P58_ORDER_NO(若订单号为保存后生成,此步骤必须)
  • 添加第二个执行动作:执行JavaScript代码,粘贴你的打印报表代码
  • (可选)设置动态动作的条件为页面无错误,避免保存失败时仍触发报表生成

方法三:在保存的PL/SQL处理中调用JavaScript

如果保存逻辑是通过PL/SQL页面处理实现的,可在PL/SQL代码末尾添加以下代码:

APEX_JAVASCRIPT.EXECUTE(
    p_code => 'var order_no = $v(''P58_ORDER_NO''); if (order_no) { var url = ''http://jasper.maxapex.net:8090/JasperReportsIntegration/report?_repName=A244785/LabOrderReport&_repFormat=pdf&standAlone=true&_dataSource=ZIA_A244785_2064&order_id='' + order_no; window.open(url, ''_blank''); } else { alert(''Order number is required.''); }'
);
  • 注意:PL/SQL中的单引号需用两个单引号转义;同样要确保P58_ORDER_NO的会话状态已被正确设置,必要时结合页面项刷新操作。

额外注意事项

  • 部分浏览器会拦截window.open触发的新标签页,需提醒用户允许当前站点的弹窗权限
  • 所有方法都需确保保存流程执行完成且无错误后,再触发报表生成逻辑

内容的提问来源于stack exchange,提问作者Abdullah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 11:08:29