Mir ist heute ein Fehler in der Escalation untergekommen, den ich so noch nicht gesehen habe.
Es geht um folgende Zeilen im Code:
If rtnav.FindFirstString ( TAG_PREFIX, RT_FIND_CASEINSENSITIVE) Then
' find all <<tags>> 28.05.2006 seems we have a problem here
' illegal function call 5 on line 425
Do
Call rtrange.SetBegin ( rtnav ) ' line 425
dummy = dummy + TAG_DELIMITER + Mid ( rtrange.textRun, 3, Instr ( rtrange.textRun,TAG_SUFFIX ) -3 )
Loop While rtnav.FindNextString ( TAG_PREFIX, RT_FIND_CASEINSENSITIVE )
An dieser Stelle sucht das Script nach den <<TAG>>.
Bisher hatte ich keine Probleme, auch Tags zu finden, die in irgendeiner Weise formatiert waren ( bold, italic, color etc )
Dabei konnten die Tags an beliebiger Stelle im Text stehen.
Seit ein paar Tagen ( und ich habe in dieser zeit wirklich nichts am System geändert ) funktioniert das nun nicht mehr und der Code steigt mit einem "Illegal function Call at line 425 " aus. ( Für die, die die 1.5.0 benutzen ist das die Zeile 107 in der ProcessNotificationProfiles() der lib.notification.escalation )
Der Fehler tritt immer dann auf, wenn der Code auf einen fornmatierten TAG trifft; ... aber auch nicht immer, sondern nur dann, wenn der TAG nicht mit einem CRLF vom restlichen Text in der Zeile getrennt wird.
Was auch immer diesen Fehler genau verursacht, weiß ich nicht. Ich mache dazu gleich ein Ticket auf. Nehme ich die Formatierungen aus der Mailvorlage heraus, dann funktioniert der Code.
Hier nun der Workaround
VOR dem Set RTNAV = rtitem.CreateNavigator den folgenden CodeBlock einfügen
'/* added 28.05.2006 to avoid illegal function Call on line 425, Ulrich Krause
Dim tmpdoc As NotesDocument
Dim tmpRTitem As NotesRichTextItem
Dim tmpbody As NotesRichTextItem
Set tmpDoc = db.CreateDocument
Set tmpRTitem = tmpdoc.CreateRichTextItem( "tmpBody" )
Call tmpRTitem.AppendText( rtitem.GetUnformattedText )
Set tmpbody = tmpDoc.GetFirstItem("tmpBody")
'/* end added
und die nachfolgenden Set Anweisungen entsprechend abändern :
Set rtnav = tmpbody.CreateNavigator
Set rtrange = tmpbody.CreateRange
Damit werden zur Ermittlung, welche Tags im Document vorhanden sind, temporär die Formatierungen entfernt und der unformattedText nach TAGS durchsucht.