1. 固定报表制作步骤
1.1. 建模
1).建立物理视图
存储过程传递参数的问题:
右键视图——Edit Definition,在弹出窗口中将Value设置为:#prompt('ORG_CODE')#
按此方法设置后,打开报表URL时将提示输入参数,参数名称即为ORG_CODE。
2)建立业务视图
3)模型包发布
1.2. 制作报表
Web设计登陆URL:
http://10.70.248.91/ibmcognos/cgi-bin/cognos.cgi?b_action=xts.run&m=portal/main.xts
名称空间:BFAuth
登录后启动Report Studio制作相关报表。
2. 固定报表的布局
布局控制使用“块”和“表格”,“块”用于分行,“表格”可以用于分列。
3. 插入图形
“图表”插入时可以选择相应的图形,图表可以直接转换类型,在图表上点击右键转换图表。
4. 隐藏图形右侧图标注解
5. 图形上显示数值
6. 添加下拉框,并绑定参数
1).在工具箱中选择该项,拖到报表相应位置。
2).在弹出的对话框中按如下设置:
3).绑定相应查询及使用值,设置排序方式。
4).设置自动提交。
7. JS实现Cognos报表隐藏工具栏、导出不同格式报表、打印
1).在page页面中加入4个HTLM 项目分别用来实现隐藏工具栏、打印、Excel2002导出、选择导出格式。如下:
2).修改4个HTML属性-》常规-》说明内容分别为:隐藏工具栏、打印、Excel2002导出、选择导出格式。
3).修改完毕。如下所示:
4).隐藏工具栏对应的JS代码:
.mainViewerHeader3{ display: none;}
5).打印Html对应的JS代码:(打印报表)
6).Excel2002导出Html对应的JS代码:(Excel2002格式导出报表)
7).选择导出Html对应的JS代码:(下拉框导出不同格式报表)
New Documentfunction Export_js(){
var s;
var se =document.getElementById("zbsjlx");
var options=se.getElementsByTagName("option");
for(var i=0;i
if(options[i].selected){
s = options[i].value;
}
}
var str=s;
if(str=='Excel2007'){
eval(gCognosViewer.getRV().viewReport('spreadsheetML'));
}
else if(str=='Excel2003'){
eval(gCognosViewer.getRV().viewReport('XLWA'));
}
else if(str=='Excel2002'){
eval(gCognosViewer.getRV().viewReport('XLWA'));
}
else if(str=='Singlesheet'){
eval(gCognosViewer.getRV().viewReport('singleXLS'));
}
else if(str=='Excel2000'){//Excel2000有可能不支持
eval(gCognosViewer.getRV().viewReport('XLS'));
}
else if(str=='PDF'){
eval(gCognosViewer.getRV().viewReport('PDF'));
}
else{
alert('请选择导出格式!');
}
}
Excel2007
Excel2003
Excel2002
Singlesheet
Excel2000
8).界面实现效果:
9).补充说明:如果从页面上点击链接直接到报表的话,还可以给那一大串链接后面加上【&cv.header=false&cv.toolbar=false】这句话,可以隐藏掉报表最上面那个一指宽的边框。
8. 导出为PDF格式后因分页导致的内容重复问题
文件-PDF页面设置-纸张大小,选择A3。
9. URL调用Cognos报表的方法
1).复制出报表对应的URL
复制出来
http://10.70.49.3:80/ibmcognos/cgi-bin/cognos.cgi?b_action=cognosViewer&ui.action=run&ui.object=%2fcontent%2ffolder%5b%40name%3d%27HR-BI%27%5d%2fpackage%5b%40name%3d%27HR-BI%e7%ae%a1%e7%90%86%e6%8a%a5%e8%a1%a8%27%5d%2freport%5b%40name%3d%27%e7%ae%a1%e7%90%86%e6%8a%a5%e8%a1%a8%e6%a6%82%e8%a7%88%27%5d&ui.name=%e7%ae%a1%e7%90%86%e6%8a%a5%e8%a1%a8%e6%a6%82%e8%a7%88&run.outputFormat=&run.prompt=true
这是报表原始的URL。
2).修改URL
将run.prompt=true改成false再加&p_MONTH=201501
即:
http://10.70.49.3:80/ibmcognos/cgi-bin/cognos.cgi?b_action=cognosViewer&ui.action=run&ui.object=%2fcontent%2ffolder%5b%40name%3d%27HR-BI%27%5d%2fpackage%5b%40name%3d%27HR-BI%e7%ae%a1%e7%90%86%e6%8a%a5%e8%a1%a8%27%5d%2freport%5b%40name%3d%27%e7%ae%a1%e7%90%86%e6%8a%a5%e8%a1%a8%e6%a6%82%e8%a7%88%27%5d&ui.name=%e7%ae%a1%e7%90%86%e6%8a%a5%e8%a1%a8%e6%a6%82%e8%a7%88&run.outputFormat=&run.prompt=false&p_MONTH=201501
注意:参数名称前面要加上p_
10. JSP页面中设置Cognos报表自动登录
1).在Cognos中新建一张空白报表,添加HTML项目,在属性中将“源类型”设置为“报表表达式”。在表达式定义中写一条JS语句,跳转到系统的真实首页。
'window.location.href="'+ ParamDisplayValue('iplatip')+"DispatchAction.do?efFormEname=HF0101"+'"'
2).查看空白报表的搜索路径,记下该路径,用它替换index.jsp页面中的/content/folder[@name='HR-BI']/package[@name='HR-BI管理报表']/report[@name='PageJumpHRBI']部分。
3).在项目中新建index.jsp页面,在index.jsp页面中设置Cognos报表的登录信息,实现自动登录到步骤1)所创建的空白报表。
4).登录系统时先跳转到index.jsp页面,然后自动登录到Cognos的空白报表,再跳转到系统的真实首页。
参考代码:
dispatchAddr.jsp
String dispatchAddr = "http://10.70.49.3:80/ibmcognos/cgi-bin/cognos.cgi";
%>
index.jsp
import="com.baosight.iplat4j.ec.tm.utils.TemplateInitInfo,com.baosight.iplat4j.util.DateUtils,com.baosight.iplat4j.ec.tm.utils.TemplateInitInfo.*"%>
request.getSession().setMaxInactiveInterval( 2*60*60 );
if (TemplateInitInfo.getContextPath() == null) {
TemplateInitInfo.setContextPath(request.getContextPath());//存上下文
TemplateInitInfo.setIp(request.getServerName());//存ip
TemplateInitInfo.setPort(request.getServerPort());//存port
}
//获取用户名、密码
IUserManager um = SecurityFactory.getInstance().getUserManager();
String username = (String) request.getSession().getAttribute("loginname");
User user = um.getUser(username);
String codepassword = user.getCodedPassword();
//获取IP及端口号
StringBuffer url = request.getRequestURL();
String ip = url.delete(url.length() - request.getRequestURI().length(), url.length()).append("/").toString();
int port=request.getLocalPort();
%>
document.forms[0].submit();
11.常见报错1).RQP-DEF-0177 执行操作“sqlPrepareWithOptions”(状态为“-120”)时出错
错误明细:UDA-SQL-0458 PREPARE 失败,因为此查询要求在本地处理数据。尚未启用允许本地处理的选项。UDA-SQL-0580 数据库不支持调用语句作为派生表,并且该用法需要在本地处理数据。
解决方法:选择对应的查询,在“属性”中将“处理”设置为“仅限本地”。