Zurück zu den Eskalationsprofilen:
Im Release gibt es die Möglichkeit, selber eine Formel anzulegen, die dann an das db.search übergeben wird. Das ist flexibel und ... ... ... fehleranfällig, da Menschen dazu neigen, Fehler zu machen. Dann wäre die ganze Tipperei umsonst gewesen.
Also braucht auch diese Funktion ein entsprechendes ERROR HANDLING
Christian Cloutier hat auf searchdomino.com einen Tip veröffentlicht, der genau das leistet, was hier gebraucht wird; "
Validating a Notes formula from LotusScript".
'lib.appl.NotesAPI:
Option Public
Const NULLHANDLE = 0
Const NO_ERROR = 0
Const ERR_FORMULA_COMPILATION = &h500 + 1
Declare Function NSFFormulaCompile Lib "nnotes.dll" ( _
Byval FormulaName As Long, _
Byval FormulaNameLength As Integer, _
Byval FormulaText As Lmbcs String, _
Byval FormulaTextLength As Integer, _
rethFormula As Long, _
retFormulaLength As Integer, _
retCompileError As Integer, _
retCompileErrorLine As Integer, _
retCompileErrorColumn As Integer, _
retCompileErrorOffset As Integer, _
retCompileErrorLength As Integer _
) As Integer
Declare Sub OSMemFree Lib "nnotes.dll" (Byval hHandle As Long)
Declare Function OSLoadString Lib "nnotes.dll" ( _
Byval hmodule As Long, _
Byval status As Integer, _
Byval s As String, _
Byval slen As Integer _
) As Integer
Sub Initialize
End Sub
' ================================================================================
' CheckSelectionFormulaValid - This function uses the Lotus C API to check thesyntax of a Notes formula.
'
' Return Value: Variant - A 3 elements array containing:
' Index 0 - The compilation error code or NO_ERROR (0) if valid
' Index 1 - The compilation error offset in formula or NO_ERROR if valid
' Index 2 - The compilation error length or NO_ERROR if valid
'
' Note: The compilation error code at Index 0 can then be passed to GetAPIError () to get more info about the error.
' ================================================================================
' ================================================================================
' GetAPIError - This function uses the Lotus C API to return a Notes error's text message.
'
' Return Value: String - The text associated with the Notes API error code.
' ================================================================================
Function CheckSelectionFormulaValid(sFormula) As Variant
Dim iError As Integer
Dim hFormula As Long
Dim wFormulaLen As Integer
Dim iCompileError As Integer
Dim iCompileErrorLine As Integer
Dim iCompileErrorColumn As Integer
Dim iCompileErrorOffset As Integer
Dim iCompileErrorLength As Integer
Dim iArray(2) As Integer
iError = NSFFormulaCompile(0, 0, _
sFormula, _
Len(sFormula), _
hFormula, _
wFormulaLen, _
iCompileError, _
iCompileErrorLine, _
iCompileErrorColumn, _
iCompileErrorOffset, _
iCompileErrorLength)
If hFormula <> NULLHANDLE Then
Call OSMemFree(hFormula)
End If
If iError = ERR_FORMULA_COMPILATION Then
iArray(0) = iCompileError
iArray(1) = iCompileErrorOffset
iArray(2) = iCompileErrorLength
CheckSelectionFormulaValid = iArray
Else
iArray(0) = NO_ERROR
iArray(1) = NO_ERROR
iArray(2) = NO_ERROR
CheckSelectionFormulaValid = iArray
End If
End Function
Function GetAPIError(iErrorCode As Integer) As String
Dim iRetVal As Integer
Dim sError As String * 1024
sError = String(1024, 0)
iRetVal = OSLoadString(0&, iErrorCode, sError, 1023)
If iRetval <> 0 Then
GetApiError = Left$(sError, iRetVal)
End If
End Function
In der Maske " Notification Profile" wird der Code dann in einer Aktion aufgerufen
Sub Click(Source As Button)
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument
iRC = CheckSelectionFormulaValid( uidoc.FieldGetText( "nFormula" ))
If iRC(0) = NO_ERROR Then
Messagebox "Formula is valid!", 64 , "OK !"
Else
Messagebox GetAPIError(iRC(0)) & " - Pos: " & Cstr(iRC(1)), 16, "Error in Formula"
End If
End Sub
Der Code plaudert nun bei einem Fehler im Klartext aus, an welcher Stelle der Fehler aufgetreten ist und vor allem, was denn da im Argen liegt. Coole Sache, Danke an Christian Cloutier !!