Imports WINDREAMLib Imports System.IO Imports System.Net Imports Newtonsoft.Json Imports System.Text Imports DigitalData.Modules.Logging Imports System.Text.RegularExpressions Public Class clsDateiverarbeitung 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 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 Sub New(MyLogger As LogConfig) MyLoggerConf = MyLogger Logger = MyLogger.GetLogger() _windream = New clsWindream_allgemein(MyLogger) _database = New clsDatabase(MyLogger) End Sub Public Function InitProfilData() Try pr_DTPROFIL_REGELN = Nothing ' Profildaten der Klasse mitteilen Logger.Debug("InitProfilData Profildaten zugewiesen....") Return True Catch ex As Exception Logger.Error(ex) 'clsLogger.AddError(ex.Message, "cls_DV.InitProfilData") 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 Private Function CleanInput(strIn As String) As String ' Replace invalid characters with empty strings. Try Return Regex.Replace(strIn, "[^\w\.@-]", "") ' If we timeout when replacing invalid characters, ' we should return String.Empty. Catch ex As Exception Logger.Error(ex) Return String.Empty End Try End Function Public Function Export_WMFile2HDD(oWMFile As WMObject, MyExportpath As String) Try If Not MyExportpath.EndsWith("\") Then MyExportpath &= "\" End If Try Logger.Info("Working on WMFile: " & oWMFile.aName) Catch ex As Exception Logger.Error(ex) Return False End Try Dim ExportFileIO = New WMOTOOLLib.WMFileIO ' CreateObject("WMOTOOLLib.WMFileIO") ' New WMOTOOLLib.WMFileIO Logger.Debug("ExportFileIO created...") Dim oWMStream = oWMFile.OpenStream("BinaryObject", 1) '### VERSIONIERUNG ### Dim version As Integer = 2 'Dim Stammname As String = System.IO.Path.GetFileNameWithoutExtension(Quelle) Dim oFilename = oWMFile.aName.Substring(0, oWMFile.aName.LastIndexOf(".")) Dim oExtension = oWMFile.aName.Substring(oWMFile.aName.LastIndexOf(".")) Dim oTempFilename As String = MyExportpath & oFilename & oExtension 'Überprüfen ob File existiert Do While IO.File.Exists(oTempFilename) = True oTempFilename = MyExportpath & oFilename & "_" & version & oExtension version = version + 1 Loop Logger.Debug("Exportfilename is: " & oTempFilename) ' den Dateiinhalt der neuen Datei zuweisen ExportFileIO.bstrOriginalFileName = oTempFilename ExportFileIO.aWMStream = oWMStream 'Das eigentliche kopieren ExportFileIO.ExportOriginal(True) ' close the windream file stream oWMStream.Close() If File.Exists(oTempFilename) Then clsCURRENT.EXPORTED_FILENAME = oTempFilename Logger.Info($"File Export to HDD [{clsCURRENT.EXPORTED_FILENAME}]was successfull (File.Exists = True)!") aktfile_Exportresult = clsCURRENT.EXPORTED_FILENAME clsCURRENT.TEMP_FILES.Add(clsCURRENT.EXPORTED_FILENAME) Logger.Debug("FileInfo Added to variables...") Return True Else Logger.Warn($"Export not successfull or File.Exists = false Export: [{oTempFilename}]") Return False End If Catch ex As Exception Logger.Error(ex) Logger.Info("Unexpected error in Export_WMFile: " & ex.Message) Return False End Try End Function 'Kopiert die übergebene Datei in den Zielpfad 'Public Function Export_File(oWMFile As WMObject, oZielpfad As String) ' Try ' If Not oZielpfad.EndsWith("\") Then ' oZielpfad = oZielpfad & "\" ' End If ' Dim oNewFilename As String ' Logger.Info("Verarbeitung von Datei: " & oWMFile.aName) ' oNewFilename = CleanInput(oWMFile.aName) ' 'Die Quelle zusammensetzen ' Logger.Debug("PFAD: " & clsCURRENT.WDLAUFWERK & ":" & oWMFile.aPath & "\" & oWMFile.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.Debug("ExportFileIO erzeugt.....") ' ' Stream Interface bereitstellen ' oWMFile.LockFor(WMObjectEditModeFileSystem) ' Try ' If Not oWMFile.aLocked Then ' oWMFile.lock() ' End If ' Catch ex As Exception ' Logger.Error(ex) 'clsLogger.AddError("Unvorhergesehener Fehler beim Lock-Vorgang: " & ex.Message, "clsDV.Export_File") ' Return False ' End Try ' Dim oWMStream = oWMFile.OpenStream("BinaryObject", WMObjectStreamOpenModeReadWrite) ' '### VERSIONIERUNG ### ' Dim version As Integer = 2 ' 'Dim Stammname As String = System.IO.Path.GetFileNameWithoutExtension(Quelle) ' Dim oFilename = oWMFile.aName.Substring(0, oWMFile.aName.LastIndexOf(".")) ' Dim oExtension = oWMFile.aName.Substring(oWMFile.aName.LastIndexOf(".")) ' Dim oTempFilename As String = oZielpfad & oFilename & oExtension ' 'Überprüfen ob File existiert ' Do While IO.File.Exists(oTempFilename) = True ' oTempFilename = oZielpfad & oFilename & "_" & version & oExtension ' version = version + 1 ' Loop ' Logger.Debug("Zieldateiname: " & oTempFilename) ' ' den Dateiinhalt der neuen Datei zuweisen ' ExportFileIO.aWMStream = oWMStream ' ExportFileIO.bstrOriginalFileName = oTempFilename ' 'Das eigentliche kopieren ' ExportFileIO.ExportOriginal(True) ' ' close the windream file stream ' oWMStream.Close() ' oWMFile.Save() ' oWMFile.unlock() ' clsCURRENT.EXPORTED_FILENAME = oTempFilename ' Logger.Info("Datei erfolgreich nach '" & oTempFilename & "' kopiert.") ' aktfile_Exportresult = oTempFilename ' clsCURRENT.TEMP_FILES.Add(oTempFilename) ' Return True ' Catch ex As Exception ' 'bei einem Fehler einen Eintrag in der Logdatei machen ' Logger.Warn($"Unexpected in Export-File: [{oWMFile.aName}]...") ' Logger.Error(ex) ' Return False ' End Try 'End Function Public Function Rename_File(WMFile As WMObject, konvention As String) Try Logger.Debug("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("]", "") 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.Debug("Namenkonvention (" & i & ") " & konvention) wdIndexwert = wdIndexwert.ToString.TrimEnd wdIndexwert = wdIndexwert.ToString.TrimStart Logger.Debug("Ausgelesener Indexwert = '" & wdIndexwert & "'") konvention = konvention.Replace(reg_element.Value, wdIndexwert.ToString) i += 1 Else Logger.Warn("Achtung gelesener Wert ist ein Vektorfeld - keine Umbenennung möglich ") End If End If Next Dim version As Integer = 2 Dim ZielPfad As String = Path.GetDirectoryName(aktfile_Exportresult) Logger.Debug("ZielPfad: " & ZielPfad) Dim Filename = konvention Dim Extension = Path.GetExtension(aktfile_Exportresult) Logger.Debug("Extension: " & Extension) Dim tempFilename As String = ZielPfad & "\" & Filename & Extension 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.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 Catch ex As Exception Logger.Error(ex) Return False End Try End Function Public Function Rename_File_Vektor(WMFile As WMObject, WMINDEX_NAME As String) Try Dim WMIndexwert Dim ZielPfad As String = Path.GetDirectoryName(aktfile_Exportresult) Logger.Debug("ZielPfad: " & ZielPfad) Dim Extension = Path.GetExtension(aktfile_Exportresult) Logger.Debug("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 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 'Für jeden Value eine Datei erzeugen Try If WMvalue.ToString <> String.Empty Then Dim tempFilename As String = ZielPfad & "\" & WMvalue & Extension Logger.Debug("tempFilename: " & tempFilename) If anz = 1 Then Logger.Debug("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 Logger.Error(ex) ' End Try Next Else Logger.Warn("Achtung WMIndex " & WMINDEX_NAME & " scheint kein Vektorfeld zu sein!") Return False End If Logger.Info("Dateien wurde erfolgreich nach Vektorfeld erzeugt.") Return True Catch ex As Exception Logger.Error(ex) End Try End Function 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 Function GetDocTypeCategory(docType As String) Select Case docType Case "Abliefernachweis" Return 5 Case "Begleitdokument" Return 6 Case Else Return 0 End Select End Function ''' ''' Generiert einen Link für BNS und fügt das Dokument WMFile ''' ins BNS ein ''' ''' Das WMObject, dass das aktuelle Dokument repräsentiert ''' Die eindeutige Benutzer Kennung für die Authentifizierung in Windream Public Function BNSjsonDownload(WMFile As WMObject, userId As String, apiAddress As String) Dim url 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") Dim DOKART = WMFile.GetVariableValue("Dokumentart") Dim now As DateTime = DateTime.Now ' Download Link für Dokument erstellen Dim link As String = GetWMAPILink(DOKID, userId) ' JSON Payload erstellen und serialisieren Dim doc As New BNSDocument(MyLoggerConf) doc.Bemerkung = DOKART 'Dokumente sollen unbegrenzt gültig sein 'doc.Ivalidfrom = now 'doc.Ivaliduntil = now.AddDays(30) doc.Pfad = link doc.Dateiname = WMFile.aName doc.Kategorien = New List(Of BNSDocumentCategory) From { New BNSDocumentCategory With {.Id = GetDocTypeCategory(DOKART)} } Dim json As String = JsonConvert.SerializeObject(doc, Formatting.Indented) Dim bytes As Byte() = Encoding.Default.GetBytes(json) ' HTTP Request machen ' Mandanten ID ist Standartmäßig 1 Dim mandatenId As Integer = 1 ' Für Tests auf Sendung gesetzt, später sollte dieser String konfigurierbar sein Dim geschaeftsObjekt = "Sendung" ' Für Tests wird hier die Sendungsnummer verwendet, später hängt der verwendete Index von 'geschaeftsObjekt' ab Dim geschaeftsId = SENDUNGNR url = $"https://{apiAddress}/onwebui/api/Customer/{mandatenId}/{geschaeftsObjekt}/{geschaeftsId}/dokument" ' Logger.Debug($">> Generiertes JSON: {json}") Logger.Debug($">> Creating WebRequest for {url}") Dim req As HttpWebRequest Try req = WebRequest.Create(url) Catch ex As Exception Logger.Warn($"Unhandled Exception in BNSjsonDownload - CreatingWebRequest ({url}) - Profile ({clsCURRENT._Profilname}) {ex.Message}") Logger.Error(ex) Return False End Try req.Method = "POST" req.ContentType = "application/json" req.ContentLength = bytes.Length req.Timeout = 3000 req.ServicePoint.Expect100Continue = False Dim reqStream As Stream Try reqStream = req.GetRequestStream() Catch ex As Exception Logger.Warn($"Unhandled Exception in BNSjsonDownload - GetRequestStream ({url}) - Profile ({clsCURRENT._Profilname}) {ex.Message}") Logger.Error(ex) Return False End Try reqStream.Write(bytes, 0, bytes.Length) reqStream.Close() 'Logger.Debug($">> Datei wird hochgeladen... docId: {DOKID}, dokart: {DOKART}, userId: {userId}") 'Logger.Debug($">> Upload URL: {url}") Try Using res As HttpWebResponse = req.GetResponse() Dim code As HttpStatusCode = res.StatusCode Dim text As String = res.StatusDescription ' Status 201 Created bedeutet: Alles okay! If code = HttpStatusCode.Created Then Logger.Info($"File has been uploaded: docId: {DOKID}, dokart: {DOKART}, userId: {userId}") Else Logger.Warn($"Server Error (HTTP {code}: {text})") End If End Using Catch ex As Exception Logger.Warn($"Unhandled Exception in BNSjsonDownload - GetResponse ({url}) - Profile ({clsCURRENT._Profilname}) {ex.Message}") Logger.Error(ex) Return False End Try Return True Catch ex As Exception Logger.Warn($"Unhandled Exception in BNSjsonDownload - Url ({url}) - Profile ({clsCURRENT._Profilname}) {ex.Message}") Logger.Error(ex) Return False End Try End Function 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 Return False ElseIf result.ToString.Contains("[%") Then Logger.Warn($"Replace Function OracleCommandRAW did not match all patterns: {result.ToString}") Return False End If If _database.ExecuteonOracleDb(OracleCS, result) = True Then Return True Else Return False End If Catch ex As Exception Logger.Error(ex) Return False End Try End Function 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 Return False ElseIf result.ToString.Contains("[%") Then Logger.Warn($"Replace Function SQLCommandRAW did not match all patterns: {result.ToString}") Return False End If If _database.ExecuteonMSSQL(MSSQLCS, result) = True Then Return True Else Return False End If Catch ex As Exception Logger.Error(ex) Return False End Try End Function Private Function Return_VektorArray(ByVal oDocument As WMObject, vktIndexName As String, NIIndexe As Object, CheckDuplikat As Boolean) Try 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 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("]", "") 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) End If ElseIf reg_element_Ohne_SZ = "ENV_USERNAME" Then _STRING = _STRING.Replace(reg_element.Value, Environment.UserName) 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 Logger.Debug("indexvalue read is: '" & wdIndexwert & "'") _STRING = _STRING.Replace(reg_element.Value, wdIndexwert.ToString) Logger.Debug("REGEX_String (" & i & ") " & _STRING) i += 1 Else Logger.Warn("Attention: WMIndex is an vectorfield - seperation of values 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 If WMvalue.ToString <> String.Empty Then WMvalue = WMvalue.ToString.TrimEnd WMvalue = WMvalue.ToString.TrimStart If vector_result = "" Then vector_result = WMvalue Else vector_result = vector_result & ";" & WMvalue End If x += 1 End If Next _STRING = _STRING.Replace(reg_element.Value, vector_result.ToString) Logger.Debug("REGEX_String after vector-for-each (" & i & ") " & _STRING) End If Else Logger.Info($"Attention: Indexvalue for Index [{reg_element_Ohne_SZ}]is NOTHING, standardvalue '0' will be used - clsDateiverarbeitung.REGEX_REPLACE") _STRING = _STRING.Replace(reg_element.Value, "0") End If End If Next Return _STRING Catch ex As Exception Logger.Error(ex) Return Nothing End Try End Function Public Class BNSDocument Dim Logger As Logger Public Doksourcetype As Integer = 3 Public Pfad As String 'Dokumente sollen unbegrenzt gültig sein 'Public Ivalidfrom As DateTime 'Public Ivaliduntil As DateTime Public Bemerkung As String Public Primaer As Boolean = False 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 End Class