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".
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 (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