Н.И. Вьюкова
PowerBuilder (PB) - объектно-ориентированная среда разработки интерактивных прикладных систем, взаимодействующих с СУБД. Существуют версии PB, работающие в различных ОС: Microsoft Windows 3.x, Windows NT, Windows 95, Apple Macintosh OS, UNIX. Допускаются кросс-разработки, когда прикладная система, предназначенная для работы на некоторой платформе, частично или полностью изготавливается на другой. В статье отражен опыт освоения PowerBuilder 4.0 в системе Microsoft Windows.
Графический пользовательский интерфейс приложений, создаваемых в PB, строится из обычных компонентов, таких как окна, меню, органы управления - кнопки, поля редактирования, выпадающие списки и др. Для интерфейсов с базами данных имеется управляющий объект специального вида, разработанный PowerSoft, - так называемое окно данных. Посредством окон данных разработчик может организовывать разнообразные формы взаимодействия конечного пользователя с базой данных. Окна данных сочетают полные возможности генераторов отчетов, форм для ввода и просмотра данных, включают средства деловой графики; они достаточно просты в изготовлении и использовании.
Построение даже довольно сложных пользовательских интерфейсов требует относительно небольших трудозатрат, поскольку для каждого вида компонентов PB предоставляет специализированную среду разработки, так называемую мастерскую (Painter) с хорошо подобранным набором инструментов. При этом текущее состояние работы над объектом отображается в наглядной графической форме. Поведение объектов, составляющих прикладную систему, описывается на языке четвертого поколения PowerScript. Есть и традиционные средства отладки.
Для доступа к базам данных используется интерфейс ODBC (Open DataBase Connectivity), а для некоторых СУБД (Oracle, Informix, Sybase SQL Server и др.) предусмотрены также специализированные интерфейсы, поставляемые PowerSoft. PB обеспечивает единообразные формы взаимодействия со всеми поддерживаемыми СУБД, учитывая в то же время особенности каждой из них.
Разработчик описывает операции над данными, хранящимися в базах данных, в терминах языка SQL. Для формулирования основных типов операций (выборка, вставка, изменение) PB предоставляет специализированную среду, которая освобождает разработчика от необходимости вникать в детали синтаксиса диалектов SQL. В простых случаях знание SQL практически не требуется.
В рамках одной прикладной системы можно организовать доступ к нескольким разнородным базам данных. Для пересылки таблиц или произвольных выборок данных из одной базы данных в другую, возможно, работающую под управлением другой СУБД, имеется инструмент построения так называемых линий передачи данных (Data PipeLines).
Одно из важных свойств PB - его незамкнутость, выражающаяся в поддержке внешних функций и классов объектов, спецификаций OLE 2.0, ODBC, MAPI. Развитие самой системы PB происходит отчасти за счет этих средств. Так, в четвертую версию PB вошли две новые прикладные библиотеки - для взаимодействия с NetWare и для поддержки перьевого ввода. Обе они основаны на внешних классах и функциях.
Благодаря поддержке спецификации OLE 2.0, в прикладных системах можно использовать многочисленные программные продукты, поставляемые сторонними производителями.
Под общей маркой PowerBuilder 4.0 продаются три модификации продукта и набор дополнительных средств:
- PowerBuilder Enterprise 4.0 для Windows поддерживает 16- и 32-разрядную среду Windows, включая Windows 3.1, Windows NT и Win OS/2. Продукт включает дополнительные средства коллективной разработки приложений: улучшенный интерфейс с СУБД Oracle, Sybase и Informix, интегрированный C++ Class Builder, основанный на компиляторе Watcom C/C++, а также возможность интеграции с базой данных Lotus Notes.
- PowerBuilder Team / ODBC для Windows - версия PowerBuilder для Windows 3.1, которая обеспечивает коллективную разработку и присоединение к базе данных сервера через ODBC.
- PowerBuilder Desktop для Windows - версия для индивидуальных разработчиков, создающих приложения под Windows для одиночных пользователей на основе Watcom SQL и настольных баз данных.
- Advanced Developer Toolkit - новый дополнительный для PowerBuilder Desktop продукт, включающий библиотеку многократно используемых объектов и функций, библиотеки для взаимодействия с NetWare и для поддержки перьевого ввода данных, а также инструментальные средства, такие как редактор изображений, построитель инсталляционных дисков, утилиты поддержки хранимых процедур баз данных. Этот продукт - стандартная часть PowerBuilder Enterprise и PowerBuilder Team / ODBC.
Объектная модель PB
Объекты
PB - объектно-ориентированная система, в которой полностью поддерживаются такие возможности, как многоуровневое наследование, полиморфизм, инкапсуляция. При этом концептуальная глубина сочетается со стремлением сделать интерфейс как можно более простым для освоения и использования. От начинающего разработчика "маскируется" сложность многих понятий, связанных с объектно-ориентированным подходом.
Объект PB - это сущность, обладающая набором атрибутов (свойств), набором методов (функций) и способная обрабатывать (реагировать на) некоторый набор событий.
Класс объектов PB - множество объектов, обладающих одинаковыми наборами атрибутов, методов, событий.
Прикладная система, созданная в PB, функционирует как совокупность объектов, которые под воздействием событий могут изменять свои свойства и свойства других объектов, создавать и уничтожать другие объекты.
Классы объектов подразделяются на несколько видов:
- приложение - головной объект прикладной системы, с которого начинается ее выполнение.
- окно - прямоугольная область экрана, которая может содержать меню, а также органы управления - различного рода кнопки, текстовые и графические элементы, окна с данными из БД и др.
- меню - иерархические меню, располагающиеся в панели меню некоторого окна или использующиеся как всплывающие меню.
- командная кнопка - орган управления, помещаемый в окно.
Для каждого вида объектов в PB предопределен исходный класс: "пустое" окно, "пустое" меню, "пустая" кнопка и т. д. Из них, изменяя атрибуты, описывая программы событий, расширяя набор методов, атрибутов и событий, разработчик создает новые классы.
В работе прикладной системы участвуют и объекты, не имеющие визуального представления, например, такие глобальные предопределенные системные объекты, как error (типа erroe, используемые при обработке ошибок) и sqlca (типа transaction, используемые при взаимодействии с базой данных).
Атрибуты
Атрибут - элемент данных, влияющий на внешний вид и/или поведение объекта. Примеры: BackColor (атрибут типа long, определяет цвет окна), Visible (атрибут любого графического объекта, имеет тип boolean; значение false означает, что объект невидим), Control (атрибут окна, массив элементов типа PowerObject, содержит органы управления данного окна). В программах для изменения значений атрибутов используется команда присваивания. Как только в программе какой-либо атрибут объекта получает новое значение, это тотчас же отражается на его внешнем представлении и поведении. Для задания начальных значений атрибутов в среде разработки используются всплывающие меню, выпадающие списки, радиокнопки и другие графические средства.
Методы
Совокупность методов (или функций) класса объектов определяет набор элементарных действий, которые можно совершать над объектами этого класса. Методы позволяют изменять состояние объекта либо получать информацию о нем. Примеры методов: имя_объекта.Show( ) (метод любого графического объекта, делает объект видимым), имя_окна.WorkSpaceWidth( ) (возвращает ширину рабочего пространства окна).
События
Событие - действие, совершенное по отношению к объекту пользователем или другим объектом. Примеры: clicked (возбуждается в объекте, если пользователь нажал левую кнопку мыши, когда ее указатель находился над изображением объекта на экране), open (возбуждается в объекте-окне, когда его открывают при помощи функции Open). Заметим, что любое событие в объекте можно возбудить искусственно, при помощи метода TriggerEvent, например: имя_кнопки.TriggerEvent(clicked!). Если программа обработки события не задана, считается, что объекты данного класса не реагируют на это событие.
Прикладная система
Создание прикладной системы в PB сводится к описанию множества классов объектов, составляющих систему. Повторим, что описание класса объектов, в свою очередь, сводится к описанию свойств (набора атрибутов и их начальных значений), набора методов (функций) и поведения (набора событий и программ, описывающих обработку событий).
Когда объект-приложение запускается на выполнение, в нем возбуждается событие open. Если обработка этого события в приложении не описана, возникает ошибка выполнения. В противном случае это событие обрабатывается. Как правило, в программе обработки открывается (создается) головное окно прикладной системы, содержащие меню, различного рода кнопки, строки ввода данных и другие объекты. Все эти объекты начинают "жить", т. е. обрабатывать возникающие события, в результате могут создаваться и уничтожаться другие объекты.
Для каждого вида объектов - таких как Приложение, Окно, Меню, Окно данных - в PB имеется специальная "мастерская" (Painter). Мастерская - это подсистема, содержащая инструментарий для конструирования и модификации соответствующих классов объектов. Текущее состояние вашей работы отображается в наглядной графической форме. На рис. 1 изображена мастерская окон.
Рисунок 1.
Изготовление нового оконного класса в мастерской окон. Всплывающее
меню позволяет установить атрибуты окна или его подобъектов, перейти в
мастерскую программиста для ввода или редактирования программ событий.
Накопление и многократное использование классов
PB максимально благоприятствует повторному использованию однажды созданных классов объектов. Определения классов объектов накапливаются в специальных библиотеках PB. В составе системы поставляется несколько библиотек с описаниями классов объектов и функций, которые можно использовать в своих приложениях, а также в качестве примеров при изучении PB.
Предусмотрены способы создания нового класса объектов из существующего. Для этого можно либо создать копию описания класса и затем доопределить/переопределить ее, либо воспользоваться механизмом наследования.
Наследование
Наследование отличается от доопределения/переопределения копии тем, что между родительским и порожденным классом остается связь. Если вы переопределите, например, какой-либо из атрибутов, методов, событий или подобъектов родительского класса окон, то изменения найдут отражение и во всех порожденных классах, в которых данный атрибут, метод, событие, подобъект не был явно переопределен.
В порождаемом классе объектов допускается переопределение или доопределение (но не уничтожение) всего, что было определено в родительском классе - его атрибутов, методов, событий, подобъектов. Например, в порожденном классе окон можно добавить дополнительные органы управления, но нельзя уничтожить те, что были определены в родительском. Можно, однако, сделать ненужные органы управления невидимыми и неактивными.
PB предоставляет средства для просмотра иерархии наследования классов каждого вида, созданных разработчиками, контролирует иерархию наследования классов. Например, он не позволит одновременно редактировать классы, связанные друг с другом отношением наследования, чтобы предотвратить возможные некорректности. Не допускается уничтожение класса, имеющего наследников.
Однако контроль и управление наследственными связями не всегда достаточны. Например, изменяя какой-либо атрибут класса-наследника, вы разрываете для этого атрибута наследственную связь с родительским классом. При этом не предоставляется удобных средств, позволяющих выяснить для каждого атрибута, имеет ли он унаследованное значение, или оно было изменено. Нет таких средств и для восстановления разорванной наследственной связи для каждого отдельного атрибута (хотя, если посмотреть значение атрибута у родителя и установить такое же у наследника, то наследственная связь по этому атрибуту восстанавливается).
Недостаточность контроля проявляется и при редактировании родительского класса. Если переименовать или уничтожить при этом какой-либо атрибут, например, орган управления, то описания классов-наследников могут стать некорректными. PB предоставляет средства для контроля корректности (регенерации) всех классов-потомков заданного класса. Однако эти средства не применяются автоматически. Разработчик должен заботиться об этом сам.
Характеристика видов объектов
Приложение (Application). Объект этого вида - головной в прикладной системе. Он не имеет графического представления и служит организующей оболочкой прикладной системы в целом. В нем хранятся глобальные переменные прикладной системы, список библиотек поиска, в которых содержатся классы объектов, используемые в прикладной системе, а также шрифты, используемые в системе по умолчанию.
Окно (Window). Посредством окон осуществляется взаимодействие между пользователем и прикладной системой. Окно имеет вид прямоугольника, который может содержать обычный для окон MS Windows заголовок.
Остальные элементы графического интерфейса - кнопки, меню, окна данных и др. - доступны пользователю, только если они помещены в какое-либо окно.
Специальный тип окон - так называемые MDI-фреймы - позволяют реализовать многодокументный интерфейс (MultiDocument Interface).
Для органов управления предусмотрены атрибуты, методы, события, на основе которых реализуется интерфейс "тащи-бросай" (drag and drop).
Меню (Menu). Способ функционирования и внешний вид меню, создаваемых в РВ, такой же, как у стандартных меню MS Windows. Каждой опции меню соответствует программа на языке PowerScript для обработки этой опции и, возможно, набор опций следующего уровня.
Меню подключается к окну либо статически, во время описания оконного класса, либо динамически, при помощи встроенной функции ChangeMenu. Меню или его ветвь могут также быть показаны как всплывающие меню.
Рисунок 2.
Окно данных свободного формата с bitmap-полями.
Рисунок 3.
Окно данных графического типа
Окно данных (DataWindow). Окна данных - основной инструмент обмена данными между пользователем прикладной системы и реляционной базой данных, а также другими источниками данных, такими как DBF- файлы или DDE-приложения.
Они совмещают в себе полные возможности генераторов отчетов и форм для ввода/просмотра данных.
Если источником данных является база данных, то набор данных задается либо SQL-оператором SELECT, возможно, параметризованным, либо именем хранимой процедуры и набором аргументов к ней.
Представление данных в окне зависит от стиля окна данных, выбранного при описании класса объектов. Это может быть простая или разлинованная таблица, перекрестная таблица, свободный формат, формат этикеток, многоколонный формат и, наконец, один из типов графического представления.
В окнах данных есть обычные для генераторов отчетов средства фильтрации, сортировки и группировки данных. Помимо полей данных, могут присутствовать вычисляемые поля, текстовые поля, графические элементы.
Допускается вложение окон данных. Вложенные окна либо независимы, либо содержат данные, зависящие от содержимого включающего окна данных.
Окно данных включается в прикладную систему как орган управления какого-либо окна. Подключение выполняется статически, во время описания оконного класса объектов, либо динамически, программным способом.
Пользовательский объект (User Object). Наличие этого вида объектов позволяет фиксировать и многократно использовать результаты труда разработчиков, более глубоко структурировать прикладные системы, добиваться стилистического единообразия их компонентов. Через пользовательские объекты осуществляется интеграция в объектную среду внешних классов объектов, созданных, например, в среде Visual C++ или Visual Basic. Пользовательские объекты - это заготовки, сохраняющиеся в библиотеках и затем использующиеся в качестве органов управления при построении окон. В виде пользовательского объекта можно оформить отдельный орган управления, комплект органов управления, внешний класс, невидимый класс.
Программирование пользовательских объектов осуществляется либо на языке PowerScript, либо на C++ в среде Watcom C++, в которую можно войти непосредственно из PB.
Пример совсем простого объекта - командная кнопка с такой программой обработки события clicked (нажатие кнопки мыши):
Close(Parent) //Закрыть окно, в котором я нахожусь
Однажды описав такую кнопку, вы можете включать ее во все окна своего приложения. Этим вы сэкономите свое время и обеспечите единообразие. Если, например, вы измените в определении этого пользовательского объекта текст (например, "Выход без сохранения"), размеры, шрифт или программу обработки события, то это найдет отражение во всех окнах, в которые был включен объект.
Пример более сложного пользовательского объекта - панель с кнопками для управления окном данных можно включить в любое окно, содержащее окно данных.
Пример невидимого пользовательского объекта - объект для выполнения расчетов в окне данных, скажем, вычисления налогов. Атрибутами его будут само окно данных, номер столбца с исходными данными, номер столбца, куда нужно поместить результат, параметры для расчетов. Разделяемыми атрибутами такого класса объектов будут таблицы налогов, методом - собственно выполнение расчета. Экземпляр невидимого объекта помещается в любое окно, где требуется выполнение данного вида расчетов.
Функция (Function). Помимо обширного набора стандартных функций, имеющихся в PB, разработчик может описывать, сохранять в библиотеках и использовать в программах свои функции. Различаются глобальные функции и функции, определяемые на уровне класса объектов, последние являются методами классов.
Структура (Structure). PB позволяет описывать структуры данных, подобные структурам в языках C или Pascal. Различаются глобальные структуры и структуры, определяемые на уровне класса объектов.
Запрос (Query). Запрос - это описание выборки данных, т. е. SQL-оператор SELECT. Запрос используется как источник данных при создании окна данных, либо как основа для создания снимка (View) в базе данных. Запрос не является классом объектов, а служит лишь строительным материалом при создании прикладной системы и формой фиксации деятельности разработчиков.
Линия передачи данных (Data PipeLine). Объект, описывающий процесс передачи данных из одной базы данных в другую. Он включает описание источника передачи (база данных и произвольная выборка из нее), описание конечного пункта (база данных и таблица в ней), описание формы передачи данных (создать новую таблицу в целевой базе, тем или иным образом обновить данные в существующей таблице) и иные характеристики.
Собственно передача данных по линии осуществляется как в среде разработки PB, так и программным способом, во время работы прикладной системы.
Проект (Project). Объект, описывающий структуру дистрибутива прикладной системы, который может состоять из EXE-файла и нескольких динамических библиотек, включающих в себя файлы ресурсов.
Этот объект используется при построении дистрибутива.
Как создать приложение в PB
Создание простейшей прикладной системы может состоять из следующих шагов, которые не обязательно выполнять строго в указанном порядке:
Создать базу данных или установить связь с уже существующей базой. Создать в базе данных необходимые таблицы.
Создать объект-приложение. Заодно будет создана и библиотека, в которой будут сохраняться создаваемые далее классы объектов. В приложении можно определить набор шрифтов, используемых по умолчанию. В нем же будут сохраняться определения глобальных переменных прикладной системы, если таковые понадобятся.
Создать одно или несколько окон данных для обмена информацией с базой данных.
Создать головное окно прикладной системы, включив в него в качестве органов управления окна данных, командные кнопки и др., написать для окна и его органов управления программы обработки событий.
Написать программу события open для объекта-приложения. Эта программа может включать команды, необходимые для открытия базы данных, инициализацию глобальных переменных, команду открытия головного окна.
Возможно, вы захотите также создать меню и включить его в головное окно.
Наконец, после отладки вашей прикладной системы, создается выполняемый модуль (.EXE), который может выполняться на компьютере, где не установлена система PB.
Если вы создаете более сложную прикладную систему, то, скорее всего, вы создадите и другие компоненты, такие как структуры, функции, запросы, пользовательские объекты.
Мастерские
Для создания и редактирования каждого вида объектов, а также для выполнения некоторых других действий предусмотрены специализированные среды, называемые мастерскими - мастерская окон, мастерская меню и т. п. Каждая мастерская имеет специализированное меню, свою панель инструментов и, возможно, особую структуру рабочего пространства. Могут присутствовать также панели цветов и текстовых стилей.
Вход в мастерские производится через главную панель инструментов, которая всегда присутствует на экране. Одновременно может быть открыто несколько мастерских.
Рассмотрим, например, работу в мастерской окон (рис. 1). Для создания органа управления в окне достаточно щелкнуть мышью над изображением этого органа на панели инструментов, а затем - в нужном месте окна. Вы увидите его изображение. Далее можно уточнить его положение и размеры, манипулируя мышью. Другие атрибуты органа или самого окна устанавливаются при помощи всплывающего меню или окна стиля объекта. Первое появляется при нажатии правой кнопки мыши, второе - при двойном нажатии левой кнопки. Текстовый ввод при задании атрибутов сводится к минимуму, в основном используются помечаемые клетки, радиокнопки, выпадающие списки.
В меню мастерской окон предусмотрены опции для выравнивании выделенной группы органов по вертикали или горизонтали, по размеру и расстоянию между ними. При помощи всплывающего меню легко также войти в мастерскую программиста, где вводятся программы обработки событий.
Инструментарий, предоставляемый каждой мастерской, сводит к минимуму рутинные операции, связанные с заданием внешнего оформления и поведения объектов, позволяя программисту сосредоточиться на разработке структуры прикладной системы в целом, понятного и стилистически единого пользовательского интерфейса.
Характеристика языка PowerScript
На языке PowerScript описываются программы обработки событий и тела функций.
PowerScript принадлежит к языкам четвертого поколения. Программа на этом языке состоит из деклараций переменных, собственных выполняемых команд PowerScript и команд SQL.
Поддерживаемые типы данных:
- blob - Binary large object. Большой неструктурированный, с точки зрения PB, объект, например: двоичный код, картинка, текст, предназначенный для обработки системой Word. Blob-значение может быть прочитано из базы данных или получено при помощи функции Blob.
- Целое, целое без знака, длинное целое, длинное целое без знака.
- Плавающее, плавающее с двойной точностью.
- Десятичное с фиксированной точкой, до 18 цифр.
- Текст произвольной длины.
- Символ.
- Дата, время, дата и время.
Поддерживаются одномерные массивы переменного размера и многомерные массивы с фиксированными границами.
PowerScript содержит общепринятый набор операторов, имеющих традиционный синтаксис - присваивания, вызовы функций, условные, переключатели, все разновидности циклов, метки и безусловные переходы.
PowerScript - это не только язык, но и среда программирования (мастерская программиста) со своим редактором и многочисленными средствами поиска и вставки, контекстно-зависимой помощью. Используя эти средства, можно вставить шаблон структурного оператора языка PowerScript. Для вставки SQL-операторов предусмотрена специальная среда, которая позволяет сформировать их в графическом режиме, просто указывая мышью на нужные объекты - имена таблиц или столбцов, имена функций или операторов. При этом PB использует информацию о структуре таблиц базы данных.
Средства просмотра (Browse) позволяют быстро отыскать и вставить имя атрибута, метода или события интересующего класса объектов.
Следует отметить неполноту языка PowerScript. Он предназначен только для описания процедурных фрагментов создаваемой объектной и функциональной среды (программ событий и тел функций). В нем нет средств для текстового описания структур данных или классов, заголовков функций. Поскольку в системе, поддерживающей объектную среду, должна быть информация об интерфейсной стороне классов объектов и функций, то все, связанное с интерфейсом, описывается неязыковыми средствами (см., например, рис. 4).
Рисунок 4.
Описание структуры в среде PowerBuilder.
Базы данных
PB поддерживает интерфейс ODBC, а также следующие интерфейсы, поставляемые PowerSoft: ALLBASE/SQL, IBM DRDA databases, Informix, Micro Decisionware Database Gateway Interface for DB2, ORACLE, SQLBase, SQL Server, Sybase Net-Gateway for DB2, XDB, Sybase SQL Server System 10. Непосредственно в среде PB возможно создание только локальной базы данных в СУБД Watcom SQL. Создание базы данных в любой другой СУБД должно быть выполнено вне PB, после чего к этой базе можно подключаться в среде разработки PB или программным способом.
Все остальные действия над базами данных, включая создание и уничтожение таблиц, снимков, индексов, внешних ключей, доступны для выполнения из среды PB, а также программным способом.
Для выполнения всех этих действий в мастерской баз данных имеется удобная графическая среда, в которой наглядно представлена структура таблиц и снимков, а также связи между ними. При этом, например, для создания таблицы не обязательно знать синтаксис SQL-оператора CREATE TABLE. Достаточно задать в специальном окне имя таблицы, имена и типы столбцов и некоторые другие данные, для того чтобы PB сам сформировал и запустил на выполнение соответствующие SQL-операторы.
В то же время вы вольны войти в мастерскую администратора, ввести и выполнить произвольные SQL-операторы.
Репозиторий расширенных атрибутов
PB поддерживает для каждой базы данных так называемый репозиторий расширенных атрибутов таблиц и столбцов. Репозиторий содержит некоторые дополнительные сведения о таблицах и столбцах. Так, в качестве атрибута столбца можно задать заголовок, который будет использоваться при выводе данных этого столбца, или правило верификации данных - данные, не удовлетворяющие правилу, не могут быть занесены в столбец. Репозиторий расширенных атрибутов способствует поддержанию корректности и целостности данных, а также единообразию их внешнего представления в рамках прикладной системы или семейства прикладных систем.
К атрибутам расширенного описания таблиц относятся комментарий и шрифты для вывода данных, заголовков и меток столбцов, к атрибутам расширенного описания столбцов - комментарий столбца и формат вывода данных. Формат вывода задает способ вывода данных для столбца таблицы. PB автоматически создает некоторый набор общеупотребительных форматов и предлагает выбрать один из них для столбца из выпадающего списка.
Можно создать и свои собственные именованные форматы вывода, которые будут сохранены в репозитории расширенных атрибутов.
Примеры. Формат вывода "#########0.00" указывает, что данные при выводе всегда будут иметь две цифры после десятичной точки и хотя бы одну цифру перед точкой. Формат вывода bitmap указывает, что значения в столбце рассматриваются как имена bitmap-файлов, и на экране видны соответствующие изображения. Такой формат используется, скажем, для представления образцов подписей или фотографий клиентов.
Стиль редактирования задает способ ввода данных и одновременно их внешнее представление. В PB поддерживаются 6 типов стилей редактирования:
Edit: Значение вводится в виде текста.
EditMask: Значение вводится в виде текста с использованием маски ввода (см. пример ниже).
CheckBox: Для столбцов, имеющих два или три возможных значения. Значение имеет вид помечаемой клетки (возможно, с тремя состояниями).
RadioButton: Для столбцов, имеющих небольшое число возможных значений. Внешнее представление - набор радиокнопок.
DropDownListBox: Для столбцов, имеющих конечное число возможных значений. Внешнее представление - выпадающий список.
DropDownDataWindow: Для столбцов, набор возможных значений которых задается столбцом некоторой таблицы из базы данных. Внешнее представление - выпадающий список.
PB создает в каждой базе несколько стилей редактирования. Вы можете определить свои именованные стили, которые будут сохраняться в репозитории расширенных атрибутов.
Примеры. Для столбца client_phone (телефон клиента) выбран стиль редактирования EditMask с маской "(###) ###-##-##". На экране пользователь видит маску "( ) - - ". Для столбца client_type (тип клиента) выбран стиль редактирования в виде выпадающего списка из двух строк:
Юридическое лицо
Физическое лицо
- При этом в базе данных хранится 1 символ - U или F соответственно.
- правило верификации данных
Вы можете определить свои правила, которые будут сохраняться в репозитории расширенных атрибутов.
Пример: согласно правилу match(@client_name, "^[A-ZA-Я].*$"), значение должно начинаться с заглавной буквы. При попытке занести в этот столбец значение, не удовлетворяющее правилу, SQL-команда (UPDATE или INSERT) завершается неудачей, и выдается сообщение "Фамилия клиента /название организации/ должны начинаться с заглавной буквы". Диагностическое сообщение является частью правила проверки корректности.
- заголовок для вывода в табличном виде
- метка для вывода в свободном виде
- тип выравнивания при выводе значений: прижимать влево, прижимать вправо, центрировать.
- высота поля вывода.
- ширина поля вывода.
- значение по умолчанию.
Это значение заносится в поле при создании новой строки в окне данных.
Сведения из репозитория расширенных атрибутов используются по умолчанию при создании окон данных, но в каждом окне данных можно изменить любой атрибут каждого конкретного столбца.
Библиотеки
Описания классов объектов, функции, запросы, структуры сохраняются в библиотеках PB, которые представляют собой файлы с расширением .pbl. Для выполнения действий над библиотеками и их элементами служит мастерская библиотек. В этой мастерской можно просматривать содержимое библиотек, выполнять такие действия, как создание и уничтожение библиотек, копирование, перемещение и удаление элементов, осуществлять поиск фрагмента текста в заданном множестве элементов библиотек, перегенерировать элементы с целью контроля корректности их состояния и др.
Описание каждого класса объектов хранится в библиотеке в двух формах:
Исходная форма - текст определенной синтаксической структуры, описывающий класс, включая тексты программ его событий.
Объектная форма - бинарное представление, аналогичное по структуре OBJ-файлу. Описание класса компилируется в объектную форму всякий раз, когда вы его сохраняете.
Список библиотек, в которых содержатся описания классов и функции, используемые в прикладной системе, хранится в ее объекте-приложении и называется списком поиска.
Весь контроль за размерами и количеством библиотек, а также за распределением элементов по библиотекам возлагается на разработчика. Он должен учитывать, что слишком большая по объему библиотека неэффективна, наличие большого числа маленьких библиотек приводит к тому, что список поиска становится слишком длинным, что также ведет к неэффективности. Наконец, если число элементов в библиотеке слишком велико, то самому разработчику становится трудно в ней ориентироваться. Таким образом, разработчик должен постоянно заботиться о соблюдении баланса между упомянутыми параметрами библиотек, поэтому хранение описаний классов и функций в PB вряд ли можно считать идеальным.
Поддержка версий
Собственных средств поддержки версий в PB нет. Имеются лишь интерфейсы к системам поддержки версий сторонних производителей, например, PVCS, входящая в комплект поставки PowerBuilder TEAM/ODBC. Предоставляемые PB средства сводятся к инструментарию Check In/Check Out, состоящему из четырех команд:
- Check Out - извлечь элемент из библиотеки, поместить его копию в другую библиотеку. В исходной библиотеке объект остается доступным на чтение и выполнение.
- Check In - вернуть извлеченный ранее и, возможно, измененный элемент в исходную библиотеку.
- Clear Check Out Status - снять с извлеченного ранее элемента статус Check Out, т. е. сделать его вновь доступным на изменение, не выполняя команды Check In.
- Check Status - получить листинг с информацией обо всех извлеченных элементах.
Этот инструментарий позволяет нескольким разработчикам совместно работать над общей библиотекой, извлекая из нее элементы, которые они хотят изменить, в свои личные библиотеки.
Поддержка спецификаций OLE 2.0
PB поддерживает интерфейс OLE 2.0, что позволяет создавать интегральные прикладные системы, включающие компоненты, которые создаются и обрабатываются сторонними программными продуктами, называемыми далее OLE-серверами. Например, биографии сотрудников могут храниться в виде объектов, обрабатываемых системой Word, изображения товаров - в виде объектов, для показа которых используется система Visio.
Для включения в прикладную систему OLE-компонентов PB предоставляет некоторые стандартные средства, использование которых требует от разработчика совсем немного знаний и минимальных программистских усилий. Если нужно более изощренное управление OLE-компонентами, то для этого имеются соответствующие средства, начиная от CUT / PASTE и кончая OLE-автоматизацией и управлением структурированной памятью.
Наиболее простое средство для включения в систему OLE-компонентов - это окна данных с полями типа OLE Database blob. Для этого в базе данных предварительно создается таблица, содержащая столбец, тип которого соответствует большому бинарному объекту. При создании поля OLE Database blob в окне данных достаточно указать таблицу и blob-столбец в ней, а также OLE-сервер, который будет вызываться для создания и редактирования объектов в этом поле. OLE-сервер выбирается из выпадающего списка, в котором перечислены все OLE-серверы, зарегистрированные на вашем компьютере.
На месте поля OLE Database blob видна либо иконка OLE-сервера, либо масштабированное изображение самого объекта. Например, если это PaintBrush-картинка, то видна сама картинка. Если вы включите такое окно данных в одно из окон своей прикладной системы, то пользователь сможет активировать OLE-сервер двойным щелчком мыши над изображением в поле OLE Database blob. Для работы сервера создается еще одно окно. Сервер "знает", что он обрабатывает не просто файл, а объект, переданный ему некоторой другой системой. Внешне это выражается, например, в том, что в меню File вместо опции Save присутствует опция Update, которая служит для сохранения текущего состояния объекта. Возвратившись в исходную прикладную систему, вы увидите измененное состояние объекта, если только масштаб позволяет сделать это.
Примерно с такой же легкостью в окне можно создать орган управления типа OLE 2.0 - это дает более широкие возможности управления. Например, OLE-сервер можно активировать не только в отдельном окне, но и на месте. Это значит, что редактирование будет выполняться в рамках органа управления OLE 2.0, без создания нового окна. При этом пользователю доступно меню, представляющее собой некоторое слияние меню исходной прикладной системы и меню сервера, а также панели инструментов сервера. Все изменения действительно выполняются прямо "на месте", и выполнение Update не требуется.
Конкретный объект может быть поставлен в соответствие органу управления OLE 2.0 двумя способами - путем связывания или встраивания. В первом случае органу управления соответствует ссылка на файл, и все изменения попадают в файл. Во втором объект формируется в памяти, и разработчик должен позаботиться о том, чтобы его содержимое было сохранено (в базе данных, в файле или в структурированной памяти). Активация на месте возможна только для встроенных объектов, и при условии, что сервер поддерживает интерфейс OLE 2.0.
Средства OLE-автоматизации, которые можно применить к органу управления OLE 2.0, позволяют вызвать команды OLE-сервера, установить атрибуты внешнего объекта или его подобъектов. Например, установить значения в клетках таблицы Excel или выполнить команды Word Basic. При помощи средств OLE-автоматизации можно реализовать, скажем автоматическую подготовку писем на основе шаблона письма, подготовленного в Word, помещая в него данные, которые берутся из базы данных и через рабочее поле (clipboard) вставляются в письмо средствами Word Basic.
Наконец, при помощи класса объектов OLEObject и средств OLE-автоматизации можно реализовать взаимодействие с OLE-сервером непосредственно в памяти, без участия пользователя.
Рисунок 5.
Активация Word-документа на месте, в органе управления типа OLE 2.0
Заключение
Опыт освоения PB 4.0 показал, что это мощный инструмент для построения прикладных систем в архитектуре клиент-сервер. Он содержит средства для реализации произвольных форм взаимодействия с базами данных и развитых форм пользовательского интерфейса, экономит усилия разработчиков, беря на себя многочисленные рутинные действия. Благодаря своей открытости, PB позволяет создавать интегрированные среды обработки информации, включающие возможности многочисленных программных продуктов.