Cognos8与自定义门户的集成
在网上有看到过Websphere Portal 6.0和cognos8集成的文章,但是没有看到自己开发的门户和cognos的集成,这两者还是有较大的区别的。我
们公司的BI就是采用的自己开发BI门户集成cognos报表的方式的,今天来和大家分享一下企业自己定制开发的门户(技术不限,.net或java都
行)与cognos报表的集成的经验。
集成分成页面级集成和API级别的集成,页面集成的含义就是直接通过cognos报表的URL地址直接访问,API级别的集成是采用cognos提供的API
进行用户认证和获取报表的数据,然后在自己的程序中展现。由于API级别的集成工作量较大,所以我准备采用页面级别的集成。
页面级别的集成又分成两种方案:
第一种是cognos和门户网站采用同一套用户认证体系,登录门户网站的时候同时登录cognos;
第二种是cognos和门户网站采用独立的用户认证,这种方案中cognos的用户认证可以使用LDAP服务器或者其他cognos支持的方式来实现用户管
理,但是要在cognos中建立一个公共用户,在用户登录门户的同时,用这个公共用户同时登录congnos。
以上第二种方案不需要开发cognos二次认证插件,但由于cognos认证采用的具有较大数据权限的公共用户,所以存在一定的安全隐患,比如用
户在看某个报表的过程中设法弹出一个窗口,而这个窗口是经过cognos认证的,所以可以通过改变URL的方式来访问本来这个用户没有权限访问
的报表。而方案一由于门户和cognos采用的同一用户登录,所以不存在这种安全隐患,因此这里推荐使用第一种方案来实现集成。
以下过程为第一种方案的实现过程:
1.由于congos和门户网站要采用同一套用户认证体系,因此在集成之前要先使用cognos的SDK开发一个cognos认证的插件,插件的开发请参照我
的另一篇博文《cognos自定义验证开发》。
2.配置并启用cognos自定义验证provider;
3.开发一个中转页面BITransfer.aspx,这个页面的作用跳转到对应的报表URL;
关键代码如下:
if (Request["reportkey"] == null) { MessageBox.Show(this, "请指定报表!"); return; } string reportkey = Request["reportkey"].ToString(); string reportpath = ConfigurationManager.AppSettings[reportkey].ToString(); Response.Redirect(reportpath);
4.在自定义门户系统中通过菜单方式集成报表,菜单指向的url地址为:http://cognosserver/integrate/BITransfer.aspx?reportkey=****;
5.在自定义门户系统中的登录页面中,同时登录cognos。
关键代码如下:
StringBuilder sb = new StringBuilder(); sb.Append("<html>"); sb.Append("<body>"); sb.Append("<form name=\"login\" action=\"" + ConfigurationManager.AppSettings["ReportServerURL"].ToString() + "\" method=\"post\">"); sb.Append("<input type=\"hidden\" name=\"CAMNamespace\" value=\"" + ConfigurationManager.AppSettings ["CAMNamespace"].ToString() + "\"/>"); sb.Append("<input type=\"hidden\" name=\"CAMUsername\" value=\"" + username + "\"/>"); sb.Append("<input type=\"hidden\" name=\"CAMPassword\" value=\"" + password + "\"/>"); sb.Append("</form>"); sb.Append("<script language=\"javascript\">"); sb.Append(" login.submit();"); sb.Append("</script>"); sb.Append("</body>"); sb.Append("</html>"); Response.Write(sb.ToString());
其中ReportServerURL为cognos访问的网址,如http://cognosserver/cognos8/cgi-bin/cognos.cgi?
b_action=xts.run&m=portal/main.xts&startwel=yes;
到此为止这种方案已经完成了,登录门户以后点击某个菜单自动打开cognos报表。
以下过程为第二种方案的实现过程:
1.随便给cognos配置一种支持的用户认证方式,一般用sunone LDAP服务器较为常见;
2.在sunone中建立一个公共帐户,并赋予一些权限,用于访问所有cognos报表;
3.在自定义门户系统中通过菜单方式集成报表,和第一种方案的4相同;
4.在自定义门户系统中的登录页面中,同时登录cognos,和第一种方案5相同,区别的地方在于代码中的username和passwor要读取配置文件中
我们配好的以上步骤2中创建公共账户;
完成。由于方案2中涉及到安全隐患问题,所以需要屏蔽cognos报表默认的一些工具栏(注:只能稍微安全一定,并不能根除安全隐患)。
cv.header=false
cv.toolbar=false
cv.contextmenu=false
cv.selection=false
收工。。。