Корпоративные базы данных - статьи

       

Личные библиотеки модулей программы.



В VantageTeam Builder поддерживаются библиотечные модули для реализации и вызова базовых SQL-
функций доступа к таблицам базы данных. Разработчик может пользоваться этим инструментом для
создания собственных, личных (или проектных) библиотек модулей. Каждый такой модуль является
атомарным (детально не раскрываемым) элементом структурной схемы программы. Они
предназначены для выполнения двух задач.

Первая, это создание библиотеки стандартных (непараметризуемых) фрагментов текста, например:

INPUT BY NAME p_record.*
--начало библиотечного модуля
ON KEY (ESC)
LET INT_FLAG = true
EXIT INPUT
--конец библиотечного модуля


Вторая - это создание библиотеки шаблонов, используемых для генерации параметризуемых
фрагментов текста, например (имя таблицы и имена полей определяются в данном примере
параметрически):

--начало библиотечного модуля
INPUT BY NAME p_{имя таблицы}.*
ON KEY (ESC)
LET inf_flag = true
EXIT INPUT
ON KEY(CONTROL-U)
--для всех импортированных полей
IF INFIELD({имя поля}) THEN
CALL find_{имя таблицы}(p_{имя таблицы}.{имя поля})
RETURNING p_{имя таблицы}.*
END IF
END INPUT
--конец библиотечного модуля
Соответственно дизайнер может использовать один и тот же библиотечный модуль на различных
схемах, а программист один раз пишет необходимый код или шаблон. Шаблоны представляют собой
текст программы, содержащий вызовы специальных функций, написанных на языке Tool Command
Language (TCL), и обеспечивающих чтение информации из формируемых с помощью VantageTeam
Builder моделей (диаграмм) и запись сформированного текста в соответствующие разделы
генеримого файла с кодом программы или SQL-скрипта. Например, шаблон для приведенного
выше примера выглядит следующим образом:

--начало шаблона
INPUT BY NAME p_~${current_table}.*
ON KEY (ESC)
LET inf_flag = true
EXIT INPUT
ON KEY(CONTROL-U)
~[ foreach col [gen_col_list $current_table "FKEY"] {
set master_table [get_master $col]
set col_name [get_uniq_name $col]
expand_text $current_section {


IF INFIELD(~$col_name) THEN
CALL find_~${master_table}()
returning p_~$current_table.~$col_name
END IF
END INPUT
--конец шаблона
Здесь:
  • current_table - переменная, в которой хранится имя текущей таблицы;
  • foreach - команда цикла по всем импортированным из других таблиц полям
    текущей таблицы;
  • get_master и get_uniq_name - функции, обеспечивающие чтение имени
    связанной таблицы и импортированного поля;
  • expand_text $current_section - команда, обеспечивающая запись сгенеренного
    текста в программный файл.

Имя таблицы, для которой необходимо сгенерить соответствующий фрагмент кода, может
определяться по диаграмме содержания экранной формы. При этом нетрудно обеспечить, чтобы
указанный фрагмент кода генерился для каждой из присутствующих на диаграмме таблиц, только для
базовых таблиц, либо только для "словарей".

Таким образом, если ваша новая программа повторяет структуру одной из ваших старых программ, а
для всех фрагментов кода, содержащих имена полей и таблиц, вы разработали соответствующие
шаблоны, вы можете просто указать на диаграмме Последовательности экранных форм для всех форм,
в которых необходимо выполнить однотипные действия, имя одной и той же структурной схемы
программы. В результате вы получите автоматически сгенеренную программу "по старому образцу"
для нового набора полей и таблиц. Причем операция подстановки в старую программу новых имен
полей и таблиц будет выполнена весьма быстро и заведомо корректно без досадных пропусков
и опечаток.

Содержание раздела