使用 BIRT 和 Rational Team Concert 创建定制报表,第 1 部分: 基本报表

Tim McMackin, 软件工程师, IBM
 

简介: IBM® Rational Team Concert™ 可以帮助软件开发团队存储和组织大量的信息,包括工作计划与任务、构建与测试,还有源代码及其他的文件。本文向您演示了怎样使用 Rational Team Concert 和 Eclipse Business Information and Reporting Tools (BIRT) 来通过定制报表呈现这些信息。

关于本文

本文是三篇文章系列的第一篇。第 2 篇涉及了复杂的报表与固定的数据集。

IBM® Rational Team Concert™ 可以帮助软件开发员存储和组织大量的信息,包括工作计划与任务、构建与测试,还有源代码及其他的文件。有了这种规模的储存库,可视化就会成为一个问题。您怎样得到 Rational Team Concert 所追踪项目状态的高级别视图呢?操作板与工作项查询提供了一种查看该信息的方式,但是对于一种更加可定制的视图,Rational Team Concert 支持通用 Eclipse Business Information and Reporting Tools (BIRT) 报表直接向 Web 客户端上传报表。


图 1. 带有曲线图的报表范例
Defect Discover Rate 图

Rational Team Concert 包含了超过 50 个的预定义报表,它显示了关于工作项、构建与源控制系统的信息,您可以从 Web 客户端的 Reports 项访问它。如果这些报表并没有精确显示您所想要做的,那么您可以创建自己定制的报表。

您可以使用定制报表来指定及格式化您想要极大精确性的信息。本文显示了怎样以定制报表的形式,从 Rational Team Concert 储存库中显示特定的信息。

组织中的人会按照不同的方式来使用通用 Rational Team Concert 报表:

  • 当我需要包含来自许多不同来源的信息时,我通常会创建一个简单的报表,而不是一个工作项查询。操作板会以这种方式显示多个查询,但是报表提供了更充分的灵活性。
  • 有些区域使用报表作为会议议程的一部分。在这里的范例中,报表显示了需要讨论到的工作项(例如障碍问题或者最新的更新),而且该列表会指导会议。
  • 我们还会使用报表以追踪软件产品的长期进展。在这种情况下,报表会从与产品相联系的所有不同区域获得信息,并显示了产品怎样会向它的长期目标发展。

本系列三篇文章的第一篇。该系列随后的文章讨论了关于 Rational Team Concert 和 BIRT 报表的更高级的应用。

这篇文章包含了以下的话题 :

  • 安装并配置 Rational Team Concert 服务器和客户端与 BIRT 报表编辑工具
  • 从 Rational Team Concert 储存库获得信息到一个简单的 BIRT 报表中
  • 将报表模板上传到 Rational Team Concert 服务器上并从这些模板中创建报表

这系列的文章假设您对 Rational Team Concert Web 客户端或者 Eclipse 客户端有基本的了解,特别是在创建和查询工作项方面更是这样。本文关注工作项,因为这方面的信息可以演示项目的状态。但是,本文中所涉及到的技术,适用于储存库中许多其他类型的信息,例如测试结果、构建结果和源控制数据。

继续下去之前,您需一个 jazz.net 上面的简单账号,以及 Rational Team Concert 服务器和 Rational Team Concert 客户端完全或者试用的版本,如果您没有一个服务器或者客户端,那么指南就会描述,怎样得到服务器的试用版和客户端的免费版。

Rational Team Concert 中的报表与工作项查询非常相似,其中它们根据您所指定参数来显示关于储存库的信息。例如,如果您点击 Rational Team Concert Web 客户端的 Work Items 项,那么您就会看到一系列的预定义查询,显示关于工作项的信息。您可以点击 Create Query 按钮,以为特定值的工作项创建一个新的查询;您还要指定工作项的什么区域来显示输出。基本上,报表会按相同的方式运行:您要为报表以及输出格式化的方式指定输入的参数。创建一个报表,要比创建一个工作项查询更加耗时,但是报表提供了比工作项查询更大的灵活性:

  • Rational Team Concert 使用您在 WYSIWYG BIRT 报表编辑器中创建的报表,能够更好地控制输出的格式。不像工作项查询,报表可以显示一般结构的表格、图表、形式、标签以及图片。您还可以使用报表来编写交互性元素的代码,例如下拉菜单、可扩展和可分解的部分,以及其他 JavaScript. 驱动的事件。
  • 报表可以显示工作项查询不能显示的关于 Rational Team Concert 储存库许多不同区域的信息,包括构建、源控制、用户、团队与项目区域。您还可以交替引用一个区域到另一个区域的信息。
  • 您可以指定报表中的参数来更改运行时的值。通过这种方法,您就可以创建一个报表的多个实例,并为每一个实例设置不同的参数,因此为与相同报表设计文件的不同环境,而创建不同的报表。
  • 查询只会显示关于储存库当前状态的信息,例如特定的团队区域现在有多少个新的或者未分配的工作项。例如,报表会访问储存库中的历史信息,以及当前的信息,这样它们就可以显示特定的代码上创建了多少新工作项的信息。

如果您已经有了一个运行之中的 Rational Team Concert 服务器,那么在您处理报表时就可以安全地使用实例了,因为报表不会更改服务器上的数据。您必须从服务器管理员那里获得向服务器上传报表的权限,在本文的稍后章节中将会阐述这一点。如果您想要使用 Rational Team Concert 服务器已存在的实例,那么您可以直接跳到 安装 Rational Team Concert 客户端

安装 Rational Team Concert 服务器的试用版

如果您并没有 Rational Team Concert 服务器的实例,您可以从 jazz.net 下载一个 60 天的免费试用版 :

  1. 从 jazz.net 下载并解压缩 Rational Team Concert 服务器的企业版(查看 参考资源 部分)。

在 2.0 版本或者后续的版本中,Standard 与 Enterprise 是包含完整 BIRT 报表支持功能的唯一版本。对于 Rational Team Concert 每一个版本可以得到许多不同的文件,所以您要确定得到的版本能够满足您的需要:

版本: Enterprise
平台: Microsoft® Windows® 或者 Linux®,
结构: 对于大多数的电脑是 x86 ;对于 64 位的操作系统是 x86-64
安装形式: .zip 文件

如果您使用的是 Windows,下载的文件会有一个像“RTC-Enterprise-Server-2.0.0.2-Trial-Win32.zip”这样的名字。


图 2. 可以下载获得的 Rational Team Concert 服务器版(本文所探讨的企业版的 Windows 版本)
服务器版本的列表

  1. 在服务器文件夹中,在 Windows 上,运行 server.startup.bat 文件。在 Linux 上,使用根特权来运行 server.startup。
  2. 在 Web 浏览器上,打开 Rational Team Concert 服务器创建向导的位置:
    https://serverlocation:9443/jazz/setup

注意:
使用服务器的位置为 serverlocation。如果服务器在与 Web 浏览器相同的电脑上运行,那么您可以使用以下的 URL :https://localhost:9443/jazz/setup

  1. 作为 ADMIN 密码为 ADMIN 的身份登录。
  2. 点击 Fast Path Setup
  3. 点击 Tomcat User Database


图 3. 选择用户数据库
作为 Type 的 Tomcat 用户数据库

  1. 作为管理员填充用户信息。稍后您要添加其他的用户。
  2. 选择复选框来给予管理员账户 Contributor 与 Developer 的许可权限。
  3. 选中复选框以禁止默认的 ADMIN 账户。从这里开始,您要使用自己的账号,而不是您用以登录到服务器上的 ADMIN 账号。
  4. 点击 Next

配置服务器的下一步是创建一个存储您所做工作的项目区域。

  1. 点击 Create a Project
  2. Active Project Areas 之下,点击 Create Project Area
  3. 给新项目起一个新的名字并作出总结。
  4. 点击 部署预定义的过程模板 并等到您在 Available Process Templates 下面看到模板的一个列表为止。
  5. 选择 Simple Team Process。
  6. Members and Administrators 之下,将您自己作为项目的一个成员和管理员添加进去。
  7. 在页面的右顶部,点击 Save


现在您就可以看到一个项目区域与一些范例的工作项。您可以创建更多的工作项和团队区域,以创建一些范例数据。如果您想要得到关于这种方式处理 Rational Team Concert 的更多信息,那么您可以查看 Rational Team Concert 以获得帮助。

安装 Rational Team Concert 客户端

有了服务器,您就可以使用电脑上已存在的 Rational Team Concert 客户端,或者从 jazz.net 下载一个免费的试用版。但是,您必须使用和服务器同一版本的 Rational Team Concert 客户端,以使它可以匹配 Rational Team Concert 服务器的版本。所以如果您正在使用 Rational Team Concert 服务器的版本 2 或者最新的版本,那么您要确定使用 Rational Team Concert 客户端的版本 2 或者最新的版本。如果您正在使用服务器的版本 1 的话,那么您就使用客户端的版本 1。

同样通过服务器,可以下载得到一些不同的文件。得到 Rational Team Concert 客户端最容易的方式,是下载标有“Client for Eclipse IDE”的 .zip 文件,因为除了解压缩文件并运行 eclipse.exe 文件之外,它不需要其他的配置工作。您还可以选择,如果您想要向一个已经存在的 Eclipse 添加 Rational Team Concert 客户端的话,那么您就可以使用 Installation Manager 版本。


图 4. 可以从下载得到的 Rational Team Concert 客户端的版本
所讨论的 “Windows x86”

将 BIRT 安装到 Rational Team Concert 客户端上

BIRT 工具提供了 WYSIWYG 编辑器,以方便您处理 Rational Team Concert 客户端上的报表,并将其上传到 Rational Team Concert 服务器。( Rational Team Concert 服务器上的标准与企业版本含有 BIRT。因此,在大多数的情况下,您并不需要做任何事情就能够支持服务器上的报表)。

  1. 打开 Rational Team Concert 客户端。当您首次运行 Rational Team Concert 时,它会让您选择一个工作区,在这里就是 Rational Team Concert 存储您所创建文件的文件夹。
  2. 点击 Help > Software Updates
  3. 在 Available Software 项的下面,展开 Ganymede Update Site 并选择 Charting and Reporting


图 5. 安装 BIRT
Software Updates 与 Add-ons 窗口

  1. 点击 Install 并按照向导接受许可证协议然后安装 BIRT。
  2. 在安装 BIRT 之后,您就要重启 Rational Team Concert 客户端了。

当 Rational Team Concert 客户端重启的话,您就会为将客户端与服务器连接做好准备了 :

  1. 在 Rational Team Concert 客户端中,选择 Work Items 视图。
  2. Team Artifacts 视图中,点击 Connect to Project Area
  3. 点击 创建一个新的储存库连接 ,然后点击 Next
  4. URI 区域中,输入 Rational Team Concert 服务器的位置。如果服务器在与客户端相同的电脑上运行,那么您可以使用以下的 URL:
    https://localhost:9443/jazz
  5. 在您创建服务器时,输入您刚刚创建用户的 ID 与密码,而不是当您首次登录时所使用的管理员用户权限。
  6. 您可以选择,为服务器配置输入一个名字。


图 6. 将 Rational Team Concert 客户端与服务器连接起来
Jazz Repository Connection 对话框窗口

  1. 点击 Next
  2. 选择项目区域旁边的复选框,然后点击 Finish

给自己上传报表的权限

就算您向自己的 Rational Team Concert 服务器将自己作为管理员添加进去,默认条件下您并没有上传报表所需要的权限。为了向服务器上传报表,您就需要给分配给您的角色报表的权限,或者有一个分配这些权限给您的管理员角色。

  1. 打开 Jazz Administration 视图。
  2. Team Artifacts 视图中,右击项目区域然后点击 Open
  3. 在 Overview 项之下,Members 部分中,选择您的用户 ID,以确保分配给您至少一个处理的角色,例如 Team Member。为了向用户分配一个角色,您可以选择该用户,点击 Process Roles,并使用 Edit Process Roles 窗口以分配一个或者多个的角色。
  4. 保存过程配置。
  5. 在 Process Configuration 项之下,展开 Team Configuration 并点击 Permissions


图 7. 设置许可权
= 为 Project Area 配置选项

  1. 在角色与允许操作的表格中,选择一个分配给您的角色,例如团队成员,或者选择 Everyone 来给每一个人许可证。
  2. Permitted Actions 项的下面选择 Reports


图 8. 为报表设置许可证
许可的操作部分

  1. 保存报表区域配置。
  2. 在 Overview 页面上,在 Members 部分或者 Administrators 部分中右击您的用户名,然后点击 Open
  3. 在用户编辑器中,Repository Groups 之下,选择 JazzAdmins 和 JazzDWAdmins 旁边的复选框。
  4. Save the user profile.

(可选项)部署预定义的报表模板

默认条件下在 Rational Team Concert 服务器上并没有安装预定义的报表模板。按照这些可选择的步骤,来在服务器上部署预定义的报表模板。

  1. Team Artifacts 视图中,右击项目区域然后点击 Open
  2. 在 Links 项之下,展开 Reports,右击 Report Templates,然后点击 Deploy New Templates
  3. 在弹出窗口中,选择您的项目区域并点击 OK
  4. 在报表的列表中,点击 Select All 以部署所有的报表模板,或者选择私人的报表模板,然点点击 OK

选择可以在 Web 客户端的 Reports 项上可以得到这些报表模板。您可以点击 Create Report 然后选择一个模板以创建报表。通过这种方式,您可以将这些模板作为报表的起始点使用,或者查看报表中的范例。

您在该部分中所创建的报表,并不是十分复杂或者有趣,但是它演示了创建报表,并向服务器上传报表的过程。当您向稍后范例中的报表添加更多的信息时,您将会看到 Rational Team Concert 中报表的更多值。

这个简单的报表,模仿了 Rational Team Concert 中的一个工作项查询 ;它在储存库中列出了工作项。

创建一个数据源

正如名字所暗含的那样,数据源就是对获取数据源头的链接,例如一个服务器、数据库或者文件。在这种情况下,您创建一个数据源,该数据源从储存库中的工作项获得数据。

  1. 打开 Report Design 视图。如果您并没有 Report Design 视图,那么 BIRT 工具就不会在 Rational Team Concert 客户端的实例上安装(查看“将 BIRT 安装到 Rational Team Concert 客户端上”小节)。
  2. 点击 File > New > Project 来创建一个项目,展开 General,双击 Project,并为项目填入一个名字,例如 MyReports。您可以将 BIRT 报表放到任意类型的项目之中。
  3. Navigator 视图中,右击项目,然后点击 New > Report
  4. 给报表起一个名字,它的扩展名是 .rptdesign,例如 workitems.rptdesign,并点击 Finish
  5. Data Explorer 视图中,右击 Data Sources 然后点击 New Data Source。New Data Source 窗口会显示一系列源的列表,从这些列表中 BIRT 会获得信息。
  6. 点击 Jazz Data Source 并给新数据源起一个名字,例如 Work Items
  7. 点击 Next
  8. 选择您的 Rational Team Concert 服务器和项目区域。
  9. Enter snapshot 列表中,选择 WORKITEMS_SNAPSHOT


Rational Team Concert 在叫做 快照 的一些单独的目录中存储数据。每一个快照都存储了不同类型的数据。对于报表最常使用的快照就是 WORKITEMS_SNAPSHOT,它存储了关于工作项的信息,而 COMMON_SNAPSHOT,存储了关于用户与团队区域的信息。通过这种方式,您可能需要处理报表中的多个数据源,每一个您想要访问的快照都有一个数据源,但是所有的数据都来自于相同的 Rational Team Concert 储存库。

您将会看到,每一个快照都包含若干个表格,每一个表格都有关于数据类型的不同信息。例如,工作项快照包含了工作项本身的表格,但是它还包含了关于有效状态和工作项类型信息的表格,以及记录关于工作项更改的历史性信息。


图 9. 为数据源选择快照
Snapshot Information 窗口

  1. 点击 Finish

从数据源中创建一个数据集

数据集是 BIRT 从数据源中获得数据集的结果。在 Rational Team Concert 报表的实例中,BIRT 从 Rational Team Concert 储存库中直接获得数据,或者从所谓 数据市场 中的中介储存库来获得数据。这种差别在稍后的系列文章中将会进一步阐述。在这种背景下,数据集就像您在 Rational Team Concert 中所创建工作项查询的结果一样 (如果您对 SQL 并不熟悉,那么您还可以将数据集想做作为 SELECT 声明结果集合的数据集)。

当您在 Rational Team Concert 中创建一个查询时,您会指定三种的信息:

  • 您要获取信息的表格。

    当您在 Rational Team Concert Web 客户端中创建一项查询时,Rational Team Concert 假设您正在搜索工作项、操作板或者构建结果,这取决于您在从哪个页面中启动搜索。但是,当您在 BIRT 中创建一个数据集时,您必须指定数据集是否包含有工作项、项目区域、构建结果或者储存库的其他信息。

  • 查询的输入参数或者标准。

    例如,您可以搜索属于特定人的工作项。您还可以只得到特定迭代、特定类型或者特定状态下的工作项。

  • 查询的输出信息。

    如果您正在搜索工作项,那么您并不想要关于每一个工作项的所有信息。因此,您可以筛选信息到您所感兴趣的一些区域,例如 ID 号、语法文本或者拥有者。


图 10. 创建一个工作项查询以进行查询
Work Item Query 视图

通过这种方式,BIRT 中的数据集就像 Rational Team Concert 返回至查询的信息一样:一个作为储存库中信息子集的数据的表格。


图 11. 工作项查询的结果
显示结果的表格

Rational Team Concert 查询与 BIRT报表数据集之间的差异在于,数据集支持更大的灵活性。在 Rational Team Concert Eclipse 客户端与 Web 客户端中,您一次可以只运行一个查询。但是在一个 BIRT 报表中,您可以创建尽可能多的数据集。与 Rational Team Concert 相比,数据集还提供了更大的控制权。

接下来的步骤,向您展示了怎样创建一个简单的工作项数据集合。数据集不会比 Rational Team Concert 查询更加复杂或者游泳,但是稍后,您将会看到数据集是怎样提供比 Rational Team Concert 查询更多的控制。

  1. 在 Data Explorer 视图中,右击 Data Sets 文件夹并点击 New Data Set
  2. Data Source Selection 之下,选择您的数据源。
  3. Data Set Type 之下,选择 Jazz Data Set
  4. Data Set Name 区域中,为数据集输入一个名字,例如 Work Items


图 12. 创建一个数据集
New Data Set 窗口

  1. 点击 Next
  2. Enter Table Name 之下,选择 LIVE_WORKITEM_CNT 表格。

这个表格包含有来自储存库工作项的列表,这样当您需要关于工作项的信息时,您就会经常用到这些表格了。该列表中其他的一些表格包含了关于工作项的历史性信息;例如,NEW_WI_COUNT 表格包含了每日当中新工作项的数量。列表中一些表格包含了关于不同类型、状态、类别以及工作项可以分配优先级的信息。在表格中还有一些表格,它们的名字以 WS_ or WC_ 开始。这些表格包含了关于工作项属性的一些特定的数据,报表中通常并不需要它。

  1. Select columns 之下,选择列以显示数据集的输出。在这里的例子中,选择工作项的最重要特征 :WI_ID (工作项的 ID 号),SUMMARYCONTRIBUTOR_NAME (在这里的范例中,“贡献者”意思为“拥有者”)以及 WI_TYPE (工作项的类型,例如任务或者缺陷 )。
  2. Select parameters 之下,选择查询的输入参数。稍后您要为这些参数指定值。在这里的范例中,选择 CONTRIBUTOR_USERID 区域,这样您就可以只获得与特定拥有者相关的工作项。稍后您要向该数据集添加更多的输入或者输出列。


图 13. 选择信息以在数据集中显示
选项的列表:表格名,列,参数

  1. 点击 Finish

新数据集会出现在 Data Explorer 视图中,而且数据集编辑器也会打开,这样您就可以对数据集作出其他的更改了。稍后您将会学到关于该编辑器中选项的更多信息。现在,为输入参数输入值 :

  1. 在 Parameters 项中,选择 CONTRIBUTOR_USERID 参数然后点击 Edit
  2. Default Value 区域中,在储存库中输入一个用户 ID,例如 "jdoe" (包含引号)。


图 14. 为数据集合设置参数
Edit Parameter 窗口

  1. 将其余部分的区域保持默认值不变,并点击 OK
  2. 点击 Preview Results 项。

如果您连接到 Rational Team Concert 服务器上,该项显示了结果得到了数据集。该浏览项可以用于确定在您将数据载入到报表之前,得到的数据就是您想要的。该浏览项还可以检查储存库中的数据。例如,如果您并不确定特定表格中包含有什么信息,那么您就可以创建一个简单的数据集,例如图 15 中的范例,并快速查看 Preview Results 项之下表的内容。


图 15. 浏览数据集
Edit Data Set 视图显示 Preview Results 视图

  1. 点击 OK。一条警告信息会提醒您没有为 RESULT_SET_SIZE 参数设置一个值(BIRT 自动向每一个数据集合添加了该参数,这样如果您想要忽略该警告信息的话,您就可以删除参数了)。您并不需要为每一个参数都设置一个值,在有些情况下,您需要保持参数为空白状态,这样您就可以在运行时向数据集发送值了。
  2. 点击 OK 以跳过警告信息。
  3. Data Explorer 视图将数据集拖拉到报表编辑器中。图 16 显示了数据集作为报表上的表格显示。


图 16. 报表上的数据表
报表中数据显示为一个表

  1. 点击编辑器底部的 Preview 项(见于图 17)。像数据设置编辑器中的浏览项一样,报表编辑器中的浏览项,显示了在储存库中存在数据的情况下,报表会是什么样子的。当您完成报表的浏览之后,您可以点击 Layout 项来继续编辑报表。


图 17. 浏览报表
BIRT 编辑器的浏览项

Note:
当您按照这种方式浏览一个报表时,报表编辑器会自动保存报表。

为了通过 Rational Team Concert 来使用报表,您必须将一个拷贝上传到服务器上。

  1. 打开 Jazz Administration 视图。
  2. Team Artifacts 视图中,展开您的项目区域以及 Reports 文件夹。
  3. 右击 Report Templates 文件夹并点击 New > Report Template
  4. 给新报表起一个名字和一个标示符。名字就是将会在 Rational Team Concert 中出现的标签;标示符就是如果您想要连接报表时将会出现的独特 ID。例如,您可能将您在前面章节中所创建的工作项命名为 My work items 并将其该标示符设置为 report.myworkitems
  5. Sharing 部分中,为报表选择一个项目或者团队区域。这个选项会帮助您根据团队区域来组织报表,但是现在您可以将报表分配给项目区域。
  6. 如果您想要让其他人也能够使用报表,那么您可以选中 Sharing 复选框。
  7. Contents之下,您可以点击 Browse 并选择报表文件。
  8. 清除 Supports Data Caching 复选框的选择(该复选框,以及 Rational Team Concert 怎样处理数据获取,将会在下一篇文章中详细介绍)。


图 18. 向 Rational Team Concert 服务器上传报表
Report Template Properties 视图

  1. 点击 OK
    注意: 如果您向该窗口中输入所有的信息而 OK 按钮出于非激活状态,那么您可以点击 Sharing 部分中的 Browse 按钮,并再次选择项目或者团队区域,这样按钮就处于激活状态了。
  2. Team Artifacts 视图中的 Report Templates 文件夹中,右击您刚刚添加的报表模板然后点击 Create Report

Rational Team Concert 使用您的报表设计文件来作为一个或者多个报表的模板。稍后,您将会看到怎样指定每一个报表中的不同参数,来从单一的报表中创建多个报表。

  1. 在 Select a Folder 窗口中,指定将报表存储在什么地方并点击 OK。通常来说,您可以将准备共享的报表放到 Shared Reports 文件夹中,并将不准备共享的报表放在 My Reports 文件夹中。您可以创建文件夹,并在 Team Artifacts 视图中组织报表。
  2. 打开 Rational Team Concert Web 客户端的 Reports 项。您的新报表会出现在页面的左边。
  3. 点击报表以将其载入。


图 19. Web 客户端完成的报表
报表列在 Reports 项中

对于一个简单表格的简单格式化操作,这些步骤看起来也许都点过于复杂,但是在本系列文章的下一篇中,您将会看到报表是怎样提供更高级的灵活性。报表允许您去使用来自 Rational Team Concert 更加复杂的逻辑,例如储存库不同区域交替引用的数据,并使用运行时指定的参数来更改报表。

作者非常感谢 Rational Team Concert 开发员 James Moody 和 Rafik Jaouani 对本文所做的建议,以及他们在 jazz.net 及 jazz.net 论坛上所提供的有用信息。

原文链接:http://www.ibm.com/developerworks/cn/rational/10/creatingcustomreportswithbirtandrtc-part1/index.html

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14780873/viewspace-673161/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14780873/viewspace-673161/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值