2012-05-22 3 views
0

Я новичок в javascript и xpages здесь. Я обновляю приложение старых заметок на xpages. На моей xpage у меня есть поле, кнопка сохранения и управление сообщениями об ошибках. Поле используется для сохранения значения пути/имени nsf, которое пользователь вводил для последующего использования (например: //SAS/address.nsf). Как проверить, существует ли этот путь/база данных? Предыдущий LotusScript, как это (. Он использует 2 поля, один, чтобы получить путь к серверу, а другой, чтобы получить путь дб, но и для текущей XPage, требование заключается в использовании одно поле только):xpages проверить наличие базы данных

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, я добавил validateExpression validator. В собственности выражения, я вычислить следующую SSJS:

var dbdir:NotesDbDirectory = session.getDbDirectory(null); 
var db:NotesDatabase = dbdir.openDatabase(document1.getItemValue("dbpath")); 
return db.isOpen(); 

В свойстве сообщения валидатора, я ставлю «Не удается найти базу данных».

Ошибка Я постоянно получаю это:

  • Выражение недействительно.
  • Выражение не возвращало логическое значение.

Любой способ исправить это? Это неправильное использование валидатора? Я уже тестировал локальную базу данных и базу данных на другом сервере. Кажется, что никто не работает. Все эти базы данных, которые я пробовал, у меня были права доступа к ним.

ответ

1

Возможно, вы должны использовать sessionAsSigner, чтобы открыть базу данных в качестве подписчика XPage - вместо анонимного (если вы не вошли в систему). Кроме того, рассмотрите возможность добавления try/catch вокруг вашей dbdir.OpenDatabase(), чтобы поймать ошибки при открытии базы данных с недопустимым путем.

Также обратите внимание, что валидатор validateExpression должен возвращать логическое значение true или false. В вашем случае dbdir.openDatabase() вернет null, если база данных не может быть открыта - это означает, что db.isOpen() не сможет работать, поскольку он не может работать с нулевым объектом.

Вы можете рассмотреть использование валидатора customValidator, который должен вернуть сообщение об ошибке (а не логическое значение true или false).

Надеюсь, это поможет вам завершить проверку.

0

Использовать блок try/catch для попытки открыть базу данных. Если все в порядке, просто верните true в блоке try. 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
}

Смежные вопросы