Autor Thema: Richtextfeld wird nicht ohne uidoc.refresh gespeichert  (Gelesen 5798 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.290
  • 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