首页  >> 配置管理  >> IBM Rational ClearQuest / ClearDDTS/TestManager
使用脚本轻松导出本周纪录
作者 yunshan   查看 5865   发表时间 2007/1/29 16:02  【论坛浏览】
使用脚本轻松导出本周纪录

因为CQ中没有关于本周纪录查询的const,如TODAYTOMORROWYESTODAY等,也因此给很多人带来了不少麻烦。
既然不能在客户端中直接建立这种查询(有人提过在客户端中通过使用SQL来实现,但是这种SQL可能很复杂,并不是每个人都能掌握的),所以本人就想到了使用外部脚本来实现。

思想:通过运行一个.vbs脚本,来查询本周纪录,并导出到Excel中。

实现:以下是实现这一思想的脚本,把它save成一个.vbs文件,然后把其中的session.Logon部分根据自己的实际情况来做适当的更改,保存后,任何时候一运行,就能把本周(一般是星期一到当前系统时间)纪录保存到一个excel文件中,非常方便

' --------------------------------------------------------
' Script Name: Exprot_Weekly_Defects.vbs
' Author: yunshan
' Create Date: 2007-1-28
'---------------------------------------------------------

' Declare the global constant
Public Const SUCCESS = 1
Public Const AD_BOOL_OP_AND = 1
Public Const AD_COMP_OP_EQ = 1

Dim curDate
Dim curWeek
Dim interval
Dim strDate

' Get the current date and compute the strDate
curWeek = DatePart("w", Now)
interval = (curWeek + 6) Mod 7
If interval = 0 Then
interval = 7
End If
interval = interval - 1
strDate = DateAdd("d", -interval, Date)

' The start date of this week is from monday, time initial is 00:00:00
strDate = strDate & " 00:00:00"

Dim session
Dim resultset

' Login to the destination database
Set session = CreateObject("CLEARQUEST.SESSION")
session.UserLogon "admin", "", "cdi", AD_PRIVATE_SESSION, "cdi"

' Build Query On defect
Set resultset = session.BuildSQLQuery("select T1.id,T1.headline,T7.name,T1.priority, " &_
"T2.login_name,T1.submit_date from Defect T1,statedef T7,users T2 where T1.state = T7.id " &_
"and T1.owner = T2.dbid and Submit_Date between"&_
" #"& strDate &"# and #"& curDate &"#")

'resultset.EnableRecordCount
resultset.Execute

Dim xlsApp
Dim newBook
Dim newSheet

' Create Excel App and set property for the new file
Set xlsApp = CreateObject("Excel.Application")
set newBook = xlsApp.Workbooks.Add
with newBook
.Title = "All this weeks defect"
.Subject = "ClearQuest"
.Activate
End With

' work with sheet1
Set newSheet = newBook.Worksheets("Sheet1")
newSheet.Visible = True
newSheet.Name = "Weekly Defects"

' set column title
newSheet.Range("A1:F1").Value = Array("ID","Headline","State","Priority","Owner","Submit Date")
newSheet.Range("A1:F1").Font.Bold = True

' set values for destination cells
Dim i
i = 2
Do While resultset.MoveNext = SUCCESS
newSheet.Cells(i,1).Value = resultset.GetColumnValue(1)
newSheet.Cells(i,2).Value = resultset.GetColumnValue(2)
newSheet.Cells(i,3).Value = resultset.GetColumnValue(3)
newSheet.Cells(i,4).Value = resultset.GetColumnValue(4)
newSheet.Cells(i,5).Value = resultset.GetColumnValue(5)
newSheet.Cells(i,6).Value = resultset.GetColumnValue(6)
i = i + 1
Loop

' Save changes to the excel
newBook.SaveAs("C:\WeeklyDefects.xls")

' release the objects
Set newSheet = Nothing
newBook.Close
Set newBook = Nothing
xlsApp.Quit
Set xlsApp = Nothing
Set resultset = Nothing
Set session = Nothing
MsgBox "Finish exporting records!"

' 大家可以在这个脚本的基础上作适当的改动,以扩展它的功能。

'==================================================================
' 对以上脚本的升级
' Author: yunshan
' Description: 改动部分用黑体标出
'==================================================================
Public Const SUCCESS = 1
Public Const AD_BOOL_OP_AND = 1
Public Const AD_COMP_OP_EQ = 1
Public Const AD_COMP_OP_BETWEEN = 9

Dim curWeek
Dim interval
Dim strDate

' Get the current date and compute the strDate
curWeek = DatePart("w", Now)
interval = (curWeek + 6) Mod 7
If interval = 0 Then
interval = 7
End If
interval = interval - 1
strDate = DateAdd("d", -interval, Date)
strDate = strDate & " 00:00:00"

Dim session
Dim qryObj
Dim filterObj
Dim resultset
Dim dateRange
ReDim dateRange(1)
dateRange(0) = strDate
' 修正了一个小错误,把dateRange(1) = Now 改成了dateRange(1) = Cstr(Now),否则运行会出错。
dateRange(1) = Cstr(Now)


' Login to the destination database
Set session = CreateObject("CLEARQUEST.SESSION")
session.UserLogon "admin", "", "productDB", AD_PRIVATE_SESSION, "masterDB"

' Build Query On defect
Set qryObj = session.BuildQuery("defect")
qryObj.BuildField("id")
qryObj.BuildField("headline")
qryObj.BuildField("State")
qryObj.BuildField("priority")
qryObj.BuildField("owner")
qryObj.BuildField("Submit_Date")
Set node = qryObj.BuildFilterOperator(AD_BOOL_OP_AND)
node.BuildFilter "Submit_Date",AD_COMP_OP_BETWEEN, dateRange

Set resultset = session.BuildResultSet(qryObj)


' resultset.EnableRecordCount
resultset.Execute

Dim xlsApp
Dim newBook
Dim newSheet

' Create Excel App and set property for the new file
Set xlsApp = CreateObject("Excel.Application")
set newBook = xlsApp.Workbooks.Add
with newBook
.Title = "All this weeks defect"
.Subject = "ClearQuest"
.Activate
End With

' work with sheet1
Set newSheet = newBook.Worksheets("Sheet1")
newSheet.Visible = True
newSheet.Name = "Weekly Defects"

' set column title
With newSheet.Range("A1:F1")
.Value = Array("ID","Headline","State","Priority","Owner","Submit Date")
.Font.Bold = True
.Font.Color = vbWhite
.Interior.ColorIndex = 1
End With


' set values for destination cells
Dim i
i = 2
Do While resultset.MoveNext = SUCCESS
newSheet.Cells(i,1).Value = resultset.GetColumnValue(1)
newSheet.Cells(i,2).Value = resultset.GetColumnValue(2)
newSheet.Cells(i,3).Value = resultset.GetColumnValue(3)
newSheet.Cells(i,4).Value = resultset.GetColumnValue(4)
newSheet.Cells(i,5).Value = resultset.GetColumnValue(5)
newSheet.Cells(i,6).Value = resultset.GetColumnValue(6)
i = i + 1
Loop

newSheet.Columns("A:F").AutoFit
newBook.SaveAs("C:\WeeklyDefects.xls")

newBook.Close
Set newBook = Nothing
xlsApp.Quit
Set xlsApp = Nothing
Set resultset = Nothing
Set session = Nothing

[ 本帖最后由 yunshan 于 2007-10-24 18:48 编辑 ]

序号 评论者 共有评论 30   【论坛浏览】  【发表评论】 评论时间
1 polestar 好像客户端动态查询可以实现这个功能,不过支持楼主这个更方便 2007/1/29 16:20
2 yunshan 客户端中只能定义一个固定的查询,如2007-1-22到2007-1-27,但是如果到了下周,这个查询时间必须手动更改,就是因为目前CQ还没有提供适当的查询常量。 2007/1/29 16:45
3 tuohz 这个功能确实很实用,尤其是看重管理的主管,对他们很有用的,,, 2007/1/31 10:56
4 yunshan 其实还可以对这部分代码做进一步的改进,只要一运行,就把这一周的defect列表通过mail的形式发送给相关的人。
然后添加一个计划任务来定期的执行这个脚本。
2007/1/31 11:51
5 ljs53 回复 #5 yunshan 的帖子
这个如何修改才能调用现有的查询的呢
今天试验了一下
总是不成功
2007/1/31 18:16
6 yunshan 回复 #6 ljs53 的帖子
只需要修改一个地方:
session.UserLogon "admin", "", "productDB", AD_PRIVATE_SESSION, "masterDB"

其中productDB是你的user database
masterDB是你的maintance tool中的master数据库的名称
2007/1/31 19:57
7 ljs53 回复 #7 yunshan 的帖子
我不是这个意思
我的意思
如何修改可以把那些
建立好的Public Query和个人查询
可以通过这个脚本导出来
我不知道调用那些东西
目的是解决通过你说的方法解决这个问题
http://bbs.scmlife.com/thread-2657-1-1.html

[ 本帖最后由 ljs53 于 2007-1-31 04:02 编辑 ]
2007/1/31 20:01
8 ty1227 斑竹,你一楼的帖子是否有两个脚本哦! 他们都是实现一个功能的?
我的这样理解对吗?
2007/1/31 20:09
9 yunshan 回复 #9 ty1227 的帖子
是两个脚本,后面的一个是对前面的一个的升级~
2007/1/31 21:32
10 听雨屋檐人 恩!非常喜欢,这样方便多了!可以根据需求自定义格式!不错不错!yunshan为大家做了很多贡献啦!真是感谢啊!:7:: :7:: :7:: 2007/2/12 14:39
 共有评论数 30  每页显示 10
页码 1/3  |<  <<   1 2 3   >>  >|