Imports DD_Record_Organiser.ClassDatabase Imports DD_Record_Organiser.ClassControlBuilder Public Class ClassControlCommandsUI Private _CtrlBuilder As ClassControlBuilder Private _AddAppointmentHandler As System.EventHandler Private _AddFormDataHandler As System.EventHandler Private _ContextMenuStrip As ContextMenuStrip Public IsInsert As Boolean = False ''' ''' Erstellt eine neue Instanz der ClassControlCommandsUI Klasse ''' ''' Eine ControlBuilder Instanz ''' Ein Delegate, der auf eine AddAppointment-Methode verweist, mit AddressOf verwenden ''' Ein Delegate, der auf eine AddFormData-Methode verweist, mit AddressOf verwenden ''' Sub New(ControlBuilder As ClassControlBuilder, ContextMenuStrip As ContextMenuStrip, AddAppointmentDelegate As System.EventHandler, AddFormDataDelegate As System.EventHandler) _CtrlBuilder = ControlBuilder _ContextMenuStrip = ContextMenuStrip _AddAppointmentHandler = AddAppointmentDelegate _AddFormDataHandler = AddFormDataDelegate End Sub Sub LoadControls(FormId As Integer) _CtrlBuilder.ClearControls() Dim SQL As String = "SELECT * FROM VWPMO_CONTROL_SCREEN WHERE FORM_ID = " & FormId & " and SCREEN_ID = 1" Dim DT As DataTable = ClassDatabase.Return_Datatable(SQL) For Each dr As DataRow In DT.Rows Dim parent As GroupBox = Nothing If (dr.Item("CONTROL_PARENT_ID") <> 0) Then Dim parentname As String = GetName_for_ControlID(dr.Item("CONTROL_PARENT_ID"), FormId) parent = _CtrlBuilder.GetControlByName(parentname) End If Select Case dr.Item("CTRLTYPE_ID") Case 1 ' Label _CtrlBuilder.AddLabel(dr.Item("CONTROL_NAME"), dr.Item("CTRLSCR_CAPTION"), dr.Item("CTRLSCR_X_LOC"), dr.Item("CTRLSCR_Y_LOC"), dr.Item("CTRLSCR_FONT_FAMILY"), dr.Item("CTRLSCR_FONT_COLOR"), dr.Item("CTRLSCR_FONT_SIZE"), dr.Item("CTRLSCR_FONT_STYLE"), dr.Item("CONTROL_SQLCOMMAND_1"), False, parent) Case 2 ' TextBox _CtrlBuilder.AddTextBox(dr.Item("CONTROL_NAME"), dr.Item("CTRLSCR_X_LOC"), dr.Item("CTRLSCR_Y_LOC"), dr.Item("CTRLSCR_FONT_FAMILY"), dr.Item("CTRLSCR_FONT_COLOR"), dr.Item("CTRLSCR_FONT_SIZE"), dr.Item("CTRLSCR_FONT_STYLE"), dr.Item("CTRLSCR_TAB_INDEX"), dr.Item("CTRLSCR_TAB_STOP"), dr.Item("CTRLSCR_WIDTH"), dr.Item("CTRLSCR_HEIGHT"), dr.Item("CONTROL_MULTILINE"), dr.Item("CONTROL_READ_ONLY"), dr.Item("CONTROL_FORMAT_TYPE"), False, parent) Case 3 ' ComboBox _CtrlBuilder.AddComboBox(dr.Item("CONTROL_NAME"), dr.Item("CTRLSCR_X_LOC"), dr.Item("CTRLSCR_Y_LOC"), dr.Item("CTRLSCR_FONT_FAMILY"), dr.Item("CTRLSCR_FONT_COLOR"), dr.Item("CTRLSCR_FONT_SIZE"), dr.Item("CTRLSCR_FONT_STYLE"), dr.Item("CTRLSCR_TAB_INDEX"), dr.Item("CTRLSCR_TAB_STOP"), dr.Item("CTRLSCR_WIDTH"), dr.Item("CTRLSCR_HEIGHT"), dr.Item("CONTROL_FORMAT_TYPE"), False, dr.Item("CONTROL_STATIC_LIST"), dr.Item("CONTROL_SQLCOMMAND_1"), parent) Case 4 ' DateTimePicker _CtrlBuilder.AddDateTimePicker(dr.Item("CONTROL_NAME"), dr.Item("CTRLSCR_X_LOC"), dr.Item("CTRLSCR_Y_LOC"), dr.Item("CTRLSCR_FONT_FAMILY"), dr.Item("CTRLSCR_FONT_SIZE"), dr.Item("CTRLSCR_FONT_STYLE"), dr.Item("CTRLSCR_TAB_INDEX"), dr.Item("CTRLSCR_TAB_STOP"), dr.Item("CTRLSCR_WIDTH"), dr.Item("CTRLSCR_HEIGHT"), False, parent) Case 5 ' GroupBox _CtrlBuilder.AddGroupBox(dr.Item("CONTROL_NAME"), dr.Item("CTRLSCR_CAPTION"), dr.Item("CTRLSCR_X_LOC"), dr.Item("CTRLSCR_Y_LOC"), dr.Item("CTRLSCR_WIDTH"), dr.Item("CTRLSCR_HEIGHT"), dr.Item("CTRLSCR_BACK_COLOR"), dr.Item("CTRLSCR_FONT_COLOR"), dr.Item("CTRLSCR_FONT_FAMILY"), dr.Item("CTRLSCR_FONT_SIZE"), dr.Item("CTRLSCR_FONT_STYLE"), False, parent) Case 6 ' PictureBox _CtrlBuilder.AddPictureBox(dr.Item("CONTROL_NAME"), dr.Item("CTRLSCR_X_LOC"), dr.Item("CTRLSCR_Y_LOC"), dr.Item("CTRLSCR_WIDTH"), dr.Item("CTRLSCR_HEIGHT"), False, parent) Case 7 ' DataGridView _CtrlBuilder.AddDataGridView(dr.Item("CONTROL_NAME"), dr.Item("CTRLSCR_X_LOC"), dr.Item("CTRLSCR_Y_LOC"), dr.Item("CTRLSCR_WIDTH"), dr.Item("CTRLSCR_HEIGHT"), False, parent) Case 10 ' Checkbox Dim Checked As Boolean = False 'If IsDBNull(dr.Item("CONTROL_DEF_VALUE")) Then ' Checked = False 'Else ' Checked = StrToBool(dr.Item("CONTROL_DEF_VALUE")) 'End If _CtrlBuilder.AddCheckBox(dr.Item("CONTROL_NAME"), dr.Item("CTRLSCR_CAPTION"), Checked, dr.Item("CTRLSCR_X_LOC"), dr.Item("CTRLSCR_Y_LOC"), dr.Item("CTRLSCR_FONT_FAMILY"), dr.Item("CTRLSCR_FONT_COLOR"), dr.Item("CTRLSCR_FONT_SIZE"), dr.Item("CTRLSCR_FONT_STYLE"), dr.Item("CTRLSCR_TAB_INDEX"), dr.Item("CTRLSCR_TAB_STOP"), dr.Item("CTRLSCR_WIDTH"), dr.Item("CTRLSCR_HEIGHT"), False, parent) Case 8 ' Function AddAppointment _CtrlBuilder.FunctionAddAppointment(dr.Item("CONTROL_NAME"), dr.Item("CTRLSCR_CAPTION"), dr.Item("CTRLSCR_X_LOC"), dr.Item("CTRLSCR_Y_LOC"), dr.Item("CTRLSCR_WIDTH"), dr.Item("CTRLSCR_HEIGHT"), False, parent) AddHandler _CtrlBuilder.CurrentControl.Click, _AddAppointmentHandler Case 9 ' Function AddFormData _CtrlBuilder.FunctionAddFormData(dr.Item("CONTROL_NAME"), dr.Item("CTRLSCR_CAPTION"), dr.Item("CTRLSCR_X_LOC"), dr.Item("CTRLSCR_Y_LOC"), dr.Item("CTRLSCR_WIDTH"), dr.Item("CTRLSCR_HEIGHT"), False, parent) AddHandler _CtrlBuilder.CurrentControl.Click, _AddFormDataHandler Case 11 ' RadioButton Dim Checked As Boolean = False 'If IsDBNull(dr.Item("CONTROL_DEF_VALUE")) Then ' Checked = False 'Else ' Checked = StrToBool(dr.Item("CONTROL_DEF_VALUE")) 'End If _CtrlBuilder.AddRadioButton(dr.Item("CONTROL_NAME"), dr.Item("CTRLSCR_CAPTION"), Checked, dr.Item("CTRLSCR_X_LOC"), dr.Item("CTRLSCR_Y_LOC"), dr.Item("CTRLSCR_FONT_FAMILY"), dr.Item("CTRLSCR_FONT_COLOR"), dr.Item("CTRLSCR_FONT_SIZE"), dr.Item("CTRLSCR_FONT_STYLE"), dr.Item("CTRLSCR_TAB_INDEX"), dr.Item("CTRLSCR_TAB_STOP"), dr.Item("CTRLSCR_WIDTH"), dr.Item("CTRLSCR_HEIGHT"), False, parent) Case 12 'CheckedListBox CtrlBuilder.AddCheckedListBox(dr.Item("CONTROL_NAME"), dr.Item("CTRLSCR_X_LOC"), dr.Item("CTRLSCR_Y_LOC"), dr.Item("CTRLSCR_FONT_FAMILY"), dr.Item("CTRLSCR_FONT_COLOR"), dr.Item("CTRLSCR_FONT_SIZE"), dr.Item("CTRLSCR_FONT_STYLE"), dr.Item("CTRLSCR_TAB_INDEX"), dr.Item("CTRLSCR_TAB_STOP"), dr.Item("CTRLSCR_WIDTH"), dr.Item("CTRLSCR_HEIGHT"), False, dr.Item("CONTROL_STATIC_LIST"), dr.Item("CONTROL_SQLCOMMAND_1"), parent, True) Case 13 'CheckedListBox CtrlBuilder.AddListBox(dr.Item("CONTROL_NAME"), dr.Item("CTRLSCR_X_LOC"), dr.Item("CTRLSCR_Y_LOC"), dr.Item("CTRLSCR_FONT_FAMILY"), dr.Item("CTRLSCR_FONT_COLOR"), dr.Item("CTRLSCR_FONT_SIZE"), dr.Item("CTRLSCR_FONT_STYLE"), dr.Item("CTRLSCR_TAB_INDEX"), dr.Item("CTRLSCR_TAB_STOP"), dr.Item("CTRLSCR_WIDTH"), dr.Item("CTRLSCR_HEIGHT"), False, dr.Item("CONTROL_STATIC_LIST"), dr.Item("CONTROL_SQLCOMMAND_1"), parent, True) End Select ' ContextMenuStrip zuweisen ' MasterDataID im ContextMenuStrip Speichern If dr.Item("CTRLSCR_MASTER_DATA_ID") <> 0 Then _CtrlBuilder.CurrentControl.ContextMenuStrip = _ContextMenuStrip _CtrlBuilder.CurrentControl.Tag = dr.Item("CTRLSCR_MASTER_DATA_ID") End If Next End Sub Function DeleteRecord(RecordID As Integer) Dim sql As String = "DELETE FROM TBPMO_RECORD_CONNECT WHERE RECORD1_ID = " & RecordID & " OR RECORD2_ID = " & RecordID If ClassDatabase.Execute_non_Query(sql) = True Then sql = "DELETE FROM TBPMO_WORKFLOW_TASK WHERE RECORD_ID = " & RecordID If ClassDatabase.Execute_non_Query(sql) = True Then sql = "DELETE FROM TBPMO_CONTROL_VALUE WHERE RECORD_ID = " & RecordID If ClassDatabase.Execute_non_Query(sql) = True Then ' Delete der Controls erfolgreich ausgeführt, jetzt der Record sql = "DELETE FROM TBPMO_RECORD WHERE GUID = " & RecordID If ClassDatabase.Execute_non_Query(sql) = True Then Return True End If End If End If End If Return False End Function Function SaveRecord(RecordID As Integer, FormID As Integer, Optional foreignRecordID As Integer = 0) As String Dim ADDED_WHO As String = Environment.UserName Dim RECORD_ID As Integer If IsInsert Then If LogErrorsOnly = False Then ClassLogger.Add(">> (SaveRecord) Insert", False) ' Den Record erstellen If CreateRecord(FormID) = False Then IsInsert = False Return "ERROR - INSERT RECORD NOT SUCCESSFUL" End If ' Die eben erstellte RecordID holen RECORD_ID = GetLastRecord() ' Wenn gegeben, foreignrecordID mit Record verknüpfen If foreignRecordID > 0 Then If LogErrorsOnly = False Then ClassLogger.Add(">> foreignRecordID: " & foreignRecordID & "; Record-ID: " & RECORD_ID, False) ConnectRecord(foreignRecordID, RECORD_ID) End If ' Für angegebene Control Typen den Wert speichern InsertAllControls(FormID, RECORD_ID, _CtrlBuilder.AllControls) ' Status zurücksetzen IsInsert = False NEW_RECORD_ID = RECORD_ID CURRENT_RECORD_ID = RECORD_ID Return "Neuer Datensatz eingefügt - " & Now ElseIf IsInsert = False Then If LogErrorsOnly = False Then ClassLogger.Add(">> (SaveRecord) Update RecordID: " & RECORD_ID, False) UpdateAllControls(FormID, RecordID, _CtrlBuilder.AllControls) Return "Datensatz aktualisiert - " & Now End If End Function Private Sub InsertAllControls(FormID As Integer, RecordID As Integer, controls As Control.ControlCollection) For Each ctrl As Control In controls Dim CONTROL_ID As Integer = GetControlID_for_Name(ctrl.Name, FormID) Dim CONTROL_VALUE As String = Nothing If TypeOf ctrl Is PictureBox Then Dim id As Integer = GetControlID_for_Name(ctrl.Name, FormID) UpsertImage(id, RecordID, ctrl.BackgroundImage) Continue For End If ' Control existiert If CONTROL_ID <> -1 Then CONTROL_VALUE = GetControlValue(ctrl) End If If TypeName(ctrl).ToString = "DateEdit" Then CONTROL_VALUE = CDate(CONTROL_VALUE) End If 'If CONTROL_ID = 489 Then ' Console.WriteLine(TypeName(ctrl)) 'End If ' Kein Bekanntes Control oder Groupbox If IsNothing(CONTROL_VALUE) Then If TypeOf ctrl Is GroupBox Then InsertAllControls(FormID, RecordID, DirectCast(ctrl, GroupBox).Controls) End If Else InsertControlValue(ctrl.Name, FormID, RecordID, CONTROL_VALUE) End If Next End Sub Private Sub UpsertImage(ControlID As Integer, RecordID As Integer, image As Bitmap) Dim existsSQL As String = "SELECT GUID FROM TBPMO_CONTROL_IMAGE WHERE CONTROL_ID = " & ControlID & " AND RECORD_ID = " & RecordID Dim exists = ClassDatabase.Execute_Scalar(existsSQL) If IsNothing(exists) Then InsertImage(ControlID, RecordID, image) Else UpdateImage(ControlID, RecordID, image) End If End Sub Private Sub InsertImage(ControlID As Integer, RecordID As Integer, image As Bitmap) Try Dim bimage() As Byte Dim SQL As String = "INSERT INTO TBPMO_CONTROL_IMAGE (CONTROL_ID, RECORD_ID, IMG, ADDED_WHO) VALUES (@CONTROL_ID, @RECORD_ID, @IMG, @ADDED_WHO)" Dim conn As New SqlClient.SqlConnection(MyConnectionString) Dim cmd As New SqlClient.SqlCommand(SQL, conn) If IsNothing(image) Then DeleteImage(ControlID, RecordID) Exit Sub End If bimage = BitmapToByteArray(image) cmd.Parameters.Add("@CONTROL_ID", SqlDbType.Int).Value = ControlID cmd.Parameters.Add("@RECORD_ID", SqlDbType.Int).Value = RecordID cmd.Parameters.Add("@RECORDID", SqlDbType.Int).Value = RecordID cmd.Parameters.Add("@IMG", SqlDbType.VarBinary).Value = bimage cmd.Parameters.Add("@ADDED_WHO", SqlDbType.VarChar).Value = Environment.UserName conn.Open() cmd.ExecuteNonQuery() conn.Close() LinkImage(ControlID, RecordID) Catch ex As Exception MsgBox("Error in InsertImage: ", ex.Message, vbCritical) End Try End Sub Private Sub LinkImage(ControlID As Integer, RecordID As Integer) Try Dim SQL = String.Format("SELECT GUID FROM TBPMO_CONTROL_IMAGE WHERE CONTROL_ID = {0} AND RECORD_ID = {1}", ControlID, RecordID) Dim ImageID As Integer = ClassDatabase.Execute_Scalar(SQL) SQL = String.Format("SELECT GUID FROM TBPMO_CONTROL_VALUE WHERE CONTROL_ID = {0} AND RECORD_ID = {1}", ControlID, RecordID) Dim valueExists = ClassDatabase.Execute_Scalar(SQL) Dim VALUE = "%%" & ImageID.ToString & "%%" If valueExists Then SQL = String.Format("UPDATE TBPMO_CONTROL_VALUE SET VALUE = '{0}' WHERE CONTROL_ID = {1} AND RECORD_ID = {2}", VALUE, ControlID, RecordID) Else SQL = String.Format("INSERT INTO TBPMO_CONTROL_VALUE (RECORD_ID, CONTROL_ID, VALUE, ADDED_WHO) VALUES ({0}, {1}, '{2}', '{3}')", RecordID, ControlID, VALUE, Environment.UserName) End If ClassDatabase.Execute_non_Query(SQL) Catch ex As Exception MsgBox("Error in LinkImage: " & vbNewLine & ex.Message) End Try End Sub Private Sub UpdateImage(ControlID As Integer, RecordID As Integer, image As Bitmap) Try Dim bimage() As Byte Dim SQL As String = "UPDATE TBPMO_CONTROL_IMAGE SET IMG = @IMG, CHANGED_WHO = @CHANGED_WHO WHERE CONTROL_ID = @CONTROL_ID AND RECORD_ID = @RECORD_ID" Dim conn As New SqlClient.SqlConnection(MyConnectionString) Dim cmd As New SqlClient.SqlCommand(SQL, conn) If IsNothing(image) Then DeleteImage(ControlID, RecordID) Exit Sub End If bimage = BitmapToByteArray(image) cmd.Parameters.Add("@CONTROL_ID", SqlDbType.Int).Value = ControlID cmd.Parameters.Add("@RECORD_ID", SqlDbType.Int).Value = RecordID cmd.Parameters.Add("@RECORDID", SqlDbType.Int).Value = RecordID cmd.Parameters.Add("@IMG", SqlDbType.VarBinary).Value = bimage cmd.Parameters.Add("@CHANGED_WHO", SqlDbType.VarChar).Value = Environment.UserName conn.Open() cmd.ExecuteNonQuery() conn.Close() LinkImage(ControlID, RecordID) Catch ex As Exception MsgBox("Error in UpdateImage: ", ex.Message, vbCritical) End Try End Sub Private Sub DeleteImage(ControlID As Integer, RecordID As Integer) Try ' Delete Image Dim SQL = String.Format("DELETE FROM TBPMO_CONTROL_IMAGE WHERE CONTROL_ID = {0} AND RECORD_ID = {1}", ControlID, RecordID) Dim result = ClassDatabase.Execute_non_Query(SQL) ' Delete Value SQL = String.Format("DELETE FROM TBPMO_CONTROL_VALUE WHERE CONTROL_ID = {0} AND RECORD_ID = {1}", ControlID, RecordID) result = ClassDatabase.Execute_non_Query(SQL) Catch ex As Exception MsgBox("Fehler beim löschen des Bildes:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) End Try End Sub Private Sub UpdateAllControls(FormID As Integer, RecordID As Integer, controls As Control.ControlCollection) For Each ctrl As Control In controls Dim CONTROL_ID As Integer = GetControlID_for_RecordID(ctrl.Name, RecordID) Dim CONTROL_VALUE As String = Nothing If TypeOf ctrl Is PictureBox Then Dim id As Integer = GetControlID_for_Name(ctrl.Name, FormID) UpsertImage(id, RecordID, ctrl.BackgroundImage) Continue For End If ' Neues Control If CONTROL_ID = -1 Then CONTROL_VALUE = GetControlValue(ctrl) ' Kein Bekanntes Control oder Groupbox If IsNothing(CONTROL_VALUE) Then If TypeOf ctrl Is GroupBox Then Dim ctrls As Control.ControlCollection = DirectCast(ctrl, GroupBox).Controls UpdateAllControls(FormID, RecordID, ctrls) End If Else InsertControlValue(ctrl.Name, FormID, RecordID, CONTROL_VALUE) End If Else ' Control Updaten CONTROL_VALUE = GetControlValue(ctrl) ' Kein Bekanntes Control oder Groupbox If IsNothing(CONTROL_VALUE) Then If TypeOf ctrl Is GroupBox Then Dim ctrls As Control.ControlCollection = DirectCast(ctrl, GroupBox).Controls UpdateAllControls(FormID, RecordID, ctrls) End If Else UpdateControlValue(CONTROL_ID, RecordID, CONTROL_VALUE) End If End If Next End Sub Function GetControlValue(ctrl As Control) As String Dim type = ctrl.GetType().Name Dim CONTROL_ID As Integer = GetControlID_for_RecordID(ctrl.Name, CURRENT_RECORD_ID) Select Case type Case "TextBox" Return DirectCast(ctrl, TextBox).Text Case "ComboBox" Return DirectCast(ctrl, ComboBox).Text Case "CheckBox" Return DirectCast(ctrl, CheckBox).Checked.ToString() Case "RadioButton" Return DirectCast(ctrl, RadioButton).Checked.ToString() Case "DateEdit" Return DirectCast(ctrl, DevExpress.XtraEditors.DateEdit).DateTime.ToString("yyyy-MM-dd") Case "PictureBox" 'Return "PictureBox" 'Es ist egal was für ein String hier zurückgegeben wird, hauptsache nicht Nothing Case "CheckedListBoxControl" Dim chklbx As DevExpress.XtraEditors.CheckedListBoxControl chklbx = DirectCast(ctrl, DevExpress.XtraEditors.CheckedListBoxControl) 'TODO: Wenn keine Datasource vorhanden, angecheckte einträge als string speichern If (IsNothing(chklbx.DataSource)) Then Dim result As New List(Of String) Dim result_string As String For Each item As DevExpress.XtraEditors.Controls.CheckedListBoxItem In chklbx.CheckedItems result.Add(item.Value) Next result_string = String.Join(";", result) ' Hier wird ein String zurückgegeben, der als VALUE gespeichert werden soll ' Überspringt den Rest der funktion Return result_string End If 'Alle Recorddatensätze durchlaufen und überprüfen ob nicht angehakt 'Wenn nicht angehakt dann Record löschen Dim index As Integer = 0 For i As Integer = 0 To chklbx.ItemCount - 1 Dim item = chklbx.GetItem(i) Dim row As DataRowView = CType(item, DataRowView) If chklbx.GetItemCheckState(i) = 0 Then If CInt(row(0)) > 0 Then 'Überprüfen ob es den Record gibt Dim SQL = "SELECT COUNT(*) FROM TBPMO_RECORD_CONNECT WHERE RECORD1_ID = " & CURRENT_RECORD_ID & " AND RECORD2_ID = " & CInt(row(0)) If ClassDatabase.Execute_Scalar(SQL) = 1 Then SQL = "DELETE FROM TBPMO_RECORD_CONNECT WHERE RECORD1_ID = " & CURRENT_RECORD_ID & " AND RECORD2_ID = " & CInt(row(0)) If ClassDatabase.Execute_non_Query(SQL) = True Then If LogErrorsOnly = False Then ClassLogger.Add(">> TBPMO_RECORD_CONNECT-Eintrag nach Deselect CheckedListBox gelöscht", False) End If End If End If End If Next 'Für jeden gecheckten Eintrag den Record der Stammentität mit dem selektierten linken For Each item As Object In DirectCast(ctrl, DevExpress.XtraEditors.CheckedListBoxControl).CheckedItems Dim row As DataRowView = CType(item, DataRowView) Try If CInt(row(0)) > 0 Then Dim SQL = "SELECT COUNT(*) FROM TBPMO_RECORD_CONNECT WHERE RECORD1_ID = " & CURRENT_RECORD_ID & " AND RECORD2_ID = " & CInt(row(0)) If ClassDatabase.Execute_Scalar(SQL) = 0 Then ConnectRecord(CURRENT_RECORD_ID, CInt(row(0)), "CheckedListBox;" & ctrl.Name) End If End If Catch ex As Exception ClassLogger.Add("Error in CheckedListBoxGetControlValue: " & ex.Message, True) End Try Next 'In jedem Fall Nothing zurückgeben Return Nothing Case "ListBoxControl" Dim listbox As DevExpress.XtraEditors.ListBoxControl = DirectCast(ctrl, DevExpress.XtraEditors.ListBoxControl) Return listbox.SelectedValue Case Else Return Nothing End Select End Function Function InsertControlValue(ControlName As String, FormID As Integer, RecordID As Integer, Value As String) Try Dim ControlID = GetControlID_for_Name(ControlName, FormID) Dim AddedWho = Environment.UserName Dim FORMAT_TYPE As String = ClassDatabase.Execute_Scalar("SELECT FORMAT_TYPE FROM TBPMO_CONTROL WHERE GUID = " & ControlID) Try Select Case FORMAT_TYPE Case "Currency" If Not Value = String.Empty Then Value = Decimal.Parse(Value, Globalization.NumberStyles.Currency).ToString End If Case "Decimal" If Not Value = String.Empty Then Value = Decimal.Parse(Value, Globalization.NumberStyles.Integer) End If End Select Catch ex As Exception ClassLogger.Add("Unerwarteter Fehler in Insert ConvertValue to Format'" & FORMAT_TYPE & "': " & ex.Message, True) End Try If ControlID = 489 Then Console.WriteLine(Value) End If Dim SQL = "INSERT INTO TBPMO_CONTROL_VALUE (CONTROL_ID, RECORD_ID, VALUE, ADDED_WHO) VALUES (" & ControlID & ", " & RecordID & ", '" & Value & "', '" & AddedWho & "')" Return ClassDatabase.Execute_non_Query(SQL, True) Catch ex As Exception ClassLogger.Add("Unerwarteter Fehler in InsertControlValue: " & ex.Message, True) Return False End Try End Function Public Shared Function UpdateControlValue(ControlID As Integer, RecordID As Integer, Value As String) Try Dim CHANGED_WHO = Environment.UserName Dim FORMAT_TYPE As String = ClassDatabase.Execute_Scalar("SELECT FORMAT_TYPE FROM TBPMO_CONTROL WHERE GUID = " & ControlID) Try If Not Value = String.Empty Then Select Case FORMAT_TYPE Case "Currency" Value = Decimal.Parse(Value, Globalization.NumberStyles.Currency).ToString Case "Decimal" Value = Decimal.Parse(Value, Globalization.NumberStyles.Integer) End Select End If Catch ex As Exception ClassLogger.Add("Unerwarteter Fehler in Update ConvertValue to Format'" & FORMAT_TYPE & "': " & ex.Message, True) End Try Dim SQL As String = "UPDATE TBPMO_CONTROL_VALUE SET VALUE = '" & Value & "', CHANGED_WHO = '" & CHANGED_WHO & "' WHERE CONTROL_ID = " & ControlID & " AND RECORD_ID = " & RecordID Return ClassDatabase.Execute_non_Query(SQL, True) Catch ex As Exception ClassLogger.Add("Unerwarteter Fehler in UpdateControlValue: " & ex.Message, True) Return False End Try End Function Public Shared Function CreateRecord(FormID) Dim ADDED_WHO As String = Environment.UserName Dim SQL = "INSERT INTO TBPMO_RECORD(ADDED_WHO, FORM_ID) VALUES ('" & ADDED_WHO & "', " & FormID & ")" Return ClassDatabase.Execute_non_Query(SQL) End Function Public Shared Function GetLastRecord() Dim ADDED_WHO As String = Environment.UserName Dim SQL = "SELECT (MAX(GUID)) FROM TBPMO_RECORD where ADDED_WHO = '" & ADDED_WHO & "'" Return ClassDatabase.Execute_Scalar(SQL, True) End Function Public Shared Function ConnectRecord(foreignRecordID As Integer, recordID As Integer, Optional Comment As String = "") Dim ADDED_WHO As String = Environment.UserName Dim SQL = "INSERT INTO TBPMO_RECORD_CONNECT(RECORD1_ID,RECORD2_ID,COMMENT,ADDED_WHO) VALUES (" & foreignRecordID & "," & recordID & ",'" & Comment & "','" & ADDED_WHO & "')" If LogErrorsOnly = False Then ClassLogger.Add(">> ConnectRecord SQL: " & SQL, False) Return ClassDatabase.Execute_non_Query(SQL) End Function 'Function SaveRecord_OLD(RecordID As Integer, FormID As Integer, Optional foreignRecordID As Integer = 0) As String ' Try ' Dim SQL As String ' Dim RECORD_ID As Integer ' Dim ADDED_WHO As String = Environment.UserName ' Dim CHANGED_WHO As String = Environment.UserName ' If IsInsert = True Then ' If LogErrorsOnly = False Then ClassLogger.Add(">> (SaveRecord) Insert", False) ' ' Create the record first ' SQL = "INSERT INTO TBPMO_RECORD(ADDED_WHO, FORM_ID) VALUES ('" & ADDED_WHO & "', " & FormID & ")" ' If ClassDatabase.Execute_non_Query(SQL) = False Then ' IsInsert = False ' Return "ERROR - INSERT RECORD NOT SUCCESSFUL" ' End If ' ' Get last RecordID ' SQL = "SELECT (MAX(GUID)) FROM TBPMO_RECORD where ADDED_WHO = '" & ADDED_WHO & "'" ' RECORD_ID = ClassDatabase.Execute_Scalar(SQL) ' 'Den Record Connecten ' If foreignRecordID > 0 Then ' If LogErrorsOnly = False Then ClassLogger.Add(">> foreignRecordID: " & foreignRecordID & "; Record-ID: " & RECORD_ID, False) ' SQL = "INSERT INTO TBPMO_RECORD_CONNECT(RECORD1_ID,RECORD2_ID,ADDED_WHO) VALUES (" & foreignRecordID & "," & RECORD_ID & ",'" & ADDED_WHO & "')" ' If LogErrorsOnly = False Then ClassLogger.Add(">> SQL: " & SQL, False) ' ClassDatabase.Execute_non_Query(SQL) ' End If ' 'ThisRecordID = RECORD_ID ' 'MsgBox(formid) ' 'Save Each Value from Controls into CONTROL_VALUE ' 'For Each ctrl As Control In pnl.Controls ' Dim VALUE ' For Each ctrl As Control In _CtrlBuilder.AllControls ' Dim CONTROL_ID As Integer = GetControlID_for_Name(ctrl.Name, FormID) ' If CONTROL_ID <> -1 And TypeOf ctrl Is TextBox Or TypeOf ctrl Is ComboBox Then ' VALUE = ctrl.Text ' 'If TypeOf ctrl Is ComboBox Then ' ' Dim cmb = DirectCast(ctrl, ComboBox) ' ' If cmb.DataSource Is Nothing = False Then ' ' Dim bs As BindingSource = DirectCast(cmb.DataSource, BindingSource) ' ' Dim dt As DataTable = DirectCast(bs.DataSource, DataTable) ' ' BindingSource_Check_Content_Insert(bs, cmb.DisplayMember.ToString, cmb.Text) ' ' ' MsgBox(dt.TableName.ToString & vbNewLine & cmb.DisplayMember.ToString) ' ' End If ' 'End If ' ElseIf CONTROL_ID <> -1 And TypeOf ctrl Is CheckBox Then ' 'If CONTROL_ID = -1 Then ' Dim chk As CheckBox ' chk = DirectCast(ctrl, CheckBox) ' VALUE = chk.Checked ' CONTROL_ID = GetControlID_for_Name(ctrl.Name, FormID) ' 'End If ' ElseIf CONTROL_ID <> -1 And TypeOf ctrl Is RadioButton Then ' Dim radio As RadioButton ' radio = DirectCast(ctrl, RadioButton) ' VALUE = radio.Checked ' CONTROL_ID = GetControlID_for_Name(ctrl.Name, FormID) ' End If ' 'Jetzt der Insert ' SQL = "INSERT INTO TBPMO_CONTROL_VALUE(CONTROL_ID, RECORD_ID, VALUE, ADDED_WHO) VALUES (" & CONTROL_ID & ", " & RECORD_ID & ", '" & VALUE & "', '" & ADDED_WHO & "')" ' ClassDatabase.Execute_non_Query(SQL) ' Next ' ' Reset insert after INSERT ' IsInsert = False ' 'tsstatus_Detail_show(True, "Neuer Datensatz eingefügt - " & Now) ' NEW_RECORD_ID = RECORD_ID ' CURRENT_RECORD_ID = RECORD_ID ' Return "Neuer Datensatz eingefügt - " & Now ' Else ' If LogErrorsOnly = False Then ClassLogger.Add(">> (SaveRecord) Update RecordID: " & RECORD_ID, False) ' For Each ctrl As Control In _CtrlBuilder.AllControls ' Dim CONTROL_ID = GetControlID_for_RecordID(ctrl.Name, RecordID) ' Dim value_akt = ClassDatabase.Execute_Scalar("SELECT VALUE FROM TBPMO_CONTROL_VALUE WHERE CONTROL_ID = " & CONTROL_ID & " AND RECORD_ID = " & RecordID) ' Console.WriteLine(CONTROL_ID.ToString & " - " & ctrl.Name) ' If CONTROL_ID = -1 And (TypeOf ctrl Is TextBox Or TypeOf ctrl Is ComboBox) Then ' ' Trying to save a value for a new value ' Dim VALUE = ctrl.Text ' CONTROL_ID = GetControlID_for_Name(ctrl.Name, FormID) ' SQL = "INSERT INTO TBPMO_CONTROL_VALUE (CONTROL_ID, RECORD_ID, VALUE, ADDED_WHO) VALUES (" & CONTROL_ID & ", " & RecordID & ", '" & VALUE & "', '" & ADDED_WHO & "')" ' If ClassDatabase.Execute_non_Query(SQL) = False Then ' Throw New Exception("Error while inserting new value for Control " & ctrl.Name & "!") ' End If ' ElseIf TypeOf ctrl Is TextBox Or TypeOf ctrl Is ComboBox Then ' Dim VALUE = ctrl.Text ' If value_akt <> VALUE Then ' 'If TypeOf ctrl Is ComboBox Then ' ' Dim cmb = DirectCast(ctrl, ComboBox) ' ' If cmb.DataSource Is Nothing = False Then ' ' Dim bs As BindingSource = DirectCast(cmb.DataSource, BindingSource) ' ' BindingSource_Check_Content_Insert(bs, cmb.DisplayMember.ToString, cmb.Text) ' ' End If ' 'End If ' SQL = "UPDATE TBPMO_CONTROL_VALUE SET VALUE = '" & VALUE & "', CHANGED_WHO = '" & CHANGED_WHO & "' WHERE CONTROL_ID = " & CONTROL_ID & " AND RECORD_ID = " & RecordID ' If ClassDatabase.Execute_non_Query(SQL) = False Then ' Throw New Exception("Error while updating the value for Control " & ctrl.Name & "!") ' End If ' End If ' ElseIf CONTROL_ID = -1 And (TypeOf ctrl Is DevExpress.XtraEditors.DateEdit) Then ' Dim date_ctrl As DevExpress.XtraEditors.DateEdit = DirectCast(ctrl, DevExpress.XtraEditors.DateEdit) ' Dim VALUE As String = date_ctrl.DateTime.ToString("yyyy-MM-dd") ' CONTROL_ID = GetControlID_for_Name(date_ctrl.Name, FormID) ' SQL = "INSERT INTO TBPMO_CONTROL_VALUE (CONTROL_ID, RECORD_ID, VALUE, ADDED_WHO) VALUES (" & CONTROL_ID & ", " & RecordID & ", '" & VALUE & "', '" & ADDED_WHO & "')" ' If ClassDatabase.Execute_non_Query(SQL) = False Then ' Throw New Exception("Error while inserting new value for Control " & ctrl.Name & "!") ' End If ' ElseIf TypeOf ctrl Is DevExpress.XtraEditors.DateEdit Then ' Dim date_ctrl As DevExpress.XtraEditors.DateEdit = DirectCast(ctrl, DevExpress.XtraEditors.DateEdit) ' Dim VALUE As String = date_ctrl.DateTime.ToString("yyyy-MM-dd") ' If value_akt <> VALUE Then ' SQL = "UPDATE TBPMO_CONTROL_VALUE SET VALUE = '" & VALUE & "', CHANGED_WHO = '" & CHANGED_WHO & "' WHERE CONTROL_ID = " & CONTROL_ID & " AND RECORD_ID = " & RecordID ' If ClassDatabase.Execute_non_Query(SQL) = False Then ' Throw New Exception("Error while updating the value for Control " & ctrl.Name & "!") ' End If ' End If ' ElseIf TypeOf ctrl Is CheckBox Then ' If CONTROL_ID = -1 Then ' Dim chk As CheckBox ' chk = DirectCast(ctrl, CheckBox) ' Dim VALUE = chk.Checked ' CONTROL_ID = GetControlID_for_Name(ctrl.Name, FormID) ' SQL = "INSERT INTO TBPMO_CONTROL_VALUE (CONTROL_ID, RECORD_ID, VALUE, ADDED_WHO) VALUES (" & CONTROL_ID & ", " & RecordID & ", '" & VALUE & "', '" & ADDED_WHO & "')" ' If ClassDatabase.Execute_non_Query(SQL) = False Then ' Throw New Exception("Error while inserting new value for Control " & ctrl.Name & "!") ' End If ' Else ' Dim chk As CheckBox ' chk = DirectCast(ctrl, CheckBox) ' Dim VALUE = chk.Checked ' SQL = "UPDATE TBPMO_CONTROL_VALUE SET VALUE = '" & VALUE & "', CHANGED_WHO = '" & CHANGED_WHO & "' WHERE CONTROL_ID = " & CONTROL_ID & " AND RECORD_ID = " & RecordID ' If ClassDatabase.Execute_non_Query(SQL) = False Then ' Throw New Exception("Error while update new value for Control " & ctrl.Name & "!") ' End If ' End If ' ElseIf TypeOf ctrl Is RadioButton Then ' If CONTROL_ID = -1 Then ' Dim radio As RadioButton = DirectCast(ctrl, RadioButton) ' Dim VALUE As String = radio.Checked ' CONTROL_ID = GetControlID_for_Name(ctrl.Name, FormID) ' SQL = "INSERT INTO TBPMO_CONTROL_VALUE (CONTROL_ID, RECORD_ID, VALUE, ADDED_WHO) VALUES (" & CONTROL_ID & ", " & RecordID & ", " & VALUE & ", " & ADDED_WHO & ")" ' If ClassDatabase.Execute_non_Query(SQL) = False Then ' Throw New Exception("Error while inserting new value for Control " & ctrl.Name & "!") ' End If ' Else ' Dim radio As RadioButton = DirectCast(ctrl, RadioButton) ' Dim value As String = radio.Checked ' CONTROL_ID = GetControlID_for_Name(ctrl.Name, FormID) ' SQL = "UPDATE TBPMO_CONTROL_VALUE SET VALUE = '" & value & "', CHANGED_WHO = '" & CHANGED_WHO & "' WHERE CONTROL_ID = " & CONTROL_ID & " AND RECORD_ID = " & RecordID ' If ClassDatabase.Execute_non_Query(SQL) = False Then ' Throw New Exception("Error while update new value for Control " & ctrl.Name & "!") ' End If ' End If ' End If ' Next ' 'tsstatus_Detail_show(True, "Datensatz aktualisiert - " & Now) ' Return "Datensatz aktualisiert - " & Now ' End If ' Catch ex As Exception ' MsgBox("Error in SaveRecord:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) ' IsInsert = False ' Return "Error in SaveRecord" ' End Try 'End Function End Class