Xpages:在从SSJS调用的LotusScript代理中捕获错误

Xpages:在从SSJS调用的LotusScript代理中捕获错误,xpages,xpages-ssjs,Xpages,Xpages Ssjs,我正在从xpage的PostSave事件(取自ibmwiki模板)调用lotusscript代理。我想添加一些错误捕获,这样如果发生了什么情况(我遇到了“附件丢失…运行compact修复此错误”的情况),应用程序至少会警告用户出了问题 我是否需要将错误捕获代码放入代理中?它是否属于xpages的PostSave事件 该代理被称为: <xp:this.data> <xp:dominoDocument var="pageDocument" formName="fPage"

我正在从xpage的PostSave事件(取自ibmwiki模板)调用lotusscript代理。我想添加一些错误捕获,这样如果发生了什么情况(我遇到了“附件丢失…运行compact修复此错误”的情况),应用程序至少会警告用户出了问题

我是否需要将错误捕获代码放入代理中?它是否属于xpages的PostSave事件

该代理被称为:

<xp:this.data>
    <xp:dominoDocument var="pageDocument" formName="fPage"
        action="openDocument" ignoreRequestParams="false"
        computeWithForm="onsave">
        <xp:this.postSaveDocument><![CDATA[#{javascript:var agent = database.getAgent("XPSavePage");
agent.runOnServer(pageDocument.getDocument().getNoteID());}]]>
        </xp:this.postSaveDocument>
    </xp:dominoDocument>
<xp:this.data>


代理工作得很好,但在某些文档上,由于某些转换错误和其他情况(很可能与persistence相关),我们确实存在缺少附件错误。但是我不知道如何在Lotus Script agent中发生错误时捕获…

我建议使用以下方法:


代理。运行WithDocumentContext(doc);// 我建议使用以下方法:


代理。运行WithDocumentContext(doc);// 代理对调用环境的可见性为零,缺少DocumentContext。 因此,您需要将任何状态写回到文档中,并在XPage中检查该值。 如果您想非常谨慎,可以将状态设置为“AgentFailed”,并让代理使用“success”或更具体的错误来更新它。这样,您就可以在代理无法写回文档的地方捕获错误


在运行时:通过取消代理运行时的启动来提高应用程序的响应时间——在bean中编写代码。SessionAsSigner为您提供可能需要的提升权限

代理对调用环境的可见性为零,文档上下文除外。 因此,您需要将任何状态写回到文档中,并在XPage中检查该值。 如果您想非常谨慎,可以将状态设置为“AgentFailed”,并让代理使用“success”或更具体的错误来更新它。这样,您就可以在代理无法写回文档的地方捕获错误


在运行时:通过取消代理运行时的启动来提高应用程序的响应时间——在bean中编写代码。SessionAsSigner为您提供了可能需要的提升权限

我希望能够重定向到通用错误xpage,在URL中传递一些错误代码,但是如何从Lotus脚本代理重定向到error.xsp页???这将是一个足够好的解决方案!我希望能够重定向到一个通用错误xpage,在URL中传递一些错误代码,但是如何从lotusscript代理重定向到error.xsp页面???这将是一个足够好的解决方案!这是我已经在做的,但我正在尝试捕捉代理中可能发生的错误。错误可能会导致文档无法保存,因此我无法真正依靠字段中的值来告诉我是否一切顺利。我还希望尽可能精确地指出导致错误的代码。也许您可以在querysave事件(或webQuerySaveAgent)中调用代理,如果代理出错,请填写文档的一个字段(doc.error=“1”),并在ssjs中执行代理后检查此字段。如果字段错误的值“1”在您取消此技术的保存操作(现在不确定100%)时返回false,则runWithDocumentContext非常好。这是我已经在做的,但我正在尝试捕获代理中可能发生的错误。错误可能会导致文档无法保存,因此我无法真正依靠字段中的值来告诉我是否一切顺利。我还希望尽可能精确地指出导致错误的代码。也许您可以在querysave事件(或webQuerySaveAgent)中调用代理,如果代理出错,请填写文档的一个字段(doc.error=“1”),并在ssjs中执行代理后检查此字段。如果字段错误的值“1”在您取消此技术的保存操作(现在不能100%确定)时返回false,则runWithDocumentContext非常好。谢谢Stephan。我使用代理,因为它已经在IBMWiki中构建,但我已经在重新考虑在SSJS或JAva中重建功能,因为我们不通过Notes客户端创建内容。IBM代码是这样做的,因为有双客户机,但它会导致一些问题,如果代码被重写,我们将不会遇到这些问题。IBM代码很好地向用户演示了版本概念,但对于维护和性能问题,确实值得重写它的这一部分。谢谢Stephan。我使用代理,因为它已经在IBMWiki中构建,但我已经在重新考虑在SSJS或JAva中重建功能,因为我们不通过Notes客户端创建内容。IBM代码是这样做的,因为有双客户机,但它会导致一些问题,如果代码被重写,我们将不会遇到这些问题。IBM代码很好地向用户演示了版本化概念,但对于维护和性能问题,确实值得重写它的一部分。