Гость
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Save Session State / 20 сообщений из 20, страница 1 из 1
17.10.2011, 14:00
    #37485059
Daedroth
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Save Session State
Нужна помощь в следующем: Есть на экране 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
17.10.2011, 14:13
    #37485086
haXbat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Save Session State
Daedroth,

Расчет идет через Page Processing, я правильно понимаю? Если так, то лучше всего будет переделать функционал на dynamic action - рассчитывать можно будет без сабмита всей страницы, с помощью AJAX. Так же это гораздно будет быстрее для конечного пользователя)
...
Рейтинг: 0 / 0
17.10.2011, 14:20
    #37485101
Daedroth
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Save Session State
haXbat, можно подробней? Я просто не очень знаком с аяксом.
...
Рейтинг: 0 / 0
17.10.2011, 14:24
    #37485111
Daedroth
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Save Session State
Замечу что для расчёта я использую SQL.
...
Рейтинг: 0 / 0
17.10.2011, 15:21
    #37485229
haXbat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Save Session State
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
17.10.2011, 15:54
    #37485294
Daedroth
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Save Session State
haXbatдобавьте секцию #BUTTON_ATTRIBUTES# (если ее нет в темплейте),
Я не совсем понял как её добавлять. Что писать надо?
...
Рейтинг: 0 / 0
17.10.2011, 16:46
    #37485402
haXbat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Save Session State
Daedroth,

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

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

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

haXbat,

Я всё сделал так как вы описали, задал атрибутом id="Calculate" и в динамик актионе в DOM написал Calculate, актион поставил на Set Value и в Set Type поставил SQL Statement (куда ввел свой SQL). Но ничего не происходит. Скажите что тут не правильно или может вы что-то пропустили.
...
Рейтинг: 0 / 0
18.10.2011, 09:15
    #37486091
SvDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Save Session State
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
18.10.2011, 09:36
    #37486128
haXbat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Save Session State
К вышеописанному стоит еще добавить, что использование инструментов web-разработки ( firebug for firefox к примеру) существенно сократит время отладки подобных dynamic action. В случае фаербага вам нужно включить вкладку консоль и проверить - нет ли ошибок javascript, выполняется ли запрос к серверу по нажатию на кнопку, не возвращает ли запрос ошибок?
...
Рейтинг: 0 / 0
19.10.2011, 10:40
    #37488308
Daedroth
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Save Session State
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
19.10.2011, 10:52
    #37488329
Daedroth
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Save Session State
Самое интересное то, что при сабмите он делает расчет, не смотря на то что я удалил кампютишен. То есть динамик экшен срабатывает при сабмите. Это как????
...
Рейтинг: 0 / 0
19.10.2011, 11:16
    #37488393
haXbat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Save Session State
Daedroth,

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

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

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

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

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

Вы меня наверно не поняли. Мне не нужно что бы происходил сабмит. С сабмитом я могу и обычным кампютишоном сделать это.
...
Рейтинг: 0 / 0
20.10.2011, 10:26
    #37490157
SvDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Save Session State
В запросе у вас конечно же 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
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Save Session State / 20 сообщений из 20, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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