По умолчанию приложение вывода отчета (ReportOutput.app) соответствует стандартным требованиям приложения, описанном в переменной _REPORTOUTPUT.

    

NoteЗамечание

Для полной информации о требованиях для Приложения вывода отчета см.  _REPORTOUTPUT системная переменная.

Этот раздел охватывает детали выполнения этих требований приложением вывода отчета. От также описывает некоторые дополнительные возможности, поставляемые по умолчанию данным приложением.

ReportOutput.app ReportListener Коллекция ссылок

Вы можете явно присвоить переменной ссылку на объект ReportListener, если Вы вызовите приложение вывода отчета используя следующий синтаксис:

  CopyCode imageCopy Code
LOCAL loRef
do (_REPORTOUTPUT) with <N>, loRef
IF ISNULL(loRef)
   *Приложение вывода отчета не распознало значение <N>
ELSE 
   ? loref.outputtype
   ? loref.class
ENDIF

Однако, во многих случаях ReportOutput.app обеспечивает ссылку на объект ReportListener без Вашего явного назначения переменной для ссылки. Это ситуация появляется если Вы установили значение SET REPORTBEHAVIOR в 90, или Вы используете выражение OBJECT TYPE <N> в Вашей команде REPORT FORM или LABEL.

ReportOutput.app поддерживает глобальную переменную, _oReportOutput, производную от базового класса "Collection" . Она хранит ссылку на объект производный от ReportListener, для которого она обеспечивает ссылку в этом наборе. Коллекция ссылок на объекты ReportListiner имеет глобальную область видимости, поэтому Вы можете с успехом использовать ее повторно для множества отчетов, не обращая внимания на то, как или где Вы пытаетесь получить ссылку.

Обеспечивая область действия ReportListener,  используя коллекцию ссылок для ReportOutput.app или подобную стратегию необходимо для того, чтобы поддержать связь множества отчетов с одним выходным результатом.

Вы можете извлечь ссылку на объект из набора используя строковое значение соответствующего OutputType, как ключ коллекции:

  CopyCode imageCopy Code
#DEFINE PRINT_MODE 0
REPORT FORM ? OBJECT TYPE PRINT_MODE 
LOCAL loRef
loRef = _oReportOutput[TRANSFORM(PRINT_MODE)]
? loRef.OutputType  && Будет 0
? loRef.PageTotal && будет общим количеством страниц
                  && с последнего запуска печати

Для большей информации см. Как: Использовать коллекцию ссылок приложения вывода отчета.

NoteЭто важно

ReportOutput.app резервирует права на использование дополнительного значения ключа в этой коллекции для других пользователей за исключением ссылок на объект ReportListener. Например, если Вы определите пользовательскую таблицу регистрации вывода отчета, то имя этой таблицы сохранится в коллекции ссылок. Для большей информации см. Как: Описать альтернативную таблицу регистрации вывода  отчета.

ReportOutput.app Расширенные параметры

ReportOutput.app расширяет использование двух, требуемых _REPORTOUTPUT параметра, обеспечивая режим работы по умолчанию, если второй параметр не включен, и добавляет необязательный третий параметр. Далее представлен соответствующий синтаксис для ReportOutput.app

  CopyCode imageCopy Code
DO ReportOutput.app WITH ;
   nListenerType [,eListenerReference [,eUnload]]

Этот раздел описывает обработку каждого параметра ReportOutput.app.

Первый параметр: nListenerType

Когда обрабатывается параметр nListenerType, ReportOutput.App принимает все номера больше чем  или равные -1 для  обеспечения объекта ReportListener ссылкой правильного типа. -1 это значение по умолчанию свойства ListenerType  объекта ReportListener.

NoteПримечание

Если nListenerType числовая, но не целочисленная переменная, ReportOutput.app принимает значение, но использует целую часть принимаемого значения как требуемый тип.

Если  nListenerType равен -1, он обеспечивае ссылку к экземпляру объекта базового класса ReportListener. Если он больше чем -1, ReportOutput.app начинает  процесс обработки для определения какой класс, порожденный от ReportListener будет обеспечивать ссылку, как следует ниже:

  • ReportOutput.app в первую очередь проверяет  имеет ли он кэшированную ссылку к объекту, заранее созданную для этой переменной. Если она находится, то  повторно используется эта ссылка.
  • Если кэшированная ссылки не доступна, ReportOutput.app проверяет свою таблицу регистрации для любой команды  пользователя, связанной с этим значением. Таблица регистрации описывается  в последнем разделе этой темы.
  • Если нет доступных команд пользователя, используются встроенные команды по умолчанию, перечисленные в следующей таблице.
nListenerType значение Класс, обеспечивающий ссылку по умолчанию к ReportListener

0

ReportListener User Feedback Foundation Class

1

ReportListener User Feedback Foundation Class

2

ReportListener Baseclass

3

ReportListener Baseclass

4

ReportListener XML Foundation Class

5

ReportListener HTML Foundation Class

999

ReportListener Debug Foundation Class

NoteПримечание  

Имейте ввиду, что взятый в отдельности ReportListener класс может управлять множеством значений nListenerType. ReportOutput.app назначает величину nListenerType , которая изменяет свойство OutputType объекта. Значение этого свойства является частью описанных требований для любого Приложения Вывода Отчета. Если объект является экземпляром класса, порожденного от ReportListener, ReportOutput.app проверяет объект и решает нужно ли переназначить свое собственное свойство ListenerType, базирующееся на OutputType, или оставить его нетронутым. Если объект является экземпляром базового класса ReportListener, ReportOutput.app присваивает значение nListenerType свойству ListenerType объекта. Для большей информации см.  Свойство OutputType(Visual FoxPro) и Свойство ListenerType   .

ReportOutput.app резервирует все значения nListenerType меньше, чем -1 для для расширения своей функциональности. Два таких значения -100 и -200 описаны ниже.

Второй параметр: eListenerReference

ReportOutput.app обрабатывает свой второй параметр eListenerReference, как необязательный. Если он не получен, ReportOutput.app просто сохраняет ссылку на экземпляр соответствующего класса ReportListener  в свою коллекцию ссылок. Такое режим работы дает вам возможность установить различные ссылки на ReportListener до того, когда они потребуются для распечатки отчета.

Если ReportOutput.app получает свой параметр eListenerReference, он принимает либо объявленную переменную, как показано в примере в предыдущем разделе,  либо символьную строку, представляющую переменную. Если Вы принимаете символьную строку в качестве переменной, или если переменная, представленная символьной строкой не существует, ReportOutput.app инициализирует переменную, как ГЛОБАЛЬНУЮ.

Вы можете также использовать символьную строку в качестве параметра eListenerReference, если Вы хотите назначить ReportListener в качестве члена объекта. Например:

  CopyCode imageCopy Code
#DEFINE PREVIEW_MODE 1
Ox = CREATEOBJECT("custom")
Ox.addProperty("myReportListener")
DO (_REPORTOUTPUT) WITH PREVIEW_MODE, "ox.myReportListener"
REPORT FORM ? OBJECT ox.MyReportListener
? ox.myReportListener.Name

Если член объекта не существует но ReportOutput.app может подтвердить, что сам объект существует, то этот член создается.  Для этой цели используется контейнерная иерархия объекта. Например:

  CopyCode imageCopy Code
#DEFINE PREVIEW_MODE 1
Ox = CREATEOBJECT("form")
Ox.addobject("myChildObject","custom")
DO (_REPORTOUTPUT) WITH PREVIEW_MODE, "ox.myChildObject.RL"
REPORT FORM ? OBJECT ox.myChildObject.RL
? ox.myChildObject.RL.PageTotal

Третий параметр: eUnload

Вы можете освободить ссылку ReportListener  из коллекции ссылок ReportOutput.app  явно, см. далее:

  CopyCode imageCopy Code
#DEFINE PRINT_MODE 0
_oReportOutput.Remove[TRANSFORM(PRINT_MODE))

Однако, ReportOutput.app предусматривает третий параметр, поэтому Вы можете запросить приложение управлять этой ссылкой для Вас, прямо без адресации к коллекции напрямую. Параметр позволит Вам явно освободить ссылку или освободить и немедленно получить новый экземпляр, как показано в следующем примере.

  CopyCode imageCopy Code
#DEFINE PRINT_MODE 0
#DEFINE OUTPUTAPP_LOADTYPE_RELOAD 2
   DO (_reportoutput) WITH ;
      PRINT_MODE , ox, OUTPUTAPP_LOADTYPE_RELOAD

Далее рассматриваются значения параметра eUnload.

eUnload значение параметра e Использование

Не передается, логический  (.F.), или передается, но  не логический или числовой тип.

Игнорируется. ReportOutput.app обеспечивает стандартный режим работы: загружает ReportListener или выполняет другое действие определенное  значением свойства nListenerType .

Логический  (.T.) или числовое значение 1.

ReportOutput.app не  предусматривает ссылку на объект ReportListener. Проверяет использование объектом ReportListener ключа, установленного  nListenerType, и удаляет этот ReportListener  из своей коллекции, если он найден.

Все числовые значения больше 1.

ReportOutput.app удаляет ссылку на объект ReportListener  из своей коллекции, если найдет, и затем перезагружает подходящую ссылку. Сохраняет эту ссылку в переменной, отображаемой в параметре eListenerReference .

Таблица регистрации ReportOutput.app ReportListener

ReportOutput.app обеспечивает значение по умолчанию ссылки на объект ReportListener, в соответствии с таблицей, содержащей значения  nListenerType  и названий классов из предыдущего раздела. Вы можете использовать таблицу регистрации для перезаписи этих установок.

ReportOutput.app использует ту же конфигурацию или структуру таблицы регистрации, как ReportListener Foundation классы используют для сохранения своей конфигурационной информации. Последующий код показывает Вам базовую структуру этой таблицы. Вы можете добавлять поля в эту таблицу любого типа, а порядок полей не важен ни в компонентах Report Output Application, ни Foundation классах.

  CopyCode imageCopy Code
CREATE TABLE (CONFIG_TABLE_NAME) ;
   (objtype i, ;
    objcode i, ;
    objname v(60), ;
    objvalue v(60), ;
    objinfo m)    

И ReportOutput.app и ReportListener Foundation классы обеспечивают возможность создания таблицы для Вас. Для большей информации по созданию таблицы и назначению ее, как Вашей таблицы регистрации приложения вывода отчета (Report Output Application) , см. Как: Описать альтернативную таблицу регистрации приложения вывода отчета.

NoteПримечание

ReportOutput.app и ReportListener Foundation классы используют эту структуру таблицы по разному и требуют различных индексов. Однако, не имеет значения какой компонент создает таблицу или Вы создаете ее, как пустую таблицу, как показано в примере кода выше. Каждый компонент будет создавать любые записи и индексы, которые ему нужны при обращении к этой таблице.

ReportOutput.app резервирует область 100-999 для значений поля OBJTYPE в таблице конфигурации. Он использует значение поля OBJTYPE 100 для представления регистрационных записей класса ReportListener. Следующая таблица показывает использование записей в таблице для целей регистрации  ReportListener.

Поле Применение Примечания

OBJTYPE

100

Значение 100 в этом поле соответствует записи регистрации ReportListener .

OBJCODE

nListenerType

Значение этого поля связано с первым параметром ReportOutput.app.

OBJNAME

Класс

Это имя класса может быть ReportListener (базовый класс).

OBJVALUE

Библиотека классов (.vcx) или процедурный файл (.prg), содержащий описания классов.

Может быть пустым, если имя класса ReportListener.

OBJINFO

Модуль/Приложение, содержащее библиотеку.

Может быть пустым, если  библиотека классов встроено в Ваше приложение.

ReportOutput.app описывает значение поля Objtyp 110 для сохранения другой конфигурационной информации для  своего собственного использования. Он использует записи со значением поля Objtyp 110 и значениями поля Objcode 1 для фильтрации записей регистрации ReportListener, основанной на критериях пользователя. Записи со значением поля Objtyp 110 и  любыми другими значениями поля Objcode резервируются для использования для других конфигураций ReportOutput.app, но не текущих.

Следующая таблица показывает использование  полей таблицы регистрации для фильтрации записей.

Поле Применение Примечания

OBJTYPE

110

Значение 110 в этом поле соответствует записи конфигурации  ReportOutput.app.

OBJCODE

1

Значение 1 в этом поле для записи с  значением в поле  Objtype 110, есть запись фильтра.

OBJNAME

не используется

Поле игнорируется

OBJVALUE

не используется

Поле игнорируется

OBJINFO

Выражение для фильтра

Выражение, которое Вы введете в это поле включается в выражение поиска (LOCATE) когда ищется таблица регистрации для требуемого класса с заданным значением nListenerType. Команда LOCATE конструируется следующим образом:

  CopyCode imageCopy Code
#DEFINE OUTPUTAPP_OBJTYPE_LISTENER    100
   LOCATE FOR ObjType = ;
   OUTPUTAPP_OBJTYPE_LISTENER AND ;
   (ObjCode = iType)  ;
   &cFilter ;
   AND (NOT DELETED())

For more information, see How to: Register Custom ReportListeners and Custom OutputTypes in the Report Output Registry Table.

Возвращаемые значения от ReportOutput.app

Приложение Вывода Отчета должно быть модальным , потому что требуется возврат значения в обработчик  отчетов (Report Engine) , как часть процесса обработки команд REPORT FORM или LABEL. Visual FoxPro получает это возвращенное значение используя параметр eListenerReference, который передается по ссылке; собственный обработчик не распознает возвращенное значение от ReportOutput.app.

Однако, ReportOutput.app не возвращает значение, если Вы вызвали его, как функцию, показывая результат выполнения задачи через параметр nListenerType:

  CopyCode imageCopy Code
? ReportOutput(5, "oRL")
* returns .T.
DISPLAY MEMO LIKE oRL
* Shows that the call above
* declares the variable oRL PUBLIC if
* it is not already in scope, 
* because it was passed as a string
* stores a reference to the HTMLListener
* Foundation class in this variable.
? ReportOutput(25,"oRlx")
* returns .F.
DISPLAY MEMO LIKE oRLx
* Shows that the call above does
* not declare the variable oRLx

ReportOutput.app Настройки компиляции

Исходный код ReportOutput.app доступен в архивированном виде в папке XSource в каталоге Visual FoxPro \Tools. Для большей информации см. Папка XSource .

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

Ниже в таблице приведены примеры значений в файле заголовка доступные для настройки.

#DEFINEd константа Значение по умолчанию Изменить это значение на:

OUTPUTAPP_INTERNALDBF

"_ReportOutputConfig"

Имя построенной таблицы регистрации.

OUTPUTAPP_EXTERNALDBF

"OutputConfig"

Имя таблицы регистрации на диске по умолчанию.

OUTPUTAPP_REFVAR

_oReportOutput

Имя глобальной переменной для коллекции ссылок.

OUTPUTAPP_BASELISTENER_CLASSLIB

"Listener.VCX"

Имя библиотеки, содержащей ReportListener класс по умолчанию.

OUTPUTAPP_CLASS_PRINTLISTENER

"UpdateListener"

Имя класса, используемого по умолчанию для обработки значения 0 (печать) параметра eListenerType.

Смотри также