Oracle Apex:经典报告中的动态计算

时间:2015-12-07 12:34:42

标签: javascript oracle oracle-apex

我有一个应用程序,我在其中创建了基于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行的总和

  4. 如果需要提供任何其他信息以了解问题,请告诉我。

    谢谢。

    Oracle apex 4.2版本

1 个答案:

答案 0 :(得分:2)

我假设您知道如何使用浏览器的Inspect element功能获取attribute5列下文本框的name属性。它类似于" 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");
        }

然后在&#34;当页面加载时执行&#34;页面的属性,输入以下代码行:

  setTotals(itemname );
  setOnChangeEvent(itemname );

一个例子是

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

以下是对代码的简要说明:

功能&#34; setTotals&#34;执行以下操作:

它在参数s&#34; f02&#34;中提供的名称下,从第1个到第4个文本框的总和设置小计框的值。          它还从第6个文本框和为小计文本框计算的值的总和设置“总计”框的值。

功能&#34; setOnChangeEvent&#34;执行以下操作:

它将box 1到4的onchange事件设置为setTotals(&#34; f02&#34;),所以如果您要检查上面提到的其中一个框,它现在看起来像这样:

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

它还设置了第6个框的更改事件。(在其更改事件中发生的事情是自我解释,我想,只需查看代码)          此函数的最后一部分禁用第4和第7个文本框。