2536 lines
131 KiB
VB.net
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 |