在内部中断,停止或超时LotusScript代理

时间:2015-12-16 14:01:39

标签: lotus-domino lotusscript

我想在内部超时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

2 个答案:

答案 0 :(得分:2)

内部理解为没有外部代理,流程等。

  1. 如果没有操作被阻止,您可以实例化计时器,定期检查您的时间是否已完成,并结束您的代码。
  2. 如果您的代码在操作中被阻止(如您的示例中所示),则无法执行任何操作:无前置任务,无中断。
  3. 使用ole在Excel中编写时遇到了同样的问题。当一个对话框在Excel中打开时,任务(由http运行)只是永远停止。最长时间执行甚至不起作用。

答案 1 :(得分:2)

根据@ Emmanuel的回答,我不相信你可以做任何事情来设置暂停操作的超时。但是,由于您了解该问题,因此可以使用NotesNoteCollection类解决该问题。即,像这样:

dim c as NotesNoteCollection
set c = db.CreateNoteCollection(false)
c.selectProfiles = true
c.BuildCollection

然后使用id=c.getFirstNoteIdid=c.getNextNoteId(id)以类似于循环常规NotesDocumentCollection的模式循环遍历集合,使用doc =db.GetDocumentByID(id)检索每个配置文件并使用{检查{ {1}}确保它不是删除存根(这似乎是你问题的根源),然后通过调用doc.isValid检查它是否是calendarprofile并检查值的第0个元素中的值阵列。它是一个字符串,包含前缀“$ profile”后跟下划线,数字(三位数,总是?),然后是配置文件doc名称和另一个下划线。 (在某些配置文件中,$ Name还包含一个用户名,IIRC出现在第二个下划线之后,但是Calendarprofile doc不是这种情况。使用NotesPeek检查邮件数据库以查看格式。)然后,一旦您确认文档存在且不是存根,请继续使用doc.getItemValue("$Name")以确保您正在处理该注释的缓存版本。

您可能还想调查代码挂起的原因。我以前没遇到这样的情况,但我想知道数据库中是否有过多的删除存根,而你的代码正在触发对它们进行某种清理操作需要很长时间。这只是一个猜测,但这种行为是不正常的,即使我相信你可以解决它,这可能不是真的。这只是猜测。构建和迭代NotesNoteCollection甚至可能会触发我所知道的相同的不良行为。