Fehlerbehandlung bei fehlerhaften Pfaden in DI Profilen: threadDateiimport_DoWork, Profil_Durchlauf, threadDateiimport_RunWorkerCompleted optimiert - frmDIHautpseite

This commit is contained in:
OlgunR 2025-11-27 16:59:27 +01:00
parent a038af4193
commit 3bb034439a

View File

@ -60,6 +60,7 @@ Public Class frmDIHauptseite
Private CriticalErrorInBackgroundWorker As Boolean = False
Private manProfile As String
Private FehlerProfileListe As New List(Of String)
Private Alles_OK As Boolean = True
@ -268,7 +269,7 @@ Public Class frmDIHauptseite
#End Region
#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 _TimeEnd As Date
Try
@ -283,9 +284,11 @@ Public Class frmDIHauptseite
_TimeStart = Now
ClassLoggerDI.Add(" Intervall: " & Me.numIntervallDurchlauf.Value, False)
ClassLoggerDI.Add("======================================================================", False)
' Liste für fehlerhafte Profile zurücksetzen
FehlerProfileListe.Clear()
If _windream.Init Then
If Manuell = True Then
ClassLoggerDI.Add(">> Manueller Durchlauf", False)
ClassLoggerDI.Add("Profilname: " & manProfile, False)
@ -298,42 +301,51 @@ Public Class frmDIHauptseite
'1. ###### Zählen der Files
Gesamtfiles = 0
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)
'Nur die files der Aktiven Profile zählen
If CBool(selectedProfile.Aktiv) = True Then
If Me.selectedProfile.Subdirectories = True Then
files_Durchlauf = My.Computer.FileSystem.GetFiles(Me.selectedProfile.OriginalQuellordner, FileIO.SearchOption.SearchAllSubDirectories, "*.*")
Else
files_Durchlauf = My.Computer.FileSystem.GetFiles(Me.selectedProfile.OriginalQuellordner, FileIO.SearchOption.SearchTopLevelOnly, "*.*")
End If
'files_Durchlauf = My.Computer.FileSystem.GetFiles(Me.selectedProfile.OriginalQuellordner, FileIO.SearchOption.SearchTopLevelOnly, "*.*")
Gesamtfiles += files_Durchlauf.Count
Try
If Me.selectedProfile.Subdirectories = True Then
files_Durchlauf = My.Computer.FileSystem.GetFiles(Me.selectedProfile.OriginalQuellordner, FileIO.SearchOption.SearchAllSubDirectories, "*.*")
Else
files_Durchlauf = My.Computer.FileSystem.GetFiles(Me.selectedProfile.OriginalQuellordner, FileIO.SearchOption.SearchTopLevelOnly, "*.*")
End If
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
'MsgBox(files_Durchlauf.Count, MsgBoxStyle.Information, item.OriginalProfilname)
Next
ClassLoggerDI.Add("Gesamtanzahl der zu importierenden Dateien: " & Gesamtfiles, False)
If Gesamtfiles > 0 Then
'2. Jetzt das Durchlaufen jedes Profiles
For Each item As ClassDIProfil In ClassDIProfile.Profile
Me.selectedProfile = ClassDIProfile.getProfilByName(item.OriginalProfilname)
ClassLoggerDI.Add("Profilname: " & selectedProfile.Profilname, False)
' Überprüfen ob Profil aktiv oder inaktiv
If CBool(selectedProfile.Aktiv) = False Then
ClassLoggerDI.Add(">> Profil: " & selectedProfile.Profilname & " ist inaktiv geschaltet", 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
' den Durchlaufszeitpunkt speichern
selectedProfile.LastRun = Now
selectedProfile.Save(False)
'Und nun das PRofil durchlaufen
'Und nun das Profil durchlaufen
ClassLoggerDI.Add("- Start des Profildurchlaufes ", False)
Profil_Durchlauf()
End If
Next
End If
End If
@ -342,10 +354,9 @@ Public Class frmDIHauptseite
End If
'###
Catch ex As Exception
' 'MsgBox(ex.Message, MsgBoxStyle.Critical, "Fehler bei threadDateiimport_DoWork:")
ClassLoggerDI.Add(" ## Fehler bei thread_DI_DoWork: " & ex.Message, False)
' Resume Next
End Try
_TimeEnd = Now
Dim seconds As Integer = (_TimeEnd - _TimeStart).TotalSeconds
@ -358,8 +369,6 @@ Public Class frmDIHauptseite
Else
ClassLoggerDI.Add(" Dauer: " & (seconds / 60).ToString & " Minuten", False)
End If
End Sub
Public Function func_check_file_use(ByVal filename) As Boolean
filename = filename.Replace(My.Settings.vWLaufwerk, "\\windream\objects")
@ -426,11 +435,22 @@ Public Class frmDIHauptseite
Dim oFileAusschlussList As New ArrayList
'Variable für das "Letzte Subdirectory"
Dim oLastFolderinFiles As String = ""
If Me.selectedProfile.Subdirectories = True Then
Me.ImportFileList = My.Computer.FileSystem.GetFiles(Me.selectedProfile.OriginalQuellordner, FileIO.SearchOption.SearchAllSubDirectories, "*.*")
Else
Me.ImportFileList = My.Computer.FileSystem.GetFiles(Me.selectedProfile.OriginalQuellordner, FileIO.SearchOption.SearchTopLevelOnly, "*.*")
End If
Try
If Me.selectedProfile.Subdirectories = True Then
Me.ImportFileList = My.Computer.FileSystem.GetFiles(Me.selectedProfile.OriginalQuellordner, FileIO.SearchOption.SearchAllSubDirectories, "*.*")
Else
Me.ImportFileList = My.Computer.FileSystem.GetFiles(Me.selectedProfile.OriginalQuellordner, FileIO.SearchOption.SearchTopLevelOnly, "*.*")
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 DT_TBTC_DI_REGEX_MATCH As DataTable
Try
@ -873,8 +893,6 @@ Public Class frmDIHauptseite
#Region "*** BackgroundWorker wurde beendet ***"
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
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")
Else
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("\")))
'If Me.selectedProfile.VerzeichnisLöschen Then
' Try
' If Me.txtQuellordner.Text <> "" Then
' My.Computer.FileSystem.DeleteDirectory(Me.txtQuellordner.Text, FileIO.DeleteDirectoryOption.ThrowIfDirectoryNonEmpty)
' End If
' Catch ex As Exception
' 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:")
' End Try
'End If
' Fehlermeldung für fehlerhafte Profile anzeigen
If FehlerProfileListe.Count > 0 Then
Dim fehlerMessage As New System.Text.StringBuilder()
fehlerMessage.AppendLine("ACHTUNG: Fehler in folgenden Profilen:")
fehlerMessage.AppendLine()
For Each profilname As String In FehlerProfileListe
fehlerMessage.AppendLine("" & profilname)
Next
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
' -> sonst wird das letzte Element nicht richtig (nur zur Hälfte) angezeigt