Report Studio之JavaScript技巧七、操纵日期时间提示控件

浏览: 2756

有一张使用日期时间提示控件过滤发货日期的报表。默认情况下,Cognos选择当前日期和午夜十二点做为默认日期和时间。

Report Studio允许我们修改此默认值为一静态值。但是修改后的默认值是硬编码的,也就是写死了的。用户希望时间总是能默认选择日期为报表运行时间的前一天,时间为下午五点。

在此例中,我们将学习如何修改Date Time control的默认值为运行报表的前一天下午五点。

 

准备工作

 

任创建一张按发货日期显示销售数量的报表,并在发货日期上建立过滤。

 

如何实施

 

1. 添加一张prompt page。在prompt page中添加一个Date & Time Prompt,并将其连接到之前建立的Shipment Day filter上。

2. 选中此prompt,并设置器Name属性为shipmentDate

Clipboard Image.png

3. 添加一个HTML项目到页脚的Finish 按钮之后,并定义其代码为:

<script>

function subtractDay ()

{ var dtToday = new Date();

  var dtYesterday = new Date( dtToday - 86400000 );

// NOTE 86400000 = 24 hours * 60 (minutes per hour) * 60 (seconds per minute) * 1000 milliseconds per second)

var strYesterday = [dtYesterday.getUTCFullYear(), dtYesterday.

getMonth()+1, dtYesterday.getDate()].join("-");

return strYesterday;

}

function subtractTime ()

{

 var Time = "17:00:00.000";

 return Time;

}

pickerControlshipmentDate.setValue( subtractDay() );

timePickershipmentDate.setValue( subtractTime() );

</script>

4. 运行并测试报表。我们可以看到默认的日期为前一天,时间为下午五点。

 

工作原理

 

这里我们使用标准JavaScript函数计算出前一天。请注意此时间是基于客户端的时间的。

我们通过使用pickerControl<name>的方式,将计算出的日期和时间应用到提示控件中。

我们还可以类似的计算每个月的第一天,最后一天之类的值。下面是我在网上找的一些常用的计算日期的代码,大家可以借鉴一下。

<script language="JavaScript">   

var today = new Date(); 

var thisYear = today.getYear(); 

var thisMonth = today.getMonth(); 

var thisDay = today.getDate();   

function rw(s1, s2) 



document.write("<tr><td>"+s1+"</td><td>"+s2+"</td></tr>"); 

}   

document.write("<table border='1'>");   

rw("Today:", today.toDateString());   

//Years 

var fdly = new Date(thisYear - 1, 0, 1); 

rw("First day of last year:", fdly.toDateString());   

var ldly = new Date(thisYear, 0, 0); 

rw("Last day of last year:", ldly.toDateString());   

var fdty = new Date(thisYear, 0, 1); 

rw("First day of this year:", fdty.toDateString());   

var ldty = new Date(thisYear + 1, 0, 0); 

rw("Last day of this year:", ldty.toDateString());

var fdny = new Date(thisYear + 1, 0 ,1); 

rw("First day of next year:", fdny.toDateString());   

var ldny = new Date(thisYear + 2, 0, 0); 

rw("Last day of next year:", ldny.toDateString());   

//Months 

var fdlm = new Date(thisYear, thisMonth - 1 ,1); 

rw("First day of last month:", fdlm.toDateString());   

var ldlm = new Date(thisYear, thisMonth, 0); 

rw("Last day of last month:", ldlm.toDateString());   

rw("Number of days in last month:", ldlm.getDate());   

var fdtm = new Date(thisYear, thisMonth, 1); 

rw("First day of this month:", fdtm.toDateString());   

var ldtm = new Date(thisYear, thisMonth + 1, 0); 

rw("Last day of this month:", ldtm.toDateString());

rw("Number of days in this month:", ldtm.getDate());   

var fdnm = new Date(thisYear, thisMonth + 1, 1); 

rw("First day of next month:", fdnm.toDateString());   

var ldnm = new Date(thisYear, thisMonth + 2, 0); 

rw("Last day of next month:", ldnm.toDateString());   

rw("Number of days in next month:", ldnm.getDate());   

document.write("</table>");   

</script>

当然我们还可以编写更复杂的脚本,用以计算上一个工作日,而不是仅仅上一天。至于逻辑如何实现,大家可以自己探索。

 

推荐 0
本文由 zhengyi1943 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册