在 APEX 5.1 的交互式报告中选中相关复选框时如何启用选择列表

Posted

技术标签:

【中文标题】在 APEX 5.1 的交互式报告中选中相关复选框时如何启用选择列表【英文标题】:How to enable select list when related checkbox is checked in interactive report in APEX 5.1 【发布时间】:2017-08-13 17:54:19 【问题描述】:

我在 Oracle APEX 5.1 中创建了一个关于 SQL 查询的交互式报告,并且我添加了另外两列进行查询。一个是报告中每一行的复选框,另一个是包含每行数字的选择列表。 SQL查询写在下面。我想要做的是在选中相关复选框时启用选择列表,否则最终用户不应该能够从列表中选择数字。我知道这可以通过动态操作来完成,但我无法指出解决方案。

为什么我要禁用选择列表:我可以通过 pl/sql 中的 for 循环通过名为 APEX_APPLICATION.G_F01 的数组达到复选框的返回值。在数组内部,有已检查的行,但我无法通过 APEX_APPLICATION.G_F02 达到已检查的行数,这是选择列表的值数组,因为该数组还包含不需要的、未检查的值列。我找到了在选中复选框时启用选择列表的解决方案。

查询:

SELECT  APEX_ITEM.CHECKBOX2(1,URUN.BARKOD) "Select", U.AD, MA.AD MAGAZA_ADI, FIYAT, APEX_ITEM.SELECT_LIST(
        p_idx           =>   2,
        p_list_values   =>   '1;1,2;2,3;3,4;4,5;5,6;6,7;7,8;8,9;9,10;10',
        p_show_null     =>   'YES',
        p_null_value    =>   NULL,
        p_null_text     =>   '-0-',
        p_item_id       =>   'f03_#ROWNUM#',
        p_item_label    =>   'Label for f03_#ROWNUM#') "Adet"
FROM URUNSATIS URUN, UYE UN, ADRES AD, ANLASMALAR AN, MAGAZA MA, URUN U
WHERE UN.USERNAME = :SESSION_USER_NAME AND UN.ID = AD.UYE_ID AND AD.APARTMAN_ID = AN.APARTMAN_ID AND AN.MAGAZA_ID = URUN.MAGAZA_ID AND MA.ID = URUN.MAGAZA_ID AND U.BARKOD=URUN.BARKOD
ORDER BY 1;

这个问题背后的想法:我希望最终用户从报告中选择产品,当他们选择所需产品的复选框时,他们应该能够选择他们想从市场订购的产品数量。我被困在应用程序的这个阶段。我对解决这个问题的任何新想法持开放态度。

【问题讨论】:

【参考方案1】:

您可以使用复选框上的p_checked_attributes 选项来跟踪通过隐藏项检查了哪些项,然后根据该值是否包含在隐藏项中进行动态操作来禁用/启用。

所以你的选择查询看起来像这样:

SELECT 
    APEX_ITEM.CHECKBOX2(p_idx => 1, 
                        p_value => URON.BARKOD,
                    --    p_attributes => 'class="barkod"', use this value if you want to keep track after refresh
                        p_checked_values => :P1_BARKOD_LIST,
                        p_checked_values_delimiter => ',') AS "SELECT",
    U.AD, MA.AD MAGAZA_ADI, FIYAT, 
    APEX_ITEM.SELECT_LIST(
        p_idx           =>   2,
        p_list_values   =>   '1;1,2;2,3;3,4;4,5;5,6;6,7;7,8;8,9;9,10;10',
        p_show_null     =>   'YES',
        p_null_value    =>   NULL,
        p_null_text     =>   '-0-',
        p_item_id       =>   'f03_#ROWNUM#',
        p_item_label    =>   'Label for f03_#ROWNUM#') "Adet"
FROM URUNSATIS URUN, UYE UN, ADRES AD, ANLASMALAR AN, MAGAZA MA, URUN U
WHERE UN.USERNAME = :SESSION_USER_NAME AND UN.ID = AD.UYE_ID AND AD.APARTMAN_ID = AN.APARTMAN_ID AND AN.MAGAZA_ID = URUN.MAGAZA_ID AND MA.ID = URUN.MAGAZA_ID AND U.BARKOD=URUN.BARKOD
ORDER BY 1;

【讨论】:

感谢您的回答。它适用于跟踪复选框,但我仍然很困惑如何在选中相关复选框时为每一行启用选择列表。我找不到选择列表列作为要在真实条件部分的动态操作屏幕上启用的项目或列。你有什么建议吗?【参考方案2】:
    为您的复选框添加一个类属性 将您的选择列表 ID 命名为固定
SELECT  APEX_ITEM.CHECKBOX2(1,URUN.BARKOD,'class=indCheck') "Select", U.AD, MA.AD MAGAZA_ADI, FIYAT, APEX_ITEM.SELECT_LIST(
        p_idx           =>   2,
        p_list_values   =>   '1;1,2;2,3;3,4;4,5;5,6;6,7;7,8;8,9;9,10;10',
        p_show_null     =>   'YES',
        p_null_value    =>   NULL,
        p_null_text     =>   '-0-',
        p_item_id       =>   'indSelect',
        p_item_label    =>   'Label for f03_#ROWNUM#') "Adet"
FROM URUNSATIS URUN, UYE UN, ADRES AD, ANLASMALAR AN, MAGAZA MA, URUN U
WHERE UN.USERNAME = :SESSION_USER_NAME AND UN.ID = AD.UYE_ID AND AD.APARTMAN_ID = AN.APARTMAN_ID AND AN.MAGAZA_ID = URUN.MAGAZA_ID AND

MA.ID = URUN.MAGAZA_ID 和 U.BARKOD=URUN.BARKOD 按 1 排序;

    现在创建一个动态动作,点击复选框执行 javascript 代码:

    这里是javascript代码

    $(this.triggeringElement).closest('tr').find('td select#indSelect').attr('disabled',false); if ( $(this.triggeringElement).is(':checked') ) $(this.triggeringElement).closest('tr').find('td select#indSelect').attr('disabled',true);

【讨论】:

天啊!!它真的奏效了。我非常感谢你。非常感谢您为我提供解决方案,因为我不了解 JS,所以我在这个问题上工作了好几天。我马上要开始学习JS了。。再次感谢。。

以上是关于在 APEX 5.1 的交互式报告中选中相关复选框时如何启用选择列表的主要内容,如果未能解决你的问题,请参考以下文章

Oracle Apex 5.1:基于 LOV(值列表)的报告列显示返回值而不是显示值

如何处理 Oracle APEX 报告中的复选框项目?

Oracle Apex - 动态检查不在报告中的复选框项目

在 Oracle APEX 交互式报表中更新与过滤器相关的页面项目

永久突出显示交互式报告上的行 APEX

如何获取要显示在 Oracle APEX 交互式报告中的图像或链接?