Autor Thema: RichtText im UiDoc über Backend ändern  (Gelesen 3663 mal)

Offline McGo

  • Frischling
  • *
  • Beiträge: 11
  • Geschlecht: Männlich
RichtText im UiDoc über Backend ändern
« am: 17.04.08 - 10:39:22 »
Hallo,

ich möchte gerne beim Speichern eines (neuen oder bestehenden) Dokumentes ein Richtextfeld (Anmerkung) in ein anderes RichTextfeld (Historie) kopieren und das erste löschen. Der einzufügende Inhalt soll von einem Abschnitt umgeben werden.

Hier der Code im QuerySave Event der Maske:
Code
	Dim session As New Notessession
	Dim doc As NotesDocument
	Dim rtianm As Variant
	Dim rtidet As NotesRichTextItem
	
	Set doc = source.document
	Set rtidet = doc.GetFirstItem("Historie")
	If rtidet Is Nothing Then
		Set rtidet = New NotesRichTextItem (doc, "Historie")
	End If
	
	Set rtianm = doc.GetFirstItem ("Anmerkung")
	If Not rtidet Is Nothing Then
		If (Len(rtianm.values > 0)) Then
		        Call rtidet.BeginSection(Now() & " - " & session.CommonUserName)
		        Call rtidet.AppendRTItem(rtianm)
		        Call rtidet.EndSection()
			Call doc.RemoveItem("Anmerkung")
		End If
	End If
	
	Call doc.Save(False, True)

Der Code funktioniert soweit und im Debugger habe ich auch gesehen, dass der Inhalt übernommen und das Dokument gepeichert wird, denn nach dem doc.Save gibt es in der doc Instanz ein Item "Historie" mit den gewünschten Inhalten.  Bereits im nächsten Event (PostSave) ist aber die Variable doc wieder in dem Zustand vor dem Speichern.

Ich guck mir Lotus Script grad seit ca. 1 Jahr mal wieder an und hab vermutlich irgendwas grundlegendes vergessen. Nur was?!!?

Vielen Danke,
Mirko
Mirko Haaser · Bremen

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: RichtText im UiDoc über Backend ändern
« Antwort #1 am: 17.04.08 - 11:44:53 »
... und hab vermutlich irgendwas grundlegendes vergessen. Nur was?!!?

wahrscheinlich ein Reopen des Dokumentes.


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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: RichtText im UiDoc über Backend ändern
« Antwort #2 am: 17.04.08 - 11:47:58 »
Das Reopen ist es hier nicht, da wir ja bereits im QuerySave sind - und hier wird derzeit mit dem Hintern eingerissen, was man gerade mit den Händen aufgebaut hat:
Vor dem eigentlichen Speichern wird ein RTI im Backend geändert. Dann erst erfolgt (*Query*Save) erst das Speichern des NotesUIDocuments - und als eine Besonderheit von RTIs wird hier der gerade aktuelle Inhalt des RTFs im Frontend ins RTI geschrieben - die Backend-Änderung wird überschrieben.

Der Backend-Teil für das RTI muss also erst später erfolgen - im PostSave oder im QueryClose.

Oder man macht die Änderung vor dem QuerySave - und richtig, dann ist ein Reopen erforderlich.

Bernhard

Offline McGo

  • Frischling
  • *
  • Beiträge: 11
  • Geschlecht: Männlich
Re: RichtText im UiDoc über Backend ändern
« Antwort #3 am: 17.04.08 - 12:09:43 »
Vielen Dank!

Eine Änderung im QueryClose macht dann am meisten Sinn, da ich ja eine Historisierung abbilden möchte. Klappt auch prima.

Viele Grüße,
Mirko
Mirko Haaser · Bremen

Offline McGo

  • Frischling
  • *
  • Beiträge: 11
  • Geschlecht: Männlich
Re: RichtText im UiDoc über Backend ändern
« Antwort #4 am: 22.04.08 - 09:51:18 »
Hm.. Da ich bei der Nutzung des QueryClode einen Fehler erhalte (soll hier aber erstmal egal sein) und den Beitrag von Bernhard verstehen möchte, habe ich die Historisierung mal ins QuerySave eingebaut um den Code zusammenzuhalten.

Wenn ich im QuerySave das Notesdocument in NotesUiDocument.document verändere schreibst du ja, dass die Änderungen erst wieder ins notesuidocument übernommen werden, wenn es per reopen dazu manuell bewegt wird.

Trifft das für alle Backendänderungen zu? Kann ich also das NotesDocument nach Lust und Laune ändern, danach das NotesUiDocument.Reload und die Änderungen im Backend werden durch das Speichern übernommen? Wohl gemerkt: Ich befinde mich im QuerySave...

Dieses Stück Code funktioniert so nämlich nicht:
Code
Sub Querysave(Source As Notesuidocument, Continue As Variant)
	'Historisierung
	Dim doc As NotesDocument
	Dim rtianm As Variant

	Set doc = source.document
	Set rtianm = doc.GetFirstItem ("Anmerkung")
	If Not rtianm Is Nothing Then
        'Historisierung durchführen
		Dim session As New Notessession
		Dim rtihis As NotesRichTextItem
		Dim rtstyle As NotesRichTextStyle
		Dim rtnav As NotesRichTextNavigator
		Dim leer As Variant
		
	'Historiefeld initialisieren
		Set rtihis = doc.GetFirstItem("Historie")
		If rtihis Is Nothing Then
			Set rtihis = New NotesRichTextItem (doc, "Historie")
		End If
		
	'Einfügeoperator an den Beginn des Historie-Items setzen.
		Set rtnav = rtihis.CreateNavigator
		If rtnav.FindFirstElement(3) Then
			leer = False 
		Else 
			leer = True
		End If
		If Not leer Then Call rtihis.BeginInsert(rtnav)
		
	'Content einfügen
		Set rtstyle = session.CreateRichTextStyle
		rtstyle.fontsize = 8
		rtstyle.Bold = True
		Call rtihis.AppendStyle(rtstyle)
		Call rtihis.AppendText (Now() & " - " & session.CommonUserName)			
		Call rtihis.AddNewLine (1)			
		Call rtihis.AppendRTItem(rtianm)
		Call rtihis.AddNewline (2)

	'Abschlussarbeiten 
		If Not leer Then Call rtihis.EndInsert()

		Call doc.RemoveItem("Anmerkung")
'[1] Speichern ?!?
	End If
	Call source.Reload

'[2] Im Debugger alles OK.
	Call source.Close
End Sub

An der Stelle [2] ist im Debugger im document des source Objektes das Anmerkung Feld wie gewünscht entfernt und in der Historisierung ein neuer Abschnitt eingefügt. Alles bestens. Nach dem Querysave werden keine Routinen im Debugger mehr durchlaufen in denen Code enthalten ist. Wenn ich das Dokument anschliessend öffne, steht der Text immernoch im Feld "Anmerkung" und in der Historie ist nix enthalten  ???

Liegt das daran, dass ich das Dokument vorher [1] sichern muss? Bringt jedoch nichts. Oder ist source.reload kein angesprochenes reopen?

Bin auf eure Rückmeldung gespannt,
Mirko
Mirko Haaser · Bremen

Offline McGo

  • Frischling
  • *
  • Beiträge: 11
  • Geschlecht: Männlich
Re: RichtText im UiDoc über Backend ändern
« Antwort #5 am: 22.04.08 - 10:05:51 »
Habe mir nochmal die NotesHilfe im Detail angeguckt und was gefunden:

Zitat
Modifications made to non-rich-text items on the back-end document accessed through the Document property appear on the current document immediately. Modifications made to non-rich-text items on the corresponding back-end document accessed from the front-end document but not through the Document property (for example, if you use GetDocumentByUNID) do not appear immediately unless the AutoReload property is True. To cause the modifications to appear when the AutoReload property is False, call Reload or close the document and reopen it.

Modifications made to rich-text items on the back-end document do not appear on the current document until it is closed and reopened.

Ich würde es gern verstehen. Bedeutet das, dass ich die Änderungen zwar gültig in das Document schreibe, durch die fehlende Anzeige im current document jedoch nicht angezeigt werden und schliesslich (weil ich mich im QuerySave befinde) der im UI angezeigte Inhalt von RTF in jedem Fall die Änderungen der RTI über das Backend beim End Sub des QuerySave Ereignisses überschreibt?

Würde für mich als Konsequenz bedeuten, dass ich sämtliche Änderungen an RTF über das Backend nach dem Speichern (z.B: QueryClose) machen müsste...

Wäre schön, wenn mir das jemand mal erklären könnte...

Danke,
Mirko
Mirko Haaser · Bremen

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: RichtText im UiDoc über Backend ändern
« Antwort #6 am: 22.04.08 - 10:49:45 »
Du musst die Änderungen an einem RichtextItem immer abspeichern.

Danach musst du das Frontenddokument schliessen, und über Notesuiwokspace.editdocument wieder öffnen.

Du musst Änderungen im Frontend und im Backend immer sauber voneinander trennen UND abspeichern, sonst gibt das Kuddelmuddel.

Grüsse

Dau-in
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz