From 31063ef93c19b31fec82165f14539e62da9fa14b Mon Sep 17 00:00:00 2001 From: JenneJ Date: Thu, 28 Apr 2016 16:49:08 +0200 Subject: [PATCH] jj 28.04.16 --- .../ClassControlBuilder.vb | 6 +- app/DD-Record-Organiser/ClassControlValues.vb | 69 +++++++++++-------- .../frmConstructor_Main.resx | 12 ++-- .../frmConstructor_Main.vb | 4 +- 4 files changed, 55 insertions(+), 36 deletions(-) diff --git a/app/DD-Record-Organiser/ClassControlBuilder.vb b/app/DD-Record-Organiser/ClassControlBuilder.vb index 9f317e6..10cc35a 100644 --- a/app/DD-Record-Organiser/ClassControlBuilder.vb +++ b/app/DD-Record-Organiser/ClassControlBuilder.vb @@ -158,7 +158,9 @@ Public Class ClassControlBuilder Continue For End If + ' Versuchen, die RecordId zu ersetzen, falls eine existiert sqlcommand = sqlcommand.ToUpper.Replace("@RECORD_ID", CURRENT_RECORD_ID) + ' ControlId Platzhalter suchen und ersetzen Dim regex As New System.Text.RegularExpressions.Regex("(@(\d+)@)") Dim match As System.Text.RegularExpressions.Match = regex.Match(sqlcommand) If match.Success Then @@ -169,13 +171,15 @@ Public Class ClassControlBuilder Dim dependingControl As Control = panel.Controls.OfType(Of Control)().Where(Function(c As Control) Return DirectCast(c.Tag, ClassControlMetadata).Id = dependingControlId End Function).SingleOrDefault() - + ' Wir ersetzen den platzhalter im sql command mit dem übergebenen wert sqlcommand = sqlcommand.Replace(match.Groups(1).Value, value) If LogErrorsOnly = False Then ClassLogger.Add(" >> " & String.Format("Executing SQL_COMMAND: '{0}' for controlID '{1}'", sqlcommand, dependingControlId)) + ' Jetzt wird das SQL Command ausgeführt, es MUSS einen Boolschen Wert zurückgeben, True, False, 0, 1 Dim dt As DataTable = ClassDatabase.Return_Datatable(sqlcommand) Dim type = dependingControl.GetType().Name If dt.Rows.Count = 1 Then + ' Jetzt können wir das dependingControl enablen/disablen Select Case type Case "DateEdit" Try diff --git a/app/DD-Record-Organiser/ClassControlValues.vb b/app/DD-Record-Organiser/ClassControlValues.vb index 61e1628..cb7bb06 100644 --- a/app/DD-Record-Organiser/ClassControlValues.vb +++ b/app/DD-Record-Organiser/ClassControlValues.vb @@ -411,8 +411,9 @@ Public Class ClassControlValues ClassLogger.Add("Enable_Depending_Controls: Control.ControlCollection is unexpected empty!") Exit Sub End If - Dim SQL As String = String.Format("select GUID,SQL_COMMAND_2 from TBPMO_CONTROL where FORM_ID = {0} AND SQL_COMMAND_2 IS NOT NULL " _ - & "AND LEN(SQL_COMMAND_2) > 10 AND SQL_COMMAND_2 LIKE '%@%@%", FormId) + ' Alle Controls finden, die Abhängigkeiten haben + Dim SQL As String = String.Format("select GUID,NAME,SQL_COMMAND_2 from TBPMO_CONTROL where FORM_ID = {0} AND SQL_COMMAND_2 IS NOT NULL " _ + & "AND LEN(SQL_COMMAND_2) > 10 AND SQL_COMMAND_2 LIKE '%@%@%'", FormId) Dim SW As Stopwatch = Stopwatch.StartNew() Dim commands As New List(Of String) Dim dt As DataTable = ClassDatabase.Return_Datatable(SQL) @@ -421,35 +422,47 @@ Public Class ClassControlValues Exit Sub End If - For Each Ctrl As Control In controls - Dim controlTagId = DirectCast(Ctrl.Tag, ClassControlMetadata).Id - Dim row As DataRow = dt.Select(String.Format("CONTROL_ID={0}", controlTagId)).FirstOrDefault() + For Each row As DataRow In dt.Rows + Dim DependingControlId As Integer = row.Item("GUID") + Dim DependingControlSQL As String = row.Item("SQL_COMMAND_2") + Dim DependingControl As Control = controls.OfType(Of Control)().Where(Function(c As Control) + Return DirectCast(c.Tag, ClassControlMetadata).Id = DependingControlId + End Function).SingleOrDefault() + + Dim regex As New System.Text.RegularExpressions.Regex("(@(\d+)@)") + Dim match As System.Text.RegularExpressions.Match = regex.Match(DependingControlSQL) + + If match.Success Then + ' Wir suchen aus dem SQL Befehl die ControlId heraus, + ' von dem das aktuelle Control abhängt + Dim otherControlId As Integer + Integer.TryParse(match.Groups(2).Value, otherControlId) + ' Jetzt suchen wir das Control, das zu dieser ControlId passt + Dim otherControl As Control = controls.OfType(Of Control)().Where(Function(c As Control) + Return DirectCast(c.Tag, ClassControlMetadata).Id = otherControlId + End Function).SingleOrDefault() + Dim otherControlType As String = otherControl.GetType().Name + + ' Jetzt holen wir uns den Wert von dem 'OtherControl' + ' und geben seinen Value zusammen mit dem dependingControl weiter + Dim value As Object + + Select Case otherControlType + Case "CheckBox" + value = DirectCast(otherControl, CheckBox).Checked + Case "TextBox" + value = DirectCast(otherControl, TextBox).Text + Case "CustomComboBox" + value = DirectCast(otherControl, CustomComboBox).SelectedText + Case "DateEdit" + value = DirectCast(otherControl, DevExpress.XtraEditors.DateEdit).EditValue + End Select + + CtrlBuilder.Enable_Controls(DependingControl, dt, value) - If IsNothing(row) Then - Continue For End If - - Dim connID = row.Item("CONTROL_CONNID_1") - Dim sqlcommand As String = row.Item("SQL") - - - sqlcommand = ReplaceSqlCommandPlaceholders(sqlcommand, RecordId, ParentRecordId, entity_ID) - - Select Case Ctrl.GetType() - Case GetType(CustomComboBox) - Dim combobox = DirectCast(Ctrl, CustomComboBox) - ControlLoader.Combobox.LoadList(combobox, FormId, connID, sqlcommand) - - Case GetType(DevExpress.XtraEditors.ListBoxControl) - Dim listbox = DirectCast(Ctrl, DevExpress.XtraEditors.ListBoxControl) - ControlLoader.ListBox.LoadList(listbox, FormId, connID, sqlcommand) - - Case GetType(DevExpress.XtraEditors.CheckedListBoxControl) - Dim chlistbox = DirectCast(Ctrl, DevExpress.XtraEditors.CheckedListBoxControl) - ControlLoader.CheckedListBox.LoadList(chlistbox, FormId, connID, sqlcommand) - - End Select Next + Dim elapsed As Double elapsed = SW.Elapsed.TotalSeconds SW.Stop() diff --git a/app/DD-Record-Organiser/frmConstructor_Main.resx b/app/DD-Record-Organiser/frmConstructor_Main.resx index 6e86919..8394ebb 100644 --- a/app/DD-Record-Organiser/frmConstructor_Main.resx +++ b/app/DD-Record-Organiser/frmConstructor_Main.resx @@ -370,7 +370,7 @@ 0, 0 - 1072, 316 + 1072, 338 0 @@ -388,7 +388,7 @@ 0 - 1072, 316 + 1072, 338 Detailansicht @@ -1014,7 +1014,7 @@ 2 - 1072, 316 + 1072, 338 Wiedervorlage @@ -1041,7 +1041,7 @@ Cyan - 1072, 291 + 1072, 313 0 @@ -1065,7 +1065,7 @@ 0, 25 - 1072, 291 + 1072, 313 2 @@ -1269,7 +1269,7 @@ - 1072, 316 + 1072, 338 Positionen diff --git a/app/DD-Record-Organiser/frmConstructor_Main.vb b/app/DD-Record-Organiser/frmConstructor_Main.vb index a949da2..97f26b2 100644 --- a/app/DD-Record-Organiser/frmConstructor_Main.vb +++ b/app/DD-Record-Organiser/frmConstructor_Main.vb @@ -1426,8 +1426,10 @@ Public Class frmConstructor_Main Sub EnableEditMode() Dim EditingUser = ClassRecordState.IsRecordLocked(SELECTED_RECORD_ID) + ' Überprüfen, ob der Record gerade bearbeitet wird - If Not IsNothing(EditingUser) Then + If Not IsNothing(EditingUser) And EditingUser <> Environment.UserName Then + tslblLocked.Visible = True If USER_LANGUAGE = "de-DE" Then MsgBox(String.Format("Dieser Datensatz wird gerade vom Benutzer '{0}' bearbeitet und kann nur lesend abgerufen werden.", EditingUser), MsgBoxStyle.Exclamation)