BIEE 10g 二次开发整理
近半年在公司做某个项目的时候,主要使用到了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 二次开发整理的更多相关文章
- [Revit]Autodesk Revit 二次开发整理(资料、准备工作和环境搭建)
1 前言 Revit被Autodesk收购之后,整理和开放了一大部分API,供开发者实现自己的功能和程序,总体来说API的功能比较完善,毕竟市面上已经出现了各式各样的插件. 本人也是初学者,在Revi ...
- TFS二次开发、C#知识点、SQL知识总结目录
TFS二次开发系列 TFS二次开发系列:一.TFS体系结构和概念 TFS二次开发系列:二.TFS的安装 TFS二次开发系列:三.TFS二次开发的第一个实例 TFS二次开发系列:四.TFS二次开发Wor ...
- C#进行Visio二次开发之文件导出及另存Web页面
在我前面很多关于Visio的开发过程中,介绍了各种Visio的C#开发应用场景,包括对Visio的文档.模具文档.形状.属性数据.各种事件等相关的基础处理,以及Visio本身的整体项目应用,虽然时间过 ...
- 最好最实用的PHP二次开发教程
◆二次开发 1.什么是二次开发? 二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能和效果,一般来说都不会改变原有系统的内核. 2.为什么要二次开发? 随着信息化技术 ...
- SVN二次开发——让SVN、TSVN(TortoiseSVN)支持windows的访问控制模型、NTFS ADS(可选数据流、NTFS的安全属性)
SVN二次开发 ——让SVN.TSVN(TortoiseSVN)支持windows的访问控制模型.NTFS ADS (可选数据流.NTFS的安全属性) SVN secondary developmen ...
- TFS二次开发、C#知识点、SQL知识
TFS二次开发.C#知识点.SQL知识总结目录 TFS二次开发系列 TFS二次开发系列:一.TFS体系结构和概念 TFS二次开发系列:二.TFS的安装 TFS二次开发系列:三.TFS二次开发的第一 ...
- 大华门禁SDK二次开发(一)-技术沟通
项目中需要能够查询门禁信号和控制门禁设备,因此需要基于大华门禁SDK进行二次开发,开发语言C#.门禁开发中遇到了一些问题,经过与大华技术的邮件沟通也一一解决.做这个开发的时候,发现网上的资料比较少,想 ...
- Skyline 7 版本TerraExplorer Pro二次开发快速入门
年底了,给大家整理了一下Skyline 7版本的二次开发学习初级入门教程,献给那些喜欢学习的年轻朋友. 我这整理的是Web控件版本的开发示例,里面页面代码保存成html,都可以直接运行的. 测试使用的 ...
- 最好最实用的二次开发教程 cms
◆二次开发 什么是二次开发? 二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能和效果,一 般来说都不会改变原有系统的内核. 为什么要二次开发? 随着信息化技术的不断 ...
随机推荐
- 数据终端设备与无线通信模块之间串行通信链路复用协议(TS27.010)在嵌入式系统上的开发【转】
转自:http://blog.csdn.net/hellolwl/article/details/6164449 目录(?)[-] 协议介绍 模块协议介绍 1 命令包格式 2 ...
- 扩展GridView实现的一个自定义无刷新分页,排序,支持多种数据源的控件TwfGridView
最近项目View层越来越趋向于无刷新化,特别是数据展示方面,还要对Linq有很好的支持.在WebFrom模式的开发中,GridView是一个功能很强大,很常用的控件,但是他也不是完美的,没有自带的无刷 ...
- C语言-循环结构及break、continue
循环结构 --1-- 结构循环 1.1 while循环 1.2 do…while循环 1.3 for循环 --2-- break和continue 2.1 break关键字 2.2 continue关 ...
- 面向对象day1
一.什么是面向对象 之前我们学习过面向过程和函数式编程,在讲函数的时候有说过之所以有函数式编程是因为面向过程编程是根据业务逻辑从上到下垒代码,会出现大量代码的重用和臃肿,so,函数式编程将同一功能的代 ...
- 【转】ACM训练计划
[转] POJ推荐50题以及ACM训练方案 -- : 转载自 wade_wang 最终编辑 000lzl POJ 推荐50题 第一类 动态规划(至少6题, 和 必做) 和 (可贪心) (稍难) 第二类 ...
- JavaScript使用技巧(1)——JS常用的函数
1.字符串对象函数和属性 函数: charAt():返回在指定位置的字符. charCodeAt():返回在指定的位置的字符的 Unicode 编码. concat():连接字符串. indexOf( ...
- 【前端】移动端Web开发学习笔记【2】 & flex布局
上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...
- 中文 iOS/Mac 开发博客列表(转)
转自https://github.com/tangqiaoboy/iOSBlogCN 中文 iOS/Mac 开发博客列表 本博客列表会不断更新维护,如果有推荐的博客,请到此处提交博客信息. 本博客列表 ...
- 特殊符号 && 和 ||
一.值为false的情况 如果逻辑对象值为0,-0, null,undefined,false,"",NaN.那么值为false. 二.&& || 的 理解 1.& ...
- 微信小程序-表单
wxml <view> 按钮: <button size="{{buttom.size}}" type="{{buttom.type}}" p ...