...
...

Документарные базы Lotus Notes

Я считаю, что концепция баз данных, поддерживаемая Lotus Notes, является довольно трудной для усвоения, несмотря на свою простоту. В этом утверждении нет противоречия. Действительно, представьте себе, что разъясняете принцип работы колеса человеку, который в жизни не сталкивался с такой технологией. Иногда лучше один раз увидеть удачный пример, чем выслушать десяток объяснений. И все-таки дело не только в этом.


Базы данных Notes (в дальнейшем БД) очень многолики. Когда работает встроенный сервер новостей Domino, БД служат для хранения писем, направляемых в группы новостей, по одной БД на группу. Для встроенного Web-сервера Domino БД являются либо хранилищами разрозненных HTML-страничек, либо макетами всего или части сайта. Более того, БД служат интерактивными Web-приложениями. При использовании Notes для работы с электронной почтой, БД выступает в роли клиентского почтового приложения с трехпанельным интерфейсом (список папок, перечень писем, панель просмотра).

Словом, для программистов Notes разницы между понятиями "приложение" и "база данных" не существует. И данные, и код, определяющий функциональность базы, хранятся в одном файле: они неразделимы. Это необычно. Возможно, потому и пользуются известной популярностью Notes API. Суть применения API в том, что на компьютере, где уже установлен Notes, дополнительно устанавливается пользовательское приложение, написанное на С или на С++. Мне кажется, это делается в угоду привычной парадигме БД, где данные - суть файлы, а приложения - программы.

Боже милосердный, для чего же нагромождать одно на другое?! Зачем пренебрегать технологией быстрой разработки Notes и надежной средой конечного пользователя? Чего ради затевать проект на С, требующий больших затрат труда, времени и, в конечном счете, денег? По-моему, применение API Notes оправдано всего в нескольких процентах случаев, когда нужно создавать "переходники" между БД Notes и нестандартными (не ODBC) источниками данных, но никак не полноценные клиентские приложения с Notes в качестве простого драйвера файлов данных.

Есть другой субъективный фактор, затрудняющий восприятие БД Notes многими программистами. Как ни удивительно, представителям старшего поколения легче иметь дело с концепцией БД Notes, чем молодежи. Для большинства нынешних специалистов, что помоложе, понятие баз данных, как таковых, и реляционных баз данных стали тождественными. Для них любая БД - набор таблиц и жестких, математически выверенных правил, согласно которым таблицы следует формировать и обрабатывать.

Старики же помнят времена, когда база данных была набором файлов, доступ к которым мог осуществляться любым способом, будь то последовательный, прямой или индексно-последовательный. Им по опыту известно, что реляционная модель данных - лишь одна из многих возможных; они умеют работать с сетевыми и с иерархическими моделями, когда выбор структур данных является скорее искусством, чем наукой. Это все к тому, что базы данных Notes являются по своей природе не реляционными, а иерархическими, сетевыми, и ориентированы на индексно-последовательный доступ. Это дает программисту творческую свободу, но предполагает соответствующую ответственность за результат.

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

Начнем практическую часть с обзора основных строительных элементов БД. База Notes состоит из навигаторов, форм и видов. В каждой базе есть навигатор по умолчанию, то есть панель, похожая на ту панель проводника Windows, где можно выбирать папки на диске. Она служит для переключения между видами, созданными для данной БД. Кроме того, в навигаторе по умолчанию есть "папка" так называемого конструктора (Design). При желании программист может заменить стандартный навигатор своим собственным, но часто в этом нет нужды. Использование навигаторов не вызывает никаких затруднений и не требует дальнейших комментариев.

Понятие форм, напротив, нуждается в подробных объяснениях, поскольку именно формы придают базам Notes документно-ориентированный характер. В первом приближении форму можно считать аналогом записи в традиционной базе данных, которую, в свою очередь, принято сравнивать с карточкой библиотечного каталога. В одной БД Notes могут присутствовать несколько десятков форм.


Как уже упоминалось, БД Notes одновременно является и хранилищем данных (записей) и приложением. В роли приложения БД, как минимум, обеспечивает функциональность интерфейса пользователя по вводу новых данных и доступу к уже существующим записям. Форма играет двоякую роль: во-первых, она задает состав данных, то есть количество и тип полей (с точки зрения программиста БД), а во-вторых, является "рыбой", шаблоном, чистым бланком, который нужно заполнить, чтобы создать документ (с точки зрения пользователя и программиста приложения). Чтобы немного поупражняться, создайте новую базу данных при помощи команды меню File/Database/New. В диалоге создания БД достаточно указать заголовок базы, который будет отображен на ее иконке, и имя файла. Шаблон задавать не надо, так как нужна совершенно чистая заготовка базы. Теперь можно создать форму: выполнить команду меню Create/Design/Form, кликнув на разделе форм ("Forms") в папке конструктора ("Design") стандартного навигатора новоявленной БД Notes.

Хотелось бы сразу предупредить, что поначалу отчаянно путаешься из-за сильной контекстной зависимости меню Lotus Notes от текущего режима. Громадное множество команд появляется в меню только при совершении определенной операции, а не присутствует в нем перманентно. Но это так, к слову, а главным сюрпризом для новичка станет то, что форма БД Notes, против всех ожиданий, не является привычным диалоговым окном Windows. Она не макетируется с помощью "драг энд дропа" на графическом поле, а набирается и форматируется, как документ в текстовом редакторе! Это, наверное, лучше посмотреть на примере формы воображаемой справки.

Создавая форму, очень удобно, не мудрствуя лукаво, взять бланк соответствующего документа и добросовестно "передрать" его. Так же легко его можно будет при необходимости изменить. Всего-то дел: набрать статический текст, а на месте прочерков бланка при помощи команды меню Create/Field вставить поля для ввода данных. На рисунке поля обведены рамками. Обратите внимание на диалог свойств поля, при помощи которого задается его название и выбирается тип. В нижней части экрана видна @-формула, которая инициализирует поле Date справки значением текущей даты.

@-формулы (произносится "эт-формулы") Lotus Notes, которых насчитывается более двухсот, значительно упрощают программирование БД и чаще всего делают использование языка Lotus Script ненужным. Занятно, что какие-то шутники-программисты прозвали @-формулы "собачьим языком"... Но вернемся к нашим формам.

Пользователей очень радует, а программистов поражает, что в Notes не существует проблемы "зарезервированной длины поля". Когда при создании документа на основе формы в текстовое (или числовое) поле формы вводятся символы, то текст всего документа, включая статический, форматируется с автопереносом со строки на строку по мере ввода. При выводе на печать документ также будет переформатирован согласно параметрам страницы и размерам шрифта. В точности как в текстовом редакторе! Кстати, один из способов создать документ на основе формы - воспользоваться командой меню Create/Название формы.


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

Виды, подобно формам, также играют две роли. С одной стороны, они служат для навигации по БД, то есть обеспечивают поиск документов и доступ к ним. С другой - являются сводкой, отчетом по документам базы. На последнее обстоятельство сразу обращают внимание программисты, имевшие опыт работы с базами данных. Сходство видов с отчетами тем более заметно, что они настраиваются на отображение определенного подмножества документов, которые могут фильтроваться по дате создания, форме документа и другим критериям, задаваемым @-формулами.

Подытоживая, скажу, что вид можно с полным правом назвать динамическим отчетом по базе данных. Когда впервые делаешь это открытие, то испытываешь большой подъем... И тут же впадаешь в ересь, пытаясь превратить динамический отчет в интерактивный. Иными словами, не стоит искать способ, которым пользователь мог бы управлять заданием критерия отбора документов для вида. Гораздо разумнее предусмотрительно создать набор видов, которые удовлетворяли бы всем основным запросам пользователей.

Хотелось бы предостеречь начинающих программистов баз данных Notes еще от одного заблуждения, которое можно назвать методологической ошибкой. Насколько я могу судить, избежать ее дано только тем, кто вообще никогда не программировал баз данных. Впрочем, у них свои беды. Более или менее опытные программисты, обнаружив, что форма Notes суть запись БД, а вид есть отчет по базе, с неизбежностью пытаются работать с Notes, как с привычной средой, реализовывать в Notes привычные подходы, интерфейсные приемы, способы манипуляции данными и так далее.

Кое-что получается просто здорово и буквально окрыляет. Но рано или поздно вдруг сталкиваешься с отсутствием в Notes средств для того, что, казалось бы, обязательно должна делать любая СУБД. Невероятно! Вот тогда обещаешь себе "сделать то, что я хочу, так, как я хочу" и "упираешься рогом". В результате, как правило, страдают нервы упершегося. Особенно тяжко приходится заядлым реляционщикам.

Для того чтобы с наименьшими потерями сил пройти этот неизбежный этап "врастания" в идеологию и технологию Notes, предлагаю воспользоваться следующим принципом, выведенным мною из собственного опыта. Если что-нибудь упорно не идет, не хватает функциональности @-формул и классов Lotus Script, то "Это не Lotus!". Бросайте биться головой о стену и ищите другой способ. Путь обязательно есть. Очень помогает изучение стандартных шаблонов Notes. Там можно найти и конкретные частные решения и примеры общего подхода. Желаю удачи!

Евгений Щербатюк

© Компьютерная газета

полезные ссылки
Оффшорные банковские счета