- How can I get a list of folders available on the server?
- If I want to access a list of databases in a particular folder, can I/how do I get a handle on only these databases if I know the folder name?
You can get a list of all the folders in a particular directory of the server using the Dir$ function in LotusScript. However, this code would have to run on the server –- not from a workstation. And the server agent must run with unrestricted access. You can run a server agent from the workstation using the NotesAgent.RunOnServer method. This article shows how to do that.
Dir$ can also locate all the .nsf files in a folder. But, Notes provides another way to do that, the NotesDBDirectory class. There's no way to tell the class to restrict itself to databases in a specific folder. But, it's very fast if all you do is look at the database filepaths. You don't have to "Open" the NotesDatabase object to read the Filepath property. So you can very quickly iterate through all the databases and skip the ones that don't start with the right path. Other advantages of NotesDbDirectory are: it will work in code run from a workstation and does not require unrestricted access.
Function AllDBsInFolder(Byval strServer As String, Byval strFolder As String, Byval intFileType As Integer) As Variant On Error Goto oops Redim result(0 To 100) As NotesDatabase Dim intCount As Integer Dim dbdir As New NotesDbDirectory(strServer) Dim db As NotesDatabase If Right$(strFolder, 1) <> "" Then strFolder = strFolder & "" Set db = dbdir. GetFirstDatabase(intFileType) Do Until db Is Nothing If Left$(db.FilePath , Len(strFolder)) = strFolder Then If intCount > Ubound(result) Then Redim Preserve result(0 To intCount + 100) End If Set result(intCount) = db intCount = intCount + 1 End If Set db = dbdir.GetNextDatabase( ) Loop If intCount > 0 Then If intCount >= Ubound(result) Then Redim Preserve result(0 To intCount - 1) End If AllDBsInFolder = result End If Exit Function oops: Error Err , Error & "//AllDBsInFolder:" & Erl End Function . . . Dim matches As Variant matches = AllDBsInFolder ("Rex/Yoyodyne", "mail", DATABASE) If Not IsEmpty(matches) Then Forall db In matches ' process one database here.
Do you have comments on this Ask the Expert question and response? Let us know.
This was first published in October 2004