Lotus Notes / Domino Sonstiges > Help-Desk Applikation !!Help!!
Fehler in SpoofMessage?
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