Modules/GUIs.Common/Base/BaseErrorHandler.vb
2019-10-24 16:34:54 +02:00

104 lines
3.9 KiB
VB.net

Imports System.Reflection
Imports System.Windows.Forms
Imports DigitalData.Modules.Logging
Namespace Base
Public Class BaseErrorHandler
Private _LogConfig As LogConfig
Private _Logger As Logger
Private _Form As Form
Private Const UNKNOWN_METHOD = "Unknown Method"
Private Const UNKNOWN_FORM = "Unknown Form"
Public Sub New(LogConfig As LogConfig, Logger As Logger, Form As Form)
_LogConfig = LogConfig
_Logger = Logger
_Form = Form
End Sub
Public Sub ShowErrorMessage(Exception As Exception)
_Logger.Error(Exception)
MessageBox.Show(GetMessage(Exception), _Form.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Sub
Public Sub ShowInfoMessage(Text As String)
_Logger.Info(Text)
MessageBox.Show(Text, _Form.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
Private Function GetMessage(Exception As Exception) As String
Dim oTargetSite = Exception.TargetSite
Dim oMethodName = GetMethodName(Exception)
Dim oFormName = GetFormName(Exception)
Dim oMessage As String = String.Empty
If TypeOf Exception Is SqlClient.SqlException Then
Dim oNumber As Integer = DirectCast(Exception, SqlClient.SqlException).Number
Select Case oNumber
Case 2627
oMessage = "Es wurde ein Doppelter Wert in eine Spalte eingetragen, die einzigartig sein muss."
End Select
ElseIf TypeOf Exception Is NoNullAllowedException Then
oMessage = "Einige benötigte Felder wurde nicht ausgefüllt."
Else
oMessage = $"Es ist ein unerwarteter Fehler in {oFormName}/{oMethodName} aufgetreten. Mehr Informationen finden Sie im Log."
End If
If _LogConfig.Debug Then
oMessage &= vbNewLine & vbNewLine & "== Debug Informationen =="
oMessage &= vbNewLine & vbNewLine & "Die ursprüngliche Fehlermeldung lautet:"
oMessage &= vbNewLine & Exception.Message
oMessage &= vbNewLine & vbNewLine & "Stacktrace:"
oMessage &= vbNewLine & Exception.StackTrace
End If
Return oMessage
End Function
'Private Function GetMessage(Exception As Exception) As String
' Dim oTargetSite = Exception.TargetSite
' Dim oMethodName = GetMethodName(Exception)
' Dim oFormName = GetFormName(Exception)
' Dim oMessage As String = String.Empty
' oMessage &= $"Form: {oFormName}{vbNewLine}"
' oMessage &= $"Method: {oMethodName}{vbNewLine}"
' If Not String.IsNullOrEmpty(Exception.StackTrace) Then
' oMessage &= $"Message: {Exception.Message}{vbNewLine}{vbNewLine}"
' End If
' If Not String.IsNullOrEmpty(Exception.StackTrace) Then
' oMessage &= $"Stacktrace: {Exception.StackTrace}{vbNewLine}"
' End If
' oMessage &= $"{vbNewLine}"
' oMessage &= $"Please report this error to error@digitaldata.works"
' Return oMessage
'End Function
Private Function GetMethodName(Exception As Exception) As String
Dim oMethodName = Exception.TargetSite?.Name
If oMethodName Is Nothing Then
Return UNKNOWN_METHOD
Else
Return oMethodName
End If
End Function
Private Function GetFormName(Exception As Exception) As String
Dim oFormName = Exception.TargetSite?.ReflectedType?.Name
If oFormName Is Nothing Then
Return UNKNOWN_FORM
Else
Return oFormName
End If
End Function
End Class
End Namespace