Ricky

链接

RSS

RSS Link

Cognos中的日期提示自动设置默认值

2013年2月26日 15:07 | Comments(2) | Category:BI | Tags:

极品客户当然有极品的要求:

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>