RecordOrganizer/app/DD-Record-Organizer/ClassControlCommandsUI.vb
2017-10-04 10:19:12 +02:00

866 lines
46 KiB
VB.net

Imports DD_Record_Organizer.ClassDatabase
Imports DD_Record_Organizer.ClassControlBuilder
Imports DD_LIB_Standards
Public Class ClassControlCommandsUI
Private _CtrlBuilder As ClassControlBuilder
Private _AddAppointmentHandler As System.EventHandler
Private _AddFormDataHandler As System.EventHandler
Private _ContextMenuStrip As ContextMenuStrip
Private _isinsert As Boolean = False
Private _isedit As Boolean = False
Public Property IsInsert As Boolean
Get
Return _isinsert
End Get
Set(value As Boolean)
_isinsert = value
_CtrlBuilder.IsInsert = value
End Set
End Property
Public Property IsEdit As Boolean
Get
Return _isedit
End Get
Set(value As Boolean)
_isedit = value
_CtrlBuilder.IsEdit = value
End Set
End Property
''' <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()
_CtrlBuilder.MasterPanel.SuspendLayout()
Dim sw As New SW("LoadControls")
Dim SQL As String = String.Format("SELECT T.*, dbo.FNPMO_GET_CONTROL_CAPTION ('{2}', {3},T.CONTROL_ID) AS 'CAPTION' FROM VWPMO_CONTROL_SCREEN T WHERE T.SCREEN_ID = {0} AND T.FORM_ID = {1} AND T.CONTROL_VISIBLE = 1", CURRENT_SCREEN_ID, FormId, USER_LANGUAGE, CURRENT_SCREEN_ID)
Dim DT As DataTable = ClassDatabase.Return_Datatable(SQL, True)
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 = Get_Name_for_ControlID(dr.Item("CONTROL_PARENT_ID"), FormId)
parent = _CtrlBuilder.GetControlByName(parentname)
End If
Dim control As String
Select Case dr.Item("CTRLTYPE_ID")
Case 1 ' Label
_CtrlBuilder.AddLabel(dr.Item("CONTROL_ID"),
dr.Item("CONTROL_NAME"),
dr.Item("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)
control = "Label - " & dr.Item("CONTROL_ID")
Case 2 ' TextBox
_CtrlBuilder.AddTextBox(dr.Item("CONTROL_ID"),
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_REQUIRED"),
dr.Item("CONTROL_FORMAT_TYPE"),
dr.Item("CONTROL_AUTO_SUGGEST"),
False,
parent)
control = "Text - " & dr.Item("CONTROL_ID")
Case 3 ' ComboBox
_CtrlBuilder.AddComboBox(dr.Item("CONTROL_ID"),
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_READ_ONLY"),
dr.Item("CONTROL_SELECT_ONLY"),
dr.Item("CONTROL_REQUIRED"),
dr.Item("CONTROL_STATIC_LIST"),
dr.Item("CONTROL_SQLCOMMAND_1"),
parent)
Case 4 ' DateTimePicker
_CtrlBuilder.AddDateTimePicker(dr.Item("CONTROL_ID"),
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"),
dr.Item("CONTROL_READ_ONLY"),
dr.Item("CONTROL_REQUIRED"),
False,
parent)
control = "DatePicker - " & dr.Item("CONTROL_ID")
Case 5 ' GroupBox
_CtrlBuilder.AddGroupBox(dr.Item("CONTROL_ID"),
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)
control = "GroupBox - " & dr.Item("CONTROL_ID")
Case 6 ' PictureBox
_CtrlBuilder.AddPictureBox(dr.Item("CONTROL_ID"),
dr.Item("CONTROL_NAME"),
dr.Item("CTRLSCR_X_LOC"),
dr.Item("CTRLSCR_Y_LOC"),
dr.Item("CTRLSCR_WIDTH"),
dr.Item("CTRLSCR_HEIGHT"),
False,
dr.Item("CONTROL_READ_ONLY"),
dr.Item("CONTROL_REQUIRED"),
parent)
Case 7 ' DataGridView
_CtrlBuilder.AddDataGridView(dr.Item("CONTROL_ID"),
dr.Item("CONTROL_NAME"),
dr.Item("CTRLSCR_X_LOC"),
dr.Item("CTRLSCR_Y_LOC"),
dr.Item("CTRLSCR_WIDTH"),
dr.Item("CTRLSCR_HEIGHT"),
False,
dr.Item("CONTROL_READ_ONLY"),
dr.Item("CONTROL_REQUIRED"),
dr.Item("CONTROL_COL_NAME"),
parent)
control = "Datagridview - " & dr.Item("CONTROL_ID")
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_ID"),
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,
dr.Item("CONTROL_READ_ONLY"),
dr.Item("CONTROL_REQUIRED"),
parent)
control = "CheckBox - " & dr.Item("CONTROL_ID")
Case 8 ' Function AddAppointment
_CtrlBuilder.FunctionAddAppointment(dr.Item("CONTROL_ID"),
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
control = "Appointment - " & dr.Item("CONTROL_ID")
Case 9 ' Function AddFormData
_CtrlBuilder.FunctionAddFormData(dr.Item("CONTROL_ID"),
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
control = "AddFormData - " & dr.Item("CONTROL_ID")
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_ID"),
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,
dr.Item("CONTROL_READ_ONLY"),
dr.Item("CONTROL_REQUIRED"),
parent)
control = "Radiobutton - " & dr.Item("CONTROL_ID")
Case 12 'CheckedListBox
_CtrlBuilder.AddCheckedListBox(dr.Item("CONTROL_ID"),
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_READ_ONLY"),
dr.Item("CONTROL_REQUIRED"),
dr.Item("CONTROL_STATIC_LIST"),
dr.Item("CONTROL_SQLCOMMAND_1"),
parent)
control = "CheckedlistBox - " & dr.Item("CONTROL_ID")
Case 13 'CheckedListBox
_CtrlBuilder.AddListBox(dr.Item("CONTROL_ID"),
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_READ_ONLY"),
dr.Item("CONTROL_REQUIRED"),
dr.Item("CONTROL_STATIC_LIST"),
dr.Item("CONTROL_SQLCOMMAND_1"),
parent)
control = "Listbox - " & dr.Item("CONTROL_ID")
Case 14 'DataGridViewCheckable
_CtrlBuilder.AddDataGridViewCheckable(dr.Item("CONTROL_ID"),
dr.Item("CONTROL_NAME"),
dr.Item("CTRLSCR_X_LOC"),
dr.Item("CTRLSCR_Y_LOC"),
dr.Item("CTRLSCR_WIDTH"),
dr.Item("CTRLSCR_HEIGHT"),
False,
dr.Item("CTRLSCR_TAB_INDEX"),
dr.Item("CTRLSCR_TAB_STOP"),
dr.Item("CONTROL_READ_ONLY"),
dr.Item("CONTROL_REQUIRED"),
dr.Item("CONTROL_COL_NAME"),
parent)
control = "DataGridViewCheckable - " & dr.Item("CONTROL_ID")
End Select
' ContextMenuStrip zuweisen
' MasterDataID im ContextMenuStrip Speichern
If dr.Item("CTRLSCR_MASTER_DATA_ID") <> 0 Then
_CtrlBuilder.CurrentControl.ContextMenuStrip = _ContextMenuStrip
' Tag wird für ControlId verwendet, master data id bei rechtsklick herausfinden
'_CtrlBuilder.CurrentControl.Tag = dr.Item("CTRLSCR_MASTER_DATA_ID")
End If
Next
sw.Done()
_CtrlBuilder.MasterPanel.ResumeLayout()
End Sub
Function DeleteRecord(RecordID As Integer)
Return ClassHelper.DeleteRecord(RecordID)
End Function
Function SaveRecord(RecordID As Integer, FormID As Integer, Optional foreignRecordID As Integer = 0) As String
Try
Dim ADDED_WHO As String = USER_USERNAME
If LogErrorsOnly = False Then ClassLogger.Add(" >> (SaveRecord) Update RecordID: " & RecordID, False)
UpdateAllControls(FormID, RecordID, _CtrlBuilder.AllControls)
Return "Datensatz aktualisiert - " & Now
'End If
Catch ex As Exception
MsgBox("Unexpected Error in SaveRecord: " & ex.Message, MsgBoxStyle.Critical)
End Try
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 = DirectCast(ctrl.Tag, ClassControlMetadata).Id '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(CONTROL_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(CONTROL_ID, RecordID, CONTROL_VALUE, CURRENT_ENTITY_ID)
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 = USER_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}', CHANGED_WHO = '{1}' WHERE CONTROL_ID = {2} AND RECORD_ID = {3}", VALUE, USER_USERNAME, 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, USER_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 = USER_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)
Try
Dim sw As New SW("UpdateAllControls")
Dim del = String.Format("DELETE FROM TBPMO_CONTROL_VALUE_CHANGE_HISTORY WHERE UPPER(ADDED_WHO) = '{0}'", USER_USERNAME.ToUpper)
ClassDatabase.Execute_non_Query(del)
CURRENT_CHANGE_STEP += 1
Dim sel = String.Format("SELECT RECORD_ID, CONTROL_ID FROM VWPMO_VALUES WHERE RECORD_ID = {0}", RecordID)
Dim VALUE_EXISTS_DT As DataTable = ClassDatabase.Return_Datatable(sel, True)
For Each ctrl As Control In controls
Console.WriteLine("Updating Control " + ctrl.Name)
Dim CONTROL_ID As Integer = DirectCast(ctrl.Tag, ClassControlMetadata).Id 'GetControlID_for_RecordID(ctrl.Name, RecordID)
If LogErrorsOnly = False Then ClassLogger.Add(" >> CONTROL_ID: " & CONTROL_ID, False)
Dim CONTROL_VALUE As String = GetControlValue(ctrl)
Dim controltype = ctrl.GetType.ToString
If TypeOf ctrl Is PictureBox Then
Dim id As Integer = DirectCast(ctrl.Tag, ClassControlMetadata).Id 'GetControlID_for_Name(ctrl.Name, FormID)
UpsertImage(id, RecordID, ctrl.BackgroundImage)
Continue For
End If
If TypeOf ctrl Is GroupBox Then
Dim ctrls As Control.ControlCollection = DirectCast(ctrl, GroupBox).Controls
UpdateAllControls(FormID, RecordID, ctrls)
Continue For
End If
If TypeOf ctrl Is System.Windows.Forms.DataGridView Then
Dim id As Integer = DirectCast(ctrl.Tag, ClassControlMetadata).Id
UpdateMultipleValues(id, RecordID, CONTROL_VALUE)
Continue For
End If
' UpdateMultipleValues wird für diese Controls bereits beim CheckedChanged-Event ausgeführt
If TypeOf ctrl Is DevExpress.XtraGrid.GridControl Or TypeOf ctrl Is DevExpress.XtraEditors.CheckedListBoxControl Then
Continue For
End If
'Dim ValueExists = ClassDatabase.Execute_Scalar(String.Format("SELECT RECORD_ID FROM VWPMO_VALUES WHERE RECORD_ID = {0} AND CONTROL_ID = {1}", RecordID, CONTROL_ID))
Dim ValueExists = VALUE_EXISTS_DT.Select(String.Format("CONTROL_ID = {0}", CONTROL_ID))
Dim ValueChanged As Boolean = _CtrlBuilder.ControlsChanged.Contains(CONTROL_ID)
If Not ValueChanged Then
Continue For
End If
If ValueExists.Length = 0 Then ' Neues Control
'If CONTROL_ID = 995 Or CONTROL_ID = 996 Or CONTROL_ID = 997 Or CONTROL_ID = 810 Then
' Console.WriteLine("sdasd")
'End If
If LogErrorsOnly = False Then ClassLogger.Add(" >> InsertControlValue: " & CONTROL_ID & "|" & RecordID & "|" & CONTROL_VALUE, False)
If Not IsNothing(CONTROL_VALUE) Then
If TypeOf ctrl Is CustomComboBox And CONTROL_VALUE = "" Then
'Exit Sub - Zuviel des guten
Continue For
End If
If CONTROL_VALUE <> "" Then
InsertControlValue(CONTROL_ID, RecordID, CONTROL_VALUE, CURRENT_ENTITY_ID)
End If
End If
Else ' Update Control
If Not IsNothing(CONTROL_VALUE) Then
Dim sw2 As New SW("UpdateControlValue")
UpdateControlValue(CONTROL_ID, RecordID, CONTROL_VALUE, CURRENT_ENTITY_ID)
sw2.Done()
End If
End If
Next
sw.Done()
Catch ex As Exception
MsgBox("Unexpected Error in UpdateAllControls: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Public Shared Sub UpdateMultipleValues(ControlId As Integer, RecordId As Integer, value As String)
Try
Dim val = String.Format("SELECT VALUE FROM TBPMO_CONTROL_VALUE WHERE CONTROL_ID = {0} AND RECORD_ID = {1}", ControlId, RecordId)
Dim dt As DataTable = ClassDatabase.Return_Datatable(val, True)
If IsNothing(dt) Then
Exit Sub
End If
' Konvertiere datatable zu liste
Dim oldValues = dt.AsEnumerable().Select(Of String)(Function(r)
Return r.Item("VALUE")
End Function).ToList()
If IsNothing(value) And dt.Rows.Count = 0 Then
Exit Sub
End If
Dim values As New List(Of String)
If Not IsNothing(value) Then
values = New List(Of String)(value.Split(";"))
Else
values.Add("")
End If
'Dim values As New List(Of String)(value.Split(";"))
Dim AddValues = values.Except(oldValues)
Dim RemoveValues = oldValues.Except(values)
For Each _addValue As String In AddValues
If Not _addValue = "" Then
Dim converted_value = Check_and_Format_Value(ControlId, RecordId, _addValue)
If Not IsNothing(converted_value) Then
ClassControlCommandsUI.InsertControlValue(ControlId, RecordId, converted_value, CURRENT_ENTITY_ID)
'Dim ins = String.Format("INSERT INTO TBPMO_CONTROL_VALUE (CONTROL_ID, RECORD_ID, VALUE,ADDED_WHO) VALUES({0}, {1}, '{2}','{3}')", ControlId, RecordId, converted_value, USER_USERNAME)
'ClassDatabase.Execute_non_Query(ins)
'ClassProxy.PRPROXY_CONTROL_VALUE_UPD_INS(CURRENT_ENTITY_ID, ControlId, RecordId, converted_value)
End If
End If
Next
For Each v As String In RemoveValues
ClassDatabase.Execute_non_Query(String.Format("DELETE FROM TBPMO_CONTROL_VALUE WHERE CONTROL_ID = {0} AND RECORD_ID = {1} AND VALUE = '{2}'", ControlId, RecordId, v))
ClassProxy.PRPROXY_CONTROL_DEL(RecordId, CURRENT_ENTITY_ID, ControlId)
Next
Catch ex As Exception
MsgBox("Error in UpdateMultipleValues:" & vbNewLine & ex.Message)
End Try
End Sub
Public Shared Function GetControlValue(ctrl As Control) As String
Dim type = ctrl.GetType().Name
Dim CONTROL_ID As Integer = DirectCast(ctrl.Tag, ClassControlMetadata).Id ' GetControlID_for_RecordID(ctrl.Name, CURRENT_RECORD_ID)
If LogErrorsOnly = False Then ClassLogger.Add(" >> GetControlValue CONTROL_ID: " & CONTROL_ID, False)
Dim CONTROL_VALUE As String = Nothing
If LogErrorsOnly = False Then ClassLogger.Add(" >> type = " & type.ToString, False)
Select Case type
Case "TextBox"
Return DirectCast(ctrl, TextBox).Text
Case "CustomComboBox"
If LogErrorsOnly = False Then ClassLogger.Add(" >> Return Value: " & DirectCast(ctrl, CustomComboBox).Text, False)
Return DirectCast(ctrl, CustomComboBox).Text
Case "CheckBox"
Return DirectCast(ctrl, CheckBox).Checked.ToString()
Case "RadioButton"
Return DirectCast(ctrl, RadioButton).Checked.ToString()
Case "DateEdit"
Dim Value = DirectCast(ctrl, DevExpress.XtraEditors.DateEdit).EditValue
If IsDBNull(Value) Then
Return ""
Else
Return DirectCast(ctrl, DevExpress.XtraEditors.DateEdit).DateTime.ToString("yyyy-MM-dd")
End If
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)
Dim SQL_COMAMND = ClassDatabase.Execute_Scalar("SELECT UPPER(SQL_COMMAND_1) FROM TBPMO_CONTROL WHERE GUID = " & CONTROL_ID, True)
'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.ToString.Trim)
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
If SQL_COMAMND.ToString.StartsWith("SELECT [RECORD_ID]") Or SQL_COMAMND.ToString.StartsWith("SELECT [RECORD-ID]") Then
'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, True) = 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-Entry after 'deselect CheckedListBox' deleted", False)
End If
End If
End If
End If
Next
End If
'Für jeden gecheckten Eintrag den Record der Stammentität mit dem selektierten linken
Dim checked_result As New List(Of String)
Dim checked_result_string As String
If SQL_COMAMND.ToString.StartsWith("SELECT [RECORD_ID]") Or SQL_COMAMND.ToString.StartsWith("SELECT [RECORD-ID]") Then
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 rid = CInt(row(0))
Dim checked_value = row(1)
checked_result.Add(checked_value)
checked_result_string = String.Join(";", checked_result)
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, True) = 0 Then
If CURRENT_RECORD_ID = 0 Then
MsgBox("Attention: no current record Selected!", MsgBoxStyle.Exclamation)
Else
If ClassRecordCommands.ConnectRecord(CURRENT_RECORD_ID, CInt(row(0)), "CheckedListBox;" & ctrl.Name) = True Then
If LogErrorsOnly = False Then ClassLogger.Add(" >> Checked ListBox record '" & rid.ToString & "' was linked successfully.", False)
End If
End If
End If
End If
Catch ex As Exception
ClassLogger.Add("Error in CheckedListBoxGetControlValue: " & ex.Message, True)
End Try
Next
Else
For Each item As Object In DirectCast(ctrl, DevExpress.XtraEditors.CheckedListBoxControl).CheckedItems
Dim row As DataRowView = CType(item, DataRowView)
If row.DataView.Table.Columns.Count = 1 Then
Dim checked_value = row(0)
checked_result.Add(checked_value)
ElseIf row.DataView.Table.Columns.Count = 2 Then
Dim checked_value = row(1)
checked_result.Add(checked_value)
End If
checked_result_string = String.Join(";", checked_result)
Next
End If
' Hier wird ein String zurückgegeben, der als VALUE gespeichert werden soll
' Überspringt den Rest der funktion
If Not IsNothing(checked_result_string) Then
'Dim sql = String.Format("select count(*) from TBPMO_CONTROL_VALUE where CONTROL_ID = {0} and RECORD_ID = {1}", CONTROL_ID, CURRENT_RECORD_ID)
'If ClassDatabase.Execute_Scalar(sql) = 0 Then
' InsertControlValue(CONTROL_ID, CURRENT_RECORD_ID, "")
'End If
Return checked_result_string
Else
'In jedem Fall Nothing zurückgeben
Return Nothing
End If
Case "GridControl"
Dim chk_grid As DevExpress.XtraGrid.GridControl
chk_grid = DirectCast(ctrl, DevExpress.XtraGrid.GridControl)
Dim gridview As DevExpress.XtraGrid.Views.Grid.GridView = chk_grid.MainView
Dim SQL_COMAMND = ClassDatabase.Execute_Scalar("SELECT UPPER(SQL_COMMAND_1) FROM TBPMO_CONTROL WHERE GUID = " & CONTROL_ID, True)
Dim result As New List(Of String)
Dim result_string As String
For Each index As Integer In gridview.GetSelectedRows()
Dim fieldName As String = gridview.Columns(0).FieldName
Dim value As String = gridview.GetRowCellValue(index, fieldName)
result.Add(value)
Next
result_string = String.Join(";", result)
If Not IsNothing(result_string) Then
Return result_string
Else
Return Nothing
End If
Case "ListBoxControl"
Dim listbox As DevExpress.XtraEditors.ListBoxControl = DirectCast(ctrl, DevExpress.XtraEditors.ListBoxControl)
Return listbox.SelectedValue
Case "DataGridView"
Dim list As New List(Of String)
Dim dgv As DataGridView = DirectCast(ctrl, DataGridView)
For Each row As DataGridViewRow In dgv.Rows
Dim cell As DataGridViewCell = row.Cells(0)
If Not IsNothing(cell.Value) Then
list.Add(cell.Value)
End If
Next
Return String.Join(";", list)
Case Else
Return Nothing
End Select
End Function
Public Shared Function Check_and_Format_Value(ControlID As Integer, RecordID As Integer, Value As String)
Try
Dim expression As String
expression = "GUID = " & ControlID
Dim CONTROL_ROW() As DataRow
' Use the Select method to find all rows matching the filter.
CONTROL_ROW = CURRENT_TBPMO_CONTROL.Select(expression)
Dim i As Integer
Dim FORMAT_TYPE As String, CONTROL_TYPE As Integer
For i = 0 To CONTROL_ROW.GetUpperBound(0)
FORMAT_TYPE = CONTROL_ROW(i)("FORMAT_TYPE")
CONTROL_TYPE = CONTROL_ROW(i)("CONTROL_TYPE_ID")
Next
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
Select Case CONTROL_TYPE
Case 4
Dim oDate = ClassHelper.Convert_to_Database_Date(Value)
Value = oDate.ToString()
End Select
Return Value
Catch ex As Exception
MsgBox("Unexpected Error in Check_and_Format_Value: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
ClassLogger.Add("Unexpected Error in Check_and_Format_Value: " & ex.Message, True)
Return Nothing
End Try
End Function
Public Shared Function InsertControlValue(ControlID As Integer, RecordID As Integer, Value As String, ENTITY_ID As Integer)
Try
Dim AddedWho = USER_USERNAME
Dim converted_value = Check_and_Format_Value(ControlID, RecordID, Value)
If Not IsNothing(converted_value) Then
Dim ins As String = String.Format("INSERT INTO TBPMO_CONTROL_VALUE (CONTROL_ID, RECORD_ID, VALUE, ADDED_WHO) VALUES ({0}, {1}, '{2}', '{3}')", ControlID, RecordID, converted_value, AddedWho)
If LICENSE_PROXY = True Or clsDatabase.DB_PROXY_INITIALIZED = True Then
If ClassDatabase.Execute_non_Query(ins) = True Then
Return ClassProxy.PRPROXY_CONTROL_VALUE_UPD_INS(ENTITY_ID, ControlID, RecordID, converted_value)
Else
Return False
End If
Else
Return ClassDatabase.Execute_non_Query(ins)
End If
Else
Return False
End If
Catch ex As Exception
MsgBox("Unexpected Error in inserting Control-Value: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
ClassLogger.Add("Unexpected Error in inserting Control-Value: " & ex.Message, True)
Return False
End Try
End Function
Public Shared Function UpdateControlValue(ControlID As Integer, RecordID As Integer, Value As String, ENTITY_ID As Integer)
Try
Dim CHANGED_WHO = USER_USERNAME
Dim converted_value = Check_and_Format_Value(ControlID, RecordID, Value)
Dim def = "SELECT FORMAT_TYPE,CONTROL_TYPE_ID FROM TBPMO_CONTROL WHERE GUID = " & ControlID
Dim upd = String.Format("UPDATE TBPMO_CONTROL_VALUE SET VALUE = '{0}', CHANGED_WHO = '{1}', CHANGE_STEP = {2} WHERE CONTROL_ID = {3} AND RECORD_ID = {4}",
converted_value, CHANGED_WHO, CURRENT_CHANGE_STEP, ControlID, RecordID)
If LICENSE_PROXY = True Or clsDatabase.DB_PROXY_INITIALIZED = True Then
If ClassDatabase.Execute_non_Query(upd) = True Then
Return ClassProxy.PRPROXY_CONTROL_VALUE_UPD_INS(ENTITY_ID, ControlID, RecordID, converted_value)
Else
Return False
End If
Else
Return ClassDatabase.Execute_non_Query(upd)
End If
Catch ex As Exception
ClassLogger.Add("Unerwarteter Fehler in UpdateControlValue: " & ex.Message, True)
Return False
End Try
End Function
End Class