题
我是javascript和xpages的新手。我正在升级到Xpages的旧注释应用程序。在我的XPage中,我有一个字段,保存按钮和错误消息控制。该字段用于保存稍后使用的用户键入的NSF路径/名称的值(例如://sas/address.nsf)。如果存在该路径/数据库,我如何验证?以前的Lotusscript是这样的(它使用2个字段,一个来获取服务器路径,另一个用于获取DB路径。但对于当前XPage,要求是仅使用一个字段):
svr$= source.FieldGetText("ServerPath")
dbsvr$= source.FieldGetText("DBPath")
Dim db1 As New NotesDatabase(svr$ , dbsvr$)
If Not db1.IsOpen Then
Messagebox "Cannot find the database."
Call source.GotoField("DBPath")
continue = False
Exit Sub
End If
.
在XPage中的字段中,我添加了一个验证表达验证程序。在表达式属性中,我计算以下SSJS:
var dbdir:NotesDbDirectory = session.getDbDirectory(null);
var db:NotesDatabase = dbdir.openDatabase(document1.getItemValue("dbpath"));
return db.isOpen();
.
在验证器的消息属性中,我放出“找不到数据库”。
我继续的错误是:
- 表达无效。
- 表达式没有返回布尔值。
以解决这个问题的任何方式?是错误使用验证器吗?我已经在其他服务器上使用本地数据库和数据库进行了测试。没有似乎工作。所有这些数据库我都尝试过他们访问权限。
解决方案
您应该使用sessionassigner以将数据库打开作为Xpage的签名者 - 而不是作为匿名(如果您未登录)。此外,考虑在DBDIR.Opendatabase()周围添加尝试/捕获,以捕获使用无效路径打开数据库的错误。
此外,请注意,ValidateExpression Validator必须返回Boolean True或False。在您的情况下,DBDIR.Opendatabase()如果无法打开数据库,则返回null - 这意味着db.isopen()将无法工作,因为它无法在空对象上运行。您可以考虑使用CustomValidator validator,该验证器必须返回错误消息(而不是Boolean True或False)。
我希望这可以帮助您完成验证。
其他提示
使用try / catch块来尝试打开数据库。如果一切正常,请在TRY块中返回TRUE。Catch Block将返回False,将处理大部分可能的失败:错误的服务器,断开连接,无效路径,无访问等。
try {
// open database here and touch some property, doc count, for example
return true;
} catch (e) {
return false; // failed to open database
}