在用Cognos8做报表是遇到的问题:
需要对输入的提示值进行合法性校验,当值非法时,弹出对话框提示并阻止调教报表,需要获取Cognos控件的值,进行判断,例子是两个日期间隔的判断,通过在报表中添加‘HTML项目’后添加js函数实现:
- <button id = "a" onClick = "javascript: validDate();" class='bp'>查询</button>
- <script language='javascript'>
- function diffDate(v_begin,v_end)
- {
- var diff =0;
- beg = new Date();
- end = new Date();
- var tmp = new Array(3);
- tmp = v_begin.split('-');
- beg.setYear(tmp[0]);
- beg.setMonth(tmp[1]);
- beg.setDate(tmp[2]);
- tmp = v_end.split('-');
- end.setYear(tmp[0]);
- end.setMonth(tmp[1]);
- end.setDate(tmp[2]);
- diff = (end-beg)/(1000*60*60*24);
- return diff;
- }
- function validDate(){
- var form = getFormWarpRequest();
- var date_end = form.txtDate_DateEnd.value;
- var date_beg = form.txtDate_DateBeg.value;
- var span=diffDate(date_beg ,date_end );
- if(span>15)
- {alert('日期间隔不得超过15天!');
- return false;}
- else if(span<0){
- alert('开始日期应小于结束日期!');
- return false;}
- else{
- promptButtonFinish();
- }
- }
-
- </script>
<button id = "a" onClick = "javascript: validDate();" class='bp'>查询</button>
<script language='javascript'>
function diffDate(v_begin,v_end)
{
var diff =0;
beg = new Date();
end = new Date();
var tmp = new Array(3);
tmp = v_begin.split('-');
beg.setYear(tmp[0]);
beg.setMonth(tmp[1]);
beg.setDate(tmp[2]);
tmp = v_end.split('-');
end.setYear(tmp[0]);
end.setMonth(tmp[1]);
end.setDate(tmp[2]);
diff = (end-beg)/(1000*60*60*24);//单位:毫秒转换为天
return diff;
}
function validDate(){
var form = getFormWarpRequest();
var date_end = form.txtDate_DateEnd.value; //_DateEnd为Cognos中控件的名称,txtDate_ 为控件前缀
var date_beg = form.txtDate_DateBeg.value;
var span=diffDate(date_beg ,date_end );
if(span>15)
{alert('日期间隔不得超过15天!');
return false;}
else if(span<0){
alert('开始日期应小于结束日期!');
return false;}
else{
promptButtonFinish();
}
}
</script>
因为原有的提示按钮不提供参数合法性判断,因此使用了标准的按钮,为了和报表的风格保持一致,需要查找报表的相应控件使用的CSS类。
Cognos中CSS文件的存放地址:
/cognos/c8/reportstyles/default_layout.css
/cognos/c8/reportstyles/GlobalReportStyles.css
提示按钮的CSS类在GlobalReportStyles.css中为bp。
提示按钮对应的函数:
完成-->promptButtonFinish();
取消-->promptButtonCancel();
下一步->promptButtonNext();
需要注意的是‘重新提示’没有对应的函数,查看了些外国的资料都提到了没有找到该函数;
同时在js中引用Cognos控件时需要知道控件的前缀:
文本提示: _textEditorBox
值提示: _oLstChoices
日期提示:txtDate
在操作控件前首先要获取表单对象:
var form = getFormWarpRequest();
添加新评论4 条评论
2013-05-22 14:28
2013-05-11 16:27
2013-03-29 20:39
2013-03-27 12:51