292 lines
14 KiB
VB.net
292 lines
14 KiB
VB.net
Imports WINDREAMLib
|
|
Imports System.IO
|
|
Public Class clsDateiverarbeitung
|
|
|
|
#Region "***** Variablen und Konstanten*****"
|
|
Public Shared _windream As New clsWindream_allgemein
|
|
|
|
|
|
Public Shared pr_DTPROFIL_REGELN As DataTable
|
|
Public Shared aktfile_Exportresult
|
|
|
|
|
|
Public Shared CriticalError As Boolean = False
|
|
|
|
Private Shared regel_TYP, regel_INDEX_NAME, regel_QUELLE1, regel_FROM1, regel_FROM2 As String
|
|
Private Shared Indexe() As String = Nothing ' zum Speichern der Indexe
|
|
Private Shared NI_Values() As String = Nothing ' zum Speichern der Werte
|
|
|
|
Private Shared WD_aktivesDokument As WMObject
|
|
|
|
|
|
Const WMObjectStreamOpenModeReadWrite = 2
|
|
Const WMObjectEditModeFileSystem = &H15
|
|
#End Region
|
|
Public Shared Function InitProfilData()
|
|
Try
|
|
pr_DTPROFIL_REGELN = Nothing
|
|
' Profildaten der Klasse mitteilen
|
|
clsLogger.AddDetailLog("InitProfilData Profildaten zugewiesen....")
|
|
Return True
|
|
Catch ex As Exception
|
|
clsLogger.AddError(ex.Message, "cls_DV.InitProfilData")
|
|
Return False
|
|
End Try
|
|
End Function
|
|
'Kopiert die übergebene Datei in den Zielpfad
|
|
Public Shared Function Export_File(WDDatei As WMObject, Zielpfad As String)
|
|
Try
|
|
If Not Zielpfad.EndsWith("\") Then
|
|
Zielpfad = Zielpfad & "\"
|
|
End If
|
|
clsLogger.Add("", False)
|
|
clsLogger.Add(">> Verarbeitung von Datei: " & WDDatei.aName, False)
|
|
'Die Quelle zusammensetzen
|
|
clsLogger.AddDetailLog("PFAD: " & WDLAUFWERK & ":" & WDDatei.aPath & "\" & WDDatei.aName)
|
|
'Dim Quelle As String = IO.Path.GetDirectoryName(WDLaufwerk & ":" & WDDatei.aPath & "\" & WDDatei.aName)
|
|
|
|
Dim ExportFileIO = New WMOTOOLLib.WMFileIO ' CreateObject("WMOTOOLLib.WMFileIO") ' New WMOTOOLLib.WMFileIO
|
|
clsLogger.AddDetailLog("ExportFileIO erzeugt.....")
|
|
' Stream Interface bereitstellen
|
|
WDDatei.LockFor(WMObjectEditModeFileSystem)
|
|
Try
|
|
If Not WDDatei.aLocked Then
|
|
WDDatei.lock()
|
|
End If
|
|
Catch ex As Exception
|
|
clsLogger.AddError("Unvorhergesehener Fehler beim Lock-Vorgang: " & ex.Message, "clsDV.Export_File")
|
|
Return False
|
|
End Try
|
|
|
|
Dim oWMStream = WDDatei.OpenStream("BinaryObject", WMObjectStreamOpenModeReadWrite)
|
|
'### VERSIONIERUNG ###
|
|
Dim version As Integer = 2
|
|
'Dim Stammname As String = System.IO.Path.GetFileNameWithoutExtension(Quelle)
|
|
Dim Filename = WDDatei.aName.Substring(0, WDDatei.aName.LastIndexOf("."))
|
|
Dim Extension = WDDatei.aName.Substring(WDDatei.aName.LastIndexOf("."))
|
|
Dim tempFilename As String = Zielpfad & Filename & Extension
|
|
'Überprüfen ob File existiert
|
|
Do While IO.File.Exists(tempFilename) = True
|
|
tempFilename = Zielpfad & Filename & "_" & version & Extension
|
|
version = version + 1
|
|
Loop
|
|
clsLogger.AddDetailLog("Zieldateiname: " & tempFilename)
|
|
' den Dateiinhalt der neuen Datei zuweisen
|
|
ExportFileIO.aWMStream = oWMStream
|
|
ExportFileIO.bstrOriginalFileName = tempFilename
|
|
'Das eigentliche kopieren
|
|
ExportFileIO.ExportOriginal(True)
|
|
' close the windream file stream
|
|
oWMStream.Close()
|
|
WDDatei.Save()
|
|
WDDatei.unlock()
|
|
EXPORTED_FILENAME = tempFilename
|
|
clsLogger.Add(">> Datei erfolgreich nach '" & tempFilename & "' verschoben.", False, "clsDV Export_File")
|
|
aktfile_Exportresult = tempFilename
|
|
Return True
|
|
Catch ex As Exception
|
|
'bei einem Fehler einen Eintrag in der Logdatei machen
|
|
clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message, "clsDV.Export_File")
|
|
Return False
|
|
End Try
|
|
End Function
|
|
Public Shared Function Rename_File(WMFile As WMObject, konvention As String)
|
|
Try
|
|
clsLogger.AddDetailLog("Konvention: '" & konvention & "'")
|
|
|
|
'Regulären Ausdruck zum Auslesen der windream-Indexe definieren
|
|
Dim preg As String = "\[%{1}[a-zA-Z0-9\!\$\&\/\(\)\=\?\,\.\-\;\:_öÖüÜäÄ\#\'\+\*\~\{\}\@\€\<\>\ ]+]{1}"
|
|
' einen Regulären Ausdruck laden
|
|
Dim regulärerAusdruck As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex(preg)
|
|
' die Vorkommen im SQL-String auslesen
|
|
Dim reg_elemente As System.Text.RegularExpressions.MatchCollection = regulärerAusdruck.Matches(konvention)
|
|
Dim i As Integer = 0
|
|
' alle Vorkommen der windream-Indexe im SQL-String durchlaufen
|
|
For Each reg_element As System.Text.RegularExpressions.Match In reg_elemente
|
|
'die Zeichen [% und ] entfernen (liefert den wirklichen windream-Index)
|
|
Dim reg_element_Ohne_SZ As String = reg_element.Value.Replace("[%", "")
|
|
reg_element_Ohne_SZ = reg_element_Ohne_SZ.Replace("]", "")
|
|
clsLogger.AddDetailLog("Indexwert aus Index '" & reg_element_Ohne_SZ & "' auslesen....")
|
|
Dim wdIndexwert
|
|
'den Wert des Indexes für das aktuelle Dokument auslesen
|
|
wdIndexwert = WMFile.GetVariableValue(reg_element_Ohne_SZ)
|
|
If wdIndexwert Is Nothing = False Then
|
|
If Not wdIndexwert.GetType.ToString.Contains("System.Object") Then
|
|
clsLogger.AddDetailLog("Namenkonvention (" & i & ") " & konvention)
|
|
wdIndexwert = wdIndexwert.ToString.TrimEnd
|
|
wdIndexwert = wdIndexwert.ToString.TrimStart
|
|
clsLogger.AddDetailLog("Ausgelesener Indexwert = '" & wdIndexwert & "'")
|
|
konvention = konvention.Replace(reg_element.Value, wdIndexwert.ToString)
|
|
i += 1
|
|
Else
|
|
clsLogger.Add(">> Achtung gelesener Wert ist ein Vektorfeld - keine Umbenennung möglich ", False, "clsProfil.Profil_Durchlauf")
|
|
End If
|
|
End If
|
|
Next
|
|
Dim version As Integer = 2
|
|
Dim ZielPfad As String = Path.GetDirectoryName(aktfile_Exportresult)
|
|
clsLogger.AddDetailLog("ZielPfad: " & ZielPfad)
|
|
Dim Filename = konvention
|
|
Dim Extension = Path.GetExtension(aktfile_Exportresult)
|
|
clsLogger.AddDetailLog("Extension: " & Extension)
|
|
Dim tempFilename As String = ZielPfad & "\" & Filename & Extension
|
|
clsLogger.AddDetailLog("tempFilename: " & tempFilename)
|
|
'Überprüfen ob File existiert
|
|
Do While IO.File.Exists(tempFilename) = True
|
|
tempFilename = ZielPfad & "\" & Filename & "~" & version & Extension
|
|
version += 1
|
|
Loop
|
|
clsLogger.AddDetailLog("RenameFile - OLDFilename: " & aktfile_Exportresult & " - NEWFilename: " & Path.GetFileName(tempFilename))
|
|
My.Computer.FileSystem.RenameFile(aktfile_Exportresult, Path.GetFileName(tempFilename))
|
|
clsLogger.Add(">> Datei wurde erfolgreich umbenannt.", False, "clsProfil.RenameFile")
|
|
Return True
|
|
Catch ex As Exception
|
|
clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message, "clsProfil.RenameFile")
|
|
Return False
|
|
End Try
|
|
End Function
|
|
Public Shared Function Rename_File_Vektor(WMFile As WMObject, WMINDEX_NAME As String)
|
|
Try
|
|
Dim WMIndexwert
|
|
Dim ZielPfad As String = Path.GetDirectoryName(aktfile_Exportresult)
|
|
clsLogger.AddDetailLog("ZielPfad: " & ZielPfad)
|
|
Dim Extension = Path.GetExtension(aktfile_Exportresult)
|
|
clsLogger.AddDetailLog("Extension: " & Extension)
|
|
|
|
If WMINDEX_NAME.StartsWith("[%") Then
|
|
WMINDEX_NAME = WMINDEX_NAME.Replace("[%", "")
|
|
WMINDEX_NAME = WMINDEX_NAME.Replace("]", "")
|
|
End If
|
|
'den Wert des Indexes für das aktuelle Dokument auslesen
|
|
WMIndexwert = WMFile.GetVariableValue(WMINDEX_NAME)
|
|
If WMIndexwert.GetType.ToString.Contains("System.Object") Then
|
|
clsLogger.AddDetailLog("Rename_File_Vektor in Progress for index " & WMINDEX_NAME)
|
|
Dim anz As Integer = 1
|
|
Dim copybasefile As String
|
|
For Each WMvalue As Object In WMIndexwert
|
|
'Für jeden Value eine Datei erzeugen
|
|
Try
|
|
If WMvalue.ToString <> String.Empty Then
|
|
Dim tempFilename As String = ZielPfad & "\" & WMvalue & Extension
|
|
clsLogger.AddDetailLog("tempFilename: " & tempFilename)
|
|
If anz = 1 Then
|
|
clsLogger.AddDetailLog("RenameFile - OLDFilename: " & aktfile_Exportresult & " - NEWFilename: " & Path.GetFileName(tempFilename))
|
|
My.Computer.FileSystem.RenameFile(aktfile_Exportresult, Path.GetFileName(tempFilename))
|
|
copybasefile = tempFilename
|
|
Else
|
|
Dim version As Integer = 2
|
|
'Überprüfen ob File existiert
|
|
Do While IO.File.Exists(tempFilename) = True
|
|
tempFilename = ZielPfad & "\" & WMvalue & "~" & version & Extension
|
|
version += 1
|
|
Loop
|
|
File.Copy(copybasefile, tempFilename, True)
|
|
End If
|
|
anz += 1
|
|
|
|
End If
|
|
Catch ex As Exception
|
|
clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message, "clsDateiverarbeitung.ForEachWMvalue")
|
|
End Try
|
|
Next
|
|
Else
|
|
clsLogger.Add(">> Achtung WMIndex " & WMINDEX_NAME & " scheint kein Vektorfeld zu sein!", False, "clsDateiverarbeitung.Rename_File_Vektor")
|
|
Return False
|
|
End If
|
|
|
|
clsLogger.Add(">> Dateien wurde erfolgreich nach Vektorfeld erzeugt.", False, "clsDateiverarbeitung.Rename_File_Vektor")
|
|
Return True
|
|
Catch ex As Exception
|
|
clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message, "clsDateiverarbeitung.Rename_File_Vektor")
|
|
End Try
|
|
End Function
|
|
Public Shared Function RUN_ORACLE_COMMAND(WMFile As WMObject, OracleCS As String, OracleCommandRAW As String)
|
|
Try
|
|
Dim result = REGEX_REPLACE(WMFile, OracleCommandRAW)
|
|
If result = Nothing Then
|
|
Return False
|
|
End If
|
|
|
|
|
|
If clsDatatabase.ExecuteonOracleDb(OracleCS, result) = True Then
|
|
Return True
|
|
Else
|
|
Return False
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message, "RUN_ORACLE_COMMAND")
|
|
Return False
|
|
End Try
|
|
End Function
|
|
Public Shared Function RUN_MSSQL_COMMAND(WMFile As WMObject, MSSQLCS As String, SQLCommandRAW As String)
|
|
Try
|
|
Dim result = REGEX_REPLACE(WMFile, SQLCommandRAW)
|
|
If result = Nothing Then
|
|
Return False
|
|
End If
|
|
|
|
|
|
If clsDatatabase.ExecuteonMSSQL(MSSQLCS, result) = True Then
|
|
Return True
|
|
Else
|
|
Return False
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message, "RUN_MSSQL_COMMAND")
|
|
Return False
|
|
End Try
|
|
End Function
|
|
|
|
Private Shared Function REGEX_REPLACE(WMFile As WMObject, _STRING As String)
|
|
Try
|
|
' Regulären Ausdruck zum Auslesen der windream-Indexe definieren
|
|
Dim preg As String = "\[%{1}[a-zA-Z0-9\!\$\&\/\(\)\=\?\,\.\-\;\:_öÖüÜäÄ\#\'\+\*\~\{\}\@\€\<\>\ ]+]{1}"
|
|
' einen Regulären Ausdruck laden
|
|
Dim regulärerAusdruck As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex(preg)
|
|
' die Vorkommen im SQL-String auslesen
|
|
Dim reg_elemente As System.Text.RegularExpressions.MatchCollection = regulärerAusdruck.Matches(_STRING)
|
|
Dim i As Integer = 0
|
|
' alle Vorkommen der windream-Indexe im SQL-String durchlaufen
|
|
For Each reg_element As System.Text.RegularExpressions.Match In reg_elemente
|
|
' die Zeichen [% und ] entfernen (liefert den wirklichen windream-Index)
|
|
Dim reg_element_Ohne_SZ As String = reg_element.Value.Replace("[%", "")
|
|
reg_element_Ohne_SZ = reg_element_Ohne_SZ.Replace("]", "")
|
|
clsLogger.AddDetailLog("Indexwert aus Index/Variable '" & reg_element_Ohne_SZ & "' auslesen....")
|
|
If reg_element_Ohne_SZ = "EXPORTED_FILENAME" Then
|
|
If EXPORTED_FILENAME <> "" Then
|
|
_STRING = _STRING.Replace(reg_element.Value, EXPORTED_FILENAME)
|
|
End If
|
|
Else
|
|
Dim wdIndexwert
|
|
' den Wert des Indexes für das aktuelle Dokument auslesen
|
|
wdIndexwert = WMFile.GetVariableValue(reg_element_Ohne_SZ)
|
|
If wdIndexwert Is Nothing = False Then
|
|
If Not wdIndexwert.GetType.ToString.Contains("System.Object") Then
|
|
|
|
wdIndexwert = wdIndexwert.ToString.TrimEnd
|
|
wdIndexwert = wdIndexwert.ToString.TrimStart
|
|
clsLogger.AddDetailLog("Ausgelesener Indexwert = '" & wdIndexwert & "'")
|
|
_STRING = _STRING.Replace(reg_element.Value, wdIndexwert.ToString)
|
|
clsLogger.AddDetailLog("Namenkonvention (" & i & ") " & _STRING)
|
|
i += 1
|
|
Else
|
|
clsLogger.Add(">> Achtung gelesener Wert ist ein Vektorfeld - keine Umbenennung möglich ", False, "clsProfil.Profil_Durchlauf")
|
|
Return Nothing
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
|
|
Next
|
|
Return _STRING
|
|
Catch ex As Exception
|
|
clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message, "REGEX_REPLACE")
|
|
Return Nothing
|
|
End Try
|
|
End Function
|
|
|
|
End Class
|
|
|