



SQL> SELECT line_name, max_kl_qty, effective_date_from, effective_date_to2 FROM demo_line_capacity_v;LINE_NAME MAX_KL_QTY EFFECTIVE_DATE_FROM EFFECTIVE_DATE_TO------------ ---------- ------------------- -----------------奶茶1#线 3000 2020/10/1 2020/10/31奶茶2#线 3000 2020/10/1 2020/10/31可乐1#线 3000 2020/10/1 2020/10/31可乐2#线 3000 2020/10/1 2020/10/31咖啡1#线 3000 2020/10/1 2020/10/31咖啡2#线 3000 2020/10/1 2020/10/31奶茶1#线 5000 2020/11/1 2020/11/30奶茶2#线 5000 2020/11/1 2020/11/30可乐1#线 5000 2020/11/1 2020/11/30可乐2#线 5000 2020/11/1 2020/11/30咖啡1#线 5000 2020/11/1 2020/11/30咖啡2#线 5000 2020/11/1 2020/11/3012 rows selected

SELECT line_name, max_kl_qty, effective_date_from, effective_date_toFROM demo_line_capacity_vWHERE :p20_report_mode = 'ALL'OR :p20_report_mode = 'CURR'AND SYSDATE BETWEEN effective_date_from AND effective_date_to
所以,所谓的“一键切换”,也就是添加一个按钮,使它在每次点击时,将变量的值在 ALL 和 CURR 之间切换即可




function (config){var $ = apex.jQuery,toolbarData = $.apex.interactiveGrid.copyDefaultToolbar(),resetButtonGroup = toolbarData.toolbarFind("actions4");//在“重置”按钮组添加切换按钮//由于按钮的标签将动态展示,故此处不设置icon等属性resetButtonGroup.controls.push({type: "BUTTON",id: "mode", //请关注这个IDaction: "modeBtnOnclick",hot: true});//绑定按钮的action//由于按钮的标签将动态展示,故此处不设置label等属性config.initActions = function (actions){actions.add({name: "modeBtnOnclick",action: modeBtnOnclick //为了代码简洁,我们将在页的全局JS中实现这个function});}config.toolbarData = toolbarData;return config;}
这里需要注意的是,脚本中虽然指定 BUTTON 的 id 为“mode”,但实际上页面最终生成的这个按钮的 id 会有变化,下图将是我们在页面查看到的原码

function setBtnLabel(){var mode = $v("P20_REPORT_MODE");//改变按钮的标签//利用到按钮的id - report_ig_toolbar_mode//如果当前是“查看全部数据”模式,按钮应该显式“仅看本月”if (mode == "ALL") $("#report_ig_toolbar_mode").html('<span class="t-Icon t-Icon--right fa fa-search"></span> <span class="a-Button-label">只看本月</span>');//如果当前是“仅看本月数据”模式,按钮应该显式“查看全部”if (mode == "CURR") $("#report_ig_toolbar_mode").html('<span class="t-Icon t-Icon--right fa fa-reply"></span> <span class="a-Button-label">查看全部</span>');}function modeBtnOnclick(){var mode = $v("P20_REPORT_MODE");//模式切换,即将变量值在ALL和CURR之间切换if (mode == "ALL") $("#P20_REPORT_MODE").val("CURR");if (mode == "CURR") $("#P20_REPORT_MODE").val("ALL");//静态刷新IG//利用到IG的静态ID - reportapex.region("report").refresh();//改变按钮标签setBtnLabel();}
众所周知,APEX 是支持 jQuery 的,在实现按钮的触发功能 modeBtnOnclick 时,我们应用到了前面强调过的 IG 的静态 ID 和按钮在页面中的实际id
setBtnLabel();
那么为什么不在按钮初始化时就把标签设置成“只看本月”(对应参数默认值 ALL,即查看全部数据模式)呢?这是为了应对以后的需求变化,例如报表默认模式改变、增加更多报表筛选模式等情形,这些情况将来只需改动很少的地方即可实现了





文章转载自SQL干货分享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




