ToolCollection/ToolCollection/frmDIHauptseite.vb

2536 lines
131 KiB
VB.net

#Region "+++++ Imports +++++"
Imports System.IO
Imports System.Threading
Imports System.ComponentModel
Imports System.Collections.ObjectModel
Imports System.Net.Mail
Imports System.ServiceProcess
Imports WINDREAMLib
Imports DigitalData.Modules.Logging
Imports System.Text.RegularExpressions
#End Region
Public Class frmDIHauptseite
Dim Formloaded As Boolean = False
Private Shared _Instance As frmDIHauptseite = Nothing
Private _running As Boolean = False
Dim In_Use As Boolean
Private email As New ClassDI_Email
Public Shared _windream As ClassWindream_allgemein
Public Shared _Link2NavDokumentart, _Link2NavIndexwert As String
Private Shared _Logger As DigitalData.Modules.Logging.Logger
Private Shared _MyLogger As LogConfig
Public Shared Function Instance() As frmDIHauptseite
If _Instance Is Nothing OrElse _Instance.IsDisposed = True Then
_Instance = New frmDIHauptseite
End If
_Instance.BringToFront()
Return _Instance
End Function
Public Sub New()
Try
' Dieser Aufruf ist für den Designer erforderlich.
InitializeComponent()
_MyLogger = New LogConfig(LogConfig.PathType.CustomPath, Path.Combine(My.Application.Info.DirectoryPath, "Log"))
_Logger = _MyLogger.GetLogger()
Me.threadDateiimport = New BackgroundWorker()
Me.threadDateiimport.WorkerReportsProgress = True
Me.threadDateiimport.WorkerSupportsCancellation = True
_windream = New ClassWindream_allgemein(_MyLogger)
AddHandler threadDateiimport.DoWork, AddressOf threadDateiimport_DoWork
AddHandler threadDateiimport.RunWorkerCompleted, AddressOf threadDateiimport_RunWorkerCompleted
AddHandler threadDateiimport.ProgressChanged, AddressOf threadDateiimport_ProgressChanged
'Do While _windream.Init = False
' MsgBox("Windream nicht initiiert")
'Loop
ClassDIProfile.Init()
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Fehler bei Laden von Dateiimport -> Hauptseite")
End Try
End Sub
#Region "+++++ Variablen +++++"
Private threadDateiimport As BackgroundWorker
Private selectedProfile As ClassDIProfil = New ClassDIProfil()
Private ImportFileList As ReadOnlyCollection(Of String)
Private UVerzeichnisse As ReadOnlyCollection(Of String)
Private arrayDateiinformationen As ArrayList
Private CriticalErrorInBackgroundWorker As Boolean = False
Private manProfile As String
Private Alles_OK As Boolean = True
Private Manuell As Boolean = False
Private Durchlauf As Boolean = False
Private CountFilesImported As Integer = 0
Private CountFiles2Import As Integer = 0
Private bgwQuelldatei = ""
Private bgwZielordner = ""
Private oWMStream_Result As Integer
Private ErgebnisNochNichtLöschen As Boolean = False
Private TreeNodeInfos As New ArrayList
Private singleInfoNode As New ArrayList
Private Gesamtfiles As Integer = 0
#End Region
#Region "+++++ Konstanten +++++"
Const WMObjectEditModeObject = &H1F
Const WMObjectStreamOpenModeReadWrite = 2
Const WMEntityObjectType = 10
Const WMEntityDocument = 1
Const WMObjectVariableValueTypeUndefined = 0
Const WMObjectVariableValueTypeString = 1
Const WMObjectVariableValueTypeInteger = 2
Const WMObjectVariableValueTypeFloat = 3
Const WMObjectVariableValueTypeBoolean = 4
Const WMObjectVariableValueTypeDate = 5
Const WMObjectVariableValueTypeFixedPoint = 6
Const WMObjectVariableValueTypeTimeStamp = 7
Const WMObjectVariableValueTypeCurrency = 8
Const WMObjectVariableValueTypeTime = 9
Const WMObjectVariableValueTypeVariant = 10
Const WMObjectVariableValueTypeMask = &HFFF
Const WMObjectVariableValueFlagMask = &HFFFFF000
Const WMObjectVariableValueTypeVector = &H1000
Const WMObjectVariableValueTypeFulltext = &H2000
Const WMObjectVariableValueTypeDefaultValue = &H4000
Dim WMObjectVariableValueTypeVectorAlpha = 36865
' wenn das Indexieren aktiviert ist MUSS die Übertragung auch aktiviert sein !!!
Const ÜBERTRAGUNG_DURCHFÜHREN As Boolean = True
Const INDEXIEREN_DURCHFÜHREN As Boolean = True
#End Region
#Region "+++++ Events +++++"
Private Sub btnStarten_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDI_Manuell_starten.Click
Standards_Ueberpruefen()
'MsgBox(Alles_OK.ToString)
If Alles_OK = False Then
'MsgBox("Alles_OK = False")
Alles_OK = True
Exit Sub
End If
Manuell = True
manProfile = Me.cmbProfilauswahl.SelectedItem
Backgroundtask_Dateiimport_starten()
End Sub
Private Sub btnAbbrechen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAbbrechen.Click
Import_Abbrechen()
End Sub
Sub Import_Abbrechen()
Try
If Me.threadDateiimport.IsBusy Then
Me.threadDateiimport.CancelAsync()
End If
Me.cmbProfilauswahl.Enabled = True
Me.txtQuellordner.Enabled = True
Me.txtZielordner.Enabled = True
Me.btnQuellordner.Enabled = True
Me.btnZielordner.Enabled = True
If Me.rbManuell.Checked Then
btnDI_Manuell_starten.Enabled = True
Me.btnDurchlauf.Enabled = False
Me.numIntervallDurchlauf.Enabled = False
Else
btnDI_Manuell_starten.Enabled = False
Me.btnDurchlauf.Enabled = True
Me.numIntervallDurchlauf.Enabled = True
Me._running = False
Me.btnDurchlauf.Text = "Durchlauf für Dateiimport starten"
Me.lblLetzter_Durchlauf.Visible = False
Me.lblLog.Visible = False
Me.tvLog.Visible = False
Me.timRun_Dateiimport.Stop()
Durchlauf = False
My.Settings.vDIDurchlaufRunning = False
End If
Me.progressImport.Enabled = False
Me.lblProgress.Enabled = False
Me.btnAbbrechen.Enabled = False
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Fehler bei Abbruch:")
End Try
End Sub
Private Sub cmbProfilauswahl_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbProfilauswahl.SelectedIndexChanged
' die Importinformationen ausblenden
Me.lblLog.Visible = False
Me.tvLog.Visible = False
Me.progressImport.Visible = False
Me.btnAbbrechen.Visible = False
Me.lblProgress.Visible = False
' die Felder für die Verzeichnisse aktivieren
Me.txtQuellordner.Enabled = True
Me.txtZielordner.Enabled = True
Me.btnQuellordner.Enabled = True
Me.btnZielordner.Enabled = True
Me.selectedProfile = ClassDIProfile.getProfilByName(Me.cmbProfilauswahl.SelectedItem)
Me.txtQuellordner.Text = Me.selectedProfile.OriginalQuellordner
Me.dlgQuellordner.SelectedPath = Me.selectedProfile.OriginalQuellordner
Me.txtZielordner.Text = Me.selectedProfile.OriginalZielordner
Me.dlgZielordner.SelectedPath = Me.selectedProfile.OriginalZielordner
' Start-Button aktivieren wenn beide Verzeichnisse eingetragen sind
If Not Me.txtQuellordner.Text = "" And Not Me.txtZielordner.Text = "" Then
Me.btnDI_Manuell_starten.Enabled = True
Else
Me.btnDI_Manuell_starten.Enabled = False
End If
End Sub
Private Sub btnQuellordner_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnQuellordner.Click
If Me.dlgQuellordner.ShowDialog = DialogResult.OK Then
Me.txtQuellordner.Text = Me.dlgQuellordner.SelectedPath
End If
End Sub
Private Sub btnZielordner_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnZielordner.Click
If Me.dlgZielordner.ShowDialog = DialogResult.OK Then
Me.txtZielordner.Text = Me.dlgZielordner.SelectedPath
End If
End Sub
Private Sub txtQuellordner_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtQuellordner.TextChanged
If Not Me.txtQuellordner.Text = "" And Not Me.txtZielordner.Text = "" Then
Me.btnDI_Manuell_starten.Enabled = True
Else
Me.btnDI_Manuell_starten.Enabled = False
End If
End Sub
Private Sub txtZielordner_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtZielordner.TextChanged
If Not Me.txtQuellordner.Text = "" And Not Me.txtZielordner.Text = "" Then
Me.btnDI_Manuell_starten.Enabled = True
Else
Me.btnDI_Manuell_starten.Enabled = False
End If
End Sub
Private Sub AlleKnotenÖffnenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AlleKnotenÖffnenToolStripMenuItem.Click
Me.tvLog.ExpandAll()
End Sub
Private Sub AlleKnotenSchließenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AlleKnotenSchließenToolStripMenuItem.Click
Me.tvLog.CollapseAll()
End Sub
Private Sub btnProfiladd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
frmDIProfilHinzufuegen.ShowDialog()
End Sub
Private Sub frmDIHauptseite_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
Formloaded = True
Me.LoadProfilesInCombobox()
If My.Settings.vDIDurchlaufRunning = True Then
Me.rbAutomatisch.Checked = True
Automatischer_Durchlauf(False)
End If
End Sub
#End Region
#Region "+++++ BackgroundWorker +++++"
#Region "+++++ Durchläuft alle Dateien +++++"
#Region "*** BackgroundWorker wird gestartet ***"
Private Sub startBackgroundTask()
Try
Me.lblProgress.Enabled = True
Me.lblProgress.Text = "Dateien und Informationen werden aufbereitet und geladen. Bitte haben Sie Geduld, da dieser Prozess evtl. viel Zeit in Anspruch nehmen kann."
Me.tvLog.Nodes.Clear()
ClassLoggerDI.Init("", My.Settings.vLogDI & "_", True)
threadDateiimport.RunWorkerAsync()
Catch ex As Exception
MsgBox("Fehler beim Starten des BackgroundWorkers." & vbNewLine & vbNewLine & "Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Fehler im BackgroundWorker")
End Try
End Sub
#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
Dim _TimeStart As Date
Dim _TimeEnd As Date
Try
'###
ClassLoggerDI.Add(" ", False)
ClassLoggerDI.Add(" ", False)
ClassLoggerDI.Add(" ", False)
ClassLoggerDI.Add("======================================================================", False)
ClassLoggerDI.Add(" Dateiimporter gestartet ", False)
ClassLoggerDI.Add("______________________________________________________________________", False)
ClassLoggerDI.Add(" Datum: " & Now, False)
_TimeStart = Now
ClassLoggerDI.Add(" Intervall: " & Me.numIntervallDurchlauf.Value, False)
ClassLoggerDI.Add("======================================================================", False)
If _windream.Init Then
If Manuell = True Then
ClassLoggerDI.Add(">> Manueller Durchlauf", False)
ClassLoggerDI.Add("Profilname: " & manProfile, False)
Me.selectedProfile = ClassDIProfile.getProfilByName(manProfile)
ClassLoggerDI.Add("- Start des Profildurchlaufes ", False)
Profil_Durchlauf()
Manuell = False
ElseIf Durchlauf = True Then
ClassLoggerDI.Add(">> Zeitgesteuerter Durchlauf", False)
'1. ###### Zählen der Files
Gesamtfiles = 0
Dim files_Durchlauf As ReadOnlyCollection(Of String)
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
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)
Else
' den Durchlaufszeitpunkt speichern
selectedProfile.LastRun = Now
selectedProfile.Save(False)
'Und nun das PRofil durchlaufen
ClassLoggerDI.Add("- Start des Profildurchlaufes ", False)
Profil_Durchlauf()
End If
Next
End If
End If
Else
ClassLoggerDI.Add(" windream could not be initialized...", True)
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
ClassLoggerDI.Add("", False)
ClassLoggerDI.Add(" Durchlauf beendet: " & Now, False)
Dim Dauer
Dauer = (seconds / 60)
If Dauer < 1 Then
ClassLoggerDI.Add(" Dauer: " & seconds.ToString & " Sekunden", False)
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")
Dim fs As Integer = FreeFile()
Dim inuse As Boolean = False
If File.Exists(filename) Then
Try
FileOpen(fs, filename, OpenMode.Binary, OpenAccess.ReadWrite, OpenShare.LockReadWrite)
Catch ex As Exception
ClassLoggerDI.Add(" ## File " & filename & " inuse or not able to open - message: " & ex.Message, False)
inuse = True
Finally
FileClose(fs)
End Try
End If
Return inuse
End Function
Private Function Link2Navision(ByVal Dokart As String, ByVal index As String, ByVal dateinamelink As String, ByVal dateiname As String)
Dim p As New Process
Try
Dim Argument As String = """" & Dokart & """" & " " & """" & index & """" & " " & """" & dateinamelink & """" & " " & """" & dateiname & """"
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" *Argument: " & Argument, False)
Dim psi As New ProcessStartInfo(My.Settings.PathLink2Navision)
psi.UseShellExecute = False
psi.RedirectStandardError = True
psi.RedirectStandardOutput = True
psi.Arguments = Argument
p = Process.Start(psi)
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" *Prozess gestartet", False)
'psi.UseShellExecute = False
'psi.RedirectStandardError = True
'psi.RedirectStandardOutput = True
'p.StartInfo = psi
'p.Start()
p.WaitForExit()
ClassLoggerDI.Add(" *Prozess beendet - Datei an Navision übergeben!", False)
Return True
Catch ex As Exception
ClassLoggerDI.Add(" Fehler in Link2Navision")
ClassLoggerDI.Add(p.StandardError.ReadToEnd())
Return False
End Try
End Function
Sub GetDirectories(ByVal StartPath As String, ByRef DirectoryList As ArrayList)
Dim Dirs() As String = Directory.GetDirectories(StartPath)
DirectoryList.AddRange(Dirs)
For Each Dir As String In Dirs
Dim newRow As MyDataset.TBUVRow
newRow = MyDataset.TBUV.NewTBUVRow
newRow.Unterverzeichnis = Dir
MyDataset.TBUV.Rows.Add(newRow)
GetDirectories(Dir, DirectoryList)
Next
End Sub
Private Function string_Contains(s As String, search As String)
Return s.ToLower.Contains(search.ToLower)
End Function
Private Sub Profil_Durchlauf()
'Array zum Speichern der Subdirectories
Dim oSubDirectoryList As New ArrayList
'Array zum Speichern der nicht bearbeiteten Dateien
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
Dim oError As Boolean = False
Try
Me.TBTC_DI_REGEX_MATCHTableAdapter.Connection.ConnectionString = My.Settings.DDECMConString
Me.TBTC_DI_REGEX_MATCHTableAdapter.Fill(Me.MyDataset.TBTC_DI_REGEX_MATCH, Me.selectedProfile.OriginalProfilname)
Catch ex As Exception
ClassLoggerDI.Add("Error while connecting via My.Settings.DDECMConString: " + ex.Message)
oError = True
End Try
If Me.ImportFileList IsNot Nothing And oError = False Then
Me.CountFilesImported = 0
If Durchlauf = True Then
Me.CountFiles2Import = Gesamtfiles
Else
Me.CountFiles2Import = Me.ImportFileList.Count
End If
'Me.lblProgress.Text = Me.dateienImportiert & " von " & Me.dateienGesamt & " Dateien importiert"
'Me.lblProgress.Visible = True
Me.arrayDateiinformationen = New ArrayList
If Me.ImportFileList.Count > 0 Then
ClassLoggerDI.Add(" Insgesamt sollen " & Me.ImportFileList.Count & " Dateien importiert werden", False)
Else
ClassLoggerDI.Add(" Keine Dateien vorhanden", False)
End If
Dim fileAusschliessen As Boolean = False
If Me.selectedProfile.Subdirectories = True Then
MyDataset.TBUV.Clear()
For Each di In Directory.GetDirectories(Path.GetDirectoryName(Me.selectedProfile.OriginalQuellordner & "\"), "*.*")
GetDirectories(Me.selectedProfile.OriginalQuellordner & "\", oSubDirectoryList)
Next
For Each Dir As String In oSubDirectoryList
oLastFolderinFiles = Dir
Next
oSubDirectoryList.Reverse()
Else
oLastFolderinFiles = Me.selectedProfile.OriginalQuellordner
End If
For Each filename As String In Me.ImportFileList
' zuerst einen Testdurchlauf
Dim resultArray = Me.selectedProfile.GetIndexArray(filename, Me.selectedProfile.OriginalQuellordner, oLastFolderinFiles)
If resultArray IsNot Nothing Then
'Dim indexArray As ArrayList = New ArrayList
'indexArray = Me.selectedProfile.GetIndexArray(filename, Me.txtQuellordner.Text)
'Me.arrayDateiinformationen.Add(indexArray)
Me.arrayDateiinformationen.Add(resultArray)
End If
If Me.threadDateiimport.CancellationPending Then
Exit Sub
End If
Next
If Me.ImportFileList.Count > 0 Then
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" > Array mit allen Informationen konnte erfolgreich erzeugt werden", False)
End If
'Console.WriteLine("Durchlauf von DoWork")
Me.CountFilesImported = 0
If Durchlauf = True Then
Me.CountFiles2Import = Gesamtfiles
Else
Me.CountFiles2Import = Me.ImportFileList.Count
End If
' alle Dateien durchlaufen
For Each oFilenameQuelle As String In Me.ImportFileList
fileAusschliessen = False
Dim oFilenameOnly = Path.GetFileName(oFilenameQuelle)
If Me.MyDataset.TBTC_DI_REGEX_MATCH.Rows.Count = 1 Then
If Regex.IsMatch(oFilenameOnly, MyDataset.TBTC_DI_REGEX_MATCH.Rows(0).Item("REGEX")) = False Then
ClassLoggerDI.Add($" >> Regex not Matching for file {oFilenameOnly}!", False)
fileAusschliessen = True
End If
End If
If fileAusschliessen = False Then
If oFilenameQuelle.StartsWith("~$") Then
fileAusschliessen = True
Else
If My.Settings.vDIAusschluss <> "" Then
If My.Settings.vDIAusschluss.Contains("/") Then
'Ausschlußzeichen
Dim strTeile() As String
strTeile = My.Settings.vDIAusschluss.Split("/")
For i As Integer = 0 To strTeile.Length - 1
If string_Contains(oFilenameQuelle, strTeile(i).ToLower) = True Then
fileAusschliessen = True
Exit For
End If
Next
Else
If string_Contains(oFilenameQuelle, My.Settings.vDIAusschluss.ToLower) = True Then
fileAusschliessen = True
End If
End If
End If
End If
End If
'Wenn Datei nicht Sonderzeichen enthält
If fileAusschliessen = False Then
'Überprüfen ob Datei geöffnet ist??
In_Use = func_check_file_use(oFilenameQuelle)
If In_Use = True And oFilenameQuelle.EndsWith(".pdf") Then
ClassLoggerDI.Add(" >> File might be an PDF/A ", False)
In_Use = False
End If
'Achtung Datei in Benutzung
If In_Use = True Then
If My.Settings.vLogErrorsonly = False Then
ClassLoggerDI.Add(" >> Datei in Benutzung ", False)
ClassLoggerDI.Add(" >> Datei '" & oFilenameQuelle & "' wird im aktuellen Durchlauf nicht berücksichtigt!", False)
ClassLoggerDI.Add(" ", False)
End If
'File in Array speichern
oFileAusschlussList.Add(oFilenameQuelle)
Me.oWMStream_Result = 0
Me.threadDateiimport.ReportProgress(Me.CountFilesImported / Me.CountFiles2Import * 100)
Me.CountFilesImported += 1
Else
'Datei nicht in Benutzung
Dim oFileInfo As IO.FileInfo = New IO.FileInfo(oFilenameQuelle)
'zeitdiff nur Zur sicherheit ob file gerade erst erstellt
'If My.Settings.vDItime_durationExists <> 0 Then
If selectedProfile.Verzoegerung <> 0 And DateDiff("s", oFileInfo.CreationTime, Now) < selectedProfile.Verzoegerung Then
'Datei wurde erst "vor kurzem erstellt" - nicht berücksichtigen
If My.Settings.vLogErrorsonly = False Then
ClassLoggerDI.Add(" ### Datei vor weniger als " & selectedProfile.Verzoegerung & " sec. erstellt ###", False)
ClassLoggerDI.Add(" Datei: " & oFilenameQuelle & " wird im aktuellen Durchlauf nicht berücksichtigt!", False)
End If
'File in Array speichern
oFileAusschlussList.Add(oFilenameQuelle)
Me.oWMStream_Result = 0
Me.threadDateiimport.ReportProgress(Me.CountFilesImported / Me.CountFiles2Import * 100)
Me.CountFilesImported += 1
Else
'Datei kann bearbeitet werden
Me.bgwQuelldatei = oFilenameQuelle
Me.bgwZielordner = Me.selectedProfile.OriginalZielordner 'Me.txtZielordner.Text
If My.Settings.vLogErrorsonly = False Then
ClassLoggerDI.Add(" ", False)
ClassLoggerDI.Add(" # Hintergrundprozess wird gestartet (" & oFilenameQuelle & ") <==", False)
ClassLoggerDI.Add(" Datei " & Me.bgwQuelldatei & " behandeln", False)
End If
' prüfen ob der Vorgang abgebrochen werden soll
If Me.threadDateiimport.CancellationPending = True Then
ClassLoggerDI.Add("Vorgang wurde abgebrochen", False)
'e.Cancel = True
Exit Sub
End If
Dim quellVerzeichnis As String = Me.bgwQuelldatei.Substring(0, Me.bgwQuelldatei.LastIndexOf("\"))
Dim quellUnterverzeichnis As String = quellVerzeichnis.Substring(Me.selectedProfile.OriginalQuellordner.Length)
Dim dateiname As String = Me.bgwQuelldatei.Substring(Me.bgwQuelldatei.LastIndexOf("\") + 1)
Dim dateinameOhneExt As String = ""
If dateiname.Contains(".") Then
dateinameOhneExt = dateiname.Substring(0, dateiname.LastIndexOf("."))
Else
dateinameOhneExt = dateiname
End If
Dim dateiExt As String = dateiname.Substring(dateiname.LastIndexOf("."))
Dim vAnhangDateTime As String = "_" & Now.Year & Now.Month & Now.Day & "_" & Now.Hour & Now.Minute & Now.Second & dateiExt
If Me.selectedProfile IsNot Nothing Then
If Me.selectedProfile.Backup Then
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" Backup soll angelegt werden", False)
'If My.Computer.FileSystem.FileExists(Me.selectedProfile.Backupordner & "\" & dateiname) Then
If My.Computer.FileSystem.FileExists(Me.selectedProfile.Backupordner & quellUnterverzeichnis & "\" & dateiname) Then
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" :3.1:Backupdatei existiert", False)
If Me.selectedProfile.Overwrite = False Then
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" :3.1.1:nicht überschreiben", False)
My.Computer.FileSystem.CopyFile(Me.bgwQuelldatei, Me.selectedProfile.Backupordner & quellUnterverzeichnis & "\" & dateinameOhneExt & vAnhangDateTime)
Else
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" :3.1.2:überschreiben", False)
My.Computer.FileSystem.DeleteFile(Me.selectedProfile.Backupordner & quellUnterverzeichnis & "\" & dateiname)
My.Computer.FileSystem.CopyFile(Me.bgwQuelldatei, Me.selectedProfile.Backupordner & quellUnterverzeichnis & "\" & dateiname)
End If
Else
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" :3.2:Backupdatei existiert noch nicht", False)
My.Computer.FileSystem.CopyFile(Me.bgwQuelldatei, Me.selectedProfile.Backupordner & quellUnterverzeichnis & "\" & dateiname)
End If
End If
End If
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" - DateiÜbertragen wird nun aufgerufen", False)
'#############################
'Datei-Übertragung
'#############################
DI_FILESIZE = 0
DI_PAGECOUNT = 0
Dim fsi As New IO.FileInfo(bgwQuelldatei)
DI_FILESIZE = CDec(fsi.Length)
DI_PAGECOUNT = clsHelper.GetPDFPageCount(bgwQuelldatei, "DI")
Dim DoubleBytes As Double
DoubleBytes = CDbl(DI_FILESIZE / 1048576) 'MB
DI_FILESIZE = FormatNumber(DoubleBytes, 2)
'Evtl. Subdirectories extrahieren
Dim index As Integer = Me.selectedProfile.OriginalQuellordner.Length
Dim SubPath As String = IO.Path.GetDirectoryName(bgwQuelldatei).Substring(index)
Dim oZielOrdner As String
If SubPath = "" Then
oZielOrdner = Me.selectedProfile.OriginalZielordner
Else
oZielOrdner = Me.selectedProfile.OriginalZielordner & SubPath
End If
'Die Datei nun nach windream übertragen
DI_STREAMRESULTFILE = ""
Me.oWMStream_Result = Stream_File(Me.bgwQuelldatei, oZielOrdner) 'Me.selectedProfile.OriginalZielordner
'DateiÜbertragen_Schleife(Me.bgwQuelldatei, Me.selectedProfile.OriginalZielordner) ' '
CriticalErrorInBackgroundWorker = False
'
If Me.oWMStream_Result = -2 Then
Me.CriticalErrorInBackgroundWorker = True
Else
'Schwerwiegender Fehler in der Dateiübertragung
'MsgBox(übertragen_erfolgreich.ToString)
End If
' hier nochmal prüfen, da der Fehler gerade erst aufgetreten sein kann
If Not CriticalErrorInBackgroundWorker Then
If Me.oWMStream_Result = 0 Then
Try
Dim extension As String = Replace(Path.GetExtension(DI_STREAMRESULTFILE), ".", "").ToUpper
'TBDD_REPORTING_IMPORTTableAdapter.Insert(DI_STREAMRESULTFILE, manProfile, DI_FILESIZE, DI_PAGECOUNT, extension)
Catch ex As Exception
End Try
'Übertragen war erfolgreich, alles ok!
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" >> Stream war erfolgreich", False)
If Me.selectedProfile.DateiLöschen Then
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" - Datei soll gelöscht werden: " & bgwQuelldatei, False)
Try
My.Computer.FileSystem.DeleteFile(Me.bgwQuelldatei)
Catch ex As Exception
Try
Dim opath = Path.GetDirectoryName(Me.bgwQuelldatei) & "\Delete_Error"
Dim oFilename = Path.GetFileName(Me.bgwQuelldatei)
File.Move(Me.bgwQuelldatei, opath & "\" & oFilename)
Catch ex1 As Exception
ClassLoggerDI.Add("## Unbehandelter Fehler FileMove after NoDelete : " & ex.Message, False)
End Try
End Try
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" - Datei wurde gelöscht", False)
End If
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" - Stream-Routine beendet", False)
If Me.selectedProfile.Link2Navision = True And My.Settings.PathLink2Navision <> "" Then
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" #### Link2Navision ist aktiviert ####", False)
'Q:/Extern/WWS/Ausgangsrechnung/ARE-120018-Demo Adresse 16001~1.pdf
Dim _dateiname As String = IO.Path.GetFileName(DI_STREAMRESULTFILE)
Dim _Dokart, _Indexwert As String
_Dokart = _Link2NavDokumentart
_Indexwert = _Link2NavIndexwert
'Wenn Werte gelesen werden konnten
If _Dokart <> "" And _Indexwert <> "" Then
'Start von DDLink2Navision
Link2Navision(_Dokart, _Indexwert, DI_STREAMRESULTFILE, _dateiname)
End If
End If
End If
If Err.Number > 0 Then
ClassLoggerDI.Add(" ## Unbehandelter Fehler in Profil Durchlauf: " & Err.Description, False)
If Err.Description.Contains("CTL_E_PATHNOTFOUND") Or Err.Description.Contains("angegebene Netzwerkname ist nicht mehr verfügbar") Then
'DAS Windream-Laufwerk ist nicht verfügbar!
CriticalErrorInBackgroundWorker = True
Import_Abbrechen()
If My.Settings.vDIMailSenden = True Then
email.Send_EMail("ESKALATIONSTUFE 1: Schwerwiegender Fehler in Dateiimporter windream <br>ERROR: " & Err.Description & "<br> DAS WINDREAM-LAUFWERK oder der Netzwerkname IST NICHT VERFÜGBAR!<br>" &
"Der Importvorgang wurde abgebrochen!<br>Fehlerbehebung: ==> Starten Sie windream und den den Dateiimporter neu!")
End If
MsgBox("Schwerwiegender Fehler in Dateiimporter windream!" & vbNewLine & "ERROR: " & Err.Description & vbNewLine & "DAS WINDREAM-LAUFWERK IST NICHT VERFÜGBAR!" & vbNewLine &
"Der Importvorgang wurde abgebrochen!" & vbNewLine & "Fehlerbehebung: ==> Starten Sie windream und den den Dateiimporter neu!")
Exit Sub
Else
If My.Settings.vDIMailSenden = True Then
email.Send_EMail("Fehler bei Datei: " & oFilenameQuelle & " <br\>ERROR: " & Err.Description)
End If
End If
End If
'Hochzählen
Me.threadDateiimport.ReportProgress(Me.CountFilesImported / Me.CountFiles2Import * 100)
Me.CountFilesImported += 1
Else
CriticalErrorInBackgroundWorker = False
Me.threadDateiimport.CancelAsync()
Exit Sub
End If
If Me.threadDateiimport.CancellationPending Then
Exit Sub
End If
End If
End If
End If
Next
'Subdirectory-Folder Löschen
If selectedProfile.UVVerzeichnisLoeschen = True Then
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" - Unterverzeichnisse sollen gelöscht werden.", False)
If oFileAusschlussList.Count > 0 Then
For Each Dir As String In oSubDirectoryList
Dim dir_ex As Boolean = False
For Each _filename As String In oFileAusschlussList
If Path.GetDirectoryName(_filename).ToUpper = Dir.ToUpper Then
ClassLoggerDI.Add(" - Das Unterverzeichnis '" & Dir & "' kann nicht gelöscht werden weil es noch zu importierende Dateien enthält!", False)
dir_ex = True
End If
Next
If dir_ex = False Then
If IO.Directory.Exists(Dir) Then
My.Computer.FileSystem.DeleteDirectory(Dir, FileIO.DeleteDirectoryOption.ThrowIfDirectoryNonEmpty)
If Err.Number > 0 Then
ClassLoggerDI.Add(" - Das Unterverzeichnis '" & Dir & "' wurde NICHT gelöscht!", False)
ClassLoggerDI.Add(" - FEHLERMELDUNG: " & Err.Description, False)
Else
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" - Das Unterverzeichnis '" & Dir & "' wurde gelöscht!", False)
End If
End If
End If
Next
Else
For Each Dir As String In oSubDirectoryList
My.Computer.FileSystem.DeleteDirectory(Dir, FileIO.DeleteDirectoryOption.ThrowIfDirectoryNonEmpty)
If Err.Number > 0 Then
ClassLoggerDI.Add(" - Das Unterverzeichnis '" & Dir & "' wurde NICHT gelöscht", False)
ClassLoggerDI.Add(" - FEHLERMELDUNG: " & Err.Description, False)
Else
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" - Das Unterverzeichnis '" & Dir & "' wurde gelöscht!", False)
End If
Next
End If
End If
If Me.selectedProfile.VerzeichnisLöschen Then
'MsgBox(quellVerzeichnis)
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" - Das Quellverzeichnis soll gelöscht werden", False)
Try
My.Computer.FileSystem.DeleteDirectory(selectedProfile.Quellordner, FileIO.DeleteDirectoryOption.ThrowIfDirectoryNonEmpty)
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" - Das Quellverzeichnis wurde gelöscht!", False)
Catch ex As Exception
ClassLoggerDI.Add("Das Quellverzeichis wurde NICHT gelöscht " & ex.Message, True)
End Try
End If
Else
If Manuell = True Then
End If
End If
End Sub
#End Region
#Region "*** Fortschritt hat sich verändert ***"
Private Sub threadDateiimport_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) 'Handles threadDateiimport.ProgressChanged
Try
Me.lblProgress.Text = Me.CountFilesImported & " von " & Me.CountFiles2Import & " Dateien importiert"
'Console.WriteLine("Fortschritt geändert: " & Me.lblProgress.Text)
Me.progressImport.Value = e.ProgressPercentage.ToString
Dim dateiname = Me.ImportFileList(Me.CountFilesImported - 1).ToString
Me.tvLog.Nodes.Add(dateiname.Substring(Me.txtQuellordner.Text.Length))
'Console.WriteLine("######## TreeNode (" & dateiname.Substring(Me.txtQuellordner.Text.Length) & "): " & Me.übertragen_erfolgreich)
If Me.oWMStream_Result = 0 Then
If Me.TreeNodeInfos.Count > 0 Then
'Me.tvLog.Nodes(Me.dateienImportiert - 1).Nodes.Add(Me.TreeNodeInfos(Me.dateienImportiert - 1)(0))
'Me.tvLog.Nodes(Me.dateienImportiert - 1).Nodes(0).ForeColor = Color.DarkGreen
' Console.WriteLine("############# TreeNode: dateienImportiert = " & Me.dateienImportiert & "; Count-1 = " & Me.TreeNodeInfos(Me.dateienImportiert - 1).Count - 1)
For i As Integer = 0 To Me.TreeNodeInfos(Me.CountFilesImported - 1).Count - 1
'!!!!!!!
Me.tvLog.Nodes(Me.CountFilesImported - 1).Nodes.Add(Me.TreeNodeInfos(Me.CountFilesImported - 1)(i))
'Console.WriteLine("############# TreeNode: dateienImportiert = " & Me.dateienImportiert)
'Console.WriteLine("############# Me.TreeNodeInfos(" & Me.dateienImportiert - 1 & ", " & i & ") = " & Me.TreeNodeInfos(Me.dateienImportiert - 1)(i))
' *** Farben festlegen ***
If Me.TreeNodeInfos(Me.CountFilesImported - 1)(i).ToString.StartsWith("Ziel:") Then
Me.tvLog.Nodes(Me.CountFilesImported - 1).Nodes(i).ForeColor = Color.DarkGreen
ElseIf Me.TreeNodeInfos(Me.CountFilesImported - 1)(i).ToString.StartsWith("Dokumenttyp:") Then
Me.tvLog.Nodes(Me.CountFilesImported - 1).Nodes(i).ForeColor = Color.Green
ElseIf Me.TreeNodeInfos(Me.CountFilesImported - 1)(i).ToString.StartsWith("Zielindex:") Then
Me.tvLog.Nodes(Me.CountFilesImported - 1).Nodes(i).ForeColor = Color.Goldenrod
ElseIf Me.TreeNodeInfos(Me.CountFilesImported - 1)(i).ToString.StartsWith("Bei dem Zielindex handelt es sich um ein Vektorfeld") Then
Me.tvLog.Nodes(Me.CountFilesImported - 1).Nodes(i).ForeColor = Color.Gold
'ElseIf Me.TreeNodeInfos(Me.dateienImportiert - 1)(i).ToString.StartsWith("Der Datei wurde kein Index zugewiesen.") Then
' Me.tvLog.Nodes(Me.dateienImportiert - 1).Nodes(i).ForeColor = Color.IndianRed
ElseIf Me.TreeNodeInfos(Me.CountFilesImported - 1)(i).ToString.StartsWith("Hinweis:") Then
Me.tvLog.Nodes(Me.CountFilesImported - 1).Nodes(i).ForeColor = Color.Red
Else
Me.tvLog.Nodes(Me.CountFilesImported - 1).Nodes(i).ForeColor = Color.DarkGray
End If
Next
End If
Else
Me.tvLog.Nodes(Me.CountFilesImported - 1).ForeColor = Color.Red
Me.tvLog.Nodes(Me.CountFilesImported - 1).Nodes.Add("Möglicherweise stehen nicht ausreichend Schreibrechte zur Verfügung")
Me.tvLog.Nodes(Me.CountFilesImported - 1).Nodes.Add("oder Datei ist in Benutzung. Check Log-Datei")
Me.tvLog.Nodes(Me.CountFilesImported - 1).Nodes(0).ForeColor = Color.Red
Me.tvLog.Nodes(Me.CountFilesImported - 1).Nodes(1).ForeColor = Color.Red
End If
'Me.tvLog.Nodes(Me.dateienImportiert - 1).Nodes.Add("Dateiname: " & dateiname.Substring(dateiname.LastIndexOf("\") + 1))
'Me.tvLog.Nodes(Me.dateienImportiert - 1).Nodes(0).ForeColor = Color.Green
'Me.tvLog.Nodes(Me.dateienImportiert - 1).Nodes.Add("Dokumenttyp: " & Me.selectedProfile.DokumenttypString)
'Me.tvLog.Nodes(Me.dateienImportiert - 1).Nodes(1).ForeColor = Color.Green
Catch ex As Exception
'MessageBox.Show(ex.Message, "Fehler in ProgressChanged", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, Nothing, False)
End Try
End Sub
#End Region
#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 = ""
If e.Cancelled Then
MsgBox("Der Dateiimport wurde durch den Anwender abgebrochen.", MsgBoxStyle.Information, "Dateiimport: Vorgang manuell abgebrochen")
ElseIf e.Error IsNot Nothing Then
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
' 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
If Me.tvLog.Nodes.Count > 0 Then
Me.tvLog.Nodes(0).Expand()
Me.tvLog.Nodes(0).Collapse()
End If
Me.cmbProfilauswahl.Enabled = True
Me.txtQuellordner.Enabled = True
Me.txtZielordner.Enabled = True
Me.btnQuellordner.Enabled = True
Me.btnZielordner.Enabled = True
If Me.rbManuell.Checked Then
Me.btnDI_Manuell_starten.Enabled = True
lblmanuell_letzterDurchlauf.Visible = True
Me.lblmanuell_letzterDurchlauf.Text = "Letzter Durchlauf: " & My.Computer.Clock.LocalTime
Else
Me.btnDI_Manuell_starten.Enabled = False
End If
Me.progressImport.Enabled = False
Me.lblProgress.Enabled = False
Me.btnAbbrechen.Enabled = False
Me.lblProgress.Visible = False
Me.progressImport.Visible = False
Me.btnAbbrechen.Visible = False
If Me.Visible = True Then
Me.ErgebnisNochNichtLöschen = False
End If
Catch ex As Exception
MsgBox("Es ist ein fehler bei dem Abschluss des Import aufgetreten." & vbNewLine & vbNewLine & "Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Exclamation, "Fehler beim Abschließen des Imports")
End Try
End Sub
#End Region
#End Region
#End Region
Sub LoadProfilesInCombobox()
'Schreibt die Profile in die Combobox in der Toolbar.
Try
'ClassDateiimportProfile.Init()
Me.cmbProfilauswahl.Items.Clear()
If ClassDIProfile.Profile IsNot Nothing Then 'ClassDateiimportUsers.Benutzer(benutzername).Profile IsNot Nothing Then
For Each item As ClassDIProfil In ClassDIProfile.Profile
Me.cmbProfilauswahl.Items.Add(item.OriginalProfilname)
Next
End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Fehler beim Laden der Profile in die Auswahlliste")
End Try
End Sub
#Region "***** windream-Übertragung *****"
Public Function DateiÜbertragen(ByVal filenameQuelle As String, ByVal zielpfad As String, ByVal _Indexname As String)
On Error Resume Next
Dim fso As Scripting.FileSystemObject = CreateObject("Scripting.FileSystemObject")
Dim endgültigerDateiname As String = ""
Dim WMObject As WINDREAMLib.WMObject '= CreateObject("WINDREAMLib.WMObject") 'New WINDREAMLib.WMObject
' Objekt für Datei und Zielverzeichnis anlegen
Dim Quelldatei As Scripting.File = fso.GetFile(filenameQuelle)
Dim targetPath As String = zielpfad & Quelldatei.ParentFolder.Path.Substring(Me.txtQuellordner.Text.Length)
' das Verzeichnis wurde angelegt -> Objekt kann also geleert werden
WMObject = Nothing
My.Computer.FileSystem.CreateDirectory(targetPath)
Dim Zielverzeichnis As Scripting.Folder = fso.GetFolder(targetPath)
' Datei kopieren von " & filenameQuelle & " nach " & targetPath.Substring(2) & "\" & Quelldatei.Name & ".", False)
'MsgBox(filenameQuelle & vbNewLine & Me.GetDateinameZielAusQuelle(filenameQuelle) & vbNewLine & My.Computer.FileSystem.FileExists(ZielDateiname))
If My.Computer.FileSystem.DirectoryExists(targetPath) Then
' Überprüfen ob der zu Kopieren notwendige Speicherplatz auf Ziellaufwerk vorhanden ist
If Zielverzeichnis.Drive.FreeSpace < Quelldatei.Size Then
MsgBox("Auf dem Zielverzeichnis ist nicht genug Speicherplatz zum Übertragen frei.", MsgBoxStyle.Exclamation, "Nicht genug Speicherplatz")
Return -10
End If
Dim oWMFileIO = CreateObject("WMOTOOLLib.WMFileIO") ' New WMOTOOLLib.WMFileIO
' Erzeuge Object in windream; VERSUCHT DIE DATEI ZU ÖFFNEN
If ÜBERTRAGUNG_DURCHFÜHREN Then WMObject = _windream.oWMSession.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, targetPath.Substring(2) & "\" & Quelldatei.Name)
'Versuch auf die Datei in W: zuzugreifen
'If ÜBERTRAGUNG_DURCHFÜHREN Then WMObject.lock()
' wenn die Datei nicht geladen werden konnte, existiert sie nicht -> kann also ohne Erweiterung angelegt werden
If WMObject IsNot Nothing Then
' wenn auf die Datei zugeriffen werden konnte ist sie bereits vorhanden -> Datum anhängen
'Es konnte zugegriffen werden -> Datei ist bereits vorhanden")
' --> neuer Dateiname ist " & Quelldatei.Name.Substring(0, Quelldatei.Name.LastIndexOf(".")) & "_" & Now.ToString("yyyMMdd_HHmmss") & Quelldatei.Name.Substring(Quelldatei.Name.LastIndexOf(".")))
Err.Clear()
endgültigerDateiname = targetPath.Substring(2) & "\" & Quelldatei.Name.Substring(0, Quelldatei.Name.LastIndexOf(".")) & "_" & Now.ToString("yyyMMdd_HHmmss") & Quelldatei.Name.Substring(Quelldatei.Name.LastIndexOf("."))
' mit angehängtem Datum
If ÜBERTRAGUNG_DURCHFÜHREN Then WMObject = _windream.oWMSession.GetNewWMObjectFS(WINDREAMLib.WMEntity.WMEntityDocument, endgültigerDateiname, WMObjectEditModeObject)
' wenn ein Fehler auftritt -> Fehler ausgeben
'If Err.Number <> 0 Then MsgBox(targetPath.Substring(2) & "\" & Quelldatei.Name & vbNewLine & "(" & Err.Number & ") " & Err.Description, MsgBoxStyle.Exclamation, "Fehler beim Importieren der Datei (Datei existiert noch nicht)")
Else
'Es konnte NICHT zugegriffen werden -> Datei ist nicht vorhanden, kann also einfach neu angelegt werden -> alles okay soweit")
Err.Clear()
endgültigerDateiname = targetPath.Substring(2) & "\" & Quelldatei.Name
' ohne angehängtem Datum
If ÜBERTRAGUNG_DURCHFÜHREN Then WMObject = _windream.oWMSession.GetNewWMObjectFS(WINDREAMLib.WMEntity.WMEntityDocument, endgültigerDateiname, WMObjectEditModeObject) 'WINDREAMLib.WMObjectEditMode.WMObjectEditModeObjectAndRights) 'WMObjectEditModeObject)
' wenn ein Fehler auftritt -> Fehler ausgeben
'If Err.Number <> 0 Then MsgBox("(" & Err.Number & ") " & Err.Description, MsgBoxStyle.Critical, "Fehler beim Importieren der Datei (Datei existiert bereits)")
End If
'"ENDGÜLTIGER DATEINAME => " & endgültigerDateiname)
If WMObject IsNot Nothing Then
' Stream Interface bereitstellen
Dim oWMStream = WMObject.OpenStream("BinaryObject", WMObjectStreamOpenModeReadWrite)
' den Dateiinhalt der neuen Datei zuweisen
If ÜBERTRAGUNG_DURCHFÜHREN Then oWMFileIO.aWMStream = oWMStream
' Zugriff auf Filesystem über WMFileIO, setzten des Dateinamens
If ÜBERTRAGUNG_DURCHFÜHREN Then oWMFileIO.bstrOriginalFileName = Quelldatei.Path
If ÜBERTRAGUNG_DURCHFÜHREN Then oWMFileIO.ImportOriginal(True)
'Inhalt der Datei konnte übertragen werden")
If ÜBERTRAGUNG_DURCHFÜHREN Then WMObject.Save()
'Datei konnte gespeichert werden")
If ÜBERTRAGUNG_DURCHFÜHREN Then WMObject.unlock()
'Console.WriteLine("Datei konnte entsperrt werden")
'=> Nun wird DateiIndexieren aufgerufen")
Me.DateiIndexieren(filenameQuelle, endgültigerDateiname)
Return True
Else
Return False
End If
Else
Return False
End If
End Function
Public Class SW
Public label As String
Public stopwatch As Stopwatch
Public Sub New(label As String)
Me.label = label
stopwatch = New Stopwatch()
stopwatch.Start()
End Sub
Public Function Done() As Long
stopwatch.Stop()
Dim ts As TimeSpan = stopwatch.Elapsed
Dim oDecResult As Decimal
Dim timespan_ = String.Format("{0:00}:{1:00}.{2:00}", ts.Minutes, ts.Seconds, ts.Milliseconds / 10)
If ts.Minutes > 0 Then
timespan_ = String.Format("{0:00}:{1:00}.{2:00}", ts.Minutes, ts.Seconds, ts.Milliseconds / 10)
ElseIf ts.Seconds > 0 And (ts.Minutes > 0) = False Then
timespan_ = String.Format("{0:00}.{1:00} seconds", ts.Seconds, ts.Milliseconds / 10)
Try
oDecResult = CDec(timespan_.ToString.Replace(" seconds", ""))
Catch ex As Exception
oDecResult = 0
End Try
ElseIf (ts.Seconds > 0) = False And ts.Milliseconds > 0 Then
timespan_ = String.Format("{0:00}.{1:00} seconds (below1sec)", ts.Seconds, ts.Milliseconds / 10)
Try
oDecResult = CDec(timespan_.ToString.Replace(" seconds (below1sec)", ""))
Catch ex As Exception
oDecResult = 0
End Try
End If
If timespan_ <> "00:00.00" Then
Dim message = String.Format("{0} || {1}", timespan_, label)
ClassLoggerDI.Add(message, False)
End If
Return oDecResult
End Function
End Class
Sub DetailLog(Detailinfo As String)
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(Detailinfo, False)
End Sub
Dim SWBesttime As Decimal = 100
Public Function Stream_File(ByVal filenameQuelle As String, ByVal zielpfad As String)
Dim oFilenameOnly As String = Path.GetFileName(filenameQuelle)
Dim oStopWatchTimer As SW
Dim oStopWatchTimerC As SW
Dim _Step As String = "0"
If My.Settings.StopwatchTimerActive = True Then
oStopWatchTimer = New SW($"[{oFilenameOnly}]-Stream_File")
oStopWatchTimerC = New SW($"[{oFilenameOnly}]-Stream_FileComplete")
End If
Try
If My.Computer.FileSystem.DirectoryExists(zielpfad) = False Then
My.Computer.FileSystem.CreateDirectory(zielpfad)
ClassLoggerDI.Add("Zielverzeichnis neu erzeugt!", False)
End If
Const STREAM_BinaryObject = "BinaryObject"
DetailLog(">> Stream_File wurde gestartet")
Dim endgültigerDateiname As String = ""
' Objekt für Datei und Zielverzeichnis anlegen
Dim Quelldatei_Name As String = Path.GetFileName(filenameQuelle)
DetailLog(">> Quelldatei gelesen")
_Step = "1"
'## Prüfen ob Datum-Ordnerhierarchie erstellt werden soll
If selectedProfile.Date_UV.ToString <> "" Then
Dim Month As String = My.Computer.Clock.LocalTime.Month
If Month.Length = 1 Then
Month = "0" & Month
End If
Dim Day As String = My.Computer.Clock.LocalTime.Day
If Day.Length = 1 Then
Day = "0" & Day
End If
Select Case Me.selectedProfile.Date_UV
Case "True"
My.Computer.FileSystem.CreateDirectory(zielpfad & "\" & My.Computer.Clock.LocalTime.Year)
My.Computer.FileSystem.CreateDirectory(zielpfad & "\" & My.Computer.Clock.LocalTime.Year & "\" & Month)
My.Computer.FileSystem.CreateDirectory(zielpfad & "\" & My.Computer.Clock.LocalTime.Year & "\" & Month & "\" & Day)
zielpfad = zielpfad & "\" & My.Computer.Clock.LocalTime.Year & "\" & Month & "\" & Day
Case "YYYY-MM-DD"
My.Computer.FileSystem.CreateDirectory(zielpfad & "\" & My.Computer.Clock.LocalTime.Year)
My.Computer.FileSystem.CreateDirectory(zielpfad & "\" & My.Computer.Clock.LocalTime.Year & "\" & Month)
My.Computer.FileSystem.CreateDirectory(zielpfad & "\" & My.Computer.Clock.LocalTime.Year & "\" & Month & "\" & Day)
zielpfad = zielpfad & "\" & My.Computer.Clock.LocalTime.Year & "\" & Month & "\" & Day
Case "YYYY-MM"
My.Computer.FileSystem.CreateDirectory(zielpfad & "\" & My.Computer.Clock.LocalTime.Year)
My.Computer.FileSystem.CreateDirectory(zielpfad & "\" & My.Computer.Clock.LocalTime.Year & "\" & Month)
zielpfad = zielpfad & "\" & My.Computer.Clock.LocalTime.Year & "\" & Month
Case "YYYY"
My.Computer.FileSystem.CreateDirectory(zielpfad & "\" & My.Computer.Clock.LocalTime.Year)
zielpfad = zielpfad & "\" & My.Computer.Clock.LocalTime.Year
End Select
DetailLog(">> Zielpfad erzeugt: '" & zielpfad & "'")
End If
_Step = "2"
'########
Dim Zielverzeichnis As String = zielpfad
endgültigerDateiname = Zielverzeichnis.Substring(2) & "\" & Quelldatei_Name
DetailLog(">> Zielverzeichnis erzeugt")
If Directory.Exists(Zielverzeichnis) = False Then
'Try to create the directory.
Try
Directory.CreateDirectory(Zielverzeichnis)
Catch ex As Exception
ClassLoggerDI.Add(" - Unexpected Error in Creating Target Folder: " & vbNewLine & ex.Message)
If My.Settings.StopwatchTimerActive = True Then
oStopWatchTimer.Done()
oStopWatchTimerC.Done()
End If
Return -2
End Try
End If
_Step = "2.1"
If Directory.Exists(Zielverzeichnis) Then
DetailLog(">> targetPath exisitiert")
' Überprüfen ob der zu Kopieren notwendige Speicherplatz auf Ziellaufwerk vorhanden ist
Dim dvr As New DriveInfo(My.Settings.vWLaufwerk & ":")
Dim freeSpace = dvr.TotalFreeSpace
Dim info As New FileInfo(filenameQuelle)
' Get length of the file.
Dim length As Long = info.Length
If freeSpace < length Then
MsgBox(" Auf dem Zielverzeichnis ist nicht genug Speicherplatz zum Übertragen frei.", MsgBoxStyle.Exclamation, "Nicht genug Speicherplatz")
If My.Settings.StopwatchTimerActive = True Then
oStopWatchTimer.Done()
oStopWatchTimerC.Done()
End If
Return -2
End If
DetailLog(">> Datei kopieren von " & filenameQuelle & " nach " & zielpfad.Substring(2) & "\" & Quelldatei_Name & ".")
Dim oNewWMObject
Dim oFileIO
Dim oWMStream
DetailLog(">> Connect definieren: CreateObject('Windream.WMConnect')")
If My.Settings.DLL_WMOTOOL = "" Then
oFileIO = New WMOTOOLLib.WMFileIO
DetailLog(">> Direkter Verweis auf New WMOTOOLLib.WMFileIO")
Else
oFileIO = CreateObject(My.Settings.DLL_WMOTOOL) 'WMOTool.WMFileIO oder WMOTOOLLib.WMFileIO
DetailLog(">> Verwendeter Verweis aus Anwendungsstring: '" & My.Settings.DLL_WMOTOOL & "'")
End If
Dim LoggedIn = _windream.oWMSession.aLoggedin
If LoggedIn = False Then
ClassLoggerDI.Add(" - Login on dms-Server failed", False)
' MsgBox("Login failed. ")
End If
'==================================================================
' check if files exist
'==================================================================
DetailLog(">> ÜBERPRÜFTER DATEINAME => " & endgültigerDateiname)
Dim wdFilexists As Boolean
DetailLog(">> Versuch auf die Datei in W: zuzugreifen und zu sperren...")
_Step = "3"
DetailLog(">> _Step: " & _Step)
wdFilexists = _windream.oWMSession.WMObjectExists(WMEntityDocument, endgültigerDateiname, 0, 0)
If wdFilexists = False Then
DetailLog(">> Datei ist NICHT vorhanden, kann also einfach neu angelegt werden")
Err.Clear()
'==================================================================
' create an object
'==================================================================
_Step = "3.1"
DetailLog(">> _Step: " & _Step)
oNewWMObject = _windream.oWMSession.GetNewWMObjectFS(WMEntityDocument, endgültigerDateiname, WMObjectEditModeObject)
If Err.Number > 0 Then
ClassLoggerDI.Add(" FEHLER: WMObject konnte nicht erzeugt werden - Error: '" & Err.Description & "'")
If My.Settings.StopwatchTimerActive = True Then
oStopWatchTimer.Done()
oStopWatchTimerC.Done()
End If
'MsgBox(Err.Description)
End If
' MsgBox("Created file: " + endgültigerDateiname)
Else
_Step = "3.1.1"
DetailLog(">> _Step: " & _Step)
' wenn auf die Datei zugeriffen werden konnte ist sie bereits vorhanden -> Datum anhängen
DetailLog("-> DATEI IST BEREITS VORHANDEN")
Err.Clear()
'### Automatische Versionierung mit ~ (Tilde) ###
Dim version As Integer = 2
Dim extension As String = Quelldatei_Name.Substring(Quelldatei_Name.LastIndexOf("."))
Dim Stammname As String = zielpfad.Substring(2) & "\" & Quelldatei_Name.Substring(0, Quelldatei_Name.LastIndexOf("."))
Dim neuername As String = zielpfad.Substring(2) & "\" & Quelldatei_Name.Substring(0, Quelldatei_Name.LastIndexOf("."))
Do While file_exists(My.Settings.vWLaufwerk & ":\" & neuername & extension) = True
DetailLog(">> Datei " & endgültigerDateiname & " ist vorhanden!")
neuername = Stammname & "~" & version
endgültigerDateiname = neuername & extension
version = version + 1
Loop
_Step = "3.1.2"
DetailLog(">> _Step: " & _Step)
oNewWMObject = _windream.oWMSession.GetNewWMObjectFS(WMEntityDocument, endgültigerDateiname, WMObjectEditModeObject)
If Err.Number > 0 Then
ClassLoggerDI.Add(" FEHLER: Neues WMObject (Kopie) konnte nicht erzeugt werden - Error: '" & Err.Description & "'")
If My.Settings.StopwatchTimerActive = True Then
oStopWatchTimer.Done()
oStopWatchTimerC.Done()
End If
'MsgBox(Err.Description)
End If
DetailLog(">> WMObject zugewiesen")
End If
_Step = "3.2"
DetailLog(">> _Step: " & _Step)
DetailLog(">> ENDGÜLTIGER DATEINAME => " & endgültigerDateiname)
If oNewWMObject IsNot Nothing Then
' lock object for file system access (to change the file itself)
oNewWMObject.lock()
' set fileIO the local source file
oFileIO.bstrOriginalFileName = filenameQuelle
If Err.Number > 0 Then
'MsgBox(Err.Number.ToString)
ClassLoggerDI.Add(" FEHLER: fileIO konnte nicht gesetzt werden - Datei wird wieder gelöscht - Error: '" & Err.Description & "'")
ClassLoggerDI.Add(" HINWEIS: Überprüfen Sie den Verweis auf die Bibliotheken 'WMOTool.WMFileIO' UND 'WMOTOOLLib.WMFileIO' und ändern diese in den Anwendungseinstellungen (DLL_WMOTOOL)'", False)
oNewWMObject.Unlock()
System.IO.File.Delete(My.Settings.vWLaufwerk & ":" & endgültigerDateiname)
If My.Settings.StopwatchTimerActive = True Then
oStopWatchTimer.Done()
oStopWatchTimerC.Done()
End If
Return -1
' MsgBox(Err.Description)
End If
_Step = "3.3"
DetailLog(">> _Step: " & _Step)
' open the windream object's file stream for writing
oWMStream = oNewWMObject.OpenStream(STREAM_BinaryObject, WMObjectStreamOpenModeReadWrite)
If Err.Number > 0 Then
ClassLoggerDI.Add(" FEHLER bei OpenStream - Datei wird wieder gelöscht - Error: '" & Err.Description & "'")
oNewWMObject.Unlock()
System.IO.File.Delete(My.Settings.vWLaufwerk & ":" & endgültigerDateiname)
If My.Settings.StopwatchTimerActive = True Then
oStopWatchTimer.Done()
oStopWatchTimerC.Done()
End If
Return -1
'MsgBox(Err.Description)
End If
DetailLog(">> oWMStream erzeugt")
' give fileIO helper object the windream stream
_Step = "3.4"
DetailLog(">> _Step: " & _Step)
oFileIO.aWMStream = oWMStream
If Err.Number > 0 Then
ClassLoggerDI.Add(" FEHLER bei Zuweisen aWMStream zu aFileIO - Datei wird wieder gelöscht - Error: '" & Err.Description & "'")
oNewWMObject.Unlock()
System.IO.File.Delete(My.Settings.vWLaufwerk & ":" & endgültigerDateiname)
If My.Settings.StopwatchTimerActive = True Then
oStopWatchTimer.Done()
oStopWatchTimerC.Done()
End If
Return -1
'MsgBox(Err.Description)
End If
' let fileIO object import the original file into windream
oFileIO.ImportOriginal(True)
If Err.Number > 0 Then
ClassLoggerDI.Add(" FEHLER bei FileIO.ImportOriginal(True) - Datei wird wieder gelöscht - Error: '" & Err.Description & "'")
oNewWMObject.Unlock()
System.IO.File.Delete(My.Settings.vWLaufwerk & ":" & endgültigerDateiname)
If My.Settings.StopwatchTimerActive = True Then
oStopWatchTimer.Done()
oStopWatchTimerC.Done()
End If
Return -1
' MsgBox(Err.Description)
End If
DetailLog(">> Inhalt der Datei konnte übertragen werden")
' close the windream file stream
_Step = "3.5"
DetailLog(">> _Step: " & _Step)
oWMStream.Close()
If Err.Number > 0 Then
ClassLoggerDI.Add(" FEHLER bei aWMStream.Close() - Datei wird wieder gelöscht - Error: '" & Err.Description & "'")
oNewWMObject.Unlock()
System.IO.File.Delete(My.Settings.vWLaufwerk & ":" & endgültigerDateiname)
If My.Settings.StopwatchTimerActive = True Then
oStopWatchTimer.Done()
oStopWatchTimerC.Done()
End If
Return -1
'MsgBox(Err.Description)
End If
' save new windream object
oNewWMObject.save()
If Err.Number > 0 Then
ClassLoggerDI.Add(" FEHLER bei WMObject.save - Datei wird wieder gelöscht - Error: '" & Err.Description & "'")
oNewWMObject.Unlock()
System.IO.File.Delete(My.Settings.vWLaufwerk & ":" & endgültigerDateiname)
Return -1
'MsgBox(Err.Description)
End If
DetailLog(">> Datei konnte gespeichert werden")
' unlock the windream object
_Step = "3.6"
DetailLog(">> _Step: " & _Step)
oNewWMObject.unlock()
If Err.Number > 0 Then
ClassLoggerDI.Add(" FEHLER bei WMObject.unlock - Datei wird wieder gelöscht - Error: '" & Err.Description & "'")
oNewWMObject.Unlock()
System.IO.File.Delete(My.Settings.vWLaufwerk & ":" & endgültigerDateiname)
If My.Settings.StopwatchTimerActive = True Then
oStopWatchTimer.Done()
oStopWatchTimerC.Done()
End If
Return -1
'MsgBox(Err.Description)
End If
If _windream.oWMSession.WMObjectExists(WMEntityDocument, endgültigerDateiname.Replace(My.Settings.vWLaufwerk & ":", ""), 0, 0) = False Then
ClassLoggerDI.Add(Now.ToShortTimeString & " >> File '" & DI_STREAMRESULTFILE & "' should exist in windream but WMObjectExists returned 'false' ...", True)
If My.Settings.StopwatchTimerActive = True Then
oStopWatchTimer.Done()
oStopWatchTimerC.Done()
End If
Return -1
End If
'DATEI GRÖSSE ERMITTELN - MANCHMAL KOMMT ES VOR DAS DATEIGRÖße 0 ist
_Step = "3.7"
DetailLog(">> _Step: " & _Step)
Dim oFILenth As FileInfo
Dim oIFLength As Long
If My.Settings.DIOpt_CheckLength = True Then
oFILenth = New FileInfo(My.Settings.vWLaufwerk & ":" & endgültigerDateiname)
oIFLength = oFILenth.Length
DetailLog(">>Length der Zieldatei: " & oIFLength.ToString)
End If
If (My.Settings.DIOpt_CheckLength = True And oIFLength > 0 And Err.Number = 0) Or Err.Number = 0 Then
_Step = "4"
DetailLog(">>_Step: " & _Step)
If My.Settings.StopwatchTimerActive = True Then oStopWatchTimer.Done()
If My.Settings.StopwatchTimerActive = True Then oStopWatchTimer = New SW($"{oFilenameOnly}-IndexStreamFile")
If Me.DateiIndexieren(filenameQuelle, endgültigerDateiname) = False Then
Try
oNewWMObject.Unlock()
Catch ex As Exception
End Try
Try
ClassLoggerDI.Add("FEHLER bei Dateiindexieren - Datei [" & endgültigerDateiname & "] wird wieder gelöscht!")
System.IO.File.Delete(My.Settings.vWLaufwerk & ":" & endgültigerDateiname)
If My.Settings.StopwatchTimerActive = True Then
oStopWatchTimer.Done()
oStopWatchTimerC.Done()
End If
Catch ex As Exception
ClassLoggerDI.Add(" Datei konnte nicht gelöscht werden! " & ex.Message)
End Try
Return -1
End If
Dim p As String
If endgültigerDateiname.StartsWith("\") Then
If endgültigerDateiname.StartsWith("\\") Then
p = endgültigerDateiname.Replace("\\", "\")
Else
p = endgültigerDateiname
End If
Else
p = "\" & endgültigerDateiname
End If
DI_STREAMRESULTFILE = My.Settings.vWLaufwerk & ":" & p
If _windream.oWMSession.WMObjectExists(WMEntityDocument, DI_STREAMRESULTFILE.Replace(My.Settings.vWLaufwerk & ":", ""), 0, 0) = True Then
ClassLoggerDI.Add(Now.ToString & " >> Datei '" & DI_STREAMRESULTFILE & "' wurde erfolgreich nach windream importiert!", False)
If My.Settings.StopwatchTimerActive = True Then
Dim oSWResult = oStopWatchTimerC.Done()
Try
If oSWResult < SWBesttime Then
ClassLoggerDI.Add($"New Besttime for StreamFile: 0.{oSWResult.ToString} seconds")
SWBesttime = oSWResult
End If
Catch ex As Exception
End Try
End If
Return 0
Else
ClassLoggerDI.Add(Now.ToString & " >> File '" & DI_STREAMRESULTFILE & "' should exist in windream but WMObjectExists returned 'false' ...", True)
If My.Settings.StopwatchTimerActive = True Then
oStopWatchTimer.Done()
oStopWatchTimerC.Done()
End If
Return -1
End If
Else
If My.Settings.DIOpt_CheckLength = True And oIFLength = 0 Then
_Step = "5"
DetailLog(">>_Step: " & _Step)
System.IO.File.Delete(My.Settings.vWLaufwerk & ":" & endgültigerDateiname)
ClassLoggerDI.Add(" FEHLER bei Datei-Übertragen - FileLength ist 0, Übertragene Datei wurde gelöscht- Überprüfen Sie Log-File")
If My.Settings.StopwatchTimerActive = True Then
oStopWatchTimer.Done()
End If
Return -1
End If
End If
Else
If My.Settings.StopwatchTimerActive = True Then
oStopWatchTimer.Done()
oStopWatchTimerC.Done()
End If
Return -1
End If
Else
DetailLog(">> targetPath exisitiert NICHT")
If My.Settings.StopwatchTimerActive = True Then
oStopWatchTimer.Done()
oStopWatchTimerC.Done()
End If
Return -2
End If
Catch ex As Exception
ClassLoggerDI.Add("Unexpected Error in Stream_File: " & ex.Message, True)
Try
If My.Settings.StopwatchTimerActive = True Then
oStopWatchTimer.Done()
oStopWatchTimerC.Done()
End If
Catch ex1 As Exception
End Try
Return -1
End Try
End Function
Private Function file_exists(ByVal _file As String)
Try
_file = _file.Replace("W:", "\\windream\objects")
If System.IO.File.Exists(_file) Then
Return True
Else
Return False
End If
Catch ex As Exception
ClassLoggerDI.Add(" Fehler in file exists")
Return False
End Try
End Function
#End Region
#Region "***** Indexe und Werte organisieren *****"
''' <summary>
''' Liefert Indexierungsinformationen bezüglich der angegebenen Datei.
''' </summary>
''' <param name="filename">Dateiname der Datei</param>
''' <returns>Liefert eine verschachtelte ArrayList mit Indexierunsinformationen</returns>
''' <remarks>
''' Das zurückgelieferte Array hat folgende Struktur:
''' + ArrayList
''' +-> Dateiname
''' +-> ArrayList
''' +-> Indexname 1
''' +-> ArrayList
''' +-> Wert 1
''' +-> Wert 2
''' +-> ...
''' +-> ArrayList
''' +-> Indexname 2
''' +-> ArrayList
''' +-> Wert 1
''' +-> Wert 2
''' +-> ...
''' </remarks>
Private Function GetArrayZuDatei(ByVal filename As String)
For Each element As ArrayList In Me.arrayDateiinformationen
If element(0) = filename Then Return element
Next
Return Nothing
End Function
''' <summary>
''' Übergibt einer in windream gespeicherten Datei Indexwerte
''' </summary>
''' <param name="filenameQuelle">Name der zu indexierenden Datei</param>
''' <param name="filenameZiel">neuer Name der zu indexierenden Datei</param>
''' <returns>Liefert True wenn das Indexieren erfolgreich war, sonst False</returns>
''' <remarks></remarks>
Private Function DateiIndexieren(ByVal filenameQuelle As String, ByVal filenameZiel As String)
Try
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" >>> DateiIndexieren wurde aufgerufen", False)
'Die Werte zusammenfügen
Dim oArrayList As ArrayList = Me.GetArrayZuDatei(filenameQuelle)
Dim WMObject As WINDREAMLib.WMObject '= CreateObject("WINDREAMLib.WMObject") 'New WINDREAMLib.WMObject
If oArrayList Is Nothing Then
ClassLoggerDI.Add($"Attention: oArrayList is nothing!!", False)
Return False
End If
'MsgBox("DateiIndexieren:" & vbNewLine & ClassDateiimportWindream.GetWindreamDriveLetter & filenameZiel & vbNewLine & Me.selectedProfile.DokumenttypString)
' SingleNode leeren
Me.singleInfoNode = New ArrayList
' Hier die grundsätzlichen Informationen übergeben
Me.singleInfoNode.Add("Ziel: " & My.Settings.vWLaufwerk & ":" & filenameZiel) '_windream.GetWindreamDriveLetter & filenameZiel)
' den Dokumenttyp schreiben
If INDEXIEREN_DURCHFÜHREN Then
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" ## Indexieren wird gestartet ##", False)
Try
' ein windream-Objekt der Datei anlegen
WMObject = _windream.oWMSession.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, filenameZiel)
Catch ex As Exception
ClassLoggerDI.Add("Could not create windreamobject for filestring: " & filenameZiel, True)
ClassLoggerDI.Add("Error: " & ex.Message, False)
Return False
End Try
Try
' die Datei sperren
WMObject.lock()
Catch ex As Exception
' nichts tun (Datei ist bereits gesperrt)
End Try
' wenn der Datei noch kein Dokumenttyp zugewiesen wurde
If WMObject.aObjectType.aName = "Standard" Then
Dim profil As ClassDIProfil = Me.selectedProfile
' ihr den entsprechenden Dokumenttyp zuweisen
WMObject.aObjectType = _windream.oWMSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityObjectType, Me.selectedProfile.DokumenttypString)
' WMObject.aObjectType = Me.selectedProfile.Dokumenttyp
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" - Objekttyp wird gesetzt", False)
Else
If WMObject.aObjectType.aName <> "Standard" Then
ClassLoggerDI.Add(">> ACHTUNG: Ein Objekttyp war bereits gesetzt ==> " & WMObject.aObjectType.aName, False)
End If
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" Objekttyp war bereits gesetzt", False)
End If
Try
WMObject.Save()
Catch ex As Exception
' wenn es einen Fehler beim speichern gab, dann konnte auch kein Dokumenttyp gesetzt werden -> es kann also auch keine
' Indexierung stattfinden und die Indexierung muss nicht fortgesetzt werden
ClassLoggerDI.Add(">> Error while saving Object: " & ex.Message, False)
Return False
End Try
Try
WMObject.unlock()
Catch ex As Exception
' wenn das entsperren nicht geklappt hat, dann war die Datei auch nicht gesperrt
End Try
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" - Datei wurde gespeichert / Unlock wurde durchgeführt", False)
' wenn bis hierher alles geklappt hat wurde ein Dokumenttyp übergeben
' dies wird an das Array für den TreeView-Log übergeben
Me.singleInfoNode.Add("Objekttyp: " & Me.selectedProfile.DokumenttypString)
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" - Objekttyp: " & Me.selectedProfile.DokumenttypString, False)
Else
ClassLoggerDI.Add($"INDEXIEREN_DURCHFÜHREN: {INDEXIEREN_DURCHFÜHREN}", False)
End If
' wenn keine Werte vorhanden sind, soll wenigstens der Dokumenttyp eingetragen werden
Try
If oArrayList(1) Is Nothing Then
ClassLoggerDI.Add($"Attention: oArrayList(1) is nothing!!", False)
Return False
End If
Catch ex As Exception
' wenn ein Fehler auftrat -> Fehler vermerken
Me.singleInfoNode.Add(" - ACHTUNG: Der Datei wurde kein Index zugewiesen.")
' an die Gesamtauflistung übergeben
Me.TreeNodeInfos.Add(Me.singleInfoNode)
Return False
End Try
Dim indexe As String = ""
For i As Integer = 1 To oArrayList.Count - 1
Dim indexname As String = oArrayList(i)(0)
Dim werte
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" - Indexname: '" & indexname & "'", False)
If (_windream.GetTypeOfIndexAsIntByName(indexname) = WMObjectVariableValueTypeVector) Or _windream.GetTypeOfIndexAsIntByName(indexname) = 4097 Then
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" - Es handelt sich um ein Vektor-Feld", False)
werte = New ArrayList
For Each wert As String In oArrayList(i)(1)
'Am 04.08.2014 aktualisiert: um zu verhindern das die vorangegangene Versionierung "Tilde-Werte" schreibt
Dim IndexValue = wert
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" - Wert vor Überprüfung: " & IndexValue, False)
IndexValue = CheckIndexValue(IndexValue)
'Ausstieg da Fehler in der Überprüfung
If IndexValue Is Nothing Then
Return False
End If
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" - Value für Indexierung: " & IndexValue, False)
werte.Add(IndexValue)
Next
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" - Werte zu Array hinzugefügt!", False)
Else
'Am 04.08.2014 aktualisiert: um zu verhindern das die vorangegangene Versionierung "Tilde-Werte" schreibt
Dim IndexValue = oArrayList(i)(1)(0)
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" - Value vor Überprüfung: " & IndexValue, False)
IndexValue = CheckIndexValue(IndexValue)
'Ausstieg da Fehler in der Überprüfung
If IndexValue Is Nothing Then
Return False
End If
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" - Value für Indexierung: " & IndexValue, False)
werte = IndexValue
End If
'indexe &= indexname & " = " & werte & vbNewLine
'Der Indexierungsvorgang
Dim indexErgebnis As ArrayList = Me.Indexiere(filenameZiel, indexname, werte)
For Each indexInfo As String In indexErgebnis
Me.singleInfoNode.Add(indexInfo)
Next
'Me.singleInfoNode.Insert(0, Me.singleInfoNode(1))
'Me.singleInfoNode.Insert(0, Me.singleInfoNode(0))
Next
Me.TreeNodeInfos.Add(Me.singleInfoNode)
Return True
'MsgBox(arr(0) & vbNewLine & indexe)
Catch ex As Exception
ClassLoggerDI.Add("Hinweis: Die Datei " & filenameZiel & " konnte nicht indexiert werden.")
ClassLoggerDI.Add("Fehler: " & ex.Message)
' Me.TreeNodeInfos.Add(temp)
Return False
End Try
End Function
Private Function CheckIndexValue(ByVal input)
Try
'Ersetzt die Versionierungen Tilde(~) und Klammern ((1))
For i As Integer = 1 To 20
If input.ToString.EndsWith("~" & i.ToString) Then
input = input.ToString.Replace("~" & i.ToString, "")
ElseIf input.ToString.EndsWith("(" & i.ToString & ")") Then
input = input.ToString.Replace("(" & i.ToString & ")", "")
End If
Next
Return input
Catch ex As Exception
ClassLoggerDI.Add("Fehler in CheckIndexValue: " & ex.Message)
Return Nothing
End Try
End Function
''' <summary>
''' Diese Funktion überprüft ob eine Variable ein Array ist, oder nicht.
''' </summary>
''' <param name="arrayOrNot">Variable die überprüft werden soll</param>
''' <returns>Liefert True wenn es sich um ein Array handelt, sonst False</returns>
''' <remarks></remarks>
Private Function IsArray(ByVal arrayOrNot As Object)
Dim arrayType As String = UCase(arrayOrNot.GetType.ToString)
' überprüft an welcher Stelle sich ein '['-Zeichen befindet
Dim position = InStr(arrayType, "[")
' existiert ein '['-Zeichen, so handelt es sich um ein Array (GetType wäre System.Object[])
If Not position = 0 Then
Return True
Else
Return False
End If
End Function
''' <summary>
''' Diese Funktion überprüft ob eine Variable eine ArrayList ist, oder nicht.
''' </summary>
''' <param name="arrayOrNot">Variable die überprüft werden soll</param>
''' <returns>Liefert True wenn es sich um eine ArrayList handelt, sonst False</returns>
''' <remarks></remarks>
Private Function IsArrayList(ByVal arrayOrNot As Object)
Dim arrayType As String = UCase(arrayOrNot.GetType.ToString)
' überprüft an welcher Stelle sich ein '['-Zeichen befindet
Dim position = InStr(arrayType, "[")
' existiert ein '['-Zeichen, so handelt es sich um ein Array (GetType wäre System.Object[])
If arrayOrNot.GetType.ToString = "System.Collections.ArrayList" Then
Return True
Else
Return False
End If
End Function
''' <summary>
''' Diese Funktion errechnet aus einem Datum den Unix-Timestamp
''' </summary>
''' <param name="FromDateTime">Datum, für das der Timestamp errechnet werden soll</param>
''' <returns>Liefert den Timestamp als Integer</returns>
''' <remarks></remarks>
Private Function GetTimestamp(ByVal FromDateTime As DateTime) As Integer
If IsDate(FromDateTime) Then
Dim Startdate As DateTime = #1/1/1970#
Dim Spanne As TimeSpan
' vom Datum das Datum des "Beginns der Zeitrechnung" abziehen
Spanne = FromDateTime.Subtract(Startdate)
' die Zeitspanne in einen Integer umwandeln
Return CType(Math.Abs(Spanne.TotalSeconds()), Integer)
Else
Return 0
End If
End Function
''' <summary>
''' Führt das eigendliche Indexieren aus
''' </summary>
''' <param name="filenameZiel">Dateiname der zu indexierenden Datei</param>
''' <param name="index">Name des zu indexierenden Indexfeldes</param>
''' <param name="werte">Der Wert/die Werte die dem Index zugewiesen werden sollen</param>
''' <returns>Liefert True wenn das Indexieren erfolgreich war, sonst False</returns>
''' <remarks></remarks>
Private Function Indexiere(ByVal filenameZiel As String, ByVal index As String, ByVal werte As Object) As ArrayList
Dim type = werte.GetType
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" - In Indexierungsvorgang für: " & filenameZiel, False)
Dim indexInfos = New ArrayList
Dim count_Values As Integer
If type.FullName = "System.String" Then
count_Values = 1
Else
Try
For Each wert As Object In werte
count_Values += 1
Next
Catch ex As Exception
count_Values = 1
End Try
End If
Try
Dim WMObject As WINDREAMLib.WMObject = Nothing '= CreateObject("WINDREAMLib.WMObject") '= New WINDREAMLib.WMObject 'CreateObject("WINDREAMLib.WMObject")
'MsgBox("Indexiere: " & vbNewLine & filenameZiel)
Dim indexBeschreibung As String = ""
'werte Is Nothing Or _
' überprüfen ob alle notwendigen Informationen angegeben wurden (sonst abbrechen)
If filenameZiel Is Nothing Or
filenameZiel = "" Or
index Is Nothing Or
index = "" Or
Not _windream.ExistIndexInObjekttyp(Me.selectedProfile.DokumenttypString, index) Then
indexInfos.Add("Hinweis: Die Datei wurde auf Grund eines Problems in der Initialisierung nicht vollständig indexiert.")
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add("=> Hinweis: Die Datei wurde auf Grund eines Problems in der Initialisierung nicht vollständig indexiert.", False)
Return indexInfos
End If
Dim fileExists As Boolean
If INDEXIEREN_DURCHFÜHREN Then
' prüfen ob die zu indexierende Datei existiert
fileExists = My.Computer.FileSystem.FileExists(My.Settings.vWLaufwerk & ":" & filenameZiel) '_windream.GetWindreamDriveLetter
Else
fileExists = True
End If
Dim an As Integer = 0
Do While My.Computer.FileSystem.FileExists(My.Settings.vWLaufwerk & ":" & filenameZiel) = False
If an > 500 Then
fileExists = False
Exit Do
Else
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" Achtung: Datei exisitiert noch nicht: " & My.Computer.Clock.LocalTime, True)
End If
an = an + 1
Loop
' wenn die Datei existiert
If fileExists Then
If INDEXIEREN_DURCHFÜHREN Then WMObject = _windream.oWMSession.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, filenameZiel)
' eine Variable für den umgewandelten Indexwert anlegen (kein Typ, da noch unklar ist was reingeschrieben wird)
Dim convertValue = Nothing
' den Typ des Zielindexes auslesen
Dim TypDesIndexes As Integer
Try
If INDEXIEREN_DURCHFÜHREN Then
' ein windream-Objekt der Datei anlegen
WMObject = _windream.oWMSession.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, filenameZiel)
If My.Settings.vLogErrorsonly = False Then
ClassLoggerDI.Add(" - windream-Objekt der Datei erzeugt", False)
ClassLoggerDI.Add(" - Ziel: W:\" & filenameZiel, False)
End If
'Me.singleInfoNode.Add("Ziel: " & ClassDateiimportWindream.GetWindreamDriveLetter & filenameZiel)
Try
' die Datei sperren
WMObject.lock()
'WMObject.LockFor(WINDREAMLib.WMObjectEditMode.WMObjectEditModeObject)
Catch ex As Exception
End Try
' wenn der Datei noch kein Dokumenttyp zugewiesen wurde
If WMObject.aObjectType.aName = "Standard" Then
' ihr den entsprechenden Dokumenttyp zuweisen
WMObject.aObjectType = _windream.oWMSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityObjectType, Me.selectedProfile.DokumenttypString)
' WMObject.aObjectType = Me.selectedProfile.Dokumenttyp
End If
End If
' wenn keine Werte vorhanden sind, soll wenigstens der Dokumenttyp eingetragen werden
If werte Is Nothing Then
If INDEXIEREN_DURCHFÜHREN Then
Try
WMObject.Save()
WMObject.unlock()
Catch ex As Exception
End Try
End If
Return Me.singleInfoNode
End If
' den Typ des Zielindexes auslesen
TypDesIndexes = _windream.GetTypeOfIndexAsIntByName(index)
' wenn es sich bei dem Index NICHT um ein Vektorfeld handelt
If TypDesIndexes < WMObjectVariableValueTypeVector Then
indexInfos.Add("Bei dem Zielindex handelt es sich um einen Einzelindex.")
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" - Bei dem Zielindex handelt es sich um einen Einzelindex.", False)
' wenn es sich bei der Variablen mit den ausgelesenen Indexwerten um ein Array oder eine ArrayList handelt
If Me.IsArray(werte) Or Me.IsArrayList(werte) Then
' ein Backup der Indexwerte anlegen
Dim temp As Object = werte
' und die eigendliche Variable zurücksetzen
werte = Nothing
' dann soll nur der letzte Wert des Arrays übernommen werden, damit nicht versucht wird ein
' Array in einen Einzelindex zu speichern
werte = temp(temp.Length - 1)
End If
Else
indexInfos.Add("Bei dem Zielindex handelt es sich um ein Vektorfeld.")
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" Bei dem Zielindex handelt es sich um ein Vektorfeld.", False)
' ein Backup der Indexwerte anlegen
Dim temp As Object = werte
' und die eigentliche Variable zurücksetzen
werte = Nothing
' dann soll nur der letzte Wert des Arrays übernommen werden, damit nicht versucht wird ein
' Array in einen Einzelindex zu speichern
werte = temp
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" - Array geleert und erneuert!", False)
End If
indexBeschreibung = "Zielindex: " & index & " => "
Catch ex As Exception
indexInfos.Add("Hinweis: Beim Initialisieren der Datei auf dem windream-Laufwerk ist ein Fehler aufgetreten.")
ClassLoggerDI.Add("Hinweis: Beim Initialisieren der Datei auf dem windream-Laufwerk ist ein Fehler aufgetreten.", False)
Return indexInfos
End Try
Try
' den Typ des Zielindexes
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" - Typ des Indexes: " & TypDesIndexes.ToString, False)
Select Case (TypDesIndexes)
Case WMObjectVariableValueTypeUndefined ' zu klären !!!!
convertValue = vbEmpty
Case WMObjectVariableValueTypeString
''Führende Nullen Entfernen
'If werte.ToString.StartsWith("0") Then
' Dim wert As String = CStr(CInt(werte.ToString))
' convertValue = wert
' ClassLoggerDI.Add(" - Führende Nullen wurden entfernt", False)
'Else
' convertValue = CStr(werte)
'End If
convertValue = CStr(werte)
If convertValue.ToString.Contains("~1") Then
convertValue = convertValue.ToString.Replace("~1", "")
End If
If convertValue.ToString.Contains("~2") Then
convertValue = convertValue.ToString.Replace("~2", "")
End If
If convertValue.ToString.Contains("~3") Then
convertValue = convertValue.ToString.Replace("~3", "")
End If
If convertValue.ToString.Contains("~4") Then
convertValue = convertValue.ToString.Replace("~4", "")
End If
Case WMObjectVariableValueTypeInteger
convertValue = CInt(werte)
Case WMObjectVariableValueTypeFloat
werte = werte.ToString.Replace(".", ",")
convertValue = CDbl(werte)
Case WMObjectVariableValueTypeBoolean
Try
convertValue = CBool(werte)
Catch ex As Exception
' Nothing zuweisen damit SetVariableValue nicht ausgeführt wird
'convertValue = Nothing
End Try
Case WMObjectVariableValueTypeDate
If (IsDate(werte)) Then
convertValue = CDate(werte)
Else
convertValue = vbEmpty
End If
Case WMObjectVariableValueTypeFixedPoint
werte = werte.ToString.Replace(".", ",")
convertValue = CDbl(werte)
Case WMObjectVariableValueTypeTimeStamp
Dim timestamp As Integer = Me.GetTimestamp(werte)
If timestamp > 0 Then
convertValue = timestamp
Else
convertValue = vbEmpty
End If
Case WMObjectVariableValueTypeCurrency
Dim aValue As System.Runtime.InteropServices.CurrencyWrapper = New System.Runtime.InteropServices.CurrencyWrapper(werte)
convertValue = aValue
Case WMObjectVariableValueTypeTime
If (IsDate(werte)) Then
convertValue = CDate(werte) ' ggf. aber nur die Zeit
Else
convertValue = vbEmpty
End If
Case WMObjectVariableValueTypeVariant
convertValue = werte
Case WMObjectVariableValueTypeMask ' zu klären !!!!
convertValue = vbEmpty
Case WMObjectVariableValueFlagMask ' zu klären !!!!
convertValue = vbEmpty
Case WMObjectVariableValueTypeFulltext
convertValue = CStr(werte)
Case WMObjectVariableValueTypeDefaultValue ' zu klären !!!!
convertValue = vbEmpty
Case Else
' wenn es sich um einen TypVektorIndex handelt
If TypDesIndexes >= 4096 And TypDesIndexes < 8192 Or TypDesIndexes = 36865 Then
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add("- Es handelt sich um einen Vektorindex", False)
Dim temp_arr As New ArrayList
Select Case TypDesIndexes
Case 4097
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add("- VektorIndex vom Typ 4097", False)
For Each wert As Object In werte
''Führende Nullen Entfernen
'If werte.ToString.StartsWith("0") Then
' Dim werteString As String = CStr(CInt(wert.ToString))
' wert = werteString
' temp_arr.Add(CStr(wert))
' ClassLoggerDI.Add("- Führende Nullen wurden entfernt", False)
'Else
' temp_arr.Add(CStr(wert))
'End If
temp_arr.Add(CStr(wert))
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add("- Wert " & CStr(wert) & " konvertiert", False)
Next
Case 4098
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add("- VektorIndex vom Typ 4098 Integer", False)
If count_Values = 1 Then
temp_arr.Add(CInt(werte))
Else
For Each wert As Object In werte
temp_arr.Add(CInt(wert))
Next
End If
Case 4099
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add("- VektorIndex vom Typ 4099 (Float)", False)
For Each wert As Object In werte
wert = wert.ToString.Replace(".", ",")
temp_arr.Add(CDbl(wert))
Next
Case 4100
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add("- VektorIndex vom Typ 4100 (Boolean)", False)
If count_Values = 1 Then
temp_arr.Add(CBool(werte))
Else
For Each wert As Object In werte
temp_arr.Add(CBool(wert))
Next
End If
Case 4101
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add("- VektorIndex vom Typ 4101 Date", False)
For Each wert As Object In werte
'wert =
temp_arr.Add(CDate(wert))
Next
Case WMObjectVariableValueTypeTimeStamp
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add("- VektorIndex vom Typ DateTime " & WMObjectVariableValueTypeTimeStamp.ToString, False)
For Each wert As Object In werte
temp_arr.Add(CLng(wert))
Next
Case 4104
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add("- VektorIndex vom Typ Currency", False)
For Each wert As Object In werte
Dim aValue As System.Runtime.InteropServices.CurrencyWrapper = New System.Runtime.InteropServices.CurrencyWrapper(werte)
temp_arr.Add(aValue)
Next
Case 4107
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add("- VektorIndex vom Typ Integer 64bit", False)
For Each wert As Object In werte
temp_arr.Add(CInt(wert))
Next
Case 36865
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add("- VektorIndex vom Typ 36865", False)
'For Each wert As Object In werte
' 'Führende Nullen Entfernen
' If werte.ToString.StartsWith("0") Then
' Dim werteString As String = CStr(CInt(wert.ToString))
' wert = werteString
' temp_arr.Add(CStr(wert))
' ClassLoggerDI.Add("- Führende Nullen wurden entfernt", False)
' Else
' temp_arr.Add(CStr(wert))
' End If
' If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add("- Wert " & CStr(wert) & " konvertiert", False)
'Next
Try
temp_arr.Add(CStr(werte))
Catch ex As Exception
temp_arr.Add(werte)
End Try
Case WMObjectVariableValueTypeUndefined
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add("- VektorIndex Undefined", False)
convertValue = ""
Case WMObjectVariableValueTypeBoolean
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add("- VektorIndex Boolean", False)
For Each wert As Object In werte
Try
temp_arr.Add(CBool(wert))
Catch ex As Exception
' Nothing zuweisen damit SetVariableValue nicht ausgeführt wird
temp_arr = Nothing
End Try
Next
Case WMObjectVariableValueTypeFixedPoint
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add("- VektorIndex WMObjectVariableValueTypeFixedPoint", False)
For Each wert As Object In werte
temp_arr.Add(CDbl(wert))
Next
Case WMObjectVariableValueTypeTime
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add("- VektorIndex WMObjectVariableValueTypeTime", False)
For Each wert As Object In werte
temp_arr.Add(CDate(wert))
Next
Case WMObjectVariableValueTypeVariant
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add("- VektorIndex WMObjectVariableValueTypeVariant", False)
' dann bleiben alle Werte wie sie sind
End Select
'Select Case (TypDesIndexes - WMObjectVariableValueTypeVector)
' 'VektorIndex vom Typ String 64'
' Case 1
' Case WMObjectVariableValueTypeUndefined
' Case WMObjectVariableValueTypeString
' Case WMObjectVariableValueTypeInteger
' Case WMObjectVariableValueTypeFloat
' Case WMObjectVariableValueTypeBoolean
' Case WMObjectVariableValueTypeDate
' Case WMObjectVariableValueTypeTimeStamp
' Case WMObjectVariableValueTypeCurrency
' Case WMObjectVariableValueTypeTime
' For Each wert As Object In werte
' temp_arr.Add(CDate(wert))
' Next
' Case WMObjectVariableValueTypeVariant
' ' dann bleiben alle Werte wie sie sind
'End Select
If temp_arr.Count > 0 Then
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add("- Einträge in temp_arr also Speichern des Arrays in convertValue", False)
convertValue = Nothing
convertValue = temp_arr.ToArray
Else
convertValue = vbEmpty
End If
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add("- Werte erfolgreich konvertiert", False)
Else
convertValue = vbEmpty
End If
End Select
Catch ex As Exception
' einen Hinweis über einen aufgetretenen Fehler an das Array für den TreeView-Log anhängen
indexInfos.Add("Hinweis: beiAuswerten/Konvertieren des Typs ist ein Fehler aufgetreten.")
ClassLoggerDI.Add("Fehler bei Auswerten/Konvertieren des Typs!", ex.Message)
' die Indexierungsinformationen für den TreeView-Log zurückgeben
Return indexInfos
End Try
Try
If INDEXIEREN_DURCHFÜHREN Then
' ***** Anmerkung: das Nachindexieren mit vbEmpty ist möglich (siehe oben) jedoch nicht *****
' ***** das Indexieren mit einem Nothing-Wert !!! *****
' wenn das Konvertieren soweit gut gelaufen ist (also kein Nothing-Wert zugewiesen wurde)
If convertValue IsNot Nothing Then
' den konvertierten Indexwert dem entsprechenden Index zuweisen
WMObject.SetVariableValue(index, convertValue)
If My.Settings.vLogErrorsonly = False Then
ClassLoggerDI.Add(" - den konvertierten Indexwert dem entsprechenden Index zuweisen", False)
ClassLoggerDI.Add(" - Indexname: " & index.ToString, False)
ClassLoggerDI.Add(" - Indexwert: " & convertValue.ToString, False)
End If
If index = selectedProfile.Link2Navision_dokart Then
_Link2NavDokumentart = convertValue.ToString
End If
If index = selectedProfile.Link2Navision_Index Then
_Link2NavIndexwert = convertValue.ToString
End If
End If
' die Indexinformationen des Dokuments speichern
WMObject.Save()
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" - die Indexinformationen des Dokuments speichern", False)
' Unlock in einem unbehandelten Try-Block um Fehler abzufangen,
' wenn eine Datei nicht gesperrt ist
Try
' die Sperrung des Dokuments aufheben
WMObject.unlock()
If My.Settings.vLogErrorsonly = False Then ClassLoggerDI.Add(" - die Sperrung des Dokuments aufheben", False)
Catch ex As Exception
' nichts tun (Datei war nicht gesperrt)
End Try
End If
If convertValue IsNot Nothing Then
' sonst die Indexbeschreibung löschen, damit sie im TreeView-Log nicht auftaucht
indexBeschreibung &= convertValue.ToString
Else
indexBeschreibung = Nothing
End If
Catch ex As Exception
If INDEXIEREN_DURCHFÜHREN Then
' auch wenn ein Fehler aufgetreten ist muss das Dokument gespeichert werden, um den Dokumenttypen zu speichern
WMObject.Save()
' Unlock in einem unbehandelten Try-Block um Fehler abzufangen,
' wenn eine Datei nicht gelocked ist
Try
WMObject.unlock()
Catch ex2 As Exception
' nichts tun (Datei war nicht gesperrt)
End Try
End If
' Nachricht für den TreeView-Log
indexBeschreibung &= "konnte nicht indexiert werden"
ClassLoggerDI.Add(" DATEI konnte nicht indexiert werden", True)
End Try
' wenn eine Indexbeschreibung vorliegt -> diese an das Array für den TreeView-Log anhängen
If indexBeschreibung IsNot Nothing Then
' Indexierungsnachricht an Array für TreeView-Log anhängen
indexInfos.Add(indexBeschreibung)
End If
' die Indexierungsinformationen für den TreeView-Log zurückgeben
Return indexInfos
Else
' die Indexierungsinformationen für den TreeView-Log zurückgeben
indexInfos.Add("Hinweis: Die Datei hat zum Zeitpunkt der Indexierung noch nicht auf dem windream-Laufwerk existiert.")
ClassLoggerDI.Add(" Hinweis: Die Datei hat zum Zeitpunkt der Indexierung noch nicht auf dem windream-Laufwerk existiert.", False)
End If
Catch ex As Exception
indexInfos.Add("Hinweis: Unbekannter Fehler beim Indexieren der Datei.")
ClassLoggerDI.Add("Unbekannter Fehler beim Indexieren der Datei.", True)
ClassLoggerDI.Add(ex.Message)
End Try
Return indexInfos
End Function
#End Region
Private Sub frmDIHauptseite_SizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.SizeChanged
If Formloaded = True Then
If Me.Size.Height > 100 Then
If Not Me.threadDateiimport.IsBusy Then
If Not Me.ErgebnisNochNichtLöschen Then
' alle Profilein die Combobox schreiben
Me.LoadProfilesInCombobox()
' Me.lblLog.Visible = False
' Me.tvLog.Visible = False
Me.progressImport.Visible = False
Me.btnAbbrechen.Visible = False
Me.lblProgress.Visible = False
Me.txtQuellordner.Enabled = False
Me.txtZielordner.Enabled = False
Me.btnQuellordner.Enabled = False
Me.btnZielordner.Enabled = False
Else
Me.ErgebnisNochNichtLöschen = False
End If
Else
Me.ErgebnisNochNichtLöschen = True
End If
End If
End If
End Sub
Private Sub rbManuell_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbManuell.CheckedChanged
If Me.rbManuell.Checked Then
btnDI_Manuell_starten.Enabled = True
Me.btnDurchlauf.Enabled = False
Me.numIntervallDurchlauf.Enabled = False
Else
btnDI_Manuell_starten.Enabled = False
Me.btnDurchlauf.Enabled = True
Me.numIntervallDurchlauf.Enabled = True
End If
End Sub
Private Sub btnDurchlauf_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDurchlauf.Click
If Me._running = False Then
Dim result As MsgBoxResult = MsgBox("Wollen Sie den Durchlauf sofort starten?" & vbNewLine & "'Nein' führt den Durchlauf in " & Me.numIntervallDurchlauf.Value & " Minuten zum ersten mal aus!", MsgBoxStyle.YesNo, "Frage:")
If result = MsgBoxResult.Yes Then
Automatischer_Durchlauf(True)
Else
Automatischer_Durchlauf(False)
End If
Else
Automatischer_Durchlauf(False)
End If
End Sub
Sub Automatischer_Durchlauf(ByVal runnow As Boolean)
Try
If Me._running = False Then
If Not threadDateiimport.IsBusy Then
ClassLoggerDI.Init("", My.Settings.vLogDI & "_", True)
Me._running = True
Me.btnDurchlauf.Text = "Dateiimport stoppen"
Me.btnDI_Manuell_starten.Enabled = False
Me.numIntervallDurchlauf.Enabled = False
Me.lblLog.Visible = True
Me.tvLog.Visible = True
Me.Durchlauf = True
Me.timRun_Dateiimport.Interval = Me.numIntervallDurchlauf.Value * 60 * 1000
Me.timRun_Dateiimport.Start()
My.Settings.vDIDurchlaufRunning = True
My.Settings.Save()
'Direkt einen Durchlauf starten
If runnow = True Then
Thread.Sleep(3000)
Run_Profildurchlauf()
End If
Else
MsgBox("Die Prozesse des Dateiimporters laufen noch")
End If
Else
Me._running = False
Me.btnDurchlauf.Text = "Durchlauf für Dateiimport starten"
Me.lblLetzter_Durchlauf.Visible = False
Me.numIntervallDurchlauf.Enabled = True
Me.lblLog.Visible = False
Me.tvLog.Visible = False
Me.timRun_Dateiimport.Stop()
Durchlauf = False
My.Settings.vDIDurchlaufRunning = False
End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Fehler bei btnDurchlauf.Click:")
End Try
End Sub
Private Sub timRun_Dateiimport_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timRun_Dateiimport.Tick
Run_Profildurchlauf()
End Sub
Sub Run_Profildurchlauf()
If Not threadDateiimport.IsBusy Then
If My.Settings.Sleep_Begin > 0 And My.Settings.Sleep_End > 0 Then
If Now.Hour >= My.Settings.Sleep_Begin And Now.Hour <= My.Settings.Sleep_End Then
clsLogger.Add(String.Format(">> ToolCollection is in SleepMode - {0}-{1}-{2}", Now.Hour.ToString, My.Settings.Sleep_Begin.ToString, My.Settings.Sleep_End.ToString), False)
Exit Sub
End If
End If
Me.lblLetzter_Durchlauf.Visible = True
Backgroundtask_Dateiimport_starten()
Me.lblLetzter_Durchlauf.Text = "Letzter Durchlauf: " & My.Computer.Clock.LocalTime
End If
End Sub
Private Sub Standards_Ueberpruefen()
If Not My.Computer.FileSystem.DirectoryExists(Me.txtQuellordner.Text) And Not My.Computer.FileSystem.DirectoryExists(Me.txtZielordner.Text) Then
MsgBox("Es wurde kein gültiges Verzeichnis angegeben. Mindestens eines der angegebenen Verzeichnisse existiert nicht.", MsgBoxStyle.Exclamation, "Ungültige Eingabe")
Alles_OK = False
Exit Sub
End If
If Not Me.txtZielordner.Text.Substring(0, 2).ToUpper = My.Settings.vWLaufwerk & ":" Then '_windream.GetWindreamDriveLetter.ToUpper
MsgBox("Das angegebene Zielverzeichnis befindet sich nicht auf einem windream-Laufwerk. Bitte prüfen Sie nochmals Ihre Eingabe.", MsgBoxStyle.Exclamation, "Ungültige Eingabe")
Alles_OK = False
Exit Sub
End If
If Me.selectedProfile.Dokumenttyp Is Nothing Then
MsgBox("Der Objekttyp, der dem Profil zugewiesen ist, scheint auf dem aktuellen windream-Server nicht zu existieren." & vbNewLine &
"Bitte prüfen Sie das Profil auf Richtigkeit." & vbNewLine & vbNewLine &
"Überprüfen Sie bitte ob der Objekttyp in den Profileinstellungen rot dargestellt ist. Ist dies der" & vbNewLine &
"Fall, dann existiert der Objekttyp nicht und das Profil kann auf dem windream-Server, an dem Sie" & vbNewLine &
"gerade angemeldet sind, nicht benutzt werden.", MsgBoxStyle.Exclamation, "Profil mit ungültigem Objekttyp")
Alles_OK = False
Exit Sub
End If
Dim zielVerzeichnisCheck As WINDREAMLib.WMObject = Nothing
Try
zielVerzeichnisCheck = _windream.oWMSession.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityFolder, Me.txtZielordner.Text.Substring(2))
Catch ex As Exception
End Try
If zielVerzeichnisCheck Is Nothing Then
MsgBox("Es wurde kein gültiges Zielverzeichnis angegeben. Prüfen Sie bitte ob das Verzeichnis auf dem windream-Laufwerk existiert.", MsgBoxStyle.Exclamation, "Ungültige Eingabe")
Alles_OK = False
Exit Sub
End If
End Sub
Private Sub Backgroundtask_Dateiimport_starten()
Me.TreeNodeInfos = New ArrayList
Me.cmbProfilauswahl.Enabled = False
Me.txtQuellordner.Enabled = False
Me.txtZielordner.Enabled = False
Me.btnQuellordner.Enabled = False
Me.btnZielordner.Enabled = False
Me.progressImport.Enabled = True
Me.btnAbbrechen.Enabled = True
Me.lblLog.Visible = True
Me.tvLog.Visible = True
Me.lblProgress.Visible = True
Me.progressImport.Visible = True
Me.btnAbbrechen.Visible = True
Me.btnDI_Manuell_starten.Enabled = False
Me.progressImport.Value = 0
Me.startBackgroundTask()
End Sub
Private Sub chkbEmail_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkbEmail.CheckedChanged
If chkbEmail.Checked Then
gbEmail.Enabled = True
Else
gbEmail.Enabled = False
End If
End Sub
Private Sub btntestmail_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btntestmail.Click
My.Settings.Save()
If Me.txtBetreff.Text = "" Or Me.txtEmpfaenger.Text = "" Or Me.txtMail_from.Text = "" Or Me.txtUser.Text = "" Or Me.txtPasswort.Text = "" Or
Me.txtSMTP.Text = "" Then
MsgBox("Bitte achten sie darauf alle Konfigurationsfelder für die Fehler-Email auszufüllen!", MsgBoxStyle.Critical, "Fehlende Eingaben:")
Else
email.Send_EMail("TEST-EMAIL", True) ' Gesendet am: " & My.Computer.Clock.LocalTime.ToShortDateString & "-" & My.Computer.Clock.LocalTime.ToLongTimeString
End If
End Sub
Private Sub frmDIHauptseite_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
End Sub
Private Sub TextBoxen_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles _
_
txtUser.LostFocus, txtSMTP.LostFocus, txtPasswort.LostFocus,
txtMail_from.LostFocus, txtEmpfaenger.LostFocus, txtBody.LostFocus, txtBetreff.LostFocus
CType(sender, TextBox).BackColor = Color.White
My.Settings.Save()
End Sub
Private Sub TextBoxen_gotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles _
_
txtUser.GotFocus, txtSMTP.GotFocus, txtPasswort.GotFocus,
txtMail_from.GotFocus, txtEmpfaenger.GotFocus, txtBody.GotFocus, txtBetreff.GotFocus
CType(sender, TextBox).BackColor = Color.Lime
End Sub
Private Sub tcMain_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles tcMain.SelectedIndexChanged
My.Settings.Save()
End Sub
Private Sub frmDIHauptseite_Load(sender As Object, e As EventArgs) Handles MyBase.Load
End Sub
End Class