Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Scotty67 am 26.04.11 - 16:29:26
-
Ein Dokument das im Vordergrund steht soll kopiert werden.
Die Felder sollen 1:1 übernommen werden.
Simple wäre es über die Routine "SaveNewVersion" gegangen aber es gibt das leider Probleme auf die ich jetzt nicht näher eingehen möchte. Also wie gesagt der Inhalt der Felder soll in das neu erstellte Document "Set uidoc = workspace.ComposeDocument ( "", "", "extP" )" übernommen werden.
Wie kann ich jetzt z.B. das Bodyfeld 1:1 übernehmen ?
Das ComposeDocument funkt ja ganz gut aber wie übernehme ich jetzt die Felder das selbige gleich automatisch befüllt werden ?
-
Verwende doch NotesDocument.CopyAllItems.
Bernhard
-
Wenn du aus dem Dokument heraus ein neues erstellst, solltest du die Felder übernehmen können.
Einfach den Feldname des ersten Dokuments in das Feld im 2. Dokument einfügen.
Oder geht das nur in Verbindung mit Antwortdokumenten ?
Chris
-
Wenn Du mit Compose arbeiten willst, trage in die Maske ein, "Formeln übernehmen Werte aus gewähltem Dokument". In die Felder trägst Du als Vorgabewert den Feldnamen ein (also Vorgabewert des Feldes "Body" ist Body).
Aternativ kannst Du auch mit CopyAllItems arbeiten (wie Bernhard geschrieben hat), dann solltest Du aber auf das Compose verzichten und stattdessen das Dokument erst erstellen, füllen und dann öffnen.
Dim newdoc As New NotesDocument (db)
Call doc.CopyAllItems (newdoc)
Call workspace.EditDocument (True, newdoc)
-
....maaaa ihr seid echte Schätze !!!! :o :)
jetzt hab ich aber ein problem das ein Feld in dem formular ein Datums Feld ist und das Property "computed when composed" hat
ich gehe den von bernhard/peter vorgeschlagenen weg....
daher meine zusatzfrage kann ich nachdem das neue dokument im vordergrund steht "on the fly" das aktuelle datum in das feld zaubern ?
-
Entweder ein ComputeWithForm oder nach dem CopyAllItems das Feld überschreiben.
VG, Michael
-
ComputeWithForm bringt aber nichts bei einem bereits vorhandenen Wert in einem CWC-Feld. Dieses Item muss tatsächlich im Verlauf des Erstellen-Prozesses explizit nachträglich gesetzt (überschrieben) werden.
Bernhard
-
das hab ich wohl überlesen ;D
-
Entweder ein ComputeWithForm oder nach dem CopyAllItems das Feld überschreiben.
VG, Michael
danke, hab ich jetzt mal so gelöst
Dim dateTime As New NotesDateTime( "" )
Call dateTime.SetNow
Set doc.DocCreationDate = dateTime
Call doc.CopyAllItems (newdoc)
Call workspace.EditDocument (True, newdoc)
-
Das ist aber ein nicht ganz sicheres Verfahren (falls Du mal später den Code ergänzt in Bezug auf doc).
Ich würde den Zeitwert explizit in newdoc setzen - und nicht so ein G'schiss mit NotesDateTime veranstalten:
Call doc.CopyAllItems (newdoc)
newdoc.DocCreationDate = Now
Call workspace.EditDocument (True, newdoc)
HTH,
Bernhard
-
Das ist aber ein nicht ganz sicheres Verfahren (falls Du mal später den Code ergänzt in Bezug auf doc).
Ich würde den Zeitwert explizit in newdoc setzen - und nicht so ein G'schiss mit NotesDateTime veranstalten:
Call doc.CopyAllItems (newdoc)
newdoc.DocCreationDate = Now
Call workspace.EditDocument (True, newdoc)
HTH,
Bernhard
danke bernhard ! :-)
darf ich da noch eine frage anknüpfen, wenn ich ein Feld habe (Type= NAMES)...wie kann ich vom gerade agierenden Benutzer den
Name in dieses Feld schreiben, also z.B. ich öffne ein Dokument das ich nicht erstellt habe und ich stehe diesem Feld "DocAuthor" nicht
drinnen, da ich der doc-kopierende bin brauche ich im neuen Dokument meinen Namen
Wie setze ich den Wert dieses Felds ?
-
newdoc.DocAuthor = NotesSession.UserName
-
Mit allen Feldern, die berechnet beim Anlegen und vom aktuellen Kontext (also z.B. User und Datum) abhängig sind, kannst Du ganz einfach umgehen, indem Du sie vor dem Öffnen löschst.
Call doc.CopyAllItems (newdoc)
Call newdoc.RemoveItem ("DocCreationDate")
Call newdoc.RemoveItem ("DocAuthors")
Call workspace.EditDocument (True, newdoc)
Die Felder werden dann beim Öffnen neu gerechnet, da sie ja nicht existieren. Größter Vorteil dieser Methode ist, dass die Gestaltung der Felder an einer Stelle (hier dem Vorgabewert in der Maske) verbleibt. Wenn sich da in Zukunft mal was dran ändert, denkt niemand an die Änderung des Scriptes.
-
Ich sag ganz HERZLICHEN DANK - Ihr habt mir super weitergeholfen ! :-))) DANKE