Cognos的排序做的实在是不怎么地,这两天借着比赛一时兴起,利用JavaScript实现了个排序的方法,个人感觉用起来比较方便,所以特地和大家分享一下。(需要结合视频教程一起看)
首先来说一下排序的方法,思路如下:增加一个数据项,该数据项根据参数进行判断,显示那个数据项的数据。然后将新增的数据项拖到列表中进行排序。再利用JavaScript将参数传递过去,实现排序。开发界面如下:

其中排序初始化HTML为核心代码,如下:
var cvObject = eval("oCV" + getObjectName());
var lastSelected;
function getObjectName()
{
return document.getElementById("cv.id").value;
}
function getRVContent()
{
var bjName = getObjectName();
return eval("document.getElementById('RVContent" + objName + "');");
}
function initSort(sortTableId)
{
/*说明:若报表中有提交操作的组件,比如完成button或自动提交的组件,则保持注释,若无,则将注释内容打开。这个很重要
cvObject.preProcessControlArray = [];
cvObject.gbPromptRequestSubmitted = false;
cvObject.bCanFinish = true;
cvObject.bNextPage = true;
cvObject.pageNavigationObserverArray = [];
cvObject.rangeObserverArray = [];
cvObject.multipleObserverArray = [];
cvObject.datePickerObserverArray = [];
cvObject.hasPromptKeyDown = false;
*/
initSortColumn(getSortTable(sortTableId, getRVContent()));
}
function getSortTable(sortTableId, rvContent)
{
var sortTable;
var tables = rvContent.getElementsByTagName("table");
for (var i = 0; i < tables.length; i++)
{
if (tables[i].getAttribute("LID") == sortTableId)
{
sortTable = tables[i];
break;
}
}
return sortTable;
}
function initSortColumn(sortTable)
{
var headRow = sortTable.tBodies[0].rows[0];
var divs,ascendDiv,descendDiv,cell;
var sortType = document.getElementById("sort_Type").value;
var sortColumn = document.getElementById("sort_Column").value;
for (var i = 0; i < headRow.cells.length; i++)
{
cell = headRow.cells[i];
divs = cell.getElementsByTagName("DIV");
for (var j = 0; j < divs.length; j++)
{
if (divs[j].getAttribute("sortcolumn") != null)
{
divs[j].style.float="left";
if (divs[j].getAttribute("sortcolumn") == sortColumn)
{
if (sortType == 1)
{
ascendDiv = " ";
descendDiv = " ";
} else
{
ascendDiv = " ";
descendDiv = " ";
}
} else
{
ascendDiv = " ";
descendDiv = " ";
}
divs[j].innerHTML = ascendDiv + descendDiv;
break;
}
}
}
}
function sortColumn(sortType, sortColumn)
{
var Request = new CCognosViewerRequest("forward");
oRequest.addParameter("p_sortType", sortType);
oRequest.addParameter("p_sortColumn", sortColumn);
cvObject.submitPromptValues(oRequest);
}
initSort("列表1");
.sortColumAscendOver {
width: 20px;
height: 20px;
background-image: url( "../pat/images/sortAscending.gif" );
background-position: center;
background-repeat: no-repeat;
float:right;
cursor: pointer;
}
.sortColumAscendOut {
width: 20px;
height: 20px;
background-image: url( "../pat/images/sortAscending_disabled.gif" );
background-position: center;
background-repeat: no-repeat;
float:right;
cursor: pointer;
}
.sortColumDescendOver {
width: 20px;
height: 20px;
background-image: url( "../pat/images/sortDescending.gif" );
background-position: center;
background-repeat: no-repeat;
float:right;
cursor: pointer;
}
.sortColumDescendOut {
width: 20px;
height: 20px;
background-image: url( "../pat/images/sortDescending_disabled.gif" );
background-position: center;
background-repeat: no-repeat;
float:right;
cursor: pointer;
}
其中排序参数内容如下:
' id="sort_Column" name="sort_Column" value="'+ParamValue('sortColumn')+'"/>'
使用报表表达式来获取传递过来的参数值,其中
sortTyp表示升序还是降序
sortColumn表示要进行排序的字段
排序标记内容如下:
其中sortcolumn表示该排序针对的字段是CURRENT_EMPLOYEE_NUMBER,根据需要增加排序的字段。
排序的最终效果如下图:

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17117101/viewspace-676841/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17117101/viewspace-676841/