Когда ищете зарегистрированный 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 в регистрационную таблицу

  1. Следуйте следующей команде для создания ReportOutput.app регистрационной таблицы по умолчанию:

     Copy Code
    DO (_REPORTOUTPUT) WITH -100  && Write registry file
    Замечание:
    Если системная переменная _REPORTOUTPUT содержит имя Report Output Application отличающееся от ReportOutput.app в вашей среде, замените HOME() + ReportOutput.app, или аналогичный код, чтобы вводить Report Output Application.

  2. Окно BROWSE появляется с регистрационными записями для различных компонентов , использованных в таблице.

  3. Изучает текущую запись в таблице. Эта запись является удаленным входом, показывающим Вам как создавать регистрационную запись для новых данных ReportListener. Обратите внимание, что значение Objtype = 100, показывает, что она обеспечивает информацией о ReportListener-derived классе, значение Objcode =999, означает, что ReportOutput.app должен будет использовать эту запись, когда потребуется тип ReportListener 999. Также наблюдается имя класса в поле Objname(DebugListener).

  4. Из меню Table , выберите Recall Records… . В появившемся диалоге нажмите Recall. Запись DebugListener сейчас доступна.

  5. Поменяйте значение поля Objcode на другое число, например 55.

  6. Закройте окно BROWSE.

  7. Запустите следующую команду:

     Copy Code
    REPORT FORM ? OBJECT TYPE 55 
    * substitute the number you used in the table if it was not 55
  8. Команда REPORT FORM генерирует отладку результата.

  9. Сохраните текущую регистрационную таблицу для дальнейшего использования, используя следующую команду. Дополнительная информация, см.How to: Use the Report Output Application's Reference Collection.

     Copy Code
    lcOutputRegistry = _oReportOutput["-200"] && current registry

Добавление нового определения класса в регистрационную таблицу

  1. Откройте ранее созданную регистрационную таблицу, и откройте окно BROWSE.

     Copy Code
    USE (lcOutputRegistry) SHARED ALIAS MyRegistry
    BROWSE
  2. Из меню Table, выберите Append New Record. Новая запсь появится внизу окна просмотра.

  3. Поменяйте значение новой записи поля Objtype на 100,показывая использование. Поменяйте значение поля Objcode на другое значение, использованное ранее, например 77.

  4. В поле Objname, используйте другой ReportListener-derived класс. Например,Вы можете использовать "XMLDisplayListener", класс поставленный в директории Foundation Class (FFC).

  5. В поле Objvalue, используйте имя из классовой библиотеки. Файловое расширение дополнительно, если классовая библиотека является визуальной библиотекой классов(.vcx), но требуется если библиотека является программой(.prg). Если Вы использовали "XMLDisplayListener" выше, Вы должны использовать "_ReportListener"здесь.

    Замечание:
    Например, Вы можете использовать полный путь библиотеки в этом поле, или SET PATH TO (HOME() + "FFC"), когда Вы готовы ввести ReportOutput.app. Тем не менее, когда Вы устанавливаете приложение, Вы можете установить _ReportListener.VCX в файл приложения, и он будет найден без пути.

  6. Оставтье поле Objinfo пустым, если использованная Вами библиотека классов поставлена в приложнии (.app or .exe) за пределами вашего кода. Например, в записи DebugListener,имя Objinfo хранит fully-pathed имя Report Output Application, потому что поле Objvalue хранит имя библиотеки установленной в ReportOutput.app. Если Вы используете "_ReportListener" или "_ReportListener.vcx" из папки FFC в Objvalue, это значение должно быть пустым.

  7. Закройте регистрационную таблицу. (Хотя Вы открыли её SHARED, в некоторых случаях ReportOutput.app потребует открытия таблицы exclusive.) Из командного окна:

     Copy Code
    USE IN MyRegistry
  8. Гарантируйте, что путь к определенной Вами библиотеке классов будет доступен, если Вы не использовали путь в поле Objvalue ранее. Затем используйте ваш определенный класс с ReportOutput.app:

     Copy Code
    REPORT FORM ? OBJECT TYPE 77 
  9. Команда REPORT FORM генерирует результат, используя определенный вами класс.

Фильтрование записей в регистрационной таблице

  1. Откройте ранее созданную таблицу и откройте окноBROWSE.

     Copy Code
    USE (lcOutputRegistry) SHARED ALIAS MyRegistry
    BROWSE
  2. Измените величину Objcode для класса, который Вы определили в последней секции, чтобы соответствовать значению, которое Вы использовали для DebugListener раньше. Например :

     Copy Code
    GO BOTTOM
    REPLACE Objcode WITH 55
    Note:
    У Вас есть два класса, зарегистрированных с одинаковым значением (55).Но по умолчанию, ReportOutput.app будет использовать первый найденный (в данном случае, DebugListener).. В этой процедуре Вы испльзуете фильт для контроля, какую запсиь ReportOutput.app будет использовать.

  3. Из меню Table выберите Append New Record. Новая запись появится внизу окна просмотра.

  4. Измените значение Objtype новой записи на 110, значение специфическое для конфигурационных записей Report Output Application , и значение Objcode на 1, значение специфическое для записей фильтра.

  5. Записи фильтра не используют поля Objname и Objvalue. Используйте следующее выражение в поле Objinfo. Это выражение показывает, что Вы не хочете использовать любые классы установленные в файле ReportOutput.app, Вы хотите использовать внешние классы:

     Copy Code
    ATC("ReportOutput.APP",Objinfo) = 0
  6. Закройте регистрационную таблицу.

  7. Спросите Report Output Application на ссылку на ReportListener используя этот тип. Третий параметр ниже гарантирует, что любая кэш ссылкаэтого типа из ранних попыток будет реализована и Вы получите новую оценку подходящего класса:

     Copy Code
    oRL = NULL
    DO (_REPORTOUTPUT) WITH 55, oRL, 2 && reload
  8. Проверьте, классовая ссылка это второй класс, добавленный Вами в таблицу (например, XMLDisplayListener):

     Copy Code
    ? oRL.Class
  9. Откройте регистрационную таблицу снова, и поменяйте значение Objcode или сделайте такие изменения, что запись больше не квалифицировалась как фильтр:

     Copy Code
    USE (lcOutputRegistry) SHARED ALIAS MyRegistry
    GO BOTTOM
    REPLACE Objcode WITH 2
    USE && close the table again
  10. Запустите те же команды, использованные ранее и понаблюдайте ссылку на 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.