【问题标题】:Oracle Apex: Dynamic Calculation in Classic ReportOracle Apex:经典报表中的动态计算
【发布时间】:2016-03-12 01:30:17
【问题描述】:

我有一个基于 SQL 查询创建经典报表的应用程序

Select summary_id,  
APEX_ITEM.HIDDEN(1,summary_id)||  
APEX_ITEM.TEXT(2,attribute5) attribute5 
from summary;

这里的summary_id和属性5是数字数据类型。

  1. 我有七(7 行)记录,其中列中的第 5 行和第 7 行是 sub_total 和 total 值。

  2. 我想根据前几行值的变化动态计算 sub_total 和 total。

  3. 第 5 行是第 1、第 2、第 3 和第 4 行的总和,第 7 行是第 1、第 2、第 3、第 4 和第 6 行的总和

如果需要提供任何其他信息来理解问题,请告诉我。

谢谢。

Oracle apex 4.2 版本

【问题讨论】:

  • 小计行是否始终为 5 和 7,或者行上是否有一个值可以识别这些?你能用数据显示summary 表吗?
  • 我已经为引用创建了工作区,工作区:apex_82 用户名:测试密码:test123

标签: javascript oracle oracle-apex


【解决方案1】:

我假设您知道如何使用浏览器的Inspect element 功能获取attribute5 列下的文本框的名称属性。它类似于“f01”、“f02”或更高,只需检查一下。 另一个假设(基于您给定的数据)是第 5 行包含第 1 到第 4 行的总数,第 7 行包含第 5 和第 6 行的总数。

获得名称后,将此函数粘贴到页面的“函数和全局变量声明”属性中:

    function setTotals(itemname){
            var v_subtotal=0;
            var v_total=0;
            for(i=0;i<4;i++){
                v_subtotal = Number(v_subtotal) + Number(document.getElementsByName(itemname)[i].value);
            }
            v_total = Number(v_subtotal) + Number(document.getElementsByName(itemname)[5].value);
            document.getElementsByName(itemname)[4].value = v_subtotal;
            document.getElementsByName(itemname)[6].value = v_total;
        }

        function setOnChangeEvent(itemname){
            for(i=0;i<4;i++){
                document.getElementsByName(itemname)[i].setAttribute("onchange","setTotals(\"" + itemname + "\")");
            }
            $("[name=" + itemname + "]").eq(5).change(function(){
                $("[name=" + itemname + "]").eq(6).val(Number($("[name=" + itemname + "]").eq(4).val()) + Number($("[name=" + itemname + "]").eq(5).val()));
            });
            $("[name=" + itemname + "]").eq(4).attr("disabled","disabled");
            $("[name=" + itemname + "]").eq(6).attr("disabled","disabled");
        }

然后在页面的“页面加载时执行”属性中,输入以下代码行:

  setTotals(itemname );
  setOnChangeEvent(itemname );

一个例子是

 setTotals("f02");
 setOnChangeEvent("f02");

下面是代码的简要说明:

“setTotals”函数执行以下操作:

它将小计框的值设置为您在参数“f02”中提供的名称下的第一个到第四个文本框的总和。 它还根据第 6 个文本框的总和和为小计文本框计算的值设置总计框的值。

“setOnChangeEvent”函数执行以下操作:

它将框 1 到 4 的 onchange 事件设置为 setTotals("f02") 因此,如果您要检查上述框之一,它现在看起来像这样:

<input onchange="setTotals('f02')" name="f02" size="20" maxlength="2000" value="5" type="text">

它还设置了第 6 个盒子的 change 事件。(我认为它的 change 事件发生的事情是不言自明的,只需看代码) 该函数的最后一部分禁用了第 4 和第 7 个文本框。

【讨论】:

  • 嗨 Vace,我尝试了上面的代码并进行了必要的更改,但它仍然没有动态计算值。我已经粘贴了代码并更改了我的工作区,请您查看一下。
  • 我无法登录到您的工作区。我尝试了所有大写字母、initcap、小型大写字母……没有任何效果
  • 嗨,请试试这个:工作区:apex_82 用户名:测试密码:test1234
  • 您本可以自己找出问题所在,但无论如何,我为您编辑了代码,现在它可以正常工作了。为了他人的利益,我还编辑了这个答案。您还会注意到,出于明显的数据完整性原因,我已禁用小计和总计行的行。如果你使用 apex,你会遇到这样的任务,所以你最好考虑学习 DOM 和更多的 javascript/jQuery
  • 感谢 Vance 的帮助,我找到了我的代码无法正常工作的原因。在同一页面中,我有一个表格形式和 javaScript 来动态计算值。我们有没有办法区分我的表格形式名称“f02”和经典报告名称“f02”?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多