Дизайнеры отчетов и этикеток Visual FoxPro представляют избранные операции пользовательского интерфейса (UI), как события построителя, которые могут быть перехвачены и обслужены приложением построителя отчетов (report builder).
Приложение построителя, вызываемое дизайнером, определяется содержимым системной переменной VFP _REPORTBUILDER, которая, по умолчанию, ссылается на приложение reportbuilder.app, находящееся в каталоге, в которую был инсталлирован Visual FoxPro. Это приложение вызывается, как из дизайнера отчетов - Report Designer, так и из дизайнера меток - Label Designer, для которой не предусмотрено соответствующей системной переменной "_LABELBUILDER". В этой и последующих статьях, вы можете подразумевать, что любые обсуждения, связанные с рассмотрением дизайнера отчетов применимы и к дизайнеру этикеток - Label Designer.
Приложение построителя отчетов имеет возможность расширять или заменять "родные" диалоговые блоки дизайнера, а лежащий в основе исходный файл текущей раскладки открытый в дизайнере отчетов полностью доступен построителю отчетов в виде курсора с частной сессией данных.
Если _REPORTBUILDER ничего не содержит или ссылается на несуществующий файл, то в этом случае ошибка не генерируется и дизайнеры будут нормально реагировать на действия пользования, как и в предыдущих версиях Visual FoxPro.
Когда в построителе отчета происходит какое-либо событие, дизайнер отчетов выполняет следующие действия:
- Создает частную сессию данных.
- Открывает копию исходного файла (.frx или lbx), открытого в данный момент в дизайнере, с алиасом "FRX."
- Вызывает приложение, определяемое содержимым переменной _REPORTBUILDER, направляя ей четыре параметра.
Приложение построителя отчетов должно подчиняться следующим API:
- Оно должно принимать по меньшей мере четыре параметра, отправляемых по ссылке, в главной программе.
- Оно должно возвращать значение дизайнеру отчетов путем изменения значения первого параметра
- Оно должно быть модальным, так как дизайнер будет ожидать возвращаемой величины для определения - какое следующее действие он должен выполнить.
Параметры, пересылаемые из дизайнера
Дизайнер направляет приложению построителя четыре параметра по ссылке:
Индекс | Параметр | Тип данных | Описание |
---|---|---|---|
1 |
ReturnFlags |
I |
Направляется по ссылке, так, чтобы приложение построителя могло вернуть значение дизайнеру отчетов или этикеток. |
2 |
EventType |
I |
Целочисленное значение, отображающее тип наступившего события. |
3 |
CommandClauses |
O |
Объект (класса Empty) со свойствами, указывающими, что опции будут использоваться в команде, которую должен выполнить дизайнер. |
4 |
DesignerSessionId |
I |
Идентификатор сессии данных, в которой работает дизайнер отчетов. |
ReturnFlags
Этот, направляемый по ссылке, параметр имеет значение равное минус единице ( -1) в случае, когда он направляется построителю отчетов; в тоже время дизайнер ожидает получение другой величины этого параметра обратно. Возможные возвращаемые значения состоят из суммы бинарных флажков:
#define constant | Bit number | Bits | Value | Description |
---|---|---|---|---|
FRX_REPBLDR_HANDLE_EVENT |
0 |
01 |
1 |
Если установлен, то этот флажок сообщает дизайнеру отчётов, что событие обслужено построителем отчетов и что действие по умолчанию, которое могло бы быть предпринято дизайнером в ответ на событие, должно быть подавлено. В этом смысле флажок идентичен оператору NODEFAULT, используемому в программных кодах методов Visual FoxPro. |
FRX_REPBLDR_RELOAD_CHANGES |
1 |
10 |
2 |
Если установлен, то этот флажок сообщает дизайнеру отчетов, что построитель произвел изменения в курсоре FRX и что эти изменения должны быть перегружены в дизайнер и отобразиться в раскладке. |
Замечание: |
---|
Константы #define, приведенные в таблице определены в файле foxpro_reporting.h, расположенном в каталоге FFC\ внутри домашнего каталога Visual FoxPro. |
EventType
Этот параметр представляет собой приведенный тип, представляющий событие, которое вынудило дизайнер отчетов вызвать приложение построителя отчетов.
#define constant | Value | Event Description |
---|---|---|
FRX_BLDR_EVENT_PROPERTIES |
1 |
Был вызван диалоговый блок Properties либо вследствие двойного щелчка, либо действием по выбору из меню. |
FRX_BLDR_EVENT_OBJECTCREATE |
2 |
В раскладке был создан элемент управления. |
n/a |
3 |
(Зарезервировано для использования в будущем.) |
FRX_BLDR_EVENT_OBJECTREMOVE |
4 |
Элемент управления был извлечен из раскладки путем удаления или действием вследствие CTRL-X/Cut. |
FRX_BLDR_EVENT_OBJECTPASTE |
5 |
Элемент управления был вставлен в раскладку путем копирования из буфера. |
FRX_BLDR_EVENT_REPORTSAVE |
6 |
Раскладка была сохранения на диск. |
FRX_BLDR_EVENT_REPORTOPEN |
7 |
Раскладка была открыта. |
FRX_BLDR_EVENT_REPORTCLOSE |
8 |
Раскладка была закрыта. |
FRX_BLDR_EVENT_DATAENV |
9 |
Было открыто окно Data Environment. |
FRX_BLDR_EVENT_PREVIEWMODE |
10 |
Был вызван режим предварительного просмотра - print preview. |
FRX_BLDR_EVENT_OPTIONALBANDS |
11 |
Был вызван диалоговый блок Optional Bands. |
FRX_BLDR_EVENT_DATAGROUPING |
12 |
Был вызван диалоговый блок Data Grouping. |
FRX_BLDR_EVENT_VARIABLES |
13 |
Был вызван диалоговый блок Variables. |
FRX_BLDR_EVENT_EDITINPLACE |
14 |
На выбранном элементе управления Label был нажат CTRL-E. |
FRX_BLDR_EVENT_SETGRIDSCALE |
15 |
Был вызван диалоговый блок Set grid scale. |
FRX_BLDR_EVENT_OBJECTDROP |
16 |
Объект(ы) был создан в раскладке путем операции drag-and-drop из окна Data Environment, Database Container или из окна Project. |
FRX_BLDR_EVENT_IMPORTDE |
17 |
Из меню Report был выбран пункт "Import data environment". |
FRX_BLDR_EVENT_PRINT |
18 |
Из меню File был выбран пункт "Print" или был выбран пункт "Run Report" из контекстного меню дизайнера. |
FRX_BLDR_EVENT_QUICKREPORT |
19 |
Из меню Report был выбран пункт "Quick Report". |
CommandClauses
Этот параметр представляет собой ссылку на объект инстанции класса Empty с рядом дополнительных свойств, отображающих различные возможные опции команды Visual FoxPro, которая исполняется дизайнером отчетов или этикеток:
Свойство | Тип данных | Описание |
---|---|---|
AddTableToDE |
L |
Указывает, что в диалоговом блоке "Quick Report" был отмечен чек-бокс "Add table to data environment". |
Alias |
L |
Указывает, что в команде CREATE REPORT | LABEL FROM.. было определено ключевое слово ALIAS, или что в диалоговом блоке "Quick Report" был отмечен чек-бокс "Add alias". |
FieldList |
O |
Содержит коллекцию номеров числовых полей, представляющих список полей команды quick report. |
File |
C |
Содержит имя исходного файла (.frx или .lbx), открытого в дизайнере. Фактически такой файл может не существовать, если была использована команда CREATE REPORT. |
Form |
L |
Определяет раскладку "быстрого" отчета:
|
From |
C |
Содержит имя таблицы, указанной в опции filename команды CREATE REPORT FROM <filename>. |
InScreen |
L |
Показывает, что в команде была использована опция IN SCREEN. |
InWindow |
C |
Определяет имя окна в опции IN <windowname>, если она была использована в команде. |
IsCreate |
L |
Указывает что вновь создана раскладка:
|
IsReport |
L |
Определяет тип раскладки, открытой в дизайнере:
|
IsQuickReportFromMenu |
L |
Указывает, что из меню "Report" была выбрана опция "Quick Report". |
NoEnvironment |
L |
Указывает, что в команду было включено ключевое слово NOENVIRONMENT. |
NoOverwrite |
L |
Указывает, что в команду было включено ключевое слово NOOVERWRITE. |
NoWait |
L |
Указывает, что в команду было включено ключевое слово NOWAIT. |
Protected |
L |
Указывает, что в команду было включено ключевое слово PROTECTED. |
Save |
L |
Указывает, что в команду было включено ключевое слово SAVE. |
Titles |
L |
Указывает, что в раскладку "быстрого" отчета должны быть добавлены элементы управления "label". |
Width |
N |
Определяет число колонок, указанное в команде quick report. |
Window |
C |
Содержит имя окна, указанное в опции windowname в части команды WINDOW <windowname>. |
DesignerSessionId
Поскольку построитель отчета вызван внутри частной сессии данных, то дизайнер отчетов или меток пересылают ему и идентификатор сессии данных, в которой они были открыты. Это позволяет построителю отчета переключиться в сессию данных дизайнера, когда ему необходимо иметь доступ к таблицам, которые могут быть открыты в раскладке окружения данных.
Курсор FRX
При вызове приложения построителя отчета в частной сессии данных будет открыта рабочая копия редактируемого файла отчета с алиасом"FRX". Кроме того:
- Указатель записи в курсоре FRX будет установлен на запись, которая представляет объект раскладки, на котором произошло событие. В некоторых случаях это может быть заглавная запись самого отчета, представляющая событие относящееся к отчету, а не к объекту в его раскладке.
- Любые записи в курсоре FRX, представляющие выбранные в данный момент времени объекты раскладки (подсвеченные мышкой и показывающие обрамляющую рамку) будут иметь установленное в .T. значение поля CURPOS.
Замечание: |
---|
Запись заголовка отчета (record 1) может также иметь значение поля CURPOS=.T., так как оно используется для хранения значения "Show Position" из опции меню View. Если приложению построителя требуется идентифицировать - сколько объектов выбрано в раскладке, то в таком случае для этих целей должен использоваться код подобный приведенному ниже COUNT FOR CURPOS AND RECNO() > 1 .
|
Смотри также
Задачи
Как: конфигурировать обработку события построителя отчетаСправочная документация
Report Builder Event Handler Registry TableДиалоговый блок Report Properties (Report Builder)
Диалоговый блок Multiple Selection (Report Builder)
Системная переменная _REPORTBUILDER