Lotusscript kann eine Datenbank nicht öffnen

  • Hallo Zusammen,


    ich versuche eine neue Datenbank zu öffnen, jedoch klappt dies nicht.

    Den Grund dafür konnte ich bisher nicht finden.


    Die erste DB funktioniert egal mit welchem Aufruf, ich erhalte die Rückmeldung "Datenbank erfolgreich geöffnet":

    Call db.Openbyreplicaid("","C1257111004084AS") 'Orga DB

    Call db.Open( "m50003", "ebuero\OrgaKrKle.nsf" ) 'Orga DB


    Nehme ich die neue DB:

    Call db.Openbyreplicaid("m50003","C1258A680037C84E") 'Benutzer DB

    Call db.Open( "m50003", "it\Benutzer.nsf" ) 'Benutzer DB


    Bekomme ich keine Rückmeldung, auch nicht "Datenbank nicht geöffnet"


  • Wenn ich mich recht erinnere, geht das so nicht: ein schedulter Agent kann eine DB auf diese Weise nicht auf einem anderen Server öffnen. Das geht IIRC nur mit einem UI-Agenten. Und dann muss entweder der Signer, oder der Ausführer, die entsprechenden Rechte auf dem Remote Server haben ("Run Unrestricted LotusScript Agents" oder so hieß das).

    Wenn es ein schedulter Agent ist, muss der Server, auf dem der Agent läuft, Manager in der ACL der Remote DB sein.


    Das müsste gehen:

    Code
    Dim s As New NotesSession
    Dim db As NotesDatabase
    Set db = s.GetDatabase( "server", "path/to/file")
    Call db.Open("","")


    Dass "db.Openbyreplicaid("","C1257111004084AS")" funktioniert, liegt einfach daran, dass es auf dem lokalen Server eine DB mit dieser ReplicaID hat und sie für den Signer oder ausführer des Agenten zugreifbar ist.

    "db.Openbyreplicaid("irgendein-remote-server","C1257111004084AS")" würde vermutlich nicht funktionieren.

    Das müsstest du mit dem Debugger eigentlich auch nachvollziehen können.

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Wenn ich mich recht erinnere, geht das so nicht: ein schedulter Agent kann eine DB auf diese Weise nicht auf einem anderen Server öffnen.


    Doch, das geht. Der Server, auf dem der Agent läuft, muss auf dem Server, auf den der Agent zugreifen soll, lediglich in dessen Serverdokument unter Sicherheit > Serverzugriff bei den Vertrauenswürdigen Servern (Trusted Servers) aufgeführt sein.

    Alle anderen Berechtigungen (ACL der Quell- und Ziel-DB, Ausführungsrechte für Agenten etc.) müssen natürlich außerdem noch passen.


    HTH

    Carsten

  • Hallo Zusammen,


    vielen Dank für eure Rückmeldung.

    Alle drei DBs (DB des Agenten, Orga DB und Benutzer DB) liegen alle auf dem gleichen Server in unterschiedlichen Verzeichnissen


    Mit dem Code oben, bekomme ich bei beiden DBs keine Rückmeldung:


  • Dein Code ist noch etwas "wirr", so überschreibst du z.B. die Variable db bevor du sie überhaupt benutzt hast.

    Den Servernamen brauchst du ebenfalls nicht solange alle Datenbanken und Agenten auf dem gleichen Server liegen und dort auch ausgeführt werden.


    Ändere deinen Test-Code mal wie folgt, dann funktionierts auch.

    Und, falls doch nicht, solltest du jetzt eine sprechende Fehlermeldung bekommen.


    HTH

    Carsten


  • Hallo Carsten,

    vielen Dank für deine Hilfe, es wird keine Datenbank geöffnet.


    Ich habe dies mal so abgeändert, und es wird der Wert "Start" ausgegeben, die Variabel am Ende mit "Ende" wird nicht überschrieben.

    Die Session wird auch nicht benötigt oder?


  • Vorab: der von mir gepostete Code war exakt so lauffähig wie ich ihn gepostet habe.

    Ich habe das getestet, nur die Dateinamen habe ich durch bei mir vorhandene DBs ersetzt.

    Und natürlich hatte mein Agent im Initialize beim Testen noch den Aufruf "Print Lesepersonen" damit überhaupt etwas passiert.


    Ich habe deinen Code jetzt so geändert, dass alle Infos sequentiell in den Rückgabewert wandern, nicht benötigte Variablen habe ich weggelassen.

    Wenn also keine Fehler bei der Ausführung auftreten und den ErrorHandler triggern gibt es zwei mögliche Ausgaben (einmal mit NOT und einmal ohne):

    Start > dbUser is NOT open > dbOrga is NOT open > End


    Mein Agent funktioniert und gibt aus:

    [15E4:0012-1BEC] { namgr:#2E62} 12.06.2024 15:46:04 Agent Manager: Agent printing: Start > dbUser is open > dbOrga is open > End


    Hier der komplette Agent, mit dem ich getestet und obige Zeile produziert habe (nur die Dateinamen wurden geändert):

  • Vielen Dank für Deine Mühe, ich habe den Code nun mal in einen neuen Agenten gepackt und den Lotus Debugger dazu laufen lassen.

    Die Datenbanken lassen sich beide so nicht öffnen. Ich habe auf alle drei Datenbanken Manager Rechte, ich weiß nicht woran es liegt.

    Ob ich noch irgendetwas an den Berechtigungen ändern muss/ kann?

    NotesDebug.jpg

  • Ich rate mal, dass du den Agenten mit deinem Client startest.

    Damit läuft der Agent auf deiner Workstation und nicht auf dem Server und sucht an der falschen Stelle nach den DBs.

    Damit die DBs auch auf dem Server gesucht und verwendet werden, auf dem der Agent abgelegt ist, habe ich den Code angepasst.


    HTH

    Carsten