把代码做一个小小的修改,可以解决楼上的问题:
我将代码进行了重组,给每个人只发一封邮件,邮件中列出所有的Bug单,并且只能看到自己的Bug单,代码如下:
'--------------------------------------------------------------------------------------------
Const booOp_and = 1 ' and
Const comOp_eq = 1 ' =
Const comOp_le = 4 ' <=
Const SUCCESS = 1 ' 存在下一个记录
' 以下常量根据实用应用环境设置
Const inte_date = -2 ' 超过天数
Const worn_sta = "Assigned" ' 预警状态
Const login_name = "admin" ' 管理员登录名
Const password = ""
Const db_name = "EnPdb" ' 要访问的数据库名
Dim arOwner() '用户记录数组
set sessionObj = CreateObject("CLEARQUEST.SESSION")
'访问客户数据库
sessionObj.UserLogon login_name, password, db_name, AD_PRIVATE_SESSION, ""
' 建立类型记录查询
'Set querydef = sessionObj.BuildQuery("defect")
'querydef.SQL "select owner,count(id) from defect where state=16777633 group by owner having count(id)>0"
'获取查询结果集
sqlString = "select users.login_name,count(defect.id) from defect inner join users on defect.owner = users.dbid where defect.state = 16777633 group by users.login_name having count(defect.id)>0"
set resultSetObj = sessionObj.BuildSQLQuery(sqlString)
'Set resultSetObj = sessionObj.BuildResultSet(querydef)
resultSetObj.EnableRecordCount
resultSetObj.Execute
'-------------------------------------------------------------------------------------------
'MsgBox resultSetObj.RecordCount
'-------------------------------------------------------------------------------------------
'获取用户列表
ReDim arOwner(resultSetObj.RecordCount)
Dim i,count
i=1
count = resultSetObj.RecordCount
Do While resultSetObj.MoveNext = SUCCESS
arOwner(i) = resultSetObj.GetColumnValue(1)
'MsgBox arOwner(i)
i=i+1
loop
'-------------------------------------------------------------------------------------------
'创建邮件对象
Set OleMailMsg = CreateObject("PAINET.MAILMSG")
'-------------------------------------------------------------------------------------------
'针对每个用户,取出其Defect记录
i=1
Do While i<=count
' 设置过滤条件
Set querydef = sessionObj.BuildQuery("defect")
querydef.BuildField("ID")
querydef.BuildField("Owner.email")
Set operator = querydef.BuildFilterOperator(booOp_and)
operator.BuildFilter "State", comOp_eq, worn_sta
operator.BuildFilter "Owner", comOp_eq, arOwner(i)
operator.BuildFilter "history.new_state", comOp_eq, worn_sta
'operator.BuildFilter "history.action_timestamp", comOp_le, CStr(DateAdd("d",inte_date, Now))
'获取查询结果集
Set resultSetObj = sessionObj.BuildResultSet(querydef)
resultSetObj.EnableRecordCount
resultSetObj.Execute
'-------------------------------------------------------------------------------------------
'开始取查询数据
Dim emailAddr,emailBody
If resultSetObj.MoveNext = SUCCESS Then
'首先取出用户邮件地址及本条记录的defect编号
'Convert.IsDBNull(dr("b02"))
emailAddr = resultSetObj.GetColumnValue(2)
If (emailAddr="") Then '用户邮件信息未录入
emailAddr = "
liuweifeng@yulong.com"
emailBody = "用户"&arOwner(i)&"的邮箱信息为空,请告知他目前被指派了编号如下的Defect:"&Chr(10)&resultSetObj.GetColumnValue(1)
Else '如果用户邮箱为空,则将信息转发到管理员处
emailAddr = resultSetObj.GetColumnValue(2)
emailBody = "以下编号的Defect指派给您了,编号依次为:"&Chr(10)&resultSetObj.GetColumnValue(1)
End If
End If
'取出该用户的剩下的defect编号,并发送邮件
Do While resultSetObj.MoveNext = SUCCESS
emailBody = emailBody&Chr(10)&resultSetObj.GetColumnValue(1)
Loop
'开始发送邮件
'Dim myDateTime
'myDateTime = Now()
emailBody = emailBody & Chr(10) & "以上Defect已经被指派超过" & CStr(Abs(inte_date)) & "天,请立即处理,谢谢!"
OleMailMsg.AddTo emailAddr
'OleMailMsg.AddTo "
luzhibing@yulong.com"
OleMailMsg.SetFrom "
cqadmin@yulong.com"
OleMailMsg.SetSubject "CQ友情提示"&"-"&year(date())&Right("00"&month(Date()),2)&Right("00"&Day(Date()),2)'Format(Date,"yyyymmdd") '考虑标题加上日期
OleMailMsg.SetBody emailBody
OleMailMsg.Deliver
OleMailMsg.ClearAll
'-------------------------------------------------------------------------------------------
'下一个用户
i=i+1
loop
'-------------------------------------------------------------------------------------------