Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: HipSlu am 25.04.02 - 16:19:40

Titel: Agent
Beitrag 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! ;)
Titel: Re: Agent
Beitrag von: doliman am 26.04.02 - 07:16:13
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
Titel: Re: Agent
Beitrag von: HipSlu am 26.04.02 - 17:38:44
Hallo,

vielen Dank für Deine Hilfe - habs versucht, bekomme allerdings leider folgende Fehlermeldung:

"Variant does not contain an object"
Titel: Re: Agent
Beitrag von: HipSlu am 26.04.02 - 17:46:39
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
Titel: Re: Agent
Beitrag von: HipSlu am 26.04.02 - 17:55:48
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....
Titel: Re: Agent
Beitrag von: doliman am 26.04.02 - 18:09:24
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 .

Titel: Re: Agent
Beitrag von: HipSlu am 26.04.02 - 18:32:24
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??

??? ??? ???
Titel: Re: Agent
Beitrag von: doliman am 26.04.02 - 18:40:39
Hi,

sorry das müsste heißen:

do while not doc1 is nothing

und

Call doc2.Save( true, True )
   

Titel: Re: Agent
Beitrag von: HipSlu am 26.04.02 - 18:50:22
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"
Titel: Re: Agent
Beitrag von: doliman am 26.04.02 - 18:57:37
Hi,

TIPPFEHLER

doc1.UniversalID

und das "not" kommt vor das doc1.
Warst schneller als ich korrigiert habe
Titel: Re: Agent
Beitrag von: HipSlu am 26.04.02 - 19:10:10
ist mir ja schön langsam peinlich.... aber jetzt bekomm ich bei "            Set doc2 = view2.GetDocumentByKey( keys )    " => "Too many keys"

:)
Titel: Re: Agent
Beitrag von: doliman am 26.04.02 - 19:12:23
versuchsmal mit
Set doc2 = view2.GetDocumentByKey( keys, true )
Titel: Re: Agent
Beitrag von: HipSlu am 26.04.02 - 19:17:28
leider.... gleiche Fehlermeldung
Titel: Re: Agent
Beitrag von: doliman am 26.04.02 - 19:18:23
schick mir kurz die DB
mail@doleschel.de
das geht schneller
Titel: Re: Agent
Beitrag von: HipSlu am 02.05.02 - 13:44:03
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