Как проверить, существет ли база?

  • Автор темы Shandrik
  • Дата начала
S

Shandrik

Коллеги, как можно проверить, имеется ли по указанному пути на указанном сервере?

Как отличить отсутствие базы от отсутствия доступа к ней, получив ndb.isOpen=false после
set ndb=new NotesDataBase(server,FilePath)?

Или можно по другому как-то определить?
 

savl

Lotus Team
28.10.2011
2 625
314
BIT
544
@Shandrik, а если через session.GetDatabase(server,FilePath, false)?
Вроде Nothing если файла нет
[DOUBLEPOST=1458045370,1458045179][/DOUBLEPOST]Можно попробовать еще от полученного объекта базы взять db.Title, для этого не надо "открывать" объект.
 
S

Shandrik

Можно ли быть уверенным, что если доступа нет, то гарантировано получу ошибку 4060 User <UserName> cannot open database <server!!DBPath>?
 
L

Lariel

В LotusScript Используйте класс для работы с каталогом данных на сервере, вы получите информацию о наличие всех БД даже к которым нет доступа.
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
364
В LotusScript Используйте класс для работы с каталогом данных на сервере, вы получите информацию о наличие всех БД даже к которым нет доступа.
Если я ничего не путаю, то некоторые базы могут быть не зарегистрированы в каталоге.
 

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
233
Можно ли быть уверенным, что если доступа нет, то гарантировано получу ошибку 4060 User <UserName> cannot open database <server!!DBPath>?
При таком подходе можно в логах сервера увидеть неприятные сообщения...

Через DbDirectory неудобно, т.к. приходится перебирать базы в цикле с помощью getNextDatabase.

Я бы попробовал поисследовать объект NotesDatabase при скармливании ему сервера и пути (на Title, как говорилось выше). Если нет, то, возможно, заюзал бы серверный агент.

Задача не ясна; пути решения могут быть разные.
 
S

Shandrik

Конечная задача такая - дать внешнему приложению возможность перед регистрацией юзера проверить, а нет ли уже в системе почтовой базы с таким путём\названием?
 

savl

Lotus Team
28.10.2011
2 625
314
BIT
544
@Shandrik, если такой файл уже есть регистрация пройдет без ошибок?
Внешнее приложение создает NotesRegistration сразу или через документ в какой-то базе?
 
S

Shandrik

Нет, внешнее приложение вызывает методы моего вебсервиса.
В базе создаётся документ-тикет, куда пишется всякая служебная информация - прямая связь с учёткой в АК, задание агентам по данному юзеру, ошибки при регистрации, удалению, изменению.
 

savl

Lotus Team
28.10.2011
2 625
314
BIT
544
@Shandrik, хм,если конечная задача в том, чтобы был уникальный ПЯ для пользователя, то не надо давать эту проверку внешнему приложению.
Если обработка тикета идет в лотусе, то надо просто на уровне лотуса проверить существование файла и если такой уже есть - видоизменить его.
Добавить букву или две от имени ,сократить фамилию на пару символов, перевернуть и т.д.
Тогда у нового пользователя будет ПЯ, даже если есть дубликат.
 
S

Shandrik

За название mailfile-а берётся shortname, уникальность которого контролируется параметром NotesRegistration. ShortName - входной параметр вэбсервиса. Это прибито.
 

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
233
@Shandrik,
Видите, а мы думали, что надо с клиентской машины проверить. Всё-таки полезно начинать сразу с задачи.
Веб-сервис для данной задачи идеален. Если агенто-вебсрвис подписан сервером или спецучёткой, то он имеет доступ ко всем базам, потому подключаетесь базе и всё. Если базы не будет, то не подключитесь) вроде ошибка будет генериться, не помню.
Да, и надо сначала проверять наличие пользователя, а уже потом ПЯ. И результат возвращать, что "пользователь уже есть".
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!