ClearQuest时间预警的脚本

  先说明下个人实现方式和思路,这个程序能够实现给当前处理人和关注该流程的人员发邮件,而且将发送邮件的部分专门写成一个函数。而邮件邮箱列表能够是从项目信息里获得,也能够从Group里实现。因为能够理解的缘由,我去掉了程序中的一些实际信息。
' CQ自动预警邮件脚本 ( 中国软件工程网
' ******* 建立此脚本
' 功能说明:
' 本脚本实如今版本计划发布时间快到的前两天预警,
' 自动邮件提醒当前处理人尽快处理。
' 各项目让配置管理员和项目经理知悉,并让技术管理组人员
' 知悉所有须要预警的信息 ( 中国软件工程网
' 使用说明:
' 需将本脚本保存为vbs格式设置为计划任务定时(如凌晨2点)执行,
' 要求执行脚本的机器上已经安装有CQ
' BoolOp Constants
Const booOp_and = 1 ' and
Const booOp_or = 2 'or
' CompOp Constants
Const comOp_eq = 1 ' =
Const comOp_neq = 2 ' <>
Const comOp_lt = 3 '<
Const comOp_lte = 4 '<=
Const comOp_gt = 5 '>
Const comOp_gte = 6 ' >=
' Other Constants
Const SUCCESS = 1 ' 存在下一个记录
' 如下常量根据实用应用环境设置
Const worn_sta = "已发布" ' 预警状态
Const login_name = "admin" ' 管理员登陆名
Const password = "***"
Const db_name = "****" ' 要访问的数据库名
' 即便什么都不作,也须要建立一个session,做用是取得CQ中的邮件规则
set session = CreateObject("CLEARQUEST.SESSION")
' 请确保你的账号可以访问目标数据库,下面的注释是UserLogon的函数原型
' session.UserLogon login_name, password, database_name, session_type, database_set
session.UserLogon login_name, password, db_name, AD_PRIVATE_SESSION, ""
' 创建类型记录查询
Set querydef = session.BuildQuery("版本发布")
' 若邮件内容还须要其余该记录的字段,则在这里添加
querydef.BuildField("ID")
QueryDef.BuildField("State")
querydef.BuildField("项目")
querydef.BuildField("发布版本")
querydef.BuildField("当前处理人")
Querydef.BuildField("配置管理员")
QueryDef.BuildField("计划发布日期")
QueryDef.BuildField("RecordWeblink")
NowTime= FormatDateTime(Now,vbShortDate) '如今的日期
FutTime= FormatDateTime(DateAdd("d",2, Now),vbShortDate) '与如今相比后两天日期
OldTime= FormatDateTime(DateAdd("d",-60, Now),vbShortDate) '过去两个月的日期
' 设置过滤条件
Set operator = querydef.BuildFilterOperator(booOp_and)
' 查找全部当前状态不等于"已发布"的版本发布流程
operator.BuildFilter "State", comOp_neq, worn_sta
Set Operator1=Operator.BuildFilterOperator(booOp_and)
operator1.BuildFilter "计划发布日期",comOp_gte,OldTime
operator1.BuildFilter "计划发布日期",comOp_lt,FutTime
Set resultSetObj = session.BuildResultSet(querydef)
resultSetObj.Execute
j=0
nBody=nBody & vbCrLf & "如下是版本计划发布日期的快到期版本发布流程详细列表:"
mBody=mBody & vbCrLf & "如下是已经超过版本计划发布日期的版本发布流程详细列表:"
Do While resultSetObj.MoveNext = SUCCESS
 ' 设定邮件标题
 project= resultSetObj.GetcolumnValue(3)
 Curuser= resultSetObj.GetcolumnValue(5)
 mFrom="cqadmin@********"
 PlanTimeStr=resultSetObj.GetColumnValue(7)
 PlanTime=FormatDateTime(PlanTimeStr,vbShortDate)
 n=DateDiff("d",PlanTime,NowTime)
 If n>0 Then
 mSub ="【CQ舒适提示】您是版本发布流程" & resultSetObj.GetColumnValue(1) & "的当前处理人,该版本已经超过计划发布日期" & n & "天,请尽快处理。"
 Else
 mSub ="【CQ舒适提示】您是版本发布流程" & resultSetObj.GetColumnValue(1) & "的当前处理人,该版本还有" & abs(n) & "天就到计划发布日期,请尽快处理。"
 End If  CMName= GetProjFieldValue(Session,Project,"配置管理员")  PMName= GetProjFieldValue(Session,Project,"项目经理")  UserStr=CMName & ";" & PMName  mTo=GetUserMailStr(Session,Curuser,";")  mCcStr=GetUserMailStr(Session,UserStr,";")  mCc=Split(mCcStr,";")  sBody="该版本详细信息为以下:"  sBody=sBody & vbCrLf & "版本ID为:" & resultSetObj.GetColumnValue(1)  sBody=sBody & vbCrLf & "状态为:" & resultSetObj.GetcolumnValue(2)  sBody=sBody & vbCrLf & "项目为:" & project  sBody=sBody & vbCrLf & "发布版本为:" & resultSetObj.GetcolumnValue(4)  sBody=sBody & vbCrLf & "当前处理人为:" & resultSetObj.GetcolumnValue(5)  sBody=sBody & vbCrLf & "配置管理员为:" & resultSetObj.GetcolumnValue(6)  sBody=sBody & vbCrLf & "计划发布日期为:" & PlanTimeStr  sBody=sBody & vbCrLf & "详情请查看:" & " " & resultSetObj.GetColumnValue(8)  If n>0 Then  mBody=mBody & vbCrLf &  mBody=mBody & vbCrLf & "版本ID为:" & resultSetObj.GetColumnValue(1)  mBody=mBody & vbCrLf & "状态为:" & resultSetObj.GetcolumnValue(2)  mBody=mBody & vbCrLf & "项目为:" & project  mBody=mBody & vbCrLf & "发布版本为:" & resultSetObj.GetcolumnValue(4) & ",已经超期" & n & "天!"  mBody=mBody & vbCrLf & "当前处理人为:" & resultSetObj.GetcolumnValue(5)  mBody=mBody & vbCrLf & "配置管理员为:" & resultSetObj.GetcolumnValue(6)  mBody=mBody & vbCrLf & "计划发布日期为:" & PlanTimeStr  mBody=mBody & vbCrLf & "详情请查看:" & " " & resultSetObj.GetColumnValue(8)  mBody=mBody & vbCrLf &  nBody=nBody & vbCrLf &  nBody=nBody & vbCrLf & "版本ID为:" & resultSetObj.GetColumnValue(1)  nBody=nBody & vbCrLf & "状态为:" & resultSetObj.GetcolumnValue(2)  nBody=nBody & vbCrLf & "项目为:" & project  nBody=nBody & vbCrLf & "发布版本为:" & resultSetObj.GetcolumnValue(4) & ",还有" & Abs(n) & "天到期!"  nBody=nBody & vbCrLf & "当前处理人为:" & resultSetObj.GetcolumnValue(5)  nBody=nBody & vbCrLf & "配置管理员为:" & resultSetObj.GetcolumnValue(6)  nBody=nBody & vbCrLf & "计划发布日期为:" & PlanTimeStr  nBody=nBody & vbCrLf & "详情请查看:" & " " & resultSetObj.GetColumnValue(8)  nBody=nBody & vbCrLf &  End If  call sendmail(mFrom,mTo,mCc,"",mSub,sBody) Loop mFrom="cqadmin@********" mSub ="【CQ舒适提示】邮件内容是过去两个月内超过计划发布时间,而版本流程还未结束的版本及快到计划发布日期的版本,各版本已经通知当前处理人处理" userlist=GetUserListFromGroup(Session,"技术管理组") For i=0 to Ubound(Userlist)  If i=0 Then  UserStr=Userlist(i)  Else  UserStr=UserStr & ";" & UserList(i)  End If Next mTostr=GetUserMailStr(Session,UserStr,";") mTo=Split(mTostr,";") mBody=mBody & vbCrLf & vbCrLf & vbCrLf & vbCrLf & nBody call sendmail(mFrom,mTo,"","",mSub,mBody) ' 增长从项目名称取得项目信息里某个域的值的函数 ' Author:**** Date:2007-01-09 Function GetProjFieldValue(Session,ProjectName,FieldName)  ' 根据传入的项目名称和字段名称,取得该项目中该字段的值并返回该值  Const booOp_and = 1 ' and  Const comOp_eq = 1 ' =  Const SUCCESS = 1  Set Queryproj = Session.BuildQuery("项目")  Queryproj.BuildField(FieldName)  Set Operatorproj = queryproj.BuildFilterOperator(booOp_and)  operatorproj.BuildFilter "项目名称", comOp_eq, ProjectName  Set resultSetproj = Session.BuildResultSet(queryproj)  resultSetproj.Execute  If resultSetproj.MoveNext = SUCCESS Then  FieldValue = resultSetproj.GetColumnValue(1)  GetProjFieldValue=FieldValue  End If End Function ' 增长从一个组里取得。
相关文章
相关标签/搜索