Autor Thema: NotesRichtextNavigator und RTRange  (Gelesen 10692 mal)

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
NotesRichtextNavigator und RTRange
« am: 15.08.05 - 17:15:51 »
Hat jemand erfahrung mit diesen beiden Klassen ??

Ich knobele gerade an folgenden Problem:

Ein RichtextItem enthält z.B. folgenden Text:

Sehr geehrter Herr <<RCPT>>,

Ihre Anfrage <<REQNUMBER>> wird von unserem Mitarbeiter <<SUPPORTER>> bearbeitet.

Ich möchte jetzt die <<>> Tags durch Werte aus dem Ticket ersetzen, wobei die Strings innerhalb der <<>> Feldnamen darstellen.

Mittels

   If rtnav.FindFirstString("<<", _
                        RT_FIND_CASEINSENSITIVE) Then
                           Do
                              Call rtrange.SetBegin(rtnav)
                              'Messagebox rtrange.textParagraph,, "<<"
                              ' und wie geht es dann hier weiter ??                     
                              Loop While rtnav.FindNextString("<<", _
                           RT_FIND_CASEINSENSITIVE)
                        Else
                           Messagebox "<<",, "String not found"
                        End If

komme ich auch immer an das nächste <<

Aber wie mache ich jetzt das Replace ?

   If rtnav.FindFirstString("<<", _
                        RT_FIND_CASEINSENSITIVE) Then
                           Do
                              Call rtrange.SetBegin(rtnav)
                              'Messagebox rtrange.textParagraph,, "<<"
                              While rtrange.FindAndReplace _
                              ("<<RCPT>>",_ ' find
                              CommonNameString (Trim(atWord(Cstr(m),"|",1))),_ ' replace
                              RT_FIND_CASEINSENSITIVE) > 0
                                 Call rtItem.Update ' Must update before looping
                              Wend
                              
                              Loop While rtnav.FindNextString("<<", _
                           RT_FIND_CASEINSENSITIVE)
                        Else
                           Messagebox "<<",, "String not found"
                        End If

Dieses Konstrukt funktioniert nicht ( ich weiß, daß hier einiges Hardcodiert ist, aber <<RCPT>> ist der erste Tag im Text.

Im Debugger meckert er immer die Zeile mit dem Wend an.

Jemand schon mal die Kombination der Klassen programmiert ( In der Notes Hilfe ist alles separat beschrieben, aber nicht in der Kombination ) Irgendwie scheinen sich die ursprünglich erzeugten Objecte rtNav und rtRange selber zu "zerstören"
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: NotesRichtextNavigator und RTRange
« Antwort #1 am: 15.08.05 - 17:39:51 »
Ich habe ein ähnliches "RichText Templating" mit den neuen Klassen vor.
Deshalb hab ich ein deutliches Interesse an deinem Erfolg.

Ich hoffe, ich habe das beim raschen Überfliegen verstanden, aber für mich wirkt es eventuell erfolgversprechender, wenn wir statt eines Replace ein ganz neues RichTextItem mit eigenem RichTextNavigator erzeugen und das dann Stück für Stück aus dem geparsten Zeug erzeugen?

Möglicherweise ist das ein bischen verwirrend und vielleicht auch falsch aber ich bin selbst noob in diesem Thema.

Axel
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: NotesRichtextNavigator und RTRange
« Antwort #2 am: 15.08.05 - 17:53:28 »
Zitat
wenn wir statt eines Replace ein ganz neues RichTextItem mit eigenem RichTextNavigator erzeugen und das dann Stück für Stück aus dem geparsten Zeug erzeugen

ist zumindest einen Versuch wert.

Habe mir auch schon überlegt, mir erst die <<TAG>> Tags in ein Array zu schreiben und dann in einem zweiten Step mit FindReplace das ursprüngliche RTItem zu bearbeiten. Ich glaube, daß ist einfacher, als sich jedesmal den RTNavigator neu zu erzeugen ...
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: NotesRichtextNavigator und RTRange
« Antwort #3 am: 15.08.05 - 18:13:47 »
                        strTemp = ""
                        If rtnav.FindFirstString("<<", _
                        RT_FIND_CASEINSENSITIVE) Then
                           Do
                              Call rtrange.SetBegin(rtnav)
                              strTemp = strTemp + "~" + Mid(rtrange.textRun, 3, Instr( rtrange.textRun,">") -3 )
                              Loop While rtnav.FindNextString("<<", _
                           RT_FIND_CASEINSENSITIVE)
                        End If
                        Dim ret As Variant
                        ret = Split ( strTemp, "~" )
                        
                        Msgbox ret(1)

liefert mir in ret alle TAGS des RtItems zurück; der Rest ist dann recht einfach ...
OK, man muß ret jetzt noch unique zu machen.

dann kann man mir

forall x in ret.values

sich jeweils einen Wert nach dem anderen vornehmen, sich den Wert des korrespondierenden Items aus dem Doc in der Collection holen und dann beschwingt mit:

While rtrange.FindAndReplace _
"<<" & CStr(x) & ">>",_ ' find
   <ReplaceWithWertAusDoc>,_ ' replace
   RT_FIND_CASEINSENSITIVE) > 0
   Call rtItem.Update ' Must update before looping
Wend

alle Vorkommen von "<<" & CStr(x) & ">>" zu ersetzen.

ein rtItem.Update hinterhergeschossen und schon ist man fertig, oder ?

Das Drumherum ist dann Fleißarbeit, so mit ERRHANDLE und so ...
« Letzte Änderung: 15.08.05 - 18:19:30 von eknori »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: NotesRichtextNavigator und RTRange
« Antwort #4 am: 15.08.05 - 19:43:49 »
OK, kurz vor der Tagesschau noch schnell der funktionierende Code ( Ohne grossartiges ERRHANDLE ) für ein dynamisches FindandReplace in einem RT Item

                                                         Set rtnav = rtItem.CreateNavigator
                        Set rtrange = rtItem.CreateRange
                        strTemp = ""
                        If rtnav.FindFirstString ( TAG_PREFIX, _
                        RT_FIND_CASEINSENSITIVE) Then
                           Do   
                              Call rtrange.SetBegin ( rtnav )
                              strTemp = strTemp + TAG_DELIMITER + Mid ( rtrange.textRun, 3, Instr( rtrange.textRun,TAG_SUFFIX ) -3 )
                           Loop While rtnav.FindNextString ( TAG_PREFIX, RT_FIND_CASEINSENSITIVE )
                        End If
                        
                        Dim arrRetFieldNames As Variant
                        Dim ret As Integer
                        arrRetFieldNames = Arrayunique ( Split ( strTemp, TAG_DELIMITER ), 5 )
                        
                        Set rtrange = rtItem.CreateRange
                        Dim strT As String
                        Forall t In arrRetFieldNames
                           strT = Cstr ( t )
                           If ( Not strT = "" ) Then
                              If ( Not ItemTextExists ( TicketDoc, strT ) = False)  Then
                                 ret =  rtrange.FindAndReplace _
                                 ( TAG_PREFIX & strT & TAG_SUFFIX,_ ' find
                                 TicketDoc.GetFirstItem( strT ).Text, _ ' replaceWith
                                 RT_REPL_ALL) > 0
                                 
                                 Call rtItem.Update ' Must update before looping
                                 
                              End If
                           End If
                        End Forall

@Axel: Ist das so i.O. ? Oder hast du noch eine bessere Idee ?

Oder hat sonstwer noch eine zündende IDEE ?? ( viele Kosumenten, wenig Produzenten )
« Letzte Änderung: 15.08.05 - 21:50:13 von eknori »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Manfred Dillmann

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 858
  • Geschlecht: Männlich
    • www.madicon.de
Re: NotesRichtextNavigator und RTRange
« Antwort #5 am: 15.08.05 - 20:58:47 »
Hallo Ulrich,

muss ich nachfragen:
Du "sammelst" zu Beginn Deiner Routine aus dem Richtext-Item die Platzhalter zusammen. Ist es dass, was Du mit "dynamischen FindAndReplace" meinst?

Sind die möglichen Platzhalter nicht schon vorher bekannt?

Gruß
Manfred

Support, Beratung, Schulung, Anwendungsentwicklung oder Tipps & Tricks zu Lotus Notes/Domino?
www.madicon.de

Personalisierte Notes/Domino Serienmails?
madicon easyMail


Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: NotesRichtextNavigator und RTRange
« Antwort #6 am: 15.08.05 - 21:03:02 »
Zitat
Sind die möglichen Platzhalter nicht schon vorher bekannt?

Wenn du die HelpdeskDB meinst, ja. Aber ich verwende den Code ( und die Designelemente ) auch in anderen DBs. Und da weiß ich nicht, welche Felder angesprochen werden .. Das ganze DIng, soll irgendwann mal so flexibel wie möglich sein ... nach dem Motto : Kopiere dies und das Designelemet in deine bestehende DB rein; konfiguriere dies und das und schon kannst du Benachrichtigungen nach deinen Vorstellungen rausschicken.

Das ist das Ziel, nicht mehr, nicht weniger ...
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Manfred Dillmann

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 858
  • Geschlecht: Männlich
    • www.madicon.de
Re: NotesRichtextNavigator und RTRange
« Antwort #7 am: 15.08.05 - 21:11:27 »
>>Aber ich verwende den Code ( und die Designelemente ) auch in anderen DBs. Und da weiß ich nicht, welche Felder angesprochen werden .. Das ganze DIng, soll irgendwann mal so flexibel wie möglich sein ...<<

OK. Dann ist die Lösung doch schon mal prima so.

Schönen Abend noch...  :)

Manfred

Support, Beratung, Schulung, Anwendungsentwicklung oder Tipps & Tricks zu Lotus Notes/Domino?
www.madicon.de

Personalisierte Notes/Domino Serienmails?
madicon easyMail


Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: NotesRichtextNavigator und RTRange
« Antwort #8 am: 15.08.05 - 21:13:41 »
Zitat
OK. Dann ist die Lösung doch schon mal prima so.

Also nicht überzeugend ... Irgendwie Bockwurst ohne Senf ( scharf ) ??
Habe zumindest im Web noch keine Lösung gefunden, die meiner auch nur annähernd ähnlich kommt.
Oder es war keiner so d ... seine Lösung zu posten ...

Für meine Belange funktioniert der Code
« Letzte Änderung: 15.08.05 - 21:21:20 von eknori »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Manfred Dillmann

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 858
  • Geschlecht: Männlich
    • www.madicon.de
Re: NotesRichtextNavigator und RTRange
« Antwort #9 am: 15.08.05 - 21:23:37 »
Zitat
Also nicht überzeugend ... Irgendwie Bockwurst ohne Senf ( scharf ) ??

Ach quatsch, das ist klasse.

Du könntest etwas ausprobieren, musste ich im Moment selbst testen, verwende ich so in der madicon easyMail  ;) Anwendung.

Wenn Du ein rtrange festlegst:

Set doc = dc.GetFirstDocument
Set body = doc.GetFirstItem("Body")
Set rtrange = body.CreateRange

umfasst dieser rtrange das gesamte RichtextItem. Daher ist ein einziger Aufruf von:

count& = notesRichTextRange.FindAndReplace( target$ , replacement$ , [ options& ] )

ausreichend, wenn Du den optionalen Parameter "RT_REPL_ALL (16) to replace all occurrences of the search string" verwendest.

Das könnte etwas Performance bringen, da Du dann
- nicht mehr selbst nach dem Vorkommen suchen musst und
- Du nicht selbst von "Treffer" zu "Treffer" iterieren musst.

Gruß
Manfred

Support, Beratung, Schulung, Anwendungsentwicklung oder Tipps & Tricks zu Lotus Notes/Domino?
www.madicon.de

Personalisierte Notes/Domino Serienmails?
madicon easyMail


Offline Manfred Dillmann

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 858
  • Geschlecht: Männlich
    • www.madicon.de
Re: NotesRichtextNavigator und RTRange
« Antwort #10 am: 15.08.05 - 21:29:05 »
Ach, da fällt mir noch was ein, kannst Du bitte mal ausprobieren?

Man kann der Methode:

count& = notesRichTextRange.FindAndReplace( target$ , replacement$ , [ options& ] )

leider kein "" (also nix) als replacement$ übergeben. Wenn ich das mache, wird der "Platzhalter" einfach so wie er ist belassen. Minimum ist ein Leerzeichen (" ") erforderlich. Ist das bei Dir auch so?

Es gelingt einem so nicht, den "Platzhalter" komplett aus dem Inhalt des rtitems "rauszuwerfen".

Hast Du da noch eine Idee?

Gruß
Manfred

Support, Beratung, Schulung, Anwendungsentwicklung oder Tipps & Tricks zu Lotus Notes/Domino?
www.madicon.de

Personalisierte Notes/Domino Serienmails?
madicon easyMail


Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: NotesRichtextNavigator und RTRange
« Antwort #11 am: 15.08.05 - 21:29:50 »
@Axel: Ist das so i.O. ? Oder hast du noch eine bessere Idee ?

Hm. Sieht gut aus. Danke.
Heute ist großer aber fixe-eine-verdammte-Schwäche-im-RDBMS-Design-und-ziehe-das-durch-2-Layer-Abend in einer anderen Anwendung >:(
Ich schau mir das auf jeden Fall mal an. Für mich schreibst du C-code. Ich kann das so nicht lesen. Müsste ich mir im Debugger mal anschauen.  ;D
Was ich möchte ist eine Art Serienbrieffunktionalität, die auf den neuen RichText Funktionalitäten beruht. Meine Kunden haben nicht unbedingt alle MS-Word.
Da drin noch eine Art mini-Datenzugriffssprache, um auf Felder aus Dokumente auf vorher definierten Datenbanken/Ansichten zuzugreifen. Letzteres ist aber nicht so neu, wie die Möglichkeiten, die diese neuen RichText Klassen bieten.
Wichtig ist das die User Fehlermeldungen bekommen, mit denen sie etwas anfangen könnnen.

Die allgemein gebräuchlichen Teile werde ich jedenfalls auch posten.

Gruß Axel
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: NotesRichtextNavigator und RTRange
« Antwort #12 am: 15.08.05 - 21:30:10 »
Zitat
count& = notesRichTextRange.FindAndReplace( target$ , replacement$ , [ options& ] )

ds ist mir klar; ich hatte das ja schon hier http://www.atnotes.de/index.php?topic=24716.msg158562#msg158562

gepostet.

aber ich kenne ja normalerweise zunächst target$ , replacement$ nicht ...

target$ hole ich mir einmalig, indem ich das Template auslese; Replacement$ hole ich mir aus dem doc in der collection of docs, die irgendwie an den Mann gebracht werden müssen.



Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: NotesRichtextNavigator und RTRange
« Antwort #13 am: 15.08.05 - 21:32:31 »
Zitat
Für mich schreibst du C-code
C-Code = nicht zu gebrauchender Code oder
c-Code = der Sprache C ähnlicher Code ??
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Manfred Dillmann

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 858
  • Geschlecht: Männlich
    • www.madicon.de
Re: NotesRichtextNavigator und RTRange
« Antwort #14 am: 15.08.05 - 21:41:51 »
Zitat
aber ich kenne ja normalerweise zunächst target$ , replacement$ nicht ...

Zu Beginn Deiner Routine holst Du dir die Platzhalter, richtig? Das ist OK, die kennst Du ja nicht.

Weiter unten iterierst Du aber dann von "Fundstelle" zu "Fundstelle". Da könnte ein einziger Aufruf nach der von mir beschriebenen Weise ausreichen - natürlich ein Aufruf pro Platzhalter.

Manfred

Support, Beratung, Schulung, Anwendungsentwicklung oder Tipps & Tricks zu Lotus Notes/Domino?
www.madicon.de

Personalisierte Notes/Domino Serienmails?
madicon easyMail


Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: NotesRichtextNavigator und RTRange
« Antwort #15 am: 15.08.05 - 21:44:22 »
ok, hab*s kapiert ... DANKE

habe das Posting ( http://www.atnotes.de/index.php?topic=25016.msg159881#msg159881 ) entsprechend ge-updated.
« Letzte Änderung: 15.08.05 - 21:51:13 von eknori »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Manfred Dillmann

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 858
  • Geschlecht: Männlich
    • www.madicon.de
Re: NotesRichtextNavigator und RTRange
« Antwort #16 am: 15.08.05 - 21:51:23 »
>> ok, hab*s kapiert ... DANKE<<

Na, klappt doch...  ;D

BTW:
Liest Du noch mal meinen Post von oben? Von wegen "Platzhalter  komplett rauswerfen"...

Manfred

Support, Beratung, Schulung, Anwendungsentwicklung oder Tipps & Tricks zu Lotus Notes/Domino?
www.madicon.de

Personalisierte Notes/Domino Serienmails?
madicon easyMail


Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: NotesRichtextNavigator und RTRange
« Antwort #17 am: 15.08.05 - 21:59:07 »
das habe ich so noch nicht getestet´... muss ich mal machen
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Manfred Dillmann

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 858
  • Geschlecht: Männlich
    • www.madicon.de
Re: NotesRichtextNavigator und RTRange
« Antwort #18 am: 15.08.05 - 22:04:23 »
>> das habe ich so noch nicht getestet´... muss ich mal machen<<

Ja, wäre prima. Danke. Ergebnis auch gerne per eMail...

Noch ein Hinweis:
Deine oben geänderte Routine (der Austausch) ist nun nicht mehr "caseINsensitive". Musst Du noch was "dazutun".  :)

Servus
Manfred

Support, Beratung, Schulung, Anwendungsentwicklung oder Tipps & Tricks zu Lotus Notes/Domino?
www.madicon.de

Personalisierte Notes/Domino Serienmails?
madicon easyMail


Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: NotesRichtextNavigator und RTRange
« Antwort #19 am: 15.08.05 - 22:09:18 »
Zitat
Für mich schreibst du C-code
C-Code = nicht zu gebrauchender Code oder
c-Code = der Sprache C ähnlicher Code ??
Das Zweite.
Wenn ich sage, dass ich das jetzt nicht lesen kann, heisst das überhaupt nicht, dass ich das für schlecht halte.
Ich habe großen Respekt vor dem Code von anderen Leuten. Ok. Sicher nicht alles. Aber das sieht extrem nach der Kategorie "gut, aber ich kapier das nicht direkt" aus. Bin ja mit diesen Klassen auch nicht so vertraut.  ;)
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz