近半年在公司做某个项目的时候,主要使用到了Oracle BIEE 10g这套工具。刚开始的时候,对OBIEE是七窍通了六窍,还是一窍不通。

现在已经摸索出些许门道,特整理出来:一来,备忘;二来,供大家参考。如果有更优的解决办法,欢迎批评指正。

1 RPD 相关

1.1 增加序号

需求      :客户想在报表展现的数据前增加“序号”一列。

解决方案:使用OBIEE 10g的管理工具打开RPD,在“Business Model and Mapping”下面,右键单击需要添加“序号”列的逻辑表,选择“New Object”→“Logical Column...”,弹出逻辑列对话框,在“Name”后面输入“序号”,然后选中“Use existing logical columns as the source”,然后在下面输入“Rsum(1)”,或者单击右边的“...”按钮弹出“Expression Builder”对话框,在左下方选择“Functions”→“Display functions”→“Rsum”后,双击或者单击“Insert”后,会在上面的表达式编辑框显示“Rsum(<<numExpr>>)”,把括号中的值换为1即可。然后单击“OK”→“确定”保存。在Answers页面,直接拖此列使用。

1.2 增加包含固定值的列

需求      :数据库中存储了建筑物数量,并没有存储此数量的计量单位“座”。客户想要把计量单位也展现出来,并单独成一列。

解决方案:按照上面的步骤增加逻辑列,选中“Use existing logical columns as the source”,在下面下拉输入座,并使用英文单引号引起来,保存。在Answers页面,直接拖此列使用。也可以在Answers编辑页面进行修改,随便拖一个字段,在该字段下面有四个小图标,单击第二个类型于函数的图标,弹出“编辑列公式”对话框,在“列公式”后面的编辑框里输入座,并使用英文单引号引起来也行。

2 展现报表 相关

2.1 调整仪表盘提示样式

需求      :OBIEE 10g默认的仪表盘提示是提示文字在上面,下拉列表框或者文本编辑框在下面,客户觉得这种样式不好看,想让提示文字在下拉列表框或者文本编辑框前面,并水平居中对齐。

解决方案:在仔细研究生成的报表页面的源HTML代码后发现有如下JavaScript代码

 <script language="javascript">
function NQOnLoadEvent()
{
NQOnWindowLoadsaw_1651_1();
NQOnWindowLoadsaw_1651_2();
NQOnWindowLoadsaw_1651_3();
};
window.onload = NQOnLoadEvent;
</script>
<script language="javascript">
function NQOnWindowLoadsaw_1651_2()
{
saw.dashboard.reload();
}
</script>

看到这个后,立马灵光一现,嘿嘿,感觉春天来了。页面加载完成后会调用NQOnLoadEvent,于是在OBIEE安装目录疯狂寻找“saw.dashboard.reload”事件。结果还真找到了,在“/OBIEEInstallDir/OracleBI/oc4j_bi/j2ee/home/applications/analytics/analytics/res/b_mozilla/dashboards/portalscript.js”文件中。根据CSS class的名称定位到仪表盘提示的文字所在的table,因为提示文字和下拉列表或者文本编辑框在此table的第一个tr的第一个td中,删掉该td的innerHTML中的“<br>”即可实现不换行。

示例js代码如下:

        var tSpan=tSpans[i];
//去掉仪表盘提示中的BR
if(tSpan.className=="GFPCaption")
{
var tempNode=tSpan.parentNode;
tempNode.innerHTML=tempNode.innerHTML.replace("<BR>","<b>:</b> ");
tempNode.innerHTML=tempNode.innerHTML.replace("<br>","<b>:</b> ");
bRemoveBR=true;
}

2.2  把总计行放到报表数据域第一行

需求      :客户觉得总计放在报表最后一行要下翻报表,才能看到。想放在第一行,先看总计,然后再看数据。

解决方案:按照2.1的步骤修改portalscript.js文件,定位到展现报表的table,并使用js把最后的总计一行放到第一行。示例js如下:

//把总计移动到表第一行
if(targetTable.className=="ResultsTable GreenBar")
{
var secondRow=targetTable.rows[1];
if(secondRow.cells[0].className!="grandtotal")
{
var lastRow=targetTable.rows[targetTable.rows.length-1];
if(lastRow.cells[0].className=="grandtotal"||lastRow.cells[0].className=="grandfact")
{
var newRow;
if(secondRow.cells[0].className=="TableHdg")
{
newRow=targetTable.insertRow(2);
}
else
{
newRow=targetTable.insertRow(1);
}
for(var j=0;j<lastRow.cells.length;j++)
{
var tempCell=newRow.insertCell(j);
tempCell.className=lastRow.cells[j].className;
tempCell.colSpan=lastRow.cells[j].colSpan;
tempCell.style.textAlign=lastRow.cells[j].style.textAlign;
}
targetTable.deleteRow(targetTable.rows.length-1);
bMoveTotal=true;
}
}

2.3 增加分页

需求      :OBIEE 10g默认显示当前的记录的开始条数和结束条数,并不展现当前第几页,共多少页。客户想要这个分页的效果

解决方案:编辑需要分页的报表的Request,随便拖一列,然后单击下面四个小图标中的第一个图标(像小手),弹出“列属性”对话框,单击“列格式”选项卡,选中“隐藏”,单击“确定”保存退出。单击下面四个小图标中的第二个图标(像函数),弹出“编辑列公式”对话框,在“列公式”后面输入“MAX(RCOUNT(1))”(不带双引号),单击“确定”保存退出。这一隐藏的列,存储了一共有多少条记录。然后添加一个“叙述”视图,在“叙述”后面添加内容“@1”(不带双引号),其中“@”后面的数字是存储记录数的隐藏列的索引,从1开始。如果是第一列就是“@1”,第二列就是“@2”,依此类推。在“要显示的行”后面输入1。前台工作完成,然后修改portalscript.js文件,得到叙述视图里面所记载的总记录数,根据总记录数、每页显示的记录数和当前页显示的记录范围,可以计算当前第几页及共多少页。示例js代码如下:

if(targetTable.rows&&targetTable.rows[0].cells&&targetTable.rows[0].cells[0].innerHTML.indexOf("叙述")>=0&&targetTable.rows[0].cells[0].innerText&&targetTable.rows[0].cells[0].innerText.length<=8)
{
var recordCount=parseInt(targetTable.rows[0].cells[0].innerText);
targetTable.style.display="none";
if(bGetRecord)
{
var first=parseInt(spanTapeDeckRecords.innerText.split(" ")[1]);
var last=parseInt(spanTapeDeckRecords.innerText.split(" ")[3]);
var currentPage;
if(first<=20)
{
currentPage=1;
}
else
{
currentPage=Math.floor(first/20)+1;
}
var totalPage;
if(last==recordCount&&first==1)
{
totalPage=1;
}
else
{
totalPage=Math.ceil(recordCount/20);
}
spanTapeDeckRecords.innerText="当前第"+currentPage+"页/共"+totalPage+"页"+" 共"+recordCount+"条记录";
bCalculated=true;
}
}

关于使用修改js的方法实现特定功能先写到这里,可以类推。
      2.4 修改仪表盘提示的按钮显示的文字

需求      :OBIEE 10g默认的仪表盘提示的按钮为“执行”,客户想改为“查询”。

解决方案:“/OBIEEInstallDir/OracleBI/web/msgdb/l_zh/messages/globalfiltermessages.xml”,找到“<WebMessage name="kmsgGFPGo"><TEXT>执行</TEXT></WebMessage>”,把其中的“执行”改为“查询”,清除缓存重启BIEE服务即可。

BIEE 10g 二次开发整理的更多相关文章

  1. [Revit]Autodesk Revit 二次开发整理(资料、准备工作和环境搭建)

    1 前言 Revit被Autodesk收购之后,整理和开放了一大部分API,供开发者实现自己的功能和程序,总体来说API的功能比较完善,毕竟市面上已经出现了各式各样的插件. 本人也是初学者,在Revi ...

  2. TFS二次开发、C#知识点、SQL知识总结目录

    TFS二次开发系列 TFS二次开发系列:一.TFS体系结构和概念 TFS二次开发系列:二.TFS的安装 TFS二次开发系列:三.TFS二次开发的第一个实例 TFS二次开发系列:四.TFS二次开发Wor ...

  3. C#进行Visio二次开发之文件导出及另存Web页面

    在我前面很多关于Visio的开发过程中,介绍了各种Visio的C#开发应用场景,包括对Visio的文档.模具文档.形状.属性数据.各种事件等相关的基础处理,以及Visio本身的整体项目应用,虽然时间过 ...

  4. 最好最实用的PHP二次开发教程

    ◆二次开发 1.什么是二次开发? 二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能和效果,一般来说都不会改变原有系统的内核. 2.为什么要二次开发? 随着信息化技术 ...

  5. SVN二次开发——让SVN、TSVN(TortoiseSVN)支持windows的访问控制模型、NTFS ADS(可选数据流、NTFS的安全属性)

    SVN二次开发 ——让SVN.TSVN(TortoiseSVN)支持windows的访问控制模型.NTFS ADS (可选数据流.NTFS的安全属性) SVN secondary developmen ...

  6. TFS二次开发、C#知识点、SQL知识

    TFS二次开发.C#知识点.SQL知识总结目录   TFS二次开发系列 TFS二次开发系列:一.TFS体系结构和概念 TFS二次开发系列:二.TFS的安装 TFS二次开发系列:三.TFS二次开发的第一 ...

  7. 大华门禁SDK二次开发(一)-技术沟通

    项目中需要能够查询门禁信号和控制门禁设备,因此需要基于大华门禁SDK进行二次开发,开发语言C#.门禁开发中遇到了一些问题,经过与大华技术的邮件沟通也一一解决.做这个开发的时候,发现网上的资料比较少,想 ...

  8. Skyline 7 版本TerraExplorer Pro二次开发快速入门

    年底了,给大家整理了一下Skyline 7版本的二次开发学习初级入门教程,献给那些喜欢学习的年轻朋友. 我这整理的是Web控件版本的开发示例,里面页面代码保存成html,都可以直接运行的. 测试使用的 ...

  9. 最好最实用的二次开发教程 cms

    ◆二次开发 什么是二次开发? 二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能和效果,一 般来说都不会改变原有系统的内核. 为什么要二次开发? 随着信息化技术的不断 ...

随机推荐

  1. rc.local 增加自启动

    编辑 /etc/rc.d/rc.local,将要执行的命令放里面. 然后给 rc.local 增加执行权限  chmod +x rc.local . 不过该方法正在被逐步淘汰,提示建议采用自定义服务的 ...

  2. animate动画jquery

    <script> $(".change").animate({height:"hide",width:"300px"},&quo ...

  3. [linux系统]--搭建ftp服务器并且 创建用户 设置密码

    下面例子演示创建ftpuser 并且设置密码为ftpuser,ftpuser的目录为/root/ftpuser #!/bin/bash rpm -ivh vsftpd-2.2.2-21.el6.x86 ...

  4. JS的兼容函数

    获取类名的兼容函数 //obj.getElementsByClassName 只能在现代浏览器中使用,不能在IE8以下使用 //两个参数 classname 类名 obj 范围 function ge ...

  5. openGL 环境配置

    1.(glfw) 参考地址:http://www.cnblogs.com/be2n2me/p/3701338.html 在Mac OS X EI Capitan上sudo make install时遇 ...

  6. 2016年12月30日 星期五 --出埃及记 Exodus 21:25

    2016年12月30日 星期五 --出埃及记 Exodus 21:25 burn for burn, wound for wound, bruise for bruise.以烙还烙,以伤还伤,以打还打 ...

  7. Shell脚本检测Tomcat是否正在运行

    #!/bin/sh # configurations # computer 设备名称 # target 监控目标 # watcher 跟踪者(邮箱) computer="ehetong&qu ...

  8. eval 简单应用

     --> 循环来定义变量 //想定义四个变量 one,two,three,four var initVar = ['one','two','three','four']; initVar.for ...

  9. jquery-ajax完整写法

    $(function(){ $('#btn').click(function(){ var obj = $(this); //has_click 防止重复多次点击 var has_click = ob ...

  10. 浏览器请求URL原理

    访问服务器url其实是访问DNS服务器,浏览器询问DNS服务器锁访问的url的IP是什么, 找到之后就会返回结果,找不到就继续去其他DNS中寻找,找到路径之后就会返回一个html文档,浏览器会解析这个 ...