Поиск по этому блогу

09.04.2013

7 - Делаем составную форму


Делаем составную форму руками

В APEX при разработке мобильного приложения нет мастера для автоматического создания составной формы. Видио потому, что она довольно большая и вряд ли уместится на экране телефона. Но мы сделаем ее вручную! И заодно поковыряемся во внутренностях форм и отчетов. Сразу оговорюсь: может быть, это далеко не лучший способ, но он работает и мной проверен.
Итак, имеются  две связанные 1:М таблицы:
Клиенты (Код, название, Заметки, телефон1, телефон 2, ФИО_контакта) и
ТС (ИД, Город, Магазин, концепт, площадь, клиенты_код). ТС – это торговые центры, если что.
Получим мы вот что: 
  •  Отчет «Клиенты», каждая строчка которого – ссылка на редактирование выбранного клиента. В отчете выводим только минимум: фамилии клиентов по алфавиту и один из телефонов. Вид отчета – на рисунке 1.
  •  Форма «Правка клиента» - содержит 2 региона: сверху - обычная форма со всеми полями  таблицы «Клиенты», виден только выбранный клиент. Во втором регионе – редактируемый отчет, где видны магазины текущего клиента (рисунок 2).
  •  Форма для редактирования выбранного магазина (рисунок 3). Она создается автоматически.
Самое сложное – правильно связать формы.  Это делается с помощью параметров запроса, являющегося источником данных для форм и отчетов, а также параметров гиперссылки в первом отчете.


Шаг 1. Делаем отчет КЛИЕНТЫ.
Жмем CREATE PAGE / Report / Classic Report. Оставляем все параметры или меняем, как нам нужно (не забудьте на 2 шаге мастера выбрать источник данных – таблицу КЛИЕНТЫ). После успешного создания страницы  жмем кнопку EDIT для ее редактирования. Или Щелкаем по отчету в меню компонентов вашего приложения. Открываем отчет в режиме конструктора. Давайте подправим описание региона REPORT1 (рисунок 4). Щелкните по  ссылке Report, откроется список всех атрибутов отчета. Убрать ненужные столбцы:  щелкаем по вкладке REGION DEFINITIONS наверху страницы, в поле Source видим SQL- запрос для отчета. Убираем все столбцы, кроме нужных CODE, NAME, PHONE1.

На вкладке  REPORT ATRIBUTES (Рисунок 5) устанавливаем правильную ширину столбцов, исправляем заголовки на русские, отмечаем сортировку только по полю NAME. В конце жмем APPLY CHANGES

Нам еще нужно сделать ссылки со столбца NAME на форму редактирования клиента, но пока формы нет, мы отложим это. Можете проверить отчет, нажав кнопку RUN. Запомним номер страницы нашего отчета: например, 20.


Шаг 2. Создаем форму для редактирования выбранного клиента.


Жмем CREATE PAGE / FORM /Form on Table or View.  Имя базовой таблицы – КЛИЕНТЫ (на 2 шаге мастера), выбираем первичный ключ вручную, - CODE. Затем выбираем видимость всех полей и всех стандартных кнопок (можно сразу обрусить подписи на кнопках). В самом  конце указываем, куда идти после закрытия формы: на страницу 20 - отчет со списком клиентов.  Запомним номер новой страницы 24.
Открываем страницу в режиме конструктора (EDIT) . На рисунке 7 мы видим несколько пунктов (ITEMS)  для ввода данных в поля таблицы, несколько кнопок.   Все они в регионе CLIENTS.

Добавим еще один регион для вывода подчиненного отчета Магазины. Жмите кнопку с крестом (рис. 7) на панели  REGIONS. Далее создаем FORMS / Form an s Table with Report. Выбираем источник данных – таблицу TC и все ее поля.  На шаге Report Columns –выбираем значок для ссылки на форму редактирования одного магазина (мастер ее сделает автоматом), ее номер – 25 и имя можно заменить, если нужно. Выбираем первичный ключ вручную (столбец ID) – и проделав те же шаги для формы редактирования магазина – получаем готовый отчет с формой. Если сейчас открыть полученную страницу – два ее региона никак не связаны, внизу видим все магазины , а наверху – пустую форму. Поэтому вернемся к редактированию страницы 24.
В  списке регионов появился еще один – Report 1. Надо исправить его источник данных. Запомним, что код клиента хранится на текущей странице в поле P24_CODE (рис 8).

Щелкнем по ссылке Report 1 (рис.9) и добавим условие отбора записей в SQL- запрос:
select "ID",
"NAME_CLIENT",
"SITY",
"SHOP",
"CONCEPT",
"VOLUME",
"IDSITY",
"CLIENTS1_CODE"
from TC
where CLIENTS1_CODE=:P24_CODE
Мы тут сравниваем внешний ключ таблицы ТС с значением поля P24_CODE на веб-странице. Кстати, пишите имена переменных с учетом регистра, уберите кавычки и префикс OWNER в имени таблицы.
Сохраним изменения. И нажмем RUN. Вот эффект: все магазины пропали и «No data found»! Пора настраивать  первый регион.

Шаг 3. Создание ссылки из отчета на форму и настройка формы.
В списке страниц нашего приложения найдите недоделанную страницу с отчетом ( № 20) и откройте ее в конструкторе. Щелкните по ссылке REPORT1 в списке регионов. Выберите вкладку REPORT ATRIBUTES, нажмите значок редактирования поля NAME (рисунок 5 – красный кружок). Среди массы параметров поля найдите COLUMN LINK и установите их  значения (рис.10).


В поле Link Text – текст, который становится ссылкой (пусть будет значение поля NAME),
Page – страница с нашей формой ввода данных клиента (24, можно выбрать из списка)
Clear Cache – - очистить кэш этой страницы
Item1  -  Name / Value  - какой пункт данных на 24 странице надо изменить (у нас – код клиента на 24 странице должен браться из поля БД CODE с текущей страницы).  В принципе можно несколько полей указывать, ели ключ составной.
После применения изменений напротив поля со ссылкой появится галочка в списке столбцов.
Проверяем работу страницы (Run) и видим отчет со ссылками. Если мешаются коды клиентов – уберите галочку в свойстве «Show» в редакторе атрибутов отчета. 

Заключительная отладка
o   проверьте переходы по ссылкам, должна открываться форма с выбранным клиентом;
o   проверьте работу кнопок;  по кнопке Cancel и Apply Changes должна открываться предыдущая форма;
o   исправьте имена полей и надписи на кнопках в автоматически созданной форме для магазина.
o   Добавьте кнопку СОЗДАТЬ в первом отчете со списком клиентов (открывается форма 24 для ввода новых данных). 



Ну вот как-то так…





Комментариев нет:

Отправить комментарий