Imports System.IO Imports System.Globalization Imports System.ComponentModel Public Class ClassHelper Private Shared BW_DocPath As String Private Shared BW_DocID As Integer Private Shared BW_ParentID As Integer Private Shared BW_Filename As String Public Shared Function FORMAT_WM_PATH(WMpath As String) As String Try If IsNothing(WMpath) Then Return Nothing End If If WMpath.StartsWith("W:") Then WMpath = WMpath.Replace("W:", WMPATH_PREFIX) ElseIf WMpath.StartsWith("\") AndAlso Not WMpath.StartsWith(WMPATH_PREFIX) Then WMpath = WMPATH_PREFIX & WMpath End If LOGGER.Debug("WMpath is: " & WMpath) Return WMpath Catch ex As Exception Return WMpath End Try End Function Public Shared Function GetRelPath(WMpath As String) As String Try If WMpath.StartsWith("W:") Then WMpath = WMpath.Replace("W:", "") ElseIf WMpath.StartsWith(WMPATH_PREFIX) Then WMpath = WMpath.Replace(WMPATH_PREFIX, "") End If LOGGER.Debug("WMpath is: " & WMpath) Return WMpath Catch ex As Exception Return WMpath End Try End Function Public Shared Function Format_Currency(value As String, language As String) Try If IsNothing(value) Then Return "" End If If language <> "de-DE" Then value = value.Replace(",", ".") End If Dim dValue = Double.Parse(value) Dim ci = Threading.Thread.CurrentThread.CurrentCulture Dim nfi As NumberFormatInfo = ci.NumberFormat.Clone() nfi.CurrencySymbol = "" ' KEIN Currency Symbol Return dValue.ToString("C", nfi) Catch ex As Exception Return value.ToString() End Try End Function Public Shared Function Convert_Date(input As String, format As String) Try Dim dt As Date = CDate(input) Dim result = dt.ToString(format, CultureInfo.InvariantCulture) Return result Catch ex As Exception LOGGER.Warn("Unexpected Error while converting value '" & input & "' to date....." & ex.Message) Return input End Try End Function Public Shared Function CheckDBNull(input As Object, back_Value As String) If IsDBNull(input) Then If back_Value = "String" Then Return "" Else Return True End If Else If back_Value = "String" Then Return input.ToString Else Return False End If End If End Function Public Shared Function Convert_to_Database_Date(input As String) Try Dim dt As Date = CDate(input) Dim result = dt.ToString("yyyy-MM-dd", Nothing) Return result Catch ex As Exception LOGGER.Warn("Unexpected Error while converting value '" & input & "' to date(Convert_to_Database_Date)....." & ex.Message) Return input End Try End Function Public Shared Function Get_TempFilename() 'Eine tempfile generieren Dim tempFilename = My.Computer.FileSystem.GetTempFileName() 'Nur den Filenamen ohne Erweiterung Dim tempName = Path.GetDirectoryName(tempFilename) & "\" & Path.GetFileNameWithoutExtension(tempFilename) 'tempfile lsöchen If My.Computer.FileSystem.FileExists(tempFilename) Then My.Computer.FileSystem.DeleteFile(tempFilename) End If Return tempName End Function Public Shared Function Versionierung_Datei(pDateiname As String) As String Try pDateiname = FORMAT_WM_PATH(pDateiname) Dim dir As String = Path.GetDirectoryName(pDateiname) Dim baseName As String = Path.GetFileNameWithoutExtension(pDateiname) Dim ext As String = Path.GetExtension(pDateiname) Dim stammname As String = Path.Combine(dir, baseName) If Not File.Exists(pDateiname) Then Return "" End If Dim version As Integer = 2 Dim candidate As String Do candidate = stammname & "~" & version & ext version += 1 Loop While File.Exists(candidate) Return candidate Catch ex As Exception LOGGER.Warn(" - Error in versioning file - error: " & vbCrLf & ex.Message) MsgBox(ex.Message, MsgBoxStyle.Critical, "Error in versioning file:") Return "" End Try End Function Public Shared Function CleanFilename(ByVal sFilename As String, Optional ByVal REPLACEChar As String = "") As String ' alle nicht zulässigen Zeichen ersetzen Return System.Text.RegularExpressions.Regex.Replace( sFilename, "[?*^""<>|]", REPLACEChar) End Function Public Shared Function File_open(RESULT_DOC_PATH As Object, DocID As String, pParentID As Integer) Try Dim oFileName = Path.GetFileName(RESULT_DOC_PATH) BW_Filename = oFileName RESULT_DOC_PATH = FORMAT_WM_PATH(RESULT_DOC_PATH) If pParentID = 0 Then Dim sql = String.Format("SELECT dwParentID FROM TBPMO_DOCRESULT_LIST WHERE DocID = {0}", DocID) pParentID = MYDB_ECM.GetScalarValue(sql) End If If SHARE_DRIVE_ACTIVE Then If RESULT_DOC_PATH.ToString.StartsWith(constWMOBJECTS) Then RESULT_DOC_PATH = RESULT_DOC_PATH.ToString.Replace(constWMOBJECTS, WMPATH_PREFIX) End If End If CURRENT_OFFICE_FILE_CHANGED = False If RESULT_DOC_PATH <> Nothing Then 'Dim EXT = Path.GetExtension(RESULT_DOC_PATH) 'EXT = EXT.Replace(".", "") ' Dim sql = String.Format("SELECT VIEWER FROM TBPMO_DOC_USER_VIEW WHERE USER_ID = {0} AND FILE_EXTENSION = '{1}'", USER_GUID, EXT) ' Dim DT As DataTable = MYDB_ECM.GetDatatable(sql) ' If DT.Rows.Count = 1 Then ' Select Case DT.Rows(0).Item("VIEWER") ' Case "DOC_VIEW" ' OPEN_DOCVIEW(RESULT_DOC_PATH, DocID) ' End Select ' Else File_SYSOPEN(RESULT_DOC_PATH, DocID, pParentID) 'End If Return True Else MSGBOX_Handler("ERROR", "", "Sorry, but the docpath for doc-id: " & DocID & " is nothing!") LOGGER.Debug("RESULT_DOC_PATH IS NOTHING") Return False End If Catch ex As Exception MsgBox("Unexpected Error in File_open:" & vbCrLf & ex.Message & vbCrLf & RESULT_DOC_PATH & vbCrLf & "DocID: " & DocID, MsgBoxStyle.Critical) LOGGER.Warn("Error in File_open: " & ex.Message & vbCrLf & " - Path: " & RESULT_DOC_PATH & " - DocID: " & DocID) Return False End Try End Function Public Shared Sub Open_Folder(RESULT_DOC_PATH As Object, DocID As String) Try If RESULT_DOC_PATH <> Nothing Then RESULT_DOC_PATH = FORMAT_WM_PATH(RESULT_DOC_PATH) Dim _path = Path.GetDirectoryName(RESULT_DOC_PATH) FOLDER_OPEN(_path, DocID) Else LOGGER.Debug("RESULT_DOC_PATH IS NOTHING") End If Catch ex As Exception MsgBox("Unexpected Error in Open_Folder:" & vbCrLf & ex.Message & vbCrLf & RESULT_DOC_PATH & vbCrLf & "DocID: " & DocID, MsgBoxStyle.Critical) LOGGER.Warn("Error in Open_Folder: " & ex.Message & vbCrLf & " - Path: " & RESULT_DOC_PATH & " - DocID: " & DocID) End Try End Sub Private Shared Sub File_SYSOPEN(RESULT_DOC_PATH As Object, DocID As String, pParentID As Integer) Try If RESULT_DOC_PATH <> Nothing Then BW_DocPath = RESULT_DOC_PATH BW_DocID = DocID BW_ParentID = pParentID Dim BWFileHandler As New BackgroundWorker AddHandler BWFileHandler.DoWork, AddressOf BWFileHandler_DoWork BWFileHandler.RunWorkerAsync() Else LOGGER.Warn("File_SYSOPEN RESULT_DOC_PATH is nothing") End If Catch ex As Exception MsgBox("Unexpected Error in File_SYSOPEN:" & vbCrLf & ex.Message & vbCrLf & RESULT_DOC_PATH & vbCrLf & "DocID: " & DocID, MsgBoxStyle.Critical) LOGGER.Warn("Error in File_SYSOPEN: " & ex.Message & vbCrLf & " - Path: " & RESULT_DOC_PATH & " - DocID: " & DocID) End Try End Sub Private Shared Sub BWFileHandler_DoWork() Try Dim oOverrideRunPath As String = "" Dim oExtension As String = Path.GetExtension(BW_DocPath).ToLower() ' Prüfen, ob eine spezielle Anwendung für die Dateierweiterung definiert ist For Each oROW As DataRow In CURRENT_TBFILE_EXTENSION_OVERRIDE.Rows If oExtension.Replace(".", "") = oROW.Item("FILE_EXTENSION").ToString().ToLower() Then LOGGER.Debug($"Specific file extension override for [{oExtension}] found.") oOverrideRunPath = oROW.Item("PROCESS").ToString() Exit For End If Next Dim oMyProcess As Process = Nothing Dim oSql As String = "" Try ' ###### Startinfo vorbereiten ###### Dim startInfo As New ProcessStartInfo() If oOverrideRunPath <> "" Then startInfo.FileName = oOverrideRunPath startInfo.Arguments = $"""{BW_DocPath}""" LOGGER.Debug($"Opening document [{BW_DocPath}] using override application [{oOverrideRunPath}].") Else startInfo.FileName = BW_DocPath LOGGER.Debug($"Opening document [{BW_DocPath}] with system default application.") End If startInfo.UseShellExecute = True startInfo.RedirectStandardOutput = False If oOverrideRunPath <> "" Then oMyProcess = Process.Start(startInfo) Else oMyProcess = Process.Start(BW_DocPath) End If ' ###### Prozess starten ###### ' ID des gestarteten Prozesses holen (nicht den eigenen!) Dim ProcID As Integer = oMyProcess.Id LOGGER.Debug($"Started process ID {ProcID} for document [{BW_DocPath}].") ' Warten, bis der Benutzer das Dokument geschlossen hat oMyProcess.WaitForExit() ' Nachbearbeitung, wenn Format bearbeitbar ist oExtension = Path.GetExtension(BW_DocPath).ToLower() LOGGER.Debug($"Checking if file extension [{oExtension}] may change during edit...") If FILE_FORMATS_CHANGE_DURING_EDIT.Contains(oExtension) And oOverrideRunPath = "" Then LOGGER.Debug("Create possible Document change in TBPMO_DOC_ID_CHANGED.") Dim oInsert = $"INSERT INTO TBPMO_DOC_ID_CHANGED (USER_ID,PROCESS_ID,VERSION_ID,OLD_DOC_ID,NEW_DOC_ID,DOC_PATH) VALUES (" & $"{USER_GUID},'{ProcID}',9999,{BW_DocID},0,'{BW_DocPath}')" MYDB_ECM.ExecuteNonQuery(oInsert) End If Catch ex As Exception ' Fehler im Prozessstart oder während des Wartens LOGGER.Warn("Error in Process.Start(): " & ex.Message & vbCrLf & " - Path: " & BW_DocPath & " - DocID: " & BW_DocID) MsgBox("Error in OpenFile: " & ex.Message & vbCrLf & "Path: " & BW_DocPath & vbCrLf & "DocID: " & BW_DocID, MsgBoxStyle.Exclamation, "Open File Error") End Try Catch ex As Exception ' Fehler im gesamten Worker (z. B. Path nicht vorhanden) LOGGER.Warn("General error in BWFileHandler_DoWork: " & ex.Message & vbCrLf & " - Path: " & BW_DocPath & " - DocID: " & BW_DocID) ' Letzter Versuch: Öffne mit Standardprogramm Try Process.Start(BW_DocPath) LOGGER.Debug("Fallback: Document opened with default application.") Catch ex1 As Exception LOGGER.Warn("Fallback error in Process.Start(): " & ex1.Message & vbCrLf & " - Path: " & BW_DocPath & " - DocID: " & BW_DocID) End Try End Try End Sub 'Private Shared Sub BWFileHandler_DoWork() ' Try ' Dim oOverrideRunPath As String = "" ' Dim oExtension = Path.GetExtension(BW_DocPath).ToLower ' For Each oROW As DataRow In CURRENT_TBFILE_EXTENSION_OVERRIDE.Rows ' If oExtension.Replace(".", "") = oROW.Item("FILE_EXTENSION") Then ' LOGGER.Debug($"Specific fileextension override for extension [{oExtension}] found! ") ' oOverrideRunPath = oROW.Item("PROCESS") ' End If ' Next ' Dim oMyProcess = New Process() ' Dim oSql ' Try ' '###### ' Dim startInfo As New ProcessStartInfo() ' If oOverrideRunPath <> "" Then ' startInfo.FileName = oOverrideRunPath ' startInfo.Arguments = """" & BW_DocPath & """" ' startInfo.UseShellExecute = True ' startInfo.RedirectStandardOutput = False ' Else ' startInfo.FileName = BW_DocPath ' startInfo.UseShellExecute = True ' startInfo.RedirectStandardOutput = False ' End If ' '##### ' oMyProcess.Start(startInfo) ' Dim myViewerProcessID = oMyProcess.Id ' oMyProcess.WaitForExit() ' oExtension = Path.GetExtension(BW_DocPath).ToLower ' LOGGER.Debug($"Checking oExtension [{oExtension}]...") ' If FILE_FORMATS_CHANGE_DURING_EDIT.Contains(oExtension) Then ' oSql = $"SELECT * FROM VWOF_DOCID_HANDLE WHERE dwParentID = {BW_ParentID} and [Filename] = '{BW_Filename}'" ' Dim oDTNEWDoc As DataTable = MYDB_ECM.GetDatatable(oSql) ' If Not IsNothing(oDTNEWDoc) Then ' If oDTNEWDoc.Rows.Count = 1 Then ' Dim oInsert = $"INSERT INTO TBPMO_DOC_ID_CHANGED (USER_ID,PROCESS_ID,VERSION_ID,OLD_DOC_ID,NEW_DOC_ID, DOC_PATH) VALUES ( ' {USER_GUID},'{myViewerProcessID.ToString}',{oDTNEWDoc.Rows(0).Item("dwVersionID")},{BW_DocID},{oDTNEWDoc.Rows(0).Item("NewDocID")}, '{BW_DocPath}')" ' MYDB_ECM.ExecuteNonQuery(oInsert) ' End If ' End If ' End If ' Catch ex As Exception ' LOGGER.Warn("Error in Process1.Start(): " & ex.Message & vBCrlf & " - Path: " & BW_DocPath & " - DocID: " & BW_DocID) ' MsgBox("Error in OpenFile: " & ex.Message & vBCrlf & " - Path: " & BW_DocPath & " - DocID: " & BW_DocID, MsgBoxStyle.Exclamation) ' Exit Sub ' End Try ' Catch ex As Exception ' LOGGER.Warn("Error in Process.Start(): " & ex.Message & vBCrlf & " - Path: " & BW_DocPath & " - DocID: " & BW_DocID) ' Try ' Process.Start(BW_DocPath) ' Catch ex1 As Exception ' LOGGER.Warn("Error in Process.Start(1): " & ex1.Message & vBCrlf & " - Path: " & BW_DocPath & " - DocID: " & BW_DocID) ' End Try ' End Try 'End Sub Private Shared Sub FOLDER_OPEN(PATH As Object, DocID As String) Try If PATH <> Nothing Then LOGGER.Debug("in FOLDER_OPEN(" & PATH & ")") If System.IO.Directory.Exists(PATH) = True Then Process.Start(PATH) Else MsgBox("Folder '" & PATH & "' not existing or accessible!", MsgBoxStyle.Exclamation) End If End If Catch ex As Exception MsgBox("Unexpected Error in FOLDER_OPEN:" & vbCrLf & ex.Message & vbCrLf & PATH & vbCrLf & "DocID: " & DocID, MsgBoxStyle.Critical) LOGGER.Warn("Error in FOLDER_OPEN: " & ex.Message & vbCrLf & " - Path: " & PATH & " - DocID: " & DocID) End Try End Sub Public Shared Function InsertEssential_Log(REFERENCE_KEY As Integer, REFERENCE_STRING As String, COMMENT As String) Try COMMENT = COMMENT.Replace("'", "") Dim insert = String.Format("INSERT INTO TBPMO_LOG_ESSENTIALS (REFERENCE_KEY,REFERENCE_STRING,COMMENT,ADDED_WHO) VALUES ({0},'{1}','{2}','{3}')", REFERENCE_KEY, REFERENCE_STRING, COMMENT, USER_USERNAME) Dim result = MYDB_ECM.ExecuteNonQuery(insert) Return result Catch ex As Exception LOGGER.Warn("Unexpected Error in InsertEssential_Log: " & ex.Message) Return False End Try End Function Public Shared Function DeleteRecord(SELECTED_RECORD_ID As Integer, Optional Comment As String = "") Try Dim DeleteRecordSQL = String.Format("EXEC [dbo].[PRPMO_DELETE_RECORD] {0}, '{1}','{2}'", SELECTED_RECORD_ID, USER_USERNAME, Comment) Dim result As Boolean = MYDB_ECM.ExecuteNonQuery(DeleteRecordSQL) If result = False Then Dim msg = "Der Datensatz '" & SELECTED_RECORD_ID & "' konnte nicht gelöscht werden. Überprüfen Sie das log" If USER_LANGUAGE <> "de-DE" Then msg = "The record '" & SELECTED_RECORD_ID & "' could not be deleted. Check the log" End If MsgBox(msg, MsgBoxStyle.Exclamation) End If LOGGER.Info($"Deleted Record [{SELECTED_RECORD_ID}] Result was [{result}]: ") Return result Catch ex As Exception LOGGER.Warn("Unexpected Error in DeleteRecord: " & ex.Message) Return False End Try End Function Public Shared Sub MSGBOX_Handler(type As String, Caption As String, info1 As String, Optional info2 As String = "") Dim msg = info1 If info2 <> "" Then msg &= vbCrLf & vbCrLf & info2 End If If type = "ERROR" Then MessageBox.Show(msg, Caption, MessageBoxButtons.OK, MessageBoxIcon.Error) LOGGER.Warn(msg) ElseIf type = "INFO" Then MessageBox.Show(msg, Caption, MessageBoxButtons.OK, MessageBoxIcon.Information) End If End Sub Public Shared Function Check_Record_Read_only(RECORD_ID As Integer, ENTITY_ID As Integer) Dim sql = "" Try sql = SQL_RECORD_AND_FILE_READ_ONLY sql = sql.Replace("@RECORDID", RECORD_ID) sql = sql.Replace("@RECORD_ID", RECORD_ID) sql = sql.Replace("@USER_ID", USER_GUID) sql = sql.Replace("@USER_GUID", USER_GUID) sql = sql.Replace("@ENTITY_ID", ENTITY_ID) sql = sql.Replace("@USERNAME", USER_USERNAME) sql = sql.Replace("@USER_NAME", USER_USERNAME) LOGGER.Debug("RIGHT_ONLY_READ_RECORD_DOC SQL: (When true then disable) '" & sql & "'") Return CBool(MYDB_ECM.GetScalarValue(sql)) Catch ex As Exception LOGGER.Warn("SQL_RIGHT_READ_AND_VIEW_ONLY: " & sql) Return False End Try End Function Public Shared Function Check_File_Read_only(RECORD_ID As Integer, ENTITY_ID As Integer) Dim sql = "" Try sql = SQL_DOC_READ_ONLY sql = sql.Replace("@RECORDID", RECORD_ID) sql = sql.Replace("@RECORD_ID", RECORD_ID) sql = sql.Replace("@USER_ID", USER_GUID) sql = sql.Replace("@USER_GUID", USER_GUID) sql = sql.Replace("@ENTITY_ID", ENTITY_ID) sql = sql.Replace("@USERNAME", USER_USERNAME) sql = sql.Replace("@USER_NAME", USER_USERNAME) LOGGER.Debug("RIGHT_ONLY_READ_COC SQL: (When true then disable) '" & sql & "'") Return CBool(MYDB_ECM.GetScalarValue(sql)) Catch ex As Exception LOGGER.Warn("RIGHT_WINDREAM_FORBIDDEN: " & sql) Return False End Try End Function Public Shared Sub REMOVE_OLD_DROP_FILES() Try Dim oDEL = String.Format("UPDATE [DD_ECM].[dbo].[TBPMO_FILES_USER] SET [USER_WORK] = [USER_WORK] + '_TIMEOUT', WORKED = 1 WHERE ADDED_WHEN < DATEADD(MINUTE, -5, GETDATE()) AND WORKED = 0 AND USER_WORK = '{0}' ;", USER_USERNAME) MYDB_ECM.ExecuteNonQuery(oDEL) Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error while REMOVE_OLD_DROP_FILES") End Try End Sub Public Shared Sub Create_USER_FILE_TABLE() Try Dim sql = String.Format("SELECT *, CONVERT(BIT,0) AS DELETE_FILE FROM TBPMO_FILES_USER WHERE (USER_WORK = '{0}') AND WORKED = 0", USER_USERNAME) CURRENT_TBPMO_FILES_USER = MYDB_ECM.GetDatatable(sql) Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error while creating User_File_Table") End Try End Sub Public Shared Function DELETE_PMO_FILE_USER(GUID As Integer) Try Dim del As String = String.Format("DELETE FROM TBPMO_FILES_USER WHERE GUID = {0}", GUID) Return MYDB_ECM.ExecuteNonQuery(del) Catch ex As Exception MsgBox("Unexpected Error in DELETE_PMO_FILE_USER: " & ex.Message, MsgBoxStyle.Critical) Return False End Try End Function Public Shared Function DELETE_PMO_FILE_USER_OPEN_FILES() Try Dim del As String = String.Format("DELETE FROM TBPMO_FILES_USER WHERE (USER_WORK = '{0}') AND WORKED = 0", USER_USERNAME) Return MYDB_ECM.ExecuteNonQuery(del) Catch ex As Exception MsgBox("Unexpected Error in DELETE_PMO_FILE_USER_OPEN_FILES: " & ex.Message, MsgBoxStyle.Critical) Return False End Try End Function Public Shared Function DecryptString(ciphertext As String, MethodName As String) Dim result As String Dim wrapper As New ClassEncryption("!35452didalog=") ' DecryptData throws if the wrong password is used. Try result = wrapper.DecryptData(ciphertext) Return result Catch ex As Exception LOGGER.Warn("The ciphertext for Method'" & MethodName & "' could not be decrypted") Return "" End Try End Function Public Shared Function FILTER_DATATABLE(BaseDatatable As DataTable, expression As String, sortstring As String) Try 'Schema übernehmen Dim filteredData As DataTable = BaseDatatable.Clone() 'Einfügevariante BaseDatatable.Select(expression, sortstring).CopyToDataTable(filteredData, LoadOption.PreserveChanges) 'Dim filteredData = BaseDatatable.Select(expression).CopyToDataTable() Return filteredData Catch ex As Exception LOGGER.Warn("unexpected error in FILTER_DATATABLE: " & ex.Message) Return Nothing End Try End Function Public Shared Function GetDocrecordLinks(pRECORDID As Integer) Try Dim oSQL = $"SELECT * FROM TBPMO_DOC_RECORD_LINK WHERE RECORD_ID = {pRECORDID}" CURRENT_DT_TBPMO_DOC_RECORD_LINK = MYDB_ECM.GetDatatable(oSQL) Catch ex As Exception LOGGER.Warn("Unexpected Error in GetDocrecordLinks: " & ex.Message) Return False End Try End Function Public Shared Function Insert_USER_File(pFilename As String, handleType As String) Try Dim filename_only As String = Path.GetFileName(pFilename) Dim CURRENT_FILE_HASH = "" If File.Exists(pFilename) Then Dim oFileInfo As New FileInfo(pFilename) LOGGER.Debug($"File exists: [{pFilename}] | Size: {oFileInfo.Length} bytes | Extension: {oFileInfo.Extension}") If (pFilename.ToUpper.EndsWith(".MSG") Or pFilename.ToUpper.EndsWith(".EML")) And (handleType = "|OUTLOOK_MESSAGE|" Or handleType = "|MSGONLY|") Then CURRENT_FILE_HASH = FILESYSTEM.GetChecksumFromString(pFilename) LOGGER.Debug($"Hash method: GetChecksumFromString | Hash: [{CURRENT_FILE_HASH}]") Else CURRENT_FILE_HASH = FILESYSTEM.GetChecksum(pFilename) LOGGER.Debug($"Hash method: GetChecksum | Hash: [{CURRENT_FILE_HASH}]") End If Else LOGGER.Warn($"File does not exist: [{pFilename}] - Cannot compute hash.") End If Dim oSQL = $"SELECT Filename, ADDED_WHO, FORMAT(ADDED_WHEN, 'dd-MM-yyyy HH:mm') AS ADDED_WHEN_STRING FROM TBPMO_DOCRESULT_LIST WHERE FILE_HASH = '{CURRENT_FILE_HASH}' ORDER BY ADDED_WHEN DESC" LOGGER.Debug($"Inserting File - hash is [{CURRENT_FILE_HASH}]") Dim oDTCHECK As DataTable = MYDB_ECM.GetDatatable(oSQL) If Not IsNothing(oDTCHECK) Then If oDTCHECK.Rows.Count >= 1 Then LOGGER.Info($"We got a file with the same hash [{CURRENT_FILE_HASH}]") Dim oFilename = oDTCHECK.Rows(0).Item(0) Dim oUSER = oDTCHECK.Rows(0).Item(1) Dim oADDED_WHEN = oDTCHECK.Rows(0).Item(2) Dim oMSG As String If USER_LANGUAGE <> "de-DE" Then oMSG = $"This file has already been imported into orgFLOW!" & vbCrLf & $"File: [{oFilename}]" & vbCrLf & $"Imported on: {oADDED_WHEN}" & vbCrLf & $"Imported by: {oUSER}" & vbCrLf & $"Total imports with identical content: {oDTCHECK.Rows.Count}" & vbCrLf & vbCrLf & "Do you want to import this file again?" & vbCrLf & "NO → Teh complete Import will be cancelled." Else oMSG = $"Diese Datei wurde bereits in orgFLOW importiert!" & vbCrLf & $"Datei: [{oFilename}]" & vbCrLf & $"Importiert am: {oADDED_WHEN}" & vbCrLf & $"Importiert von: {oUSER}" & vbCrLf & $"Anzahl Importe mit identischem Inhalt: {oDTCHECK.Rows.Count}" & vbCrLf & vbCrLf & "Möchten Sie die Datei dennoch erneut importieren?" & vbCrLf & "NEIN → Der gesamte Import (alle folgenden) wird abgebrochen." End If Dim result As MsgBoxResult result = MessageBox.Show(oMSG, CAPTION_CONFIRMATION, MessageBoxButtons.YesNo, MessageBoxIcon.Question) If result = MsgBoxResult.No Then Return False End If End If End If Dim ins As String = String.Format("INSERT INTO TBPMO_FILES_USER (FILENAME2WORK, USER_WORK,HANDLE_TYPE,FILENAME_ONLY,FILE_HASH) VALUES ('{0}','{1}','{2}','{3}','{4}')", pFilename, USER_USERNAME, handleType, filename_only, CURRENT_FILE_HASH) Return MYDB_ECM.ExecuteNonQuery(ins) Catch ex As Exception MsgBox("Unexpected Error in Insert file for user (TBPMO_FILES_USER): " & ex.Message, MsgBoxStyle.Critical) Return False End Try End Function End Class