Autor Thema: Agent zur Archivierung  (Gelesen 4254 mal)

Offline MarkusL

  • Aktives Mitglied
  • ***
  • Beiträge: 124
  • Geschlecht: Männlich
Agent zur Archivierung
« am: 12.05.10 - 15:26:47 »
Hallo zusammen,

ich habe mir dank einiger Einträge hier einen Agenten zusammenkopiert, der in einer Notes-DB alle erledigten Dokumente in eine andere DB verschiebt. Das funktioniert auch. (Danke an alle Helfer in diesem Forum).

Jetzt möchte ich noch ein Schmankerl einbauen.
Im Profildokument der aktiven DB sind in den Feldern "Server" und " ArchivDB" der Server und die Archiv-DB variabel hinterlegt. Wie bekomme ich den Agenten dazu, diese Felder auszulesen und zu verarbeiten?
LotusScript ist mir im Moment noch etwas zu hoch (ich arbeite daran) und ich habe in der Hilfe nichts gefunden.

Danke für Eure Hilfe


Sub Initialize
   '##############################################################################
   'Archiviert die Dokumente in die angegebene arcdb, wenn diese den Status "Archiv" haben.
   '##############################################################################   
   
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim arcdb As New NotesDatabase("Server" , "ArchivDB")
   Dim dc As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim wert As Variant
   Dim nextdoc As notesdocument
   
   Set db = session.CurrentDatabase
   Set dc = db.AllDocuments
   Set doc = dc.GetFirstDocument
   
   Do Until doc Is Nothing
      Set nextdoc = dc.getnextdocument(doc)
      '## Hier das Feld angeben welches das Kriterium zum Archivieren enthalten soll     
      wert = doc.GetItemValue("Status")
      '## Hier den Wert angeben den das oben angegebene Feld enthalten soll zum archivieren
      If wert(0) = "erledigt" Then
         Call doc.CopyToDatabase(arcdb)               
         '## folgenden Befehl rausnehmen, wenn das archivierte Dok nicht in der Quell-DB gelöscht werden soll !!         
         Call Doc.Remove( True )     
      End If
      Set doc = nextdoc
   Loop
   
End Sub   
Version Lotus Notes / Domino: 8.5.3
Server: 1 Cluster, 1 weiterer Server
Anzahl Benutzer: ca. 230

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Agent zur Archivierung
« Antwort #1 am: 12.05.10 - 15:31:50 »
Hallo,

Das hier sollte eigentlich als Stichwort helfen.

NotesDatabase.GetProfileDocument bzw.
NotesDatabase.GetProfileDocumentCollection


Andreas

Offline MarkusL

  • Aktives Mitglied
  • ***
  • Beiträge: 124
  • Geschlecht: Männlich
Re: Agent zur Archivierung
« Antwort #2 am: 22.02.11 - 15:46:34 »
Hallo zusammen,

nach langer Zeit habe ich nochmal mit dem Problem beschäftigt.
Die beiden Felder kann ich im Profildokument auslesen. Nur leider nicht zusammensetzen und als DB verwenden.
Hier nochmal mein Code:

Sub Initialize
   '##############################################################################
   'Archiviert die Dokumente in die angegebene arcdb, wenn diese den Status "erledigt" haben.
   '##############################################################################   
   
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim archiv As NotesDatabase
   Dim dc As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim srv As NotesDocument
   Dim arcdb As NotesDocument
   Dim wert As Variant
   Dim nextdoc As notesdocument
   
   Set db = session.CurrentDatabase
   Set srv = db.GetProfileDocument("Konfiguration","Server")   
   Set arcdb = db.GetProfileDocument("Konfiguration","Datenbank")
        ' und hier weiß ich nicht weiter: archiv =
   Set dc = db.AllDocuments
   Set doc = dc.GetFirstDocument
   
   Print "Archivierung der erledigten Dokumente in die Archiv-Datenbank"
   Do Until doc Is Nothing
      Set nextdoc = dc.getnextdocument(doc)
      '## Hier das Feld angeben welches das Kriterium zum Archivieren enthalten soll     
      wert = doc.GetItemValue("Status")
      '## Hier den Wert angeben den das oben angegebene Feld enthalten soll zum archivieren
      If wert(0) = "erledigt" Then
         Call doc.CopyToDatabase(archiv)               
         '## folgenden Befehl rausnehmen, wenn das archivierte Dok nicht in der Quell-DB gelöscht werden soll !!         
         Call Doc.Remove( True )     
      End If
      Set doc = nextdoc
   Loop
   
End Sub   
Version Lotus Notes / Domino: 8.5.3
Server: 1 Cluster, 1 weiterer Server
Anzahl Benutzer: ca. 230

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Agent zur Archivierung
« Antwort #3 am: 22.02.11 - 15:57:56 »
Nur so als Hinweis.

Das GetProfileDocument liefert Dir ein Objekt der Notes-Klasse NotesDocument zurueck.

Und dieses NotesDocument kannst Du dann verwenden wie jedes andere Objekt dieser Klasse auch.
NotesDocument.GetItemValue()

Alles weitere findest Du in der Hilfe, wie auch das Auslesen von Werten aus einem Profile-Dokument.


Andreas

P.S.:
Das Profile fuer die Archiveinstellungen heisst nicht "Konfiguration" sondern "archive profile"

Offline MarkusL

  • Aktives Mitglied
  • ***
  • Beiträge: 124
  • Geschlecht: Männlich
Re: Agent zur Archivierung
« Antwort #4 am: 23.02.11 - 10:59:49 »
Hallo Andreas,

mein Problem ist, dass ich nicht weiß (und es auch nicht finde), wie ich die beiden NotesDocuments "srv" und "arcdb" so zusammenfüge, dass Sie in der "Variablen" "archiv" als NotesDatabase zu gebrauchen sind. Mit "archiv" wird dann die Datenbank geöffnet, in welche die Dokumente verschoben werden sollen.

Dein P.S. verstehe ich nicht. In meiner selbstgebauten Datenbank heißt das Profildokument "Konfiguration". Aus diesem bekomme ich meine Werte.

Gruß Markus
Version Lotus Notes / Domino: 8.5.3
Server: 1 Cluster, 1 weiterer Server
Anzahl Benutzer: ca. 230

Offline oxyd21

  • Senior Mitglied
  • ****
  • Beiträge: 371
  • Geschlecht: Männlich
Re: Agent zur Archivierung
« Antwort #5 am: 23.02.11 - 11:26:53 »
Das "Zusammenborgen" von Code, den man nicht versteht ist immer ein bischen ungünstig.    ;)

Zitat
... als NotesDatabase zu gebrauchen sind ...
Was liegt da näher, als die NotesDatabase-Klasse zu studieren?

notesDatabase.Open( server$, dbfile$ )

VG, Michael

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Agent zur Archivierung
« Antwort #6 am: 23.02.11 - 12:35:24 »
@MarkusL

Also nochmal.

GetProfileDocument liefert Dir ein Objekt der Klasse NotesDocument zurueck. Willst Du jetzt Werte aus diesem Profil auslesen muss Du Dich mit der Klasse NotesDocument beschaeftigen.

Will also heissen.
Wert aus dem Feld fuer den Server = NotesDocument.GetItemValue("Feld fuer Server")(0)
Wert aus dem Feld fuer die Db = NotesDocument.GetItemValue("Feld fuer Db")(0)

Also NICHTS mit 2 NotesDocuments.

Und bitte nochmal.
Lies Dir in der Designer-Hilfe die angegebenen Klassen und Methoden dieser Klassen genau durch.
Hier findest Du auch genuegend Beipspiele, wie Du Werte aus Profil-Dokumenten auslesen kannst und weiterverareitest.


Andreas

Offline MarkusL

  • Aktives Mitglied
  • ***
  • Beiträge: 124
  • Geschlecht: Männlich
Re: Agent zur Archivierung
« Antwort #7 am: 28.02.11 - 15:24:33 »
Hallo zusammen,

ich habe es geschafft. Vielen Dank an alle Helfer.
Und hier nochmal der fertige Code für alle:

Sub Initialize
   '##############################################################################
   'Archiviert die Dokumente in die copyDb, wenn diese den Status "erledigt" haben.
   '##############################################################################   
   
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim confDoc As NotesDocument   
   Dim copyDb As NotesDatabase   
   Dim dc As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim nextdoc As Notesdocument
   Dim wert As Variant
   
   Set db = session.CurrentDatabase
   
   ' Das Konfigurationsdokument holen
   Set confDoc = db.GetProfileDocument("Konfiguration")
   
   ' Die Feldwerte Server und Datenbank auslesen
   sServer = confDoc.Server(0)
   sDb = confDoc.Datenbank(0)
   
   ' Die Archivdatenbank instanzieren
   Set copyDb = session.GetDatabase(sServer,sDb)
   
   Set dc = db.AllDocuments
   Set doc = dc.GetFirstDocument
   
   Print "Archivierung der erledigten Dokumente in die Archiv-Datenbank"
   Do Until doc Is Nothing
      Set nextdoc = dc.getnextdocument(doc)
      '## Hier das Feld angeben, welches das Kriterium zum Archivieren enthalten soll     
      wert = doc.GetItemValue("Status")
      '## Hier den Wert angeben, den das oben angegebene Feld enthalten soll zum archivieren
      If wert(0) = "erledigt" Then
         Call doc.CopyToDatabase(copyDb)               
      '## folgenden Befehl rausnehmen, wenn das archivierte Dok nicht in der Quell-DB gelöscht werden soll
         Call Doc.Remove( True )     
      End If
      Set doc = nextdoc
   Loop
   
End Sub
Version Lotus Notes / Domino: 8.5.3
Server: 1 Cluster, 1 weiterer Server
Anzahl Benutzer: ca. 230

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Agent zur Archivierung
« Antwort #8 am: 28.02.11 - 15:34:22 »
Hallo,

Na hoffentlich wird in der Applikation, in der Du diese kleine Arcivierung eingebaut hast, nicht mir Antworten auf Dokumente herumgespielt.

Und wenn doch, dass wird beim Setzen des Status im Hauptdokument, dieser Status gleich mit auf die Antwortdokumente uebertragen.


Andreas

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz