powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Подскажите где моя ошибка
5 сообщений из 5, страница 1 из 1
Подскажите где моя ошибка
    #39065990
band_it
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я создаю Интерактивный репорт где дата из одной таблицы xxmy_table.
Использую APEX_ITEM для создания динамических колонок.
Примерно так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
select apex_item.checkbox(1, x.HEADER_ID ||'.'||x.LINE_ID) as "#"
       x.name,
       apex_item.select_list_from_lov(2, x.STATUS, 'ROW_STATUS') as STATUS,
       apex_item.text(3, x.remarks) as REMARKS
       x.update_date,
       x.updated_by 
from   xxmy_table x



Дальше я определяю колонки, которые созданы с APEX_ITEM как Standard Report Column.
На странице создаю кнопку, которой даю имя UPDATE и задаю ей выполнять Submit Page.
Создаю процесс в Page Processing, который по сути будет делать Update (Process Point - On Submit Before Computations and Validations). Процесс выполняется после нажатии на кнопку Update.
Примерно так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
begin
  FOR i in 1..APEX_APPLICATION.G_F01.COUNT 
  LOOP
     update xxmy_table
        set status = APEX_APPLICATION.G_F02(i),
            remarks = APEX_APPLICATION.G_F03(i),
            updated_by = v('APP_USER'),
            update_date = sysdate
      where HEADER_ID ||'.'|| LINE_ID = APEX_APPLICATION.G_F01(i);
  END LOOP;
end;



Вопрос: Почему при UPDATE передаются не данные отмеченной/ых строк, а начальных строк/и репорта.
Поясню. Допустим в таблице 10 строк. Я отмечаю 5 и 9 строку в checkbox и меняю значения в status и remarks.
Нажимаем на Update. То что происходит это то что в 5 и 9 строку передаются значения 1 и 2 строки (не отмеченных в checkbox).
Почему ?

Документацию изучил вдоль и поперек и не могу понять где я скривил.

Что я забыл или пропустил ?
...
Рейтинг: 0 / 0
Подскажите где моя ошибка
    #39066014
heavyside
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
band_it,

Сабмитятся у чекбоксов только отмеченные значения. А вот у остальных коллекций сабмитятся все)
проверьте: длина коллекции f01 = 2,а f02 и f03 - 10.
Вариантов много решения. Конкретно сейчас мне больше нравится создать хидден рядом с чекбоксом, и искать при сабмите истинную позицию строки.
Код: sql
1.
2.
3.
4.
5.
6.
7.
select apex_item.checkbox(1, x.HEADER_ID ||'.'||x.LINE_ID)||apex_item.hidden(10,x.HEADER_ID ||'.'||x.LINE_ID) as "#"
       x.name,
       apex_item.select_list_from_lov(2, x.STATUS, 'ROW_STATUS') as STATUS,
       apex_item.text(3, x.remarks) as REMARKS
       x.update_date,
       x.updated_by 
from   xxmy_table x



ну и при сабмите понятно надо устанавливать соответствие между значением чекбокса в f01 и позицией этого значения в f10.
Минус- доп. инфа как при выводе. так и при сабмите, а количество айтемов для сабмита может быть ограничено на сервере и при большом количестве строк на него можно натолкнуться чуть раньше)

Второй вариант - воспроизводить запрос и находить номер строки. Но это работает, когда последовательность вывода всегда постоянная и в репорте отключены сортировки.

Третий вариант сделать через AJAX и передавать только отмеченные строки. Сложнее, но наверно самый правильный. И страница не будет перезагружена.
...
Рейтинг: 0 / 0
Подскажите где моя ошибка
    #39066219
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
begin
  FOR i in 1..APEX_APPLICATION.G_F01.COUNT 
  LOOP
     update xxmy_table
        set status = APEX_APPLICATION.G_F02(APEX_APPLICATION.G_F01(i)),
            remarks = APEX_APPLICATION.G_F03(APEX_APPLICATION.G_F01(i)),
            updated_by = v('APP_USER'),
            update_date = sysdate
      where HEADER_ID ||'.'|| LINE_ID = APEX_APPLICATION.G_F01(i);
  END LOOP;
end;
...
Рейтинг: 0 / 0
Подскажите где моя ошибка
    #39066227
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blkangel
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
begin
  FOR i in 1..APEX_APPLICATION.G_F01.COUNT 
  LOOP
     update xxmy_table
        set status = APEX_APPLICATION.G_F02(APEX_APPLICATION.G_F01(i)),
            remarks = APEX_APPLICATION.G_F03(APEX_APPLICATION.G_F01(i)),
            updated_by = v('APP_USER'),
            update_date = sysdate
      where HEADER_ID ||'.'|| LINE_ID = APEX_APPLICATION.G_F01(i);
  END LOOP;
end;


Ступил, прошу не обращать внимание на мой пост внимания.
...
Рейтинг: 0 / 0
Подскажите где моя ошибка
    #39067808
band_it
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
heavyside,
Спасибо за разьяснение. Сам до этого не догнал.
Мне тоже симпатичен больше 3й вариант, хотя с AJAX пока мало общался.
Придется знакомится на ходу.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Подскажите где моя ошибка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]