Вызов веб-службы BI Publisher с помощью ReportRawData

Цель: предоставить 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>`
  1. Создайте источник данных test_ds
    Создание источника тестовых данных

  2. Добавьте набор данных test_ds XML-файла и укажите test_ds_example.xml как локальный файл:
    Добавление набора данных XML-файла

  3. Протестируйте данные и сохраните их как образец:
    Сохранение образца данных

  4. Создать отчет на основе test_ds :
    Создание отчета

  5. Создайте базовый шаблон с фразой «Field Val:» и полем, заполненным из /test/field_val

  6. Тестовый отчет в графическом интерфейсе BI Publisher и текст «Field Val: AAAAA»

  7. Сделать 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>&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;test&gt; &lt;field_val&gt;B-B-B-B-B&lt;/field_val&gt;&lt;/test&gt;</pub:reportRawData>
         <pub:userID>weblogic_user</pub:userID>
         <pub:password>weblogic_user_password</pub:password>
      </pub:runReport>
   </soapenv:Body>
</soapenv:Envelope>
  1. Выполнить запрос, но он возвращает «Значение поля: AAAAA» вместо ожидаемого «Значение поля: B-B-B-B-B» :(

person ThinkJet    schedule 19.12.2014    source источник


Ответы (2)


После множества экспериментов я решил передавать одни и те же XML-данные через тег reportData в кодировке base64, поэтому окончательная форма SOAP-запроса выглядит так:

<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:reportData>PD94bWwgdmVyc21vbj0iMS4wIiB1bmNvZG1uZz0iVVRGLTgiPz48dGVzdD48ZmllbGRfdmFsPkItQi1CLUItQjwvZmllbGRfdmFsPjwvdGVzdD4=</pub:reportData>
         <pub:userID>weblogic_user</pub:userID>
         <pub:password>weblogic_user_password</pub:password>
      </pub:runReport>
   </soapenv:Body>
</soapenv:Envelope>

Это решение не совсем соответствовало исходной цели, но позволяет мне избегать внешних источников данных в случае рендеринга простых документов.

person ThinkJet    schedule 13.01.2015

Здесь только одна ошибка. Тег reportData должен находиться в пределах диапазона тегов reportRequest. Вы указываете его вне его. Также обратите внимание, что данные XML должны быть закодированы в формате base64.

person sanjay singh    schedule 27.04.2021