Autor Thema: Fehler in Escalation  (Gelesen 2803 mal)

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Fehler in Escalation
« am: 29.05.06 - 11:43:34 »
Mir ist heute ein Fehler in der Escalation untergekommen, den ich so noch nicht gesehen habe.

Es geht um folgende Zeilen im Code:

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

Zitat
      '/* 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 :
      
Zitat
      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.




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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz