IBM Cognos 最佳实践: 在定制 Web 应用程序中嵌入 IBM Cognos Now! 仪表板对象和报告

文档性质:技巧或技术;产品:IBM Cognos Now! 关注领域:开发

本文将帮助 IBM Cognos Now! 用户理解如何将 IBM Cognos Now! 仪表板对象和报告嵌入到他们的外部 HTML 应用程序和 web 页面中。

Prakash Dewan, 系统软件工程师, IBM

Prakash Dewan 是位于印度 Pune 的 IBM 软件研究所的 IBM Cognos 工程团队的一名成员。除了使用 Rational Functional Tester 进行自动化测试之外,他还从事产品的各种特性和功能的验证和确认。Prakash 具有计算机应用软件的硕士学位,并在开发自动化框架方面有很深的技能。他在高级测试主题的培训方面也具有丰富的经验,并贡献了一些知识库的文章。



2011 年 7 月 22 日

免费下载:IBM® Cognos® Express V9.5 或者 Cognos® 8 Business Intelligence Developer Edition V8.4 试用版
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

简介

目的

本文将帮助 IBM Cognos Now! 用户理解如何将 IBM Cognos Now! 仪表板对象和报告嵌入/包含到他们的外部 HTML 应用程序和 web 页面中。

适用性

  • 本文所述技巧适用于 IBM Cognos Now! 版本 4.3 和更高版本的设备和软件/OEM 产品。
  • 对于软件/OEM 产品,由于没有集成的 IBM Cognos BI,因此不适合嵌入 Query and Report Studio 报告。
  • 本技巧仅适用于 Internet Explorer 版本 6 或更高版本。

例外与除外责任

本文假设 IBM Cognos Now! 已经安装就绪并且可以正常运行。


需求

IBM Cognos Now! 支持在所有主要门户服务器上将仪表板对象显示为 portlet,包括 WebSphere、WebLogic 和 JBoss。然而,一些情况下,用户需要在其现有 web 应用程序中显示特定的 IBM Cognos Now! 仪表板对象和/或报告。它们应该显示为一个 web 接口来接入到现有系统/软件或一个简单的 web 页面。


实现

创建 URL

嵌入的仪表板对象可通过 IBM Cognos Now! 服务器的 /dashboard/doreader.htm 资源创建,该资源在 URL 中包含以下参数。

  • <sessionID> - 登录用户的有效会话 ID
  • <refreshinterval> - 刷新间隔(单位:秒),应用于仪表板对象
  • <reportrefreshinterval> - 刷新间隔(单位:分钟),应用于 Report/Query studio 报告
  • <do> - 仪表板对象或报告的完全限定名。例如,“f1” 文件中的仪表板对象 “do1” 应当以 “f1.do1” 的形式传递。
  • <type> - 用于 Query/Report studio 报告

仪表板对象的 URL 语法

http://<cnow-server>:<port>/<server-context>/dashboard/doreader.htm?sessionID=<sessionID>&refreshinterval=<refreshInterval>&do=<fully-qualified-name-of-dashboard-object>

Query Studio 报告的 URL 语法

http://<cnow-server>:<port>/<server-context>/dashboard/doreader.htm?sessionID=<sessionID>&reportrefreshinterval=<refreshInterval>&do=<fully-qualified-name-of-report>&type=C8_QS_REPORT

Report Studio 报告的 URL 语法

http://<cnow-server>:<port>/<server-context>/dashboard/doreader.htm?sessionID=<sessionID>&reportrefreshinterval=<refreshInterval>&do=<fully-qualified-name-of-report>&type=C8_RS_REPORT

获得有效会话 ID

可通过以下方式获得 IBM Cognos Now! 服务器的有效会话 ID:使用如下所示的 XML 请求执行服务器的 /Controller/UserAction/Login 操作,

<login>
	<user>USERNAME</user>
	<password>PASSWORD</password>
</login>

以下 JavaScript 代码演示了登录到 IBM Cognos Now! 服务器的过程:

var strServerURL = “http://cognos-now-server:port/cognos/now”      
var strUser = “xyzUser”
var strPassword = “xyzPassword”
var xml = new ActiveXObject("Microsoft.XMLDOM");
xml.loadXML("<login><user></user><password></password></login>");
xml.documentElement.selectSingleNode("/login/user").text = strUser;
xml.documentElement.selectSingleNode("/login/password").text = strPassword;
var sURL = strServerURL + "/Controller/UserAction/Login";
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP")

如果用户验证成功,那么将返回一个 sessionID。该 ID 可以从如下所示的代码中的响应 XML 中提取获得。如果服务器发生异常事件,如验证失败,代码将向用户发送相应的通知。

try {
    xmlhttp.open("POST", sURL, false);
    xmlhttp.send(xml.xml);
    } catch(e) {
      alert("Make sure a valid server URL is entered.");
      return null;
     }
if(xmlhttp.responseXML.documentElement.tagName.match("structuredException")) {
 alert("Error logging in. Please check your user name and password.");
 return null;} 
else {
 return xmlhttp.responseXML.selectSingleNode("/loginResp").getAttribute("sessionid");
 }

附带的样例使用了相同的实现获得如上显示的有效 sessionID。该示例随后使用下面的代码构建报告的 URL:

if(dashboardName.value.replace(/(^\s*)|(\s*$)/g, "") != '') {
if(objecttype.value == "DO"){ //For Dashboard Object
url = txtServerURL.value + "/dashboard/doreader.htm?sessionID="+sessionID+"
        &refreshinterval="+refresh.value+"
        &do="+encodeURIComponent(dashboardName.value.replace(/\"/g,'""'));
			}
else{ //In case of Report/Query Studio Report
url = txtServerURL.value + "/dashboard/doreader.htm?sessionID="+sessionID+"
        &reportrefreshinterval="+refresh.value+"
        &do="+encodeURIComponent(dashboardName.value.replace(/\"/g,'""'))+"
        &type="+objecttype.value;
			}

对仪表板对象或报告名编码

要避免 URL 出错,应当对仪表板对象使用经过编码的完全限定名。本文示例使用了 Javascript encodeURIComponent() 方法对仪表板对象或报告进行了编码,如下所示:

encodeURIComponent(dashboardName.value.replace(/\"/g,'""'));

上述函数不仅转义特殊字符,而且还使用成对的双引号(“”)替换单独出现的双引号(“),因此任何名称中只含有一个双引号的仪表板对象或报告都能够被成功识别出来。


在 Web 页面中嵌入仪表板对象 URL

使用有效会话 ID 成功构建好 URL 后,可以通过多种方式将其嵌入到 web 应用程序或 web 页面中。

作为 <IFRAME> 的一个源

txtURL = txtServerURL.value + "/dashboard/doreader.htm?sessionID="+sessionID+"
        &refreshinterval="+refresh.value+"
        &do="+encodeURIComponent(dashboardName.value.replace(/\"/g,'""'));
document.write(“<IFRAME src=” & txtURL & “width=400 height=300>”);

作为 <FRAME> 的一个源

txtURL = txtServerURL.value + "/dashboard/doreader.htm?sessionID="+sessionID+"
        &refreshinterval="+refresh.value+"
        &do="+encodeURIComponent(dashboardName.value.replace(/\"/g,'""'));
document.write(“<FRAME src=” & txtURL & “>”);

作为一个 Masked Link

txtURL = txtServerURL.value + "/dashboard/doreader.htm?sessionID="+sessionID+"
        &refreshinterval="+refresh.value+"
        &do="+encodeURIComponent(dashboardName.value.replace(/\"/g,'""'));
document.write(“<a href=” & txtURL & “>Business Metrics</a>”);

上例仅展示了几种可能性。web 应用程序开发人员可以将仪表板对象或报告的 URL 嵌入到 web 应用程序中。


其他技巧

  1. 与登录操作类似,通过用请求中以下模式的 XML 触发 Cognos Now 服务器的 /Controller/UserAction/Logout 操作就可以实现退出操作。
    <logout>
    	<user>currentLoggedInUser</user>
    </logout>

    Below is the implementation of logout(), which is part of the sample web page as well,
    var xml = new ActiveXObject("Microsoft.XMLDOM");
    xml.loadXML("<logout><user></user></logout>");
    xml.documentElement.selectSingleNode("/logout/user").text = currentLoggedInUser;
    var sURL = currentUserServerURL + "/Controller/UserAction/Logout";
    var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP")
     try {
           xmlhttp.open("POST", sURL, false);
           xmlhttp.setRequestHeader("ObiSessionID",sessionID);
    			xmlhttp.send(xml.xml);
    			alert("You are logged out successfully!");
         } catch(e) {}
  2. 单击 web 页面中的仪表板对象标题,就可以在另一个浏览器窗口中的 IBM Cognos Now! 仪表板应用程序中打开详细视图,然后可以进行分析和监视。

示例解释

JavaScript 示例

本文附带了一个示例 html web 页面 DoinIFRAME.html,它实现了上文所述技巧。该示例可以在一个 IFRAME 中嵌入/显示 IBM Cognos Now! 仪表板对象或 Query/Report 报告。该示例主要针对 IBM Cognos Now! Appliance,即 Integrated Report and Query studios,因此它提供了嵌入仪表板对象、Query Studio 报告和 Report Studio 报告的选项。

注意:安装了 IBM Cognos Now! 的软件或 OEM 版的用户只能够参考本示例中的仪表板对象部分,因为软件/OEM 安装没有集成报告功能,即 Report and Query studio。

HTML 表单字段

图 1 - HTML 表单字段
图 1 - HTML 表单字段

下面显示了样例 web 页面的 HTML 表单字段的细节。

  • Server URL:IBM Cognos Now! Server URL,即 http://<server-name>:<port>/<server-context>,例如 http://server1.ibm.com:80/cognos/now
  • User name:希望登录到 IBM Cognos Now! 的用户
  • Password:登录用户的密码
  • Object Type:仪表板对象或 Query Studio 报告或 Report Studio 报告
  • Dashboard Object/Report:希望在 IFRAME 中显示的对象的完全限定名。
  • Refresh Interval: IFRAME 中对象的刷新时间间隔。仪表板对象的时间间隔单位为秒,而报告的时间间隔的单位为分。

用户填充好 html 表单并单击 Submit 按钮后,请求的仪表板对象/报告将显示在 IFRAME 中。此外,还同时出现一个 URL for reference 标签和一个 Logout 链接(如下所示):

图 2 - 参考 URL
图 2 - 参考 URL

IFRAME 中的仪表板对象

图 3 - IFRAME 中的对象
图 3 - IFRAME 中的对象

IFRAME 中的 Query Studio 报告

图 4 - IFRAME 中的 Query Studio 报告
图 4 - IFRAME 中的 Query Studio 报告

IFRAME 中的 Report Studio 报告

图 5 - IFRAME 中的 Report Studio 对象
图 5 - IFRAME 中的 Report Studio 对象

JSP 示例

本文还随附了另一个 Java Server Page (JSP) 示例 FormDoUrl.jsp 供您参考。该 JSP 示例的逻辑与 HTML/JavaScript 示例的逻辑类似。


下载

描述名字大小
ZIP 文件Embed_IBM_Cognos_Now_Dashboard_Objects_and_Reports_in_Custom_Web_Applications.zip331KB

参考资料

学习

获得产品和技术

讨论

  • 参与 developerWorks 博客 并加入 developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=676808
ArticleTitle=IBM Cognos 最佳实践: 在定制 Web 应用程序中嵌入 IBM Cognos Now! 仪表板对象和报告
publish-date=07222011