Domino 9 und frühere Versionen > ND8: Entwicklung
Probleme mit Agent
wittmann_franz:
Hallo zusammen,
ich habe ein Problem mit einem Agenten, welches sich mir überhaupt nicht erschließt.
Wir signieren Agenten in der Regel mit einem SuperUser.
Das funktioniert überall super außer in diesem Fall:
Um die Agenten nur einmal laufen zu lassen, haben wir vor dem eigentlichen Code eine Abfrage geschrieben, die festlegt ob der Agent überhaupt laufen soll. Das funktioniert nur leider nicht, wenn unser SuperUser den Agenten signiert hat. Er ruft trotzdem das doWork auf, obwohl er vorher das Script verlassen soll. Läßt man die Signatur stehen und trägt unter der Agenten-Sicherheit "Ausführen im Namen von" einen anderen Administrator ein, läuft der Agent so wie er soll.
Ich habe bereits den Abschnitt Sicherheit im Serverdokument bzgl. der beiden User verglichen und keine Unterschiede feststellen können.
Hat irgendjemand eine Idee, wo ich noch drehen muss?
Server 8.5.2
Client 8.5.2
Vielen Dank für Eure Hilfe
%REM
Agent Mail-In Dokumente verarbeiten CLU
Erstellt
am: 06.01.2012
von:
Beschreibung: Clusterfhähigkeit durch Function doWork
%END REM
Option Public
Option Declare
Use ".AppAuftragMailClass"
Sub Initialize
Const ADMINSRVDEFAULT = "Mein Server"
Dim sn As New NotesSession
Dim testdb As New NotesDatabase("", "")
Dim AdminSRV As String
Dim nAdminSRV As NotesName
Dim ExecSRV As String
Dim thisdb As NotesDatabase
Dim acl As NotesACL
Set thisdb = sn.CurrentDatabase
ExecSRV = thisdb.Server
Set acl = thisdb.ACL
Set nAdminSRV = sn.Createname(acl.AdministrationServer)
AdminSRV = nAdminSRV.Canonical
If AdminSRV = "" Then
AdminSRV = ADMINSRVDEFAULT
Else
End If
If ExecSRV = AdminSRV Then
Call doWork ()
Else
If testdb.open(AdminSRV, "names.nsf")Then
GoTo Ausgang
Else
Call doWork ()
End If
End If
Ausgang:
End Sub
%REM
Function doWork
Beschreibung: Hier steht der eigentliche Code des Agenten
%END REM
Function doWork
Dim objErrorContainer As ErrorContainer
Dim objProtocol As Protocol
Print "Function DoWork gestartet"
Call ProcessMail (objProtocol, False, objErrorContainer)
If Not objErrorContainer Is Nothing Then
If objProtocol Is Nothing Then
Call objErrorContainer.Send(Nothing)
Else
Call objErrorContainer.Send(objProtocol.NotesDocument)
End If
End If
End Function
DerAndre:
Hi,
was sagt denn der Debugger zu den entsprechenden Inhalten?
wittmann_franz:
Ach ja richtig, ich vergass....
der Debugger trägt in die Werte alles richtig ein und geht auch aus dem Script heraus.
Wenn jedoch der Agent über die Serverconsole per tell amgr run usw. oder per Zeitplan gestartet wird, springt das doWork nachwieslich an.
Peter Klett:
Habe das Script jetzt recht lange gelesen. An welcher Stelle soll der Agent denn aussteigen und unter welchen Bedingungen? Zwischen den Zeilen habe ich verstanden, dass der Agent nur auf einem der Clusterserver laufen soll.
If ExecSRV = AdminSRV Then ' Wenn der aktuelle Server der Administrationsserver ist, soll er arbeiten
Call doWork ()
Else
If testdb.open(AdminSRV, "names.nsf")Then 'Wenn er das names auf dem Adminserver öffnen kann, soll er nichts machen? Warum sollte er es nicht öffnen können? Was steckt dahinter?
GoTo Ausgang
Else
Call doWork ()
End If
End If
Vielleicht kann dieser spezielle User aus irgendeinem Grund das names auf dem Adminserver nicht öffnen, dann würde er auch laufen. Das steht zumindest in dem Script, wozu, erschließt sich mir nicht. An der Stelle würde ich mal suchen.
Ralf_M_Petter:
Kann es nicht sein, dass der einzige Unterschied ist, ob du das Skript auf dem Client oder auf dem Server laufen lässt? Meiner Meinung nach, kannst du auf dem Server nicht Datenbanken auf einem anderen Server öffnen.
Grüße
Ralf
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln