新邮件到达后执行的代理怎样判断新邮件的?

Lotusxyz 2004-04-25 08:52:35
情况:假设我的服务器为A,B服务器为我的上级,A与B通过邮件的方式相互传输文件。收到文件后都要向对方发出反馈。
我在我的服务器A设置了一个自动执行的代理,把接收到的公文转换到我的公文库中,并向上级B发出反馈。这个代理的执行条件为“新邮件到达后”,代理构造器为:“新近接收到的邮件文档”
现在出现如下故障:每当有新邮件到达以后,我的新邮件到达后代理就会执行,除了正常的转换以外,总会有几个已经已经执行过的文档又执行了一边,每次我的公文库多了几分老的文档,还向上级B多发了几分反馈。
现在可以排除上级服务器B的问题,B不可能向我多发,唯一的可能是我的代理有问题,我的代理把旧的邮件文档又识别成新邮件文档,又转换了一次。

我想问的重点是:
1,新邮件到达后代理是怎样区分新旧邮件的?
2,我的代码大体如下所示,错在哪里了??
Sub Initialize

Dim s As NotesSession
Dim db As NotesDatabase
Dim clt As notesdocumentcollection
Dim Maildoc As notesdocument
Dim doc As notesdocument
Dim Tdoc As notesdocument
Dim i As Integer

Set s =New notessession
Set db = s.CurrentDatabase
Set clt = db.UnprocessedDocuments
Set MailDoc=clt.getfirstdocument

While (Not MailDoc Is Nothing)
......
转换
......
Call Tdoc.save(True,True)


Set doc = New NotesDocument( db )
doc.Form = "Memo"
.........生成反馈..............

Call doc.save(True,True)
Call doc.Send( True )

'Call MailDoc.remove(True)
Set MailDoc=clt.getnextdocument(MailDoc)
Wend

End Sub
...全文
128 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
gjd111686 2004-04-27
  • 打赏
  • 举报
回复
未读标记一般是自己添加的.
ibm123 2004-04-26
  • 打赏
  • 举报
回复
如果可以删除就直接删除文档集。

..........

Wend

Call Clt.RemoveAll( True )

only4u 2004-04-26
  • 打赏
  • 举报
回复


Sub Initialize

Dim s As NotesSession
Dim db As NotesDatabase
Dim clt As notesdocumentcollection
Dim Maildoc As notesdocument
Dim doc As notesdocument
Dim Tdoc As notesdocument
Dim i As Integer

Set s =New notessession
Set db = s.CurrentDatabase
Set clt = db.UnprocessedDocuments
Set MailDoc=clt.getfirstdocument

While (Not MailDoc Is Nothing)
......
转换
......
Call Tdoc.save(True,True)


Set doc = New NotesDocument( db )
doc.Form = "Memo"
.........生成反馈..............

Call doc.Save( True, True )
Call s.UpdateProcessedDoc( doc )
Call doc.Send( True )

'Call MailDoc.remove(True)
Set MailDoc=clt.getnextdocument(MailDoc)
Wend

End Sub
Lotusxyz 2004-04-26
  • 打赏
  • 举报
回复
因为无法测试,我计划将代码改成如下形式,大家看可以吗?

Dim s As NotesSession
Dim db As NotesDatabase
Dim clt As notesdocumentcollection
Dim Maildoc As notesdocument
Dim doc As notesdocument
Dim Tdoc As notesdocument
Dim i As Integer
Dim textItem As notesItem

Set s =New notessession
Set db = s.CurrentDatabase
Set clt = db.UnprocessedDocuments
Set MailDoc=clt.getfirstdocument
Set textItem =New notesItem(MailDoc,"biaozhi","0")
While (Not MailDoc Is Nothing)
If MailDoc.biaozhi(0)="1" Then
Print "yizhuanhuan"
Else
......
转换
......
Call Tdoc.save(True,True)


Set doc = New NotesDocument( db )
doc.Form = "Memo"
.........生成反馈..............

Call doc.save(True,True)
Call doc.Send( True )

MailDoc.biaozhi(0)="1"
Call MailDoc.save(True,True)
end

Set MailDoc=clt.getnextdocument(MailDoc)
Set textItem =New notesItem(MailDoc,"biaozhi","0")
Wend

End Sub
Lotusxyz 2004-04-26
  • 打赏
  • 举报
回复
To:IBM123(Boy) 我本想用Call MailDoc.remove(True)在文档转换后删除接收到的邮件文档,这样就不可能出现重复了,但是下边要用Set MailDoc=clt.getnextdocument(MailDoc),获得下一份文档,删除后会导致错误,有什么好的办法没有??
loneprince 2004-04-26
  • 打赏
  • 举报
回复
添加已读未读标记:
1、代理在邮件到达前执行:标记新邮件未读
2、在文档queryopen中标记文档已读
ibm123 2004-04-26
  • 打赏
  • 举报
回复
UpdateProcessedDoc仅适合于创建或修改文档后执行。 出现重复执行问题,是由于在新邮件到来后,原新邮件尚没有阅读,即仍为未读所致。你简单测试一下即清楚。将原已经阅读的邮件置为未读,UnprocessedDocuments就会包含此文档。建议将已经处理的文档赋一标记。试试。但可能原来已经阅读的邮件因增加值会变为未读。暂时没有想到更好的方法。
Lotusxyz 2004-04-26
  • 打赏
  • 举报
回复
To:only4u(only4u) Call s.UpdateProcessedDoc( doc )并不适合新邮件到达后执行的代理。
tianyun 2004-04-26
  • 打赏
  • 举报
回复
请将代理改为邮件到达前.
注意的代理的选择公式.
longmarch820 2004-04-25
  • 打赏
  • 举报
回复
up,
我的代理是新邮件到达后触发,可为什么老是不触发代理执行呢?服务器重启后就可以执行,但也只能执行一次,你知道怎么回事么?

535

社区成员

发帖
与我相关
我的任务
社区描述
企业开发 Exchange Server
社区管理员
  • 消息协作社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧