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 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
|
||||
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
|
||||
'files_Durchlauf = My.Computer.FileSystem.GetFiles(Me.selectedProfile.OriginalQuellordner, FileIO.SearchOption.SearchTopLevelOnly, "*.*")
|
||||
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 = ""
|
||||
|
||||
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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user