Das Notes Forum
Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Jens_1 am 22.06.09 - 11:10:30
-
Hallo NG,
ich habe einen periodischen Agenten erstellt der mir von der Datenbank in welcher er läuft eine (zunächst leere) Kopie erstellt.
Nun ist mir aufgefallen, daß bei diesem Vorgang aktivierte Agenten in der Kopie ebenfalls aktiviert sind und versuchen auf dem Server loszulaufen. Damit "vermehrt" sich der Agent solange, bis der Server schlimmstenfalls irgendwann mangels Ressource steht.
Wie kann ich verhindern, das die Agenten aktiviert übernommen werden? In der Beschreibung der CreateCopy-Methode habe ich nichts dazu gefunden.
Ich könnte natürlich auch mit der Remove-Methode oder der IsEnabled-Eigenschaft der NotesAgent Klasse arbeiten - aber ich könnte damit auf die Nase fallen weil der Agent in der Datenbankkopie schneller los läuft als er durch das Script deaktiviert wird.
Wie könnte die beste Vorgehensweise aussehen?
Gruß
Jens
-
Ist ja eine komische Konstellation, ist das etwa ein Notesvirus ;)
Deaktiviere doch einfach den Agent vor dem Kopieren.
-
Warum arbeitest Du nicht mit Templates ?
-
Ist ja eine komische Konstellation, ist das etwa ein Notesvirus ;)
Deaktiviere doch einfach den Agent vor dem Kopieren.
Eine Idee auf die ich zwischenzeitig auch schon gekommen bin.
Wenn's denn keinen eleganteren Weg gibt....
Ich müsste dann auslesen welche Agenten gerade aktiviert sind, diese deaktivieren und dann wieder aktivieren.
Bissi umständlich.... :(
Gruß
Jens
-
Warum arbeitest Du nicht mit Templates ?
Hallo Ingo,
zum einen weil in der Organisation in der ich tätig bin keine Templates auf den Servern liegen sollen (weiss auch nicht was der Schwachsinn soll.....) und zum anderen werden so Änderungen am Design der Ursprungsdatenbank in die Kopie übernommen.
Gruß
Jens
-
Evtl hiermit ? :
So deaktivieren Sie alle Agenten in einer Datenbank
1. Wählen Sie "Datei - Datenbank - Eigenschaften".
2. Wählen Sie im Register "Datenbank allgemein" die Option "Hintergrund-Agenten für diese Datenbank deaktivieren".
Hinweis Wenn Sie Agenten in der InfoBox "Eigenschaften: Datenbank" deaktivieren, werden die Agenten nicht neu signiert und der Status "Aktivieren/Deaktivieren" der einzelnen Agenten wird nicht geändert. Wenn Sie diese Option deaktivieren, werden nicht notwendigerweise alle Agenten aktiviert. Es werden lediglich die bereits aktivierten Agenten ausgeführt.
Ich weiß jetzt nicht, ob man das per Script machen kann.
-
Evtl hiermit ? :
So deaktivieren Sie alle Agenten in einer Datenbank
1. Wählen Sie "Datei - Datenbank - Eigenschaften".
2. Wählen Sie im Register "Datenbank allgemein" die Option "Hintergrund-Agenten für diese Datenbank deaktivieren".
Hinweis Wenn Sie Agenten in der InfoBox "Eigenschaften: Datenbank" deaktivieren, werden die Agenten nicht neu signiert und der Status "Aktivieren/Deaktivieren" der einzelnen Agenten wird nicht geändert. Wenn Sie diese Option deaktivieren, werden nicht notwendigerweise alle Agenten aktiviert. Es werden lediglich die bereits aktivierten Agenten ausgeführt.
Ich weiß jetzt nicht, ob man das per Script machen kann.
Das wäre der Jackpot! Mal schauen ob sich was in der Hilfe findet....
Gruß
Jens
-
Das geht leider nicht per Script. Wenn überhaupt dann nur per API.
Siehe auch :
What are the database properties that you cannot modify? (http://www-01.ibm.com/support/docview.wss?rs=475&context=SSKTWP&context=SSKTMJ&context=SSRNU3&context=SSRNUY&q1=disable+agent&q2=script&q3=background&uid=swg21091863&loc=en_US&cs=utf-8&lang=en)
Is there a way to programmatically change Database Properties for a Lotus Notes/Domino database? (http://www-01.ibm.com/support/docview.wss?rs=899&uid=swg21244071)
-
Das geht leider nicht per Script. Wenn überhaupt dann nur per API.
Siehe auch :
What are the database properties that you cannot modify? (http://www-01.ibm.com/support/docview.wss?rs=475&context=SSKTWP&context=SSKTMJ&context=SSRNU3&context=SSRNUY&q1=disable+agent&q2=script&q3=background&uid=swg21091863&loc=en_US&cs=utf-8&lang=en)
Is there a way to programmatically change Database Properties for a Lotus Notes/Domino database? (http://www-01.ibm.com/support/docview.wss?rs=899&uid=swg21244071)
Yepp - das habe ich mir auch schon gedacht weil die Datenbankklasse nichts entsprechendes hergegeben hat.
Ich bastele mir jetzt gerade eine Schleife zusammen die mir alle Agenten mit der Eigenschaft "Trigger = 1" herausgibt und werde versuchen die dann in ein Array zu speichern welches dann wieder ausgelsen werden soll.
Da ich in erster Linie Admin bin und nur "Hobby"-Programmierer fordert mich das allerdings ganz gut. Insofern wäre mir der eine Schalter natürlich lieber gewesen... ;) ;D
Gruß
Jens
-
Wir leben ja in modernen Zeiten und es geht mit XML, siehe
http://atnotes.de/index.php/topic,28927.0.html
XML database property: allowbackgroundagents
Oder mit der OpenNTF Library.
Andreas
-
Wieder was gelernt. Danke Glombi ;)
-
Hallo!
Da ich mich mit Schleifen und Array mangels Praxis immer etwas schwer tue habe ich die Herausforderungs sportlich gesehen und mit Erfolg versucht das ganze zu lösen.
Das ist dabei herausgekommen und über Hinweise auf elegantere Wege freue ich mich.
Gruß
Jens
Sub Initialize
Dim session As New NotesSession ' aktuelle Sitzung
Dim db As NotesDatabase ' Datenbank in der das Script läuft
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
count = 0
' Namen der Agenten auslesen und im Array "agname" speichern
Forall a In db.Agents
If a.trigger = 1 Then
If a.IsEnabled = True Then
Redim Preserve agname(count)
agname(count) = a.name
count = count + 1
End If
End If
End Forall
' Wenn das Array leer ist, also keine Agenten aktiviert waren dann aussteigen
If count = 0 Then
Print " Keine Agenten deaktiviert..."
Exit Sub
End If
' Agenten deaktivieren
Forall a In db.Agents
If Not Isnull (Arraygetindex (agname, a.name)) Then
a.isenabled = False
Call a.save
Print a.name & " deaktiviert"
End If
End Forall
' Agenten aktivieren
Forall a In db.Agents
If Not Isnull (Arraygetindex (agname, a.name)) Then
a.isenabled = True
Call a.save
Print a.name & " aktiviert"
End If
End Forall
End Sub