Imports System.IO Imports System.Globalization Imports DD_LIB_Standards Imports System.ComponentModel Public Class ClassHelper Private Shared BW_DocPath As String Private Shared BW_DocID As Integer Public Shared Function FORMAT_WM_PATH(WMpath As String) Try Dim ochanged As Boolean = False If WMpath.StartsWith("W:") Then WMpath = WMpath.Replace("W:", "\\windream\Objects") ochanged = True ElseIf WMpath.StartsWith("\") Then If WMpath.StartsWith("\\windream\Objects") = False Then WMpath = "\\windream\Objects" & WMpath ochanged = True End If End If If LogErrorsOnly = False And ochanged = True Then ClassLogger.Add(" >> WMpath is: " & WMpath, False) 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 ClassLogger.Add("Unexpected Error while converting value '" & input & "' to date....." & ex.Message, False) 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 ClassLogger.Add("Unexpected Error while converting value '" & input & "' to date(Convert_to_Database_Date)....." & ex.Message, False) 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 CheckFileIsInUse(ByVal filename) As Boolean Dim fs As Integer = FreeFile() Dim inuse As Boolean = False If File.Exists(filename) Then Try Using f As New IO.FileStream(filename, FileMode.Open, FileAccess.ReadWrite, FileShare.None) ' thisFileInUse = False End Using Catch inuse = True End Try Try FileOpen(fs, filename, OpenMode.Binary, OpenAccess.ReadWrite, OpenShare.LockReadWrite) Catch ex As Exception ClassLogger.Add("File " & filename & " inuse or not able to open - message: " & ex.Message, True) inuse = True Finally FileClose(fs) End Try End If Return inuse End Function Public Shared Function Versionierung_Datei(Dateiname As String) Dim extension Dim _NewFileString Try Dim version As Integer = 1 Dim Stammname As String = Path.GetDirectoryName(Dateiname) & "\" & Path.GetFileNameWithoutExtension(Dateiname) extension = Path.GetExtension(Dateiname) Dim _neuername As String = Stammname 'Dim MoveFilename As String = DATEINAME.Replace(element.Value, "") 'Überprüfen ob File existiert If File.Exists(_neuername & extension) = False Then _NewFileString = _neuername Else Do While File.Exists(_neuername & extension) version = version + 1 _neuername = Stammname & "~" & version _NewFileString = _neuername Loop End If Return _NewFileString & extension Catch ex As Exception ClassLogger.Add(" - Error in versioning file - error: " & vbNewLine & ex.Message) MsgBox(ex.Message, MsgBoxStyle.Critical, "Error in versioning file:") Return "" End Try End Function '' ''' Ersetzt alle nicht zulässigen Zeichen im angegebenen Dateinamen ''' ''' Dateiname ohne Pfadangabe ''' Ersatzzeichen für alle unzulässigen Zeichen ''' im Dateinamen 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 Sub File_open(RESULT_DOC_PATH As Object, DocID As String) Try RESULT_DOC_PATH = FORMAT_WM_PATH(RESULT_DOC_PATH) CURRENT_OFFICE_FILE_CHANGED = False If RESULT_DOC_PATH <> Nothing Then If USER_GENERAL_VIEWER = "NONE" 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 UPPER(FILE_EXTENSION) = UPPER('{1}')", USER_GUID, EXT) Dim DT As DataTable = ClassDatabase.Return_Datatable(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) End If Else Select Case USER_GENERAL_VIEWER Case "DOC-VIEW" OPEN_DOCVIEW(RESULT_DOC_PATH, DocID) End Select End If Else MSGBOX_Handler("ERROR", "", "Sorry, but the docpath for doc-id: " & DocID & " is nothing!") If LogErrorsOnly = False Then ClassLogger.Add(" >> RESULT_DOC_PATH IS NOTHING") End If Catch ex As Exception MsgBox("Unexpected Error in File_open:" & vbNewLine & ex.Message & vbNewLine & RESULT_DOC_PATH & vbNewLine & "DocID: " & DocID, MsgBoxStyle.Critical) ClassLogger.Add("Error in File_open: " & ex.Message & vbNewLine & " - Path: " & RESULT_DOC_PATH & " - DocID: " & DocID, True) End Try End Sub Public Shared Sub Open_Folder(RESULT_DOC_PATH As Object, DocID As String) Try If RESULT_DOC_PATH <> Nothing Then Dim _path = Path.GetDirectoryName(RESULT_DOC_PATH) FOLDER_OPEN(_path, DocID) Else If LogErrorsOnly = False Then ClassLogger.Add(" >> RESULT_DOC_PATH IS NOTHING") End If Catch ex As Exception MsgBox("Unexpected Error in Open_Folder:" & vbNewLine & ex.Message & vbNewLine & RESULT_DOC_PATH & vbNewLine & "DocID: " & DocID, MsgBoxStyle.Critical) ClassLogger.Add("Error in Open_Folder: " & ex.Message & vbNewLine & " - Path: " & RESULT_DOC_PATH & " - DocID: " & DocID, True) End Try End Sub Public Shared Sub OPEN_DOCVIEW(Doc_Path As String, DocID As Integer) Try Dim DocView DocView = Nothing DocView = CreateObject("WMPViewXNG.Viewer") ' open the viewer Dim viewer_string = Doc_Path.Substring(2) DocView.ViewFile(viewer_string) CURRENT_DOCVIEW_PATH = viewer_string CURRENT_DOCVIEW = DocView Catch ex As Exception MsgBox("Unexpected Error in DocView Open:" & vbNewLine & ex.Message & vbNewLine & Doc_Path & vbNewLine & "DocID: " & DocID, MsgBoxStyle.Critical) ClassLogger.Add("Error in DocView Open: " & ex.Message & vbNewLine & " - Path: " & Doc_Path & " - DocID: " & DocID, True) File_SYSOPEN(Doc_Path, DocID) End Try End Sub Private Shared Sub File_SYSOPEN(RESULT_DOC_PATH As Object, DocID As String) Try If RESULT_DOC_PATH <> Nothing Then BW_DocPath = RESULT_DOC_PATH BW_DocID = DocID Dim BWFileHandler As New BackgroundWorker AddHandler BWFileHandler.DoWork, AddressOf BWFileHandler_DoWork BWFileHandler.RunWorkerAsync() End If Catch ex As Exception MsgBox("Unexpected Error in File_SYSOPEN:" & vbNewLine & ex.Message & vbNewLine & RESULT_DOC_PATH & vbNewLine & "DocID: " & DocID, MsgBoxStyle.Critical) ClassLogger.Add("Error in File_SYSOPEN: " & ex.Message & vbNewLine & " - Path: " & RESULT_DOC_PATH & " - DocID: " & DocID, True) End Try End Sub Private Shared Sub BWFileHandler_DoWork() Try Dim oMyProcess = New Process() Dim oExtension Dim oSql Try 'Dim oPSI As New ProcessStartInfo(BW_DocPath) oMyProcess.StartInfo.FileName = BW_DocPath oMyProcess.StartInfo.UseShellExecute = True oMyProcess.StartInfo.RedirectStandardOutput = False oMyProcess.Start() Dim ProcID = oMyProcess.GetCurrentProcess.Id oExtension = Path.GetExtension(BW_DocPath).ToLower If LogErrorsOnly = False Then ClassLogger.Add($"Checking oExtension [{oExtension}]...", False) If FILE_FORMATS_CHANGE_DURING_EDIT.Contains(oExtension) Then oSql = $"SELECT dwVersionID FROM windream60.dbo.BaseAttributes WHERE dwDocID = {BW_DocID}" Dim odwVersionId = clsDatabase.Execute_Scalar(oSql, False) Dim oInsert = $"INSERT INTO TBPMO_DOC_ID_CHANGED (USER_ID,PROCESS_ID,VERSION_ID,OLD_DOC_ID,DOC_PATH) VALUES ({USER_GUID},'{ProcID.ToString}',{odwVersionId},{BW_DocID},'{BW_DocPath}')" clsDatabase.Execute_non_Query(oInsert, False) End If 'oMyProcess.WaitForExit() Catch ex As Exception ClassLogger.Add("Error in Process1.Start(): " & ex.Message & vbNewLine & " - Path: " & BW_DocPath & " - DocID: " & BW_DocID, True) Exit Sub End Try Catch ex As Exception ClassLogger.Add("Error in Process.Start(): " & ex.Message & vbNewLine & " - Path: " & BW_DocPath & " - DocID: " & BW_DocID, True) Try Process.Start(BW_DocPath) Catch ex1 As Exception ClassLogger.Add("Error in Process.Start(1): " & ex1.Message & vbNewLine & " - Path: " & BW_DocPath & " - DocID: " & BW_DocID, True) End Try End Try End Sub Private Shared Sub FOLDER_OPEN(PATH As Object, DocID As String) Try If PATH <> Nothing Then If LogErrorsOnly = False Then ClassLogger.Add(" >> in FOLDER_OPEN(" & PATH & ")", False) 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:" & vbNewLine & ex.Message & vbNewLine & PATH & vbNewLine & "DocID: " & DocID, MsgBoxStyle.Critical) ClassLogger.Add("Error in FOLDER_OPEN: " & ex.Message & vbNewLine & " - Path: " & PATH & " - DocID: " & DocID, True) End Try End Sub Shared Function Convert_Date_2_Form_Format(p1 As Date) As Date Throw New NotImplementedException End Function 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 = clsDatabase.Execute_non_Query(insert, False) Return result Catch ex As Exception ClassLogger.Add("Unexpected Error in InsertEssential_Log: " & ex.Message, True, False) 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 = ClassDatabase.Execute_non_Query_withConn(DeleteRecordSQL, 1) 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) Else ClassProxy.PRPROXY_RECORD_DEL(SELECTED_RECORD_ID, CURRENT_ENTITY_ID) End If Return result Catch ex As Exception ClassLogger.Add("Unexpected Error in DeleteRecord: " & ex.Message, True) 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 &= vbNewLine & vbNewLine & info2 End If If type = "ERROR" Then MessageBox.Show(msg, Caption, MessageBoxButtons.OK, MessageBoxIcon.Error) ClassLogger.Add(msg, True) 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) If LogErrorsOnly = False Then ClassLogger.Add(" >> RIGHT_ONLY_READ_RECORD_DOC SQL: (When true then disable) '" & sql & "'", False) Return CBool(ClassDatabase.Execute_Scalar(sql, True)) Catch ex As Exception ClassLogger.Add(">> 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) If LogErrorsOnly = False Then ClassLogger.Add(" >> RIGHT_ONLY_READ_COC SQL: (When true then disable) '" & sql & "'", False) Return CBool(ClassDatabase.Execute_Scalar(sql, True)) Catch ex As Exception ClassLogger.Add(">> RIGHT_WINDREAM_FORBIDDEN: " & sql) Return False End Try End Function Public Shared Sub Create_USER_FILE_TABLE() Try Dim sql = String.Format("SELECT *, CONVERT(BIT,0) AS DELETE_FILE FROM TBPMO_FILES_USER WHERE (UPPER(USER_WORK) = UPPER('{0}')) AND WORKED = 0", USER_USERNAME) CURRENT_TBPMO_FILES_USER = ClassDatabase.Return_Datatable(sql, True) 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 ClassDatabase.Execute_non_Query(del, True) 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 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 ClassLogger.Add("The ciphertext for Method'" & MethodName & "' could not be decrypted", False) 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) Console.WriteLine("Found {0} rows.", filteredData.Rows.Count) 'Dim filteredData = BaseDatatable.Select(expression).CopyToDataTable() Return filteredData Catch ex As Exception ClassLogger.Add("unexpected error in FILTER_DATATABLE: " & ex.Message) Return Nothing End Try End Function End Class