The error_handling.lss
file I described in a previous post needs to be available on any machine where the script using it will execute. This is due to a weird behavior of the Notes engine when processing the %Include instruction: The inclusion is done at execution time if executing on a client and at compilation time if executing on a server.
It is certainly possible to distribute a file to all the users, explaining in which folder to copy it, but it is much simpler to have the same database that use it to install it whenever needed.
The HelpAbout
document is a good place for storing a file. After attaching it, a HideWhen formula will prevent it from showing up to the user. Then a simple (Install error_handling.lss)
agent will extract the file to the proper folder (if the folder doesn’t already have one). And the formula @Command( [RunAgent]; "(Install error_handling.lss)" )
in the PostOpen
event of the Database Script
library will run the agent each time the user opens the database.
Here is the code for the agent:
'Install error_handling.lss:
Option Public
Option Declare
Use "RegistryAccess"
Sub Initialize
On Error Goto HandleError
Goto EnterProc
HandleError:
Error Err, Getthreadinfo( 1 ) & " : " & Erl & Chr$( 10 ) & Error$
EnterProc:
Dim install As String
install = "error_handling.lss"
Dim notesFolder As String
notesFolder = RegQueryValue( "HKEY_LOCAL_MACHINE", "SoftwareLotusNotes", "Path" )
Dim path As String
path = notesFolder & install
If Dir$( path ) <> "" Then
' exit on library already installed
Exit Sub
End If
Dim s As New NotesSession
Dim db As NotesDatabase
Set db = s.CurrentDatabase
Dim d As notesdocument
Set d = GetHelpAboutDocument( db )
If d Is Nothing Then
' exit on library not available in the database
Msgbox "The library " & install & " must be installed" & Chr( 10 ) _
& "It's not in the database" & Chr( 10 ) _
& "Contact the administrator of this database"
Exit Sub
End If
Call ExtractAttachment( d, install, path )
If Dir( path ) = "" Then
' exit on file not created
Msgbox "The library " & install & " must be installed" & Chr( 10 ) _
& "The file " & path & " couldn't be created" & Chr( 10 ) _
& "Contact the administrator of this database"
Exit Sub
End If
Print "Installed library " & install
install = "error_handling_ui.lss"
path = notesFolder & install
Call ExtractAttachment( d, install, path )
If Dir( path ) = "" Then
' exit on file not created
Msgbox "The library " & install & " must be installed" & Chr( 10 ) _
& "The file " & path & " couldn't be created" & Chr( 10 ) _
& "Contact the administrator of this database"
Exit Sub
End If
Print "Installed library " & install
End Sub
Function GetHelpAboutDocument( db As NotesDatabase ) As NotesDocument
On Error Goto HandleError
Goto EnterProc
HandleError:
Error Err, Getthreadinfo( 1 ) & " : " & Erl & Chr$( 10 ) & Error$
EnterProc:
Dim nc As NotesNoteCollection
Set nc = db.CreateNoteCollection( False )
nc.SelectHelpAbout = True
Call nc.BuildCollection
Dim nid As String
nid = nc.GetFirstNoteId
If nid <> "" Then
Set GetHelpAboutDocument = db.GetDocumentByID( nid )
Else
Set GetHelpAboutDocument = Nothing
End If
End Function
Sub ExtractAttachment( d As NotesDocument, filename As String, path As String )
On Error Goto HandleError
Goto EnterProc
HandleError:
Error Err, Getthreadinfo( 1 ) & " : " & Erl & Chr$( 10 ) & Error$
EnterProc:
If Not d.HasEmbedded Then Exit Sub
Dim embedded As NotesEmbeddedObject
Set embedded = d.GetAttachment( filename )
If embedded Is Nothing Then Exit Sub
Call embedded.ExtractFile( path )
End Sub