Autor Thema: Richtextfeld wird nicht ohne uidoc.refresh gespeichert  (Gelesen 5926 mal)

Offline CK

  • Frischling
  • *
  • Beiträge: 7
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)

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)
« Letzte Änderung: 01.02.08 - 08:55:13 von CK »

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.292
  • Geschlecht: Männlich
Re: Richtextfeld wird nicht ohne uidoc.refresh gespeichert
« Antwort #1 am: 29.01.08 - 10:57:39 »
Beim Speichern in Kombination mit RichTextfeldern mach ich immer noch ein:

rtItem.saveToDisk = true

vor dem Speichern, das sollte helfen ;)


bubble
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline DerAndre

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.655
  • Geschlecht: Männlich
  • Keep cool!
Re: Richtextfeld wird nicht ohne uidoc.refresh gespeichert
« Antwort #2 am: 29.01.08 - 11:06:54 »
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?
André

Elterninitiative diabetischer Kinder und Jugendlicher e.V.
-----------------------------------------------------------------------------
Fliegen ist die Kunst auf den Boden zu Fallen, aber daneben.
-----------------------------------------------------------------------------
Etwas mehr Hardware dazu zu kaufen ist viel billiger als
Software besser zu machen. ( Niklaus Wirth )

Offline CK

  • Frischling
  • *
  • Beiträge: 7
Re: Richtextfeld wird nicht ohne uidoc.refresh gespeichert
« Antwort #3 am: 29.01.08 - 11:21:00 »
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.

Offline CK

  • Frischling
  • *
  • Beiträge: 7
Re: Richtextfeld wird nicht ohne uidoc.refresh gespeichert
« Antwort #4 am: 29.01.08 - 11:25:45 »
Ich habe es mal mit doc.SaveMessageOnSend = True getestet, aber leider wird das RT-Feld weiterhin ignoriert.

Offline DerAndre

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.655
  • Geschlecht: Männlich
  • Keep cool!
Re: Richtextfeld wird nicht ohne uidoc.refresh gespeichert
« Antwort #5 am: 29.01.08 - 11:38:40 »
Ah, jetzt habe ich die Zeile auch gesehen. Schrift ist für meine Augen zu klein...


Hast Du das auch schon versucht:

Call notesRichTextItem.Update
André

Elterninitiative diabetischer Kinder und Jugendlicher e.V.
-----------------------------------------------------------------------------
Fliegen ist die Kunst auf den Boden zu Fallen, aber daneben.
-----------------------------------------------------------------------------
Etwas mehr Hardware dazu zu kaufen ist viel billiger als
Software besser zu machen. ( Niklaus Wirth )

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Richtextfeld wird nicht ohne uidoc.refresh gespeichert
« Antwort #6 am: 29.01.08 - 11:43:23 »
Warum die ParentDocumentUNID bei einem uidoc.Refresh verloren geht, verstehe ich nicht so ganz. Aber hast du mal versucht den Refresh mal in den Erstellen-Button zu verlagern?.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline CK

  • Frischling
  • *
  • Beiträge: 7
Re: Richtextfeld wird nicht ohne uidoc.refresh gespeichert
« Antwort #7 am: 29.01.08 - 11:53:51 »
@DerAndre

Dein Vorschlag mit "Call notesRichTextItem.Update" ist leider nicht umsetzbar, weil der Zugriff auf das RT-Feld erst nach dem Refresh des uidoc möglich ist und die ParentDocumentUNID in diesem Schritt verloren geht, welche jedoch dringend benötigt wird.


Hallo Axel,

der Refresh bezieht sich auf das Frontenddokument und kann daher erst erfolgen nachdem ich es im NotesUIWorkspace geöffnet habe.

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Richtextfeld wird nicht ohne uidoc.refresh gespeichert
« Antwort #8 am: 29.01.08 - 12:04:02 »
Hallo Axel,

der Refresh bezieht sich auf das Frontenddokument und kann daher erst erfolgen nachdem ich es im NotesUIWorkspace geöffnet habe.

Ja, und wo ist da das Problem?

...
Dim uidocNew = NotesUIDocument
...

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)   


Set uidocNew = uiws.EditDocument(True, docNew)
Call uidocNew.Refresh(True)

...


Axel

Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Richtextfeld wird nicht ohne uidoc.refresh gespeichert
« Antwort #9 am: 29.01.08 - 12:15:28 »
Andere Baustelle, aber ein ähnliches Problem.
Damit funktioniert es. Ohne Refresh oder Reload.
Code
Sub Click(Source As Button)
' This Aktion finds a system based on specific data located
Dim thissession As New NotesSession
Dim thiswksp As New notesuiworkspace
Dim thisdb As NotesDatabase
Dim thisuidoc As NotesUIDocument
Dim ok As Boolean
Dim userlanguage As String
Dim doc As notesdocument
Set thisdb = thissession.CurrentDatabase
Set thisuidoc = thiswksp.CurrentDocument
' should be saved before calling because it need to be a reply
If thisuidoc.IsNewDoc = True Then
Call thisuidoc.Save
End If
Set doc = thisuidoc.Document
doc.txtWflDowntime = "0"
userlanguage = findcurrentuserlanguage
OK = GetdocumentFromDatabase(thisuidoc, CALLPARAMETER, buildlanguageliststring(userlanguage,GetLanguageitem(userlanguage, "DOWNTIME ACTIONS & STRINGS")),"")
Call Doc.Save( True, False) ', True )
Doc.saveoptions="0"
Call thisuidoc.close
Set thisuidoc=thiswksp.editdocument(True,Doc,False)
End Sub

Dafür aber mit
Code
Case 4, 7
' this should do the trick for creating a Doclink
Set copytortitem = me_thisuidoc.Document.CreateRichTextItem(foundfield(1))
Call copytortitem.AppendDocLink(founddoc,me_founddb.Title)
Call copytortitem.update
Call copytortitem.Compact
Update und Compact auf dem RtItem, weil nämlich sonst beim ersten Klicken auf den Doclink der Client hasta la vista sagt.

Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline CK

  • Frischling
  • *
  • Beiträge: 7
Re: Richtextfeld wird nicht ohne uidoc.refresh gespeichert
« Antwort #10 am: 29.01.08 - 13:49:41 »
@Axel

Ok das hatte ich vorher nicht versucht, weil ich von etwas anderem ausgegangen bin, aber auch an dieser Stelle bewirkte das Refresh, dass meine ParentDocumentUNID verloren geht.


Hallo Thomas Schulte,

wenn ich den Quellcode richtig verstanden habe, soll das sichern des Frontends die Speicherung des RT-Feldes bewirken, sofern es sich um ein neues Dokument handelt.
Bei meinem Problem geht dies leider nicht, weil durch die Ausführung von "Call uidoc.Save", mein RT-Feld zwar gespeichert wird, aber meine ParentDocumentUNID erneut verloren geht, oder habe ich etwas übersehen?

Vielleicht ist die Überschrift für mein Problem etwas schlecht gewählt, dass uidoc.save wäre eine Alternative zu uidoc.refresh(true). Dies hat jedoch zur Folge das meine ParentDocumentUNID gelöscht wird, obwohl ich diese benötige. Ich suche daher nach einer Lösung die dafür sorgt, dass mein Dokument das RT-Feld und die ParentDocumentUNID speichert und versendet, jedoch ohne weitere Variable oder verstecktem Feld,  dass dazu benutzt wird die ParentDocumentUNID zu speichern, um im Anschluss über diesen Wert das ursprüngliche Dokument zu suchen, um eine erneute Zuordnung mit makeResponse() zu realisieren.

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Richtextfeld wird nicht ohne uidoc.refresh gespeichert
« Antwort #11 am: 29.01.08 - 13:53:27 »
Dein Makeresponse sollte direkt von einem Newdoc.save gefolgt werden. Dann verlierst du auch die Zuordnung nicht mehr.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline CK

  • Frischling
  • *
  • Beiträge: 7
Re: Richtextfeld wird nicht ohne uidoc.refresh gespeichert
« Antwort #12 am: 29.01.08 - 14:53:15 »
Danke für deinen Vorschlag.

Ich habe nun ein docnew.save nach meinem makeresponse eingefügt.

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 docNew.Save(True,False,False)
Call uiws.EditDocument(True, docNew)

Sendenfunktion (Maske)
Code
Dim uiws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Set uidoc = uiws.CurrentDocument
Set doc = uidoc.Document
'Ich habe beide Methoden einzeln an dieser Stelle
'eingefügt, jedoch wurde erneut die ParentDocumentUNID
'gelöscht.
uidoc.Refresh(True)
uidoc.Save(false)
Call doc.Send(False)
Call uidoc.Close(True)

Leider wird, wie im Quellcode beschrieben, die ParentDocumentUNID auch hier wieder gelöscht.

Ein weiteres Problem wäre, selbst wenn es so funktionieren würde, dass sofern der Benutzer sich dafür entscheidet das Memo doch nicht zu schreiben, dass Dokument in der Datenbank verbleiben würde.
Dies hätte zur Folge das eine weitere Überprüfung erfolgen müßte, die dafür sorgt das nicht versendete Dokumente gelöscht werden.

Nach Möglichkeit sollte die Alternative, weniger umständlich sein als meine Lösung mit der temporären Speicherung der ParentDocumentUNID.

Offline e_bg

  • Frischling
  • *
  • Beiträge: 1
Re: Richtextfeld wird nicht ohne uidoc.refresh gespeichert
« Antwort #13 am: 31.01.08 - 10:10:11 »
Prüfe mal bitte den Maskentyp (Eigenschaft Document). Damit $Ref beim uisave erhalten bleibt muss dieser vom Typ "Antwort" sein.

Offline CK

  • Frischling
  • *
  • Beiträge: 7
Re: Richtextfeld wird nicht ohne uidoc.refresh gespeichert
« Antwort #14 am: 01.02.08 - 08:53:13 »
Hallo e_bg,

vielen Dank für den Hinweis, das war mein Fehler.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz