Das Notes Forum

Domino 9 und frühere Versionen => ND6: Administration & Userprobleme => Thema gestartet von: Stefan5 am 30.04.09 - 10:00:50

Titel: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: Stefan5 am 30.04.09 - 10:00:50
Guten Tag
Ich muss aus einer Excelliste mit Hyperlinks zu den einzelen Datenbanken ein makro schreiben, welches in der Lage ist festzustellen, ob die Datenbank noch existiert, wie könnte ich das anstellen?

Der Hyperlinks sieht etwa so aus: notes://pdmgxx/pdmgxx/bezeichnung.nsf


Private Function FollowLotusNotes(strLink As String) As Boolean

Dim objLotusNotes As Object
Dim Db As Object
Dim strHTML As String
Dim b As Byte
   

    Set objLotusNotes = CreateObject("Notes.Notessession")
    Set Db = objLotusNotes.GETDATABASE("", strLink)
 

Vielen Dank
Grüsse
Stefan5
Titel: Re: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: m3 am 30.04.09 - 10:02:58
Man könnte schaun, ob DB anschließend einen gültigen Wert beinhalted?
Bin ich da jetzt bei "Verstehen sie Spaß" oder "Programmieren 101"?
Titel: Re: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: Stefan5 am 30.04.09 - 10:59:00
Ganz und gar nicht...
Wir haben eine Hyperlink auf einer Intranetseite zu diesen einzelnen Datenbank und ich sollte prüfen, ob diese 50 und mehr Links auch wirklich funktionieren. Wird eine Datenbank gelöscht oder ist die Erkennung falsch, kommt im LotusNotes ein entsprechender Hinweis. Die Frage ist, ob es eine Möglichkeit mit VBA gibt, anhand dieser Erkennung (die als Link einwandfrei funktioniert), auch die vorhandene Datenbank zu erkennen?
Grüsse
Stefan5
Titel: Re: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: Axel am 30.04.09 - 16:03:27
Nach der Zeile

    Set Db = objLotusNotes.GETDATABASE("", strLink)

solltest du mit DB.FilePath den Dateinamen incl. Pfadangabe auslesen können. Damit kannst du mit VBA-Mitteln feststellen, ob es die Datei gibt oder nicht.


Axel

Titel: Re: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: Stefan5 am 30.04.09 - 16:32:46
Hallo Axel
Vielen Dank für den Hinweis. Leider liefert Dein Vorschlag immer das gleiche Resultat, egal ob der strLink korrekt ist oder falsch. Es gibt kein Unterschied. So habe ich es versucht als Beispiel:

Sub Testlauf()

'Korrekter Link
    If FollowLotusNotes("notes://pdmg20/pdmg20/mailin/Name.nsf") = True Then
    End If
   
'Falscher Link
    If FollowLotusNotes("notes://pdmg20/pdmg20/mailin/NameXXXX.nsf") = True Then
    End If   


End Sub

Private Function FollowLotusNotes(strLink As String) As Boolean

Dim objLotusNotes As Object
Dim Db As Object
Dim s As String   


    Set objLotusNotes = CreateObject("Notes.Notessession")
    Set Db = objLotusNotes.GETDATABASE("", strLink)
   
   
    If Db.IsOpen = False Then
        Db.OPENMAIL
    End If
   
    MsgBox Db.FILEPATH
    MsgBox Db.FILENAME     
   
    Set objLotusNotes = Nothing
    Set Db = Nothing

End Function

Titel: Re: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: pram am 30.04.09 - 16:52:45
was soll denn das:
Code
    If Db.IsOpen = False Then
        Db.OPENMAIL
    End If
???

Ich denke mal du möchtest NotesSession.resolve(url) verwenden...

Gruß
Roland
Titel: Re: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: Stefan5 am 30.04.09 - 17:07:52
Hallo Roland
Ok, nehme ich raus, verstehe es zu wenig. Das Resultat ist trotzdem so, dass es einfach den Pfad analog dem strLink anzeigt. Dann bin ich wieder gleichweit?
Grüsse
Stefan
Titel: Re: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: pram am 30.04.09 - 17:56:14
Hallo Stefan,

objLotusNotes.GETDATABASE("", strLink) ist der falsche Weg. (Da die Parameter Server und Filepath sind. Filepath ist KEINE Url. Siehe Noteshilfe)

richtig(er) wäre:
set db = objLotusNotes.RESOLVE(strLink)
msgbox "DB liegt auf: " + db.server + "!!" + db.filepath

hier muss halt noch ein vernünftiges Errorhandling rum

Gruß
Roland

Titel: Re: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: Stefan5 am 30.04.09 - 18:56:03
Hallo zusammen
Hallo Roland
Vielen Dank für die hilfe.  :) Voilà, dass ist exakt, was ich gesucht habe. Genial. Das Errorhandling kriege ich hin. Darf ich noch fragen, ich würde gerne am Anfang der Prozedur (ausserhalb dieser Codeprozedur, in einem anderen Code-Teil) prüfen, ob LotusNotes angemeldet (Passwort) ist, gibt es da auch eine einfache Möglichkeit?
Grüsse
Stefan
...und nochmals vielen Dank ... das hat mir ein grosses Problem gelöst!
Titel: Re: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: pram am 30.04.09 - 22:45:51
Wann kommt denn das PW-Fenster?

Sobald du das NotesSession-Objekt anlegst?
Evtl kannst auch ein UIWorkspace-Objekt anlegen ohne dass das Fenster kommt (untested) und dann currentDatabase o.ä. abfragen, worauf du ggf. rückschließen kannst ob der User angemeldet ist.

Alternativ könntest den Befehl "Tasklist" ausführen und Nlnotes.exe suchen. Wenn sie läuft ist der User höchstwahrscheinlich angemeldet.

Evtl gibts aber auch einen DLL-Call o.ä. das man echt überprüfen kann

Gruß
Roland
Titel: Re: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: Stefan5 am 01.05.09 - 03:49:19
Hallo Roland

Ich muss etwas ausholen, ich habe eine Excel-Liste mit ca. 800 Links auf Dateien, Verzeichnisse, Internet- und Intranet-Seiten und eben auch LotusNotes-Datenbanken.

Nun habe ich die undankbare Aufgabe gekriegt ein VBA-Prozedur zu schreiben, die in der Lage ist, sämtliche Link-Arten quasi auf Validitiät zu prüfen. Das ist mir nun ordentlich gelungen bei Dateien, Verzeichnisse, Internet- und Intranet-Seiten. Und dank Eurer Hilfe nun sogar für LotusNotes Datenbanken. Die Püfung der Links auf LN Datenbanken ist nur ein "Teilprozedur". Die Prüfung, ob LotusNotes "ansprechbar" ist, müsste ganz am Anfang der Prozedur stehen. Bevor die Überprüfung startet, wird beispielsweise bislang geprüft, ob Internet aktiv ist.

Ich bräuchte also nur eine einfache Lösung (evt. auch mit Error-Handling), dass mir erlaubt den Anwender gleich nach dem Start der Prüfprozedur hinzuweisen, sich im LotusNotes anzumelden, sofern kein Zugriff besteht und dann würde die Prozedur sofort wieder abgebrochen. Das würde vollständig ausreichen. Eine Übergabe des Passwortes oder ähnliches ist nicht notwendig.

Wenn die Prüfung der LN Datenbanken erreicht ist, wäre eine Prüfung des LN Zugriffes bereits zu spät.

... übrigens den Code für LotusNotes konnte ich so lösen:

On Error resume next
if IsError(objLotusNotes.RESOLVE(strLink)) = true then
....
Else
...
End if

Geht ausgezeichnet..... genial  ;D



Titel: Re: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: eknori am 01.05.09 - 06:24:06
Ich würde es so machen http://www.freevbcode.com/ShowCode.asp?ID=5166.
Wenn "Notes" respektive "notes.exe" geladen ist, dann läuft Notes.
Titel: Re: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: Stefan5 am 01.05.09 - 22:22:44
Vielen Dank für den Hinweis. Der ist sehr interessant. Ich habe es noch mit dem Computername-API ergänzt und teste mal so. Das könnte mir elegant auch beim InternetExplorer helfen. Genial
Grüsse
Stefan


Option Explicit

'Computername
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long


Function IsProcessRunning(strServer, strProcess)
    Dim Process, strObject
    IsProcessRunning = False
    strObject = "winmgmts://" & strServer
    For Each Process In GetObject(strObject).InstancesOf("win32_process")
    If UCase(Process.Name) = UCase(strProcess) Then
            IsProcessRunning = True
            Exit Function
        End If
    Next
End Function


Sub TEST()

Dim strComputer As String
Dim strProcess As String

    strComputer = String(255, Chr$(0))
    GetComputerName strComputer, 255
    strComputer = Left$(strComputer, InStr(1, strComputer, Chr$(0)))

Do
   strProcess = InputBox("Please enter the name of the process (for instance: explorer.exe)", "Input")
Loop Until strProcess <> ""

If (IsProcessRunning(strComputer, strProcess) = True) Then
    MsgBox "Process " & strProcess & " is running on computer " & strComputer
Else
    MsgBox "Process " & strProcess & " is NOT running on computer " & strComputer
End If

End Sub