Существуют подтверждающие базы данных XPages

StackOverflow https://stackoverflow.com//questions/10695573

  •  12-12-2019
  •  | 
  •  

Вопрос

Я новичок в JavaScript и xpages здесь. Я обновляю приложение старых нот к XPages. В моем XPage у меня есть поле, кнопка сохранения и контроль сообщений об ошибках. Поле используется для сохранения значения NSF-пути / имя, которое пользователь, набранный, который будет использоваться позже (E.G: //SAS/ADDRESS.NSF). Как я могу подтвердить, если этот путь / база данных существует? Предыдущая лотерея похожа на это (он использует 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 я добавил ValidateExpression Validator. В свойстве экспрессии я вычисляю следующие SSJS:

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

В свойстве сообщения Validator я поставлю «не могу найти базу данных».

Ошибка, которую я продолжаю получать:

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

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

Это было полезно?

Решение

Вы, вероятно, должны использовать SESSASSASSIGNER, чтобы открыть базу данных в качестве подписителя XPage - вместо анонимных (если вы не вошли в систему).Кроме того, рассмотрите возможность добавления попробовать / ловить вокруг вашего dbdir.opendatabase (), чтобы уловить ошибки, открывающие базу данных с помощью неверного пути.

Кроме того, обратите внимание, что валидатор ValidateExprisEExprise должен вернуть логическое значение True или False.В вашем случае dbdir.opendatabase () вернет NULL, если база данных не может быть открыта - что означает, что db.isopen () не может работать, поскольку он не может работать на нулевом объекте.

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

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

Другие советы

Используйте блок try / catch для попытки открыть базу данных.Если все в порядке, просто верните True в From Block.CALL BOLD вернет ложь, что будет справиться с большинством возможных неудач: неправильный сервер, разбитое соединение, неверный путь, без доступа, и так далее.

try {
// open database here and touch some property, doc count, for example
return true;
} catch (e) {
return false; // failed to open database
}

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top