专注于中国的商业智能

导航

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&amp;m=portal/main.xts&amp;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


收工。。。

 

 

 

posted on 2010-08-30 15:38  李梦蛟  阅读(2251)  评论(2编辑  收藏  举报