Lotus Notes / Domino Sonstiges > Help-Desk Applikation !!Help!!

Fehler in SpoofMessage?

<< < (2/4) > >>

Thomas Schulte:
Das Prblem ist das man wenn man so was anfängt eine irre Logik dahinter legen muss. Deswegen hat das glaube ich auch noch kein Professioneller Anbieter so wirklich gemacht. Aber als Idee ist das nicht schlecht. Man muss dann halt den Präfix noch etwas erweitern so in dem Sinn, hier kommt eine Formel.

eknori (retired):

--- Zitat ---Schade das es dazu nicht eine "fertig" konfigurierte Beispiel-Schabolone gibt.
--- Ende Zitat ---

Finde ich gut, daß du uns anbietest, so etwas zu erstellen ...  ;D

eknori (retired):

--- Zitat ---<<[@Name([CN];user)]>>
--- Ende Zitat ---

So etwas verwende ich ja bereits in der EscalationsRoutine ( @Adjust , @Now ). OK, das kann man auch unter der Bedingung eines festen Wortschatzes in das RT Search und Replace einbauen.

An einem kompletten Formet2LS Parser versucht sich ja schon Axel Janssen seit geraumer Zeit ...

evtl. ist das auch über Config Docs regelbar, wenn man sich auf Sachen beschränkt, die mit evaluate in LS abbildbar sind.

eknori (retired):

--- Zitat ---Zitat
<<[@Name([CN];user)]>>
--- Ende Zitat ---

Vorschlag: Setze dich mit uns in Vrebindung und steige als Entwickler ins Team ein ...

Offensichtlich kommst du mit dem produzierten Script Code klar...

froggy:

--- Zitat ---An einem kompletten Formet2LS Parser versucht sich ja schon Axel Janssen seit geraumer Zeit ...
--- Ende Zitat ---

Für was braucht man einen Formel2LS Parser?  ??? Man kann das doch einfach mit Evaluate(<formel>, <doc>) abbilden. Habe mich natürlich auch schon dran versucht und hier mein Ergebniss:

Ich habe das ganze TAG Handling in eine eigene Funktion verschoben und in SpoofMessage nur den Aufruf eingefügt. Ein erster Test meinerseits hat funktioniert. Allerdings muss man sich natürlich die Fehlerbehandlung noch anschauen (insbesondere wenn ungültige Formeln in den MailSignaturen definiert werden). Aber im Prinzip erzeugt Evaluate dann einen Fehler, den man ja abfangen kann (s.u.).

Das ganze könnte man natürlich noch weiter verallgemeinern, so dass er auch die Subject Tags behandelt. Da muss ich aber erstmal suchen, wo die ersetzt werden.


--- Zitat ---Function ProcessRTTags(rtitem As NotesRichTextItem, linkto As NotesDocument, basedoc As NotesDocument, parentdoc As NotesDocument) As Integer
%REM
###################################################################################
Goal: Replace defined tags in richtext item rtitem with corresponding items/values from referenced docs

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Arguments: Description:
rtitem               NotesRichTextItem         RichTextItem to search for tags and replace them with appropriate values
linkto               NotesDocument            actual document
basedoc            NotesDocument            base document of actual document
parentdoc         NotesDocument            parent document of actual document

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Return:
TRUE or FALSE.
TRUE if the function runs without an error
FALSE if the function has an error

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Example:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
VERSION / WHEN / WHO / CHANGES

1.0/22.03.2006/Marc Aigner/--
'###################################################################################
%END REM
   
   On Error Goto ERRHANDLE   
   
   Const TAG_FORMULA_PREFIX = "["
   Const TAG_FORMULA_SUFFIX = "]"
   
   Dim rtnav          As NotesRichTextNavigator
   Dim rtrange         As NotesRichTextRange
   Dim fieldreaddoc   As NotesDocument
   
   Dim strT                   As String
   Dim strReplT                As String
   Dim strTemp               As String
   Dim getString               As String   
   Dim arrRetFieldNames       As Variant
   Dim arrRetGetFieldFrom    As Variant
   Dim ret                      As Integer
   Dim retvar                  As Variant
   
   ProcessRTTags = True
   
   If Not linkto Is Nothing Then
      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
      
      arrRetFieldNames = Arrayunique ( Split ( strTemp, TAG_DELIMITER ), 5 )
      
      Set rtrange = rtItem.CreateRange
      Forall t In arrRetFieldNames
         strT = Cstr ( t )
         strReplT = Cstr( t )
         arrRetGetFieldFrom = Arrayunique ( Split ( StrT, TAG_FIELDDELIMITER ), 5 )
         Select Case arrRetGetFieldFrom(0)
         Case "b"
            If Not basedoc Is Nothing Then
               strT = Cstr ( ArrRetGetFieldFrom(1) )
               Set fieldreaddoc = Basedoc
            End If
         Case "p"
            If Not parentdoc Is Nothing Then
               strT = Cstr ( ArrRetGetFieldFrom(1) )
               Set fieldreaddoc = Parentdoc                  
            End If
         End Select
         'if no source doc referenced then use actual document
         If fieldreaddoc Is Nothing Then Set fieldreaddoc = LinkTo
         
         If ( Not strT = "" ) Then
            'Check if we have a formula or a item name
            If Left(Trim(strT), 1) = TAG_FORMULA_PREFIX Then
               'we have a formula string => process with source document
               strT = Strleftback(Strright(strT, TAG_FORMULA_PREFIX), TAG_FORMULA_SUFFIX)
               ResumeMethodNext = True
               Err = 0
               retVar = Evaluate(strT, fieldreaddoc)
               If Err <> 0 Then
                  Error 32000, "Could not evaluate tag with formula in mail signatures."
                  getstring = ""
               Else
                  getstring = retvar(0)         
               End If
               ResumeMethodNext = False
            Else
               'we have a item name => use item text as value
               If  ItemTextExists ( fieldReadDoc, strT )  Then               
                  getstring = fieldReadDoc.GetFirstItem(  strT ).text
               End If   
            End If
            
            'replace tag with evaulated value from item text or formula
            If Trim(getstring) <> "" Then
               ret =  rtrange.FindAndReplace _
               ( TAG_PREFIX & strReplT & TAG_SUFFIX,_ ' find
               getstring, _ ' replaceWith
               RT_REPL_ALL + RT_FIND_CASEINSENSITIVE)
               
               Call rtItem.Update ' Must update before looping
            End If         
         End If
      End Forall
   End If
   
EXITPOINT:
   Exit Function
ERRHANDLE:
   ProcessRTTags = False
   xProc = Getthreadinfo(LSI_THREAD_PROC)
   xError = xProc  & ": " &Trim$(Str$(Err)) & " on line " & Cstr(Erl) & ": " & Error$
   If UseOpenLog Then
      Call LogError
   Elseif LogScriptErrors Then
      Call ThrowException ( xProc, xError  )
   End If
   Print xError   'In all cases
   If ResumeMethodNext Then
      Resume Next   
   Else
      Resume EXITPOINT
   End If
End Function

--- Ende Zitat ---

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln