使用web service访问biee报表数据

来源:互联网 发布:windows 启动管理器 编辑:程序博客网 时间:2024/06/06 07:12

最近有其它系统想通过API的方式来访问biee的报表(分析)数据,由于系统已经做了SSO。通过go url的方式已经不行了。

我们可以调用biee提供的xmlViewService web服务来访问所需分析的数据。不过在对外部系统开放web服务之前,一定要控制好权限。否则会导致数据泄露。

至于biee web服务可以参考之前的文章

BIEE 11g WebService指南


基本过程如下,

1.调用SAWSessionService Service的logon方法 获取一个会话id

2.调用XMLViewService Service的executeXMLQuery() 方法查询数据

3.如果数据有分页还需要能过fetchNext() 来获取下一页

4.最后调用SAWSessionService Service的logoff()方法退出登录。



本文主要介绍XMLViewService Service的executeXMLQuery()方法,因为该方法的参数比较复杂。


直接使用SoapUI 5.2.1新建一个SOAP工程,WSDL如下:

http://xxxx:8303/analytics-ws/saw.dll?WSDL

注意:是analytics-ws而不是analytics。启用了sso之后,只能通过analytics-ws来访问。


点击OK

然后调用SAWSessionService取得一个会话id


点击执行(2)之后,会在右侧的响应中得到一个会话id

复制该id,在后面的方法需要用到它。


展开XmlViewService中的executeXMLQuery方法,双击Request1,在打开的编辑窗口中,修改相应的参数,并将多余的参数删除

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v6="urn://oracle.bi.webservices/v6">   <soapenv:Header/>   <soapenv:Body>      <v6:executeXMLQuery>         <v6:report>            <v6:reportPath>/shared/理财/分析/理财明细列表</v6:reportPath>         </v6:report>         <v6:outputFormat>SAWRowsetSchemaAndData</v6:outputFormat>         <v6:executionOptions>            <v6:async>FALSE</v6:async>            <v6:maxRowsPerPage>30</v6:maxRowsPerPage>            <v6:refresh>TRUE</v6:refresh>            <v6:presentationInfo>TRUE</v6:presentationInfo>            <v6:type>quertest</v6:type>         </v6:executionOptions> <v6:reportParams>            <!--Zero or more repetitions:-->                <v6:filterExpressions><![CDATA[<sawx:expr xsi:type="sawx:logical" op="and"xmlns:saw="com.siebel.analytics.web/report/v1.1"xmlns:sawx="com.siebel.analytics.web/expression/v1.1"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema">            <sawx:expr xsi:type="sawx:list" op="in" promptPrimarySubjectArea=""理财分析"" setVariable="dashboard.variables['p_selected_day']" appliedFromPromptDefault="true">               <sawx:expr xsi:type="sawx:sqlExpression">"理财分析"."日期"."日期"</sawx:expr>               <sawx:expr xsi:type="xsd:date">2015-11-06</sawx:expr></sawx:expr>            <sawx:expr xsi:type="sawx:list" op="in" promptPrimarySubjectArea=""理财分析"" setVariable="dashboard.variables['p_selected_currency']" appliedFromPromptDefault="true">               <sawx:expr xsi:type="sawx:sqlExpression">"理财分析"."币种"."币种"</sawx:expr>               <sawx:expr xsi:type="sawx:untypedLiteral">USD</sawx:expr></sawx:expr></sawx:expr>]]> </v6:filterExpressions>                           </v6:reportParams>         <v6:sessionID>jq3h6dsqvf11kbtdm5gpf27rs02p0acfrh44d736i0mtcu36</v6:sessionID>      </v6:executeXMLQuery>   </soapenv:Body></soapenv:Envelope>

比较关键的几个参数如下:

sessionID:第一步中取到的会话id

reportPath:分析的路径

outputFormat:输出的格式(SAWRowsetData 只返回数据 SAWRowsetSchema只返回列标题  SAWRowsetSchemaAndData 返回标题和数据)

executionOptions:执行参数,相关子参数含义详见 (XMLQueryExecutionOptions Structure)

注:executionOptions中的async设置为true的时候,分页有效;设置为false的时候分页无效

reportParams:报表参数,主要用于传参,详见(ReportParams Structure)

   报表参数中可以对已有的字段传参,还可以对变量赋值,对变量赋值比较简单,比较麻烦的是上文中的filterExpressions的值,是一段xml,格式如下:

<![CDATA[<sawx:expr xsi:type="sawx:logical" op="and"xmlns:saw="com.siebel.analytics.web/report/v1.1"xmlns:sawx="com.siebel.analytics.web/expression/v1.1"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema">            <sawx:expr xsi:type="sawx:list" op="in" promptPrimarySubjectArea=""理财分析"" setVariable="dashboard.variables['p_selected_day']" appliedFromPromptDefault="true">               <sawx:expr xsi:type="sawx:sqlExpression">"理财分析"."日期"."日期"</sawx:expr>               <sawx:expr xsi:type="xsd:date">2015-11-06</sawx:expr></sawx:expr>            <sawx:expr xsi:type="sawx:list" op="in" promptPrimarySubjectArea=""理财分析"" setVariable="dashboard.variables['p_selected_currency']" appliedFromPromptDefault="true">               <sawx:expr xsi:type="sawx:sqlExpression">"理财分析"."币种"."币种"</sawx:expr>               <sawx:expr xsi:type="sawx:untypedLiteral">USD</sawx:expr></sawx:expr></sawx:expr>]]> 

生成上面的xml片段最简单的方式,是打开对应分析的高级视图,将其中的xml代码拷出来,找到filter部分的代码复制过来并按照上面的形式修改即可。



xml代码修改好了之后,点击执行,即可返回相应的数据,数据的格式为xml,如下:




原创粉丝点击