Когда ищете зарегистрированный ReportListener, ReportOutput.app проверяет записи в регистрационной таблице со значением 100 в поле Objtype и значение в поле ObjCode сочетается с первым полученным параметром. Игнорируются удаленные записи в таблице, и используются регистрационные записи со значением 110 в поле ObjType, применяя дополнительные фильтры, ограничивающие записи, которые нужно считать.
Когда найдена нужная запись, ReportOutput.app используетостальные поля, чтобы установить связь с Вашим назначенным ReportListener-derived классом.
В этой теме Вы узнаете, как создать записи в регистрационной таблице, которые ReportOutput.app сможет использовать в процессе.
![]() |
---|
Более подробную информацию о структуре и использованию, смотрите Understanding the Report Output Application. Более подробную информацию о создании и спецификации регистрационной таблицы, смотрите How to: Specify an Alternate Report Output Registry Table. |
Как добавить новое значение OBJECT TYPE в регистрационную таблицу
-
Следуйте следующей команде для создания ReportOutput.app регистрационной таблицы по умолчанию:
Copy Code
DO (_REPORTOUTPUT) WITH -100 && Write registry file
Замечание:
Если системная переменная _REPORTOUTPUT содержит имя Report Output Application отличающееся от ReportOutput.app в вашей среде, замените HOME() + ReportOutput.app
, или аналогичный код, чтобы вводить Report Output Application. -
Окно BROWSE появляется с регистрационными записями для различных компонентов , использованных в таблице.
-
Изучает текущую запись в таблице. Эта запись является удаленным входом, показывающим Вам как создавать регистрационную запись для новых данных ReportListener. Обратите внимание, что значение Objtype =
100
, показывает, что она обеспечивает информацией о ReportListener-derived классе, значение Objcode =999
, означает, что ReportOutput.app должен будет использовать эту запись, когда потребуется тип ReportListener999
. Также наблюдается имя класса в поле Objname(DebugListener
). -
Из меню Table , выберите Recall Records… . В появившемся диалоге нажмите Recall. Запись DebugListener сейчас доступна.
-
Поменяйте значение поля Objcode на другое число, например
55
. -
Закройте окно BROWSE.
-
Запустите следующую команду:
Copy Code
REPORT FORM ? OBJECT TYPE 55 * substitute the number you used in the table if it was not 55
-
Команда REPORT FORM генерирует отладку результата.
-
Сохраните текущую регистрационную таблицу для дальнейшего использования, используя следующую команду. Дополнительная информация, см.How to: Use the Report Output Application's Reference Collection.
Copy Code
lcOutputRegistry = _oReportOutput["-200"] && current registry
Добавление нового определения класса в регистрационную таблицу
-
Откройте ранее созданную регистрационную таблицу, и откройте окно BROWSE.
Copy Code
USE (lcOutputRegistry) SHARED ALIAS MyRegistry BROWSE
-
Из меню Table, выберите Append New Record. Новая запсь появится внизу окна просмотра.
-
Поменяйте значение новой записи поля Objtype на
100
,показывая использование. Поменяйте значение поля Objcode на другое значение, использованное ранее, например77
. -
В поле Objname, используйте другой ReportListener-derived класс. Например,Вы можете использовать "
XMLDisplayListener
", класс поставленный в директории Foundation Class (FFC). -
В поле Objvalue, используйте имя из классовой библиотеки. Файловое расширение дополнительно, если классовая библиотека является визуальной библиотекой классов(.vcx), но требуется если библиотека является программой(.prg). Если Вы использовали "
XMLDisplayListener
" выше, Вы должны использовать "_ReportListener
"здесь.Замечание:
Например, Вы можете использовать полный путь библиотеки в этом поле, или SET PATH TO (HOME() + "FFC"), когда Вы готовы ввести ReportOutput.app. Тем не менее, когда Вы устанавливаете приложение, Вы можете установить _ReportListener.VCX в файл приложения, и он будет найден без пути. -
Оставтье поле Objinfo пустым, если использованная Вами библиотека классов поставлена в приложнии (.app or .exe) за пределами вашего кода. Например, в записи DebugListener,имя Objinfo хранит fully-pathed имя Report Output Application, потому что поле Objvalue хранит имя библиотеки установленной в ReportOutput.app. Если Вы используете
"_ReportListener
" или "_ReportListener.vcx
" из папки FFC в Objvalue, это значение должно быть пустым. -
Закройте регистрационную таблицу. (Хотя Вы открыли её SHARED, в некоторых случаях ReportOutput.app потребует открытия таблицы exclusive.) Из командного окна:
Copy Code
USE IN MyRegistry
-
Гарантируйте, что путь к определенной Вами библиотеке классов будет доступен, если Вы не использовали путь в поле Objvalue ранее. Затем используйте ваш определенный класс с ReportOutput.app:
Copy Code
REPORT FORM ? OBJECT TYPE 77
-
Команда REPORT FORM генерирует результат, используя определенный вами класс.
Фильтрование записей в регистрационной таблице
-
Откройте ранее созданную таблицу и откройте окноBROWSE.
Copy Code
USE (lcOutputRegistry) SHARED ALIAS MyRegistry BROWSE
-
Измените величину Objcode для класса, который Вы определили в последней секции, чтобы соответствовать значению, которое Вы использовали для DebugListener раньше. Например :
Copy Code
GO BOTTOM REPLACE Objcode WITH 55
Note:
У Вас есть два класса, зарегистрированных с одинаковым значением ( 55
).Но по умолчанию, ReportOutput.app будет использовать первый найденный (в данном случае,DebugListener
).. В этой процедуре Вы испльзуете фильт для контроля, какую запсиь ReportOutput.app будет использовать. -
Из меню Table выберите Append New Record. Новая запись появится внизу окна просмотра.
-
Измените значение Objtype новой записи на
110
, значение специфическое для конфигурационных записей Report Output Application , и значение Objcode на1
, значение специфическое для записей фильтра. -
Записи фильтра не используют поля Objname и Objvalue. Используйте следующее выражение в поле Objinfo. Это выражение показывает, что Вы не хочете использовать любые классы установленные в файле ReportOutput.app, Вы хотите использовать внешние классы:
Copy Code
ATC("ReportOutput.APP",Objinfo) = 0
-
Закройте регистрационную таблицу.
-
Спросите Report Output Application на ссылку на ReportListener используя этот тип. Третий параметр ниже гарантирует, что любая кэш ссылкаэтого типа из ранних попыток будет реализована и Вы получите новую оценку подходящего класса:
Copy Code
oRL = NULL DO (_REPORTOUTPUT) WITH 55, oRL, 2 && reload
-
Проверьте, классовая ссылка это второй класс, добавленный Вами в таблицу (например, XMLDisplayListener):
Copy Code
? oRL.Class
-
Откройте регистрационную таблицу снова, и поменяйте значение Objcode или сделайте такие изменения, что запись больше не квалифицировалась как фильтр:
Copy Code
USE (lcOutputRegistry) SHARED ALIAS MyRegistry GO BOTTOM REPLACE Objcode WITH 2 USE && close the table again
-
Запустите те же команды, использованные ранее и понаблюдайте ссылку на DebugListener Вы получите на этот раз:
Copy Code
DO (_REPORTOUTPUT) WITH 55, oRL, 2 && reload ? oRL.Class
Заметка:
Фильтры могут находится в дополнительных полях регистрационной таблицы, потому что определенные пользователем поля разрешены в таблице. Например, Вы можете иметь логическое поле с именем CustPref, и фильтр со значением CustPref
, означающей какой класс пользователь предпочтет использовать. Чтобы работать как фильтр, выражению должно быть что то присвоено в утверждении LOCATE, применённому в регистрационной таблице. Report Output Application использует фильтр в выражении LOCATE, когда ищет подходящий результирующий тип ReportListener в регистрационной таблице. Более подробную информацию о том , как Report Output Application использует поле Objinfo применяя фильтр,и как он использует оставшиеся колонки таблицы регистрации, см.Understanding the Report Output Application.