Гость
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Инициализация значений по умолчанию до открытия страницы. / 3 сообщений из 3, страница 1 из 1
05.02.2009, 16:36
    #35799764
Varlock9000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация значений по умолчанию до открытия страницы.
Вобщем у меня Оракл 10.2.0.1.0, АРЕХ 3.1.0.00.32.
Проблемма стоит такая: само приложение выглядит так: есть 7 страниц, из них последняя 7-ая это отчёт, который генерируется на основе значений введённых пользователем на предидущих страницах. На остальных страницах имеются поля для ввода, радиогруппы, чекбоксы и т.п. При этом пользователь перемещается по страницам свободно(вверху менюшка, и можно выбрать сразу любую страницу, хоть отчёт хоть любую для заполнения), кнопок нет, выбранные/введённые пользователем значения хранятся в переменных сессии (т.е. ввёл значение нажал на ссылку другой страницы). При входе на страницу с отчётом срабатывает процесс, который заполняет невидимые поля на странице, которые в последствии будут использоваться для отчёта, выглядит это примерно так:
Код: plaintext
1.
2.
3.
4.
IF :P1_ALL_USERS = 'Y' THEN
:P107_USER := '%';
ELSE
:P107_USER := :P1_USERS;
END IF;
Проблемма состоит в том, что если пользователь добросовестно прошёлся по всем страницам, даже не заполняя информации, просто пролистав их, то всё работает нормально, все значения по умолчанию срабатывают и т.п., если же пользователь просто пропускает страницу и идёт сразу смотреть отчёт, то почему-то чекбокс :P1_ALL_USERS которые имеет значение 'Y' по умолчанию не срабатывает, и радиогруппа :P1_USERS, которая тоже по умолчанию имеет значение, тоже остаётся пустой, вместо отчёта получаю "no data found".
Я так понимаю, что это связано с тем, что инициализация значений по умолчанию происходит в момент первого открытия страницы, можно ли как-то указать, чтобы она происходила в момент запуска приложения?
у меня пока есть только одна идея - провести инициализацию всего ручками на странице авторизации, но встаёт проблемма, что данное приложение является частью более масштабного проэкта и вполне вероятно, что в дальнейшем будет использоваться другая схема авторизации, а возможно пользователи будут переходить без авторизации из другого приложения, опять же на произвольную страницу...
ещё я пытался проверять данные переменные на равенство NULL или просто c "", '', в случаях с текстовыми полями помогло, а радиобаттоны и чекбоксы всёравно категорически отказываются проверяться подобным образом...
Вобщем, какие идеи, как можно заставить работать отчёт, чтобы не приходилось тыркать по всем страницам?

З.Ы. и уж в этой же теме, относительно значений по умолчанию:
у меня половина радиогрупп используют динамические LOV, и значения в них вполне могут меняться, например :P1_USERS это какраз список всех пользователей, я поставил, что по умолчанию выбран пользователь с ID=1, но что будет когда его удалят? как сделать, чтобы просто был всегда выбран кто-то существующий?(первый по списку, допустим...)

и до кучи, тоже со значениями по умлчанию +) всё на той же странице, чекбокс :P1_ALL_USERS, который отвечает за то, чтобы отчёт был по всем пользователям, по умолчанию должна быть галочка и значение 'Y', и получается у меня такая штука:
в свойствах разделы Displayed и т.п. отвечающие за внешний вид заполнены нормально, он чекбокс и т.п., далее раздел List of Values заполнен:
если все по умолчанию, только List of values definition:
STATIC:;Y и в разделе Default значение Default value = "Y", то всё болеменее нормально, чекбокс выбран, возвращает Y по умолчанию и т.п.,
но при этом возникает такая проблемма, что чекбокс сбрасывается в значение по умолчанию при каждом заходе на страницу, что несколько не удобно, если будешь смотреть одинаковые отчёты по нескольким пользователям, то каждый раз убирать чекбокс надоест... хотелось бы чтобы он сохранял своё состояние... я пробовал по разному заполнять поля Null display value, Null return value и т.п. в разделе List of Values, но ни к какому эфекту не привело, а если убрать значение Y из Default, то вообще значение по умолчанию пропадает в любом случае...
вобщем буду благодарен, если кто пояснит мне про это всё +))
...
Рейтинг: 0 / 0
06.02.2009, 12:46
    #35801517
Ales Protiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация значений по умолчанию до открытия страницы.
Varlock9000
ещё я пытался проверять данные переменные на равенство NULL или просто c "", '', в случаях с текстовыми полями помогло, а радиобаттоны и чекбоксы всёравно категорически отказываются проверяться подобным образом...


Единственный правильный варинт - научиться проверять и чекбоксы в том числе :)

Varlock9000
как сделать, чтобы просто был всегда выбран кто-то существующий?(первый по списку, допустим...)


Под Default Value есть комбик Default Value Type. Там выбираешь какой-нить из вариантов PL/SQL и пишешь функцию или анонимный блок, которые будут возвращать минимальное значение из таблицы.
...
Рейтинг: 0 / 0
09.02.2009, 17:22
    #35806391
Varlock9000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация значений по умолчанию до открытия страницы.
Спасибо+)
теперь немного другие вопросы, по итогам того как разбирался во всём этом+)
Собственно нашёл какие косяки у меня были с чекбоксами(достаточно было "=" поменять на "IS NULL", что я какраз использовал в текстовых полях, а в чекбоксах с какого-то перепугу написал "=" :), и возник такой
вопрос, а можно чекбокс заставить возвращать 2 значения? просто сейчас они
имеют код:
STATIC:;Y
и в случае если галочка стоит, возвращают 'Y', в противном случае
возвращают НУЛЛ, это очень неудобно т.к. он не различает НУЛЛ от того, что
пользователь снял галочку, и нулл от того, что пользователь просто не
заходил на страницу...(у себя в принцыпе я счас просто использовал для
проверки другой элемент на странице, т.е. если он тоже нулл то страница не
инициализирована полностью... но мне очень ненравится такая зависимость от
других элементов. Есть ли способ реализовать подобную проверку только
средствами чекбокса, т.е. чтобы он например 'N' ещё возвращал, когда
пользователь сам галочку снял...)
попытки сделать, например:
STATIC:;Y,;N
ни к чему дельному не привели, он просто второй чекбокс добавляет...

и ещё одна причина, по которой вытекает данный вопрос, я нашёл решение
того, что упоминал в конце предидущего поста: как сделать, чтобы чекбокс
запоминал своё состояние, но при этом имел значение по умолчанию 'Y'(с
поставленной галочкой) а не NULL... в Advanced Tutorials предлагается такой метод:
в раздел Source
для Item Source выбрать SQL Query
а в Item Source Value ввести что-нить типа "SELECT 'Y' FROM DUAL"
при этом по умолчанию Source Used стоит: "Only when current value in
session state is null" (другой вариант это всегда использовать сурс и
заменять любое значение сохранённое в сессии)
собственно по заверению тьюториала это должно работать, но я наткнулся на
то, что если пользователь снимает галочку, то значение чекбокса падает в
NULL который АРЕХ опять же не отличает, и потому сбрасывает значение на
'Y'кажый раз при заходе на страниццу, если была снята галочка... поэтому
очень хотелось бы, чтобы всётки при снятой галочке чекбокс имел другое
значение, не нулл, чтобы можно было это нормально всё оформить... (конечно
опять же можно задействовать соседние элементы, и хранить где-нить факт
сбрасывания галочки именно пользователем, но очень нехотелось бы делать
таких кривых вещей...)
...
Рейтинг: 0 / 0
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Инициализация значений по умолчанию до открытия страницы. / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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