首页  >> 配置管理  >> IBM Rational ClearQuest / ClearDDTS/TestManager
使用脚本轻松导出本周纪录
作者 yunshan   查看 6209   发表时间 2007/1/29 16:02  【论坛浏览】
使用脚本轻松导出本周纪录waflzfm
waflzfm
因为CQ中没有关于本周纪录查询的const,如TODAYTOMORROWYESTODAY等,也因此给很多人带来了不少麻烦。waflzfm
既然不能在客户端中直接建立这种查询(有人提过在客户端中通过使用SQL来实现,但是这种SQL可能很复杂,并不是每个人都能掌握的),所以本人就想到了使用外部脚本来实现。waflzfm
waflzfm
思想:通过运行一个.vbs脚本,来查询本周纪录,并导出到Excel中。waflzfm
waflzfm
实现:以下是实现这一思想的脚本,把它save成一个.vbs文件,然后把其中的session.Logon部分根据自己的实际情况来做适当的更改,保存后,任何时候一运行,就能把本周(一般是星期一到当前系统时间)纪录保存到一个excel文件中,非常方便waflzfm
waflzfm
' --------------------------------------------------------waflzfm
' Script Name: Exprot_Weekly_Defects.vbswaflzfm
' Author: yunshanwaflzfm
' Create Date: 2007-1-28waflzfm
'---------------------------------------------------------waflzfm
waflzfm
' Declare the global constantwaflzfm
Public Const SUCCESS = 1waflzfm
Public Const AD_BOOL_OP_AND = 1waflzfm
Public Const AD_COMP_OP_EQ = 1waflzfm
waflzfm
Dim curDatewaflzfm
Dim curWeekwaflzfm
Dim intervalwaflzfm
Dim strDatewaflzfm
waflzfm
' Get the current date and compute the strDatewaflzfm
curWeek = DatePart("w", Now)waflzfm
interval = (curWeek + 6) Mod 7waflzfm
If interval = 0 Thenwaflzfm
interval = 7waflzfm
End Ifwaflzfm
interval = interval - 1waflzfm
strDate = DateAdd("d", -interval, Date)waflzfm
waflzfm
' The start date of this week is from monday, time initial is 00:00:00waflzfm
strDate = strDate & " 00:00:00"waflzfm
waflzfm
Dim sessionwaflzfm
Dim resultsetwaflzfm
waflzfm
' Login to the destination databasewaflzfm
Set session = CreateObject("CLEARQUEST.SESSION")waflzfm
session.UserLogon "admin", "", "cdi", AD_PRIVATE_SESSION, "cdi"waflzfm
waflzfm
' Build Query On defectwaflzfm
Set resultset = session.BuildSQLQuery("select T1.id,T1.headline,T7.name,T1.priority, " &_waflzfm
"T2.login_name,T1.submit_date from Defect T1,statedef T7,users T2 where T1.state = T7.id " &_waflzfm
"and T1.owner = T2.dbid and Submit_Date between"&_ waflzfm
" #"& strDate &"# and #"& curDate &"#")waflzfm
waflzfm
'resultset.EnableRecordCountwaflzfm
resultset.Executewaflzfm
waflzfm
Dim xlsAppwaflzfm
Dim newBookwaflzfm
Dim newSheetwaflzfm
waflzfm
' Create Excel App and set property for the new filewaflzfm
Set xlsApp = CreateObject("Excel.Application")waflzfm
set newBook = xlsApp.Workbooks.Addwaflzfm
with newBookwaflzfm
.Title = "All this weeks defect"waflzfm
.Subject = "ClearQuest"waflzfm
.Activatewaflzfm
End Withwaflzfm
waflzfm
' work with sheet1waflzfm
Set newSheet = newBook.Worksheets("Sheet1")waflzfm
newSheet.Visible = Truewaflzfm
newSheet.Name = "Weekly Defects"waflzfm
waflzfm
' set column titlewaflzfm
newSheet.Range("A1:F1").Value = Array("ID","Headline","State","Priority","Owner","Submit Date")waflzfm
newSheet.Range("A1:F1").Font.Bold = Truewaflzfm
waflzfm
' set values for destination cellswaflzfm
Dim iwaflzfm
i = 2waflzfm
Do While resultset.MoveNext = SUCCESSwaflzfm
newSheet.Cells(i,1).Value = resultset.GetColumnValue(1)waflzfm
newSheet.Cells(i,2).Value = resultset.GetColumnValue(2)waflzfm
newSheet.Cells(i,3).Value = resultset.GetColumnValue(3)waflzfm
newSheet.Cells(i,4).Value = resultset.GetColumnValue(4)waflzfm
newSheet.Cells(i,5).Value = resultset.GetColumnValue(5)waflzfm
newSheet.Cells(i,6).Value = resultset.GetColumnValue(6)waflzfm
i = i + 1waflzfm
Loopwaflzfm
waflzfm
' Save changes to the excelwaflzfm
newBook.SaveAs("C:\WeeklyDefects.xls")waflzfm
waflzfm
' release the objectswaflzfm
Set newSheet = Nothingwaflzfm
newBook.Closewaflzfm
Set newBook = Nothingwaflzfm
xlsApp.Quitwaflzfm
Set xlsApp = Nothingwaflzfm
Set resultset = Nothingwaflzfm
Set session = Nothingwaflzfm
MsgBox "Finish exporting records!"waflzfm
waflzfm
' 大家可以在这个脚本的基础上作适当的改动,以扩展它的功能。waflzfm
waflzfm
'==================================================================waflzfm
' 对以上脚本的升级waflzfm
' Author: yunshanwaflzfm
' Description: 改动部分用黑体标出waflzfm
'==================================================================waflzfm
Public Const SUCCESS = 1waflzfm
Public Const AD_BOOL_OP_AND = 1waflzfm
Public Const AD_COMP_OP_EQ = 1waflzfm
Public Const AD_COMP_OP_BETWEEN = 9waflzfm
waflzfm
Dim curWeekwaflzfm
Dim intervalwaflzfm
Dim strDatewaflzfm
waflzfm
' Get the current date and compute the strDatewaflzfm
curWeek = DatePart("w", Now)waflzfm
interval = (curWeek + 6) Mod 7waflzfm
If interval = 0 Thenwaflzfm
interval = 7waflzfm
End Ifwaflzfm
interval = interval - 1waflzfm
strDate = DateAdd("d", -interval, Date)waflzfm
strDate = strDate & " 00:00:00"waflzfm
waflzfm
Dim sessionwaflzfm
Dim qryObjwaflzfm
Dim filterObjwaflzfm
Dim resultsetwaflzfm
Dim dateRangewaflzfm
ReDim dateRange(1)waflzfm
dateRange(0) = strDatewaflzfm
' 修正了一个小错误,把dateRange(1) = Now 改成了dateRange(1) = Cstr(Now),否则运行会出错。waflzfm
dateRange(1) = Cstr(Now)waflzfm
waflzfm
waflzfm
' Login to the destination databasewaflzfm
Set session = CreateObject("CLEARQUEST.SESSION")waflzfm
session.UserLogon "admin", "", "productDB", AD_PRIVATE_SESSION, "masterDB"waflzfm
waflzfm
' Build Query On defectwaflzfm
Set qryObj = session.BuildQuery("defect")waflzfm
qryObj.BuildField("id")waflzfm
qryObj.BuildField("headline")waflzfm
qryObj.BuildField("State")waflzfm
qryObj.BuildField("priority")waflzfm
qryObj.BuildField("owner")waflzfm
qryObj.BuildField("Submit_Date")waflzfm
Set node = qryObj.BuildFilterOperator(AD_BOOL_OP_AND)waflzfm
node.BuildFilter "Submit_Date",AD_COMP_OP_BETWEEN, dateRangewaflzfm
waflzfm
Set resultset = session.BuildResultSet(qryObj)
waflzfm
waflzfm
' resultset.EnableRecordCountwaflzfm
resultset.Executewaflzfm
waflzfm
Dim xlsAppwaflzfm
Dim newBookwaflzfm
Dim newSheetwaflzfm
waflzfm
' Create Excel App and set property for the new filewaflzfm
Set xlsApp = CreateObject("Excel.Application")waflzfm
set newBook = xlsApp.Workbooks.Addwaflzfm
with newBookwaflzfm
.Title = "All this weeks defect"waflzfm
.Subject = "ClearQuest"waflzfm
.Activatewaflzfm
End Withwaflzfm
waflzfm
' work with sheet1waflzfm
Set newSheet = newBook.Worksheets("Sheet1")waflzfm
newSheet.Visible = Truewaflzfm
newSheet.Name = "Weekly Defects"waflzfm
waflzfm
' set column titlewaflzfm
With newSheet.Range("A1:F1")waflzfm
.Value = Array("ID","Headline","State","Priority","Owner","Submit Date")waflzfm
.Font.Bold = Truewaflzfm
.Font.Color = vbWhitewaflzfm
.Interior.ColorIndex = 1waflzfm
End With
waflzfm
waflzfm
' set values for destination cellswaflzfm
Dim iwaflzfm
i = 2waflzfm
Do While resultset.MoveNext = SUCCESSwaflzfm
newSheet.Cells(i,1).Value = resultset.GetColumnValue(1)waflzfm
newSheet.Cells(i,2).Value = resultset.GetColumnValue(2)waflzfm
newSheet.Cells(i,3).Value = resultset.GetColumnValue(3)waflzfm
newSheet.Cells(i,4).Value = resultset.GetColumnValue(4)waflzfm
newSheet.Cells(i,5).Value = resultset.GetColumnValue(5)waflzfm
newSheet.Cells(i,6).Value = resultset.GetColumnValue(6)waflzfm
i = i + 1waflzfm
Loopwaflzfm
waflzfm
newSheet.Columns("A:F").AutoFitwaflzfm
newBook.SaveAs("C:\WeeklyDefects.xls")waflzfm
waflzfm
newBook.Closewaflzfm
Set newBook = Nothingwaflzfm
xlsApp.Quitwaflzfm
Set xlsApp = Nothingwaflzfm
Set resultset = Nothingwaflzfm
Set session = Nothingwaflzfm
waflzfm
[ 本帖最后由 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   >>  >|