I have an agent that runs other agents (let's call these 'sub-agents' for my purpose) .Each time the agent run, it logs it's actions, whether it ran successfully or generated an error. What I want now is to log also if the sub-agents would successfully run or not (using NotesAgent.Run/RunOnServer). The documentation says that this method returns 0 if the sub-agent run successfully. But when I force an error to a subagent, the Run method still returns 0. Is there a way that I can make it return other values when an error occurs? Or is there another way that I can log the sub-agents event to the main agent's database. Note that the sub-agents runs on other databases. Thanks a lot! :D
3 回答
这可能是将代理链接在一起的一个很好的指南。
可能是代理正在异步运行。当您启动代理时,它会成功启动并返回 0。您可以通过单步执行代码轻松确定这一点,如果代理很快启动,您就知道它们可能没有实际运行,而是刚刚启动。
如果是这种情况,您可能会受益于在您进行日志记录的笔记代理之外的中心位置。它可以是单个文本文件,尽管您必须考虑锁和并发性。或者,您可以将消息通过电子邮件发送到具有公共“ID”的另一个 Notes 数据库,这样您就可以将单个代理运行会话组合在一起。除了 Notes 代理之外,还有许多其他方法可以做到这一点。
@giulio 链接到的文章概述了一种在“链式”代理之间有效传递数据的好方法。
@Jairo 可能面临的文章中示例的一个问题是,其 noteid 被传递给子代理的文档(我们称其为“代理”文档)存储在数据库中以发起代理调用。如果子代理在同一个数据库中,这很好,但是原始描述指定子代理有时在不同的数据库中。这意味着如果您想从子代理中检索和更新代理,您首先需要将句柄返回给调用数据库。
现在在某些情况下,子代理可能不在乎从哪里调用它,但仍想将一些结果写入代理。
因此,一个好的方法是将代理存储在您知道将始终可用的地方。例如,当从 Notes 客户端上的调用链接代理时,您可以将代理文档存储在本地“bookmarks.nsf”中。它是一个系统数据库,并且始终可用,因此是存储文档的好地方。然后当你的子代理运行时,使用传入的“noteid”从bookmarks.nsf 中检索代理,而不用担心父代理驻留在哪里。完成后从书签数据库中删除代理文档可能是一种好习惯。