我想在内部超时LotusScript代理。代理管理器的一个任务超时为60分钟,某些代理需要该任务。在我的情况下,代理通常运行7-10分钟,但它可能会在打开邮件日历配置文件时挂起。它只是挂起,只消耗CPU并阻止其他代理运行。
有没有办法在内部停止/中断代理,这样我就可以为该操作设置30秒的超时时间,如果没有成功则停止代理?
有问题的代码段:
Set notesDocument = notesDatabase.GetProfileDocument("calendarprofile")
问题发生后短时间内邮件服务器出错(代理服务器以外的其他服务器)
SchedMgr: Error processing calendar profile document (NoteID: NT00000902) in database XXXX/XXXX.nsf: Document has been deleted
答案 0 :(得分:2)
内部理解为没有外部代理,流程等。
使用ole在Excel中编写时遇到了同样的问题。当一个对话框在Excel中打开时,任务(由http运行)只是永远停止。最长时间执行甚至不起作用。
答案 1 :(得分:2)
根据@ Emmanuel的回答,我不相信你可以做任何事情来设置暂停操作的超时。但是,由于您了解该问题,因此可以使用NotesNoteCollection类解决该问题。即,像这样:
dim c as NotesNoteCollection
set c = db.CreateNoteCollection(false)
c.selectProfiles = true
c.BuildCollection
然后使用id=c.getFirstNoteId
和id=c.getNextNoteId(id)
以类似于循环常规NotesDocumentCollection的模式循环遍历集合,使用doc =db.GetDocumentByID(id)
检索每个配置文件并使用{检查{ {1}}确保它不是删除存根(这似乎是你问题的根源),然后通过调用doc.isValid
检查它是否是calendarprofile并检查值的第0个元素中的值阵列。它是一个字符串,包含前缀“$ profile”后跟下划线,数字(三位数,总是?),然后是配置文件doc名称和另一个下划线。 (在某些配置文件中,$ Name还包含一个用户名,IIRC出现在第二个下划线之后,但是Calendarprofile doc不是这种情况。使用NotesPeek检查邮件数据库以查看格式。)然后,一旦您确认文档存在且不是存根,请继续使用doc.getItemValue("$Name")
以确保您正在处理该注释的缓存版本。
您可能还想调查代码挂起的原因。我以前没遇到这样的情况,但我想知道数据库中是否有过多的删除存根,而你的代码正在触发对它们进行某种清理操作需要很长时间。这只是一个猜测,但这种行为是不正常的,即使我相信你可以解决它,这可能不是真的。这只是猜测。构建和迭代NotesNoteCollection甚至可能会触发我所知道的相同的不良行为。