Domino 9 und frühere Versionen > ND8: Entwicklung
neue Dokumente erstellen
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