Цель: предоставить XML-данные для BI Publisher
отчета в рамках SOAP-запроса к его RunReport()
методу.
Среда:
Oracle BI Publisher 11.1.1.7.0 (сборка: 20130303.1415)
Клиент — SoapUI 5.0.0.0 или пользовательский код PL/SQL (Oracle Database 11g Enterprise Edition, выпуск 11.2.0.3.0 — 64-разрядная версия), вызывающий службу с использованием http_util, который отлично работает с другими отчетами на том же сервере BI Publisher, передавая параметры через parameterNameValues
узел.
Исследование:
Потратив много часов, я нашел только эту тему на OTN(требуется регистрация), в котором, кстати, объясняется, как использовать reportRawData
. Я пытался использовать эти рекомендации, но безуспешно.
Вопрос:
Можно ли предоставить XML-данные непосредственно в SOAP-запросе при вызове RunReport()
без загрузки/создания временного файла и без использования источника данных JDBC?
Существует большая вероятность, что я пропустил что-то очевидное, поэтому, пожалуйста, ознакомьтесь с приведенным ниже примером установки и структурой SOAP-запроса.
Я уже знаю по крайней мере один возможный обходной путь в моей ситуации (например, организовать временный источник данных JDBC для получения данных из него), но мне интересно, есть ли какой-нибудь четкий и работающий способ реализовать эту задачу.
Пример настройки:
1. Создайте пример файла данных XML test_ds_example.xml
:
`<?xml version="1.0" encoding="utf-8"?>`
`<test> <field_val>AAAAA</field_val></test>`
Создайте источник данных test_ds
Добавьте набор данных
test_ds
XML-файла и укажитеtest_ds_example.xml
как локальный файл:Протестируйте данные и сохраните их как образец:
Создать отчет на основе
test_ds
:Создайте базовый шаблон с фразой «Field Val:» и полем, заполненным из
/test/field_val
Тестовый отчет в графическом интерфейсе BI Publisher и текст «Field Val: AAAAA»
Сделать SOAP-запрос с измененным значением поля на
B-B-B-B-B
:
Данные:
`<?xml version="1.0" encoding="utf-8"?>`
`<test> <field_val>B-B-B-B-B</field_val></test>`
Запрос с данными в узле reportRawData
:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pub="http://xmlns.oracle.com/oxp/service/PublicReportService">
<soapenv:Header/>
<soapenv:Body>
<pub:runReport>
<pub:reportRequest>
<pub:attributeFormat>html</pub:attributeFormat>
<pub:attributeTemplate>claimnotification_xml</pub:attributeTemplate>
<pub:byPassCache>True</pub:byPassCache>
<pub:dynamicDataSource>
<pub:fileDataSource>
<pub:dynamicDataSourcePath/>
<pub:temporaryDataSource>True</pub:temporaryDataSource>
</pub:fileDataSource>
</pub:dynamicDataSource>
<pub:parameterNameValues/>
<pub:reportAbsolutePath>/a_test/test_xml_report.xdo</pub:reportAbsolutePath>
<pub:sizeOfDataChunkDownload>-1</pub:sizeOfDataChunkDownload>
</pub:reportRequest>
<pub:saveDataOption>False</pub:saveDataOption>
<pub:reportRawData><?xml version="1.0" encoding="utf-8"?><test> <field_val>B-B-B-B-B</field_val></test></pub:reportRawData>
<pub:userID>weblogic_user</pub:userID>
<pub:password>weblogic_user_password</pub:password>
</pub:runReport>
</soapenv:Body>
</soapenv:Envelope>
- Выполнить запрос, но он возвращает «Значение поля: AAAAA» вместо ожидаемого «Значение поля: B-B-B-B-B» :(