Когда вы просматриваете отчет или этикетку в режиме под управлением объекта, приемник отчета (ReportListener) требует дополнительный компонент для того, чтобы обеспечить пользовательский интерфейс просмотра. Этот компонент называется контейнером просмотра (preview container) и написан на Visual FoxPro, и, следовательно, полностью настраиваемый.

Существуют два способа передачи контейнера просмотра приемнику отчета, если он в нем нуждается:

  1. Ваш код явно записывает ссылку на контейнер в свойство PreviewContainer приемника отчета.

  2. Объект ПриемникОтчетов (ReportListener) запрашивает эту ссылку у штатного Контейнера Просмотра приложения по ссылке в системной переменной _REPORTPREVIEW.

API Контейнер Просмотра

Объект класса ПриемникОтчета (ReportListener) предполагает наличие следующих методов у Контейнера Просмотра, чтобы обеспечить его выполнение объектом, определенным в свойстве PreviewContainer:

Метод Контейнера Просмотра Параметр Описание

SetReport()

oListenerRef

Объект ПриемникОтчета (ReportListener) вызовет данный метод, при передавая ссылку на самого себя с тем, чтобы код контейнера просмотра мог вызывать методы Приемника.

  • SetReport() может вызываться до того, как отчет завершил обработку, таким образом, данный метот должен сохранить значение параметра для дальнейшего использования.

  • SetReport() может вызываться с нулевым значением параметра (.NULL.), в таком случае, контейнер просмотра должен освобождать какие-либо внутренние ссылки на ранее переданный объект приемника отчета, и вернуться  в исходное состояние.

Show()

[ iModality ]

Объект ПриемникОтчета (ReportListener) вызовет этот метод, когда механизм отчета готов показать интерфейс просмотра и позволить пользователю перемещаться по готовому отчету или этикетке. Параметр iModal - такой же, как передаваемый методу форм  Show() (Visual FoxPro).

Хотя никакая внешняя программа и не обращаются, API контейнер просмотра должен иметь внутреннюю ссылку на приемник отчета, передаваемую через метод .SetReport().

Свойсто Контейнера Просмотра Тип Описание

oReport

Объект

Методы .SetReport() и .Show() запускаются в разное время. Для того, чтобы контейнер просмотра имел доступ к различным свойствам приемника отчета в момент вызова метода Show(), он (контейнер) должен сохранить ссылку на приемник отчета, переданную в SetReport(), во внутреннем свойстве.

Объект класса ПриемникОтчета (ReportListener) также предполагает получать сообщения от объекта, заданного в его свойтве PreviewContainer:

Метод Приемника Отчетов (ReportListener) Параметр Описание

OnPreviewClose()

lPrint

Приемник отчета (ReportListener) предпологает, что его метод OnPreviewClose() будет вызван, когда пользовательский интерфейс просмотра закроется или прервется пользователем. Контейнер просмотра может передать параметр lPrint, чтобы указать, желает ли пользователь распечатать отчет после просмотра.

Какой именно метод контейнера просмотра сделал вызов - неважно. Если контейнер просмотра - форма или у него интерфейс сходный с формой, то можно использовать следующие методы - Hide(), Release(), QueryUnload() и Destroy().

Потребуется всего несколько строк кода, чтобы собрать все воедино:

  Скопировать Код
*Установить контейнер просмотра
oMyPreview = NEWOBJECT("MyPreviewContainer","MyClassLib")
* Установить приемник отчета ReportListener (или ваш собственный подкласс)
oListener  = CREATEOBJECT("ReportListener")
* Сообщить приемнику, что нужно сформировать изображения всех страниц и использовать контейнер просмотра:
oListener.ListenerType = 1
* Передать приемнику ссылку на ваш контейнер просмотра:
oListener.PreviewContainer = m.oMyPreview
* Запустить отчет:
REPORT FORM myreport OBJECT m.oListener

Для примера реализации простого контейнера просмотра отчета, смотри Создание Пользовательского Контейнера Просмотра Отчетов.

Штатный Объект  _REPORTPREVIEW

Код, показанный выше, относится к случаю, где приемник отчетов (ReportListener) явно назначен контейнеру просмотра до запуска отчета. Если у приемника отчета нет ссылки на контейнер просмотра, но она нужна, он получает ее путем вызова приложения или программы, ссылка на которые находиться в системной переменной _REPORTPREVIEW.

Программа, ссылка на которую осуществляется через  _REPORTPREVIEW, должна выполнять следующее:

  • Принять параметр, переданный по ссылке, из механизма отчета.

  • Назначить этому параметру ссылку на класс, который реализует API контейнер просмотра.

  • Вернуться.

Пример:

  Cкопировать Код
* Программа, приемлемая для  _REPORTPREVIEW:
LPARAMETER loRef
loRef = NEWOBJECT("MyPreviewContainer","MyClassLib")
return

Программа, указанная в _REPORTPREVIEW, вызывается, когда вы задаете следующие типы команд Visual FoxPro:

  • REPORT FORM или LABEL … PREVIEW, когда SET("REPORTBEHAVIOR") имеет значение 90.

  • REPORT FORM или LABEL … OBJECT <oRef> , когда  oRef.ListenerType равен 1 и не определено значение oRef.PreviewContainer.

  • REPORT FORM или LABEL … OBJECT TYPE 1 , когда не определено свойство PreviewContainer приемника отчета (ReportListener), назначенного штатным приемником через _REPORTOUTPUT.

Смотри Также