Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Jens_1 am 22.06.09 - 11:10:30

Titel: "db.CreateCopy" ohne aktivierte Agenten?
Beitrag 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
Titel: Re: "db.CreateCopy" ohne aktivierter Agenten?
Beitrag von: jBubbleBoy am 22.06.09 - 11:22:03
Ist ja eine komische Konstellation, ist das etwa ein Notesvirus ;)

Deaktiviere doch einfach den Agent vor dem Kopieren.
Titel: Re: "db.CreateCopy" ohne aktivierter Agenten?
Beitrag von: Driri am 22.06.09 - 11:31:19
Warum arbeitest Du nicht mit Templates ?
Titel: Re: "db.CreateCopy" ohne aktivierter Agenten?
Beitrag von: Jens_1 am 22.06.09 - 11:56:41
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
Titel: Re: "db.CreateCopy" ohne aktivierter Agenten?
Beitrag von: Jens_1 am 22.06.09 - 11:59:21
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
Titel: Re: "db.CreateCopy" ohne aktivierter Agenten?
Beitrag von: klaussal am 22.06.09 - 12:02:50
Evtl hiermit ? :

Zitat
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.
Titel: Re: "db.CreateCopy" ohne aktivierter Agenten?
Beitrag von: Jens_1 am 22.06.09 - 12:22:44
Evtl hiermit ? :

Zitat
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
Titel: Re: "db.CreateCopy" ohne aktivierter Agenten?
Beitrag von: Driri am 22.06.09 - 13:43:15
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)
Titel: Re: "db.CreateCopy" ohne aktivierter Agenten?
Beitrag von: Jens_1 am 22.06.09 - 14:28:26
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
Titel: Re: "db.CreateCopy" ohne aktivierter Agenten?
Beitrag von: Glombi am 22.06.09 - 14:33:52
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
Titel: Re: "db.CreateCopy" ohne aktivierter Agenten?
Beitrag von: Driri am 22.06.09 - 15:39:32
Wieder was gelernt. Danke Glombi  ;)
Titel: Re: "db.CreateCopy" ohne aktivierter Agenten?
Beitrag von: Jens_1 am 24.06.09 - 09:42:31
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


Zitat
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