31 1234
发新话题
打印

[原创] 使用脚本轻松导出本周纪录( 此文章被查看:5905次,被回复:30篇!! )

使用脚本轻松导出本周纪录

使用脚本轻松导出本周纪录

因为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
' <yunshan> 修正了一个小错误,把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 编辑 ]
本帖最近评分记录



© 本文为 yunshanSCMLife 共同所有,未经同意,请勿转载 ©如该文侵犯了您的版权,请联系管理员

TOP

好像客户端动态查询可以实现这个功能,不过支持楼主这个更方便



© 本文为 polestarSCMLife 共同所有,未经同意,请勿转载 ©如该文侵犯了您的版权,请联系管理员

TOP

客户端中只能定义一个固定的查询,如2007-1-22到2007-1-27,但是如果到了下周,这个查询时间必须手动更改,就是因为目前CQ还没有提供适当的查询常量。



© 本文为 yunshanSCMLife 共同所有,未经同意,请勿转载 ©如该文侵犯了您的版权,请联系管理员

TOP

这个功能确实很实用,尤其是看重管理的主管,对他们很有用的,,,

© 本文为 tuohz 所有,未经同意,请勿转载
©如该文侵犯了您的版权,请联系管理员

TOP

其实还可以对这部分代码做进一步的改进,只要一运行,就把这一周的defect列表通过mail的形式发送给相关的人。
然后添加一个计划任务来定期的执行这个脚本。

© 本文为 yunshan 所有,未经同意,请勿转载
©如该文侵犯了您的版权,请联系管理员

TOP

回复 #5 yunshan 的帖子

这个如何修改才能调用现有的查询的呢
今天试验了一下
总是不成功

© 本文为 ljs53 所有,未经同意,请勿转载
©如该文侵犯了您的版权,请联系管理员

TOP

回复 #6 ljs53 的帖子

只需要修改一个地方:
session.UserLogon "admin", "", "productDB", AD_PRIVATE_SESSION, "masterDB"

其中productDB是你的user database
masterDB是你的maintance tool中的master数据库的名称

© 本文为 yunshan 所有,未经同意,请勿转载
©如该文侵犯了您的版权,请联系管理员

TOP

回复 #7 yunshan 的帖子

我不是这个意思
我的意思
如何修改可以把那些
建立好的Public Query和个人查询
可以通过这个脚本导出来
我不知道调用那些东西
目的是解决通过你说的方法解决这个问题
http://bbs.scmlife.com/thread-2657-1-1.html

[ 本帖最后由 ljs53 于 2007-1-31 04:02 编辑 ]

© 本文为 ljs53 所有,未经同意,请勿转载
©如该文侵犯了您的版权,请联系管理员

TOP

斑竹,你一楼的帖子是否有两个脚本哦!  他们都是实现一个功能的?
我的这样理解对吗?

© 本文为 ty1227 所有,未经同意,请勿转载
©如该文侵犯了您的版权,请联系管理员

TOP

回复 #9 ty1227 的帖子

是两个脚本,后面的一个是对前面的一个的升级~

© 本文为 yunshan 所有,未经同意,请勿转载
©如该文侵犯了您的版权,请联系管理员

TOP

 31 1234
发新话题