Hallo zusammen,
es gibt zwar schon einiges zu diesen beiden Klassen und dem Thema RichText, aber ich habe hier ein komisches Phänomen...
Folgendes:
Ich habe eine simple Testdatenbank, in der sich ein Dokument befindet, welches ein RichTextItem "Body" mit Text enthält.
Diesen Text muss ich nach Tags durchsuchen und diese dann ersetzen bzw. löschen.
Hier der Text aus dem RichTextFeld:
Sehr geehrter Herr Sowieso,
leider müssen wir Ihnen mitteilen, dass eine Reservierung auf diesen Namen unmöglich erscheint.
<<DocLink>>
Und das ist einer mittem im Text: <<DocLink>> Und der Text geht noch weiter.
Mit freundlichen Grüßen
Ihre Rezeption
Und hier ein Agent, der das ganze durchforsten soll:
Die Funktion
RTIFindString soll das RichTextItem auf das Vorhanden sein des Tags prüfen.
Die Funktion
RTIRemoveString soll das Tag
löschen.
Sub Initialize
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim s As NotesSession
Dim rti As NotesRichTextItem
' ### initialize ###
Set s = New NotesSession
Set db = s.CurrentDatabase
Set dc = db.UnprocessedDocuments
' ### get the rich text item ###
Set doc = dc.GetFirstDocument
Set rti = doc.GetFirstItem("Body")
' ### search position of the bookmark <<DocLink>> ###
If RTIFindString(rti, "<<DocLink>>") Is Nothing Then
Msgbox "Could not find string"
Else
Call RTIRemoveString(rti, "<<DocLink>>")
Call doc.Save(True, False)
Exit Sub
End If
End Sub
Function RTIFindString(rti As NotesRichTextItem, str_string As String) As NotesRichTextRange
Dim rtn As NotesRichTextNavigator
Dim rtr As NotesRichTextRange
Set rtn = rti.CreateNavigator
Set rtr = rti.CreateRange
If rtn.FindFirstString(str_string, RT_FIND_CASEINSENSITIVE) Then
Call rtr.SetBegin(rtn)
Call rtn.SetCharOffset(Len(str_string))
Call rtr.SetEnd(rtn)
End If
Set RTIFindString = rtr
Set rtr = Nothing
Set rtn = Nothing
End Function
Function RTIRemoveString(rti As NotesRichTextItem, str_string As String) As Boolean
Dim rtn As NotesRichTextNavigator
Dim rtr As NotesRichTextRange
Set rtn = rti.CreateNavigator
Set rtr = rti.CreateRange
If rtn.FindFirstString(str_string, RT_FIND_CASEINSENSITIVE) Then
Call rtr.SetBegin(rtn)
Call rtn.SetCharOffset(Len(str_string))
Call rtr.SetEnd(rtn)
'Print rtr.TextRun
Call rtr.Remove
Call rti.Update
Call rti.Compact
End If
Set rtr = Nothing
Set rtn = Nothing
End Function
Jetzt kommt der Witz: Nach dem ein zweites Mal nach den Tags (String) gesucht wird, werden diese
verdoppelt.
Obwohl die Methode Remove des NotesRichTextRange-Objektes aufgerufen wird.
Und da das bei RichText-Gedöhns ab und an eine Rolle spielt:
Das ganze sollte unter Notes 6.5.4. laufen.
Kann mir da jemand ein bisschen auf die Sprünge helfen?
Gruß
Johnson