今天有网友问到怎样在叙述视图中进行导航?
叙述图不同于表格,相要在其中进行导航的话只能借用GO URL或者javacript函数的方式,并且同时还有一个难点在于,其无法像直接在表格字段属性中
设置导航action那样直接将源报表上的条件作为参数传递到目标报表。那怎么办呢?
好在BIEE给我们提供了两种方法,一种是基于URL的,一种是利用导航函数的。
先来看基于导航函数的吧
语法如下:
function GoNav(event, sPath, sTbl, sCol, sVal, sTarget)
where:
event = event indicator.
sPath
= the catalog path of the destination search.
sTbl
= the logical table name to filter.
sCol
= the logical column name to filter.
sVal
= the value to filter by.
sTarget
(optional) = "_blank" to open a new browser window with the results.
PortalNav Function
function PortalNav(event, sPortal,sTbl,sCol,sVal)
event = event indicator.
sPortal
= the catalog path of the destination portal.
sTbl
= the logical table name to filter.
sCol
= the logical column name to filter.
sVal
= the value to filter by.
两个函数,第一个函数是用来导航到请求(11g叫分析)的,第二个函数是用来导航到dashboard的。
下面让我们使用导航函数来完成导航吧,叙述图格式如下:
我想要实现当我点击金额的时候 跳转到目标报表,并将金额所对应的月份作为参数传过去,那么我们可以编写如下代码:
<font class=nav onclick="JavaScript:GoNav(event, '/shared/demo/target','Calendar','Calendar Quarter Desc','@1');">@2</font>
其中/shared/demo/target是目标请求的路径,Calendar是需要过滤字段所在的逻辑表名称,Calendar Quarter Desc是需要过滤字段的字段名称
@1是参数值(叙述视图中的语法,用于引用第一列值)
注:font标签只是用于承载onclick事件的,大家可以根据自己的需要选择相应的标签。另外经过测试,使用<a></a>标签会报找不到对象的错误,解决变法暂时没有
目标请求定义如下:
注意需要对Calendar Quarter Desc字段添加过滤器
OK,至此我们就用GoNav函数完成了在叙述视图中的导航,至于PortalNav的用法同理,只不过Path为仪表盘的Path。
不知道大家有没有发现,GoNav有一个很明显的缺点,那就是只能传一个参数,这在很多场合下不太适用,那如果我们传递多个参数应该怎么办呢?
答案是使用Go URL,有关Go URL的语法在此不在详述,请参阅
Integrator's Guide 之
8 Integrating Oracle BI Presentation Services into Corporate Environments Using HTTP and JavaScript
下面直接给出实现代码:
<a href="saw.dll?Go&Path=/shared/demo/target&Action=Navigate&P0=2&P1=eq&P2=Products.%22Prod%20Subcategory%22&P3=@3&P4=eq&P5=Calendar.%22Calendar%20Quarter%20Desc%22&P6=@1">@2</a>
其实现了如下效果:
当我点击红色方框中的金额时,导航到目标请求,并同时传将月份和产品类型两个参数传递过去
需要注意的是,对于有字段名中含有空格的情况,我们需要用引号将其包起来,并将空格编码为%20,同时还需要将引号进行URL编码
例如:
"Calendar"."Calendar Quarter Desc"
应做如下编码:
Calendar.%22Calendar%20Quarter%20Desc%22
注:不含空格的名称无需引号
如果字段名称和参数值均是中文的话,你需要对其进行编码,可以使用JS来完成
用记事本新建一个文档,拷贝下面的代码然后保存为test.html(注意后缀名),然后用IE打开就可以得到编码的字符串了
10G的做法:
<html> <body> <script> var u= encodeURI('saw.dll?Go&Path=/shared/0.人力资源分析/组件/分析/员工基本信息_test2&Action=Navigate&P0=1&P1=eq&P2="人员类型"."人员类型名称"&P3=实习'); document.write(u); </script> </body> </html>
11G的做法
<html> <body> <script> var u= encodeURI('saw.dll?Go&Path=/shared/0.人力资源分析/组件/分析/员工基本信息_test2&Action=Navigate&P0=1&P1=eq&P2="人员类型"."人员类型名称"&P3='+encodeURI('实习')); document.write(u); </script> </body> </html>
注意在11G中我们需要参数值使用了两次编码!否则会有乱码问题!
另外还需要注意的是,我们也对中文字段加了引号!
本文所提到的所有内容均来自Oracle BIEE 11g官方文档
Integrator's Guide 之
8 Integrating Oracle BI Presentation Services into Corporate Environments Using HTTP and JavaScript
强烈建议人手一份官方文档,以便随时查阅。