内容


使用 BIRT 和 Rational Team Concert 创建定制报表

使用 BIRT 访问多个自定义工作项属性

Comments

目标

在阅读完这篇文章后,您将具备必要的知识来:

  • 理解自定义属性是如何存储在 Rational Team Concert 储存库中的。
  • 如何在 Rational Team Concert 储存库中查看和定位自定义属性。
  • 为每个自定义属性的数据类型创建 BIRT 数据集。
  • 应用 JavaScript 代码到每个数据集来存储自定义属性。
  • 显示自定义属性的值。

先决条件

本系列文章假设读者基本熟悉如何在 Rational Team Concert 中使用 BIRT 报表。包括如何创建报表,如何操作数据源和数据集,以及如何将表添加到报表中。这些主题都已包含在 IBM developerWorks 上的下列文章中。如果您不熟悉 Rational Team Concert 和 BIRT 中的报表,可以通过以下的文章先进行了解:

为了学习这些文章,您将需要一个 jazz.net 的免费帐户,以及 Rational Team Concert 服务器和 Rational Team Concert 客户端的完整版或试用版。

问题陈述

标准和内置的 Rational Team Concert 属性存储在表的列中。然而,自定义的 Rational Team Concert 工作项属性存储在数据仓库中的通用 KEY 和 VAL 列中。这种方法是用来容纳工作项上将会存在的由用户定义的自定义属性。下面的例子显示了如何为一个缺陷工作项目存储 Phase、Release 和 Type 等三个自定义的字符串属性。

当前用来存储自定义属性的模式

由于 Rational Team Concert 中不能动态地在数据库中为每个自定义属性创建列,为此,已经实现一个通用的存储机制,如表 1 所示。在表 1 中,三个自定义字符串属性被添加到一个工作项类型。对于两个具体的工作项目来说,三个自定义属性都共有六行检索到的行。对于每一个工作项目,为每个自定义属性存储一行。

表 1. 当前自定义属性模式的例子
WI_IDSTRING_KEYSTRING_VAL
1PhaseDevelopment
1Release2.1
1TypeCode Error
2PhaseTesting
2Release2.5
2TypeBug

用来存储自定义属性的理想模式

对实现 Rational Team Concert 中报表自定义属性来说最理想的表应包含存储在数据库中每个属性所包含的列。表 2 展示了该表的理想模式和布局。

表 2. 一个理想的自定义属性模式的示例
WI_IDPhaseReleaseType
1Development2.1Code Error
2Testing2.5Bug

自定义属性的位置

表 3 概述了哪些字段包含了来自 Rational Team Concert 中数据仓库表的自定义属性。

表 3. 所选择的自定义属性字段的位置
StringsTimestampsIntegersLong
Data sourceJazz Data Source
SnapshotWORKITEMS_SNAPSHOT
Data setAdvanced Data Set
Table nameLIVE_WORKITEM_CNT
Filter byPROJECT_AREA_NAME
WI_TYPE
Column to selectSTRING_KEY
STRING_VAL
TIMESTAMP_KEY
TIMESTAMP_VAL
INTEGER_KEY
INTEGER_VAL
LONG_KEY
LONG_VAL

为多个属性创建一个 BIRT 报表的解决方案

要为多个自定义属性创建自定义 BIRT 报表,请按照下列步骤操作:

  1. 创建全局变量来存储自定义属性数据。
  2. 为每个属性类型(例如,字符串、整数和时间戳)创建独立的高级数据集。
  3. 使用 JavaScript 来捕获和存储自定义属性数据。
  4. 创建一个最终的,主要的,汇总的数据集,以一种可用格式统一所有自定义的属性数据。

在报表中创建全局变量

当您开始一个新的 BIRT 报表后,第一步是创建全局变量来存储自定义属性数据。为每一个自定义属性类型(字符串,整数,时间戳)创建一个单独的全局变量。

  1. 创建一个新的 BIRT 报表模板,并建立必要的数据源到您的 Rational Team Concert 的数据源设置中,在 BIRT 导航(Navigator)窗口中选择 Report
  2. 从模板视图中,在底部选择 Script 选项卡来转到报表的 JavaScript 窗口。
  3. 在脚本选择的下拉菜单中,选择如图 1 所示的 initialize 类别。您在 initialize 初始化段落编写的代码将会在报表启动时执行。
  4. 依据属性类型创建新的对象来存储自定义属性。在这个例子中,您将为字符串和时间戳一同创建变量。将下面的代码放在初始化段落,如图 1 所示:
    Strings = new Object();
    Timestamps = new Object();
图 1. 以全局变量初始化报表
为字符串和时间戳创建变量
为字符串和时间戳创建变量

为每个自定义属性类型创建一个单独的数据集

为每个自定义属性类型创建单独的高级数据集。在这个例子中,您将会把字符串和时间戳的自定义属性一同报表。因此,您需要创建两个高级数据集;一个用于字符串和一个用于时间戳。以下步骤假定您熟悉如何在 BIRT 中创建数据集,数据集将连接到相应的 Rational Team Concert 数据库。

为字符串创建一个高级数据集

为了给字符串的属性类型创建一个高级数据集,使用下列值,这些值也示于图 2:

  • Table: LIVE_WORKITEM_CNT
  • Columns to include: WI_ID, STRING_KEY, STRING_VAL
  • Filter by: PROJECT_AREA_NAME and WI_TYPE
图 2. 字符串的高级数据集
用来为字符串创建数据集的编辑窗口
用来为字符串创建数据集的编辑窗口

时间戳的高级数据集

为了给时间戳属性类型创建高级数据集,使用下列值,这些值也示于图 3:

  • Table: LIVE_WORKITEM_CNT
  • Columns to include: WI_ID, TIMESTAMP_KEY, TIMESTAMP_VAL
  • Filter by: PROJECT_AREA_NAME and WI_TYPE
图 3. 时间戳的高级数据集
用来为时间戳创建数据集的编辑窗口
用来为时间戳创建数据集的编辑窗口

使用 JavaScript 来捕获和存储自定义属性数据

在为字符串和时间戳自定义属性创建高级数据集后,使用 JavaScript 来存储数据到全局变量中的。在每个数据集里,取每个自定义属性值,并将其以数组的形式存储在一个相应的全局变量里。

为字符串高级数据集获取自定义属性数据

  1. 选择我们所创建的字符串高级数据集,并选择如图 4 中的 Script 选项卡。
  2. onFetch 脚本段落添加以下 JavaScript 代码:
    Strings[row["WI_ID"] + row["STRING_KEY"]] = row["STRING_VAL"];
图 4. 用于字符串高级数据集的 JavaScript
为字符串的 onFetch 创建脚本
为字符串的 onFetch 创建脚本

为时间戳高级数据集获取自定义属性数据

  1. 选择我们创建的时间戳高级数据集,并访问 Script 选项卡,如图 5 所示。
  2. onFetch 脚本段落添加以下 JavaScript 代码:
    Timestamps[row["WI_ID"] + row["TIMESTAMP_KEY"]] = row["TIMESTAMP_VAL"];
图 5. 用于时间戳高级数据集的 JavaScript
用于时间戳 onFetch 的脚本
用于时间戳 onFetch 的脚本

用于捕获和存储数据的 JavaScript 的结果

当高级数据集中的每一行被取出时,每个自定义属性数据类型的数据被存储在全局一维数组中。例如,存储在表 1 中的下列信息,以 WI_ID 和 STRING_KEY 作为索引值的组合形式被存储在一维数组中。

清单 4. 一个全局一维数组的示例
	Strings [1Phase] = "Development"
	Strings [1Release] = "2.1"
	Strings [1Type] = "Code Error"
	Strings [2Phase] = "Testing"
	Strings [2Release] = "2.5"
	Strings [2Type] = "Bug"

将数据绑定到报表中来运行 JavaScript

为确保您所创建的 JavaScript 代码在报表显示时运行,您需要将一个动态文本元素绑定到该报表本身及其高级数据集上。

  1. 创建一个动态文本元素,并将其添加到报表中。
  2. 选择动态文本元素,然后选择 Binding 选项卡来设置一些数据绑定的参数。
  3. Binding选项卡,选择字符串数据集,以确保字符串高级数据集在报表显示时会运行,如图 6 所示。
图 6. 给报表绑定动态文本
动态文本元素的绑定选项
动态文本元素的绑定选项
  1. 隐藏动态文本元素,以便使之不在报表中显示。在选中 Dynamic Text 框后,访问 Visibility 设置,然后选择 Hide Element选项,如图 7。
图 7. 隐藏动态文本框
动态文本元素的可见性设置
动态文本元素的可见性设置

显示的自定义属性的值

我们已经创建了两个高级数据集用来存储的自定义属性的值。接下来,我们创建主数据集来以有组织的方式显示自定义属性。第一步是创建引用全局数组来显示相应自定义属性的计算列:

  1. 创建名为 Main 的最终高级数据集。
  2. 选择适当的列值。选择 WI_ID 的值,因为以下的步骤需要用到它。不要选择字符串或时间戳的 KEY 和 VAL 属性。
  3. 在 Main 高级数据集里创建一个计算列(Computed Column)。计算列是用来显示存储在全局数组的自定义属性的值。
  4. 在计算列,添加以下表达式来引用全局数组和必要的属性值:
    Strings[row["WI_ID"] + "<id of custom attribute>"];

在这个例子中,三个自定义属性有三个计算列:Phase、Release 及 Type,如图 8 所示。

图 8. 字符串的计算列
设定计算列的属性
设定计算列的属性

注意:
由于数组与报表布局绑定在一起,当您预览数据集中的结果时,这些字段显示空白。不过当您实际运行报表时,实际的值将会正确地显示。

在完成数据集之后,如图 8 所示,显示来自于 BIRT 报表的主数据集中的字段。上传您的报表到 Rational Team Concert 并运行报表。自定义属性将以有序的方式显示,如图 9 所示。

图 9. 完整的数据集
在报表 Data Explorer 中的数据集清单
在报表 Data Explorer 中的数据集清单
图 10. 最终的报表显示情况
最终的报表布局及显示情况
最终的报表布局及显示情况

总结

这篇文章解释了如何捕获自定义属性的值并以有序的方式显示它们。通过使用这种方法,您可以轻松地基于您添加到 Rational Team Concert 的自定义属性创建报表。

致谢

本文作者要感谢自己队友 Amin Eskooch 和 Karen Steele 的支持和指导。作者同时也要感谢众多提供建议和支持 jazz.net 及 jazz.net 论坛的 Rational Jazz 社区成员。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational
ArticleID=972620
ArticleTitle=使用 BIRT 和 Rational Team Concert 创建定制报表
publish-date=05292014