3 Commits

Author SHA1 Message Date
Jonathan Jenne
2bf8a18277 Common: Version 1.7.4 2021-04-26 16:32:19 +02:00
Jonathan Jenne
af040e4ee9 ZooFlow: Use Error Handling from Common 2021-04-26 16:31:57 +02:00
Jonathan Jenne
18786bee33 Common: Improve BaseForms and ErrorHandler 2021-04-26 16:31:41 +02:00
7 changed files with 103 additions and 43 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>

View File

@@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices
' übernehmen, indem Sie "*" eingeben: ' übernehmen, indem Sie "*" eingeben:
' <Assembly: AssemblyVersion("1.0.*")> ' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.7.3.0")> <Assembly: AssemblyVersion("1.7.4.0")>
<Assembly: AssemblyFileVersion("1.7.3.0")> <Assembly: AssemblyFileVersion("1.7.4.0")>

View File

@@ -1,6 +1,8 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> Imports DigitalData.GUIs.Common.Base
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
Partial Class frmFlowForm Partial Class frmFlowForm
Inherits DevExpress.XtraEditors.XtraForm Inherits BaseForm
'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
<System.Diagnostics.DebuggerNonUserCode()> <System.Diagnostics.DebuggerNonUserCode()>
@@ -23,7 +25,7 @@ Partial Class frmFlowForm
<System.Diagnostics.DebuggerStepThrough()> <System.Diagnostics.DebuggerStepThrough()>
Private Sub InitializeComponent() Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container() Me.components = New System.ComponentModel.Container()
Dim SplashScreenManager As DevExpress.XtraSplashScreen.SplashScreenManager = New DevExpress.XtraSplashScreen.SplashScreenManager(Me, Nothing, true, true) Dim SplashScreenManager As DevExpress.XtraSplashScreen.SplashScreenManager = New DevExpress.XtraSplashScreen.SplashScreenManager(Me, Nothing, True, True)
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmFlowForm)) Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmFlowForm))
Me.NotifyIcon = New System.Windows.Forms.NotifyIcon(Me.components) Me.NotifyIcon = New System.Windows.Forms.NotifyIcon(Me.components)
Me.ContextMenuSystray = New System.Windows.Forms.ContextMenuStrip(Me.components) Me.ContextMenuSystray = New System.Windows.Forms.ContextMenuStrip(Me.components)

View File

@@ -18,7 +18,6 @@ Public Class frmFlowForm
Private Const OPACITY_HIDDEN = 0.65 Private Const OPACITY_HIDDEN = 0.65
Private Const OPACITY_SHOWN = 0.85 Private Const OPACITY_SHOWN = 0.85
Private Logger As Logger
Private DTIDB_SEARCHES As DataTable Private DTIDB_SEARCHES As DataTable
' Common Helpers Classes ' Common Helpers Classes
@@ -58,6 +57,8 @@ Public Class frmFlowForm
Private WithEvents Watcher As ClipboardWatcher.Watcher = ClipboardWatcher.Watcher.Singleton Private WithEvents Watcher As ClipboardWatcher.Watcher = ClipboardWatcher.Watcher.Singleton
Public Sub New() Public Sub New()
MyBase.New(My.LogConfig)
' Dieser Aufruf ist für den Designer erforderlich. ' Dieser Aufruf ist für den Designer erforderlich.
InitializeComponent() InitializeComponent()
@@ -66,9 +67,6 @@ Public Class frmFlowForm
End Sub End Sub
Private Sub frmFlowForm_Load(sender As Object, e As EventArgs) Handles Me.Load Private Sub frmFlowForm_Load(sender As Object, e As EventArgs) Handles Me.Load
' === Initialize Logger ===
Logger = My.LogConfig.GetLogger()
' === Show Splash Screen === ' === Show Splash Screen ===
SplashScreenManager.ShowForm(Me, GetType(frmSplash), False, False) SplashScreenManager.ShowForm(Me, GetType(frmSplash), False, False)
@@ -250,8 +248,7 @@ Public Class frmFlowForm
ProfileLoader = New ClassProfileLoader(My.LogConfig, AppServerOrDB) ProfileLoader = New ClassProfileLoader(My.LogConfig, AppServerOrDB)
ProfileLoader.LoadProfiles() ProfileLoader.LoadProfiles()
Catch ex As Exception Catch ex As Exception
Logger.Error(ex) ShowErrorMessage(ex)
MsgBox("Error while initializing Clipboard Watcher!", MsgBoxStyle.Critical, Text)
End Try End Try
Else Else
My.Application.ClipboardWatcher.MonitoringActive = False My.Application.ClipboardWatcher.MonitoringActive = False
@@ -291,6 +288,8 @@ Public Class frmFlowForm
If oDT.Rows.Count = 0 Then If oDT.Rows.Count = 0 Then
Throw New ApplicationException("No Default Path configured for User!") Throw New ApplicationException("No Default Path configured for User!")
'Logger.Warn("No Default Path configured for User. Skipping.")
'Exit Sub
End If End If
Dim oFolderWatchPath = oDT.Rows.Item(0).Item("FOLDER_PATH") Dim oFolderWatchPath = oDT.Rows.Item(0).Item("FOLDER_PATH")
@@ -319,9 +318,7 @@ Public Class frmFlowForm
'FWFunction_STARTED = True 'FWFunction_STARTED = True
FolderWatch.StartStop_FolderWatch() FolderWatch.StartStop_FolderWatch()
Catch ex As Exception Catch ex As Exception
MsgBox($"Init_Folderwatch: Unexpected error while starting FolderWatch: {ex.Message}", MsgBoxStyle.Critical) ShowErrorMessage(ex)
Logger.Error(ex)
Logger.Info($"Init_Folderwatch: Unexpected error: {ex.Message}")
End Try End Try
Try Try
@@ -350,8 +347,7 @@ Public Class frmFlowForm
'FWFunction_STARTED = True 'FWFunction_STARTED = True
FolderWatch.StartStop_FolderWatchSCAN() FolderWatch.StartStop_FolderWatchSCAN()
Catch ex As Exception Catch ex As Exception
MsgBox($"Init_Folderwatch: Unexpected error while starting FolderWatchScan: {ex.Message}", MsgBoxStyle.Critical) ShowErrorMessage(ex)
Logger.Info($"Init_Folderwatch: Unexpected error: {ex.Message}")
End Try End Try
End Sub End Sub
@@ -529,12 +525,12 @@ Public Class frmFlowForm
Private Function FormLoaded_Visible() As Boolean Private Function FormLoaded_Visible() As Boolean
For Each frm As Form In Application.OpenForms For Each frm As Form In Application.OpenForms
If frm.Name.Equals("frmSearchStart") Or frm.Name.Equals("frmGlobix_Index") Or frm.Name.Equals("frmAdmin_Start") Then If frm.Name.Equals("frmSearchStart") Or frm.Name.Equals("frmGlobix_Index") Or frm.Name.Equals("frmAdmin_Start") Then
Me.Visible = False Return False
Exit Function
End If End If
Next Next
Me.Visible = True
TimerCheckActiveForms.Enabled = False TimerCheckActiveForms.Enabled = False
Return True
End Function End Function
Private Sub DatenbankverbindungToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DatenbankverbindungToolStripMenuItem.Click Private Sub DatenbankverbindungToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DatenbankverbindungToolStripMenuItem.Click
@@ -542,13 +538,13 @@ Public Class frmFlowForm
End Sub End Sub
Private Sub TimerCheckActiveForms_Tick(sender As Object, e As EventArgs) Handles TimerCheckActiveForms.Tick Private Sub TimerCheckActiveForms_Tick(sender As Object, e As EventArgs) Handles TimerCheckActiveForms.Tick
FormLoaded_Visible() Visible = FormLoaded_Visible()
If Me.Visible = False Then Exit Sub If Visible = False Then Exit Sub
End Sub End Sub
Private Sub NotifyIcon_DoubleClick(sender As Object, e As EventArgs) Handles NotifyIcon.DoubleClick Private Sub NotifyIcon_DoubleClick(sender As Object, e As EventArgs) Handles NotifyIcon.DoubleClick
If Me.Visible = False Then If Visible = False Then
Me.Visible = True Visible = True
TimerCheckActiveForms.Enabled = False TimerCheckActiveForms.Enabled = False
End If End If
End Sub End Sub
@@ -657,7 +653,7 @@ Public Class frmFlowForm
Next Next
Show() Show()
Catch ex As Exception Catch ex As Exception
MsgBox("Unexpected Error in Check_Dropped_Files:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) ShowErrorMessage(ex)
Show() Show()
End Try End Try
@@ -673,8 +669,7 @@ Public Class frmFlowForm
TimerCheckActiveForms.Enabled = True TimerCheckActiveForms.Enabled = True
End If End If
Catch ex As Exception Catch ex As Exception
Logger.Error(ex) ShowErrorMessage(ex)
MsgBox(ex.Message, MsgBoxStyle.Critical)
End Try End Try
End Sub End Sub
Sub NotifyIconReset() Sub NotifyIconReset()
@@ -696,7 +691,7 @@ Public Class frmFlowForm
End Select End Select
NotifyIcon.ShowBalloonTip(30000, NI_TITLE, NI_MESSAGE, oNIType) NotifyIcon.ShowBalloonTip(30000, NI_TITLE, NI_MESSAGE, oNIType)
Catch ex As Exception Catch ex As Exception
ShowErrorMessage(ex)
End Try End Try
End Sub End Sub
Sub Start_Folderwatch() Sub Start_Folderwatch()
@@ -749,8 +744,7 @@ Public Class frmFlowForm
Logger.Info("FWSCAN not started") Logger.Info("FWSCAN not started")
End If End If
Catch ex As Exception Catch ex As Exception
Logger.Info("Error while starting folderwatch scan: " & ex.Message) ShowErrorMessage(ex)
Logger.Error(ex.Message)
End Try End Try
Try Try
@@ -786,8 +780,7 @@ Public Class frmFlowForm
Logger.Info("Folderwatch not started") Logger.Info("Folderwatch not started")
End If End If
Catch ex As Exception Catch ex As Exception
Logger.Info("Error while starting folderwatch: " & ex.Message) ShowErrorMessage(ex)
Logger.Error(ex.Message)
End Try End Try
If TimerFolderwatch.Enabled = False Then If TimerFolderwatch.Enabled = False Then