Autor Thema: Update eines RichTextField  (Gelesen 2142 mal)

Offline rambrand

  • Senior Mitglied
  • ****
  • Beiträge: 469
  • Geschlecht: Männlich
Update eines RichTextField
« am: 23.10.13 - 16:12:34 »
Hallo,
ich möchte ein reines Ansichtsdokument (wird nicht gespeichert) erstellen in dem ein Abgleich durchgeführt wird.
Dazu rufe ich über die Gliederung direkt die Maske des Dokuments auf.

Über Postopen durchlaufe ich eine Ansicht (Softwareliste) lese in einer anderen Ansicht (Installierte Software) die jeweilige Anzahl der Dokumente aus. Das gleiche ich mit einer weiteren Ansicht (Lizenzansicht) ab. Dann ziehe ich pro Software die Anzahl vorhandener Installationen von der Anzahl vorhandener Lizenzen ab. Dabei kommt ein positiver oder negativer Wert heraus.
Soweit funktionierte alles.

Jetzt kam aber der Extra-Wunsch: Negative Zahlen in rot, positive Zahlen in schwarz.

Also muss das Feld in das die Differenzen abgebildet werden ein RichText-Feld sein.
Ich musste dann lernen, dass Änderungen im RT im Backend nicht ins Frontend übertragen werden.

Daher hab ich im Internet recherchiert und fand ich einen Tipp, bei dem man ein Dummy-Dokument erstellt, dort das RT-Feld befüllt, dann auf das UIDocument des Dummys zugreift, den Inhalt des RT in die Zwischenablage kopiert. Dann geht man in das UIDocument des eigentlichen Dokuments und pasted dort den Inhalt der Zwischenablage hinein.

Funktioniert alles bis zum Paste. Sobald ich Call uidoc.paste ausführe erhalte ich den Fehler "Dokumentbefehl ist nicht verfügbar".

Code
Sub Postopen(Source As Notesuidocument)
	Dim session As New NotesSession	
	Dim uiws As New NotesUIWorkspace

[ ... einiges an Code für die Listenerstellung ... ]

	Dim db As NotesDatabase
	Dim doc As NotesDocument
	Dim dummydoc As NotesDocument
	Dim uidoc As NotesUIDocument
	Dim dummyuidoc As NotesUIDocument
	Dim dummyrt As NotesRichTextItem
	Dim richStyle As NotesRichTextStyle
	Set richStyle = session.CreateRichTextStyle
	
	Set db = session.CurrentDatabase
	Set uidoc = uiws.CurrentDocument
	Set dummydoc = db.CreateDocument
	dummydoc.form="FormLizenzabgleichDummy"
	dummydoc.saveoptions = "0"
	Set dummyrt = New NotesRichTextItem(DummyDoc,"DummyRT")

[ ... Code zur Erstellung der Listen ... ]

	For i = 0 To (Ubound(swliste)-1)
		Set swcoll = swview2.GetAllDocumentsByKey(swliste(i))
		str_swliste = str_swliste & Cstr(swliste(i)) & Chr(13)
		str_installationen = str_installationen & Cstr(swcoll.Count) & Chr(13)
		str_lizenzen = str_lizenzen & Cstr(dummylic) & Chr(13)
		str_differenz = str_differenz & Cstr((dummylic - swcoll.Count)) & Chr(13)
	                If ((dummylic-swcoll.count) <0) Then
			richStyle.NotesColor = COLOR_RED
		Else
			richStyle.NotesColor = COLOR_BLACK
		End If
		Call dummyrt.AppendStyle(richStyle)
		Call dummyrt.AppendText(Cstr(dummylic-swcoll.Count))
		Call dummyrt.AddNewline(1)
	Next
	Call dummyrt.Update

[ ... damit ist das RT im DummyDokument vollständig ... ]

	Set dummyuidoc = uiws.EditDocument(True,DummyDoc)
	Call dummyuidoc.GotoField("DummyRT")
	Call dummyuidoc.SelectAll
	Call dummyuidoc.Copy
	Call dummyuidoc.Close(True)
	uidoc.EditMode = True
	Call uidoc.GotoField("licabgl_differenz")
	Call uidoc.Paste '<-- hier knallt es dann

	Call uidoc.Refresh
End Sub

In der Beschreibung (http://searchdomino.techtarget.com/tip/Dynamically-update-Lotus-Notes-rich-text-fields-using-LotusScript) die ich angewandt habe, wurde das ganze über einen Button gelöst. Liegt das generell am Postopen?

Bye,
Markus
« Letzte Änderung: 25.10.13 - 16:49:04 von rambrand »
Domino/Notes ab 4.6 aktuell 10.1FP3
Traveler 10.0.1FP1
PHP-Entwickler
Domino/Notes-Entwickler (Hobby)
Consultant (Informationssicherheit & Datenschutz)

klaussal

  • Gast
Re: Update eines RichTextField
« Antwort #1 am: 23.10.13 - 16:43:56 »
Warum nimmst du keine zwei Felder (eins mit roter Schrift, das andere in schwarz) und versteckst das eine oder andere je nach Ergebnis ?

Offline rambrand

  • Senior Mitglied
  • ****
  • Beiträge: 469
  • Geschlecht: Männlich
Re: Update eines RichTextField
« Antwort #2 am: 23.10.13 - 16:56:29 »
Hallo Klaus,

das Problem ist, die Listen sind dynamisch. Da können irgendwann, was weiss ich wieviel an Elemente kommen.
Da Notes keine dynamischen Tabellen kennt, habe ich mir beholfen, indem ich mit 4 Feldern auskommen. SW-Name, Installationen, Lizenzen als Textfelder, dort werden alle Werte in einem String angezeigt. Jedem Wert folgt ein Zeilenumbruch, so bekomme ich eine schöne (dynamische) Liste. Das RT-Feld wollte ich genauso aufbauen.

Daher kann ich das nicht über Verbergen lösen.

Bye,
Markus
Domino/Notes ab 4.6 aktuell 10.1FP3
Traveler 10.0.1FP1
PHP-Entwickler
Domino/Notes-Entwickler (Hobby)
Consultant (Informationssicherheit & Datenschutz)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Update eines RichTextField
« Antwort #3 am: 23.10.13 - 19:24:52 »
Ich gehe mal davon aus, dass Dein Feld "licabgl_differenz" nicht bearbeitbar ist, oder?

Wenn Dein Dummydokument das enthält, was Du anzeigen willst, und das was Du zeigen willst, sowieso nicht gespeichert werden soll, warum kopierst Du es vom Dummydokument in das andere, anstatt das Dummydokument einfach zu öffnen?

Ist in dem Dummydokument überhaupt irgendetwas sichtbar, was kopiert werden kann? Eventuell kommt auch daher der Fehler, dass Du nichts in die Zwischenablage kopierst und dieses Nichts dann einfügen willst. Da könnte auch solch eine Fehlermeldung bei herauskommen.

Haben die Benutzer in der Datenbank Autorenrechte und dürfen Dokumente erstellen? Dann würde ich ein Dokument im Hintergrund komplett erstellen lassen, speichern und danach im Lesemodus öffnen. Beim nächsten Mal suchst Du wieder das Dokument, löschst das Richtextfeld und rechnest es erneut. Dann hast Du immer ein Dokument in der Datenbank, das nirgendwo angezeigt wird (könnte z.B. auch ein Profildokument sein). In dieses Dokument packst Du noch ein Autorenfeld mit einem "*", damit jeder Benutzer, der Autorenrechte hat, dieses Dokument bearbeiten kann.

Bei nur Leserecht könnte das Dokument über einen Agent per Agent.RunOnServer erstellt und aktualisiert werden.
« Letzte Änderung: 23.10.13 - 19:26:29 von Peter Klett »

Offline rambrand

  • Senior Mitglied
  • ****
  • Beiträge: 469
  • Geschlecht: Männlich
Re: Update eines RichTextField
« Antwort #4 am: 24.10.13 - 09:46:02 »
Guten Morgen Peter,

Danke für die Tipps. Bei Deiner Frage, dass das Feld nicht bearbeitbar ist, gehe ich davon aus, das hat eine gewisse Bedeutung? Es steht auf Berechnet. Als immer noch (ambitionierter) Laie, was hätte es hier für eine Auswirkung, wenn es auf Bearbeitbar stehen würde?

Inhalt hatte das RT-Feld im DummyDoc, hab ich im Debugger geprüft.

Ich war da wohl mal wieder auf dem umständlichen Weg unterwegs. Warum einfach wenn es auch kompliziert geht. Die Idee mit dem Profildokument klingt gut. Das werde ich jetzt so machen.

Bye,
Markus
Domino/Notes ab 4.6 aktuell 10.1FP3
Traveler 10.0.1FP1
PHP-Entwickler
Domino/Notes-Entwickler (Hobby)
Consultant (Informationssicherheit & Datenschutz)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Update eines RichTextField
« Antwort #5 am: 24.10.13 - 09:51:31 »
Bei Deiner Frage, dass das Feld nicht bearbeitbar ist, gehe ich davon aus, das hat eine gewisse Bedeutung? Es steht auf Berechnet.

Hallo Markus,

GotoField, Copy und Paste sind alle nur auf bearbeitbare Felder ausführbar. Diese Frage war also tatsächlich "kriegsentscheidend".

Bernhard

Offline rambrand

  • Senior Mitglied
  • ****
  • Beiträge: 469
  • Geschlecht: Männlich
Re: Update eines RichTextField
« Antwort #6 am: 24.10.13 - 10:31:31 »
Danke Bernhard, hatte in der Designer-Hilfe nur gefunden, dass das Dokument in Edit Mode sein muss. Aber dass das Feld auch noch bearbeitbar sein muss ... wieder was gelernt.

Bye,
Markus
Domino/Notes ab 4.6 aktuell 10.1FP3
Traveler 10.0.1FP1
PHP-Entwickler
Domino/Notes-Entwickler (Hobby)
Consultant (Informationssicherheit & Datenschutz)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Update eines RichTextField
« Antwort #7 am: 24.10.13 - 10:36:27 »
Danke Bernhard, hatte in der Designer-Hilfe nur gefunden, dass das Dokument in Edit Mode sein muss. Aber dass das Feld auch noch bearbeitbar sein muss ... wieder was gelernt.

Bye,
Markus
Versuch mal von Hand über die Zwischenablage etwas in ein berechnetes Feld zu kopieren. Das wird Dir nicht gelingen. Der Befehl Paste macht nichts anderes ...

Offline rambrand

  • Senior Mitglied
  • ****
  • Beiträge: 469
  • Geschlecht: Männlich
Re: Update eines RichTextField
« Antwort #8 am: 25.10.13 - 16:49:50 »
Vielen Dank an alle, funktioniert jetzt mit dem Update des RT-Feldes.

Bye,
Markus
Domino/Notes ab 4.6 aktuell 10.1FP3
Traveler 10.0.1FP1
PHP-Entwickler
Domino/Notes-Entwickler (Hobby)
Consultant (Informationssicherheit & Datenschutz)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz