跳转到主要内容

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

这是您第一次登陆到 developerWorks,已经自动为您创建了您的概要文件。 选择您概要文件中可以公开的信息的信息(如姓名、国家/地区,以及公司),这些信息同时也会与您所发布的内容相关联。 您可以随时更新您的 IBM 账号。

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

  • 关闭 [x]

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

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

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

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

  • 关闭 [x]

IBM Cognos Mashup Service 入门

为 Cognos BI 报告内容实现快速应用程序开发

Cynthia D. Sleigh, 高级软件开发人员, IBM
作者照片:Cynthia Sleigh
Cynthia Sleigh 是 IBM Cognos SDK and Diagnostic 团队的资深成员。她的专长是 Cognos Mashup Services 和 Cognos Software Development Kit。
Iman Johari, 软件开发人员, IBM
Iman Johari 的照片
Iman Johari 是 IBM Cognos SDK and Diagnostic 团队的一名成员。他主要研究 Cognos Mashup Services、Cognos Software Development Kit 和诊断工具。

简介: IBM® Cognos® Mashup Service (CMS) 允许您轻松地提取 Cognos Business Intelligence 报告内容并将其集成到各种应用程序中,比如 Google Maps、Google Earth、Yahoo 桌面小部件、Adobe Flex、IBM Lotus Notes 和其他第三方 Flash 或绘图引擎。本文将介绍 CMS 并提供一些示例,演示使用这种新的 Web 服务可以做些什么。

发布日期: 2010 年 4 月 08 日
级别: 中级 其他语言版本: 英文
访问情况 : 3087 次浏览
评论: 


简介

Cognos Mashup Service (CMS) 是一种新的 Web 服务,它构成了 IBM Cognos Software Development Kit 的一部分。本文将介绍 CMS 并解释它的两个不同接口:REST 和 SOAP。本文通过提供样例代码并着重介绍其中一些随 Cognos Mashup Service 一起安装的样例,向您展示使用该服务可以完成的部分任务。要充分利用本文介绍的内容,您应当具备 IBM Cognos 8 Business Intelligence (BI) 的基本知识,并对编程语言和 Web 技术有一个基本的了解。

系统需求

要执行本文给出的示例,您需要安装以下软件:

  • IBM Cognos 8.4.1 BI
  • IBM Cognos 8.4.1 Software Development Kit

使用 CMS 可以完成哪些任务?

IBM Cognos Mashup Service 提供了一种帮助您集成 Cognos 报告和其他应用程序的方法。可以使用以下两个接口的其中之一来实现这种集成:

  • Representational State Transfer (REST)。此接口使用基本的 HTTP 请求。
  • Simple Object Access Protocol (SOAP)。此接口可以被用来通过编程的方式访问 CMS API。

下面的示例演示了一个完成的 CMS 集成。图 1 展示了样例 IBM Cognos 8.4.1 Report Studio 报告的一部分。该报告包含一家虚拟公司的销售收入数据。这些数据根据该公司的每个分公司的所在地进行划分。图 2 展示了将该报告集成到 Google Earth 地图后的结果。每个分公司的销售数据按照其地理位置被附加到地图上。所有这一切都是通过 Google Maps API 和 CMS REST 接口完成的。

注意:本文的目的是提供对 CMS 的介绍性的概览,而不涉及如何使用 Google Maps API 的具体细节。


图 1. HTML 格式的样例 IBM Cognos 报告结果
样例 Cognos 销售数据,展示了该公司位于中欧的分公司的地址和销售收入

图 2. 使用 IBM Cognos Mashup Service 将 IBM Cognos 报告结果附加在 Google Earth 上
Google Earth 上的欧洲地图,其中根据每个营业部的地址将图 1 的销售数据附加在地图上。

CMS 和 Cognos Software Development Kit (SDK) 有何不同?

表 1 比较了 Cognos SDK 和 CMS。


表 1. 比较 Cognos SDK 和 CMS
SDKCMS
报告编写支持编写报告不支持编写报告
编程语言Java®、.NET Languages、VBJava、.Net Languages、REST 接口
输出格式CSV、HTML、HTML Fragment、MHT、PDF、单一 XLS、spreadsheet ML、XHTML、XLS、XLWA、XMLLDX、XML、HTML、HTML Fragment、JSON
注意:LDX 表示 Layout Data XML。这是一种新格式。
主要功能除自动化操作外,Cognos Connection 几乎可以完成所有任务运行并获得报告输出,并支持以最小的粒度级别访问报告输出元素
身份验证支持支持 — 通过 SDK 或自有的身份验证服务,对于 REST,也可以使用 Cognos 8 登录。
APIJava:sdk 文件夹中的 Jar 文件,Microsoft® .Net:sdk 文件夹中的 .dll 文件使用 WSDL 文件,通过 Web 服务消费可用的功能

使用 CMS

本节提供的示例演示了如何使用 REST 和 SOAP 接口提取 Cognos 报告中的不同组件。

REST 接口

REST 请求的通用 URL 是:

http://webservername:portnumber/cognos8/cgi-bin/cognos.cgi/rds/resource_type/source_type/source_id?option1=val1&option2=val2...

表 2 展示了 REST API 的主要构件。


表 2. REST API 的主要构件
资源类型源类型选项
auth/logonconversationIDasync
auth/logoffpathburstID
atomreportburstKey
promptPagesearchPathcontextId
reportDatadirection

有关更多信息(包括其他选项),请参考 Mashup Services Developer Guide(参见 参考资料 小节,找到有关获得该指南的细节)。

REST 示例 1:

第一个 REST API 示例演示了如何从一个同时包含列表和图表的报告中提取出所有图表。该示例以 Layout Data XML (LDX) 格式返回报告中的所有图表。

下面的参数用于构建该示例的 URL:

  • 资源类型:reportData
  • 源类型:report
  • Resource_id:报告存储 id;例如,iE0CDFEF149F8408F96F1C27DCFFA6BCB
  • 选项:fmt=layoutDataXMLxpath=//chart

URL 本身类似如下所示:

http://localhost/c841/cgi-bin/cognos.cgi/rds/reportData/report/iE0CDFEF149F8408F96F1C27DCFFA6BCB?fmt=layoutDataXML&xpath=//chart

清单 1 展示了生成的 LDX。


清单 1. 样例 REST 调用生成的 LDX
				
 <filterResultSet xmlns="http://www.ibm.com/xmlns/prod/cognos/layoutData/200904">
  <filterResult>
  <filterType>XPATH</filterType>
  <filterValue>//chart</filterValue>
   <reportElement>
    <chart>
     <palette>
      <paletteItem>
       <pattern>
        <type>ePatternSolid</type>
         <fgColor>
         <red>51</red>
         <green>51</green>
            .
            .
            .
		 
   </reportElement>
  </filterResult>
 </filterResultSet>

REST 示例 2:

本示例将访问示例 1 中的报告中的数据,并以 HTML Fragment 格式返回报告中的一个图表。

下面的参数用来构建本例的 URL:

  • 资源类型:reportData
  • 源类型:report
  • Resource_id:报告存储 id;例如,iE0CDFEF149F8408F96F1C27DCFFA6BCB
  • 选项:fmt=HTMLFragmentselection=Chart1

URL 本身类似如下所示:

http://localhost/c841/cgi-bin/cognos.cgi/rds/reportData/report/iE0CDFEF149F8408F96F1C27DCFFA6BCB?fmt=HTMLFragment&selection=Chart1

图 3 展示了由返回的 HTML Fragment 生成的结果图表。


图 3. IBM Cognos Mashup Service 生成的图表
按城市显示收入的样例图表的屏幕截图。

在运行这项操作之前,用户必须经过 IBM Cognos 8 的身份验证。一种身份验证方法就是使用 Mashup Services Developer Guide 中描述的 CMS 身份验证服务登录方法(参见 参考资料 小节,了解如何获得这份指南)。

REST 示例 3:

本例展示了如何以 HTML 格式运行报告,并且每个页面最多返回三行数据。

下面的参数用于构建本例的 URL:

  • 资源类型:reportData
  • 源类型:report
  • Resource_id:报告存储 id;例如,i6243D3E1A36A4E0FAF9D90652C171FC2
  • 选项:fmt=HTMLselection=List1rowLimit=3

URL 本身类似如下所示:

http://localhost/c841/cgi-bin/cognos.cgi/rds/reportData/report/i6243D3E1A36A4E0FAF9D90652C171FC2?fmt=HTML&selection=List1&rowLimit=3

图 4 展示了由返回的 HTML 生成的结果表格。


图 4. 使用 IBM Cognos Mashup Service 生成的 HTML 格式的有限输出
HTML 表格的屏幕截图,其中包含一列三行

SOAP 接口

表 3 展示了 SOAP API 接口的一些通用方法。


表 3. SOAP 方法
方法描述
drill 使用这个从属(secondary)方法上钻或下钻现有的报告会话。
getOutput 使用该方法检索报告的输出。
getPromptAnswersgetPromptPage 请求后使用此方法检索提示页面的答案。
getPromptContent 使用此方法检索报告的内容。
getReportData 使用此方法以指定的格式检索报告的内容。

有关更多信息(包括额外的选项),请参考 Mashup Services Developer Guide(参见 参考资料,详细了解如何获得这份指南)。

使用 Java API 的 SOAP 示例:

本例演示了如何提取一个列表,它将从一个包含列表和图形的报告中访问所有报告元素。


样例 Java 代码
				
  ReportDataServicePortProxy proxy = new ReportDataServicePortProxy();
  //The endpoint will be the gateway URL for your server
  proxy.setEndpoint(url);
  
  ReportDataServicePort mashupService = proxy.getReportDataServicePort();
  
  GetReportDataRequest request = new GetReportDataRequest();
  //This sets the cm searchPath as the source of the report, you 
  //could alternatively use the storeId
  request.setSourceID("/content/folder[@name='Samples']/folder[@name='Models']
  /package[@name='GO Data Warehouse (analysis)']/folder[@name='Query Studio
  Report Samples']/query[@name='Returns by Product Type']");
  
  //This identifies that the sourceID refers to a CM search path
  request.setSourceType(SourceTypeEnum.searchPath);
  //This creates an object id filter to only return the List1 element, 
  OBJECT_ID is the type of filter that
  //filters based on element id.
  Filter[] filters = {new Filter("List1", FilterTypeEnum.OBJECT_ID, null)};
  request.setFilters(filters);
  
  GetOutputResponse response = mashupService.getReportData(request);
  GetOutputRequest outputRequest = new GetOutputRequest();
  
  /*
  * This loop is necessary when running asynchronously
  */
  while(response.getSession().getStatus() == SessionTypeStatus.working)
  {
  outputRequest.setSession(response.getSession());
  response = mashupService.getOutput(outputRequest);
  }
  
  /*
  * This block of code goes through the list contents and outputs them to the console
  */
  ListFrame list1 = response.getOutput().getLDXOutput()
  .getFilterResultSet().getFilterResult()[0]
  .getReportElement()[0].getLst();
  Row[] rows = list1.getGroup().getRow();
  
  System.out.println();
  System.out.print("Product type");
  int spaceOfCell=25-("Product type".length());
  for (int n=0;n<spaceOfCell;n++)
    {	System.out.print(" ");}
    
    System.out.print("Base product");
    spaceOfCell=35-("Base product".length());
    for (int n=0;n<spaceOfCell;n++)
    {	System.out.print(" ");}
    
    System.out.print("Lost revenue");
    spaceOfCell=20-("Lost revenue".length());
    for (int n=0;n<spaceOfCell;n++)
      {	System.out.print(" ");}
      
      System.out.println();
      System.out.println();
      
      for(int i = 0; i < rows.length; i++)
      {
      Cell[] cells = rows[i].getCell();
      
      System.out.print(cells[0].getItem(0).getTxt().getFmtVal());
      spaceOfCell=25-(cells[0].getItem(0).getTxt().getFmtVal().length());
      for(int j=0;j<spaceOfCell;j++)
        {   System.out.print(" ");}
        
        System.out.print(cells[1].getItem(0).getTxt().getFmtVal());
        spaceOfCell=35-cells[1].getItem(0).getTxt().getFmtVal().length();
        for(int j=0;j<spaceOfCell;j++)
        {  	System.out.print(" ");}
        
        System.out.print(cells[5].getItem(0).getTxt().getFmtVal());
        spaceOfCell=20-cells[5].getItem(0).getTxt().getFmtVal().length();
        for(int j=0;j<spaceOfCell;j++)
          {   System.out.print(" ");}
          
          System.out.println();
          }
 

图 5 展示了由上面的样例代码生成的示例输出:


图 5. Java 示例的结果
样例代码输出的屏幕截图,显示了一个包含三个列的表:Product type、Base product 和 Lost revenue

样例应用程序

目前,CMS 包含了多个样例。这些样例默认被作为 IBM Cognos Software Development Kit 的一部分安装。

REST 样例使用 HTML 和 JavaScript 编写。这些样例可以从 Web 浏览器上运行,并安装到以下目录:

<c8_install>/webcontent/samples/sdk/cms

SOAP API 样例使用 C# 和 Java 编写。这些样例被安装到如下目录:

<c8_install>/sdk/cms

有关这些样例的更多信息,请参考 Mashup Services Developer Guide(参见 参考资料 小节,了解如何获得该指南)。

图 6 展示了 JavaScript 样例的主菜单的屏幕截图,展示了其中包含的内容项。这些样例并不是最终用户使用的应用程序;它们仅仅是用来向您演示使用 CMS 可以实现哪些任务。


图 6. 样例程序
CMS JavaScript 样例链接列表的屏幕截图。

结束语

感谢您阅读这篇 IBM Cognos Mashup Services 简介。本文的目的就是使您了解使用 CMS 可以完成哪些任务,以及如何使用两种不同的接口执行一些基本任务。


参考资料

学习

  • Mashup Services Developer Guide 被包含在 IBM Cognos 软件安装中。当完成 Cognos 安装后,您可以在下面的位置找到这份指南的英文版:
    IBM Cognos installation directory\webcontent\documentation\en\dg_cms.pdf

  • IBM Cognos Mashup Service Product 说明和演示

  • IBM Cognos SDK Validation Tool”(developerWorks,2008 年 8 月),提供有关 Cognos SDK 验证工具的信息,您可以使用该工具对 Content Store 中的所有报告运行完整的验证检查。

讨论

作者简介

作者照片:Cynthia Sleigh

Cynthia Sleigh 是 IBM Cognos SDK and Diagnostic 团队的资深成员。她的专长是 Cognos Mashup Services 和 Cognos Software Development Kit。

Iman Johari 的照片

Iman Johari 是 IBM Cognos SDK and Diagnostic 团队的一名成员。他主要研究 Cognos Mashup Services、Cognos Software Development Kit 和诊断工具。

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


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


忘记密码?
更改您的密码

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

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

当您初次登录到 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=481075
ArticleTitle=IBM Cognos Mashup Service 入门
publish-date=04082010
author1-email=Cynthia.Sleigh@ca.ibm.com
author1-email-cc=
author2-email=iman.johari@ca.ibm.com
author2-email-cc=