Персональная СУБД FileMaker больше тридцати лет развивалась на платформе Apple и почти не уступает Microsoft Access по возможностям. Зато она имеет несколько любопытных особенностей, которые делают этот продукт доступнее для непрофессионалов и позволяют за минуты создать действующий прототип приложения для iPhone или iPad.
Программисты склонны относиться к поделкам на базе Microsoft Access и других подобных средств со смесью презрения и ужаса. У них есть для этого основания. Задачи, которые решают с помощью таких разработок, почти всегда имеют более дальновидные, мощные и правильные решения. Но вряд ли столь же простые, дешевые и доступные для пользователей, а эти критерии нередко важнее абстрактной «правильности». Это особенно понятно, когда имеешь дело с одним из конкурентов Access — приложением FileMaker Pro 14.
Как и Access, FileMaker Pro представляет собой сочетание системы управления базами данных и средства быстрой разработки приложений для доступа к этим базам, в том числе по сети (как по локальной, так и через интернет с помощью обычного браузера. Последнее, впрочем, требует FileMaker Server). Хоть в FileMaker Pro встроен мощный скриптовый язык, во множестве случаев можно обойтись без него.
Новая версия продукта, вышедшая в начале мая, отличается модернизированным интерфейсом (градиенты, из которых он состоял раньше, странновато смотрелись в Windows 8 и OS X 10.10) и полностью переработанным редактором скриптов. Кроме того, появились новые элементы интерфейса и возможности их настройки.
FileMaker менее известен, чем Access, но так было не всегда. У этой программы долгая и запутанная история. Ее предшественник — одна из первых систем управления базами данных для MS-DOS, которая появилась около тридцати пяти лет назад. Когда компания Apple выпустила «Мак», создатели FileMaker тут же перебрались на новую платформу. Вскоре их детище приобрело такую популярность, что в Microsoft решили отказаться от разработки собственной СУБД — испугались конкуренции. Это задержало появление Access на пять с лишним лет.
Xakep #197. Социальная инженерия
Успехи FileMaker были недолгими. В девяностые он растерял свои завоевания, сохранив лидирующие позиции лишь на переживавшем не лучшие времена рынке программного обеспечения для Mac OS. Спустя двадцать лет FileMaker Pro остается самым популярным приложением такого рода, работающем на OS X (версия для Windows, само собой, тоже имеется — на корпоративном рынке без нее никуда). Хотя по функциональности и проработанности этот продукт вполне сопоставим с конкурентами, достаточно одного взгляда, чтобы понять: он не копировал их, а развивался независимо. FileMaker Pro самобытен, и это делает его интересным.
Если Access мало-помалу, версия за версией, поворачивается лицом к профессиональным разработчикам, то FileMaker Pro изо всех сил стремится сохранить ориентацию на неспециалистов. При работе с ним не помешают умение программировать и знание баз данных, но можно с легкостью обойтись и без этого. Создать на базе FileMaker Pro работоспособное приложение с нестандартным интерфейсом почти так же просто, как электронную таблицу.
Еще одна интересная особенность этого продукта — поддержка iOS. Средства разработки FileMaker Pro позволяют создавать интерфейсы для манипуляции данными на экране планшета или телефона, а затем запустить их на iPhone или iPad. При этом если база данных открыта по сети, то любые изменения, внесенные в интерфейс или данные, тут же отражаются на мобильном устройстве — и наоборот. Это, помимо прочего, превращает FileMaker Pro в удобное средство быстрого прототипирования мобильных приложений.
Вот как создать простую базу данных при помощи FileMaker Pro 14. При старте он активирует режим редактирования макетов (Layout) или, если называть вещи своими именами, интерфейсов. Макеты заменяют в FileMaker Pro формы и отчеты Access. Каждой таблице должен соответствовать хотя бы один макет, но их может быть и несколько. Макеты будут представлять собой отдельные экраны приложения, которое мы разрабатываем. Кроме того, они позволяют оформить данные для печати на принтере или, скажем, сохранения в формате PDF.
Кроме режима редактирования макетов, имеется режим просмотра (Browse), в котором пользователь взаимодействует с интерфейсами и базой данных. Если в режим редактирования макетов FileMaker Pro превращается в среду разработки, то в режиме просмотра он исполняет созданное «приложение», а сам уходит на второй план.
Два других режима используются реже. Режим поиска (Find) предназначен для извлечения из базы данных информации, которую нельзя получить при помощи одного из готовых макетов, а режим предпросмотра позволяет увидеть, как будет выглядеть отчет после печати.
Прежде чем переходить к отображению данных, нужно определить таблицы, в которых они будут храниться. Это позволяет сделать большая кнопка Manage, которая находится у правого края панели инструментов в режиме редактирования макетов. Выбрав пункт Manage Database, мы открываем диалоговое окно с тремя вкладками: Tables, Fields и Relationships. Те, кто сталкивался с базами данных, догадываются, что они делают. В первой происходит создание и удаление таблиц, вторая нужна для того, чтобы задать их структуру, а в третьей указываются связи между ними.
Наше тестовое приложение будет представлять собой примитивное подобие CRM и предназначаться для учета обращений заказчиков. Очевидно, нам потребуется таблица для заказчиков и таблица для обращений. Кроме того, заведем отдельную таблицу для исполнителей: там будет лежать список сотрудников, которые исполняют обращения.
Типы полей обычны, и особого упоминания заслуживают лишь два из них: Calculation и Summary. Поле, имеющее один из этих типов, можно сравнить с ячейкой в электронной таблице, куда вместо данных внесена формула. Кнопка Options позволяет настроить, какое значение будет сохраняться в поле при добавлении новой записи, и указать критерии, которым должно удовлетворять значение поля.
Вкладка Relationships нужна для того, чтобы определить внешние ключи (foreign keys), или, если пользоваться терминологией FileMaker Pro, «поля сочетаний» (match fileds). В таблице «Обращения» у нас два внешних ключа: поле «Заказчик» должно быть равно идентификационному номеру соответствующей записи в таблице «Заказчики», а поле «Исполнитель» — то же самое, но в таблице «Исполнители». Вместо равенства можно использовать и другие операторы сравнения, но для нашей задачи это не требуется.
Закрыв диалоговое окно Manage Database, мы обнаружим, что FileMaker Pro автоматически создал макет для каждой таблицы: по одной простой форме с полем ввода для каждого столбца. В принципе, их уже можно использовать: в режиме просмотра этими формами можно добавлять новые записи или просматривать существующие. Но лучше не останавливаться, а доработать их. Тем более это не так уж сложно.
Для начала удалим элемент управления для ввода идентификационных номеров. Номера нужны для того, чтобы связывать таблицы между собой, и пользователя они будут только смущать. Затем поменяем тему и расположим поля ввода в более удобном порядке. К FileMaker Pro прилагается несколько тем, которые задают внешний вид элементов управления. Их при желании можно редактировать (при этом меняется внешний вид всех макетов, которые их используют) или добавлять новые. Если ты планируешь использовать свою разработку на iPad, выбирай тему Enlightened Touch. Она отличается крупными элементами управления, которые лучше подходят для сенсорных экранов.
Теперь нужно подумать об удобстве пользователя. Поля, которые автоматически создала программа, предназначены для ввода текста, а это зачастую совсем не то, что нужно. Для редактирования даты лучше использовать календарь, тип обращения выбирать из выпадающего меню, а заказчиков и исполнителей обращения не вводить вручную, а искать в готовых списках, составленных на основе содержимого других таблиц. Для настройки поведения полей ввода служит инспектор элементов управления.
Содержимое выпадающих меню определяют так называемые списки значений. Список значений можно ввести вручную (в нашем случае этот вариант подойдет для типов обращений) или же сформировать из результатов простого запроса к базе данных (этот метод потребуется нам для выпадающих меню, где можно выбрать заказчика и исполнителя). В последнем случае для вывода в интерфейсе и сохранения можно использовать значения разных полей: например, показывать пользователю имя исполнителя, а сохранять в базе данных его идентификационный номер.
Пока что наше приложение не позволяло делать почти ничего, что нельзя сделать в обычной электронной таблице. Пришло время усложнить задачу: попробуем совместить в одном макете данные из нескольких таблиц. У нас есть макет с данными о заказчике. Логично видеть в нем не только имя и контактную информацию, но и список обращений.
Для списка обращений понадобится место. Освободим его, добавив в наш макет переключаемые вкладки. Информация о клиенте будет лежать в одной вкладке, а другую займет список обращений. Для вывода списка служит специальный элемент управления под названием «портал». Портал показывает данные из другой таблицы, которые отфильтрованы и отсортированы по заданным критериям. Какие именно поля будут показаны, задается при создании макета. Нас интересуют поля «Дата» и «Тип».
Наша разработка начинает приобретать осмысленный вид. Добавим кнопку «Новая запись» (готовый скрипт, срабатывающий по нажатию кнопки, можно выбрать из списка) и попытаемся запустить это «приложение» на iPad. Для этого откроем доступ к нему в локальной сети (File / Share with FileMaker Pro Clients…), и наша база данных появится на мобильном устройстве.
Элементы управления действуют именно так, как ожидаешь от приложения для iOS, но при желании эффект можно усилить, добавив элементы управления и настройки поведения, предназначенные специально для мобильных устройств, — например, с поддержкой жеста «смахивания».
Напоследок рассмотрим несколько более сложные отношения между таблицами и заодно проиллюстрируем использование полей c вычислениями. Для этого позволим связывать записи из таблицы «Обращение» не с одним, а с несколькими исполнителями.
Нам нужно, чтобы каждому исполнителю могло соответствовать произвольное число обращений, а каждому обращению — произвольное число исполнителей. В реляционных базах данных связь такого типа обозначается термином «многие ко многим». Для хранения связей между заказчиками и обращениями понадобится отдельная таблица «Исполнители обращений» с двумя внешними ключами: один из которых указывает на исполнителя, а другой — на обращение.
Чтобы вывести список исполнителей на макете обращения, нужно добавить туда портал на таблицу «Исполнители обращений». FileMaker Pro сам отфильтрует исполнителей, которые соответствуют именно тому обращению, которое мы видим, и выведет их идентификационные номера. Это проблема — пользователям нужны имена, а не номера, но, кроме номеров, в таблице «Исполнители обращений» ничего нет. Что делать?
Как раз в таком случае способны помочь поля с вычислениями. Добавим в таблицу «Исполнители обращений» еще одно поле, значение которого будет задавать формула (или недлинный скрипт). В нашем случае формула будет очень простой: значение этого поля равно значению поля «Имя» в записи из таблицы «Исполнители», которая связана с текущей записью. Звучит пугающе, но на скриптовом языке FileMaker Pro описание формулы короче, чем на русском: Имя исполнителя = Исполнители::Имя
. Готово!
Пока что наше приложение можно считать приложением лишь с большой натяжкой. Ему недостает самостоятельности: для взаимодействия с базой данных по-прежнему приходится вызывать команды из интерфейса FileMaker Pro. Но если добавить макеты со списками заказчиков, обращений и исполнителей и наладить навигацию между ними, зависимость исчезнет. И все это — за считаные минуты и без единой строчки кода.