Как включить список выбора, когда соответствующий флажок установлен в интерактивном отчете в APEX 5.1

Я создал интерактивный отчет по SQL-запросу в Oracle APEX 5.1 и добавил еще два столбца для запроса. Один из них - флажок для каждой строки в отчете, а другой - список выбора, содержащий номера для каждой строки. SQL-запрос написан ниже. Что я хочу сделать, так это разрешить выбор списка, когда установлен соответствующий флажок, в противном случае конечный пользователь не сможет выбрать номер из списка. Я знаю, что это можно сделать с помощью динамических действий, но я не мог указать на решение.

Почему я хочу отключить список выбора: я могу получить возвращаемое значение флажков через массив с именем APEX_APPLICATION.G_F01 с помощью цикла for в pl/sql. Внутри массива есть проверенные строки, но я не смог достичь количества проверенных строк через APEX_APPLICATION.G_F02, который является массивом значений списка выбора, потому что этот массив также содержит суммы нежелательных, непроверенных столбцов значений. Я нашел решение для включения списка выбора, когда флажок установлен.

QUERY:

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;

Идея, стоящая за этим вопросом: я хочу, чтобы конечные пользователи выбирали продукт из отчета, и когда они выбирают флажок желаемого продукта, они должны иметь возможность выбрать количество продукта, который они хотят заказать на рынке. Я застрял на этом этапе приложения. Я открыт для любой новой идеи для решения этой проблемы.

2 ответа

Решение

Вы могли бы использовать 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;
  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 AND U.BARKOD=URUN.BARKOD ЗАКАЗАТЬ НА 1;

  1. Теперь создайте динамическое действие при нажатии на ваш флажок выполнить код JavaScript: DA

  2. здесь код 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);

Другие вопросы по тегам