Domino 9 und frühere Versionen > ND8: Entwicklung

neue Dokumente erstellen

<< < (2/6) > >>

guesswho:
Christoph,

du hast das doc zwar deklariert, aber nicht gesetzt....

Vermute mal, du willst das aus der View holen, dann hol dir das doc vor "set newdoc = ..." mit z.B. set doc = view.GetDocumentByKey("dein Schlüsselwort") oder auf andere Art.

doc.FeldA kannst du erst greifen, wenn doc auf ein Dokument verweist.

Die View muss dazu sortiert sein.

Jo

samWare:
Wenn du was aus nem Feld auslesen willst muss das so aussehen: "doc.FeldA(0)" <- erster Wert

In deinem Beispiel also so:

newdoc.Feld1 = doc.FeldA(0)

Zudem musst du dir das "doc" ja erstmal holen bevor du es verwenden kannst  ;) Jo hat schon einige Methoden aufgezeigt. Vllt. kann man dir ja ein wenig helfen:

"Agent behandelt Doc wenn es erstellt oder verändert wurde"... um das Ziel zu erreichen, könntest du beispielsweise in die Form die behandelt werden soll, ein "Status"-Feld setzen. Wenn du es bearbeitest bzw. erstellst setzt du ein Flag rein (z.B: den Wert 1). Jetzt baust du eine Ansicht die nur Dokumente mit deiner Form (Form="deineForm") und dem Feld (Status=1) anzeigt. Die initialisierst du dann im Agenten und durchläufst die Dokumente (Schau dir dazu mal was zum Thema "DocumentCollection" bzw. "EntryCollection" an). Wenn dein Agent im jeweiligen Dokument das getan hat was er tun muss, setzt du das Flag auf 0 (Sodass das Dokument nicht mehr in deiner Ansicht auftaucht). Und das machst du dann quasi mit allen Dokumenten in der Ansicht.

Vllt. machst du es ja auch die Tour. Ist auf jeden Fall eine der leichtesten und besten Lösungen. Wenn du weitere Hilfe brauchst helf ich dir gerne..

mfg Sam

koehlerbv:

--- Zitat von: samWare am 26.08.09 - 08:49:38 ---Wenn du was aus nem Feld auslesen willst muss das so aussehen: "doc.FeldA(0)" <- erster Wert

In deinem Beispiel also so:

newdoc.Feld1 = doc.FeldA(0)

--- Ende Zitat ---

Sam, der Zugriff nur auf das erste Element des Items ist nicht nur unnötig, sondern kann sogar falsch sein (wenn FeldA Mehrfachwerte enthält).
Und ob man wirklich einen Agent braucht oder ein Dokument wieder aus einer Ansicht herausfischen muss, warten wir erst einmal ab - bis Christoph sich hier mit mehr Infos wieder meldet.

Bernhard

tooot:
Hallo,

erstmal noch vielen Dank für die schnellen Antworten. Das ist echt klasse hier. Ich habe versucht die Tipps umzusetzen. Also erst erstes habe ich ein Feld in meiner ersten Form erzeugt das true anzeigt wenn ein bestimmtes Feld sich geändert hat.

Danach habe ich eine passende View erstellt und die erste Spalte (mit dem Feld) "Categorized". Dies funktioniert auch gut. Die View zeigt jetzt alle meine Dokumente der jeweiligen Form an, kategorisiert mit true und false.

So jetzt zu meinen eigntl. Problem. Ich möchte jetzt einen Agenten der mir neue Dokumente mit einer anderen Form erstellt wenn die jetzigen Dokumente "true" sind.

Sub Initialize
   
   Dim ws As New NotesUIWorkspace
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim view As NotesView
   Dim doc As NotesDocument
   Dim newdoc As NotesDocument
      
   Set db = session.CurrentDatabase
   
   Set view = db.GetView("Neue_View")
   Set doc = view.GetDocumentByKey("Feld_Flag")
   
   Set newdoc = New NotesDocument(db)
   newdoc.Form = "Form2"
   
   Do Until LastCodeChange="false"
      
                newdoc.Feld2 = doc.FeldA(0)
                newdoc.Feld3 = doc.FeldB(0)
                newdoc.Feld4 = doc.FeldC(0)
                newdoc.Feld5 = doc.FeldD(0)
      Call newdoc.Save(True,True)
      Set doc=view.getnextdocument(doc)
   Loop
   
End Sub

Die Felder enthalten keine Mehrfachwerte.

@Sam zu DocumentCollection habe ich in der Hilfe nur Java sachen gefunden?


Ja leider funktioniert der Agent immer noch nicht der Fehler bleibt der selbe:object variable not set in der Zeile: newdoc.Feld2 = doc.FeldA(0)



dirk_2909:
Hallo

Ich würde folgendermaßen vorgehen:

- im Queryopen eine Variable auf false setzen (Bsp.: DocIsModified)
- Dort weitere Werte des docs merken (damit man sie später vergleichen kann)
- im QueryClose (o.ä) prüfen, ob sich was geändert hat
- wenn ja, dann neues doc erzeugen- Bsp:


--- Code: ---…
if Not DocIsModified Then Exit Sub
'if the doc is new or modified
Dim doc as NotesDocument
Dim s as New NotesSession
dim db as NotesDatabase
dim newdoc as NotesDocument

set doc = Source.Document
set db = s.CurrentDatabase
set newdoc = db.CreateDocument
call newdoc.ReplaceItemValue( "Form", "<Formname>" )
call newdoc.ReplaceItemValue( "Feld1", doc.getItemValue( "FeldA" ) )
call newdoc.ReplaceItemValue( "Feld2", doc.getItemValue( "FeldB" ) )

Call newdoc.Save( true, true, true)


--- Ende Code ---

(ungetestet)


Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln