功能描述: 每张报表中增加术语解释功能,交互方式为 鼠标悬停报表指标名词时,触发显示指标定义.
思路形成:1.Q:指标名称,指标定义,从那边读取?
A: 考虑到指标名称/定义的可维护性,最好能从DB读取维表实现
2.Q用什么方式实现?
A:考虑HTML+Javascript 实现
难点分析:1.从数据库读取每张报表对应的指标名称/定义数据,分别放在数组nameArr ,definitionArr中,并且存在对应关系.
2.报表标题行查找数组nameArr,记录数组位置i,以此查找definitionArr对应的定义.
3.报表发生翻页时,nameArr ,definitionArr要在每页都能读取到.
关键代码:1.将维表的数据放置在列表中,并初始化nameArr ,definitionArr
代码参考:
2.标题行查找指标定义
<script>
setTimeout("getKpiDes()",300);
var nmArray=new Array();
var desArray=new Array();
var fmtSize=0;
function getKpiDes(){
var kDivObj = document.getElementById('kDiv');
var kTabObj=kDivObj.firstChild;
kDivObj.style.display = "none"; /*使用Cognos的可见属性,读取不到列表内容*/
//获取KPI详解,指标名词数组nmArray,指标含义数组desArray
var utrArr=kTabObj.getElementsByTagName('tr');
for(var i=1;i<utrArr.length;i++)
{
var wdArr=utrArr[i].getElementsByTagName('td');
var kipNm=wdArr[0].innerText;
var kpiDes=wdArr[1].innerText;
nmArray[fmtSize]=kipNm;
desArray[fmtSize]=kpiDes;
//alert(fmtSize+' :'+kipNm+' ,'+kpiDes);
fmtSize++;
}
}
</script>
var tltCol=6; //标题起始列位置
var tltRow=1; //标题起始行位置function getTitle(){
var uDivObj = document.getElementById('uDiv');
var uTabObj=uDivObj.firstChild;
var utrArr=uTabObj.getElementsByTagName('tr');
var wdArr=utrArr[tltRow].getElementsByTagName('td');//获取表格标题
for(k=tltCol;k<wdArr.length;k++){
var tltNm=wdArr[k].innerText;
wdArr[k].innerHTML = '<span style="cursor:hand">'+tltNm+'<img src="../rv/hellojim_images/kfpt_kpides.png" οnmοuseοver="showTitle(this,\''+tltNm+'\')" /></span>';
}
}function showTitle(el,tltNm){
if( tltNm.indexOf(' ▲')>0 || tltNm.indexOf(' ▼')>0 )
{
tltNm=tltNm.substring(0,tltNm.length-2);
}
for(var i=0;i<fmtSize;i++){
if( tltNm==nmArray[i] )
{
//alert(tltNm+': '+desArray[i]);
el.title=desArray[i];
break;
}
}
}
</script>3.隐藏指标定义列表,
<script>
setTimeout("getTitle()",300);注意点:确保每页读取到且列表本身不能分页(否则数据读不全),设置如下: