This commit is contained in:
Digital Data - Marlon Schreiber
2018-11-07 15:11:52 +01:00
parent 844a423f7d
commit 24f052f5b5
88 changed files with 2833 additions and 159059 deletions

View File

@@ -3,12 +3,15 @@ Imports System.IO
Imports System.Net
Imports Newtonsoft.Json
Imports System.Text
Imports DigitalData.Modules.Logging
Public Class clsDateiverarbeitung
Private Shared Logger As NLog.Logger = NLog.LogManager.GetCurrentClassLogger
#Region "***** Variablen und Konstanten*****"
Public Shared _windream As New clsWindream_allgemein
Dim Logger As Logger
Private MyLoggerConf As LogConfig
#Region "***** Variablen und Konstanten*****"
Dim _windream As clsWindream_allgemein
Dim _database As clsDatabase
Public Shared pr_DTPROFIL_REGELN As DataTable
Public Shared aktfile_Exportresult
@@ -26,11 +29,17 @@ Public Class clsDateiverarbeitung
Const WMObjectStreamOpenModeReadWrite = 2
Const WMObjectEditModeFileSystem = &H15
#End Region
Public Shared Function InitProfilData()
Public Sub New(MyLogger As LogConfig)
MyLoggerConf = MyLogger
Logger = MyLogger.GetLogger()
_windream = New clsWindream_allgemein(MyLogger)
_database = New clsDatabase(MyLogger, clsCURRENT.SQLSERVER_CS)
End Sub
Public Function InitProfilData()
Try
pr_DTPROFIL_REGELN = Nothing
' Profildaten der Klasse mitteilen
Logger.Info("InitProfilData Profildaten zugewiesen....")
Logger.Debug("InitProfilData Profildaten zugewiesen....")
Return True
Catch ex As Exception
Logger.Error(ex)
@@ -38,8 +47,83 @@ Public Class clsDateiverarbeitung
Return False
End Try
End Function
Public Function Check_File_job(WMdok As WMObject, FileJobType As String, String1 As String, String2 As String, WMObjekttyp As String, windream_index As clsWindream_Index)
Try
Select Case FileJobType.ToLower
Case "Set Index".ToLower
Try
'Überprüfen ob Value bereits gesetzt wurde?
Dim oidxName As String = String1
Dim oidxvalue As String = String2
If oidxvalue.Contains("[%DATETIME]") Then
oidxvalue = oidxvalue.Replace("[%DATETIME]", Now.ToString)
End If
oidxvalue = REGEX_REPLACE(WMdok, oidxvalue)
Logger.Debug($"Index '{oidxName}' shall be set with value '{oidxvalue}'")
Dim oarrIndex() As String
ReDim Preserve oarrIndex(0)
oarrIndex(0) = oidxName
Logger.Debug("...nach arrIndex")
Dim oArrValue() As String
Dim oAktvalue As Object
oAktvalue = WMdok.GetVariableValue(oidxName)
Logger.Debug("...nach aktValue zuweisen..")
Dim oWmtype = clsWindream_allgemein.GetTypeOfIndexAsIntByName(oidxName)
Dim oIsVektor As Boolean = False
Select Case oWmtype
Case 4097
oIsVektor = True
Case 4098
oIsVektor = True
Case 4099
oIsVektor = True
Case 4101
oIsVektor = True
Case 4103
oIsVektor = True
Case 4107
oIsVektor = True
Case 36865
oIsVektor = True
End Select
If oIsVektor = False Then
ReDim Preserve oArrValue(0)
oArrValue(0) = oidxvalue
Else
Dim oMyArray()
ReDim oMyArray(0)
oMyArray(0) = oidxvalue
Dim oVektorArray()
oVektorArray = Return_VektorArray(WMdok, oidxName, oMyArray, True)
If oVektorArray Is Nothing = False Then
ReDim oArrValue(oVektorArray.Length - 1)
Array.Copy(oVektorArray, oArrValue, oVektorArray.Length)
End If
End If
If oArrValue Is Nothing = False Then
' MsgBox("now indexing with: " & idxvalue)
windream_index.RunIndexing(WMdok, oarrIndex, oArrValue, WMObjekttyp)
Else
Logger.Warn("arrValue is nothing - keine Indexierung")
End If
Catch ex As Exception
Logger.Error(ex)
'clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message, "clsProfil.Profil_Durchlauf(SetIndex)")
End Try
End Select
Catch ex As Exception
Logger.Error(ex)
Return False
End Try
End Function
'Kopiert die übergebene Datei in den Zielpfad
Public Shared Function Export_File(WDDatei As WMObject, Zielpfad As String)
Public Function Export_File(WDDatei As WMObject, Zielpfad As String)
Try
If Not Zielpfad.EndsWith("\") Then
Zielpfad = Zielpfad & "\"
@@ -47,11 +131,11 @@ Public Class clsDateiverarbeitung
Logger.Info("Verarbeitung von Datei: " & WDDatei.aName)
'Die Quelle zusammensetzen
Logger.Info("PFAD: " & clsCURRENT.WDLAUFWERK & ":" & WDDatei.aPath & "\" & WDDatei.aName)
Logger.Debug("PFAD: " & clsCURRENT.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
Logger.Info("ExportFileIO erzeugt.....")
Logger.Debug("ExportFileIO erzeugt.....")
' Stream Interface bereitstellen
WDDatei.LockFor(WMObjectEditModeFileSystem)
Try
@@ -75,7 +159,7 @@ Public Class clsDateiverarbeitung
tempFilename = Zielpfad & Filename & "_" & version & Extension
version = version + 1
Loop
Logger.Info("Zieldateiname: " & tempFilename)
Logger.Debug("Zieldateiname: " & tempFilename)
' den Dateiinhalt der neuen Datei zuweisen
ExportFileIO.aWMStream = oWMStream
ExportFileIO.bstrOriginalFileName = tempFilename
@@ -96,9 +180,9 @@ Public Class clsDateiverarbeitung
Return False
End Try
End Function
Public Shared Function Rename_File(WMFile As WMObject, konvention As String)
Public Function Rename_File(WMFile As WMObject, konvention As String)
Try
Logger.Info("Konvention: '" & konvention & "'")
Logger.Debug("Konvention: '" & konvention & "'")
'Regulären Ausdruck zum Auslesen der windream-Indexe definieren
Dim preg As String = "\[%{1}[a-zA-Z0-9\!\$\&\/\(\)\=\?\,\.\-\;\:_öÖüÜäÄ\#\'\+\*\~\{\}\@\€\<\>\ ]+]{1}"
@@ -112,16 +196,16 @@ Public Class clsDateiverarbeitung
'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("]", "")
Logger.Info("Indexwert aus Index '" & reg_element_Ohne_SZ & "' auslesen....")
Logger.Debug("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
Logger.Info("Namenkonvention (" & i & ") " & konvention)
Logger.Debug("Namenkonvention (" & i & ") " & konvention)
wdIndexwert = wdIndexwert.ToString.TrimEnd
wdIndexwert = wdIndexwert.ToString.TrimStart
Logger.Info("Ausgelesener Indexwert = '" & wdIndexwert & "'")
Logger.Debug("Ausgelesener Indexwert = '" & wdIndexwert & "'")
konvention = konvention.Replace(reg_element.Value, wdIndexwert.ToString)
i += 1
Else
@@ -131,18 +215,18 @@ Public Class clsDateiverarbeitung
Next
Dim version As Integer = 2
Dim ZielPfad As String = Path.GetDirectoryName(aktfile_Exportresult)
Logger.Info("ZielPfad: " & ZielPfad)
Logger.Debug("ZielPfad: " & ZielPfad)
Dim Filename = konvention
Dim Extension = Path.GetExtension(aktfile_Exportresult)
Logger.Info("Extension: " & Extension)
Logger.Debug("Extension: " & Extension)
Dim tempFilename As String = ZielPfad & "\" & Filename & Extension
Logger.Info("tempFilename: " & tempFilename)
Logger.Debug("tempFilename: " & tempFilename)
'Überprüfen ob File existiert
Do While IO.File.Exists(tempFilename) = True
tempFilename = ZielPfad & "\" & Filename & "~" & version & Extension
version += 1
Loop
Logger.Info("RenameFile - OLDFilename: " & aktfile_Exportresult & " - NEWFilename: " & Path.GetFileName(tempFilename))
Logger.Debug("RenameFile - OLDFilename: " & aktfile_Exportresult & " - NEWFilename: " & Path.GetFileName(tempFilename))
My.Computer.FileSystem.RenameFile(aktfile_Exportresult, Path.GetFileName(tempFilename))
Logger.Info("Datei wurde erfolgreich umbenannt.")
Return True
@@ -152,13 +236,13 @@ Public Class clsDateiverarbeitung
Return False
End Try
End Function
Public Shared Function Rename_File_Vektor(WMFile As WMObject, WMINDEX_NAME As String)
Public Function Rename_File_Vektor(WMFile As WMObject, WMINDEX_NAME As String)
Try
Dim WMIndexwert
Dim ZielPfad As String = Path.GetDirectoryName(aktfile_Exportresult)
Logger.Info("ZielPfad: " & ZielPfad)
Logger.Debug("ZielPfad: " & ZielPfad)
Dim Extension = Path.GetExtension(aktfile_Exportresult)
Logger.Info("Extension: " & Extension)
Logger.Debug("Extension: " & Extension)
If WMINDEX_NAME.StartsWith("[%") Then
WMINDEX_NAME = WMINDEX_NAME.Replace("[%", "")
@@ -167,7 +251,7 @@ Public Class clsDateiverarbeitung
'den Wert des Indexes für das aktuelle Dokument auslesen
WMIndexwert = WMFile.GetVariableValue(WMINDEX_NAME)
If WMIndexwert.GetType.ToString.Contains("System.Object") Then
Logger.Info("Rename_File_Vektor in Progress for index " & WMINDEX_NAME)
Logger.Debug("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
@@ -175,9 +259,9 @@ Public Class clsDateiverarbeitung
Try
If WMvalue.ToString <> String.Empty Then
Dim tempFilename As String = ZielPfad & "\" & WMvalue & Extension
Logger.Info("tempFilename: " & tempFilename)
Logger.Debug("tempFilename: " & tempFilename)
If anz = 1 Then
Logger.Info("RenameFile - OLDFilename: " & aktfile_Exportresult & " - NEWFilename: " & Path.GetFileName(tempFilename))
Logger.Debug("RenameFile - OLDFilename: " & aktfile_Exportresult & " - NEWFilename: " & Path.GetFileName(tempFilename))
My.Computer.FileSystem.RenameFile(aktfile_Exportresult, Path.GetFileName(tempFilename))
copybasefile = tempFilename
Else
@@ -210,14 +294,14 @@ Public Class clsDateiverarbeitung
End Try
End Function
Private Shared Function GetWMAPILink(docId As String, userId As String)
Private Function GetWMAPILink(docId As String, userId As String)
Dim hostname = "http://documents.mylogitservices.syncreon.com:8100"
Dim link As String = $"{hostname}/WMWebApi/windream.web.api/DigitalData/BNSDownload?docId={docId}&userId={userId}"
Return link
End Function
Private Shared Function GetDocTypeCategory(docType As String)
Private Function GetDocTypeCategory(docType As String)
Select Case docType
Case "Abliefernachweis"
Return 5
@@ -234,8 +318,9 @@ Public Class clsDateiverarbeitung
''' </summary>
''' <param name="WMFile">Das WMObject, dass das aktuelle Dokument repräsentiert</param>
''' <param name="userId">Die eindeutige Benutzer Kennung für die Authentifizierung in Windream</param>
Public Shared Function BNSjsonDownload(WMFile As WMObject, userId As String, apiAddress As String)
Public Function BNSjsonDownload(WMFile As WMObject, userId As String, apiAddress As String)
Try
Logger.Info("handling BNSjsonDownload.....")
' Indizes für das aktuelle Dokument auslesen
Dim SENDUNGNR = WMFile.GetVariableValue("Sendungnr")
Dim DOKID = WMFile.GetVariableValue("Dokument-ID")
@@ -246,7 +331,7 @@ Public Class clsDateiverarbeitung
Dim link As String = GetWMAPILink(DOKID, userId)
' JSON Payload erstellen und serialisieren
Dim doc As New BNSDocument()
Dim doc As New BNSDocument(MyLoggerConf)
doc.Bemerkung = DOKART
'Dokumente sollen unbegrenzt gültig sein
'doc.Ivalidfrom = now
@@ -269,8 +354,8 @@ Public Class clsDateiverarbeitung
Dim geschaeftsId = SENDUNGNR
Dim url As String = $"http://{apiAddress}/onwebui/api/Customer/{mandatenId}/{geschaeftsObjekt}/{geschaeftsId}/dokument"
Logger.Info($">> Generiertes JSON: {json}")
Logger.Info($">> Creating WebRequest for {url}")
' Logger.Debug($">> Generiertes JSON: {json}")
Logger.Debug($">> Creating WebRequest for {url}")
Dim req As HttpWebRequest = WebRequest.CreateHttp(url)
@@ -284,8 +369,8 @@ Public Class clsDateiverarbeitung
reqStream.Write(bytes, 0, bytes.Length)
reqStream.Close()
Logger.Info($">> Datei wird hochgeladen... docId: {DOKID}, dokart: {DOKART}, userId: {userId}")
Logger.Info($">> Upload URL: {url}")
'Logger.Debug($">> Datei wird hochgeladen... docId: {DOKID}, dokart: {DOKART}, userId: {userId}")
'Logger.Debug($">> Upload URL: {url}")
Using res As HttpWebResponse = req.GetResponse()
Dim code As HttpStatusCode = res.StatusCode
@@ -293,19 +378,19 @@ Public Class clsDateiverarbeitung
' Status 201 Created bedeutet: Alles okay!
If code = HttpStatusCode.Created Then
Logger.Info($">> Datei geschrieben! docId: {DOKID}, dokart: {DOKART}, userId: {userId}")
Logger.Info($"File has been uploaded: docId: {DOKID}, dokart: {DOKART}, userId: {userId}")
Else
Throw New Exception($"Server Error (HTTP {code}: {text})")
Logger.Warn($"Server Error (HTTP {code}: {text})")
End If
End Using
Return True
Catch ex As Exception
Logger.Warn($"Unhandled Exception in BNSjsonDownload - Profile ({clsCURRENT._Profilname}) {ex.Message}")
Logger.Error(ex)
Return True
End Try
End Function
Public Shared Function RUN_ORACLE_COMMAND(WMFile As WMObject, OracleCS As String, OracleCommandRAW As String)
Public Function RUN_ORACLE_COMMAND(WMFile As WMObject, OracleCS As String, OracleCommandRAW As String)
Try
Dim result = REGEX_REPLACE(WMFile, OracleCommandRAW)
If result = Nothing Then
@@ -313,7 +398,7 @@ Public Class clsDateiverarbeitung
End If
If clsDatatabase.ExecuteonOracleDb(OracleCS, result) = True Then
If _database.ExecuteonOracleDb(OracleCS, result) = True Then
Return True
Else
Return False
@@ -325,7 +410,7 @@ Public Class clsDateiverarbeitung
Return False
End Try
End Function
Public Shared Function RUN_MSSQL_COMMAND(WMFile As WMObject, MSSQLCS As String, SQLCommandRAW As String)
Public Function RUN_MSSQL_COMMAND(WMFile As WMObject, MSSQLCS As String, SQLCommandRAW As String)
Try
Dim result = REGEX_REPLACE(WMFile, SQLCommandRAW)
If result = Nothing Then
@@ -333,7 +418,7 @@ Public Class clsDateiverarbeitung
End If
If clsDatatabase.ExecuteonMSSQL(MSSQLCS, result) = True Then
If _database.ExecuteonMSSQL(MSSQLCS, result) = True Then
Return True
Else
Return False
@@ -345,10 +430,112 @@ Public Class clsDateiverarbeitung
Return False
End Try
End Function
Public Shared Function REGEX_REPLACE(WMFile As WMObject, _STRING As String)
Private Function Return_VektorArray(ByVal oDocument As WMObject, vktIndexName As String, NIIndexe As Object, CheckDuplikat As Boolean)
Try
Logger.Info("REGEX_String before replacing: '" & _STRING & "'")
Dim missing As Boolean = False
Dim Anzahl As Integer = 0
Dim ValueArray()
'Jeden Wert des Vektorfeldes durchlaufen
Dim wertWD = oDocument.GetVariableValue(vktIndexName)
If wertWD Is Nothing = False Then
'Nochmals prüfen ob wirklich Array
If wertWD.GetType.ToString.Contains("System.Object") Then
'Keine Duplikatprüfung also einfach neues Array füllen
If CheckDuplikat = False Then
For Each value As Object In wertWD
'Das Array anpassen
ReDim Preserve ValueArray(Anzahl)
'Den Wert im Array speichern
ValueArray(Anzahl) = value.ToString
Anzahl += 1
Next
'Und jetzt den/die Neuen Wert(e) anfügen
For Each NewValue As Object In NIIndexe
If NewValue Is Nothing = False Then
'Das Array anpassen
ReDim Preserve ValueArray(Anzahl)
'Den Wert im Array speichern
ValueArray(Anzahl) = NewValue.ToString
Anzahl += 1
End If
Next
Else
Logger.Debug("Duplikatprüfung soll durchgeführt werden.")
'Duplikat Prüfung an, also nur anhängen wenn Wert <>
For Each WDValue As Object In wertWD
If WDValue Is Nothing = False Then
'Erst einmal die ALten Werte schreiben
ReDim Preserve ValueArray(Anzahl)
'Den Wert im Array speichern
ValueArray(Anzahl) = WDValue.ToString
Logger.Debug("Value (" & Anzahl & ") " & WDValue.ToString)
Anzahl += 1
End If
Next
'Jetzt die Neuen Werte auf Duplikate überprüfen
For Each NewValue As Object In NIIndexe
If NewValue Is Nothing = False Then
If ValueArray.Contains(NewValue) = False Then
Logger.Debug("New Value (" & Anzahl & ") " & NewValue.ToString)
'Das Array anpassen
ReDim Preserve ValueArray(Anzahl)
'Den Wert im Array speichern
ValueArray(Anzahl) = NewValue.ToString
Anzahl += 1
Else
Logger.Debug("Value '" & NewValue.ToString & "' bereits in Vektorfeld enthalten")
End If
End If
Next
End If
End If
Else
Logger.Debug("Vektorfeld ist noch leer....")
'Den/die Neuen Wert(e) anfügen
For Each NewValue As Object In NIIndexe
If NewValue Is Nothing = False Then
If CheckDuplikat = True Then
If ValueArray Is Nothing = False Then
If ValueArray.Contains(NewValue) = False Then
'Das Array anpassen
ReDim Preserve ValueArray(Anzahl)
'Den Wert im Array speichern
ValueArray(Anzahl) = NewValue.ToString
Anzahl += 1
Else
Logger.Debug("Value '" & NewValue.ToString & "' bereits in Array enthalten")
End If
Else 'Dererste Wert, also hinzufügen
'Das Array anpassen
ReDim Preserve ValueArray(Anzahl)
'Den Wert im Array speichern
ValueArray(Anzahl) = NewValue.ToString
Anzahl += 1
End If
Else
'Das Array anpassen
ReDim Preserve ValueArray(Anzahl)
'Den Wert im Array speichern
ValueArray(Anzahl) = NewValue.ToString
Anzahl += 1
End If
End If
Next
End If
Logger.Debug("Return ValueArray: length " & ValueArray.Length)
Return ValueArray
Catch ex As Exception
Logger.Error(ex)
Return Nothing
End Try
End Function
Public Function REGEX_REPLACE(WMFile As WMObject, _STRING As String)
Try
Logger.Debug("REGEX_String before replacing: '" & _STRING & "'")
' Regulären Ausdruck zum Auslesen der windream-Indexe definieren
Dim preg As String = "\[%{1}[a-zA-Z0-9\!\$\&\/\(\)\=\?\,\.\-\;\:_öÖüÜäÄ\#\'\+\*\~\{\}\@\€\<\>\ ]+]{1}"
' einen Regulären Ausdruck laden
@@ -361,7 +548,7 @@ Public Class clsDateiverarbeitung
' 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("]", "")
Logger.Info("read indexvalue from index '" & reg_element_Ohne_SZ & "'....")
Logger.Debug("read indexvalue from index '" & reg_element_Ohne_SZ & "'....")
If reg_element_Ohne_SZ = "EXPORTED_FILENAME" Then
If clsCURRENT.EXPORTED_FILENAME <> "" Then
_STRING = _STRING.Replace(reg_element.Value, clsCURRENT.EXPORTED_FILENAME)
@@ -377,14 +564,14 @@ Public Class clsDateiverarbeitung
If Not wdIndexwert.GetType.ToString.Contains("System.Object") Then
wdIndexwert = wdIndexwert.ToString.TrimEnd
wdIndexwert = wdIndexwert.ToString.TrimStart
Logger.Info("indexvalue read is: '" & wdIndexwert & "'")
Logger.Debug("indexvalue read is: '" & wdIndexwert & "'")
_STRING = _STRING.Replace(reg_element.Value, wdIndexwert.ToString)
Logger.Info("REGEX_String (" & i & ") " & _STRING)
Logger.Debug("REGEX_String (" & i & ") " & _STRING)
i += 1
Else
Logger.Warn("Attention: WMIndex is an vectorfield - seperation of values via ;")
Logger.Info("wdIndexValue is System.Object....")
Logger.Info("trying to seperate via ,....")
Logger.Debug("wdIndexValue is System.Object....")
Logger.Debug("trying to seperate via ,....")
Dim vector_result As String = ""
For Each WMvalue As Object In wdIndexwert
Dim x As Integer = 0
@@ -400,7 +587,7 @@ Public Class clsDateiverarbeitung
End If
Next
_STRING = _STRING.Replace(reg_element.Value, vector_result.ToString)
Logger.Info("REGEX_String after vector-for-each (" & i & ") " & _STRING)
Logger.Debug("REGEX_String after vector-for-each (" & i & ") " & _STRING)
End If
Else
Logger.Warn("Attention: Indexvalue is NOTHING, standardvalue '0' will be used", False, "clsDateiverarbeitung.REGEX_REPLACE")
@@ -419,6 +606,7 @@ Public Class clsDateiverarbeitung
End Function
Public Class BNSDocument
Dim Logger As Logger
Public Doksourcetype As Integer = 3
Public Pfad As String
'Dokumente sollen unbegrenzt gültig sein
@@ -429,8 +617,10 @@ Public Class clsDateiverarbeitung
Public Fremsysid As Integer = 1
Public Kategorien As List(Of BNSDocumentCategory)
Public Dateiname As String
Public Sub New(MyLogger As LogConfig)
Logger = MyLogger.GetLogger()
End Sub
End Class
Public Class BNSDocumentCategory
Public Id As Integer
End Class