RecordOrganizer/app/DD-Record-Organiser/ClassControlCommandsUI.vb
2015-07-27 15:56:59 +02:00

828 lines
44 KiB
VB.net

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
''' <summary>
''' Erstellt eine neue Instanz der ClassControlCommandsUI Klasse
''' </summary>
''' <param name="ControlBuilder">Eine ControlBuilder Instanz</param>
''' <param name="AddAppointmentDelegate">Ein Delegate, der auf eine AddAppointment-Methode verweist, mit AddressOf verwenden</param>
''' <param name="AddFormDataDelegate">Ein Delegate, der auf eine AddFormData-Methode verweist, mit AddressOf verwenden</param>
''' <remarks></remarks>
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