Cognos中的日期提示自动设置默认值
极品客户当然有极品的要求:
1. 不能有弹出页面
2. 不能自动提交
3. 日期提示默认为系统日期前一天
弄了一下午终于找到解决办法:
日期提示添加HTML项目,并加入如下javascript:
<script> function init() { var dtToday = new Date(); var dtYesterday = new Date( dtToday - 86400000 ); var strYesterday = [dtYesterday.getUTCFullYear(), dtYesterday.getMonth()+1, dtYesterday.getDate()].join("-"); pickerControlvarDate.setValue(strYesterday); } </script> <body onload = init() >
当然Cognos报表页面的日提提示需要命名为varDate, onload = init()是在页面初始化的时候运行一次,之后用户可以自行选择日期。
为了实现不能自动提交还得设置一个默认值,比如选择一个历史时间,比如2011-10-16,然后查询中加入过滤器:
[DATE]=to_number(to_char(trunc(if(cast(?varDate?,varchar(10)) ='2011-10-16' )then(_add_days(current_date, -1)) else(?varDate?),'dd'),'yyyymmdd'))
基本原理就是和默认值比较,如果相同就设置为前一天,否则用日期提示参数的日期。
这样就大功告成了。
有时候有的报表onload=init()不起作用,所以一打开报表就是设置的默认时间,即使在javascript加上window.onload=init()也有问题,
每次运行完报表,用户选的时间是起作用了,可是日期提示显示的时间还是设置的默认时间,造成混乱。
没办法,搜索了很久找到了这个,都是没有javascript基础害的:
var curDate = pickerControlpDate.m_oForm.value;
然后和默认值比较就可以判断什么时候该设置为前一天,什么时候该保留用户选择的时间了:
<script> var dtToday = new Date(); var dtYesterday = new Date( dtToday - 86400000 ); var strYesterday = [dtYesterday.getUTCFullYear(), dtYesterday.getMonth()+1, dtYesterday.getDate()].join("-"); var curDate; var curDate = pickerControlpDate.m_oForm.value; if (curDate == '2011-10-16') { pickerControlpDate.setValue(strYesterday); } </script>
当然这样什么onload,init都是浮云了。
下拉框值提示更改默认值
<script language="JavaScript">
function setDefaultymthValue()
{
try
{
var fW = (typeof getFormWarpRequest == "function" ? getFormWarpRequest() : document.forms["formWarpRequest"]);
var calendar = new Date();
var year = calendar.getYear();
var month = calendar.getMonth();
if ( !fW || fW == undefined)
{ fW = ( formWarpRequest_THIS_ ? formWarpRequest_THIS_ : formWarpRequest_NS_ );}
if (fW)
{
fW._oLstChoicesymth[2].text = year;
}
}
catch(e)
{
return;
}
}
setTimeout("setDefaultymthValue()", 1);
</script>
2021年12月21日 17:15
It was an awesome moment for the people that they are going to learn nice things.
2021年12月21日 17:17
The way it has been scheduled I would love to tackle this amazing thing.