Das Notes Forum
Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: MarkusL 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
-
Hallo,
Das hier sollte eigentlich als Stichwort helfen.
NotesDatabase.GetProfileDocument bzw.
NotesDatabase.GetProfileDocumentCollection
Andreas
-
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
-
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"
-
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
-
Das "Zusammenborgen" von Code, den man nicht versteht ist immer ein bischen ungünstig. ;)
... als NotesDatabase zu gebrauchen sind ...
Was liegt da näher, als die NotesDatabase-Klasse zu studieren?
notesDatabase.Open( server$, dbfile$ )
VG, Michael
-
@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
-
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
-
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