Domino 9 und frühere Versionen > ND8: Entwicklung

Probleme mit Agent

(1/4) > >>

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