powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Save Session State
20 сообщений из 20, страница 1 из 1
Save Session State
    #37485059
Фотография Daedroth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужна помощь в следующем: Есть на экране 4 поля,
1)Number Field (P1_Client_ID)
2)Date Picker (P1_BEGIN_DATE)
3)Display Only (P1_DATE_END)
4)Number Field (P1_DAYS_COUNT)

и две кнопки
1)Создать
2)Рассчитать

Я ввожу дату в P1_BEGIN_DATE и количество дней в P1_DAYS_COUNT. При нажатие на кнопке "Рассчитать" я получаю день, когда работник выйдет на работу, в P1_DATE_END. Но поскольку при нажатие на кнопку происходит Submit, то поля P1_Client_ID и P1_DAYS_COUNT обнуляются, а это не есть гуд.

Как сделать так что бы в этих полях оставались значения?

APEX 4.0.0.00.46, Browser IE9
...
Рейтинг: 0 / 0
Save Session State
    #37485086
haXbat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Daedroth,

Расчет идет через Page Processing, я правильно понимаю? Если так, то лучше всего будет переделать функционал на dynamic action - рассчитывать можно будет без сабмита всей страницы, с помощью AJAX. Так же это гораздно будет быстрее для конечного пользователя)
...
Рейтинг: 0 / 0
Save Session State
    #37485101
Фотография Daedroth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
haXbat, можно подробней? Я просто не очень знаком с аяксом.
...
Рейтинг: 0 / 0
Save Session State
    #37485111
Фотография Daedroth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Замечу что для расчёта я использую SQL.
...
Рейтинг: 0 / 0
Save Session State
    #37485229
haXbat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Daedroth,

Чтобы стандартная апексовая кнопка не сабмитила страницу, а стартовала dynamic action создайте собственный темплейт для кнопки, как копию используемого, добавьте секцию #BUTTON_ATTRIBUTES# (если ее нет в темплейте), удалите onclick="#LINK#" (если есть). Далее в Button Display Attributes выберите ранее созданный темплейт и в Attributes допишите id="MY_BUTTON". Потом связываем новый dynamic action с id кнопки расчета: Create Dynamic Action>Advanced>Event - Click,Selection Type - DOM Object,DOM Object - MY_BUTTON> Action - Set value>SQL код расчета>P1_DATE_END

Вот с картинками доки - раз и два
...
Рейтинг: 0 / 0
Save Session State
    #37485294
Фотография Daedroth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
haXbatдобавьте секцию #BUTTON_ATTRIBUTES# (если ее нет в темплейте),
Я не совсем понял как её добавлять. Что писать надо?
...
Рейтинг: 0 / 0
Save Session State
    #37485402
haXbat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Daedroth,

Вот пример:
Код: plaintext
1.
2.
<button value="#LABEL#" #BUTTON_ATTRIBUTES# class="button-default" type="button">
  <span>#LABEL#</span>
</button>
...
Рейтинг: 0 / 0
Save Session State
    #37485426
Фотография Daedroth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
haXbat,

Я вроде всё делаю правильно, но кнопка не реагирует и ничего не считается
...
Рейтинг: 0 / 0
Save Session State
    #37485659
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё-таки я придерживаюсь во мнении, что аякс для более-менее продвинутых пользователей, которые готовы работать с яваскриптом и html.
Без аякса решается так:
1. Либо не очищать их. т.е. смотрите тип source в этих item's (always replaced... сменить на второй), скорее всего, либо убрать процесс типа reset page. И наоборот при переходе в ссылке указывать reset page, чтобы старые значения очистились.
2. Либо выполнить процесс в onload: Fetch Row..., который их вычисляет по значению item с PK или ROWID. Смотрите условия, при которых этот процесс срабатывает. Соответственно указанный item при этом не должен обнуляться (пункт выше), либо чтоб переприсваивался в branches скажем.
...
Рейтинг: 0 / 0
Save Session State
    #37486047
Фотография Daedroth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvDevВсё-таки я придерживаюсь во мнении, что аякс для более-менее продвинутых пользователей, которые готовы работать с яваскриптом и html.
Без аякса решается так:...

Я не совсем понял где там был аякс. Если конечно динамик актион не есть он. А ваш вариант мне не подходит, потому что мне нужно что бы в конечном итоге всё стиралось, но не при нажатии кнопки расчета.

haXbat,

Я всё сделал так как вы описали, задал атрибутом id="Calculate" и в динамик актионе в DOM написал Calculate, актион поставил на Set Value и в Set Type поставил SQL Statement (куда ввел свой SQL). Но ничего не происходит. Скажите что тут не правильно или может вы что-то пропустили.
...
Рейтинг: 0 / 0
Save Session State
    #37486091
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaedrothЯ не совсем понял где там был аякс. Если конечно динамик актион не есть он. А ваш вариант мне не подходит, потому что мне нужно что бы в конечном итоге всё стиралось, но не при нажатии кнопки расчета.
Да, Dynamic action в некоторых случаях и есть аякс. Как запрограммируете, так и будет, нужно лишь чуть-чуть разобраться с теми типами процессов и задать нужные condition display.

DaedrothhaXbat,

Я всё сделал так как вы описали, задал атрибутом id="Calculate" и в динамик актионе в DOM написал Calculate, актион поставил на Set Value и в Set Type поставил SQL Statement (куда ввел свой SQL). Но ничего не происходит. Скажите что тут не правильно или может вы что-то пропустили.
Прежде чем спрашивать, убедитесь, что:

1. на заданную кнопку действительно в исходном html присутствует id="CALCULATE"
2. в dynamic action дейст-но сделано на событие нажатия кнопки, которое вы выполняете.
3. в браузере не возникает яваскриптовых ошибок по нажатию
4. SQL действительно меняет ваш item.
5. Специально обратите внимание на поле Page Items to Submit , аякс не производит Submit

А почему я говорю подумать, перед тем как использовать аякс? Нет смысла делать в одном месте по-особому, если в других сделано по-другому. Если пользователи привыкли, что по кнопке происходит сабмит, то лучше использовать сабмит,
т.е. если же вы заменяете Submit на аякс для всех кнопок подобного типа, тогда да, иначе же интерфейс сделанный по-разному хуже всего. Ну а Submit нельзя везде заменить на чистый dynamic action, там много яваскрипта может понадобиться.
...
Рейтинг: 0 / 0
Save Session State
    #37486128
haXbat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К вышеописанному стоит еще добавить, что использование инструментов web-разработки ( firebug for firefox к примеру) существенно сократит время отладки подобных dynamic action. В случае фаербага вам нужно включить вкладку консоль и проверить - нет ли ошибок javascript, выполняется ли запрос к серверу по нажатию на кнопку, не возвращает ли запрос ошибок?
...
Рейтинг: 0 / 0
Save Session State
    #37488308
Фотография Daedroth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
haXbatК вышеописанному стоит еще добавить, что использование инструментов web-разработки ( firebug for firefox к примеру) существенно сократит время отладки подобных dynamic action. В случае фаербага вам нужно включить вкладку консоль и проверить - нет ли ошибок javascript, выполняется ли запрос к серверу по нажатию на кнопку, не возвращает ли запрос ошибок?

А я о чём говорю. Всё выше перечисленное я проверял 100 раз и сегодня проверил 101-ый. При нажатие на кнопку ничего не происходит вообще. То есть никаких запросов к серверу никаких яваскриптов ничего. Тишина как в танке.

В хтмл id="Calculate" есть, в динамик экшен Event ->Click
Selection Type ->DOM Object
DOM Object ->CALCULATE
Page Items to Submit пустое
Action -> Set Value
Set Type -> SQL Statement
SQL Statement -> мой SQL
Affected Elements: Selection Type -> Item(s)
Item(s) -> P4_DATE_END

в хтмл также есть

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
(function(){apex.da.gEventList = [
{"triggeringElement":"CALCULATE","triggeringElementType":"DOM_OBJECT","bindType":"bind","bindEventType":"click",actionList:
[{"eventResult":false,"executeOnPageInit":true,"stopExecutionOnError":true,"affectedElementsType":"ITEM","affectedElements":"P4_DATE_END",
javascriptFunction:apex.da.setValue,"ajaxIdentifier":"F7B347607C9703D2EC079C4A518BAD47AAB4C2B2ED7ADE9DE34839CE862ABB86",
"attribute01":"SQL_STATEMENT","action":"NATIVE_SET_VALUE"},
{"eventResult":true,"executeOnPageInit":false,"stopExecutionOnError":true,"affectedElementsType":"ITEM",
"affectedElements":"P4_DATE_END",javascriptFunction:apex.da.setValue,
"ajaxIdentifier":"CDB75CAD68A8CF756B89AC38E2C717045FAEA9AA8B77BBF2D611F52AD41A640F",
"attribute01":"SQL_STATEMENT","action":"NATIVE_SET_VALUE"}]}
...
Рейтинг: 0 / 0
Save Session State
    #37488329
Фотография Daedroth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самое интересное то, что при сабмите он делает расчет, не смотря на то что я удалил кампютишен. То есть динамик экшен срабатывает при сабмите. Это как????
...
Рейтинг: 0 / 0
Save Session State
    #37488393
haXbat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Daedroth,

Javascript чувствителен к регистру, поэтому DOM Object ->CALCULATE не привязывается к id="Calculate" .
...
Рейтинг: 0 / 0
Save Session State
    #37488420
Фотография Daedroth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
haXbatDaedroth,

Javascript чувствителен к регистру, поэтому DOM Object ->CALCULATE не привязывается к id="Calculate" .

Я тоже так подумал, поменял но реакции ноль.
...
Рейтинг: 0 / 0
Save Session State
    #37488503
haXbat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Daedroth,

Вот рабочий пример на apex.oracle.com, можно зайти под разработчиком и посмотреть исходный код.
...
Рейтинг: 0 / 0
Save Session State
    #37488619
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaedrothСамое интересное то, что при сабмите он делает расчет, не смотря на то что я удалил кампютишен. То есть динамик экшен срабатывает при сабмите. Это как????
Потому что еще раз читаем
SvDev5. Специально обратите внимание на поле Page Items to Submit , аякс не производит Submit

Читайте комментарий к полю что он делает и что туда вписывать ;)
...
Рейтинг: 0 / 0
Save Session State
    #37490041
Фотография Daedroth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvDev,

Вы меня наверно не поняли. Мне не нужно что бы происходил сабмит. С сабмитом я могу и обычным кампютишоном сделать это.
...
Рейтинг: 0 / 0
Save Session State
    #37490157
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В запросе у вас конечно же P1_BEGIN_DATE, P1_DAYS_COUNT. Третий раз носом тыкать не буду,
Изучайте как работает аякс. И делайте яваскрипт процедуру с вызовом htmldb_Get, всё будет работать.
Примеры здесь http://apex.oracle.com/pls/otn/f?p=11933:63
Еще могу порекоммендовать книжку, Pro Oracle Application Express.

Хотя бы появятся некоторые представления, как работает ajax в апексе.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Save Session State
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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