Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: HipSlu am 25.04.02 - 16:19:40
-
Folgene Bitte / Frage:
ich möchte einen periodischen agent erstellen, der
- alle dokumente einer bestimmten ansicht (oder einer bestimmten maske, ist egal) durchgeht,
- dann ein neues dokument mit einer best. maske erstellt und 2 Felder befüllt; die Document Unique ID des "Ausgangdokumentes" ins eine und "0" ins andere
- dies soll aber nur passieren, wenn es das dokument nicht schon gibt (sollte ja über die unid kein problem sein)
so - und nun kann ich leider nur formel; und da fällt mir irgendwie nicht ein, wie ich ein neues dokument erstellen kann...
kann mir bitte jemand auf die sprünge helfen bzw die 10 zeilen in script verraten (viel mehr wirds nicht sein denke ich mal)?
vielen dank! ;)
-
Hi,
versuchs mal mit dem hier. Ich hoffe ich habe Deine Anleitung richtig verstanden.
Gruß
Frank
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
'1. View die Docs die durchgegangen werden sollen
Dim view1 As NotesView
'2. View auf die zu erstellende Docs (doc2), kategorisiert in der ersten Spalte mit dem
'zu befüllenden Feld des auszulesenden Dokumentes
Dim view2 As NotesView
Dim doc1 As notesdocument
Dim doc2 As notesdocument
Dim keys( 1 To 2 ) As String
Set db = session.CurrentDatabase
Set view1 = db.GetView( "DeineView2" )
Set view1 = db.GetView( "DeineView1" )
set doc1 = view.getfirstdocument
do while doc1 is nothing
iddoc1$ = doc1.uinversalid
keys( 1 ) = iddoc1$
Set doc2 = view2.GetDocumentByKey( keys )
if doc2 is nothing then
Set doc2 = New NotesDocument(db)
doc2.Form = "FormName"
doc2.IDDoc1 = doc1.uinversalid
doc2.Feldname = 0
end if
loop
End Sub
-
Hallo,
vielen Dank für Deine Hilfe - habs versucht, bekomme allerdings leider folgende Fehlermeldung:
"Variant does not contain an object"
-
Hier der momentane Agent:
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view1 As NotesView
Dim view2 As NotesView
Dim doc1 As notesdocument
Dim doc2 As notesdocument
Dim keys( 1 To 2 ) As String
Set db = session.CurrentDatabase
Set view1 = db.GetView( "ThemaView" )
Set view1 = db.GetView( "(CounterView2)" )
Set doc1 = view.getfirstdocument
Do While doc1 Is Nothing
iddoc1$ = doc1.uinversalid
keys( 1 ) = iddoc1$
Set doc2 = view2.GetDocumentByKey( keys )
If doc2 Is Nothing Then
Set doc2 = New NotesDocument(db)
doc2.Form = "Counter"
doc2.Unid_Faq = doc1.uinversalid
doc2.N_Views = 0
End If
Loop
End Sub
Der "(CounterView2)" sieht so aus:
1. Spalte: UNID des Ausgangsdocs
2. der Inhalt des Feldes "N_Views" => Standard=0
3. die UNID des Docs selbst
Und die erste Spalte ist, so wie Du geschrieben hast, kategorisiert
-
hab glaub ich einen fehler gefunden:
Set view1 = db.GetView( "ThemaView" )
Set view2 = db.GetView( "(CounterView2)" )
und
Set doc1 = view1.getfirstdocument
nur.... dokumente erstellt er leider keine....
-
Hi,
war etwas früh heute morgen.
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view1 As NotesView
Dim view2 As NotesView
Dim doc1 As notesdocument
Dim doc2 As notesdocument
Dim keys( 1 To 2 ) As String
Set db = session.CurrentDatabase
Set view1 = db.GetView( "ThemaView" )
Set view2 = db.GetView( "(CounterView2)" )
Set doc1 = view1.getfirstdocument
Do While doc1 Is Nothing
iddoc1$ = doc1.uinversalid
keys( 1 ) = iddoc1$
Set doc2 = view2.GetDocumentByKey( keys )
If doc2 Is Nothing Then
Set doc2 = New NotesDocument(db)
doc2.Form = "Counter"
doc2.Unid_Faq = doc1.uinversalid
doc2.N_Views = 0
doc2.Save(true,true)
End If
Loop
End Sub
Beider View die 2 nicht vergessen
und das save für das Doc.
Die "(CounterView2)" Ansicht muß in der ersten spalte
das Feld "Unid_Faq" kategorisiert sein, da Du in dieses Feld die UNID des Doc1 schreibst .
-
Hallo,
sorry, ich muß nochmal lästig sein....
bei
doc2.Save(true,true)
schreibt der designer:
"Initialize: 27: Illegal use of parantheses"
und ansonsten - wenn ich das "doc2.Save(true,true)" rausnehme - und den agent mit debug lotus script laufen lasse, dann springt er bei "Do While doc1 Is Nothing " sofort auf "End Loop"....
d.h. er findet anscheinend gar kein Dokument??
??? ??? ???
-
Hi,
sorry das müsste heißen:
do while not doc1 is nothing
und
Call doc2.Save( true, True )
-
hi,
jetz habe ich bei
"Do While doc1 Is Not Nothing "
"17: Type mismatch"
wenn ich das "do while..." und "loop" auskonvertiere, also nur das erste doc bearbeiten würde, so bekomm ich übrigens bei " iddoc1$ = doc1.uinversalid "
ebenfalls "Type mismatch"
-
Hi,
TIPPFEHLER
doc1.UniversalID
und das "not" kommt vor das doc1.
Warst schneller als ich korrigiert habe
-
ist mir ja schön langsam peinlich.... aber jetzt bekomm ich bei " Set doc2 = view2.GetDocumentByKey( keys ) " => "Too many keys"
:)
-
versuchsmal mit
Set doc2 = view2.GetDocumentByKey( keys, true )
-
leider.... gleiche Fehlermeldung
-
schick mir kurz die DB
mail@doleschel.de
das geht schneller
-
fyi - so solls sein:
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view1 As NotesView
Dim view2 As NotesView
Dim doc1 As notesdocument
Dim doc2 As notesdocument
Set db = session.CurrentDatabase
Set view1 = db.GetView( "ThemaView" )
Set view2 = db.GetView( "(CounterView2)" )
Set doc1 = view1.getfirstdocument
Do While Not doc1 Is Nothing
iddoc1$ = doc1.UniversalID
Set doc2 = view2.GetDocumentByKey( iddoc1$, True )
If doc2 Is Nothing Then
Set doc2 = New NotesDocument(db)
doc2.Form = "Counter"
doc2.Unid_Faq = doc1.universalid
doc2.N_Views = 0
Call doc2.Save( True, True )
End If
Set doc1=view1.getnextdocument (doc1)
Loop
End Sub