使用ReportRawData调用BI Publisher Web服务

时间:2014-12-19 00:29:51

标签: oracle bi-publisher

目标:在SOAP请求中为BI Publisher报告提供XML RunReport()方法的XML数据。

环境:
Oracle BI Publisher 11.1.1.7.0(版本:20130303.1415)

客户端 - 使用http_util的SoapUI 5.0.0.0或自定义PL / SQL代码(Oracle Database 11g企业版版本11.2.0.3.0 - 64位生产)调用服务,该服务可以与同一BI Publisher服务器上的其他报告一起使用通过parameterNameValues节点传递参数。

研究
花了好几个小时后,我发现只有this topic on OTN(需要注册),这解释了如何使用reportRawData参数。我尝试使用这些建议,但没有成功。

问题:
是否可以在调用RunReport()时直接在SOAP请求中提供XML数据,而无需上传/创建临时文件且不使用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
    Creating test data source

  2. 添加test_ds XML文件数据集并提供test_ds_example.xml作为本地文件:
    Adding XML file dataset

  3. 测试数据并将其保存为样本:
    Sample data save

  4. 根据test_ds创建报告:
    Report creation

  5. 创建一个基本模板,其中包含短语&#34; Field Val:&#34;和/test/field_val

  6. 填写的字段
  7. BI Publisher GUI中的测试报告并获得了文本&#34; Field Val:AAAAA&#34;

  8. 将SOAP请求的字段值更改为B-B-B-B-B

  9. 数据:

      `<?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. 执行请求但返回&#34; Field Val:AAAAA&#34;而不是预期&#34; Field Val:B-B-B-B-B&#34; :(

2 个答案:

答案 0 :(得分:0)

经过大量实验后,我决定通过base64编码形式的reportData标记传递相同的XML数据,因此最终形式的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>

此解决方案与初始目标不完全匹配,但允许我在渲染简单文档时避免使用外部数据源。

答案 1 :(得分:0)

这里只有一个错误。 reportData 标签必须在 reportRequest 标签范围内。你在它之外提供它。 另请注意,XML 数据必须以 base64 格式编码。