XmlListener обеспечивает вывод отчета приложения, по умолчанию реализованный через ListenerType 4 (XML-вывод ). Свойства включают многочисленные установки, вы можете использовать их, чтобы настраивать XML-схемы, чтобы настраивать вывод для других целей. Например, если вы посылаете ваш отчет XML другому приложению, для импорта в базу данных, Вы можете не нуждаться в верхнем и нижнем колонтитулах в отчете. Эти части отчета предоставляются в промежутках, основанных на физическом размере страницы отчета, и не могут связываться непосредственно со строками данных в отчете.

VFP Report XML включает данные, описывающие отчет или название файлового формата информации ( frx или lbx таблица), а также установочные параметры прогона REPORT FORM, установок принтера, открытия таблиц и связей. Эта секция XML структуры известна как VFP-RDL, или Visual FoxPro Report Definition Language. Схема элементов для этих пунктов отличается от элементов сгенерированных для выражений времени выполнения программы, линий и остальных элементов управления отчетом как Report Engine предоставляет каждую запись в течение REPORT FORM команд.

Более полную информацию о VFP Reporting XML схеме, смотрите Using VFP Report Output XML.

Категория Составление отчетов

Default Catalog

Visual FoxPro Catalog\Foundation Classes\Output\Report Listeners

Class

XmlListener

Base Class

ReportListener

Class Library

_REPORTLISTENER.vcx

Parent Class

UtilityReportListener (ReportListener Utility and File-handling Foundation Class)

XmlListener и Report Continuation

XmlListener использует ключевое слово NOPAGEEJECT в командах REPORT FORM , выполненных в последовательности,так что один VFP отчет документа XML может включать информацию о многочисленных запусках отчетов.

Искомое ключевое слово NOPAGEEJECT доступно только из программ (Не будет эффекта , если Вы вызываете команду REPORT FORM в коммандном окне). Вы должны использовать свойство в noPageEject в XmlListener,а не стандартное ключевое слово, если Вы хотите интерактивно попроблвать эту способность.

Важно
You must observe the same constraints when applying continuation to XML generation as you would use when printing. You are responsible to issue a final REPORT FORM without a NOPAGEEJECT clause to tell XmlListener to stop writing to the file, just as you would need the final REPORT FORM command to close the print queue. Тем не менее, если Вы забудете сделать это, Destroy метод класса закончит работу выхода и закроет файл.

XmlListener handles the REPORT FORM command's RANGE clause. However, in report documents containing multiple reports through use of the continuation feature, it only handles RANGE if you do not also use the NORESET clause.

XmlListener's XML Generation Process

XmlListener использует смешанные методы достижения XML результатов. Класс Visual FoxPro XMLAdapter обеспечивает часть схемы, которая описывает FRX и описывает премя прогона метаданных (the VFP-RDL). Он также использует объекты MSXML, чтобы усилить узлы VFP-RDL. Класс генерирует данные схемы, используя "raw" метод, который посылает данные низкоуровным файловым функциям Visual FoxPro, и имея полное преимущество на другой string-handling возможностью оперировать normal encoding chores.

Заметки:
Вы можете перекомпилировать класс, чтобы регулировать объекты MSXML, которыми пользуется XmlListener, и Вы также можете выбрать объекты MSXML последовательно, а не "raw" методом , который используется по умолчанию для обеспечения the data portions of the output. Использование объектов MSXML во время обработки может облегчить некоторые сценарии, в которых результат отчета требует двоичное кодироваие данных. Для того чтобы регулировать процесс, измените значение заголовка файла XmlListener, REPORTLISTENERS.H. По умолчанию знчение показано ниже:

 Copy Code
#DEFINE OUTPUTXML_RAW             0
#DEFINE OUTPUTXML_DOM             1
#DEFINE XMLOUTPUT      OUTPUTXML_RAW
#DEFINE OUTPUTXML_DOMDOCUMENTOBJECT ;
  "Msxml2.FreeThreadedDOMDocument.4.0"
#DEFINE OUTPUTXML_DOMFREETHREADED_DOCUMENTOBJECT ;
  "Msxml2.FreeThreadedDOMDocument.4.0"
#DEFINE OUTPUTXML_XSLT_PROCESSOROBJECT ;
  "Msxml2.XSLTemplate.4.0"

XmlListener и XSLT

Как только Вы сгенерировали XML документ, Вы часто должны будете менять его формат. XmlListener обеспечивает возможность Extensible Stylesheet Language Transformations (XSLT).Вы можете загрузить XSLT документ и запрсить, чтобы XmlListener выдавал конечный результат ваших проебразований, а не исконную схему отчета VFP документа XML.

XmlListener и его конфигурационная таблица

Подобно своим суперклассам UtilityReportListener, XmlListener используют такую же конфигурационную табличную структуру что и Report Output Application. Он резервирует диапазон величин в OBJTYPE (1100 до 1199)как путь поиска XML узлов, названных в честь отчетных элементов. Использование конфигурационной структуры для хранения узловых имен является путем локализации элементов XML для удобства прочтения. Например, по умолчанию значение PH как имя для заголовка страницы не могло быть понятно разработчику на владеющим английским, или разработчик мог предпочесть более краткую нотацию. Поскольку XmlListener может прочитать значения во время выполнения, схема Xml отчета VFP должна быть просчитана как структурная модель; фактические имена во времени выполнения могли быть другими.

XmlListener загружает эту информацию в конфигурационную таблицу в зависимости от схемы, которую Вы видите в следующей таблице.

Поле Использование

OBJTYPE

Хранит в оригинальной таблице FRX значение OBJTYPE для value for the type of band or layout object the XML element describes, добавляя 1100. Например, Picture layout control в FRX имеет OBJTYPE 17, так запись хранящаяся в узле XML, названная Picture layout control имеет значение 1117.

OBJCODE

Имеет тоже значение , что и запись того же типа в FRX. Например, запись, хранящая XML имя для Detail Footer имеет такой же OBJCODE, что и DetailFooter, записанная в FRX.

OBJNAME

Не используется XmlListener

OBJVALUE

Хранит узловое имя.

OBJINFO

Хранит описательное значение для типа данных в FRX. Например, Detail Footer Band nodename .

Если XMLListener - подкласс UtilityReportListener, который генерирует регистрационную таблицу по ходу выполнения,или если он не может найти необходимые записи в ранее существовавшей регистрационной таблице, он добавит подходящие записи для всех элементов, если это необходимо. Он также добавит если необходимо специализированные индексные ключи.

Заметки

XmlListener добавляет открытые следующие свойства и методы в его родительский класс, UtilityReportListener.

Свойства и методы Описание

applyUserTransform Property

Indicates whether XMLListener should automatically apply a user-defined XSLT transform at the conclusion of a report run.

По умолчанию .F.

Заметки: Когда Вы установили это свойство на .T., ассоциированный метод проверяет , заполнили ли Вы свойсво xsltProcessorUser соотвествующим объектом. Если нет, это выполняет внутренний метод, getDefaultUserXslt, загружает свойство xsltProcessorUser. Этот внутренний метод обеспечивает a hook for subclasses to supply their preferred XSLT document без использования внешней загружаемой процедуры.

applyXslt Method

Обеспечивает общие средства для применения XSLT на XML.

Синтаксис: applyXslt (vSource, vProcessor [, vParamCollection])

Возврвтные значения: cXmlResult

Параметры:

vSource может быть файлом, удерживающим исходный документ XML, строкой, хранящей документ XML, или объектом документа DOM.

vProcessor может быть файлом, хранящим документ процессора XSLT, строкой, хранящей документ XSLT, или объект процессора XSLT.

vParamCollection дополнительный объект для типа Collection. Если доступно , этот метод adds the members of the collection to the XSLT processor instance as global parameters before applying the XSLT transformation to the source document. Он использует ключи collection как именя параметра, и соответствующие значения collection как значения параметра.

XmlListener обеспечивает свойство, xsltParameters, Вы можете использовать его для хранения этих параметров между вызовами..

Заметки: Оба источник XML и объект процессора XSLT опрелены в REPORTLISTENERS.H. Вы можете отредактировать этот заголовок файла и перекомпилировать класс, чтобы выбирать другую обработку объектов.

contAttr Property

Supplies the name of the attribute used to show continuation type for a layout object that can span bands or pages.

По умолчанию "c"

currentDocument Property

Хранит информацию о документе XML для которого результат генерируется пока отчет работает..

По умолчанию .NULL.

heightAttr Property

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

По умолчанию "h"

idAttribute Property

Поставляет имя атрибута used to provide the FRX record number for a layout object or page number of a formatting band (column or page) object.

По умолчанию "id"

idrefAttribute Property

Supplies the name of the XML attribute used to provide the current page for a layout object or FRX record number of a formatting band (column or page) object.

По умолчанию "idref"

includeBandsWithNoObjects Property

Показывает независимо band-level информацию для полос с пустым содержанием, которые должны быть включены XML.

По умолчанию .F.

includeBreaksInData Property

Независимо определяет, форматируемые полосы (страницы и колонки) должны ли они быть включены в результат , если должны, использует эту структуру.

Значения

0

Provide page band nodes positioned along with other bands in the datastream, wherever they happen to occur

1

Никакой pagebreak информации, никакой информации по колонтитулах.

2

Обеспечивает сбор страниц с данными верхнего и нижнего колонтитулов.

По умолчанию 0

includeDataSourcesInVfpRdl Property

Указывает независимо информацию об исходных таблицах, отношениях, индексах, и т.д., которадая должна быть включена в секцию метаданных VFPRDL отчета XML.

По умолчанию .F.

includeFormattingInLayoutObjects Property

Указывает форматируемую информацию такую как позиционирование атрибутов должно быть включено в сообщение XML.

По умолчанию .F.

leftAttr Property

Поставляет имя атрибута XML, использованного для показа самой левой позиции формата объекта.

По умолчанию "l"

noPageEject Property

Показывает, что во всяком случае XML Listener должен рассматривать, что запущенный отчет, должен быть завершен. Может использоваться без NOPAGEEJECT в коданде REPORT FORM.

По умолчанию .F.

resetDocument Method

Документ XML будет восстановлен после тогоа, когда отчет запустили.

Синтаксис: resetDocument()

Возвращаемые значения: нет

Параметры: нет

topAttr Property

Поставляет имя атрибута XML, используя его чтобы показать самую верхнюю позицию формата объекта.

По умолчанию "t"

verifyNCName Method

Обеспечивает общий метод, чтобы подтверждать строки как стандарт XML NCNames.

Синтаксис: verifyNCName ( cName )

Возвращаемое значение: lValid

Параметры:

cName - строка, которую Вы проверяете на достоверность, как величину NCName.

Заметки: В XML, NCName или non-colonized name is a legal value for either the namespace or the non-prefixed (local) name of a node. Например, в узловом имени xsl:template, оба xsl и template являются NCNames.

widthAttr Property

Поставляет имя атрибута XML, использованного для отображения ширины формата объекта.

По умолчанию "w"

xmlMode Property

Определяет, что какие части VFP сообщения схемы XML включены в результат.

Величина Значение

0

Data только

1

VFP-RDL только

2

Data и VFP-RDL

по умолчанию 2

xsltParameters Property

Holds an optional parameter collection passed to the ApplyXSLT method when XmlListener automatically applies a user XSLT transformation at the conclusion of a report run.

По умолчанию .NULL.

Замечание: Кодовый пример в ReportListener HTML Foundation Class использует xsltParameters явно, чтобы установить numberPrecision,параметр своего встроенного преобразования. Код класса устанавливает другие несколько HTML преобразований, используя xsltParameters. Если Вы самостоятельно создаете xsltParameters как collection объект, как показано в примере, класс HtmlListener использует этот объект, добавляя любые необходимые ключи и объекты после проверки на их существование.

xsltProcessorRdl Property

Содержит a Report Definition Language (RDL) - специфический объект процессора.

По умолчанию .NULL.

Заметки: Зарезервировано для будущего использования. Вы можите загрузить объект процессора XSLT в совйства, используя такую же технику, описанную для свойств xslProcessorUser.

xsltProcessorUser Property

Содержит определяемый пользователем объект процессора который, заполнен и долступен для запуска, может быть использован автоматически XML Listener для преобразования сырого XML документа на требуемый.

По умолчанию .NULL.

Зметки: Для изменения этого документа у Вас есть несколько опций:

  • Сохраните имя файла в свойстве, как показано в примере ниже.

  • Сохраните XSLT документ, содержащий строковую переменную в свойства.

  • Сохраните объект процессора XSLT с его загруженной таблицей стилей в свойство. Подходящие объектные типы определены в файле заголовка REPORTLISTENERS.H.

Если Вы сохранили документ как строка или имя файла, XmlListener создаст объект процессора для Вас и загрузит таблицу стилей.

Пример

В примере код настрайвает свойства XmlListener, чтобы подходить сценарию конкретных передачи данных ( список клиента, передаваемый между Visual FoxPro и CRM приложением, переведенным в другой среде).

Код обеспечиает объектными свойствами xsltProcessUser пригодным документом проебразования XSLT, использую один из трех методов для загрузки объекта процессора описанных выше. Он инструктирует объект для применения XSLT трансформации автоматически после запуска отчета. Затем выполняется отчет. Результирующий XSLT соответствует требованиям CRM приложения и может быть импортирован без последующего редактирования.

 Скопировать код
oXml = NEWOBJECT("XmlListener","_REPORTLISTENER")
WITH oXml
  .xmlMode = 0 && data only, 
               && no RDL is needed for this 
               && particular transform
  .xsltProcessorUser = "Customer.xslt"
  .applyUserTransform = .T.
ENDWITH  
REPORT FORM Customer OBJECT oXml
MODIFY FILE (oXml.TargetFileName)

Дополнительно