Cognos 的排序做的实在是不怎么地,这两天借着比赛一时兴起,利用 JavaScript 实现了个排序的方法,个人感觉用起来比较方便,所以特地和大家分享一下。(需要结合视频教程一起看 )
首先来说一下排序的方法,思路如下:增加一个数据项,该数据项根据参数进行判断,显示那个数据项的数据。然后将新增的数据项拖到列表中进行排序。再利用JavaScript将参数传递过去,实现排序。 开发界面如下: 其中排序初始化HTML为核心代码,如下: <script type="text/javascript"> var cvObject = eval("oCV" + getObjectName()); var lastSelected; function getObjectName() { return document.getElementById("cv.id").value; } function getRVContent() { var objName = 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 = "<div onclick = "sortColumn(1,'" + divs[j].getAttribute("sortcolumn") + "')" class="sortColumAscendOver"></div>"; descendDiv = "<div onclick = "sortColumn(-1,'" + divs[j].getAttribute("sortcolumn") + "')" class="sortColumDescendOut"></div>"; } else { ascendDiv = "<div onclick = "sortColumn(1,'" + divs[j].getAttribute("sortcolumn") + "')" class="sortColumAscendOut"></div>"; descendDiv = "<div onclick = "sortColumn(-1,'" + divs[j].getAttribute("sortcolumn") + "')" class="sortColumDescendOver"></div>"; } } else { ascendDiv = "<div onclick = "sortColumn(1,'" + divs[j].getAttribute("sortcolumn") + "')" class="sortColumAscendOut"></div>"; descendDiv = "<div onclick = "sortColumn(-1,'" + divs[j].getAttribute("sortcolumn") + "')" class="sortColumDescendOut"></div>"; } divs[j].innerHTML = ascendDiv + descendDiv; break; } } } } function sortColumn(sortType, sortColumn) { var oRequest = new CCognosViewerRequest("forward"); oRequest.addParameter("p_sortType", sortType); oRequest.addParameter("p_sortColumn", sortColumn); cvObject.submitPromptValues(oRequest); } initSort("列表1"); </script> <style type="text/css"> .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; } </style>
其中排序参数内容如下:
'<input
type="hidden" id="sort_Type" name="sort_Type"
value="'+ParamValue('sortType')+'"/><input
type="hidden"
id="sort_Column" name="sort_Column"
value="'+ParamValue('sortColumn')+'"/>'
使用报表表达式来获取传递过来的参数值,其中
sortTyp 表示升序还是降序
sortColumn 表示要进行排序的字段
排序标记内容如下:
<DIV
sortcolumn="CURRENT_EMPLOYEE_NUMBER"> </DIV>
其中 sortcolumn 表示该排序针对的字段是 CURRENT_EMPLOYEE_NUMBER ,根据需要增加排序的字段。
排序的最终效果如下图:
添加新评论86 条评论
2017-01-04 10:50
2014-12-22 11:45
2014-11-21 09:24
2014-01-15 16:34
2014-01-06 17:31
2013-09-01 20:34
2013-04-19 14:03
2013-04-18 23:21
2013-04-18 23:20
2013-01-06 17:23
2012-11-19 19:07
2012-10-30 17:32
2012-10-28 22:08
2012-10-12 17:42
2012-03-07 10:14
{
return document.getElementById("cv.id").value;
}
这个方法有问题,错误是Uncarght TpyeError:Cannot read property 'value' of null,请问这个是什么原因引起的呢?
2012-03-06 15:04
2011-12-22 23:48
2011-12-02 17:18
2011-11-15 15:34
2011-10-22 19:32
2011-10-09 16:53
2011-10-09 16:24
2011-10-09 14:50
2011-09-21 13:30
2011-08-20 12:53
2011-07-26 12:49
2011-07-07 11:16
我把style中的float改为none也不行,麻烦interboy帮忙看一下啊。。。
2011-04-14 10:03
2011-03-02 23:17
oRequest.addParameter("p_sortColumn", sortColumn);我用这个两个函数 好像没有赋值,我点击排序图片 只提交没有变化,您有什么好的建议,谢谢???
2011-02-14 11:17
2010-12-09 10:36
2010-11-17 10:35
2010-11-15 10:23
2010-11-11 18:23
2010-11-11 14:26
2010-10-29 04:48
2010-10-25 14:12
2010-09-26 13:17
不知大侠你怎么解决的
2010-09-17 08:42
2010-09-09 10:26
2010-08-26 23:04
2010-08-23 10:01
2010-08-22 11:24
2010-08-22 11:22
2010-08-20 14:58
还发现一个奇怪的问题就是,对于存在分页的情况,如果我不修改每页的记录数小于20的话,排序就无效了
请高手一定给出答案 谢谢!!
2010-08-18 17:07
2010-08-18 16:06
2010-08-18 11:16
不知大侠你怎么解决的
2010-08-09 14:34
2010-08-09 14:24
2010-08-07 08:40
{
var oRequest = new CCognosViewerRequest("forward");
oRequest.addParameter(&q
我的javascript函数是通过查看页面源文件分析得出的,没有关于那些函数的文档,目前论坛资料下载区里有些关于js的文档我觉得不错,你可以去找找
http://www.cognoschina.net/club/thread-2139-1-2.html
还有一个reportstudio cookbook没找到了,你自己搜搜
2010-08-06 15:58
{
var oRequest = new CCognosViewerRequest("forward");
oRequest.addParameter("p_sortType", sortType);
oRequest.addParameter("p_sortColumn", sortColumn);
cvObject.submitPromptValues(oRequest);
}
从我想知道怎么提交一个带参数sortColumn和sortType的request就能够排序呢,难道Cognos内部机制本身就是根据2个这样名字的参数对数据库获取过来的数据进行排序吗? 另外,想问下你怎么会了解Cognos的那些JavaScript函数,有没有那方面的学习资料可以分享下呢,我在网上逛了大半天,没看到相关资料。谢谢
2010-07-15 15:18
2010-07-14 13:48
2010-07-01 17:08
2010-06-24 13:47
怎么增加啊,好像您没写清楚。是否可以给我个完整的啊?谢谢,我的QQ:154148554
2010-06-24 10:52
怎么增加啊,好像您没写清楚。是否可以给我个完整的啊?谢谢,我的QQ:154148554
2010-06-23 20:17
var sortType = document.getElementById("sort_Type").value;
sort_Type 没有啊 ,急,谢谢
2010-06-23 17:08
var sortType = document.getElementById("sort_Type").value;
sort_Type 没有啊 ,急,谢谢
2010-06-13 09:32
2010-05-26 19:39
2010-05-26 18:15
2010-05-26 12:51
2010-05-26 12:34
2010-05-12 10:19
2010-05-11 18:27
2010-05-11 18:20
我试了一下,不好用啊,添加后,点报表运行,运行不了啊。
2010-05-11 18:19
2010-05-11 16:06
2010-05-10 14:06
2010-05-10 11:55
我试了一下,不好用啊,添加后,点报表运行,运行不了啊。
2010-05-10 11:54
2010-05-08 09:50
cv.id 从哪里得到的?
2010-05-08 09:49
2010-04-30 17:18
2010-04-30 09:16
2010-04-29 10:40
2010-04-28 10:26
2010-04-27 14:01
2010-04-23 18:29
cv.id 从哪里得到的?
2010-04-23 17:51
2010-04-22 20:40
提示缺少对象,我的是8.2,请问这和版本有关系吗
2010-04-22 15:42
提示缺少对象,我的是8.2,请问这和版本有关系吗
2010-04-15 11:46
2010-04-12 19:27
2010-04-12 16:07