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 |
| |
| |
| |
| |
| Set s = New NotesSession |
| Set db = s.CurrentDatabase |
| Set dc = db.UnprocessedDocuments |
| |
| |
| |
| |
| Set doc = dc.GetFirstDocument |
| Set rti = doc.GetFirstItem("Body") |
| |
| |
| |
| |
| 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) |
| |
| 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