Как сохранить состояние в форме Oracle ApEx - PullRequest
3 голосов
/ 18 мая 2011

Я столкнулся с проблемой и не уверен, как лучше решить эту проблему с помощью Oracle ApEx.

По сути, у меня есть форма, основанная на Таблице1, но в то же время раздел / область в этой форме переходит на другую страницу, где она затем добавляет детали в Таблицу 2.

Чтобы расширить это на лучшем примере, допустим, что у меня есть таблица с именем CUSTOMER, в которой хранятся личные данные клиента, такие как CUST_ID, FIRSTNAME, SURNAME, DOB, а затем у меня также есть другая таблица с именем PURCHASES, со следующей столбцы, PURCHASE_ID, CUST_ID, ITEM, ITEM_DESCR, COST, где CUST_ID является внешним ключом для таблицы CUSTOMERS.

Теперь я хочу создать форму Oracle Apex, основанную на таблице CUSTOMER, но в этой же форме до того, как пользователь отправит и подтвердит форму в базе данных, я также хочу разрешить пользователю добавлять все покупки, сделанные клиентом. покупал в магазине какими-то средствами. Как только пользователь ввел данные клиента вместе, скажем, с 5 записями о покупках (каким-то образом), все они отправляются и фиксируются в базе данных для таблиц CUSTOMER и PURCHASES.

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

Спасибо.

1 Ответ

4 голосов
/ 18 мая 2011

Вместо перенаправления на страницу 2 для ввода информации Таблицы 2, которую вам нужно отправить страница 1 и ветвь на страницу 2. Это сохранит сеанссостояние для страницы 1. Вы еще не хотите, чтобы данные страницы 1 обновлялись в Таблице 1, поэтому убедитесь, что процесс, выполняющий вставку / обновление, не вызывается этой отправкой - например, сделайте его условным для кнопки Сохранить или чего-либо еще.*

В качестве альтернативы, сделайте все это на одной странице, как мой пример здесь .Интересующая страница - это страница 7, на которую вы переходите с помощью кнопки Создать.Страница 7 имеет своего рода форму мастера / детализации, но я не создавал ее с помощью мастеров Apex - я не уверен, что вы могли бы, но я склонен не использовать мастера и встроенные инструменты формы на столе.в моей работе, поэтому я не уверен.

Это то, что я сделал для страницы 7:

1) Создание пустой страницы

2) Добавлена ​​область HTML "«Новый клиент» и добавили текстовый элемент для фамилии и элемент даты для DOB.

3) Создали область отчета «Покупки» со следующим SQL:

select apex_item.text(1,'') item_desc
,      apex_item.text(2,'') cost
from   dual
connect by level <= 5

Предложение CONNECT BYхитрость для генерации 5 фиктивных строк из DUAL.Пакет apex_item генерирует элементы табличной формы - в данном случае 2 текстовых элемента для item_desc и cost с начальным значением ''.

4) Создано 2 кнопки: SUBMIT - отправляет страницу ОТМЕНА - перенаправляет настраница 6

5) Создан процесс PL / SQL для запуска при отправке следующим образом:

declare
  l_cust_id integer;
begin
  -- Insert the new customer
  insert into so_customers (surname, dob)
  values (:p7_surname, :p7_dob)
  returning cust_id into l_cust_id;

  -- Insert the purchases (if data has been entered)
  for i in 1..apex_application.g_f01.count loop
    if apex_application.g_f01(i) is not null then
      insert into so_purchases (cust_id, item_desc, cost)
      values (l_cust_id, 
              apex_application.g_f01(i),
              apex_application.g_f02(i)
             );
    end if;
  end loop;
end;

Я сделал этот процесс условным для кнопки SUBMIT.Пакет apex_application содержит переменные массива g_f01, g_f02 и т. Д., Которые соответствуют столбцам табличной формы.

6) Создает ветку, которая возвращается к странице 6 при нажатии кнопки SUBMIT.

Есливам нужна функциональность, которая отличается от поведения «из коробки», предоставляемого мастерами страниц и регионов Apex, вам нужно написать более сложный код, как вы можете видеть.Но почти все, что вы хотите сделать, может быть сделано таким образом.

...