Autor Thema: Werte eines LS-Agenten an einen JS-Agenten übergeben (CutOff)  (Gelesen 4737 mal)

Offline Toady

  • Frischling
  • *
  • Beiträge: 22
  • Geschlecht: Männlich
Hallo,

ich habe ein kleines Problem.

Mittels Agent möchten wir in allen Maildatenbanken auf unserem Server die Replikationsprotokolle und das CutOffDate löschen.
Die Replikationsprotokolle lösche ich per LS-Agent, für das CutOffDate habe ich nur in JavaScript eine Lösung gefunden.
Jetzt zu meinem Problem:
Wie rufe ich aus dem 1.Agent heraus den JS-Agent auf und übergebe die Werte der aktuellen Datenbank. Zum besseren Verständnis hänge ich mein Script an.

Vielen Dank im voraus.
Gruß
Andreas


<schnipp>

Agent1:

Option Public
Option Declare
%INCLUDE "lsconst.lss"

Sub Initialize
   
   On Error Goto ErrHandler
   
   Dim out As String, server As String
   'server = Cstr(Inputbox$("Bitte Server eingeben"))
   server = "server1"
   
   Dim s As New NotesSession
   
   Dim ldb As NotesDatabase
   Set ldb = s.CurrentDatabase
   
   Dim dbdir As New NotesDbDirectory( server )
   Dim db As NotesDatabase   
   Set db = dbdir.GetFirstDatabase(DATABASE)
   
   Dim doc As NotesDocument     
   Dim item As NotesItem
   Dim nid As String,nextid As String
   Dim formula As  String
   Dim rep As NotesReplication
   Dim nc As NotesNoteCollection         
   Dim i As Integer
   
   Dim fileNum As Integer
   fileNum% = Freefile()
   Open "E:\temp\Protokoll_" & Left(Server,8) & "." & Date$ & ".txt" For Append As fileNum%
   
   out = "Beginne mit den Aufräumarbeiten: "+Date$+"---"+Time$
   Print #fileNum%,out
   
   Do While Not (db Is Nothing)
      
      If Not db.IsOpen Then
         
         If Strconv (Left(db.FilePath,5), SC_LowerCase) = "mail\" Then
            
            Call db.Open( db.Server , db.FilePath )                                   
            out = "Bearbeite Datenbank: " & db.Filepath
            Print #fileNum%,out
            
            Set nc = db.CreateNoteCollection(False)                               
            nc.SelectReplicationFormulas = True                                   
            Call nc.BuildCollection
            
            Set doc = db.GetDocumentByID("FFFF0800")
            
            If Not (doc Is Nothing) Then
               nid = nc.GetFirstNoteId
               For i = 1 To nc.Count                                                 
                  nextid = nc.GetNextNoteId(nid)                                       
                  Set doc = db.GetDocumentByID(nid)
                  doc.RemovePermanently(0)                                             
                  nid = nextid                                                         
               Next
            End If            
            out = "AdvancedReplicationSettings bearbeitet"
            Print #fileNum%,out
            
            Set rep = db.ReplicationInfo
            Call rep.ClearHistory()
            Call rep.Save()
            out = "Replication History gelöscht"
            Print #fileNum%,out
            
            Dim agent2 As NotesAgent
            Set agent2 = ldb.GetAgent("Agent2")
            Call agent2.run
            out = "CutOff-Date gelöscht"
            Print #fileNum%,out
            
         End If
      End If
      
      Set db = dbdir.getnextdatabase
      
   Loop
   
   
   Goto Ende
   
   
ErrHandler:   
   
   If Err > 1 Then
      out = Lsi_info(2) & " called by " & Lsi_info(12) & ": Error (" & Cstr(Err) & ") Line: " & Cstr(Erl) & " - " & Error$ & Chr(10)
      Print #fileNum%,out
   End If
   Resume Next
   
   
Ende:
   out = "Fertig! "+Date$+"---"+Time$
   Print #fileNum%,out
   
   Close fileNum%
End Sub


Agent2:

import lotus.domino.*;
public class JavaAgent extends AgentBase {
  public void NotesMain() {
    try {
      Session session = getSession();
      AgentContext agentContext = session.getAgentContext();
      Agent agent = agentContext.getCurrentAgent();
      Database db = agentContext.getCurrentDatabase();
      Replication replication = db.getReplicationInfo();
      if (agent.getComment().equals("")) {
        replication.setCutoffDelete(false);
        System.out.println("No cutoff date"); }
      else {
        Integer i = new Integer(agent.getComment());
        replication.setCutoffDelete(true);
        replication.setCutoffInterval(i.longValue());
        System.out.println("Cutoff date is " +
        replication.getCutoffDate()); }
      replication.save();
    } catch(Exception e) {
      e.printStackTrace();
    }
  }
}

<schnapp>

Offline Toady

  • Frischling
  • *
  • Beiträge: 22
  • Geschlecht: Männlich
Hi,

anscheinend ist das doch kein so kleines Problem wie ich angenommen hatte.

Da ich von Java Script leider keinen blassen Dunst habe, hatte ich gehofft, dass mir hier im Forum jmd. helfen kann.
Es muss auch nicht unbedingt der 2. Agent(JS) aus dem 1.Agent heraus gestartet werden. Mir würde auch reichen, wenn der 2.Agent so erweitert werden würde, dass er alle Datenbanken in einem bestimmten Verzeichnis bearbeitet und die Ergebnisse in eine Protokolldatei ausgibt.

Bin für jede Hilfe dankbar.

Gruß
Andreas


Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Zitat
Da ich von Java Script leider keinen blassen Dunst habe, ..
...habe ich einen JAVA-Agenten geschrieben  :-X

Einen Agenten rufst Du genau so auf, wie Du es gemacht hast (agent.run .. ).

Wo genau leigt jetzt Dein problem?

Läuft der Agent nicht an oder macht er nicht das, was er machen soll ?!
Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

klaussal

  • Gast

Zitat
Wo genau leigt jetzt Dein problem?


Hier ?
Zitat
Wie rufe ich aus dem 1.Agent heraus den JS-Agent auf und übergebe die Werte der aktuellen Datenbank

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Zitat
Hier ?
Zitat
Wie rufe ich aus dem 1.Agent heraus den JS-Agent auf und übergebe die Werte der aktuellen Datenbank

OK. I see ...  :-[

In dem fall "muss" man ein ein Dokument erstellen/festlegen/ermitteln das die Werte beinhaltet.
Die Note-ID dieses Doks kann man dem Agenten (Agenbt2 ) übergeben (siehe Designerhilfe ).

Im Agent2 muss man das Dok neu initialisieren und die Werte auslesen ...
   
Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
aber gem. Designerhilfe, kann man auch über LS das CutOfInterval ändern:
Code
To get: interval = notesReplication.CutoffInterval
To set: notesReplication.CutoffInterval = interval

Hab ich zwar nicht getestet ...
Aber wenn ja, dann kann man alles in einem Agenten verarbeiten.
Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline Toady

  • Frischling
  • *
  • Beiträge: 22
  • Geschlecht: Männlich
Hallo Dirk,
mein Problem liegt darin, dass ich den Java Script-Agenten nicht selbst geschrieben habe, sondern aus der Designer-Hilfe 1 zu 1 herauskopiert habe. Ich kann halt nur Lotus Script und Formel-Sprache und kein Java Script. Aber da hab ich mich wohl auch ein wenig undeutlich ausgedrückt - sorry.

Mein LS-Agent bearbeitet nach und nach alle Maildatenbanken. Innerhalb jeder Runde sollen alle drei Aktionen auf der jeweils geöffneten Datenbank (Replication History löschen, Advanced Replications Settings und CutOff-Date löschen) ausgeführt werden. Die ersten beiden Aktionen macht er auch, aber wenn ich den 2. Agent aufrufe, löscht der nur das CutOff-Date aus der Datenbank, woraus ich meinen Agenten gestartet habe  :'(

Zum besseren Verständnis: Mit CutOff-Date löschen meine ich den Wert, der in den Replication Settings unter Special replication limitations --> This replica includes deletion stubs... steht.
Mit "notesreplication.cutoffinterval=interval" bekomme ich den Wert leider nicht gelöscht.

Dein Vorschlag mit dem Hilfsdokument ist aber super!
Ich versuche mal unter Zuhilfenahme der Designer-Hilfe den 2. Agent entsprechend umzubauen.

Gruß
Andreas

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
OK.

Das ist ja klar. Du initialiiserst ja auch die aktuelle Datenbank >>

Code
Database db = agentContext.getCurrentDatabase();

An dieser Stelle musst Du die andere(n) DB initialiseren.

Wie Du Werte dem Agenten (indirekt) übergeben kannst , hab ich weiter obern beschrieben.

Du musst aber nicht unbedingt Werte übergeben.
Du musst nur über alle Mail-DN des aktuellen Servers mit einer Schleife laufen.

Wie Du das machst ist in der Designer-Hilfe gut beschrieben.
Such nach  DbDirectory class  .....

btw: Der 2. Agent ist in Java geschrieben nicht in JavaScript ;-)

Und versuche den code nicht nur zu kopieren, sondern auch zu verstehen.

Wenn es Probleme gibt, einfach nochmal melden.


Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline Werner Götz

  • Aktives Mitglied
  • ***
  • Beiträge: 248
  • Geschlecht: Männlich
Ist denn der 2. Agent wirklich nötig?
Eigentlich wird ja intern der gleiche Code aufgerufen, egal ob aus Java oder aus Lotusscript.

Kann es sein, dass bei der Lotusscript-Variante NotesReplication anschließend nicht gespeichert wurde?

-Werner

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Ist denn der 2. Agent wirklich nötig?
Nein. Auf die Art verkomplizierst du nur deinen Code. Versuch einfach das Java in LotusScript zu übersetzen. Da die Apis sehr ähnlich sind, ist das sehr einfach.
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Re: Werte eines LS-Agenten an einen JS-Agenten übergeben (CutOff)
« Antwort #10 am: 03.06.08 - 09:44:14 »
Hatte ich schon im Posting #5 angedeutet.
Sollte auch aus meiner Sicht klappen (ohne es zu testen ).

Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline Pyewacket

  • Senior Mitglied
  • ****
  • Beiträge: 310
  • Geschlecht: Männlich
Re: Werte eines LS-Agenten an einen JS-Agenten übergeben (CutOff)
« Antwort #11 am: 03.06.08 - 12:17:51 »
Ich denke nicht daß du das Cutoff Date ändern kannst.
Du willst das erreichen indem du das Cuttoffinterval änderst.
Ich hab in einer DB das Cutoff Date auf leer gesetzt. Wenn ich mir dann
die Replication Info der DB im Debugger ansehe stehet das Cutoff Intervall immer noch auf 90, das Cutoff Date enthält aber nur noch ein Datetime ohne Datum und mit Uhrzeit 00:00:00.





ATOS.org - Feel the music!

Offline Toady

  • Frischling
  • *
  • Beiträge: 22
  • Geschlecht: Männlich
Re: Werte eines LS-Agenten an einen JS-Agenten übergeben (CutOff)
« Antwort #12 am: 06.06.08 - 08:19:47 »
Ich hab die Lösung für mein Problem gefunden - ist denkbar einfach:


Set rep = db.ReplicationInfo
Call rep.ClearHistory()
rep.CutOffDelete = False
Call rep.Save()
out = "Replication History & CutOff-Date gelöscht"
Print #fileNum%,out


Mein Fehler war, dass ich in meinen vorangegangenen Versuchen mit LS "rep.CutOffDelete = " immer auf TRUE gesetzt hatte. Dabei wurde aber logischerweise das Datum nicht gelöscht....und nachdem ich mit dem Java-Agent angefangen hatte, war ich ganz durcheinander. Manchmal sieht man halt den Wald vor lauter Bäumen nicht!!!

Vielen Dank nochmal für Eure Unterstützung. Ohne die Diskussion mit Euch wäre mir der Fehler wohl nie aufgefallen.

Gruß
Andreas

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz