Autor Thema: Felder aus dem gerade angezeigten Dokument in ein neues kopieren....  (Gelesen 3529 mal)

Offline Scotty67

  • Aktives Mitglied
  • ***
  • Beiträge: 146
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 ?

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Verwende doch NotesDocument.CopyAllItems.

Bernhard

Offline Klafu

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.944
  • Geschlecht: Männlich
  • Remember the Cookies!
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
„Der einzige Mensch, der sich vernünftig benimmt, ist mein Schneider. Er nimmt jedesmal neu Maß, wenn er mich trifft, während alle anderen immer die alten Maßstäbe anlegen in der Meinung, sie paßten auch heute noch...“

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
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)

« Letzte Änderung: 26.04.11 - 16:41:50 von Peter Klett »

Offline Scotty67

  • Aktives Mitglied
  • ***
  • Beiträge: 146
....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 ?

Offline oxyd21

  • Senior Mitglied
  • ****
  • Beiträge: 371
  • Geschlecht: Männlich
Entweder ein ComputeWithForm oder nach dem CopyAllItems das Feld überschreiben.

VG, Michael

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
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

Offline oxyd21

  • Senior Mitglied
  • ****
  • Beiträge: 371
  • Geschlecht: Männlich
das hab ich wohl überlesen  ;D

Offline Scotty67

  • Aktives Mitglied
  • ***
  • Beiträge: 146
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)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
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

Offline Scotty67

  • Aktives Mitglied
  • ***
  • Beiträge: 146
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 ?

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
newdoc.DocAuthor  = NotesSession.UserName

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
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.



Offline Scotty67

  • Aktives Mitglied
  • ***
  • Beiträge: 146
Ich sag ganz HERZLICHEN DANK - Ihr habt mir super weitergeholfen ! :-))) DANKE

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz