Hallo NG,
wenn ich folgenden Code in einem Agenten manuell ausführe funktioniert alles ganz wunderbar.
Lasse ich den Agenten laufen, dann bricht das Script immer mit oben genannter Fehlermeldung bei der Forall-Anweisung ab.
In der Hilfe konnte ich nichts darüber lesen, daß die Schleife bei einem zeitgesteuerten Agenten anders zu prgrammieren ist als bei einem manuellen Agenten.
Was mache ich denn da falsch?
Gruß
Jens
' Namen der Agenten auslesen und im Array "agname" speichern
Forall c In sdbs.Agents
If c.trigger = 1 Then
If c.IsEnabled = True Then
Redim Preserve agname(count)
agname(count) = c.name
count = count + 1
End If
End If
End Forall
Ändere Deinen Code mal folgendermaßen ab (Die Schleifenvariable ist für Notes ein Variant und
kennt die jeweiligen Methoden nicht):
'Namen der Agenten auslesen und im Array "agname" speichern
Dim c as NotesAgent
Forall ctmp In sdbs.Agents
Set c = ctmp
If c.trigger = 1 Then
If c.IsEnabled = True Then
Redim Preserve agname(count)
agname(count) = c.name
count = count + 1
End If
End If
End Forall
@dirk_2909
Ändere Deinen Code mal folgendermaßen ab (Die Schleifenvariable ist für Notes ein Variant und
kennt die jeweiligen Methoden nicht)
???
Der folgende Code funktioniert bei mir ohne Probleme. Und agt ist nicht definiert und kennt alles aus der Klasse "NotesAgent".
Dim ses As New NotesSession
Dim db As NotesDatabase
Set db = ses.CurrentDatabase
Forall agt In db.Agents
'Msgbox agt.Name
Print agt.Name
End Forall
@Jens_1
Was sind denn das fuer Agenten?
Wenn Du mit dem Debugger arbeitest, dann hast Du ihn ja manuell gestartet.
Was passiert, wenn Du Deinen Agenten wie gewollt "periodisch" startest und einmal mit einem Print-Befehl "protokollierst".
Andreas
Hallo,
den Fehler fange ich ab wie folgt:
On Error Goto ErrHandler
[...]
ErrHandler:
' Eintrag in's Log machen
Call currentLog.LogError( 0, "Der Fehler mit der Nummer" & Str(Err) & " und der Meldung " & Chr$(34) & Error$ & Chr$(34) & " ist bei Zeile " & Str(Erl) & " aufgetreten.")
Exit Sub
Daher weiss ich, daß das Script genau in der Zeile mit der Schleife abbricht.
Die Agenten in der Datenbank sind diverse Agenten deren Funktion mir nicht im Detail bekannt ist.
Imho ist das aber auch nicht relevant um deren Namen auszulesen?
Gruß
Jens
[...]
Der folgende Code funktioniert bei mir ohne Probleme. Und agt ist nicht definiert und kennt alles aus der Klasse "NotesAgent".
Dim ses As New NotesSession
Dim db As NotesDatabase
Set db = ses.CurrentDatabase
Forall agt In db.Agents
'Msgbox agt.Name
Print agt.Name
End Forall
[...]
Hmm - ich habe den Code gerade mal simpel in einen neuen Agenten der Datenbank gepackt und scheduled.
Null Problem!
Also kann's schon mal nichts mit dem Server oder Berechtigungen oder ähnliches sein.
Was mir aufgefallen ist:
Während hier die aktuelle Datenbank instanziert wird instanziere ich ja eine enhtfernte bzw. andere Datenbank.
Mache ich da was falsch?
Ich habe mal den kompletten Code bis zum betreffenden Teil eingefügt:
On Error Goto ErrHandler
Dim session As New NotesSession ' aktuelle Sitzung
Dim db As NotesDatabase ' Datenbank in der das Script läuft
Dim shosts_array (1 To 2) As String ' Array mit Namen der Server welche die Quelldatenbanken die ausgewertet werden sollen hosten
Dim sdbs_array (1 To 2) As String ' Array mit Namen und Pfaden der Quelldatenbanken die ausgewertet werden sollen
Dim sdbs As NotesDatabase ' Quelldatenbanken
Dim currentLog As NotesLog ' Logmechanismus
Dim count As Integer ' Zähler für die Schleife zum Auslesen der Agenten
Dim agname () As String ' Array mit den Namen der Agenten
[...]
Set db = session.CurrentDatabase
Set currentLog = New NotesLog ( db.Title )
Call currentLog.OpenNotesLog( db.Server, db.FilePath )
'Quellserver
shosts_array(1) = "server1/ou/o/c"
shosts_array(2) = "server2/ou/o/c"
' Datenbanken die ausgewertet werden sollen festlegen
' Die Datenbanken liegen auf beiden Servern im gleichen Pfad
sdbs_array(1) = "pfad\datenbank1.nsf"
sdbs_array(2) = "pfad\datenbank2.nsf"
Forall a In shosts_array
Forall b In sdbs_array
Set sdbs = New NotesDatabase (a, b)
count = 0
' Namen der Agenten auslesen und im Array "agname" speichern
Forall c In sdbs.Agents
If c.trigger = 1 Then
If c.IsEnabled = True Then
Redim Preserve agname(count)
agname(count) = c.name
count = count + 1
End If
End If
End Forall
[...]
Gruß
Jens
Guten Morgen!
Ich habe mal wieder etwas an meinem Agenten gearbeitet und mir ist folgendes aufgefallen:
Wenn das Datenbankobjekt, welches die Forall-Schleife durchläuft, auf die den Agenten beinhaltende Datenbank gesetzt wird (also: Set sdbs = session.CurrentDatabase), dann läuft das Script auch via Scheduler einwandfrei durch.
Setze ich das Datenbankobjekt wieder auf eine "entfernte" Datenbank (also: Set sdbs = New NotesDatabase (a, b)), dann gibt's wieder den Fehler.
Via
ErrHandler:
' Eintrag in's Log machen
Call currentLog.LogError(0, "Der Fehler mit der Nummer" & Str(Err) & " und der Meldung " & Chr$(34) & Error$ & Chr$(34) & " ist bei Zeile " & Str(Erl) & " aufgetreten.")
Call currentLog.LogError(0, "Inhalte: " & sdbs.Title)
Exit Sub
habe ich überprüft ob das Datenbankobjekt sdbs überhaupt gesetzt ist. Davon gehe ich aus da in der Fehlermeldung der Titel der jeweiligen Datenbank (bzw. ersten Datenbank in der Schleife) angezeigt wird.
Also muss mein Ansatz die Liste der Agenten aus einer anderen Datenbank auszulesen wohl falsch sein. Ich bin mir aber sicher, daß das möglich ist.
Wie macht Ihr denn das?
Gruß
Jens
Mach mal ein:
dim db as new notesdatabase("","")
db.open(server, db)
Ich krieg's einfach nicht hin! >:(
Setze ich da ein ein, kriege ich die Fehlermeldung, daß die Datenbank bereits geöffnet ist.
Lasse ich den Absatz weg, kriege ich den Type mismatch.
Ich habe die Quellserver und -Datenbanken jetzt mal als Liste und nicht als Array definiert. Hat aber leider nix geändert.
Hier noch mal mein aktueller Code:
Sub Initialize
On Error Goto ErrHandler
Dim session As New NotesSession ' aktuelle Sitzung
Dim db As NotesDatabase ' Datenbank in der das Script läuft
Dim shosts_list List As String ' Liste mit Namen der Server welche die Quelldatenbanken die ausgewertet werden sollen hosten
Dim sdbs_list List As String ' Liste mit Namen und Pfaden der Quelldatenbanken die ausgewertet werden sollen
Dim sdbs As New NotesDatabase ("", "")' Quelldatenbanken
Set db = session.CurrentDatabase
Set currentLog = New NotesLog ( db.Title )
Call currentLog.OpenNotesLog( db.Server, db.FilePath )
'Quellserver
shosts_list(1) = "server"
shosts_list(2) = "server"
' Datenbanken die ausgewertet werden sollen festlegen
' Die Datenbanken liegen auf beiden Servern im gleichen Pfad
sdbs_list(1) = "pfad\filename.nsf"
sdbs_list(2) = "pfad\filename.nsf"
Forall a In shosts_list
Forall b In sdbs_list
Call sdbs.open (a, b)
' Namen der Agenten auslesen und im Array "agname" speichern
Forall c In sdbs.Agents
If c.trigger = 1 Then
If c.IsEnabled = True Then
Redim Preserve agname(count)
agname(count) = c.name
count = count + 1
Print sdbs.Title & " " & c.name
End If
End If
End Forall
End Forall
End Forall
Exit Sub
ErrHandler:
' Eintrag in's Log machen
Call currentLog.LogError(0, "Der Fehler mit der Nummer" & Str(Err) & " und der Meldung " & Chr$(34) & Error$ & Chr$(34) & " ist bei Zeile " & Str(Erl) & " aufgetreten.")
Call currentLog.LogError(0, "Inhalte: " & sdbs.Title)
Exit Sub
End Sub
Wo mache ich da Mist???????
So langsam weiß ich nicht mehr weiter..... ???
Gruß
Jens
Ist das so richtig? sdbs enthält so doch nur die DB des letzten shosts_array und des letzten sdbs_array. Der folgende Code, der sich auf das Objekt sdbs bezieht, behandelt demnach nur die letzte DB auf dem letzten Server.
Ich denke schon. Ich glaube, man nennt das eine iterative Schleife. Zuerst wird die innere Schleife durchlaufen und dann die äussere. In den Test's hat's funktioniert.
Ich hatte beim überfliegen durch den falsch eingerückten Code übersehen, dass count = 0 und der Rest sich ja noch innerhalb der Schleife befinden. Dann passt's ja.
sdbs_array(1) = "pfad\datenbank1.nsf"
sdbs_array(2) = "pfad\datenbank2.nsf"
Forall a In shosts_array
Forall b In sdbs_array
Set sdbs = New NotesDatabase (a, b)
count = 0
' Namen der Agenten auslesen und im Array "agname" speichern
Forall c In sdbs.Agents