Fehlerbehandlung bei fehlerhaften Pfaden in DI Profilen: threadDateiimport_DoWork, Profil_Durchlauf, threadDateiimport_RunWorkerCompleted optimiert - frmDIHautpseite
This commit is contained in:
parent
a038af4193
commit
3bb034439a
@ -60,6 +60,7 @@ Public Class frmDIHauptseite
|
|||||||
Private CriticalErrorInBackgroundWorker As Boolean = False
|
Private CriticalErrorInBackgroundWorker As Boolean = False
|
||||||
Private manProfile As String
|
Private manProfile As String
|
||||||
|
|
||||||
|
Private FehlerProfileListe As New List(Of String)
|
||||||
|
|
||||||
Private Alles_OK As Boolean = True
|
Private Alles_OK As Boolean = True
|
||||||
|
|
||||||
@ -268,7 +269,7 @@ Public Class frmDIHauptseite
|
|||||||
#End Region
|
#End Region
|
||||||
|
|
||||||
#Region "*** DoWork: während der BackgroundWorker aktiv ist ***"
|
#Region "*** DoWork: während der BackgroundWorker aktiv ist ***"
|
||||||
Private Sub threadDateiimport_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) 'Handles threadDateiimport.DoWork
|
Private Sub threadDateiimport_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
|
||||||
Dim _TimeStart As Date
|
Dim _TimeStart As Date
|
||||||
Dim _TimeEnd As Date
|
Dim _TimeEnd As Date
|
||||||
Try
|
Try
|
||||||
@ -283,9 +284,11 @@ Public Class frmDIHauptseite
|
|||||||
_TimeStart = Now
|
_TimeStart = Now
|
||||||
ClassLoggerDI.Add(" Intervall: " & Me.numIntervallDurchlauf.Value, False)
|
ClassLoggerDI.Add(" Intervall: " & Me.numIntervallDurchlauf.Value, False)
|
||||||
ClassLoggerDI.Add("======================================================================", False)
|
ClassLoggerDI.Add("======================================================================", False)
|
||||||
|
|
||||||
|
' Liste für fehlerhafte Profile zurücksetzen
|
||||||
|
FehlerProfileListe.Clear()
|
||||||
|
|
||||||
If _windream.Init Then
|
If _windream.Init Then
|
||||||
|
|
||||||
|
|
||||||
If Manuell = True Then
|
If Manuell = True Then
|
||||||
ClassLoggerDI.Add(">> Manueller Durchlauf", False)
|
ClassLoggerDI.Add(">> Manueller Durchlauf", False)
|
||||||
ClassLoggerDI.Add("Profilname: " & manProfile, False)
|
ClassLoggerDI.Add("Profilname: " & manProfile, False)
|
||||||
@ -298,42 +301,51 @@ Public Class frmDIHauptseite
|
|||||||
'1. ###### Zählen der Files
|
'1. ###### Zählen der Files
|
||||||
Gesamtfiles = 0
|
Gesamtfiles = 0
|
||||||
Dim files_Durchlauf As ReadOnlyCollection(Of String)
|
Dim files_Durchlauf As ReadOnlyCollection(Of String)
|
||||||
For Each item As ClassDIProfil In ClassDIProfile.Profile
|
|
||||||
|
|
||||||
|
For Each item As ClassDIProfil In ClassDIProfile.Profile
|
||||||
Me.selectedProfile = ClassDIProfile.getProfilByName(item.OriginalProfilname)
|
Me.selectedProfile = ClassDIProfile.getProfilByName(item.OriginalProfilname)
|
||||||
|
|
||||||
'Nur die files der Aktiven Profile zählen
|
'Nur die files der Aktiven Profile zählen
|
||||||
If CBool(selectedProfile.Aktiv) = True Then
|
If CBool(selectedProfile.Aktiv) = True Then
|
||||||
|
Try
|
||||||
If Me.selectedProfile.Subdirectories = True Then
|
If Me.selectedProfile.Subdirectories = True Then
|
||||||
files_Durchlauf = My.Computer.FileSystem.GetFiles(Me.selectedProfile.OriginalQuellordner, FileIO.SearchOption.SearchAllSubDirectories, "*.*")
|
files_Durchlauf = My.Computer.FileSystem.GetFiles(Me.selectedProfile.OriginalQuellordner, FileIO.SearchOption.SearchAllSubDirectories, "*.*")
|
||||||
Else
|
Else
|
||||||
files_Durchlauf = My.Computer.FileSystem.GetFiles(Me.selectedProfile.OriginalQuellordner, FileIO.SearchOption.SearchTopLevelOnly, "*.*")
|
files_Durchlauf = My.Computer.FileSystem.GetFiles(Me.selectedProfile.OriginalQuellordner, FileIO.SearchOption.SearchTopLevelOnly, "*.*")
|
||||||
End If
|
End If
|
||||||
'files_Durchlauf = My.Computer.FileSystem.GetFiles(Me.selectedProfile.OriginalQuellordner, FileIO.SearchOption.SearchTopLevelOnly, "*.*")
|
|
||||||
Gesamtfiles += files_Durchlauf.Count
|
Gesamtfiles += files_Durchlauf.Count
|
||||||
|
Catch ex As Exception
|
||||||
|
' Profil zur Fehlerliste hinzufügen
|
||||||
|
FehlerProfileListe.Add(item.OriginalProfilname)
|
||||||
|
ClassLoggerDI.Add($"## FEHLER beim Zugriff auf Quellordner für Profil '{item.OriginalProfilname}': {ex.Message}", True)
|
||||||
|
End Try
|
||||||
End If
|
End If
|
||||||
|
|
||||||
'MsgBox(files_Durchlauf.Count, MsgBoxStyle.Information, item.OriginalProfilname)
|
|
||||||
Next
|
Next
|
||||||
|
|
||||||
ClassLoggerDI.Add("Gesamtanzahl der zu importierenden Dateien: " & Gesamtfiles, False)
|
ClassLoggerDI.Add("Gesamtanzahl der zu importierenden Dateien: " & Gesamtfiles, False)
|
||||||
|
|
||||||
If Gesamtfiles > 0 Then
|
If Gesamtfiles > 0 Then
|
||||||
'2. Jetzt das Durchlaufen jedes Profiles
|
'2. Jetzt das Durchlaufen jedes Profiles
|
||||||
For Each item As ClassDIProfil In ClassDIProfile.Profile
|
For Each item As ClassDIProfil In ClassDIProfile.Profile
|
||||||
Me.selectedProfile = ClassDIProfile.getProfilByName(item.OriginalProfilname)
|
Me.selectedProfile = ClassDIProfile.getProfilByName(item.OriginalProfilname)
|
||||||
ClassLoggerDI.Add("Profilname: " & selectedProfile.Profilname, False)
|
ClassLoggerDI.Add("Profilname: " & selectedProfile.Profilname, False)
|
||||||
|
|
||||||
' Überprüfen ob Profil aktiv oder inaktiv
|
' Überprüfen ob Profil aktiv oder inaktiv
|
||||||
If CBool(selectedProfile.Aktiv) = False Then
|
If CBool(selectedProfile.Aktiv) = False Then
|
||||||
ClassLoggerDI.Add(">> Profil: " & selectedProfile.Profilname & " ist inaktiv geschaltet", False)
|
ClassLoggerDI.Add(">> Profil: " & selectedProfile.Profilname & " ist inaktiv geschaltet", False)
|
||||||
ClassLoggerDI.Add("", False)
|
ClassLoggerDI.Add("", False)
|
||||||
|
ElseIf FehlerProfileListe.Contains(item.OriginalProfilname) Then
|
||||||
|
' Profil überspringen, wenn es bereits als fehlerhaft markiert wurde
|
||||||
|
ClassLoggerDI.Add(">> Profil: " & selectedProfile.Profilname & " wird übersprungen (fehlerhafter Pfad)", False)
|
||||||
|
ClassLoggerDI.Add("", False)
|
||||||
Else
|
Else
|
||||||
' den Durchlaufszeitpunkt speichern
|
' den Durchlaufszeitpunkt speichern
|
||||||
selectedProfile.LastRun = Now
|
selectedProfile.LastRun = Now
|
||||||
selectedProfile.Save(False)
|
selectedProfile.Save(False)
|
||||||
'Und nun das PRofil durchlaufen
|
'Und nun das Profil durchlaufen
|
||||||
ClassLoggerDI.Add("- Start des Profildurchlaufes ", False)
|
ClassLoggerDI.Add("- Start des Profildurchlaufes ", False)
|
||||||
Profil_Durchlauf()
|
Profil_Durchlauf()
|
||||||
End If
|
End If
|
||||||
|
|
||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
@ -342,10 +354,9 @@ Public Class frmDIHauptseite
|
|||||||
End If
|
End If
|
||||||
'###
|
'###
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
' 'MsgBox(ex.Message, MsgBoxStyle.Critical, "Fehler bei threadDateiimport_DoWork:")
|
|
||||||
ClassLoggerDI.Add(" ## Fehler bei thread_DI_DoWork: " & ex.Message, False)
|
ClassLoggerDI.Add(" ## Fehler bei thread_DI_DoWork: " & ex.Message, False)
|
||||||
' Resume Next
|
|
||||||
End Try
|
End Try
|
||||||
|
|
||||||
_TimeEnd = Now
|
_TimeEnd = Now
|
||||||
Dim seconds As Integer = (_TimeEnd - _TimeStart).TotalSeconds
|
Dim seconds As Integer = (_TimeEnd - _TimeStart).TotalSeconds
|
||||||
|
|
||||||
@ -358,8 +369,6 @@ Public Class frmDIHauptseite
|
|||||||
Else
|
Else
|
||||||
ClassLoggerDI.Add(" Dauer: " & (seconds / 60).ToString & " Minuten", False)
|
ClassLoggerDI.Add(" Dauer: " & (seconds / 60).ToString & " Minuten", False)
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
|
||||||
End Sub
|
End Sub
|
||||||
Public Function func_check_file_use(ByVal filename) As Boolean
|
Public Function func_check_file_use(ByVal filename) As Boolean
|
||||||
filename = filename.Replace(My.Settings.vWLaufwerk, "\\windream\objects")
|
filename = filename.Replace(My.Settings.vWLaufwerk, "\\windream\objects")
|
||||||
@ -426,11 +435,22 @@ Public Class frmDIHauptseite
|
|||||||
Dim oFileAusschlussList As New ArrayList
|
Dim oFileAusschlussList As New ArrayList
|
||||||
'Variable für das "Letzte Subdirectory"
|
'Variable für das "Letzte Subdirectory"
|
||||||
Dim oLastFolderinFiles As String = ""
|
Dim oLastFolderinFiles As String = ""
|
||||||
|
|
||||||
|
Try
|
||||||
If Me.selectedProfile.Subdirectories = True Then
|
If Me.selectedProfile.Subdirectories = True Then
|
||||||
Me.ImportFileList = My.Computer.FileSystem.GetFiles(Me.selectedProfile.OriginalQuellordner, FileIO.SearchOption.SearchAllSubDirectories, "*.*")
|
Me.ImportFileList = My.Computer.FileSystem.GetFiles(Me.selectedProfile.OriginalQuellordner, FileIO.SearchOption.SearchAllSubDirectories, "*.*")
|
||||||
Else
|
Else
|
||||||
Me.ImportFileList = My.Computer.FileSystem.GetFiles(Me.selectedProfile.OriginalQuellordner, FileIO.SearchOption.SearchTopLevelOnly, "*.*")
|
Me.ImportFileList = My.Computer.FileSystem.GetFiles(Me.selectedProfile.OriginalQuellordner, FileIO.SearchOption.SearchTopLevelOnly, "*.*")
|
||||||
End If
|
End If
|
||||||
|
Catch ex As Exception
|
||||||
|
' Profil zur Fehlerliste hinzufügen, falls noch nicht vorhanden
|
||||||
|
If Not FehlerProfileListe.Contains(Me.selectedProfile.OriginalProfilname) Then
|
||||||
|
FehlerProfileListe.Add(Me.selectedProfile.OriginalProfilname)
|
||||||
|
End If
|
||||||
|
ClassLoggerDI.Add($"## FEHLER beim Zugriff auf Quellordner für Profil '{Me.selectedProfile.OriginalProfilname}': {ex.Message}", True)
|
||||||
|
Exit Sub
|
||||||
|
End Try
|
||||||
|
|
||||||
Dim oError As Boolean = False
|
Dim oError As Boolean = False
|
||||||
Dim DT_TBTC_DI_REGEX_MATCH As DataTable
|
Dim DT_TBTC_DI_REGEX_MATCH As DataTable
|
||||||
Try
|
Try
|
||||||
@ -873,8 +893,6 @@ Public Class frmDIHauptseite
|
|||||||
|
|
||||||
#Region "*** BackgroundWorker wurde beendet ***"
|
#Region "*** BackgroundWorker wurde beendet ***"
|
||||||
Private Sub threadDateiimport_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) 'Handles threadDateiimport.RunWorkerCompleted
|
Private Sub threadDateiimport_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) 'Handles threadDateiimport.RunWorkerCompleted
|
||||||
' This event fires when the DoWork event completes
|
|
||||||
|
|
||||||
Try
|
Try
|
||||||
Dim result As String = ""
|
Dim result As String = ""
|
||||||
|
|
||||||
@ -884,19 +902,32 @@ Public Class frmDIHauptseite
|
|||||||
MsgBox("Beim Dateiimport ist ein Fehler aufgetreten. Der Vorgang wurde abgebrochen." & vbNewLine & vbNewLine & "Dateiimport: Fehlernachricht:" & vbNewLine & e.Error.Message, MsgBoxStyle.Exclamation, "Vorgang auf Grund eines Fehlers abgebrochen")
|
MsgBox("Beim Dateiimport ist ein Fehler aufgetreten. Der Vorgang wurde abgebrochen." & vbNewLine & vbNewLine & "Dateiimport: Fehlernachricht:" & vbNewLine & e.Error.Message, MsgBoxStyle.Exclamation, "Vorgang auf Grund eines Fehlers abgebrochen")
|
||||||
Else
|
Else
|
||||||
Me.progressImport.Value = 100
|
Me.progressImport.Value = 100
|
||||||
'MsgBox("Der Dateiimport für das Profil '" & Me.cmbProfilauswahl.SelectedItem & "' wurde erfolgreich durchgeführt.", MsgBoxStyle.Information, "Dateiimport: Vorgang erfolgreich beendet")
|
|
||||||
End If
|
|
||||||
|
|
||||||
''MsgBox(filenameQuelle.Substring(0, filenameQuelle.LastIndexOf("\")))
|
' Fehlermeldung für fehlerhafte Profile anzeigen
|
||||||
'If Me.selectedProfile.VerzeichnisLöschen Then
|
If FehlerProfileListe.Count > 0 Then
|
||||||
' Try
|
Dim fehlerMessage As New System.Text.StringBuilder()
|
||||||
' If Me.txtQuellordner.Text <> "" Then
|
fehlerMessage.AppendLine("ACHTUNG: Fehler in folgenden Profilen:")
|
||||||
' My.Computer.FileSystem.DeleteDirectory(Me.txtQuellordner.Text, FileIO.DeleteDirectoryOption.ThrowIfDirectoryNonEmpty)
|
fehlerMessage.AppendLine()
|
||||||
' End If
|
|
||||||
' Catch ex As Exception
|
For Each profilname As String In FehlerProfileListe
|
||||||
' MsgBox("Der Vorgang wurde abgeschlossen. Das Quellverzeichnis konnte jedoch nicht gelöscht werden, da sich in dem Ordner noch Dateien/Verzeichnisse befinden.", MsgBoxStyle.Information, "Vorgang beendet:")
|
fehlerMessage.AppendLine(" • " & profilname)
|
||||||
' End Try
|
Next
|
||||||
'End If
|
|
||||||
|
fehlerMessage.AppendLine()
|
||||||
|
fehlerMessage.AppendLine("Bitte kontrollieren Sie die hinterlegten Quell- und Zielpfade,")
|
||||||
|
fehlerMessage.AppendLine("sowie die Zugriffsberechtigungen!")
|
||||||
|
|
||||||
|
MsgBox(fehlerMessage.ToString(), MsgBoxStyle.Exclamation, "Fehlerhafte Profile erkannt")
|
||||||
|
|
||||||
|
' Fehler auch im Log vermerken
|
||||||
|
ClassLoggerDI.Add("======================================================================", False)
|
||||||
|
ClassLoggerDI.Add(" FEHLERHAFTE PROFILE: " & FehlerProfileListe.Count, True)
|
||||||
|
For Each profilname As String In FehlerProfileListe
|
||||||
|
ClassLoggerDI.Add(" - " & profilname, True)
|
||||||
|
Next
|
||||||
|
ClassLoggerDI.Add("======================================================================", False)
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
' den ersten Knoten öffnen und direkt wieder schließen, damit der letzte Knoten korrekt angezeigt wird
|
' den ersten Knoten öffnen und direkt wieder schließen, damit der letzte Knoten korrekt angezeigt wird
|
||||||
' -> sonst wird das letzte Element nicht richtig (nur zur Hälfte) angezeigt
|
' -> sonst wird das letzte Element nicht richtig (nur zur Hälfte) angezeigt
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user