经过yunshan指点
把脚本改成如下即可:
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 = "db" ' 要访问的数据库名
set sessionObj = CreateObject("CLEARQUEST.SESSION")
' 请确保你的帐号能够访问目标数据库,下面的注释是UserLogon的函数原型
' session.UserLogon login_name, password, database_name, session_type, database_set
sessionObj.UserLogon login_name, password, db_name, AD_PRIVATE_SESSION, ""
' 建立类型记录查询
Set querydef = sessionObj.BuildQuery("defect")
' 若邮件内容还需要其他该记录的字段,则在这里添加
querydef.BuildField("ID")
querydef.BuildField("Owner.email")
' 设置过滤条件
Set operator = querydef.BuildFilterOperator(booOp_and)
' 当前状态必须是Assigned且历史记录中新状态也为Assigned,
' 用这条记录的状态转换时间(action_timestamp)对比当前时
' 间,过滤出超过两天(包含两天)的处理人邮件
operator.BuildFilter "State", comOp_eq, worn_sta
operator.BuildFilter "history.new_state", comOp_eq, worn_sta
' 注意,最后一个参数必须是字符串,不能直接用日期否则sql语句解析无效
operator.BuildFilter "history.action_timestamp", comOp_le, CStr(DateAdd("d",inte_date, Now))
Set resultSetObj = sessionObj.BuildResultSet(querydef)
resultSetObj.Execute
' 注意,判断是否有记录时不能用AD_SUCCESS,因为这是独立运行的脚本,对常量不能正确识别
Do While resultSetObj.MoveNext = SUCCESS
Set OleMailMsg = CreateObject("PAINET.MAILMSG")
' 添加邮件地址
OleMailMsg.AddTo resultSetObj.GetColumnValue(2)
' 设定邮件标题
OleMailMsg.SetSubject "CQ有情提示"
' 设定邮件内容
OleMailMsg.SetBody "ID为" _
& resultSetObj.GetColumnValue(1) _
& "的故障已经分配给您超过" _
& CStr(Abs(inte_date)) _
& "天,请立即处理,谢谢!"
' 发送邮件
OleMailMsg.Deliver
Set OleMailMsg = Nothing
Loop