Domino 9 und frühere Versionen > ND8: Entwicklung

LS - Per Button editierbare Mail aus einer DB erstellen mit Datenübernahme

<< < (3/4) > >>

Peter Klett:

--- Zitat von: deepsee3 am 06.04.13 - 13:31:26 ---Wie schon gesagt ... Anfänger ...

Versuch es also nochmal zu verstehen (Danke für eure Geduld ... )

Das ist eine Frontend Erstellung  ...


Dim maildoc As NotesUIDocument
Set Maildoc = ws.ComposeDocument(vMailDB(0), vMailDB(1), "Memo")


also muss ich die über die Frontendbefehle auch füllen. In meinem Beispiel hab ich das jetzt mit einem GOTOField gemacht  ...
( ... oder wäre ein FieldSetText besser ?)

soweit richtig ?



--- Ende Zitat ---
Ja, richtig, würde ich aber niemals so machen. Die Befüllung von Feldern im Frontend setzt voraus, dass die Felder bearbeitbar sind. Besser ist die Erstellung im Backend, Felder versorgen, und dann mit NotesUIWorkspace.EditDocument öffnen, wie Tode schon geschrieben hat.

Eine Ausnahme stellt die Erstellung von Dokumenten dar, die Werte aus dem markierten Dokument übernehmen sollen, wenn es so in der Maske eingestellt ist und die Feldformeln in den Feldern die Übernahme regeln. Da hilft nur ein ComposeDocument (oder alle Übernahmen in das Script auslagern). Bei genau solch einer Routine mache ich es genau so, wie Du beschrieben hast.

Hier ein singemäßer Auszug einer uralten Scriptbibliothek:

   Dim newuidoc As NotesUIDocument
   Set newuidoc = workspace.ComposeDocument ("", "", doc.Form (0))
   
   Dim newdoc As NotesDocument
   Set newdoc = newuidoc.Document
   If neueAusgabe Then
      newdoc.Version = doc.Version (0) + 1
      newdoc.VDokument = doc.Dokument (0)
      Call newuidoc.RefreshHideFormulas
   End If

Das funktioniert schon seit Notes 4 unter OS/2 bis heute, und da ist nach dem ComposeDocument das Document im NotesUIDocument gesetzt.

Peter Klett:

--- Zitat von: deepsee3 am 06.04.13 - 13:43:05 ---Tja ... in Vergangenheit habe ich nur Daten manipuliert ... als in bestehenden Dokumenten Änderungen oder Workflows angestossen.
In diesem Fall jetzt soll das Mail ja noch nicht gespeichert werden , sondern nur erstellt werden ... damit der Vertrieb noch Änderungen vermerken kann.

Also vorher speichern is leider nicht  :(



--- Ende Zitat ---
Ein Dokument im Backend zu erstellen und dann über workspace.EditDocument ins UI zu bringen, heißt nicht, es vorher speichern zu müssen. Also so:

Dim doc As New NotesDocument (db)
doc.Form = "meineForm"
doc.Feld1 = "Wert1"
doc.Feld2 = "Wert2"
Call workspace.EditDocument (True, doc)

Dann ist das im Backend erstellte Dokument im Frontend geöffnet. Verlässt der Benutzer das Dokument, ohne es zu speichern, ist es auch nicht in der Datenbank gespeichert.

Peter Klett:
Sowas macht mich immer irre:

Habe gerade beide Varianten, also die von deepsee3 und die aus unserer Bibliothek, durch den Debugger laufen lassen. Bei unserer Bibliothek ist Document des NotesUIDocument nach dem Compose gesetzt, bei der anderen Variante nicht.

Warum das so ist, kann ich im Augenblick nicht nachvollziehen. Ein Unterschied besteht darin, dass die db, in der das Ganze passiert, an unsere Routine als Parameter übergeben wird, und damit globaler definiert ist. Ansonsten kann ich nichts erkennen ...

WildVirus:
Vor lauter Diskussion Front-/Backend haben wir alle den entscheidenen Passus übersehen.

EnterSendTo vs. SendTo

Das Feld, dass die Benutzer im Frontend der Mail sehen, ist EnterSendTo. Und der Code im ersten Post schreibt in SendTo. Und in das Feld SendTo schreibt der Agent auch sauber rein.

Mit einem

--- Code: ---Call maildoc.fieldsettext("entersendto", varindex(0))
--- Ende Code ---
vor dem Aufruf von

--- Code: ---Set docm = Maildoc.Document
--- Ende Code ---
klappt es hingegen.

@Peter - Kann es ein Unterschied sein, ob die MailDB als Variant oder als NotesDatabase deklariert wurde ?

Peter Klett:

--- Zitat von: WildVirus am 06.04.13 - 15:08:30 ---@Peter - Kann es ein Unterschied sein, ob die MailDB als Variant oder als NotesDatabase deklariert wurde ?

--- Ende Zitat ---
Die Datenbank ist beide Male als NotesDatabase deklariert, es dreht sich aber bei der Scriptbibliothek nicht um die Maildatenbank, da geht es allgemein um die Erstellung von Dokumenten in beliebigen Datenbanken.

Bei meinen Tests mit der Routine von deepsee3 habe ich auch keine Maildatenbank verwendet, sondern eine einfache sinnfreie, die ich für Testzwecke benutze.

Mich hat gewundert, dass deepsee3 nie von Fehlermeldungen geschrieben hat, bei mir trat nämlich ein Object variable not set auf, als ich auf das NotesUIDocument.Document zugegriffen hatte.

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln