421 lines
18 KiB
VB.net
421 lines
18 KiB
VB.net
Imports System.Data.SqlClient
|
||
Imports System.Data.OracleClient
|
||
Imports System.IO
|
||
Imports WINDREAMLib
|
||
Imports DevExpress.Utils.CommonDialogs
|
||
|
||
Public Class ClassAllgemeineFunktionen
|
||
Public Shared Function GUI_LANGUAGE_INFO(pTITLE As String)
|
||
Try
|
||
Dim oFilteredDatatable As DataTable = BASEDATA_DT_GUI_LANGUAGE_PHRASES.Clone()
|
||
Dim oExpression = $"LANGUAGE ='{USER_LANGUAGE}' AND TITLE = '{pTITLE}'"
|
||
BASEDATA_DT_GUI_LANGUAGE_PHRASES.Select(oExpression).CopyToDataTable(oFilteredDatatable, LoadOption.PreserveChanges)
|
||
If oFilteredDatatable.Rows.Count = 1 Then
|
||
If oFilteredDatatable.Rows(0).Item("CAPT_TYPE") = "MsgBox" Or oFilteredDatatable.Rows(0).Item("CAPT_TYPE") = "MsgboxResult" Then
|
||
Return oFilteredDatatable
|
||
Else
|
||
If oFilteredDatatable.Rows(0).Item("STRING2") <> String.Empty Then
|
||
Return oFilteredDatatable
|
||
Else
|
||
Return oFilteredDatatable.Rows(0).Item("STRING1")
|
||
End If
|
||
|
||
End If
|
||
|
||
Else
|
||
If oFilteredDatatable.Rows.Count = 0 Then 'KEIN EINTRAG FÜR SPRACHE
|
||
oExpression = $"LANGUAGE ='de-DE' AND TITLE = '{pTITLE}'"
|
||
BASEDATA_DT_GUI_LANGUAGE_PHRASES.Select(oExpression).CopyToDataTable(oFilteredDatatable, LoadOption.PreserveChanges)
|
||
Try
|
||
Return oFilteredDatatable.Rows(0).Item("STRING1")
|
||
Catch ex As Exception
|
||
Return $"ERR-LANG(NoTranslationFor [{oExpression}]"
|
||
End Try
|
||
|
||
Else
|
||
Return oFilteredDatatable
|
||
End If
|
||
|
||
End If
|
||
Catch ex As Exception
|
||
LOGGER.Info($"Unexpected error in GUI_LANGUAGE_INFO FOR [{pTITLE}]...")
|
||
LOGGER.Error(ex)
|
||
End Try
|
||
|
||
End Function
|
||
Public Shared Function GUI_LANGUAGE_MSGBOX(pTITLE As String)
|
||
Try
|
||
Dim oFilteredDatatable As DataTable = BASEDATA_DT_GUI_LANGUAGE_PHRASES.Clone()
|
||
Dim oExpression = $"LANGUAGE = '{USER_LANGUAGE}' AND TITLE = '{pTITLE}'"
|
||
BASEDATA_DT_GUI_LANGUAGE_PHRASES.Select(oExpression).CopyToDataTable(oFilteredDatatable, LoadOption.PreserveChanges)
|
||
If oFilteredDatatable.Rows.Count = 1 Then
|
||
Return oFilteredDatatable.Rows(0)
|
||
Else
|
||
Return ""
|
||
End If
|
||
Catch ex As Exception
|
||
LOGGER.Info($"Unexpected error in GUI_LANGUAGE_MSGBOX FOR [{pTITLE}]...")
|
||
LOGGER.Error(ex)
|
||
End Try
|
||
|
||
End Function
|
||
Public Shared Function LoginOut(LoginorOut As String) As Boolean
|
||
Try
|
||
If USER_EXISTS = False Then
|
||
Return False
|
||
End If
|
||
Dim oSql As String
|
||
If LoginorOut = "LOGIN" Then
|
||
oSql = String.Format($"INSERT INTO TBDD_USER_MODULE_LOG_IN (USER_ID,CLIENT_ID,MODULE,VERSION_CLIENT,MACHINE_NAME,LANGUAGE_OVERRIDE) VALUES
|
||
({USER_ID},1,'{MODULE_PM}','{My.Application.Info.Version.ToString}','{Environment.MachineName}','')")
|
||
Else
|
||
If INACTIVITYRecognized = True Then
|
||
oSql = $"UPDATE TBDD_USER_LOGIN_OUT SET COMMENT = 'Inactivity Detected',LOGOUT = GETDATE() WHERE USER_ID = {USER_ID} AND MODULE = '{MODULE_PM}' AND LOGOUT IS NULL"
|
||
If DatabaseFallback.ExecuteNonQueryECM(oSql) = True Then
|
||
|
||
End If
|
||
End If
|
||
|
||
oSql = $"DELETE FROM TBDD_USER_MODULE_LOG_IN WHERE USER_ID = {USER_ID} AND MODULE = '{MODULE_PM}'"
|
||
End If
|
||
If DatabaseFallback.ExecuteNonQueryECM(oSql) = True Then
|
||
LOGGER.Debug($"{LoginorOut} of User successfully!")
|
||
Return True
|
||
Else
|
||
LOGGER.Info("User could not be logged in/out....")
|
||
Return False
|
||
End If
|
||
Catch ex As Exception
|
||
LOGGER.Error(ex)
|
||
LOGGER.Info("Error in LoginOut: " & ex.Message)
|
||
Return False
|
||
End Try
|
||
End Function
|
||
|
||
Public Function ExecuteonMSSQL(ByVal sqlcommand As String, ConString As String)
|
||
Try
|
||
' die nötigen Variablen definieren
|
||
Dim Connection As SqlConnection
|
||
|
||
Dim Command As SqlCommand = Nothing
|
||
Dim DataAdapter As SqlDataAdapter = Nothing
|
||
|
||
' ConnectionString aufbauen (aus Settings auslesen)
|
||
Connection = New SqlConnection(ConString)
|
||
|
||
|
||
' Verbindung zur Datenbank aufbauen
|
||
Try
|
||
Connection.Open()
|
||
Catch ex As Exception
|
||
LOGGER.Error(ex)
|
||
' DB-Connection schliessen
|
||
Me.CloseMssqlDb(Connection)
|
||
LOGGER.Debug("ExecuteonMSSQL.Connection definieren - Error: " & ex.Message, True)
|
||
Return "ExecuteonMSSQL.Connection definieren - Error: " & ex.Message
|
||
End Try
|
||
|
||
|
||
' SQL-Abfrage definieren
|
||
Try
|
||
Command = New SqlCommand(sqlcommand, Connection)
|
||
Catch ex As Exception
|
||
LOGGER.Error(ex)
|
||
LOGGER.Debug("ExecuteonMSSQL.sqlcommand definieren - Error: " & ex.Message, True)
|
||
' DB-Connection schliessen
|
||
Me.CloseMssqlDb(Connection)
|
||
Return "ExecuteonMSSQL.sqlcommand definieren - Error: " & ex.Message
|
||
End Try
|
||
|
||
' *** Ausführen des Command ***
|
||
If Command IsNot Nothing Then
|
||
|
||
Try
|
||
Command.ExecuteNonQuery()
|
||
' DB-Connection schliessen
|
||
Me.CloseMssqlDb(Connection)
|
||
Return ""
|
||
Catch ex As Exception
|
||
LOGGER.Error(ex)
|
||
'bei einem Fehler einen Eintrag in der Logdatei erzeugen
|
||
LOGGER.Info("ExecuteonMSSQL.Execute Command - Error: " & ex.Message, True)
|
||
LOGGER.Info("Command-Befehl: " & Command.CommandText, True)
|
||
' DB-Connection schliessen
|
||
Me.CloseMssqlDb(Connection)
|
||
Return "ExecuteonMSSQL.Execute Command - Error: " & ex.Message
|
||
|
||
End Try
|
||
Else
|
||
' kann eintreten, wenn entweder die SQL-Anweisung falsch ist oder wenn die DataConnection nicht richtig aufgebaut werden konnte
|
||
' Eintrag in Logdatei machen
|
||
LOGGER.Info("ExecuteonMSSQL.SQL-Command ist ungültig. Command-Objekt konnte nicht erstellt werden")
|
||
Return "ExecuteonMSSQL.SQL-Command ist ungültig. Command-Objekt konnte nicht erstellt werden"
|
||
End If
|
||
Catch ex As Exception
|
||
LOGGER.Error(ex)
|
||
' an dieser Stelle sollte jeder unvorhergesehene Fehler der Funktion abgefangen werden
|
||
LOGGER.Info("ExecuteonMSSQL.Ein unbekannter Fehler in ExecuteonMSSQL - Error: " & ex.Message, True)
|
||
Return "ExecuteonMSSQL.Ein unbekannter Fehler in ExecuteonMSSQL - Error: " & ex.Message
|
||
End Try
|
||
|
||
End Function
|
||
Private Sub CloseMssqlDb(ByRef Connection As SqlConnection)
|
||
' wenn eine Datenbank-Connection aufgebaut ist
|
||
If Connection IsNot Nothing Then
|
||
' diese schliessen
|
||
Connection.Close()
|
||
Connection = Nothing
|
||
End If
|
||
|
||
End Sub
|
||
Public Function Move2Folder(ByVal vMove_File As String, ByVal vZiel_Pfad As String, Profile_ID As Integer, clsWD As ClassWindream_allgemein)
|
||
Try
|
||
|
||
Dim extension As String = IO.Path.GetExtension(vMove_File)
|
||
Dim Filename As String = IO.Path.GetFileName(vMove_File)
|
||
Dim path As String = IO.Path.GetDirectoryName(vMove_File)
|
||
Dim _Ziel As String
|
||
_Ziel = vZiel_Pfad & "\" & Filename
|
||
Dim version As Integer = 1
|
||
If vZiel_Pfad <> path Then
|
||
Dim Stammname As String = IO.Path.GetFileNameWithoutExtension(vMove_File)
|
||
Do While Check_File_exists(_Ziel, clsWD) = True
|
||
Dim neuername As String = Stammname & "~" & version & extension
|
||
_Ziel = neuername
|
||
version += 1
|
||
Loop
|
||
My.Computer.FileSystem.MoveFile(vMove_File, _Ziel)
|
||
LOGGER.Info("Datei erfolgreich verschoben - Ziel: " & _Ziel)
|
||
Else
|
||
LOGGER.Info("Ziel und Quellpfad sind identisch!")
|
||
End If
|
||
|
||
Return ""
|
||
Catch ex As Exception
|
||
LOGGER.Error(ex)
|
||
LOGGER.Info("Fehler bei Move2Folder", True)
|
||
LOGGER.Info("Fehlermeldung")
|
||
LOGGER.Info(ex.Message)
|
||
Return ex.Message
|
||
End Try
|
||
End Function
|
||
Public Function Check_File_exists(ByVal _file As String, clsWD As ClassWindream_allgemein)
|
||
Try
|
||
Return clsWD.CheckFileExists(_file)
|
||
Catch ex As Exception
|
||
LOGGER.Error(ex)
|
||
LOGGER.Info("Fehler in Funktion file_exists - Fehler: ", ex.Message)
|
||
Return False
|
||
End Try
|
||
End Function
|
||
Public Function CheckValue_Exists(sqlbefehl As String, Replace_value As String, Check_value As String, Typ As String, connString As String, profilid As Integer)
|
||
Try
|
||
Dim sql As String
|
||
Dim CONNTYPE As String
|
||
If connString <> "" Then
|
||
If connString.StartsWith("%MS") Then
|
||
CONNTYPE = "MS-SQL"
|
||
connString = connString.Replace("%MS", "")
|
||
ElseIf connString.StartsWith("%OR") Then
|
||
CONNTYPE = "ORACLE"
|
||
connString = connString.Replace("%OR", "")
|
||
End If
|
||
|
||
Dim sqlscalar = sqlbefehl
|
||
Select Case Typ
|
||
Case "INTEGER"
|
||
'@manValue
|
||
sqlscalar = sqlscalar.ToString.Replace(Replace_value, Check_value)
|
||
Case Else
|
||
sqlscalar = sqlscalar.ToString.Replace(Replace_value, "'" & Check_value & "'")
|
||
End Select
|
||
|
||
sql = sqlscalar
|
||
Dim ergebnis As Integer
|
||
If CONNTYPE = "ORACLE" Then
|
||
ergebnis = Execute_Scalar_Oracle(sql, connString, True)
|
||
Else
|
||
ergebnis = Execute_Scalar_SQLServer(sql, connString, True)
|
||
End If
|
||
|
||
Select Case ergebnis
|
||
Case 1
|
||
Return True
|
||
Case Else
|
||
Return False
|
||
End Select
|
||
End If
|
||
Catch ex As Exception
|
||
LOGGER.Error(ex)
|
||
MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error checkValue_Exists:")
|
||
LOGGER.Info(" - Unvorhergesehener Fehler bei checkValue_Exists - Fehler: " & vbNewLine & ex.Message)
|
||
Return False
|
||
End Try
|
||
End Function
|
||
|
||
Function Execute_Scalar_SQLServer(vsql_statement As String, vconnectionString As String, check As Boolean)
|
||
Try
|
||
Dim cnn As SqlConnection
|
||
cnn = New SqlConnection(vconnectionString)
|
||
Dim cmd As SqlCommand
|
||
cnn.Open()
|
||
cmd = New SqlCommand(vsql_statement, cnn)
|
||
If check = True Then
|
||
'ERgebnis muss immer 1 oder mehr ergeben
|
||
Dim count As Int32 = Convert.ToInt32(cmd.ExecuteScalar())
|
||
If count = 1 Then
|
||
cmd.Dispose()
|
||
cnn.Close()
|
||
Return 1
|
||
Else
|
||
cmd.Dispose()
|
||
cnn.Close()
|
||
Return 2
|
||
End If
|
||
Else
|
||
'Ergebnis
|
||
Dim ergebnis As String = cmd.ExecuteScalar()
|
||
Return ergebnis
|
||
End If
|
||
|
||
Catch ex As Exception
|
||
LOGGER.Error(ex)
|
||
MsgBox("Unexpected error Execute_Scalar_SQLServer" & vbNewLine & "Automatic Index (j/n): " & check.ToString & vbNewLine & "ERROR:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Unexpected error Execute_Scalar_SQL sql:")
|
||
LOGGER.Info(" - Unvorhergesehener Fehler bei Execute_Scalar_SQLServer" & vbNewLine & "Automatischer Index (j/n): " & check.ToString & vbNewLine & "Fehler: " & vbNewLine & ex.Message)
|
||
LOGGER.Info(" - SQL: " & vsql_statement)
|
||
LOGGER.Info(" - Connection: " & vconnectionString)
|
||
Return 99
|
||
End Try
|
||
End Function
|
||
Function Execute_Scalar_Oracle(vsql_statement As String, vconnectionString As String, check As Boolean)
|
||
Try
|
||
Dim cnn As System.Data.OleDb.OleDbConnection
|
||
cnn = New System.Data.OleDb.OleDbConnection(vconnectionString)
|
||
Dim cmd As System.Data.OleDb.OleDbCommand
|
||
cnn.Open()
|
||
cmd = New System.Data.OleDb.OleDbCommand(vsql_statement, cnn)
|
||
|
||
If check = True Then
|
||
'Ergebnis muss immer 1 oder mehr ergeben
|
||
Dim count As Int32 = Convert.ToInt32(cmd.ExecuteScalar())
|
||
If count = 1 Then
|
||
Return 1
|
||
Else
|
||
Return 2
|
||
End If
|
||
Else
|
||
'Ergebnis
|
||
Dim ergebnis As String = cmd.ExecuteScalar()
|
||
Return ergebnis
|
||
End If
|
||
|
||
cmd.Dispose()
|
||
cnn.Close()
|
||
Catch ex As Exception
|
||
LOGGER.Error(ex)
|
||
MsgBox("Unexpected error Execute_Scalar_Oracle" & vbNewLine & "Automatic Index (y/n): " & check.ToString & vbNewLine & "Error:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Unexpected error Execute_Scalar_oracle sql:")
|
||
LOGGER.Info(" - Unvorhergesehener Fehler bei Execute_Scalar_Oracle" & vbNewLine & "Automatischer Index (j/n): " & check.ToString & vbNewLine & "Fehler: " & vbNewLine & ex.Message)
|
||
LOGGER.Info(" - SQL: " & vsql_statement)
|
||
LOGGER.Info(" - Connection: " & vconnectionString)
|
||
Return 99
|
||
End Try
|
||
End Function
|
||
Public Shared Sub Save_Logfiles()
|
||
Try
|
||
Dim saveFileDialog1 As New SaveFileDialog()
|
||
If File.Exists(LOGCONFIG.LogFile) Then
|
||
saveFileDialog1.Filter = "log file|*.log"
|
||
saveFileDialog1.FileName = Path.GetFileName(LOGCONFIG.LogFile)
|
||
If saveFileDialog1.ShowDialog() = DialogResult.OK Then
|
||
If File.Exists(saveFileDialog1.FileName) Then
|
||
File.Delete(saveFileDialog1.FileName)
|
||
End If
|
||
File.Copy(LOGCONFIG.LogFile, saveFileDialog1.FileName)
|
||
End If
|
||
End If
|
||
|
||
If DEBUG = True Then
|
||
Dim oDebuglogFilename_only = Path.GetFileNameWithoutExtension(LOGCONFIG.LogFile) + "-Debug.log"
|
||
Dim oDebuglogFilename = LOGCONFIG.LogDirectory + "\" + oDebuglogFilename_only
|
||
If File.Exists(oDebuglogFilename) Then
|
||
saveFileDialog1.Filter = "log file|*.log"
|
||
saveFileDialog1.FileName = oDebuglogFilename_only
|
||
If saveFileDialog1.ShowDialog() = DialogResult.OK Then
|
||
If File.Exists(saveFileDialog1.FileName) Then
|
||
File.Delete(saveFileDialog1.FileName)
|
||
End If
|
||
File.Copy(oDebuglogFilename, saveFileDialog1.FileName)
|
||
End If
|
||
End If
|
||
End If
|
||
Dim oErrorlogFilename_only = Path.GetFileNameWithoutExtension(LOGCONFIG.LogFile) + "-Error.log"
|
||
Dim oErrorlogFilename = LOGCONFIG.LogDirectory + "\" + oErrorlogFilename_only
|
||
If File.Exists(oErrorlogFilename) Then
|
||
saveFileDialog1.Filter = "log file|*.log"
|
||
saveFileDialog1.FileName = oErrorlogFilename_only
|
||
If saveFileDialog1.ShowDialog() = DialogResult.OK Then
|
||
If File.Exists(saveFileDialog1.FileName) Then
|
||
File.Delete(saveFileDialog1.FileName)
|
||
End If
|
||
File.Copy(oErrorlogFilename, saveFileDialog1.FileName)
|
||
End If
|
||
End If
|
||
Dim oMSG = ClassAllgemeineFunktionen.GUI_LANGUAGE_INFO("ExportLogFiles_Result")
|
||
MsgBox(oMSG, MsgBoxStyle.Information, ADDITIONAL_TITLE)
|
||
Catch ex As Exception
|
||
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error saving log file")
|
||
End Try
|
||
End Sub
|
||
Public Shared Function NotNull(Of T)(value As Object, defaultValue As T) As T
|
||
If value Is Nothing OrElse Convert.IsDBNull(value) Then
|
||
Return defaultValue
|
||
End If
|
||
|
||
' Versuche den Wert in den gewünschten Typ zu konvertieren
|
||
Try
|
||
Return CType(value, T)
|
||
Catch ex As InvalidCastException
|
||
' Falls die Konvertierung fehlschlägt, gib den Default zurück
|
||
Return defaultValue
|
||
End Try
|
||
End Function
|
||
Public Shared Function NotNullNullable(Of T As Structure)(value As Object, defaultValue As Nullable(Of T)) As Nullable(Of T)
|
||
If value Is Nothing OrElse Convert.IsDBNull(value) Then
|
||
Return defaultValue
|
||
End If
|
||
Try
|
||
' Direkte Casts sind robust, wandeln aber DBNull nicht – das ist bereits oben abgefangen.
|
||
Return DirectCast(value, Nullable(Of T))
|
||
Catch
|
||
Try
|
||
' Fallback: in T casten und zu Nullable machen
|
||
Return New Nullable(Of T)(DirectCast(value, T))
|
||
Catch
|
||
Return defaultValue
|
||
End Try
|
||
End Try
|
||
End Function
|
||
Public Shared Function NotNullString(value As Object, defaultValue As Object) As String
|
||
If value Is Nothing OrElse Convert.IsDBNull(value) Then Return defaultValue
|
||
Return CStr(value)
|
||
End Function
|
||
|
||
Public Shared Function NotNullDate(value As Object, defaultValue As DateTime) As DateTime?
|
||
If value Is Nothing OrElse Convert.IsDBNull(value) Then Return defaultValue
|
||
Return DirectCast(value, DateTime)
|
||
End Function
|
||
Public Shared Function NewShortGuid() As String
|
||
' Neue GUID erzeugen
|
||
Dim g As Guid = Guid.NewGuid()
|
||
|
||
' In Base64 umwandeln
|
||
Dim b64 As String = Convert.ToBase64String(g.ToByteArray())
|
||
|
||
' Unerwünschte Zeichen ersetzen/entfernen
|
||
b64 = b64.Replace("=", "").Replace("+", "-").Replace("/", "_")
|
||
|
||
' Ergebnis zurückgeben
|
||
Return b64
|
||
End Function
|
||
End Class
|