Common: Improve BaseForms and ErrorHandler

This commit is contained in:
Jonathan Jenne 2021-04-26 16:31:41 +02:00
parent 72e639dc0c
commit 18786bee33
4 changed files with 77 additions and 12 deletions

View File

@ -14,9 +14,14 @@ Namespace Base
_Form = Form _Form = Form
End Sub End Sub
Public Sub ShowErrorMessage(Exception As Exception) Public Sub ShowErrorMessage(Exception As Exception, Origin As String)
Dim oMessage = GetMessage(Exception, Origin)
ShowErrorMessage(Exception, Origin, oMessage)
End Sub
Public Sub ShowErrorMessage(Exception As Exception, Origin As String, Message As String)
_Logger.Error(Exception) _Logger.Error(Exception)
MessageBox.Show(GetMessage(Exception), _Form.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) MessageBox.Show(Message, _Form.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Sub End Sub
Public Sub ShowInfoMessage(Text As String) Public Sub ShowInfoMessage(Text As String)
@ -24,8 +29,7 @@ Namespace Base
MessageBox.Show(Text, _Form.Text, MessageBoxButtons.OK, MessageBoxIcon.Information) MessageBox.Show(Text, _Form.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub End Sub
Private Function GetMessage(Exception As Exception) As String Private Function GetMessage(Exception As Exception, Origin As String) As String
Dim oCallingClass = LogConfig.GetClassFullName(IncludeMethodNames:=True, Parts:=2)
Dim oMessage As String = String.Empty Dim oMessage As String = String.Empty
If TypeOf Exception Is SqlClient.SqlException Then If TypeOf Exception Is SqlClient.SqlException Then
@ -37,13 +41,13 @@ Namespace Base
ElseIf TypeOf Exception Is NoNullAllowedException Then ElseIf TypeOf Exception Is NoNullAllowedException Then
oMessage = "Einige benötigte Felder wurde nicht ausgefüllt." oMessage = "Einige benötigte Felder wurde nicht ausgefüllt."
Else Else
oMessage = $"Es ist ein unerwarteter Fehler in {oCallingClass} aufgetreten. Mehr Informationen finden Sie im Log." oMessage = $"An unhandled exception occurred in {Origin}: " & vbNewLine &
Exception.Message & vbNewLine & vbNewLine &
"More information can be found in the Application Log."
End If End If
If _LogConfig.Debug Then If _LogConfig.Debug Then
oMessage &= vbNewLine & vbNewLine & "== Debug Informationen ==" oMessage &= vbNewLine & vbNewLine & "=== Debug Information ==="
oMessage &= vbNewLine & vbNewLine & "Die ursprüngliche Fehlermeldung lautet:"
oMessage &= vbNewLine & Exception.Message
oMessage &= vbNewLine & vbNewLine & "Stacktrace:" oMessage &= vbNewLine & vbNewLine & "Stacktrace:"
oMessage &= vbNewLine & Exception.StackTrace oMessage &= vbNewLine & Exception.StackTrace
End If End If

View File

@ -0,0 +1,51 @@

Imports DevExpress.XtraEditors
Imports DigitalData.Modules.Logging
Namespace Base
Public Class BaseForm
Inherits XtraForm
Private ReadOnly _Logger As Logger
Private ReadOnly _ErrorHandler As BaseErrorHandler
Protected ReadOnly Property Logger As Logger
Get
Return _Logger
End Get
End Property
Public Sub New()
End Sub
Public Sub New(LogConfig As LogConfig)
' Get the full name of the inheriting form
' so the log messages have the right classname
Dim oClassName = [GetType]().FullName
' My.LogConfig is undefined in the designer
_Logger = LogConfig.GetLogger(oClassName)
_ErrorHandler = New BaseErrorHandler(LogConfig, _Logger, Me)
' When you add something, be careful if it
' depends on a global var like My.LogConfig
' you might need to check for its existence with ?
End Sub
''' ============== PUBLIC METHODS ==============
Public Sub ShowInfoMessage(Message As String)
_ErrorHandler.ShowInfoMessage(Message)
End Sub
Public Sub ShowErrorMessage(Exception As Exception)
Dim oCallingClass = LogConfig.GetClassFullName(IncludeMethodNames:=True, Parts:=2)
_ErrorHandler.ShowErrorMessage(Exception, oCallingClass)
End Sub
Public Sub ShowErrorMessage(ErrorMessage As String)
Dim oCallingClass = LogConfig.GetClassFullName(IncludeMethodNames:=True, Parts:=2)
_ErrorHandler.ShowErrorMessage(New ApplicationException(ErrorMessage), oCallingClass)
End Sub
End Class
End Namespace

View File

@ -5,14 +5,16 @@ Imports DigitalData.Modules.Logging
Namespace Base Namespace Base
''' <summary> ''' <summary>
''' This BaseClass is used to provide common functionality like the Logger or ErrorHandler to all Forms ''' This BaseClass is used to provide common functionality like the Logger or ErrorHandler to all Forms
''' To use it, create a form and change the `Inherits` statement in FormName.Designer.vb to this form, eg.: ''' </summary>
''' <example>
''' To use it, create a form and change the `Inherits` statement in FormName.Designer.vb to this form.
''' '''
''' Partial Class frmExample ''' Partial Class frmExample
''' Inherits BaseRibbonForm ''' Inherits BaseRibbonForm
''' '''
''' ... ''' ...
''' End Class ''' End Class
''' </summary> ''' </example>
Public Class BaseRibbonForm Public Class BaseRibbonForm
Inherits RibbonForm Inherits RibbonForm
@ -43,13 +45,18 @@ Namespace Base
End Sub End Sub
''' ============== PUBLIC METHODS ============== ''' ============== PUBLIC METHODS ==============
Public Sub ShowInfoMessage(Message As String)
_ErrorHandler.ShowInfoMessage(Message)
End Sub
Public Sub ShowErrorMessage(Exception As Exception) Public Sub ShowErrorMessage(Exception As Exception)
_ErrorHandler.ShowErrorMessage(Exception) Dim oCallingClass = LogConfig.GetClassFullName(IncludeMethodNames:=True, Parts:=2)
_ErrorHandler.ShowErrorMessage(Exception, oCallingClass)
End Sub End Sub
Public Sub ShowErrorMessage(ErrorMessage As String) Public Sub ShowErrorMessage(ErrorMessage As String)
_ErrorHandler.ShowErrorMessage(New ApplicationException(ErrorMessage)) Dim oCallingClass = LogConfig.GetClassFullName(IncludeMethodNames:=True, Parts:=2)
_ErrorHandler.ShowErrorMessage(New ApplicationException(ErrorMessage), oCallingClass)
End Sub End Sub
End Class End Class
End Namespace End Namespace

View File

@ -89,6 +89,9 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Base\BaseErrorHandler.vb" /> <Compile Include="Base\BaseErrorHandler.vb" />
<Compile Include="Base\BaseForm.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Base\BaseResult.vb" /> <Compile Include="Base\BaseResult.vb" />
<Compile Include="Base\BaseRibbonForm.vb"> <Compile Include="Base\BaseRibbonForm.vb">
<SubType>Form</SubType> <SubType>Form</SubType>