分类: 系统运维
2012-05-16 08:36:53
cognos一值传多参我研究出了很多方案,目前是采用的方式是,在framework中的业务视图的sql中 写类似如下语法 in (#csv( split ( ',', prompt("cporgcd","token","") ))# ),实际上我们的语句比这个复杂得多,但我不能泄密,总之嵌套了很多函数。然后在url后面加p_param=‘1002,1003,1004'的方式,但这种方式有两个明显的缺点,第一如果报表页面上没有引用该维度,参数是不能起到过滤作用的,其二这个参数可能会很长很长,以至于超过最大url长度,并且有可能有宏函数解析出错的风险。
因此决定采用新的方案,这种方案看似简单,实际上解决了一个很棘手的问题,在framework中定义全局过滤器(注意不是在维度的那个页签中的filter,而是整体的filter),定义的方式很简单,直接写 in (?param?)即可,然后在report studio中引入该维度即可,注意要想灵活的让该filter不起作用,可以设置其用途为可选,这样不传参就是代表查询全部,这解决了宏函数和不要用不起作用的问题,并且在访问报表的时候采用post的方式传递参数,这样又解决了url过长的问题,可以说一举两得。
post传参参考如下,
如果通过url拼接字符串的话,太麻烦。还是选择用表单提交。
如果参数的设置是in,就有点问题。因为在cognos报表中的设置:[列表字段] in ('参数1','参数2','参数3'),可是将:'参数1','参数2','参数3'通过url就不能传给报表。解决:。。……
首先,没有setParameter方法,只有getParameter,所以一般只区分getAttribute和getParameter的区别。
getAttribute表示从request范围取得设置的属性,必须要先setAttribute设置属性,才能通过getAttribute来取得,设置与取得的为Object对象类型getParameter表示接收参数,参数为页面提交的参数,包括:表单提交的参数、URL重写(就是xxx?id=1中的id)传的参数等,因此这个并没有设置参数的方法(没有setParameter),而且接收参数返回的不是Object,而是String类型
getAttribute表示从request范围取得设置的属性,必须要先setAttribute设置属性,才能通过getAttribute来取得,设置与取得的为Object对象类型 getParameter表示接收参数,参数为页面提交的参数,包括:表单提交的参数、URL重写(就是xxx?id=1中的id)传的参数等,因此这个并没有设置参数的方法(没有setParameter),而且接收参数返回的不是Object,而是String类型
string [] arr = request.getParameterValues("arr");
Cognos 8.3 + JSP前端集成方案
1. 在报表设计器中,对需要传递参数的字段设置“明细过滤器”。比如:[CompanyName] = ?aa?
2. 回到Cognos门户,找到刚才设置参数的报表,按照下图单击“属性”按钮。
3. 记录本张报表的ID,后面的JSP页面会到,然后单击“查看搜索路径、ID和URL”。
4. 记录本张报表的“搜索路径”。“默认操作URL”是可选的,如果报表不需要条件,直接可以用这个地方访问。
5. 新建一个Java Web项目( .NET,PHP, ASP, RoR,Django 等其它web项目都行)。新建一个index.jsp页面,代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
10. 下面的是最简单的cognos自动登陆实现文档.在安装过cognos的机器上,如果初始用户名和密码都没有改变,可以实现自动登陆.这里说一句,cognos的技术支持太薄弱了,什么都要用户自己摸索,为什么不开放些,也好有利于自己的发展.
目前cognos被客户批的厉害,估计下面cognos的销售情况会有较大的波动.谁让他不开放的!