Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: sja am 03.12.03 - 18:08:16

Titel: Agent für Archivierung
Beitrag von: sja am 03.12.03 - 18:08:16
Hallo.
Agenten habe ich noch nie programmiert und werde für jede Hilfe sehr dankbar.
Folgender Agent muss ich erstellen:
- eine Datenbank enthält Hauptdokumente mit Anhängen
- ein Hauptdokument enthält ein Feld "ArchivDatum"
- ein periodischer Agent muss alle Hauptdokumente mit dazu gehörigen Anhängen in eine Archiv-Datenbank kopieren und in aus der Datenbank löschen, wenn ArchivDatum=@Today ist.
Wäre interessant wie Formula Language, als auch LotusScript.

Ich habe domino 6.0.2.

Vielen Dank im Voraus

sjn
Titel: Re:Agent für Archivierung
Beitrag von: koehlerbv am 03.12.03 - 22:03:50
Ebenfalls hallo !

Wenn Du solch eine Aufgabe erfüllen willst, wirst Du mit Notes-Bordmitteln nichts erreichen, und Formelsprache nützt Dir auch nichts - dafür sind @functions nicht gemacht. Mit LS geht es (okay, entgegen vielen oberflächlichen Aussagen kann man damit ja notfalls auch Kaffee kochen ;-)

Wir haben daher eine Applikation entwickelt, die genau so etwas erledigt wie Du willst, und das Setup (was soll wann archiviert werden) pro zu archivierender DB kannst Du wiederum per @functions erledigen (und / oder Dir von uns dabei helfen lassen). Die ganze Applikation liegt in der 1.000 Euro-Klasse ;-)

Bernhard
Titel: Re:Agent für Archivierung
Beitrag von: TMC am 03.12.03 - 22:10:51
Hi,

Zitat
Agenten habe ich noch nie programmiert und werde für jede Hilfe sehr dankbar.
Ich denke Bernhard's Tipp war in diesem Fall genau richtig, wenn Du schnell eine Lösung brauchst (also externen DL einschalten und/oder DB kaufen).

Wenn Du das selbst machen willst:
- Bücher lesen
- Schulung(en) besuchen
- mit einfachen Dingen anfangen (Masken, Views, etwas Formelsprache)
- einfache Scripts schreiben
etc.

Man könnte jetzt zwar ein LotusScript hier posten, aber ich denke das würde ganz einfach überfordern, schließlich wäre das niemals nicht per "Copy & Paste" übernehmbar.

Viel Erfolg,
TMC
Titel: Re:Agent für Archivierung
Beitrag von: sja am 04.12.03 - 15:08:58
Lieber Bernhard, TMC,

vielen Dank für eure reiche Hilfe.
Jetzt weiss ich, dass mit Formelsprache soll ich keine Zeit verschwinden und fange an mit LotusScript.
Leider habe ich für den Agent keine 1.000 EURO und glaube nicht, dass es Wert ist. Was betrifft Schulungen, die habe ich schon gemacht, und habe schon etwas Erfahrung in Formelsprache und LotusScript, die Gestaltungselemente kann ich auch nicht schlecht. Ich habe nur periodische Agenten noch nie gemacht. Die Bücher habe ich auch, leider nicht für v. 6, aber ich kaufe welche und versuche selbst das zu erledigen. Ich denke es wird billiger als 1000 EURO.
Noch mal vielen Dank für Hilfe.

Mit freundlichem Gruss
sja
Titel: Re:Agent für Archivierung
Beitrag von: HarryB am 04.12.03 - 16:58:16
Vielleicht so viel als Hinweis:

Ich würde eine Ansicht bauen, welche die Dokumente nach dem folgenden Kriterium selektiert: "SELECT ArchivDatum = @Today"; dabei solltest Du darauf achten, daß diese beiden Informationen kompatibel sind; soll heißen "ArchivDatum" sollte vom Datentyp Datum sein, ansonsten mußt Du "@Date(ArchivDatum)" verwenden.

Der Agent hätte dann folgende Grobstruktur:

---

Dim ses As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim achivDoc As NotesDocument
Dim helpDoc as NotesDocument

Set db = ses.CurrentDatabase
Set view = db.GetView("heuteArchivieren")

Set archivDoc = view.GetFirstDocument

While Not (archivDoc is Nothing)

<Schritte, welche zur Archivierung notwendig sind>

Set helpDoc = archivDoc
Set archivDoc = view.GetNextDocument(archivDoc)
Call helpDoc.Remove

Wend

---

Viele Grüße
Harry
Titel: Re:Agent für Archivierung
Beitrag von: koehlerbv am 04.12.03 - 17:26:47
Da steckt aber eine ganz, ganz grosse böse Falle drin: Wenn der Agent mal aus einem einen Grunde nicht läuft, dann bleiben eigentlich zu archivierende Dokumente in der Datenbank drin.
Die Selektionsformel müsste also heissen:
SELECT ArchivDatum >= @Today

HTH,
Bernhard
Titel: Re:Agent für Archivierung
Beitrag von: sja am 04.12.03 - 19:50:15
Hallo Harry, Bernhard,

herzlichen Dank für eure Hilfe.
Die Ansicht hatte ich schon mit folgender Auswahlformel

SELECT (ProjektAktiv = "inaktiv")&(DatumArchiv <= @Today)|@AllChildren

In dieser Ansicht sind alle Hauptdokumente mit den Antwortdokumenten bis zum aktuellen Datum und die alle mussen archiviert werden.

DatumArchiv >= @Today wäre falsch.

Ich versuche jetzt der Agent zu codieren und zu testen und schreibe dann meine Code und Testergebnisse.

Ich hatte einfach Probleme mit User Interface für LS Agent: wuste nicht wie soll man zu den defaulten Abschnitten (Options. Declarations, Initialize und Terminat) weitere Abschnitte (Funktionen und Prozeduren) hinzufügen. Jetzt weiss ich es. Vielleicht für jemanden wird die Information auch hilfreich:
man fügt in einen freien Beriech eines bereits bestehenden Abschnitts einfach einen neuen Funktionskopf od. Prozedurkopf ein und drückt die Enter-Taste. Meiner Meinung nach, man kann nicht intuitiv dazu kommen.

Grüsse
Sofia


 
Titel: Re:Agent für Archivierung
Beitrag von: sja am 05.12.03 - 16:20:28
also meinen Versuch sieht so aus (ich habe nur copy in Archiv Datenbank ausprobiert, deliete noch nicht ):

Abschnitt (Declarations)

Dim VEC As NotesViewEntryCollection   
Dim ve As NotesViewEntry
Dim view As NotesView
Dim db As NotesDatabase
Dim db2 As NotesDatabase
Dim doc As NotesDocument

Abschnitt Initialize

Sub Initialize
   
   Dim s As New NotesSession
   
   Set db = s.CurrentDatabase
   Set view =db.getview("archiv")
   Set VEC = view.AllEntries
   Set ve = VEC.GetFirstEntry()
   
   Set db2 = New NotesDatabase( "", "ARCHIV.nsf" )
   
   While Not (ve Is Nothing)
      Set doc = ve.Document
      Call doc.CopyToDatabase(db2)
                          'Call VEC.DeleteEntry(ve)
                          'Set ve = VEC.GetFirstEntry()
      Set ve = VEC.getNextEntry(ve)
   Wend
   
End Sub

Ergebnisse:
der Agent wurde ausgeführt, die Hauptdokumente und entsprechende Antwortdokumente wurden in der Archiv-Datenbank kopiert

Doch funktioniert das richtig. Jetzt probiere ich mit delete.

Sofia
Titel: Re:Agent für Archivierung
Beitrag von: sja am 07.12.03 - 18:07:02
also meinen Agent sieht so aus:

Dim VEC As NotesViewEntryCollection   
Dim ve As NotesViewEntry
Dim view As NotesView
Dim db As NotesDatabase
Dim db2 As NotesDatabase
Dim doc As NotesDocument

Sub Initialize   
   Dim s As New NotesSession
   
   Set db = s.CurrentDatabase
   Set view =db.getview("archiv")
   Set VEC = view.AllEntries
   Set ve = VEC.GetFirstEntry()
   
   Set db2 = New NotesDatabase( "", "archiv.nsf" )
   
   While Not (ve Is Nothing)
      Set doc = ve.Document
      Call doc.CopyToDatabase(db2)
      doc.Remove(True)
      Set ve = VEC.getNextEntry(ve)
   Wend   
End Sub

Ich habe ihn getestet und er funktioniert. Die Hauptdokumente mit den entsprechenden Antwortdokumenten mit dem Datum vor und gleich ToDay wurden in die Archiv-Datenbank kopiert und aus der Projekt-Datenbank gelöscht. Jetzt verstehe ich nicht, warum soll solchen Agent 1.000 EURO kosten. Oder das, was ich gemacht habe, ist falsch und man kann das nicht verwenden?
Also, wenn es richtig ist und für jemand kann das auch zur Hilfe sein, werde ich mich freuen.
Wenn es falsch ist, werde ich sehr dankbar, wenn man mich korrigiert (da ich nur Frischling bin).

Vielen Dank für Hilfe
Sofia