|
Как обнулить глобаные переменные APEX_APPLICATION.G_F0X ?
|
|||
---|---|---|---|
#18+
Всем привет! Нужна помощь зала - я уже третий день бьюсь над проблемой. Мне нужно сделать "простенькое приложение" на APEXе, чтобы позволить соседнему отделу загружать в базу их данные. Я не специалист в АРЕХе ни разу, но задачку решить нужно. В обещем, есть лист заказчиков на странице 1. По клику на имя заказчика попадаешь в Tabular Form в которой есть список критериев и для каждого критерия есть несколько параметров, которые должны отмечатья при помощи check box. То есть такая большая таблица из чек боксов. Для снятия данных с чек боксов используются APEX_APPLICATION.G_F01(i) ... APEX_APPLICATION.G_F05(i), куда записыватся SOME_ID. apex_item.checkbox(1,"SOME_ID"), apex_item.checkbox(2,"SOME_ID") и т.д. Потом по Submit выполняется LOOP for i in 1..APEX_APPLICATION.G_F01.count update #OWNER#.<table_name> set <fileds> WHERE "SOME_ID" = APEX_APPLICATION.G_F01(i) Все прекрасно работает, но только ОДИН раз. То есть для одного заказчика все заполняется ожидаемо, но когда пытаешься заполнить эту таблицу для второго заказчика, записываются данные от первого плюс данные от второго. То есть после выхода со страницы массивы APEX_APPLICATION.G_F01(i) не обнуляются. Хуже того, они не обнуляются даже при выходе из приложения. Как их обнулить принудительно? Во всех примерах этот вопрос почему-то не рассматривается вообще, все кончается на заполнении данными базы (или удалении из базы). А вот как сбросить то, что было уже заполнено? Просто так в лоб APEX_APPLICATION.G_F01(i) := NULL; увы не работает, а как сделать правильно, я не могу найти. Спасибо за ответы. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2011, 18:01 |
|
Как обнулить глобаные переменные APEX_APPLICATION.G_F0X ?
|
|||
---|---|---|---|
#18+
Rssla, 0. Версия APEX. 1. Запрос, которым заполняется табличная форма. 2. Пример на apex.oracle.com был бы прекрасным дополнением. 3. Это не по сабжу, но Вы в курсе об особенностях работы с флажками (checkbox) в табличных формах? Или у Вас количество циклов равно количеству столбцов с флажками? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2011, 18:13 |
|
Как обнулить глобаные переменные APEX_APPLICATION.G_F0X ?
|
|||
---|---|---|---|
#18+
suPPLerЭто не по сабжу, но Вы в курсе об особенностях работы с флажками (checkbox) в табличных формах? Или у Вас количество циклов равно количеству столбцов с флажками? Видимо, так и есть suPPLerLOOP for i in 1..APEX_APPLICATION.G_F01.count update #OWNER#.<table_name> set <fileds> WHERE "SOME_ID" = APEX_APPLICATION.G_F01(i) Ошибка здесь, в чекбоксах хрянятся только список выделенных значений, в то время как во всех остальных коллекциях хранится весь список. Т.е. фильтрует то он правильно, а сопоставить коллекции не может. Для этого конкретно в чекбоксах нужно хранить не SOME_ID, а номер строки (rownum +осторожно с сортировками). Пример: DECLARE p_delete_cnt number := 0; begin -- всегда пробегаются только выделенные checkboxes -- apex_application.g_f30(i) - номер выделенной строки / checkbox for i in 1 .. apex_application.g_f30.count loop -- все кроме новой добавленной строки if apex_application.g_f33( apex_application.g_f30(i) ) is not null then -- удаляем delete from mytable where id = apex_application.g_f31( apex_application.g_f30(i) ); p_delete_cnt := p_delete_cnt + 1; end if; end loop; ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2011, 21:13 |
|
Как обнулить глобаные переменные APEX_APPLICATION.G_F0X ?
|
|||
---|---|---|---|
#18+
Вот еще пример -- всегда пробегаются только выделенные checkboxes for i in 1 .. apex_application.g_f01.count loop -- доп условия if apex_application.g_f01(i) is not null and apex_application.g_f20( apex_application.g_f01(i) ) is not null then insert into mytable( ... ) values( :P1_MY_ID, apex_application.g_f05( apex_application.g_f01(i) ), apex_application.g_f10( apex_application.g_f01(i) ), apex_application.g_f15( apex_application.g_f01(i) ), apex_application.g_f16( apex_application.g_f01(i) ), apex_application.g_f19( apex_application.g_f01(i) ), apex_application.g_f20( apex_application.g_f01(i) ) ); end if; end loop; Там с update всё аналогично, лень искать ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2011, 21:20 |
|
Как обнулить глобаные переменные APEX_APPLICATION.G_F0X ?
|
|||
---|---|---|---|
#18+
suPPLer, 0.версия 3.2 1. SELECT ...... "OBL_ID", ob.name obligation_name, -- это ID критерия, который фактически является номером строки (и его название) apex_item.checkbox(1,m."ID", DECODE(m."REP_REQUIRED", 1, 'CHECKED',NULL)) r_req, apex_item.checkbox(2,m."ID", DECODE(m."CUST_OPERATIONAL", 1, 'CHECKED',NULL)) cust_op, ..... where .... m.cust_id = :P4_CUSTOMERS 2.какой пример на apex.oracle.com ? 3. очень может быть, что не в курсе :-) да, у меня количество циклов равно количеству столбцов с флажками, а для каждого столбика своя G_F0. Это не правильно? А что делать вместо этого? Тот факт, что записываются только выделенные флажки, как раз не проблема. Проблема в том, например, что эти самые G_F0 как-то странно себя ведут. Например, если я выделяют ОДИН флажок во втором столбике (соответствует G_F02), то почему-то записываются данные для ВСЕХ строк (если вызвать эту страничку для это кастомера еще раз, то весь столбик будет выделен). Причем этот эффект почему-то только для G_F02, для других столбиков флажки заполняются случайным образом. Я обсолютно не понимаю поведение этих переменных, я пыталась поискать документацию о том, как это все работает, но что-то как-то пусто. @SvUser то самое SOME_ID фактически соответствует номеру строки, это номер критерия. но я не знаю, как будут эти криетрии отсортированы, так что, полагаю, использование этого ай ди надежнее, чем просто номер строки. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2011, 12:09 |
|
Как обнулить глобаные переменные APEX_APPLICATION.G_F0X ?
|
|||
---|---|---|---|
#18+
Rsslaто самое SOME_ID фактически соответствует номеру строки, это номер критерия. но я не знаю, как будут эти криетрии отсортированы, так что, полагаю, использование этого ай ди надежнее, чем просто номер строки. В том-то и суть. т.е. у вас допустим 3 строки, и 3 столбца, hidden + 2 checkbox, следующим образом заполнены: Код: plaintext 1. 2.
тогда коллекции будут: g_f01: 1, 2, 3 g_f02: x, y g_f03: z т.е. ваши checkbox-ы нельзя сопоставлять в одном апдейте, Код: plaintext 1.
Обратите внимание как должен генерироваться html, если проставить в checkbox правильный rownum (с учетом сортировок): <input type="checkbox" name="f30" value="1" id="f30_0001" /> <input type="checkbox" name="f30" value="2" id="f30_0002" /> <input type="checkbox" name="f30" value="3" id="f30_0003" /> Проверьте, что у вас также, нумерация идёт по порядку. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2011, 12:52 |
|
Как обнулить глобаные переменные APEX_APPLICATION.G_F0X ?
|
|||
---|---|---|---|
#18+
Rssla1. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Как раз интересны FROM и WHERE полностью. Если не можете показать, чтобы не разглашать лишнего, создайте подобные таблицы T1, T2 и т.п. Попробуйте поработать с ними. Эффект непонятной работы коллекций остался? Rssla2.какой пример на apex.oracle.com ? http://apex.oracle.com Регистрируетесь, получаете доступ, создаёте таблицу, приложение, страницу, которая работает с коллекциями. Проблема повторяется - даёте сюда данные учётки, чтобы можно было посмотреть, как конкретно Вы работаете с apex_item и коллекциями apex_application. Пока есть варианты: 0. У Вас ошибка в одном из процессов, который работает с коллекциями. 1. У Вас ошибка в запросе. 2. На странице есть JS-код, который творит подобное безобразие. 3. Никому не встретившийся за время работы с 3.2 баг. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2011, 12:58 |
|
Как обнулить глобаные переменные APEX_APPLICATION.G_F0X ?
|
|||
---|---|---|---|
#18+
SvUser, Rsslaу меня количество циклов равно количеству столбцов с флажками, а для каждого столбика своя G_F0. Если я правильно расшифровал, то у ТС для N столбцов с флажками в процессе выполняется N циклов по соответствующим коллекциям, в каждом из которых изменяются строки, для которых выделен конкретный флажок. Так что проблемы сжатого хранения отмеченных флажков в APPLICATION_ITEM.g_f0X её не касаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2011, 13:04 |
|
Как обнулить глобаные переменные APEX_APPLICATION.G_F0X ?
|
|||
---|---|---|---|
#18+
В любом случае нужно проверить исходные html, что нумерация нигде не сбита и идёт по-порядку. Rsslaэто номер критерия. но я не знаю, как будут эти криетрии отсортированы Да и еще, вырубите стандартную сортировку, если включена по столбцам, она не совсем совместима с apex_item, её нужно делать руками. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2011, 13:10 |
|
Как обнулить глобаные переменные APEX_APPLICATION.G_F0X ?
|
|||
---|---|---|---|
#18+
suPPLerЕсли я правильно расшифровал, то у ТС для N столбцов с флажками в процессе выполняется N циклов по соответствующим коллекциям, в каждом из которых изменяются строки, для которых выделен конкретный флажок. Так что проблемы сжатого хранения отмеченных флажков в APPLICATION_ITEM.g_f0X её не касаются. а как же: LOOP for i in 1..APEX_APPLICATION.G_F01.count update #OWNER#.<table_name> set <fileds> WHERE "SOME_ID" = APEX_APPLICATION.G_F01(i) Если APEX_APPLICATION.G_F01 - checkbox, то откуда возьмутся сопоставленные ему set <fileds> ? В баг, которого ни у кого не было не верю, Rssla, если еще не нашли ошибку, привидите пожалуйста этот кусок кода полностью, ошибка скорее всего здесь. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2011, 13:19 |
|
Как обнулить глобаные переменные APEX_APPLICATION.G_F0X ?
|
|||
---|---|---|---|
#18+
SvUserа как же: LOOP for i in 1..APEX_APPLICATION.G_F01.count update #OWNER#.<table_name> set <fileds> WHERE "SOME_ID" = APEX_APPLICATION.G_F01(i) Если APEX_APPLICATION.G_F01 - checkbox, то откуда возьмутся сопоставленные ему set <fileds> ? Да очень просто, глядя на уже приведённый ТС код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
То есть, одна строка таблицы обновится столько раз, сколько для неё отмечено флажков, завязанных на соответствующие поля. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2011, 13:36 |
|
Как обнулить глобаные переменные APEX_APPLICATION.G_F0X ?
|
|||
---|---|---|---|
#18+
suPPLerSvUserа как же: пропущено... Если APEX_APPLICATION.G_F01 - checkbox, то откуда возьмутся сопоставленные ему set <fileds> ? Да очень просто, глядя на уже приведённый ТС код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
То есть, одна строка таблицы обновится столько раз, сколько для неё отмечено флажков, завязанных на соответствующие поля. Даже так ошибка может быть здесь, если checkbox снимаем, APEX_APPLICATION.G_F01(i) его не содержит, REP_REQUIRED старое значение NULL не примет. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2011, 13:51 |
|
Как обнулить глобаные переменные APEX_APPLICATION.G_F0X ?
|
|||
---|---|---|---|
#18+
SvUserДаже так ошибка может быть здесь Вывод правильный, но пока что вся тема в стадии "может быть". ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2011, 15:02 |
|
Как обнулить глобаные переменные APEX_APPLICATION.G_F0X ?
|
|||
---|---|---|---|
#18+
Rssla, ждём подробностей :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2011, 18:25 |
|
Как обнулить глобаные переменные APEX_APPLICATION.G_F0X ?
|
|||
---|---|---|---|
#18+
с checkbox-ами действительно погорячился, по представленным огрызкам рано было делать выводы. Rssla, т.е. от вас требуется: 1. Полный код SQL запроса (можете заменить названия на схематические, но запрос нужен полный) 2. Полный код процесса обработки по Submit. 3. Вырубите стандартную сортировку по столбцам (на всякий случай, с checkbox'ами может и работает, зато с некоторыми другими элементами нет) 4. Если используется какой-то дополнительный код - вырубить. 5. Проверить триггеры в m и уникальность m."ID". т.е. либо табличная форма неправильно выводится, либо неправильно обрабатывается, либо ошибка в sql/триггерах. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2011, 16:55 |
|
|
start [/forum/topic.php?fid=50&msg=37372656&tid=1876445]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
187ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 21ms |
total: | 298ms |
0 / 0 |