Domino 9 und frühere Versionen > ND6: Entwicklung

Richtextfeld wird nicht ohne uidoc.refresh gespeichert

(1/3) > >>

CK:
In einer Ansicht sorgt die unten angegebene Funktion für die Erstellung eines Backenddokumentes, welches dem in der Ansicht ausgewählten Dokument angehangen wird. Das Dokument selber wird im Anschluss geöffnet und entspricht einer "Memo" Maske, die für den Mailverkehr benutzt wird. Sollte nun die Maske versendet werden, wird das Richtextfeld nicht übernommen.
Dies kann durch das hinzufügen eines uidoc.refresh(true) behoben werden, der Nachteil ist jedoch das der Wert des ParentDocumentUNID verloren geht.
Eine Lösung dafür wäre das hinzufügen eines weiteren Feldes, dass vor dem uidoc.refresh(true) die ParentDocumentUNID zwischenspeichert, um im Anschluss die Beziehung erneut herzustellen.
Dies ist jedoch relativ umständlich und ich wollte anfragen ob jemand eine Alternative für dieses Problem kennt.

Vielen Dank im voraus!

Funktion zur Erstellung der anzuhängenden Mail (Ansicht)

--- Code: --- Dim uiws As New NotesUIWorkspace
Dim sess As New NotesSession
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim docNew As NotesDocument
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection

Set db = sess.CurrentDatabase
Set dc = db.UnprocessedDocuments
Set doc = dc.GetFirstDocument
Set docNew = New NotesDocument( db )

Call docNew.ReplaceItemValue("Form", "Memo")
Call docNew.MakeResponse(doc)
Call uiws.EditDocument(True, docNew)

--- Ende Code ---

Sendenfunktion (Maske)

--- Code: --- Dim uiws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument

Set uidoc = uiws.CurrentDocument
Set doc = uidoc.Document

'uidoc.Refresh(True)

Call doc.Save(True,False,False)
Call doc.Send(False)
Call uidoc.Close(True)

--- Ende Code ---

jBubbleBoy:
Beim Speichern in Kombination mit RichTextfeldern mach ich immer noch ein:

rtItem.saveToDisk = true

vor dem Speichern, das sollte helfen ;)


bubble

DerAndre:
true ist default.

Ist das der ganze Code?

RT-Felder werden erst nach dem speichern zu dem was sie sein sollen.
Deswegen würde es mich wundern, wenn ein einfaches uidoc.refresh das RT-Feld anzeigen sollte.
Das ist immer mit viel Aufwand verbunden.

Setz noch das SaveMessageOnSend = true dann brauchst du es nicht extra zu speichern

Welches Dokument wird geöffnet?
Das neue oder das aus der Ansicht?

CK:
Hallo jBubbleBoy,

vielen Dank für deinen Vorschlag.

Leider ist es nicht möglich das Notesrichtextfeld aus dem Dokument auszulesen, ohne ein ein uidoc.refresh(true) zu benutzen.
Denn im Debugger wird, bei meinem doc, dass Richtextfeld erst nach der Ausführung des Refreshs angezeigt und dieser Refresh sorgt dafür das die ParentDocumentUNID verloren geht.
Also müßte ich auch hier wieder ein zusätzliches Feld oder eine Variable einbauen, um die ID zu behalten und das würde ich gerne versuchen zu umgehen. Daher suche ich eine Alternative um an das Notesrichttextfeld zu gelangen ohne das uidoc.refresh(true) zu benutzen.
Denn nachdem ich den Refresh ausgeführt habe ist es ein normales item, dass im doc gefunden wird und mit meinem doc.Save(True,False,False) auch abgespeichert wird.


Hallo DerAndre,

wie ich schon geschrieben habe, wird nach der Ausführung des Refreshs, das RT-Feld auch im Debugger angezeigt.

Geöffnet wird das neu erstellte Backenddokument nachdem ich mit Call docNew.MakeResponse(doc) die Beziehung zu dem ausgewählten Dokument aus der Ansicht herstelle.

Deinen Vorschlag mit SaveMessageOnSend = true werde ich jezt erstmal testen.

CK:
Ich habe es mal mit doc.SaveMessageOnSend = True getestet, aber leider wird das RT-Feld weiterhin ignoriert.

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln