Появилась необходимость отобрать все базы, находящиеся в определенном каталоге на сервере. Был очень уверен, что должны быть какие-то простые механизмы для решения данной задачи, однако, взявшись за нее обнаружил, что это не так.
Есть 2 пути решения: через класс NotesDbDirectory и непосредственную работу с директориями (Dir, ChDir, ...).
- Умеет перебирать последовательно все объекты баз на указанном сервере (или локальной машине), используя как корневую директорию Data.
- Большущий минус - нет возможности указать директорию, где следует делать перебор, или построить некий навигатор по директории, как был неплохо подмечено на IdeaJam.net
Работа с директориями:
- По умолчанию работы на локале, а значит, чтобы получить данные с сервера - нужен агент. Этот вариант совсем не подходил, поэтому дальше даже не смотрел и не пробовал.
В итоге был написан скрипт получения всех баз из указанной директории. Боялся, что "бегание" по всему каталогу будет очень медленным, но как оказалось все отрабатывает достаточно шустро. Каюсь, я не замерял его на скорость работы, а судил лишь визуально.
Dim DbDir As New NotesDbDirectory("<Имя сервера>")
Dim db as NotesDatabase
Dim dbFolder As String
Dim targetFolderName as String
Dim targetFolderFound As Boolean
Dim inSubFolder as Boolean
targetFolderName = "<Название целевой папки>"
Set db = DbDir.Getfirstdatabase(DATABASE) ' Тут константа под свои нужды
While Not db Is Nothing
dbFolder = StrLeft(db.Filepath, "\")
If targetFolderFound And dbFolder <> targetFolderName Then GoTo quit
If dbFolder = targetFolderName Then targetFolderFound = True
If targetFolderFound Then
'Если подпапки не нужны
inSubFolder = (StrLeft(db.Filepath, "\", , 2) <> "")
If Not inSubFolder Then Print db.Title & " | " & db.Filepath
End If
Set db = DbDir.Getnextdatabase()
Wend
quit:
Комментарии
Отправить комментарий