Как включить список выбора, когда соответствующий флажок установлен в интерактивном отчете в 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;
- добавить атрибут класса к вашему флажку
- назовите свой список выбора 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;
Теперь создайте динамическое действие при нажатии на ваш флажок выполнить код 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);