2015-04-01 67 views
1

我正在從xpage的PostSave事件(取自IBM Wiki模板)調用lotusscript代理。我想添加一些錯誤陷阱,所以如果發生了什麼事情(我有「附件丟失......運行壓縮以解決此問題」錯誤),應用程序至少會警告用戶出現問題。Xpages:從SSJS調用的LotusScript代理中的錯誤陷阱

我是否需要在代理中放置錯誤捕獲代碼?它是否屬於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> 

代理由於一些轉換錯誤和其他情況下(persitence相關的,偉大的工作,但在一些文件,我們確實有缺失的附件錯誤,最大概)。但我有我如何捕獲如果在Lotus代理腳本發生錯誤...

+0

我希望能夠重定向到一般錯誤xpage,在URL中傳遞一些錯誤代碼,但是如何重定向到Lotus Script代理中的error.xsp頁面? ?這將是一個很好的解決方案! – 2015-04-01 17:50:32

回答

2

代理對調用環境具有ZERO可見性,與DocumentContext不兼容。 因此,您需要將任何狀態寫回到文檔中,並檢查XPage中的值。 如果您想要非常謹慎,請將狀態設置爲「AgentFailed」,並讓代理用「成功」或更具體的錯誤更新它。通過這種方式,您可以在代理程序無法回寫到文檔中的情況下捕獲錯誤。

當您處理它時:通過取消代理運行時的啓動來改善應用程序的響應時間 - 將代碼寫入bean中。 SessionAsSigner爲您提供您可能需要的提升權限

+1

謝謝斯蒂芬。我使用了已經在IBM wiki中構建的代理,但我已經重新考慮重新構建SSJS或JAva中的功能,因爲我們不通過Notes客戶端創建內容。由於雙客戶端,IBM代碼是這樣完成的,但它會導致一些問題,如果代碼被重寫,我們不會有這些問題。 IBM代碼非常適合向用戶演示版本化概念,但對於維護和性能問題,值得肯定的是,它將值得重寫。 – 2015-04-02 14:40:15

3

推薦使用的方法沒有什麼線索:

劑。 runWithDocumentContext(doc); // < < SSJS

那麼你得到的最近更改更新文檔代理:

集DOC = ses.documentContext'< < LS

另一個選項是使用屬性DocumentQuerySource

+0

這就是我已經在做的,但我試圖捕捉代理中可能發生的錯誤。錯誤可能導致文檔無法保存,所以如果一切順利,我不能真正指望某個字段中的值是否讓我知道。我也想找出導致錯誤的代碼儘可能精確。 – 2015-04-01 17:53:46

+1

也許您可以在querysave事件(或webQuerySaveAgent)中調用代理,並且如果在代理中出現問題,請填寫文檔的一個字段(doc.error =「1」),然後在ssjs中執行代理後檢查此字段。如果字段錯誤的值爲「1」,則在取消保存操作(現在不確定爲100%)的情況下返回false。對於此技術,runWithDocumentContext很棒。 – Txemanu 2015-04-01 17:58:01