2013-08-29 22 views
2

當我們聲明一個dominoDocument作爲XPage數據源時,我們可以指定documentid programmaticaly。但是,如果指定的ID不存在,我還沒有找到陷阱錯誤的方法。我收到錯誤500 /無法在日誌上打開文檔錯誤。XPages Domino文檔數據源和documentid:如何捕獲錯誤?

我會exxt得到一個空的「document1」或東西,但能夠很好地捕捉錯誤。

<xp:this.data> 
<xp:dominoDocument var="document1" action="openDocument" documentId="some noteId here" formName="Document" ignoreRequestParams="true"> 
<xp:this.databaseName>...</xp:this.databaseName> 
</xp:dominoDocument> 
</xp:this.data> 

任何提示?

感謝

+0

只是一個想法,你可以嘗試使用queryOpenDocument來檢查文檔是否存在,並可能計算documentId屬性的另一個值 –

回答

4

你可以把錯誤代碼中的處理計算documentid。

<xp:this.documentId><![CDATA[#{javascript: 
    var id = "your calculated id"; 
    try { 
     database.getDocumentByUNID(id); 
    } catch(e) { 
     context.redirectToPage("pageError", true); 
    } 
    return id}]]> 
</xp:this.documentId> 

就像上面的例子,你可以打開例如一個錯誤頁面。

+0

感謝您的提示,但我想這使得2個NSF/NIF調用,然後它似乎是一個性能殺手,如果我它在我所有的自定義控件上:( –

+0

我不知道它是否真的是一個性能殺手,因爲兩個nsf調用在服務器上彼此靠近執行,並且可能會使用一些內部緩存。 –

+2

'getDocumentByUNID'非常快。 ..過多的索引訪問通常是導致大多數Domino應用程序變慢的原因,但如果使用內存服務,如果ID無效,'getDocumentByUNID'會引發錯誤,因此不必檢查'null',而必須將其包裝一個'try'並將'redirectToPage'移動到相應的'catch'。 –