diff --git a/app/TaskFlow/ClassAllgemeineFunktionen.vb b/app/TaskFlow/ClassAllgemeineFunktionen.vb
index 583c446..1a54f8d 100644
--- a/app/TaskFlow/ClassAllgemeineFunktionen.vb
+++ b/app/TaskFlow/ClassAllgemeineFunktionen.vb
@@ -41,6 +41,7 @@ Public Class ClassAllgemeineFunktionen
Catch ex As Exception
LOGGER.Info($"Unexpected error in GUI_LANGUAGE_INFO FOR [{pTITLE}]...")
LOGGER.Error(ex)
+ Return Nothing
End Try
End Function
diff --git a/app/TaskFlow/ClassGridDataLoader.vb b/app/TaskFlow/ClassGridDataLoader.vb
new file mode 100644
index 0000000..697b1be
--- /dev/null
+++ b/app/TaskFlow/ClassGridDataLoader.vb
@@ -0,0 +1,422 @@
+Imports System.Data
+Imports System.Globalization
+Imports DevExpress.XtraGrid
+Imports DevExpress.XtraGrid.Columns
+Imports DevExpress.XtraGrid.Views.Grid
+Imports DigitalData.Modules.EDMI.API
+Imports DigitalData.Modules.EDMI.API.DatabaseWithFallback
+Imports DigitalData.Modules.Logging
+
+Public Class ClassGridDataLoader
+ Private ReadOnly _GDLoaderLogger As Logger
+ Private ReadOnly _DatabaseWithFallback As DatabaseWithFallback
+ Private Const PMDelimiter As String = "~"
+
+ Public Sub New(pDatabaseFallback As DatabaseWithFallback)
+ _GDLoaderLogger = LOGCONFIG.GetLogger()
+ _DatabaseWithFallback = pDatabaseFallback
+ End Sub
+
+ '''
+ ''' Befüllt ein GridControl mit Daten basierend auf der Grid-Konfiguration
+ '''
+ Public Function FillGridData(gridControl As GridControl,
+ controlRow As DataRow,
+ columnDefinitions As DataTable,
+ validator As frmValidator
+ ) As Boolean
+ Try
+ If gridControl Is Nothing OrElse controlRow Is Nothing Then
+ _GDLoaderLogger?.Warn("FillGridData: GridControl oder ControlRow ist Nothing")
+ Return False
+ End If
+
+ Dim controlGuid As Integer = If(IsDBNull(controlRow("GUID")), 0, CInt(controlRow("GUID")))
+ Dim controlType As String = If(IsDBNull(controlRow("TYP")), "TABLE", controlRow("TYP").ToString())
+
+ _GDLoaderLogger?.Debug($"FillGridData für Control GUID={controlGuid}, Name={gridControl.Name}, Type={controlType}")
+
+ ' DataTable aus GridControl holen
+ Dim gridDataTable As DataTable = TryCast(gridControl.DataSource, DataTable)
+ If gridDataTable Is Nothing Then
+ _GDLoaderLogger?.Warn($"GridControl {gridControl.Name} hat keine DataTable als DataSource")
+ Return False
+ End If
+
+ ' Spalten-Definitionen für dieses Grid holen
+ Dim filteredColumns As DataTable = GetFilteredColumnDefinitions(columnDefinitions, controlGuid)
+ If filteredColumns Is Nothing OrElse filteredColumns.Rows.Count = 0 Then
+ _GDLoaderLogger?.Warn($"Keine Spalten-Definitionen für Grid GUID={controlGuid}")
+ Return True
+ End If
+
+ _GDLoaderLogger?.Debug($"Grid {gridControl.Name}: {filteredColumns.Rows.Count} Spalten-Definitionen gefunden")
+
+ ' INDEX_NAME holen
+ Dim sourceIndexName As String = If(IsDBNull(controlRow("INDEX_NAME")), String.Empty, controlRow("INDEX_NAME").ToString())
+
+ If String.IsNullOrEmpty(sourceIndexName) Then
+ _GDLoaderLogger?.Warn($"Kein INDEX_NAME für Grid {gridControl.Name} konfiguriert")
+ Return False
+ End If
+
+ ' Wert aus Quelle holen
+ Dim valueFromSource As Object = validator?.GetVariableValuefromSource(sourceIndexName, 0, False)
+
+ If valueFromSource Is Nothing Then
+ _GDLoaderLogger?.Debug($"Kein Wert für INDEX_NAME [{sourceIndexName}] gefunden - Grid wird geleert")
+ gridDataTable.Rows.Clear()
+ Return True
+ End If
+
+ ' Daten befüllen basierend auf Typ
+ Dim success As Boolean = False
+ Dim valueType As String = valueFromSource.GetType().ToString()
+
+ _GDLoaderLogger?.Debug($"ValueType: {valueType}, ControlType: {controlType}")
+
+ Select Case controlType
+ Case "TABLE"
+ success = FillTableGrid(gridDataTable, filteredColumns, valueFromSource, valueType, gridControl)
+ Case Else
+ success = FillSimpleGrid(gridDataTable, valueFromSource)
+ End Select
+
+ ' Spaltenbreiten anwenden
+ If success Then
+ ApplyColumnWidths(gridControl, filteredColumns)
+ End If
+
+ Return success
+
+ Catch ex As Exception
+ _GDLoaderLogger?.Error($"Fehler in FillGridData: {ex.Message}", ex)
+ Return False
+ End Try
+ End Function
+
+ '''
+ ''' Befüllt ein TABLE-Grid (komplexe Logik mit Vektor/IDB)
+ '''
+ Private Function FillTableGrid(gridDataTable As DataTable,
+ columnDefinitions As DataTable,
+ valueFromSource As Object,
+ valueType As String,
+ gridControl As GridControl) As Boolean
+ Try
+ gridDataTable.Rows.Clear()
+
+ ' ========== NICHT-IDB-MODUS: Vektor-Array-Verarbeitung ==========
+ If Not IDB_ACTIVE Then
+ If valueType.Contains("System.Object") OrElse IsArrayOrEnumerable(valueFromSource) Then
+ _GDLoaderLogger?.Debug($"Nicht-IDB-Modus: Verarbeite Array/Enumerable mit {TryGetCount(valueFromSource)} Elementen")
+
+ For Each zeile As Object In DirectCast(valueFromSource, IEnumerable)
+ Dim colValuesFromSource As String() = Split(zeile.ToString(), PMDelimiter)
+ Dim newRow As DataRow = gridDataTable.NewRow()
+
+ For index = 0 To columnDefinitions.Rows.Count - 1
+ Try
+ Dim rawValue As String = If(index < colValuesFromSource.Length, colValuesFromSource(index), String.Empty)
+ Dim targetColumn As DataColumn = gridDataTable.Columns(index)
+ Dim colType As Type = targetColumn.DataType
+
+ ' NULL-Handling
+ If String.IsNullOrWhiteSpace(rawValue) Then
+ If colType.IsValueType AndAlso Nullable.GetUnderlyingType(colType) Is Nothing Then
+ newRow.Item(index) = Activator.CreateInstance(colType)
+ Else
+ newRow.Item(index) = DBNull.Value
+ End If
+ Continue For
+ End If
+
+ ' Typ-Konvertierung
+ Select Case Type.GetTypeCode(colType)
+ Case TypeCode.Int32
+ newRow.Item(index) = Integer.Parse(rawValue.Trim(), CultureInfo.InvariantCulture)
+ Case TypeCode.Int64
+ newRow.Item(index) = Long.Parse(rawValue.Trim(), CultureInfo.InvariantCulture)
+ Case TypeCode.Double
+ newRow.Item(index) = Double.Parse(rawValue.Trim().Replace(",", "."), CultureInfo.InvariantCulture)
+ Case TypeCode.Decimal
+ newRow.Item(index) = Decimal.Parse(rawValue.Trim().Replace(",", "."), CultureInfo.InvariantCulture)
+ Case TypeCode.Boolean
+ newRow.Item(index) = Boolean.Parse(rawValue.Trim())
+ Case TypeCode.DateTime
+ newRow.Item(index) = DateTime.Parse(rawValue.Trim(), CultureInfo.CurrentCulture)
+ Case Else
+ newRow.Item(index) = rawValue
+ End Select
+
+ Catch convEx As FormatException
+ _GDLoaderLogger?.Warn($"Konvertierungsfehler: ColIdx={index}, RawValue=[{If(index < colValuesFromSource.Length, colValuesFromSource(index), "N/A")}]")
+ If gridDataTable.Columns(index).DataType.IsValueType Then
+ newRow.Item(index) = Activator.CreateInstance(gridDataTable.Columns(index).DataType)
+ Else
+ newRow.Item(index) = DBNull.Value
+ End If
+ End Try
+ Next
+
+ gridDataTable.Rows.Add(newRow)
+ Next
+
+ Return True
+ End If
+ End If
+
+ ' ========== IDB-MODUS: String oder DataTable ==========
+ If valueType = "System.String" Then
+ Return FillIDBFromString(gridDataTable, columnDefinitions, valueFromSource.ToString())
+
+ ElseIf valueType = "System.Data.DataTable" Then
+ Return FillIDBFromDataTable(gridDataTable, columnDefinitions, DirectCast(valueFromSource, DataTable), gridControl)
+ End If
+
+ _GDLoaderLogger?.Warn($"Nicht unterstützter ValueType: {valueType}")
+ Return False
+
+ Catch ex As Exception
+ _GDLoaderLogger?.Error($"Fehler in FillTableGrid: {ex.Message}", ex)
+ Return False
+ End Try
+ End Function
+
+ '''
+ ''' IDB-Modus: String-Vektor verarbeiten
+ '''
+ Private Function FillIDBFromString(gridDataTable As DataTable, columnDefinitions As DataTable, vectorString As String) As Boolean
+ Try
+ Dim colValuesFromSource As String() = Split(vectorString, PMDelimiter)
+
+ If colValuesFromSource.Length > 8 Then
+ _GDLoaderLogger?.Warn("⚠️ Mehr als 8 Spalten in IDB-String - Maximum ist 8!")
+ End If
+
+ Dim rowData As New List(Of Object)
+
+ For index = 1 To Math.Min(colValuesFromSource.Length, columnDefinitions.Rows.Count)
+ Try
+ Dim rawValue As String = colValuesFromSource(index - 1)
+ Dim columnType = columnDefinitions.Rows(index - 1).Item("TYPE_COLUMN")
+ Dim convertedValue = ClassFormat.GetConvertedValue(rawValue, columnType)
+ rowData.Add(convertedValue)
+ Catch ex As Exception
+ _GDLoaderLogger?.Warn($"Fehler bei Spalte {index}: {ex.Message}")
+ rowData.Add(String.Empty)
+ End Try
+ Next
+
+ gridDataTable.Rows.Add(rowData.ToArray())
+ Return True
+
+ Catch ex As Exception
+ _GDLoaderLogger?.Error($"Fehler in FillIDBFromString: {ex.Message}", ex)
+ Return False
+ End Try
+ End Function
+
+ '''
+ ''' IDB-Modus: DataTable verarbeiten
+ '''
+ Private Function FillIDBFromDataTable(gridDataTable As DataTable,
+ columnDefinitions As DataTable,
+ sourceDataTable As DataTable,
+ gridControl As GridControl) As Boolean
+ Try
+ Dim isReadOnly As Boolean = False
+ If gridControl.Tag IsNot Nothing AndAlso TypeOf gridControl.Tag Is DataRow Then
+ Dim controlRow As DataRow = DirectCast(gridControl.Tag, DataRow)
+ isReadOnly = If(IsDBNull(controlRow("READ_ONLY")), False, CBool(controlRow("READ_ONLY")))
+ End If
+
+ _GDLoaderLogger?.Debug($"IDB DataTable: {sourceDataTable.Rows.Count} Zeilen, ReadOnly={isReadOnly}")
+
+ ' Spaltenanzahl-Prüfung
+ Dim configuredColumns As Integer = columnDefinitions.Rows.Count
+ Dim maxSourceColumns As Integer = 0
+
+ If sourceDataTable.Rows.Count > 0 Then
+ For Each row As DataRow In sourceDataTable.Rows
+ Dim parts As String() = Split(row.Item(0).ToString(), PMDelimiter)
+ If parts.Length > maxSourceColumns Then
+ maxSourceColumns = parts.Length
+ End If
+ Next
+ End If
+
+ If maxSourceColumns > configuredColumns Then
+ If Not isReadOnly Then
+ ' Benutzer-Dialog
+ Dim title, question As String
+ Select Case USER_LANGUAGE
+ Case "de-DE"
+ title = "Spaltenkonfiguration prüfen"
+ question = $"Das Grid '{gridControl.Name}' enthält Zeilen mit bis zu {maxSourceColumns} Datenwerten," & vbCrLf &
+ $"aber nur {configuredColumns} Spalten sind konfiguriert." & vbCrLf &
+ $"Es werden nur die ersten {configuredColumns} Werte je Zeile angezeigt." & vbCrLf & vbCrLf &
+ "Möchten Sie trotzdem fortfahren?"
+ Case "fr-FR"
+ title = "Vérifier la configuration des colonnes"
+ question = $"La grille '{gridControl.Name}' contient des lignes avec jusqu'à {maxSourceColumns} valeurs," & vbCrLf &
+ $"mais seulement {configuredColumns} colonnes sont configurées."
+ Case Else
+ title = "Check column configuration"
+ question = $"The grid '{gridControl.Name}' contains rows with up to {maxSourceColumns} values," & vbCrLf &
+ $"but only {configuredColumns} columns are configured."
+ End Select
+
+ Dim result = MessageBox.Show(question, title, MessageBoxButtons.YesNo, MessageBoxIcon.Warning)
+ If result = DialogResult.No Then
+ _GDLoaderLogger?.Warn("Benutzer hat Fortfahren abgebrochen")
+ Return False
+ End If
+ Else
+ _GDLoaderLogger?.Info($"ReadOnly-Grid: Ignoriere überzählige Spalten ({maxSourceColumns} → {configuredColumns})")
+ End If
+ End If
+
+ ' Zeilen befüllen
+ For Each sourceRow As DataRow In sourceDataTable.Rows
+ Try
+ Dim colValuesFromSource As String() = Split(sourceRow.Item(0).ToString(), PMDelimiter)
+ Dim rowData As New List(Of Object)
+
+ For index = 1 To configuredColumns
+ Try
+ Dim rawValue As String = If(index <= colValuesFromSource.Length, colValuesFromSource(index - 1), String.Empty)
+ Dim columnType = columnDefinitions.Rows(index - 1).Item("TYPE_COLUMN")
+ Dim convertedValue = ClassFormat.GetConvertedValue(rawValue, columnType)
+ rowData.Add(convertedValue)
+ Catch ex As Exception
+ _GDLoaderLogger?.Warn($"Fehler bei Spalte {index}: {ex.Message}")
+ rowData.Add(String.Empty)
+ End Try
+ Next
+
+ gridDataTable.Rows.Add(rowData.ToArray())
+
+ Catch ex As Exception
+ _GDLoaderLogger?.Warn($"Fehler beim Hinzufügen der Zeile: {ex.Message}")
+ End Try
+ Next
+
+ Return True
+
+ Catch ex As Exception
+ _GDLoaderLogger?.Error($"Fehler in FillIDBFromDataTable: {ex.Message}", ex)
+ Return False
+ End Try
+ End Function
+
+ '''
+ ''' Befüllt ein einfaches Grid (nicht TABLE-Typ)
+ '''
+ Private Function FillSimpleGrid(gridDataTable As DataTable, valueFromSource As Object) As Boolean
+ Try
+ gridDataTable.Rows.Clear()
+
+ If IsArrayOrEnumerable(valueFromSource) Then
+ For Each obj As Object In DirectCast(valueFromSource, IEnumerable)
+ If obj IsNot Nothing Then
+ gridDataTable.Rows.Add(New String() {obj.ToString()})
+ End If
+ Next
+ End If
+
+ Return True
+
+ Catch ex As Exception
+ _GDLoaderLogger?.Error($"Fehler in FillSimpleGrid: {ex.Message}", ex)
+ Return False
+ End Try
+ End Function
+
+ '''
+ ''' Wendet Spaltenbreiten aus der Konfiguration an
+ '''
+ Private Sub ApplyColumnWidths(gridControl As GridControl, columnDefinitions As DataTable)
+ Try
+ Dim gridView As GridView = TryCast(gridControl.MainView, GridView)
+ If gridView Is Nothing Then Return
+
+ gridView.OptionsView.ColumnAutoWidth = False
+
+ If columnDefinitions Is Nothing OrElse columnDefinitions.Rows.Count = 0 Then
+ _GDLoaderLogger?.Warn("ApplyColumnWidths: Keine Spalten-Definitionen vorhanden")
+ Return
+ End If
+
+ Dim columnsByName = gridView.Columns.Cast(Of GridColumn)().
+ ToDictionary(Function(c) c.FieldName, StringComparer.OrdinalIgnoreCase)
+
+ For Each row As DataRow In columnDefinitions.Rows
+ Try
+ If Not IsDBNull(row("SPALTENNAME")) AndAlso Not IsDBNull(row("SPALTENBREITE")) Then
+ Dim columnName As String = row("SPALTENNAME").ToString()
+ Dim column As GridColumn = Nothing
+
+ If columnsByName.TryGetValue(columnName, column) Then
+ column.Width = CInt(row("SPALTENBREITE"))
+ _GDLoaderLogger?.Debug($"Spaltenbreite gesetzt: {columnName} = {row("SPALTENBREITE")}")
+ End If
+ End If
+ Catch ex As Exception
+ _GDLoaderLogger?.Warn($"Fehler beim Setzen der Spaltenbreite für Zeile: {ex.Message}")
+ End Try
+ Next
+
+ Catch ex As Exception
+ _GDLoaderLogger?.Error($"Fehler in ApplyColumnWidths: {ex.Message}", ex)
+ End Try
+ End Sub
+
+ '''
+ ''' Filtert Spalten-Definitionen für ein bestimmtes Grid
+ '''
+ Private Function GetFilteredColumnDefinitions(columnDefinitions As DataTable, controlGuid As Integer) As DataTable
+ If columnDefinitions Is Nothing Then Return Nothing
+
+ Try
+ Dim filteredRows = columnDefinitions.AsEnumerable().
+ Where(Function(row) Not IsDBNull(row("CONTROL_ID")) AndAlso CInt(row("CONTROL_ID")) = controlGuid).
+ ToList()
+
+ If filteredRows.Count = 0 Then Return Nothing
+
+ Dim resultTable As DataTable = columnDefinitions.Clone()
+ For Each row In filteredRows
+ resultTable.ImportRow(row)
+ Next
+
+ Return resultTable
+
+ Catch ex As Exception
+ _GDLoaderLogger?.Error($"Fehler in GetFilteredColumnDefinitions: {ex.Message}", ex)
+ Return Nothing
+ End Try
+ End Function
+
+ '''
+ ''' Prüft ob ein Objekt Array oder IEnumerable ist
+ '''
+ Private Function IsArrayOrEnumerable(obj As Object) As Boolean
+ If obj Is Nothing Then Return False
+ Return TypeOf obj Is IEnumerable AndAlso Not TypeOf obj Is String
+ End Function
+
+ '''
+ ''' Versucht die Anzahl der Elemente zu ermitteln
+ '''
+ Private Function TryGetCount(obj As Object) As Integer
+ Try
+ If TypeOf obj Is ICollection Then
+ Return DirectCast(obj, ICollection).Count
+ End If
+ Return DirectCast(obj, IEnumerable).Cast(Of Object)().Count()
+ Catch
+ Return 0
+ End Try
+ End Function
+End Class
\ No newline at end of file
diff --git a/app/TaskFlow/DD_DMSLiteDataSet.Designer.vb b/app/TaskFlow/DD_DMSLiteDataSet.Designer.vb
index 113dbdc..bcf71a9 100644
--- a/app/TaskFlow/DD_DMSLiteDataSet.Designer.vb
+++ b/app/TaskFlow/DD_DMSLiteDataSet.Designer.vb
@@ -4589,6 +4589,8 @@ Partial Public Class DD_DMSLiteDataSet
Private columnTEXT_ALIGNMENT As Global.System.Data.DataColumn
+ Private columnDISPLAY_IN_SEPERATE_FORM As Global.System.Data.DataColumn
+
_
Public Sub New()
@@ -4976,6 +4978,14 @@ Partial Public Class DD_DMSLiteDataSet
End Get
End Property
+ _
+ Public ReadOnly Property DISPLAY_IN_SEPERATE_FORMColumn() As Global.System.Data.DataColumn
+ Get
+ Return Me.columnDISPLAY_IN_SEPERATE_FORM
+ End Get
+ End Property
+
_
@@ -5056,9 +5066,10 @@ Partial Public Class DD_DMSLiteDataSet
ByVal SAVE_CHANGE_ON_ENABLED As Boolean, _
ByVal FORMAT_STRING As String, _
ByVal BACKCOLOR_IF As String, _
- ByVal TEXT_ALIGNMENT As String) As TBPM_PROFILE_CONTROLSRow
+ ByVal TEXT_ALIGNMENT As String, _
+ ByVal DISPLAY_IN_SEPERATE_FORM As Boolean) As TBPM_PROFILE_CONTROLSRow
Dim rowTBPM_PROFILE_CONTROLSRow As TBPM_PROFILE_CONTROLSRow = CType(Me.NewRow,TBPM_PROFILE_CONTROLSRow)
- Dim columnValuesArray() As Object = New Object() {Nothing, Nothing, NAME, CTRL_TYPE, CTRL_TEXT, X_LOC, Y_LOC, ADDED_WHO, ADDED_WHEN, CHANGED_WHO, CHANGED_WHEN, INDEX_NAME, TYP, VALIDATION, CHOICE_LIST, CONNECTION_ID, SQL_UEBERPRUEFUNG, HEIGHT, WIDTH, FONT_STYLE, FONT_SIZE, FONT_FAMILY, FONT_COLOR, READ_ONLY, LOAD_IDX_VALUE, DEFAULT_VALUE, MULTISELECT, VKT_ADD_ITEM, VKT_PREVENT_MULTIPLE_VALUES, REGEX_MATCH, REGEX_MESSAGE_DE, REGEX_MESSAGE_EN, IMAGE_CONTROL, SQL2, SQL_ENABLE, SET_CONTROL_DATA, SQL_ENABLE_ON_LOAD, SQL_ENABLE_ON_LOAD_CONID, CONTROL_ACTIVE, TABLE_ORDER_COLUMN, SAVE_CHANGE_ON_ENABLED, FORMAT_STRING, BACKCOLOR_IF, TEXT_ALIGNMENT}
+ Dim columnValuesArray() As Object = New Object() {Nothing, Nothing, NAME, CTRL_TYPE, CTRL_TEXT, X_LOC, Y_LOC, ADDED_WHO, ADDED_WHEN, CHANGED_WHO, CHANGED_WHEN, INDEX_NAME, TYP, VALIDATION, CHOICE_LIST, CONNECTION_ID, SQL_UEBERPRUEFUNG, HEIGHT, WIDTH, FONT_STYLE, FONT_SIZE, FONT_FAMILY, FONT_COLOR, READ_ONLY, LOAD_IDX_VALUE, DEFAULT_VALUE, MULTISELECT, VKT_ADD_ITEM, VKT_PREVENT_MULTIPLE_VALUES, REGEX_MATCH, REGEX_MESSAGE_DE, REGEX_MESSAGE_EN, IMAGE_CONTROL, SQL2, SQL_ENABLE, SET_CONTROL_DATA, SQL_ENABLE_ON_LOAD, SQL_ENABLE_ON_LOAD_CONID, CONTROL_ACTIVE, TABLE_ORDER_COLUMN, SAVE_CHANGE_ON_ENABLED, FORMAT_STRING, BACKCOLOR_IF, TEXT_ALIGNMENT, DISPLAY_IN_SEPERATE_FORM}
If (Not (parentTBPM_PROFILERowByFK_TBPM_PROFILE_CONTROLS_PROFILE) Is Nothing) Then
columnValuesArray(1) = parentTBPM_PROFILERowByFK_TBPM_PROFILE_CONTROLS_PROFILE(0)
End If
@@ -5134,6 +5145,7 @@ Partial Public Class DD_DMSLiteDataSet
Me.columnFORMAT_STRING = MyBase.Columns("FORMAT_STRING")
Me.columnBACKCOLOR_IF = MyBase.Columns("BACKCOLOR_IF")
Me.columnTEXT_ALIGNMENT = MyBase.Columns("TEXT_ALIGNMENT")
+ Me.columnDISPLAY_IN_SEPERATE_FORM = MyBase.Columns("DISPLAY_IN_SEPERATE_FORM")
End Sub
_
Public Property FORMAT_STRING() As String
Get
- Try
- Return CType(Me(Me.tableTBPM_PROFILE_CONTROLS.FORMAT_STRINGColumn),String)
- Catch e As Global.System.InvalidCastException
- Throw New Global.System.Data.StrongTypingException("Der Wert für Spalte FORMAT_STRING in Tabelle TBPM_PROFILE_CONTROLS ist DBNull.", e)
- End Try
+ Return CType(Me(Me.tableTBPM_PROFILE_CONTROLS.FORMAT_STRINGColumn),String)
End Get
Set
Me(Me.tableTBPM_PROFILE_CONTROLS.FORMAT_STRINGColumn) = value
@@ -12650,6 +12663,17 @@ Partial Public Class DD_DMSLiteDataSet
End Set
End Property
+ _
+ Public Property DISPLAY_IN_SEPERATE_FORM() As Boolean
+ Get
+ Return CType(Me(Me.tableTBPM_PROFILE_CONTROLS.DISPLAY_IN_SEPERATE_FORMColumn),Boolean)
+ End Get
+ Set
+ Me(Me.tableTBPM_PROFILE_CONTROLS.DISPLAY_IN_SEPERATE_FORMColumn) = value
+ End Set
+ End Property
+
_
Public Property TBPM_PROFILERow() As TBPM_PROFILERow
@@ -12889,18 +12913,6 @@ Partial Public Class DD_DMSLiteDataSet
Me(Me.tableTBPM_PROFILE_CONTROLS.SQL_ENABLE_ON_LOAD_CONIDColumn) = Global.System.Convert.DBNull
End Sub
- _
- Public Function IsFORMAT_STRINGNull() As Boolean
- Return Me.IsNull(Me.tableTBPM_PROFILE_CONTROLS.FORMAT_STRINGColumn)
- End Function
-
- _
- Public Sub SetFORMAT_STRINGNull()
- Me(Me.tableTBPM_PROFILE_CONTROLS.FORMAT_STRINGColumn) = Global.System.Convert.DBNull
- End Sub
-
_
Public Function IsBACKCOLOR_IFNull() As Boolean
@@ -20412,6 +20424,7 @@ Namespace DD_DMSLiteDataSetTableAdapters
tableMapping.ColumnMappings.Add("SAVE_CHANGE_ON_ENABLED", "SAVE_CHANGE_ON_ENABLED")
tableMapping.ColumnMappings.Add("FORMAT_STRING", "FORMAT_STRING")
tableMapping.ColumnMappings.Add("TEXT_ALIGNMENT", "TEXT_ALIGNMENT")
+ tableMapping.ColumnMappings.Add("DISPLAY_IN_SEPERATE_FORM", "DISPLAY_IN_SEPERATE_FORM")
Me._adapter.TableMappings.Add(tableMapping)
Me._adapter.DeleteCommand = New Global.System.Data.SqlClient.SqlCommand()
Me._adapter.DeleteCommand.Connection = Me.Connection
@@ -20560,8 +20573,8 @@ Namespace DD_DMSLiteDataSetTableAdapters
" REGEX_MATCH, REGEX_MESSAGE_DE, REGEX_MESSAGE_EN, IMAGE_CONTROL, SQL"& _
"2, SQL_ENABLE, SET_CONTROL_DATA, SQL_ENABLE_ON_LOAD, SQL_ENABLE_ON_LOAD_CONID, C"& _
"ONTROL_ACTIVE, "&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&" TABLE_ORDER_COLUMN, SAVE_CHANGE_ON_ENA"& _
- "BLED, FORMAT_STRING, TEXT_ALIGNMENT"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"FROM TBPM_PROFILE_CONTROLS"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"WHER"& _
- "E (GUID = @guid)"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"ORDER BY Y_LOC, X_LOC"
+ "BLED, FORMAT_STRING, TEXT_ALIGNMENT, DISPLAY_IN_SEPERATE_FORM"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"FROM T"& _
+ "BPM_PROFILE_CONTROLS"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"WHERE (GUID = @guid)"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"ORDER BY Y_LOC, X_LOC"
Me._commandCollection(0).CommandType = Global.System.Data.CommandType.Text
Me._commandCollection(0).Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@guid", Global.System.Data.SqlDbType.Int, 4, Global.System.Data.ParameterDirection.Input, 0, 0, "GUID", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", ""))
Me._commandCollection(1) = New Global.System.Data.SqlClient.SqlCommand()
@@ -20610,9 +20623,9 @@ Namespace DD_DMSLiteDataSetTableAdapters
Me._commandCollection(8) = New Global.System.Data.SqlClient.SqlCommand()
Me._commandCollection(8).Connection = Me.Connection
Me._commandCollection(8).CommandText = "INSERT INTO TBPM_PROFILE_CONTROLS"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&" (PROFIL_ID, NAME, CTR"& _
- "L_TYPE, CTRL_TEXT, X_LOC, Y_LOC, ADDED_WHO, HEIGHT, WIDTH, TEXT_ALIGNMENT)"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"VALU"& _
- "ES (@PROFIL_ID,@NAME,@CTRL_TYPE,@CTRL_TEXT,@X_LOC,@Y_LOC,@ADDED_WHO,@HEIG"& _
- "HT,@Width,@TEXT_ALIGNMENT)"
+ "L_TYPE, CTRL_TEXT, X_LOC, Y_LOC, ADDED_WHO, HEIGHT, WIDTH, TEXT_ALIGNMENT, DISPL"& _
+ "AY_IN_SEPERATE_FORM)"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"VALUES (@PROFIL_ID,@NAME,@CTRL_TYPE,@CTRL_TEXT,@X_L"& _
+ "OC,@Y_LOC,@ADDED_WHO,@HEIGHT,@Width,@TEXT_ALIGNMENT,@DISPLAY_IN_SEPERATE_FORM)"
Me._commandCollection(8).CommandType = Global.System.Data.CommandType.Text
Me._commandCollection(8).Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@PROFIL_ID", Global.System.Data.SqlDbType.Int, 4, Global.System.Data.ParameterDirection.Input, 0, 0, "PROFIL_ID", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", ""))
Me._commandCollection(8).Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@NAME", Global.System.Data.SqlDbType.VarChar, 100, Global.System.Data.ParameterDirection.Input, 0, 0, "NAME", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", ""))
@@ -20624,6 +20637,7 @@ Namespace DD_DMSLiteDataSetTableAdapters
Me._commandCollection(8).Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@HEIGHT", Global.System.Data.SqlDbType.SmallInt, 2, Global.System.Data.ParameterDirection.Input, 0, 0, "HEIGHT", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", ""))
Me._commandCollection(8).Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Width", Global.System.Data.SqlDbType.SmallInt, 2, Global.System.Data.ParameterDirection.Input, 0, 0, "WIDTH", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", ""))
Me._commandCollection(8).Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@TEXT_ALIGNMENT", Global.System.Data.SqlDbType.NVarChar, 20, Global.System.Data.ParameterDirection.Input, 0, 0, "TEXT_ALIGNMENT", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", ""))
+ Me._commandCollection(8).Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@DISPLAY_IN_SEPERATE_FORM", Global.System.Data.SqlDbType.Bit, 1, Global.System.Data.ParameterDirection.Input, 0, 0, "DISPLAY_IN_SEPERATE_FORM", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", ""))
Me._commandCollection(9) = New Global.System.Data.SqlClient.SqlCommand()
Me._commandCollection(9).Connection = Me.Connection
Me._commandCollection(9).CommandText = "UPDATE TBPM_PROFILE_CONTROLS"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"SET INDEX_NAME = @INDEX_NAME,CH"& _
@@ -20643,8 +20657,9 @@ Namespace DD_DMSLiteDataSetTableAdapters
"P, VALIDATION, VKT_ADD_ITEM, VKT_PREVENT_MULTIPLE_VALUES, WIDTH, X_LOC, Y_LOC, I"& _
"MAGE_CONTROL, SQL2, SQL_ENABLE, "&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&" SET_CONTROL_DATA, SQL"& _
"_ENABLE_ON_LOAD, SQL_ENABLE_ON_LOAD_CONID, CONTROL_ACTIVE, TABLE_ORDER_COLUMN, S"& _
- "AVE_CHANGE_ON_ENABLED, FORMAT_STRING, TEXT_ALIGNMENT"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"FROM TBPM_PROFI"& _
- "LE_CONTROLS AS T"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"WHERE (PROFIL_ID = @profil_id)"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"ORDER BY Y_LOC, X_LOC"
+ "AVE_CHANGE_ON_ENABLED, FORMAT_STRING, TEXT_ALIGNMENT, "&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&" "& _
+ " DISPLAY_IN_SEPERATE_FORM"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"FROM TBPM_PROFILE_CONTROLS AS T"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"WHERE "& _
+ " (PROFIL_ID = @profil_id)"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"ORDER BY Y_LOC, X_LOC"
Me._commandCollection(10).CommandType = Global.System.Data.CommandType.Text
Me._commandCollection(10).Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@USER_LANGUAGE", Global.System.Data.SqlDbType.VarChar, 1024, Global.System.Data.ParameterDirection.Input, 0, 0, "", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", ""))
Me._commandCollection(10).Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@profil_id", Global.System.Data.SqlDbType.Int, 4, Global.System.Data.ParameterDirection.Input, 0, 0, "PROFIL_ID", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", ""))
@@ -21329,7 +21344,7 @@ Namespace DD_DMSLiteDataSetTableAdapters
_
- Public Overloads Overridable Function cmdInsertAnlage(ByVal PROFIL_ID As Integer, ByVal NAME As String, ByVal CTRL_TYPE As String, ByVal CTRL_TEXT As String, ByVal X_LOC As Double, ByVal Y_LOC As Double, ByVal ADDED_WHO As String, ByVal HEIGHT As Short, ByVal Width As Short, ByVal TEXT_ALIGNMENT As String) As Integer
+ Public Overloads Overridable Function cmdInsertAnlage(ByVal PROFIL_ID As Integer, ByVal NAME As String, ByVal CTRL_TYPE As String, ByVal CTRL_TEXT As String, ByVal X_LOC As Double, ByVal Y_LOC As Double, ByVal ADDED_WHO As String, ByVal HEIGHT As Short, ByVal Width As Short, ByVal TEXT_ALIGNMENT As String, ByVal DISPLAY_IN_SEPERATE_FORM As Boolean) As Integer
Dim command As Global.System.Data.SqlClient.SqlCommand = Me.CommandCollection(8)
command.Parameters(0).Value = CType(PROFIL_ID,Integer)
If (NAME Is Nothing) Then
@@ -21361,6 +21376,7 @@ Namespace DD_DMSLiteDataSetTableAdapters
Else
command.Parameters(9).Value = CType(TEXT_ALIGNMENT,String)
End If
+ command.Parameters(10).Value = CType(DISPLAY_IN_SEPERATE_FORM,Boolean)
Dim previousConnectionState As Global.System.Data.ConnectionState = command.Connection.State
If ((command.Connection.State And Global.System.Data.ConnectionState.Open) _
<> Global.System.Data.ConnectionState.Open) Then
diff --git a/app/TaskFlow/DD_DMSLiteDataSet.xsd b/app/TaskFlow/DD_DMSLiteDataSet.xsd
index 93d9220..e6d34a4 100644
--- a/app/TaskFlow/DD_DMSLiteDataSet.xsd
+++ b/app/TaskFlow/DD_DMSLiteDataSet.xsd
@@ -968,7 +968,7 @@ WHERE (GUID = @Original_GUID)
-
+
INSERT INTO TBPM_PROFILE_CONTROLS
(PROFIL_ID, NAME, CTRL_TYPE, CTRL_TEXT, X_LOC, Y_LOC, ADDED_WHO, ADDED_WHEN, CHANGED_WHO, CHANGED_WHEN, INDEX_NAME, TYP, VALIDATION, CHOICE_LIST, CONNECTION_ID, SQL_UEBERPRUEFUNG,
HEIGHT, WIDTH, FONT_STYLE, FONT_SIZE, FONT_FAMILY, FONT_COLOR, READ_ONLY, LOAD_IDX_VALUE, DEFAULT_VALUE, MULTISELECT, VKT_ADD_ITEM, VKT_PREVENT_MULTIPLE_VALUES, REGEX_MATCH,
@@ -976,43 +976,43 @@ WHERE (GUID = @Original_GUID)
VALUES (@PROFIL_ID,@NAME,@CTRL_TYPE,@CTRL_TEXT,@X_LOC,@Y_LOC,@ADDED_WHO,@ADDED_WHEN,@CHANGED_WHO,@CHANGED_WHEN,@INDEX_NAME,@TYP,@VALIDATION,@CHOICE_LIST,@CONNECTION_ID,@SQL_UEBERPRUEFUNG,@HEIGHT,@WIDTH,@FONT_STYLE,@FONT_SIZE,@FONT_FAMILY,@FONT_COLOR,@READ_ONLY,@LOAD_IDX_VALUE,@DEFAULT_VALUE,@MULTISELECT,@VKT_ADD_ITEM,@VKT_PREVENT_MULTIPLE_VALUES,@REGEX_MATCH,@REGEX_MESSAGE_DE,@REGEX_MESSAGE_EN,@IMAGE_CONTROL,@SQL2,@SQL_ENABLE,@SAVE_CHANGE_ON_ENABLED,@FORMAT_STRING,@TEXT_ALIGNMENT);
SELECT GUID, PROFIL_ID, NAME, CTRL_TYPE, CTRL_TEXT, X_LOC, Y_LOC, ADDED_WHO, ADDED_WHEN, CHANGED_WHO, CHANGED_WHEN, INDEX_NAME, TYP, VALIDATION, CHOICE_LIST, CONNECTION_ID, SQL_UEBERPRUEFUNG, HEIGHT, WIDTH, FONT_STYLE, FONT_SIZE, FONT_FAMILY, FONT_COLOR, READ_ONLY, LOAD_IDX_VALUE, DEFAULT_VALUE, MULTISELECT, VKT_ADD_ITEM, VKT_PREVENT_MULTIPLE_VALUES, REGEX_MATCH, REGEX_MESSAGE_DE, REGEX_MESSAGE_EN FROM TBPM_PROFILE_CONTROLS WHERE (GUID = SCOPE_IDENTITY()) ORDER BY Y_LOC, X_LOC
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1021,7 +1021,7 @@ SELECT GUID, PROFIL_ID, NAME, CTRL_TYPE, CTRL_TEXT, X_LOC, Y_LOC, ADDED_WHO, ADD
SELECT GUID, PROFIL_ID, NAME, CTRL_TYPE, CTRL_TEXT, X_LOC, Y_LOC, ADDED_WHO, ADDED_WHEN, CHANGED_WHO, CHANGED_WHEN, INDEX_NAME, TYP, VALIDATION, CHOICE_LIST, CONNECTION_ID,
SQL_UEBERPRUEFUNG, HEIGHT, WIDTH, FONT_STYLE, FONT_SIZE, FONT_FAMILY, FONT_COLOR, READ_ONLY, LOAD_IDX_VALUE, DEFAULT_VALUE, MULTISELECT, VKT_ADD_ITEM, VKT_PREVENT_MULTIPLE_VALUES,
REGEX_MATCH, REGEX_MESSAGE_DE, REGEX_MESSAGE_EN, IMAGE_CONTROL, SQL2, SQL_ENABLE, SET_CONTROL_DATA, SQL_ENABLE_ON_LOAD, SQL_ENABLE_ON_LOAD_CONID, CONTROL_ACTIVE,
- TABLE_ORDER_COLUMN, SAVE_CHANGE_ON_ENABLED, FORMAT_STRING, TEXT_ALIGNMENT
+ TABLE_ORDER_COLUMN, SAVE_CHANGE_ON_ENABLED, FORMAT_STRING, TEXT_ALIGNMENT, DISPLAY_IN_SEPERATE_FORM
FROM TBPM_PROFILE_CONTROLS
WHERE (GUID = @guid)
ORDER BY Y_LOC, X_LOC
@@ -1031,7 +1031,7 @@ ORDER BY Y_LOC, X_LOC
-
+
UPDATE TBPM_PROFILE_CONTROLS
SET PROFIL_ID = @PROFIL_ID, NAME = @NAME, CTRL_TYPE = @CTRL_TYPE, CTRL_TEXT = @CTRL_TEXT, X_LOC = @X_LOC, Y_LOC = @Y_LOC, CHANGED_WHO = @CHANGED_WHO, INDEX_NAME = @INDEX_NAME,
TYP = @TYP, VALIDATION = @VALIDATION, CHOICE_LIST = @CHOICE_LIST, CONNECTION_ID = @CONNECTION_ID, SQL_UEBERPRUEFUNG = @SQL_UEBERPRUEFUNG, HEIGHT = @HEIGHT, WIDTH = @WIDTH,
@@ -1042,42 +1042,42 @@ SET PROFIL_ID = @PROFIL_ID, NAME = @NAME, CTRL_TYPE = @CTRL_TYPE,
WHERE (GUID = @Original_GUID);
SELECT GUID, PROFIL_ID, NAME, CTRL_TYPE, CTRL_TEXT, X_LOC, Y_LOC, ADDED_WHO, ADDED_WHEN, CHANGED_WHO, CHANGED_WHEN, INDEX_NAME, TYP, VALIDATION, CHOICE_LIST, CONNECTION_ID, SQL_UEBERPRUEFUNG, HEIGHT, WIDTH, FONT_STYLE, FONT_SIZE, FONT_FAMILY, FONT_COLOR, READ_ONLY, LOAD_IDX_VALUE, DEFAULT_VALUE, MULTISELECT, VKT_ADD_ITEM, VKT_PREVENT_MULTIPLE_VALUES, REGEX_MATCH, REGEX_MESSAGE_DE, REGEX_MESSAGE_EN FROM TBPM_PROFILE_CONTROLS WHERE (GUID = @GUID) ORDER BY Y_LOC, X_LOC
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1127,6 +1127,7 @@ SELECT GUID, PROFIL_ID, NAME, CTRL_TYPE, CTRL_TEXT, X_LOC, Y_LOC, ADDED_WHO, ADD
+
@@ -1236,8 +1237,8 @@ VALUES (@PROFIL_ID,@NAME,@CTRL_TYPE,@CTRL_TEXT,@X_LOC,@Y_LOC,@ADDED_WHO,@
INSERT INTO TBPM_PROFILE_CONTROLS
- (PROFIL_ID, NAME, CTRL_TYPE, CTRL_TEXT, X_LOC, Y_LOC, ADDED_WHO, HEIGHT, WIDTH, TEXT_ALIGNMENT)
-VALUES (@PROFIL_ID,@NAME,@CTRL_TYPE,@CTRL_TEXT,@X_LOC,@Y_LOC,@ADDED_WHO,@HEIGHT,@Width,@TEXT_ALIGNMENT)
+ (PROFIL_ID, NAME, CTRL_TYPE, CTRL_TEXT, X_LOC, Y_LOC, ADDED_WHO, HEIGHT, WIDTH, TEXT_ALIGNMENT, DISPLAY_IN_SEPERATE_FORM)
+VALUES (@PROFIL_ID,@NAME,@CTRL_TYPE,@CTRL_TEXT,@X_LOC,@Y_LOC,@ADDED_WHO,@HEIGHT,@Width,@TEXT_ALIGNMENT,@DISPLAY_IN_SEPERATE_FORM)
@@ -1249,6 +1250,7 @@ VALUES (@PROFIL_ID,@NAME,@CTRL_TYPE,@CTRL_TEXT,@X_LOC,@Y_LOC,@ADDED_WHO,@
+
@@ -1273,7 +1275,8 @@ WHERE (GUID = @Original_GUID);
SELECT dbo.FNPM_LANGUAGE_CONTROL_TEXT(NAME, @USER_LANGUAGE, CTRL_TYPE, CTRL_TEXT) AS CTRL_CAPTION_LANG, ADDED_WHEN, ADDED_WHO, CHANGED_WHEN, CHANGED_WHO, CHOICE_LIST, CONNECTION_ID,
CTRL_TEXT, CTRL_TYPE, DEFAULT_VALUE, FONT_COLOR, FONT_FAMILY, FONT_SIZE, FONT_STYLE, GUID, HEIGHT, INDEX_NAME, LOAD_IDX_VALUE, MULTISELECT, NAME, PROFIL_ID, READ_ONLY, REGEX_MATCH,
REGEX_MESSAGE_DE, REGEX_MESSAGE_EN, SQL_UEBERPRUEFUNG, TYP, VALIDATION, VKT_ADD_ITEM, VKT_PREVENT_MULTIPLE_VALUES, WIDTH, X_LOC, Y_LOC, IMAGE_CONTROL, SQL2, SQL_ENABLE,
- SET_CONTROL_DATA, SQL_ENABLE_ON_LOAD, SQL_ENABLE_ON_LOAD_CONID, CONTROL_ACTIVE, TABLE_ORDER_COLUMN, SAVE_CHANGE_ON_ENABLED, FORMAT_STRING, TEXT_ALIGNMENT
+ SET_CONTROL_DATA, SQL_ENABLE_ON_LOAD, SQL_ENABLE_ON_LOAD_CONID, CONTROL_ACTIVE, TABLE_ORDER_COLUMN, SAVE_CHANGE_ON_ENABLED, FORMAT_STRING, TEXT_ALIGNMENT,
+ DISPLAY_IN_SEPERATE_FORM
FROM TBPM_PROFILE_CONTROLS AS T
WHERE (PROFIL_ID = @profil_id)
ORDER BY Y_LOC, X_LOC
@@ -2703,7 +2706,7 @@ SELECT GUID, NAME, TITLE, PRIORITY, DESCRIPTION, ACTIVE, WD_SEARCH, NO_OF_DOCUME
-
+
@@ -2712,6 +2715,7 @@ SELECT GUID, NAME, TITLE, PRIORITY, DESCRIPTION, ACTIVE, WD_SEARCH, NO_OF_DOCUME
+
@@ -2822,7 +2826,7 @@ SELECT GUID, NAME, TITLE, PRIORITY, DESCRIPTION, ACTIVE, WD_SEARCH, NO_OF_DOCUME
-
+
@@ -3415,9 +3419,9 @@ SELECT GUID, NAME, TITLE, PRIORITY, DESCRIPTION, ACTIVE, WD_SEARCH, NO_OF_DOCUME
-
-
-
+
+
+
\ No newline at end of file
diff --git a/app/TaskFlow/DD_DMSLiteDataSet.xss b/app/TaskFlow/DD_DMSLiteDataSet.xss
index 8be6c64..6aa9fbe 100644
--- a/app/TaskFlow/DD_DMSLiteDataSet.xss
+++ b/app/TaskFlow/DD_DMSLiteDataSet.xss
@@ -4,7 +4,7 @@
Changes to this file may cause incorrect behavior and will be lost if
the code is regenerated.
-->
-
+
diff --git a/app/TaskFlow/ModuleControlProperties.vb b/app/TaskFlow/ModuleControlProperties.vb
index e293816..c78cbd0 100644
--- a/app/TaskFlow/ModuleControlProperties.vb
+++ b/app/TaskFlow/ModuleControlProperties.vb
@@ -134,7 +134,6 @@ Public Module ModuleControlProperties
Public Property [SaveChangeOnReadOnly]() As Boolean
-
Public Property IndexType() As IndexTypes
@@ -350,6 +349,10 @@ Public Module ModuleControlProperties
Public Property AllowAddNewValues As Boolean
+
+
+
+ Public Property [DISPLAY_SEP_FORM]() As Boolean
End Class
Public Class ButtonProperties
diff --git a/app/TaskFlow/TaskFlow.vbproj b/app/TaskFlow/TaskFlow.vbproj
index a2b82c5..d281403 100644
--- a/app/TaskFlow/TaskFlow.vbproj
+++ b/app/TaskFlow/TaskFlow.vbproj
@@ -465,6 +465,7 @@
+
@@ -556,6 +557,12 @@
Form
+
+ frmControl_Table.vb
+
+
+ Form
+
frmDesignerLayout.vb
@@ -819,6 +826,9 @@
frmColumn_Detail.vb
Designer
+
+ frmControl_Table.vb
+
frmDesignerLayout.vb
Designer
diff --git a/app/TaskFlow/frmControl_Table.Designer.vb b/app/TaskFlow/frmControl_Table.Designer.vb
new file mode 100644
index 0000000..a535da4
--- /dev/null
+++ b/app/TaskFlow/frmControl_Table.Designer.vb
@@ -0,0 +1,122 @@
+ _
+Partial Class frmControl_Table
+ Inherits DevExpress.XtraBars.Ribbon.RibbonForm
+
+ 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+ _
+ Protected Overrides Sub Dispose(ByVal disposing As Boolean)
+ Try
+ If disposing AndAlso components IsNot Nothing Then
+ components.Dispose()
+ End If
+ Finally
+ MyBase.Dispose(disposing)
+ End Try
+ End Sub
+
+ 'Wird vom Windows Form-Designer benötigt.
+ Private components As System.ComponentModel.IContainer
+
+ 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+ 'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
+ 'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+ _
+ Private Sub InitializeComponent()
+ Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmControl_Table))
+ Me.RibbonControl1 = New DevExpress.XtraBars.Ribbon.RibbonControl()
+ Me.BarButtonItem1 = New DevExpress.XtraBars.BarButtonItem()
+ Me.BarButtonItem2 = New DevExpress.XtraBars.BarButtonItem()
+ Me.rbnPageStart = New DevExpress.XtraBars.Ribbon.RibbonPage()
+ Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
+ Me.RibbonStatusBar1 = New DevExpress.XtraBars.Ribbon.RibbonStatusBar()
+ Me.RibbonPage2 = New DevExpress.XtraBars.Ribbon.RibbonPage()
+ Me.BarButtonItem3 = New DevExpress.XtraBars.BarButtonItem()
+ CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).BeginInit()
+ Me.SuspendLayout()
+ '
+ 'RibbonControl1
+ '
+ Me.RibbonControl1.ExpandCollapseItem.Id = 0
+ Me.RibbonControl1.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl1.ExpandCollapseItem, Me.RibbonControl1.SearchEditItem, Me.BarButtonItem1, Me.BarButtonItem2, Me.BarButtonItem3})
+ Me.RibbonControl1.Location = New System.Drawing.Point(0, 0)
+ Me.RibbonControl1.MaxItemId = 5
+ Me.RibbonControl1.Name = "RibbonControl1"
+ Me.RibbonControl1.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.rbnPageStart})
+ Me.RibbonControl1.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.[False]
+ Me.RibbonControl1.Size = New System.Drawing.Size(800, 158)
+ Me.RibbonControl1.StatusBar = Me.RibbonStatusBar1
+ '
+ 'BarButtonItem1
+ '
+ Me.BarButtonItem1.Caption = "Daten neu laden"
+ Me.BarButtonItem1.Id = 1
+ Me.BarButtonItem1.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem1.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
+ Me.BarButtonItem1.Name = "BarButtonItem1"
+ '
+ 'BarButtonItem2
+ '
+ Me.BarButtonItem2.Caption = "Abbruch"
+ Me.BarButtonItem2.Id = 3
+ Me.BarButtonItem2.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem2.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
+ Me.BarButtonItem2.Name = "BarButtonItem2"
+ '
+ 'rbnPageStart
+ '
+ Me.rbnPageStart.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup1})
+ Me.rbnPageStart.Name = "rbnPageStart"
+ Me.rbnPageStart.Text = "Start"
+ '
+ 'RibbonPageGroup1
+ '
+ Me.RibbonPageGroup1.ItemLinks.Add(Me.BarButtonItem1)
+ Me.RibbonPageGroup1.ItemLinks.Add(Me.BarButtonItem2)
+ Me.RibbonPageGroup1.ItemLinks.Add(Me.BarButtonItem3)
+ Me.RibbonPageGroup1.Name = "RibbonPageGroup1"
+ Me.RibbonPageGroup1.Text = "Funktionen"
+ '
+ 'RibbonStatusBar1
+ '
+ Me.RibbonStatusBar1.Location = New System.Drawing.Point(0, 428)
+ Me.RibbonStatusBar1.Name = "RibbonStatusBar1"
+ Me.RibbonStatusBar1.Ribbon = Me.RibbonControl1
+ Me.RibbonStatusBar1.Size = New System.Drawing.Size(800, 22)
+ '
+ 'RibbonPage2
+ '
+ Me.RibbonPage2.Name = "RibbonPage2"
+ Me.RibbonPage2.Text = "RibbonPage2"
+ '
+ 'BarButtonItem3
+ '
+ Me.BarButtonItem3.Caption = "Layout zurücksetzen"
+ Me.BarButtonItem3.Id = 4
+ Me.BarButtonItem3.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem3.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
+ Me.BarButtonItem3.Name = "BarButtonItem3"
+ '
+ 'frmControl_Table
+ '
+ Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
+ Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
+ Me.ClientSize = New System.Drawing.Size(800, 450)
+ Me.Controls.Add(Me.RibbonStatusBar1)
+ Me.Controls.Add(Me.RibbonControl1)
+ Me.IconOptions.SvgImage = CType(resources.GetObject("frmControl_Table.IconOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
+ Me.Name = "frmControl_Table"
+ Me.Ribbon = Me.RibbonControl1
+ Me.StatusBar = Me.RibbonStatusBar1
+ Me.Text = "frmControl_Table"
+ CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).EndInit()
+ Me.ResumeLayout(False)
+ Me.PerformLayout()
+
+ End Sub
+
+ Friend WithEvents RibbonControl1 As DevExpress.XtraBars.Ribbon.RibbonControl
+ Friend WithEvents rbnPageStart As DevExpress.XtraBars.Ribbon.RibbonPage
+ Friend WithEvents RibbonPageGroup1 As DevExpress.XtraBars.Ribbon.RibbonPageGroup
+ Friend WithEvents RibbonStatusBar1 As DevExpress.XtraBars.Ribbon.RibbonStatusBar
+ Friend WithEvents RibbonPage2 As DevExpress.XtraBars.Ribbon.RibbonPage
+ Friend WithEvents BarButtonItem1 As DevExpress.XtraBars.BarButtonItem
+ Friend WithEvents BarButtonItem2 As DevExpress.XtraBars.BarButtonItem
+ Friend WithEvents BarButtonItem3 As DevExpress.XtraBars.BarButtonItem
+End Class
diff --git a/app/TaskFlow/frmControl_Table.resx b/app/TaskFlow/frmControl_Table.resx
new file mode 100644
index 0000000..977f028
--- /dev/null
+++ b/app/TaskFlow/frmControl_Table.resx
@@ -0,0 +1,197 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
+ LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+ dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAANYDAAAC77u/
+ PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+ IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+ MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+ Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
+ MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJ
+ LlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuQmx1ZXtmaWxsOiMxMTc3
+ RDc7fQoJLldoaXRle2ZpbGw6I0ZGRkZGRjt9CgkuR3JlZW57ZmlsbDojMDM5QzIzO30KCS5zdDB7b3Bh
+ Y2l0eTowLjc1O30KCS5zdDF7b3BhY2l0eTowLjU7fQoJLnN0MntvcGFjaXR5OjAuMjU7fQoJLnN0M3tm
+ aWxsOiNGRkIxMTU7fQo8L3N0eWxlPg0KICA8ZyAvPg0KICA8ZyBpZD0iVXBkYXRlIj4NCiAgICA8ZyBj
+ bGFzcz0ic3QxIj4NCiAgICAgIDxwYXRoIGQ9Ik0xNiw2aC02VjJoNlY2eiBNMTYsOGgtNnY0aDZWOHog
+ TTI0LDJoLTZ2NGg2VjJ6IE0yNCwxMlY4aC02djRIMjR6IE0yLDZoNlYySDJWNnogTTIsMThoNnYtNEgy
+ VjE4eiBNMTYsMTQgICAgTDE2LDE0bC02LDB2NGgyLjhDMTMuNSwxNi40LDE0LjYsMTUsMTYsMTR6IE0y
+ LDEyaDZWOEgyVjEyeiIgY2xhc3M9IkJsYWNrIiAvPg0KICAgIDwvZz4NCiAgICA8cGF0aCBkPSJNMjcu
+ NywyMGgySDMwdi02bC0yLjMsMi4zQzI2LjIsMTQuOSwyNC4yLDE0LDIyLDE0Yy00LjQsMC04LDMuNi04
+ LDhjMCw0LjQsMy42LDgsOCw4czgtMy42LDgtOGgtMiAgIGMwLDMuMy0yLjcsNi02LDZzLTYtMi43LTYt
+ NnMyLjctNiw2LTZjMS43LDAsMy4yLDAuNyw0LjIsMS44TDI0LDIwSDI3Ljd6IiBjbGFzcz0iR3JlZW4i
+ IC8+DQogIDwvZz4NCjwvc3ZnPgs=
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
+ LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+ dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAPoBAAAC77u/
+ PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+ IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+ MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+ Y2U9InByZXNlcnZlIiBpZD0iQ2xlYXJIZWFkZXJBbmRGb290ZXIiIHN0eWxlPSJlbmFibGUtYmFja2dy
+ b3VuZDpuZXcgMCAwIDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5SZWR7ZmlsbDoj
+ RDExQzFDO30KPC9zdHlsZT4NCiAgPHBhdGggZD0iTTI3LDRINUM0LjUsNCw0LDQuNSw0LDV2MjJjMCww
+ LjUsMC41LDEsMSwxaDIyYzAuNSwwLDEtMC41LDEtMVY1QzI4LDQuNSwyNy41LDQsMjcsNHogTTIyLDIw
+ bC0yLDJsLTQtNGwtNCw0ICBsLTItMmw0LTRsLTQtNGwyLTJsNCw0bDQtNGwyLDJsLTQsNEwyMiwyMHoi
+ IGNsYXNzPSJSZWQiIC8+DQo8L3N2Zz4L
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
+ LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+ dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAPECAAAC77u/
+ PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+ IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+ MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+ Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
+ MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9Cgku
+ WWVsbG93e2ZpbGw6I0ZGQjExNTt9CgkuQmx1ZXtmaWxsOiMxMTc3RDc7fQoJLkdyZWVue2ZpbGw6IzAz
+ OUMyMzt9CgkuUmVke2ZpbGw6I0QxMUMxQzt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh
+ Y2l0eTowLjc1O30KCS5zdDF7b3BhY2l0eTowLjU7fQoJLnN0MntvcGFjaXR5OjAuMjU7fQo8L3N0eWxl
+ Pg0KICA8ZyBpZD0iRGVsZXRlTGlzdCI+DQogICAgPHBhdGggZD0iTTYsMjZWNGgxOHYxMy4ybDItMlYz
+ YzAtMC42LTAuNC0xLTEtMUg1QzQuNCwyLDQsMi40LDQsM3YyNGMwLDAuNiwwLjQsMSwxLDFoOC4ybDIt
+ Mkg2eiIgY2xhc3M9IkJsYWNrIiAvPg0KICAgIDxwb2x5Z29uIHBvaW50cz0iMjgsMjAgMjYsMTggMjIs
+ MjIgMTgsMTggMTYsMjAgMjAsMjQgMTYsMjggMTgsMzAgMjIsMjYgMjYsMzAgMjgsMjggMjQsMjQgICIg
+ Y2xhc3M9IlJlZCIgLz4NCiAgPC9nPg0KPC9zdmc+Cw==
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
+ LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+ dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAPoBAAAC77u/
+ PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+ IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+ MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+ Y2U9InByZXNlcnZlIiBpZD0iU2VsZWN0VGFibGUiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcg
+ MCAwIDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbHVle2ZpbGw6IzExNzdENzt9
+ Cjwvc3R5bGU+DQogIDxwYXRoIGQ9Ik0xMCwxMEgyVjRoOFYxMHogTTIwLDRoLTh2Nmg4VjR6IE0zMCw0
+ aC04djZoOFY0eiBNMTAsMTJIMnY2aDhWMTJ6IE0yMCwxMmgtOHY2aDhWMTJ6IE0zMCwxMmgtOHY2aDhW
+ MTJ6ICAgTTEwLDIwSDJ2Nmg4VjIweiBNMjAsMjBoLTh2Nmg4VjIweiBNMzAsMjBoLTh2Nmg4VjIweiIg
+ Y2xhc3M9IkJsdWUiIC8+DQo8L3N2Zz4L
+
+
+
\ No newline at end of file
diff --git a/app/TaskFlow/frmControl_Table.vb b/app/TaskFlow/frmControl_Table.vb
new file mode 100644
index 0000000..5bb695c
--- /dev/null
+++ b/app/TaskFlow/frmControl_Table.vb
@@ -0,0 +1,607 @@
+Imports System.Data
+Imports System.Globalization
+Imports DevExpress.Data
+Imports DevExpress.Utils
+Imports DevExpress.XtraEditors
+Imports DevExpress.XtraExport.Helpers
+Imports DevExpress.XtraGrid
+Imports DevExpress.XtraGrid.Columns
+Imports DevExpress.XtraGrid.Views.Base
+Imports DevExpress.XtraGrid.Views.Grid
+Imports DevExpress.XtraReports.ReportGeneration
+Imports DigitalData.Modules.Logging
+Imports DigitalData.Modules.EDMI.API
+
+Public Class frmControl_Table
+ Private _gridControl As GridControl
+ Private _gridView As GridView
+ Private _controlRow As DataRow
+ Private _dataTable As DataTable
+ Private _docCurrency As String
+ Private _profilID As Integer
+ Private _controlID As Integer
+ Private _parentValidator As frmValidator
+ Private _controlCreator As ClassControlCreator
+ Private ReadOnly MyControlTableLogger As Logger
+ Private _gridDataLoader As ClassGridDataLoader
+ Private _isDirty As Boolean = False
+ ' Öffentliche Property für Dirty-Status
+ Public ReadOnly Property IsDirty As Boolean
+ Get
+ Return _isDirty
+ End Get
+ End Property
+ Public Sub New(controlRow As DataRow, dataTable As DataTable, docCurrency As String, parentValidator As frmValidator, controlCreator As ClassControlCreator)
+ InitializeComponent()
+ MyControlTableLogger = LOGCONFIG.GetLogger()
+ _gridDataLoader = New ClassGridDataLoader(DatabaseFallback)
+ _controlRow = controlRow
+ _dataTable = dataTable
+ _docCurrency = docCurrency
+ _parentValidator = parentValidator
+ _controlCreator = controlCreator
+
+ If controlRow IsNot Nothing Then
+ _profilID = If(IsDBNull(controlRow("PROFIL_ID")), 0, CInt(controlRow("PROFIL_ID")))
+ _controlID = If(IsDBNull(controlRow("GUID")), 0, CInt(controlRow("GUID")))
+
+ Dim oTitle = $"TABLE.{controlRow("NAME")}.FORMCAPTION"
+ Dim oCaption = ClassAllgemeineFunktionen.GUI_LANGUAGE_INFO(oTitle)
+
+ If IsNothing(oCaption) Then
+ Me.Text = controlRow("CTRL_TEXT").ToString()
+ Else
+ Me.Text = oCaption
+ End If
+ End If
+ End Sub
+ Private Function GetXML_FormSizeName(pProfilID As Integer, pControlID As Integer)
+ Dim Filename As String = String.Format($"Formlayout_{pProfilID}-{pControlID}.xml")
+ Return System.IO.Path.Combine(USER_CONFIG_DIRECTORY, Filename)
+ End Function
+ Public Function GetGridControl() As GridControl
+ Return _gridControl
+ End Function
+ Private Sub frmControl_Table_Load(sender As Object, e As EventArgs) Handles MyBase.Load
+ Try
+ MyControlTableLogger?.Debug("=== FORM LOAD START ===")
+ MyControlTableLogger?.Debug($"Form Size: {Me.Size}, Controls vor Grid: {Me.Controls.Count}")
+
+ ' Grid über ControlCreator erstellen (wie im frmValidator)
+ CreateGridViaControlCreator()
+
+ ' WICHTIG: Grid-Daten befüllen
+ FillGridWithData()
+
+ MyControlTableLogger?.Debug($"Nach CreateGrid - Controls im Form: {Me.Controls.Count}")
+
+ ' GridControl-Status prüfen
+ If _gridControl IsNot Nothing Then
+ MyControlTableLogger?.Debug($"GridControl.Visible: {_gridControl.Visible}, Enabled: {_gridControl.Enabled}")
+ MyControlTableLogger?.Debug($"GridControl.Size: {_gridControl.Size}, Location: {_gridControl.Location}")
+ MyControlTableLogger?.Debug($"GridControl.Parent: {_gridControl.Parent?.Name}")
+ End If
+ ' Formular-Größe wiederherstellen
+ RestoreFormSize()
+
+ MyControlTableLogger?.Debug("=== FORM LOAD END ===")
+
+ Catch ex As Exception
+ MyControlTableLogger?.Error($"Fehler beim Laden des Grids: {ex.Message}", ex)
+ XtraMessageBox.Show($"Fehler beim Laden des Grids: {ex.Message}", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
+ End Try
+ End Sub
+ '''
+ ''' Befüllt das Grid mit Daten aus der Datenbank
+ '''
+ Private Sub FillGridWithData()
+ Try
+ If _gridControl Is Nothing OrElse _parentValidator Is Nothing Then
+ MyControlTableLogger?.Warn("FillGridWithData: GridControl oder ParentValidator ist Nothing")
+ Return
+ End If
+
+ MyControlTableLogger?.Debug("Starte FillGridWithData...")
+
+ ' ✅ RICHTIG: DT_COLUMNS_GRID (ALLE Spalten mit SPALTENBREITE!)
+ Dim allColumnDefinitions As DataTable = _parentValidator.DT_COLUMNS_GRID
+
+ If allColumnDefinitions Is Nothing Then
+ MyControlTableLogger?.Warn("Keine Spalten-Definitionen verfügbar (DT_COLUMNS_GRID)")
+ Return
+ End If
+
+ Dim isIDBActive As Boolean = IDB_ACTIVE
+ Dim userLanguage As String = USER_LANGUAGE
+
+ ' GridDataLoader mit der RICHTIGEN Tabelle aufrufen
+ Dim success As Boolean = _gridDataLoader.FillGridData(
+ _gridControl,
+ _controlRow,
+ allColumnDefinitions, ' ← ALLE Spalten, nicht nur SQL!
+ _parentValidator
+ )
+
+ If success Then
+ MyControlTableLogger?.Debug("Grid-Daten erfolgreich befüllt")
+ _gridControl.RefreshDataSource()
+ Else
+ MyControlTableLogger?.Warn("Grid-Daten konnten nicht befüllt werden")
+ End If
+
+ Catch ex As Exception
+ MyControlTableLogger?.Error($"Fehler in FillGridWithData: {ex.Message}", ex)
+ End Try
+ End Sub
+ Private Sub CreateGridViaControlCreator()
+ If _controlCreator Is Nothing OrElse _controlRow Is Nothing OrElse _dataTable Is Nothing Then
+ Throw New InvalidOperationException("ControlCreator, ControlRow oder DataTable fehlen.")
+ End If
+
+ Try
+ MyControlTableLogger?.Debug($"Starte Grid-Erstellung für Control-ID: {_controlID}, Profil-ID: {_profilID}")
+
+ ' WICHTIG: PanelControl (DevExpress) statt Panel verwenden!
+ Dim containerPanel As New DevExpress.XtraEditors.PanelControl()
+ containerPanel.Dock = DockStyle.Fill
+ containerPanel.Name = "GridContainerPanel"
+ containerPanel.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder
+ Me.Controls.Add(containerPanel)
+
+ MyControlTableLogger?.Debug("Container PanelControl erstellt und zum Form hinzugefügt")
+
+ ' Grid über ControlCreator erstellen - MIT PanelControl als Parent
+ _gridControl = _controlCreator.CreateExistingGridControl(_controlRow, _dataTable, False, _docCurrency, containerPanel)
+
+ If _gridControl Is Nothing Then
+ MyControlTableLogger?.Warn("CreateExistingGridControl hat Nothing zurückgegeben")
+ Throw New InvalidOperationException("Grid konnte nicht erstellt werden.")
+ End If
+
+ MyControlTableLogger?.Debug($"GridControl erstellt: {_gridControl.Name}")
+ MyControlTableLogger?.Debug($"GridControl.Parent nach Erstellung: {_gridControl.Parent?.Name}")
+
+ ' GridControl sollte bereits vom ControlCreator hinzugefügt worden sein
+ ' Falls nicht, explizit hinzufügen
+ If _gridControl.Parent Is Nothing Then
+ containerPanel.Controls.Add(_gridControl)
+ MyControlTableLogger?.Debug("GridControl manuell zu Container hinzugefügt")
+ End If
+
+ ' GridControl konfigurieren
+ _gridControl.Dock = DockStyle.Fill
+ _gridControl.Visible = True
+ _gridControl.BringToFront()
+
+ MyControlTableLogger?.Debug($"GridControl Dock-Style gesetzt, Container.Controls.Count: {containerPanel.Controls.Count}")
+
+ ' GridView-Referenz holen
+ If _gridControl.MainView IsNot Nothing AndAlso TypeOf _gridControl.MainView Is GridView Then
+ _gridView = DirectCast(_gridControl.MainView, GridView)
+ MyControlTableLogger?.Debug($"GridView gefunden: {_gridView.Name}, Columns: {_gridView.Columns.Count}")
+
+ ' Events registrieren (wie im frmValidator)
+ AddHandler _gridView.CellValueChanged, AddressOf GridView_CellValueChanged
+ AddHandler _gridView.KeyDown, AddressOf GridView_KeyDown
+ AddHandler _gridView.RowDeleting, AddressOf GridView_RowDeleting
+
+ MyControlTableLogger?.Debug("GridView Events registriert")
+ Else
+ MyControlTableLogger?.Warn($"Kein GridView gefunden. MainView ist: {_gridControl.MainView?.GetType().Name}")
+ End If
+
+ If _dataTable IsNot Nothing Then
+ AddHandler _dataTable.RowDeleted, AddressOf GridDataSource_RowDeleted
+ MyControlTableLogger?.Debug($"DataTable Events registriert. Rows: {_dataTable.Rows.Count}")
+ End If
+
+ ' Refresh erzwingen
+ _gridControl.Refresh()
+ containerPanel.Refresh()
+ Me.Refresh()
+
+ MyControlTableLogger?.Debug("CreateGridViaControlCreator abgeschlossen")
+
+ Catch ex As Exception
+ MyControlTableLogger?.Error($"Fehler in CreateGridViaControlCreator: {ex.Message}", ex)
+ MyControlTableLogger?.Error($"StackTrace: {ex.StackTrace}")
+ Throw
+ End Try
+ End Sub
+
+
+ Private Sub GridView_CellValueChanged(sender As Object, e As CellValueChangedEventArgs)
+ ' Markiere als geändert
+ _isDirty = True
+ MyControlTableLogger?.Debug("Grid-Daten geändert - IsDirty = True")
+ ' Änderungen an Parent-Validator weitergeben, falls notwendig
+ If _parentValidator IsNot Nothing Then
+ ' Hier können Sie die gleiche Logik wie im frmValidator implementieren
+ End If
+ End Sub
+
+ Private Sub GridView_KeyDown(sender As Object, e As KeyEventArgs)
+ If e.KeyCode = Keys.Delete Then
+ If _gridView IsNot Nothing AndAlso _gridView.SelectedRowsCount > 0 Then
+ Dim result = XtraMessageBox.Show("Möchten Sie die ausgewählte(n) Zeile(n) wirklich löschen?",
+ "Löschen bestätigen",
+ MessageBoxButtons.YesNo,
+ MessageBoxIcon.Question)
+ If result = DialogResult.Yes Then
+ _gridView.DeleteSelectedRows()
+ End If
+ End If
+ End If
+ End Sub
+
+ Private Sub GridView_RowDeleting(sender As Object, e As RowDeletingEventArgs)
+ ' Markiere als geändert beim Löschen
+ _isDirty = True
+ MyControlTableLogger?.Debug("Grid-Zeile gelöscht - IsDirty = True")
+ End Sub
+
+ Private Sub GridDataSource_RowDeleted(sender As Object, e As DataRowChangeEventArgs)
+ ' Cleanup nach dem Löschen
+ CleanupDeletedRows()
+ End Sub
+
+ Private Sub CleanupDeletedRows()
+ If _dataTable Is Nothing Then Return
+
+ Try
+ Dim rowsToRemove As New List(Of DataRow)
+ For Each row As DataRow In _dataTable.Rows
+ If row.RowState = DataRowState.Deleted OrElse row.RowState = DataRowState.Detached Then
+ rowsToRemove.Add(row)
+ End If
+ Next
+
+ For Each row In rowsToRemove
+ Try
+ If row.RowState <> DataRowState.Detached Then
+ _dataTable.Rows.Remove(row)
+ End If
+ Catch
+ ' Row bereits entfernt
+ End Try
+ Next
+ Catch ex As Exception
+ ' Fehlerbehandlung
+ End Try
+ End Sub
+
+ Public Function GetGridData() As DataTable
+ Return _dataTable
+ End Function
+
+ Public Function ValidateGrid() As Boolean
+ If _gridView Is Nothing Then Return True
+
+ Try
+ _gridView.CloseEditor()
+ _gridView.UpdateCurrentRow()
+ Return _gridView.PostEditor()
+ Catch ex As Exception
+ Return False
+ End Try
+ End Function
+
+ Private Sub frmControl_Table_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
+ Try
+ ' Validierung vor dem Schließen
+ If Not ValidateGrid() Then
+ Dim result = XtraMessageBox.Show("Es gibt ungespeicherte Änderungen. Trotzdem schließen?",
+ "Warnung",
+ MessageBoxButtons.YesNo,
+ MessageBoxIcon.Warning)
+ If result = DialogResult.No Then
+ e.Cancel = True
+ Return
+ End If
+ End If
+
+ ' Formular-Größe speichern
+ SaveFormSize()
+ ' Events entfernen
+ If _gridView IsNot Nothing Then
+ RemoveHandler _gridView.CellValueChanged, AddressOf GridView_CellValueChanged
+ RemoveHandler _gridView.KeyDown, AddressOf GridView_KeyDown
+ RemoveHandler _gridView.RowDeleting, AddressOf GridView_RowDeleting
+ End If
+
+ If _dataTable IsNot Nothing Then
+ RemoveHandler _dataTable.RowDeleted, AddressOf GridDataSource_RowDeleted
+ End If
+
+ Catch ex As Exception
+ ' Fehlerbehandlung beim Schließen
+ End Try
+ End Sub
+
+ Private Sub BarButtonItem1_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem1.ItemClick
+ Try
+ MyControlTableLogger?.Debug("Daten neu laden angefordert ...")
+
+ ' Sprachabhängige Texte
+ Dim title, question, successMessage As String
+
+ Select Case USER_LANGUAGE
+ Case "de-DE"
+ title = "Daten neu laden"
+ question = "Möchten Sie die Daten wirklich neu laden?" & vbCrLf & vbCrLf &
+ "Alle nicht gespeicherten Änderungen gehen verloren!"
+ successMessage = "Daten wurden erfolgreich neu geladen."
+
+ Case "fr-FR"
+ title = "Recharger les données"
+ question = "Voulez-vous vraiment recharger les données?" & vbCrLf & vbCrLf &
+ "Toutes les modifications non enregistrées seront perdues!"
+ successMessage = "Les données ont été rechargées avec succès."
+
+ Case Else ' en-US, en-GB, etc.
+ title = "Reload Data"
+ question = "Do you really want to reload the data?" & vbCrLf & vbCrLf &
+ "All unsaved changes will be lost!"
+ successMessage = "Data has been successfully reloaded."
+ End Select
+
+ ' Benutzer-Bestätigung
+ Dim result = XtraMessageBox.Show(
+ question,
+ title,
+ MessageBoxButtons.YesNo,
+ MessageBoxIcon.Question
+ )
+
+ If result = DialogResult.No Then
+ MyControlTableLogger?.Debug("Reload vom Benutzer abgebrochen")
+ Return
+ End If
+
+ ' GridView zurücksetzen
+ If _gridView IsNot Nothing Then
+ _gridView.ClearColumnsFilter()
+ _gridView.ClearSorting()
+ _gridView.ClearGrouping()
+ MyControlTableLogger?.Debug("GridView Filter/Sortierung/Gruppierung gelöscht!")
+ End If
+
+ ' Daten neu laden (Spaltenbreiten kommen aus DB!)
+ FillGridWithData()
+
+ ' Erfolgs-Meldung
+ XtraMessageBox.Show(
+ successMessage,
+ title,
+ MessageBoxButtons.OK,
+ MessageBoxIcon.Information
+ )
+
+ MyControlTableLogger?.Debug("Daten erfolgreich neu geladen")
+
+ Catch ex As Exception
+ MyControlTableLogger?.Error($"Fehler beim Neuladen: {ex.Message}", ex)
+
+ ' Fehler-Meldung (auch mehrsprachig)
+ Dim errorTitle As String = If(USER_LANGUAGE = "de-DE", "Fehler", "Error")
+ Dim errorPrefix As String = If(USER_LANGUAGE = "de-DE", "Fehler beim Neuladen der Daten:", "Error while reloading data:")
+
+ XtraMessageBox.Show(
+ $"{errorPrefix}{vbCrLf}{ex.Message}",
+ errorTitle,
+ MessageBoxButtons.OK,
+ MessageBoxIcon.Error
+ )
+ End Try
+ End Sub
+
+ Private Sub BarButtonItem2_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem2.ItemClick
+ Me.Close()
+ End Sub
+ '''
+ ''' Speichert die aktuelle Formular-Größe und Position in einer XML-Datei
+ '''
+ Private Sub SaveFormSize()
+ Try
+ Dim xmlFile As String = GetXML_FormSizeName(_profilID, _controlID)
+
+ ' XML-Dokument erstellen
+ Dim xmlDoc As New Xml.XmlDocument()
+ Dim rootNode As Xml.XmlElement = xmlDoc.CreateElement("FormSize")
+ xmlDoc.AppendChild(rootNode)
+
+ ' Größe speichern
+ Dim widthNode As Xml.XmlElement = xmlDoc.CreateElement("Width")
+ widthNode.InnerText = Me.Width.ToString()
+ rootNode.AppendChild(widthNode)
+
+ Dim heightNode As Xml.XmlElement = xmlDoc.CreateElement("Height")
+ heightNode.InnerText = Me.Height.ToString()
+ rootNode.AppendChild(heightNode)
+
+ ' Position speichern
+ Dim leftNode As Xml.XmlElement = xmlDoc.CreateElement("Left")
+ leftNode.InnerText = Me.Left.ToString()
+ rootNode.AppendChild(leftNode)
+
+ Dim topNode As Xml.XmlElement = xmlDoc.CreateElement("Top")
+ topNode.InnerText = Me.Top.ToString()
+ rootNode.AppendChild(topNode)
+
+ ' WindowState speichern
+ Dim stateNode As Xml.XmlElement = xmlDoc.CreateElement("WindowState")
+ stateNode.InnerText = Me.WindowState.ToString()
+ rootNode.AppendChild(stateNode)
+
+ ' Verzeichnis erstellen, falls nicht vorhanden
+ Dim directory As String = System.IO.Path.GetDirectoryName(xmlFile)
+ If Not String.IsNullOrEmpty(directory) AndAlso Not System.IO.Directory.Exists(directory) Then
+ System.IO.Directory.CreateDirectory(directory)
+ End If
+
+ ' XML speichern
+ xmlDoc.Save(xmlFile)
+ MyControlTableLogger?.Debug($"Formular-Größe gespeichert: {xmlFile}")
+
+ Catch ex As Exception
+ MyControlTableLogger?.Error($"Fehler beim Speichern der Formular-Größe: {ex.Message}", ex)
+ End Try
+ End Sub
+
+ '''
+ ''' Lädt die gespeicherte Formular-Größe und Position aus der XML-Datei
+ '''
+ Private Sub RestoreFormSize()
+ Try
+ Dim xmlFile As String = GetXML_FormSizeName(_profilID, _controlID)
+
+ If Not System.IO.File.Exists(xmlFile) Then
+ MyControlTableLogger?.Debug($"Keine gespeicherte Formular-Größe gefunden: {xmlFile}")
+ Return
+ End If
+
+ ' XML laden
+ Dim xmlDoc As New Xml.XmlDocument()
+ xmlDoc.Load(xmlFile)
+
+ Dim rootNode As Xml.XmlNode = xmlDoc.SelectSingleNode("FormSize")
+ If rootNode Is Nothing Then Return
+
+ ' Größe wiederherstellen
+ Dim widthNode As Xml.XmlNode = rootNode.SelectSingleNode("Width")
+ Dim heightNode As Xml.XmlNode = rootNode.SelectSingleNode("Height")
+ If widthNode IsNot Nothing AndAlso heightNode IsNot Nothing Then
+ Dim width As Integer = 0
+ Dim height As Integer = 0
+ If Integer.TryParse(widthNode.InnerText, width) AndAlso Integer.TryParse(heightNode.InnerText, height) Then
+ Me.Size = New Size(width, height)
+ End If
+ End If
+
+ ' Position wiederherstellen
+ Dim leftNode As Xml.XmlNode = rootNode.SelectSingleNode("Left")
+ Dim topNode As Xml.XmlNode = rootNode.SelectSingleNode("Top")
+ If leftNode IsNot Nothing AndAlso topNode IsNot Nothing Then
+ Dim left As Integer = 0
+ Dim top As Integer = 0
+ If Integer.TryParse(leftNode.InnerText, left) AndAlso Integer.TryParse(topNode.InnerText, top) Then
+ Me.Location = New Point(left, top)
+ End If
+ End If
+
+ ' WindowState wiederherstellen
+ Dim stateNode As Xml.XmlNode = rootNode.SelectSingleNode("WindowState")
+ If stateNode IsNot Nothing Then
+ Dim state As FormWindowState
+ If [Enum].TryParse(Of FormWindowState)(stateNode.InnerText, state) Then
+ Me.WindowState = state
+ End If
+ End If
+
+ MyControlTableLogger?.Debug($"Formular-Größe wiederhergestellt: {xmlFile}")
+
+ Catch ex As Exception
+ MyControlTableLogger?.Error($"Fehler beim Wiederherstellen der Formular-Größe: {ex.Message}", ex)
+ End Try
+ End Sub
+
+ Private Sub BarButtonItem3_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem3.ItemClick
+ Try
+ ' Sprachabhängige Texte
+ Dim title, question, successMessage As String
+
+ Select Case USER_LANGUAGE
+ Case "de-DE"
+ title = "Layout löschen"
+ question = "Möchten Sie das gespeicherte Layout wirklich löschen?" & vbCrLf & vbCrLf &
+ "Das Formular wird auf die Standardgröße zurückgesetzt und neu geladen."
+ successMessage = "Layout wurde erfolgreich gelöscht." & vbCrLf & "Das Formular wird neu geladen..."
+
+ Case "fr-FR"
+ title = "Supprimer la disposition"
+ question = "Voulez-vous vraiment supprimer la disposition enregistrée?" & vbCrLf & vbCrLf &
+ "Le formulaire sera réinitialisé à la taille par défaut et rechargé."
+ successMessage = "La disposition a été supprimée avec succès." & vbCrLf & "Le formulaire va être rechargé..."
+
+ Case Else ' en-US, en-GB, etc.
+ title = "Delete Layout"
+ question = "Do you really want to delete the saved layout?" & vbCrLf & vbCrLf &
+ "The form will be reset to the default size and reloaded."
+ successMessage = "Layout has been successfully deleted." & vbCrLf & "The form will be reloaded..."
+ End Select
+
+ ' Benutzer-Bestätigung
+ Dim result = XtraMessageBox.Show(
+ question,
+ title,
+ MessageBoxButtons.YesNo,
+ MessageBoxIcon.Question
+ )
+
+ If result = DialogResult.No Then
+ MyControlTableLogger?.Debug("Layout-Löschung vom Benutzer abgebrochen")
+ Return
+ End If
+
+ ' Layout-Datei löschen
+ Dim xmlFile As String = GetXML_FormSizeName(_profilID, _controlID)
+ Dim layoutDeleted As Boolean = False
+
+ If System.IO.File.Exists(xmlFile) Then
+ System.IO.File.Delete(xmlFile)
+ layoutDeleted = True
+ MyControlTableLogger?.Debug($"Layout-Datei gelöscht: {xmlFile}")
+ Else
+ MyControlTableLogger?.Debug($"Keine Layout-Datei zum Löschen gefunden: {xmlFile}")
+ End If
+
+ ' Erfolgs-Meldung
+ XtraMessageBox.Show(
+ successMessage,
+ title,
+ MessageBoxButtons.OK,
+ MessageBoxIcon.Information
+ )
+
+ ' Formular neu laden
+ If layoutDeleted Then
+ MyControlTableLogger?.Debug("Lade Formular nach Layout-Löschung neu...")
+
+ ' GridView zurücksetzen
+ If _gridView IsNot Nothing Then
+ _gridView.ClearColumnsFilter()
+ _gridView.ClearSorting()
+ _gridView.ClearGrouping()
+ MyControlTableLogger?.Debug("GridView Filter/Sortierung/Gruppierung zurückgesetzt")
+ End If
+
+ ' Daten neu laden
+ FillGridWithData()
+
+ ' Formular auf Standardgröße zurücksetzen
+ Me.WindowState = FormWindowState.Normal
+ Me.StartPosition = FormStartPosition.CenterParent
+
+ MyControlTableLogger?.Debug("Formular erfolgreich neu geladen")
+ End If
+
+ Catch ex As Exception
+ MyControlTableLogger?.Error($"Fehler beim Löschen des Layouts: {ex.Message}", ex)
+
+ ' Fehler-Meldung (mehrsprachig)
+ Dim errorTitle As String = If(USER_LANGUAGE = "de-DE", "Fehler", If(USER_LANGUAGE = "fr-FR", "Erreur", "Error"))
+ Dim errorPrefix As String = If(USER_LANGUAGE = "de-DE",
+ "Fehler beim Löschen des Layouts:",
+ If(USER_LANGUAGE = "fr-FR",
+ "Erreur lors de la suppression de la disposition:",
+ "Error while deleting layout:"))
+
+ XtraMessageBox.Show(
+ $"{errorPrefix}{vbCrLf}{ex.Message}",
+ errorTitle,
+ MessageBoxButtons.OK,
+ MessageBoxIcon.Error
+ )
+ End Try
+ End Sub
+End Class
\ No newline at end of file
diff --git a/app/TaskFlow/frmFormDesigner.vb b/app/TaskFlow/frmFormDesigner.vb
index 40fdf3e..4fb7fa5 100644
--- a/app/TaskFlow/frmFormDesigner.vb
+++ b/app/TaskFlow/frmFormDesigner.vb
@@ -624,7 +624,6 @@ Public Class frmFormDesigner
obj.Index = ClassAllgemeineFunktionen.NotNullString(row.Item("INDEX_NAME"), "")
obj.DefaultValue = ClassAllgemeineFunktionen.NotNullString(row.Item("DEFAULT_VALUE"), Nothing)
obj.TextAlignment = ClassAllgemeineFunktionen.NotNullString(row.Item("TEXT_ALIGNMENT"), "Near")
- ' Default value for ConnectionID
Dim oConnectionId = ClassAllgemeineFunktionen.NotNullString(row.Item("CONNECTION_ID"), 0)
obj.SQLCommand = New SQLValue(row.Item("SQL_UEBERPRUEFUNG"))
Return obj
@@ -746,6 +745,7 @@ Public Class frmFormDesigner
oGridProps.AllowAddNewValues = StrToBool(oRow.Item("VKT_ADD_ITEM"))
oGridProps.Enable_SQL = New SQLValue(ClassAllgemeineFunktionen.NotNullString(oRow.Item("SQL_ENABLE"), ""))
oGridProps.Enable_SQL_OnLoad = New SQLValue(ClassAllgemeineFunktionen.NotNullString(oRow.Item("SQL_ENABLE_ON_LOAD"), ""))
+ oGridProps.DISPLAY_SEP_FORM = StrToBool(oRow.Item("DISPLAY_IN_SEPERATE_FORM")) ' Hier hinzufügen
props = oGridProps
ElseIf TypeOf sender Is Button Then
Dim oButton As Button = sender
@@ -908,6 +908,8 @@ Public Class frmFormDesigner
Case "Active"
UpdateSingleValue("CONTROL_ACTIVE", IIf(newValue = True, 1, 0))
+ Case "DISPLAY_SEP_FORM"
+ UpdateSingleValue("DISPLAY_IN_SEPERATE_FORM", IIf(newValue = True, 1, 0))
Case "CtrlImage"
Dim myPath As ImageValue = newValue
UpdateImage(myPath.Value)
@@ -1153,7 +1155,7 @@ Public Class frmFormDesigner
Dim label = ControlCreator.CreateNewLabel(cursorPosition)
SetMovementHandlers(label)
- TBPM_PROFILE_CONTROLSTableAdapter.cmdInsertAnlage(ProfileId, label.Name, "LBL", label.Text, label.Location.X, label.Location.Y, USER_USERNAME, label.Size.Height, label.Size.Width, label.TextAlign)
+ TBPM_PROFILE_CONTROLSTableAdapter.cmdInsertAnlage(ProfileId, label.Name, "LBL", label.Text, label.Location.X, label.Location.Y, USER_USERNAME, label.Size.Height, label.Size.Width, label.TextAlign, "")
CHANGES_FORM_DESIGN = True
CurrentControl = label
CurrentControl.Tag = New ClassControlCreator.ControlMetadata() With {
@@ -1167,7 +1169,7 @@ Public Class frmFormDesigner
Dim txt = ControlCreator.CreateNewTextBox(cursorPosition)
SetMovementHandlers(txt)
- TBPM_PROFILE_CONTROLSTableAdapter.cmdInsertAnlage(ProfileId, txt.Name, "TXT", txt.Name, txt.Location.X, txt.Location.Y, USER_USERNAME, txt.Size.Height, txt.Size.Width, txt.Properties.Appearance.TextOptions.HAlignment)
+ TBPM_PROFILE_CONTROLSTableAdapter.cmdInsertAnlage(ProfileId, txt.Name, "TXT", txt.Name, txt.Location.X, txt.Location.Y, USER_USERNAME, txt.Size.Height, txt.Size.Width, txt.Properties.Appearance.TextOptions.HAlignment, "0")
CHANGES_FORM_DESIGN = True
CurrentControl = txt
CurrentControl.Tag = New ClassControlCreator.ControlMetadata() With {
@@ -1181,7 +1183,7 @@ Public Class frmFormDesigner
Dim cmb = ControlCreator.CreateNewCombobox(cursorPosition)
SetMovementHandlers(cmb)
- TBPM_PROFILE_CONTROLSTableAdapter.cmdInsertAnlage(ProfileId, cmb.Name, "CMB", cmb.Name, cmb.Location.X, cmb.Location.Y, USER_USERNAME, cmb.Size.Height, cmb.Size.Width, "NONE")
+ TBPM_PROFILE_CONTROLSTableAdapter.cmdInsertAnlage(ProfileId, cmb.Name, "CMB", cmb.Name, cmb.Location.X, cmb.Location.Y, USER_USERNAME, cmb.Size.Height, cmb.Size.Width, "NONE", "0")
CHANGES_FORM_DESIGN = True
CurrentControl = cmb
CurrentControl.Tag = New ClassControlCreator.ControlMetadata() With {
@@ -1195,7 +1197,7 @@ Public Class frmFormDesigner
Dim dtp = ControlCreator.CreateNewDatetimepicker(cursorPosition)
SetMovementHandlers(dtp)
- TBPM_PROFILE_CONTROLSTableAdapter.cmdInsertAnlage(ProfileId, dtp.Name, "DTP", dtp.Name, dtp.Location.X, dtp.Location.Y, USER_USERNAME, dtp.Size.Height, dtp.Size.Width, "NONE")
+ TBPM_PROFILE_CONTROLSTableAdapter.cmdInsertAnlage(ProfileId, dtp.Name, "DTP", dtp.Name, dtp.Location.X, dtp.Location.Y, USER_USERNAME, dtp.Size.Height, dtp.Size.Width, "NONE", "0")
CHANGES_FORM_DESIGN = True
CurrentControl = dtp
CurrentControl.Tag = New ClassControlCreator.ControlMetadata() With {
@@ -1209,7 +1211,7 @@ Public Class frmFormDesigner
Dim chk = ControlCreator.CreateNewCheckbox(cursorPosition)
SetMovementHandlers(chk)
- TBPM_PROFILE_CONTROLSTableAdapter.cmdInsertAnlage(ProfileId, chk.Name, "CHK", chk.Text, chk.Location.X, chk.Location.Y, USER_USERNAME, chk.Size.Height, chk.Size.Width, "NONE")
+ TBPM_PROFILE_CONTROLSTableAdapter.cmdInsertAnlage(ProfileId, chk.Name, "CHK", chk.Text, chk.Location.X, chk.Location.Y, USER_USERNAME, chk.Size.Height, chk.Size.Width, "NONE", "0")
CHANGES_FORM_DESIGN = True
CurrentControl = chk
CurrentControl.Tag = New ClassControlCreator.ControlMetadata() With {
@@ -1224,7 +1226,7 @@ Public Class frmFormDesigner
SetMovementHandlers(lc)
- TBPM_PROFILE_CONTROLSTableAdapter.cmdInsertAnlage(ProfileId, lc.Name, "LOOKUP", lc.Name, lc.Location.X, lc.Location.Y, USER_USERNAME, lc.Size.Height, lc.Size.Width, lc.Properties.Appearance.TextOptions.HAlignment)
+ TBPM_PROFILE_CONTROLSTableAdapter.cmdInsertAnlage(ProfileId, lc.Name, "LOOKUP", lc.Name, lc.Location.X, lc.Location.Y, USER_USERNAME, lc.Size.Height, lc.Size.Width, lc.Properties.Appearance.TextOptions.HAlignment, "0")
CHANGES_FORM_DESIGN = True
CurrentControl = lc
CurrentControl.Tag = New ClassControlCreator.ControlMetadata() With {
@@ -1240,7 +1242,7 @@ Public Class frmFormDesigner
SetMovementHandlers(tb)
AddHandler tb.MouseClick, AddressOf gridControl_MouseClick
- TBPM_PROFILE_CONTROLSTableAdapter.cmdInsertAnlage(ProfileId, tb.Name, "TABLE", tb.Name, tb.Location.X, tb.Location.Y, USER_USERNAME, tb.Size.Height, tb.Size.Width, "NONE")
+ TBPM_PROFILE_CONTROLSTableAdapter.cmdInsertAnlage(ProfileId, tb.Name, "TABLE", tb.Name, tb.Location.X, tb.Location.Y, USER_USERNAME, tb.Size.Height, tb.Size.Width, "NONE", "")
CHANGES_FORM_DESIGN = True
Dim oControlId = GetLastID()
@@ -1259,7 +1261,7 @@ Public Class frmFormDesigner
SetMovementHandlers(line)
- TBPM_PROFILE_CONTROLSTableAdapter.cmdInsertAnlage(ProfileId, line.Name, "LINE", line.Name, line.Location.X, line.Location.Y, USER_USERNAME, line.Size.Height, line.Size.Width, "NONE")
+ TBPM_PROFILE_CONTROLSTableAdapter.cmdInsertAnlage(ProfileId, line.Name, "LINE", line.Name, line.Location.X, line.Location.Y, USER_USERNAME, line.Size.Height, line.Size.Width, "NONE", "")
CHANGES_FORM_DESIGN = True
CurrentControl = line
CurrentControl.Tag = New ClassControlCreator.ControlMetadata() With {
@@ -1274,7 +1276,7 @@ Public Class frmFormDesigner
SetMovementHandlers(oButton)
- TBPM_PROFILE_CONTROLSTableAdapter.cmdInsertAnlage(ProfileId, oButton.Name, "BUTTON", oButton.Name, oButton.Location.X, oButton.Location.Y, USER_USERNAME, oButton.Size.Height, oButton.Size.Width, "NONE")
+ TBPM_PROFILE_CONTROLSTableAdapter.cmdInsertAnlage(ProfileId, oButton.Name, "BUTTON", oButton.Name, oButton.Location.X, oButton.Location.Y, USER_USERNAME, oButton.Size.Height, oButton.Size.Width, "NONE", "")
CHANGES_FORM_DESIGN = True
CurrentControl = oButton
CurrentControl.Tag = New ClassControlCreator.ControlMetadata() With {
diff --git a/app/TaskFlow/frmValidator.vb b/app/TaskFlow/frmValidator.vb
index a3e41eb..699fbce 100644
--- a/app/TaskFlow/frmValidator.vb
+++ b/app/TaskFlow/frmValidator.vb
@@ -4,6 +4,7 @@ Imports System.Data.Entity.Core.Common.CommandTrees
'Imports System.Data.SqlClient
Imports System.Globalization
Imports System.IO
+Imports System.Linq
Imports System.Reflection
Imports System.Runtime.InteropServices
Imports System.Text.RegularExpressions
@@ -27,6 +28,7 @@ Imports DigitalData.Controls.LookupGrid
Imports DigitalData.GUIs.Common
Imports DigitalData.GUIs.Common.DocumentResultList
Imports DigitalData.Modules.Base
+Imports DigitalData.Modules.EDMI.API
Imports DigitalData.Modules.EDMI.API.Constants
Imports DigitalData.Modules.EDMI.API.DatabaseWithFallback
Imports DigitalData.Modules.Interfaces
@@ -36,7 +38,6 @@ Imports DigitalData.Modules.ZooFlow.Constants
'Imports System.Windows.Forms.VisualStyles.VisualStyleElement
'Imports System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox
Imports WINDREAMLib
-Imports System.Linq
Public Class frmValidator
Public Event CustomColumnDisplayText As CustomColumnDisplayTextEventHandler
@@ -49,12 +50,12 @@ Public Class frmValidator
'''
''' Contains all grid columns for the current profile
'''
- Private Property DT_COLUMNS_GRID As DataTable
+ Public Property DT_COLUMNS_GRID As DataTable
Private Property GIT_TEST As Boolean = False
'''
''' Contains all grid columns for the current profile which have an sql but don't have a reference to a control
'''
- Private Property DT_COLUMNS_GRID_WITH_SQL As DataTable
+ Public Property DT_COLUMNS_GRID_WITH_SQL As DataTable
'''
''' Contains all grid columns for the current profile which have an sql and have a reference to a control
@@ -136,14 +137,16 @@ Public Class frmValidator
Private _CachedControlsByGuid As Dictionary(Of Integer, Control)
Private _isUpdatingLookup As Boolean = False
Private _suppressLookupEvents As Boolean = False
- Private _isShowingErrorDialog As Boolean = False ' ← NEU: Klassenvariable oben hinzufügen
- Private _overlayHandle As Object = Nothing ' ← NEU: Klassenvariable
- Private _overlayRefCount As Integer = 0 ' ← NEU: Zähler für verschachtelte Calls
- Private _overlayLock As New Object() ' ← NEU: Thread-Safe Lock
+ Private _isShowingErrorDialog As Boolean = False
+ Private _overlayHandle As Object = Nothing
+ Private _overlayRefCount As Integer = 0 'Zähler für verschachtelte Calls
+ Private _overlayLock As New Object() 'Thread-Safe Lock
Private _documentPathHandler As DocumentPathHandler
Private _isLoadingAdditionalSearches As Boolean = False
-
-
+ Private _gridDataLoader As ClassGridDataLoader
+ Private _separateGridDataCache As New Dictionary(Of String, DataTable)
+ ' Bei den anderen Private-Deklarationen:
+ Private _separateGridControlCache As New Dictionary(Of String, GridControl)
Private Class Translation_Strings
Inherits My.Resources.frmValidator_Strings
End Class
@@ -407,7 +410,7 @@ Public Class frmValidator
Catch ex As Exception
MyValidationLogger.Error(ex)
- MsgBox("Error LOADING profile-data(" & _step.ToString & "):" & vbcrlf & ex.Message, MsgBoxStyle.Critical, "Attention:")
+ MsgBox("Error LOADING profile-data(" & _step.ToString & "):" & vbCrLf & ex.Message, MsgBoxStyle.Critical, "Attention:")
MyValidationLogger.Info(">> Error in LOADING profile-data: " & ex.Message, True)
Me.Close()
End Try
@@ -543,7 +546,7 @@ Public Class frmValidator
Catch ex As Exception
MyValidationLogger.Error(ex)
- MsgBox("Error loading final profile text:" & vbcrlf & ex.Message, MsgBoxStyle.Critical, "Attention:")
+ MsgBox("Error loading final profile text:" & vbCrLf & ex.Message, MsgBoxStyle.Critical, "Attention:")
MyValidationLogger.Info(">> Error loading final profile text: " & ex.Message, True)
End Try
@@ -678,7 +681,7 @@ Public Class frmValidator
Catch ex As Exception
MyValidationLogger.Error(ex)
- MsgBox("Error LOADING Profile-Data1:" & vbcrlf & ex.Message, MsgBoxStyle.Critical, "Attention:")
+ MsgBox("Error LOADING Profile-Data1:" & vbCrLf & ex.Message, MsgBoxStyle.Critical, "Attention:")
MyValidationLogger.Info("Unexpected error in LOADING Profile-Data1: " & ex.Message)
End Try
End Sub
@@ -818,7 +821,7 @@ Public Class frmValidator
DatabaseFallback.ExecuteNonQueryECM(oSQL)
Catch ex As Exception
MyValidationLogger.Error(ex)
- MsgBox("Error in delete jumped files:" & vbcrlf & ex.Message, MsgBoxStyle.Critical)
+ MsgBox("Error in delete jumped files:" & vbCrLf & ex.Message, MsgBoxStyle.Critical)
End Try
If LOG_HOTSPOTS Then
@@ -1662,9 +1665,7 @@ Public Class frmValidator
Case "TABLE"
If LOG_PERF Then PerformanceLogger.Info("Create_Controls/Table")
-
oControlInfo = "TABLE#" & oControlInfo
-
Dim oFilteredDatatable As DataTable = DT_COLUMNS_GRID.Clone()
Dim oExpression = $"CONTROL_ID = {oControlRow.Item("GUID")}"
DT_COLUMNS_GRID.Select(oExpression, "SEQUENCE").CopyToDataTable(oFilteredDatatable, LoadOption.PreserveChanges)
@@ -1675,13 +1676,58 @@ Public Class frmValidator
Continue For
End If
- Dim oGrid = ControlCreator.CreateExistingGridControl(oControlRow, oFilteredDatatable, False, DocCurrency, PanelValidatorControl)
- oMyControl = oGrid
- ' NEU: GridView Event registrieren
- AddHandler DirectCast(oGrid.MainView, GridView).CellValueChanged, AddressOf GridView_CellValueChanged
- AddHandler DirectCast(oGrid.DataSource, DataTable).RowDeleted, AddressOf GridDataSource_RowDeleted
- AddHandler DirectCast(oGrid.MainView, GridView).KeyDown, AddressOf GridView_KeyDown
- AddHandler DirectCast(oGrid.MainView, GridView).RowDeleting, AddressOf GridView_RowDeleting
+ Dim displayInSeparateForm As Boolean = False
+ If Not IsDBNull(oControlRow("DISPLAY_IN_SEPERATE_FORM")) Then
+ displayInSeparateForm = CBool(oControlRow("DISPLAY_IN_SEPERATE_FORM"))
+ End If
+
+ If displayInSeparateForm Then
+ MyValidationLogger.Debug($"[{oControlInfo}] - DisplayInSeparateForm is True. Creating a separate form for the grid.")
+ ' Button erstellen statt Grid
+ Dim btnShowGrid As New DevExpress.XtraEditors.SimpleButton()
+ btnShowGrid.Name = "BTNDYN_GRID_" + oControlRow("NAME").ToString()
+ Dim oTitle = "TABLE." + oControlRow("NAME").ToString()
+ Dim oCaption = ClassAllgemeineFunktionen.GUI_LANGUAGE_INFO(oTitle)
+
+ If IsNothing(oCaption) Then
+ btnShowGrid.Text = oControlRow("CTRL_TEXT").ToString()
+ Else
+ btnShowGrid.Text = oCaption
+ End If
+ btnShowGrid.Font = New Font("Segoe UI", 10.0F, FontStyle.Bold)
+ ' Button-Position aus oControlRow setzen
+ If Not IsDBNull(oControlRow("X_LOC")) Then
+ btnShowGrid.Left = CInt(oControlRow("X_LOC"))
+ End If
+ If Not IsDBNull(oControlRow("Y_LOC")) Then
+ btnShowGrid.Top = CInt(oControlRow("Y_LOC"))
+ End If
+ ' Dynamische Breite basierend auf Textlänge berechnen
+ Using g As Graphics = btnShowGrid.CreateGraphics()
+ Dim textSize As SizeF = g.MeasureString(btnShowGrid.Text, btnShowGrid.Font)
+ btnShowGrid.Width = CInt(textSize.Width) + 20 ' +20 für Padding (links/rechts)
+ End Using
+ btnShowGrid.Height = 30
+
+ ' Click-Event für Button
+ AddHandler btnShowGrid.Click, Sub(sender, e)
+ OpenGridInSeparateForm(oControlRow, oFilteredDatatable)
+ End Sub
+
+ PanelValidatorControl.Controls.Add(btnShowGrid)
+ Else
+ MyValidationLogger.Debug($"[{oControlInfo}] - DisplayInSeparateForm is False. Creating an embedded grid.")
+ Dim oGrid = ControlCreator.CreateExistingGridControl(oControlRow, oFilteredDatatable, False, DocCurrency, PanelValidatorControl)
+ oMyControl = oGrid
+ ' NEU: GridView Event registrieren
+ AddHandler DirectCast(oGrid.MainView, GridView).CellValueChanged, AddressOf GridView_CellValueChanged
+ AddHandler DirectCast(oGrid.DataSource, DataTable).RowDeleted, AddressOf GridDataSource_RowDeleted
+ AddHandler DirectCast(oGrid.MainView, GridView).KeyDown, AddressOf GridView_KeyDown
+ AddHandler DirectCast(oGrid.MainView, GridView).RowDeleting, AddressOf GridView_RowDeleting
+ End If
+
+
+
Case "LINE"
oMyControl = ControlCreator.CreateExistingLine(oControlRow, False)
@@ -1739,6 +1785,9 @@ Public Class frmValidator
Sub Clear_all_Input()
For Each inctrl As Control In Me.PanelValidatorControl.Controls
+ If inctrl.Name.StartsWith("BTNDYN_GRID") Then
+ Continue For
+ End If
Dim Type As Type = inctrl.GetType
Select Case True
Case Type = GetType(DevExpress.XtraEditors.TextEdit) Or Type = GetType(MemoEdit)
@@ -2074,6 +2123,77 @@ Public Class frmValidator
End Sub
+ Private Sub OpenGridInSeparateForm(controlRow As DataRow, dataTable As DataTable)
+ Try
+ MyValidationLogger?.Debug($"Öffne Grid in separatem Fenster für Control: {controlRow("NAME")}")
+
+ Dim controlName As String = controlRow("NAME").ToString()
+
+ ' Erstelle das separate Formular
+ Dim frmTable As New frmControl_Table(
+ controlRow,
+ dataTable,
+ DocCurrency,
+ Me,
+ ControlCreator
+ )
+
+ ' Modal anzeigen
+ Dim dialogResult = frmTable.ShowDialog(Me)
+
+ ' Nach dem Schließen: IsDirty-Status und GridControl übertragen
+ If frmTable.IsDirty Then
+ MyValidationLogger?.Debug("Separate Grid-Form wurde als 'Dirty' markiert - übertrage Status und GridControl")
+
+ ' 1. GridControl aus separatem Formular holen
+ Dim separateGrid As GridControl = frmTable.GetGridControl()
+
+ If separateGrid IsNot Nothing Then
+ ' 2. GridControl in Cache speichern für Check_UpdateIndexe
+ If _separateGridDataCache.ContainsKey(controlName) Then
+ ' Ersetze DataTable durch GridControl-Referenz
+ _separateGridDataCache(controlName) = TryCast(separateGrid.DataSource, DataTable)
+ Else
+ _separateGridDataCache.Add(controlName, TryCast(separateGrid.DataSource, DataTable))
+ End If
+
+ ' ODER BESSER: Speichere das GridControl selbst
+ ' Dafür neues Dictionary verwenden
+ If _separateGridControlCache.ContainsKey(controlName) Then
+ _separateGridControlCache(controlName) = separateGrid
+ Else
+ _separateGridControlCache.Add(controlName, separateGrid)
+ End If
+
+ MyValidationLogger?.Debug($"GridControl für '{controlName}' gecacht")
+ End If
+
+ ' 3. IsDirty für dieses Control setzen
+ If Not listofControls.Contains(controlName) Then
+ listofControls.Add(controlName)
+ MyValidationLogger?.Debug($"Control '{controlName}' zu listofControls hinzugefügt (IsDirty)")
+ End If
+
+ ' Status-Label aktualisieren
+ SetStatusLabel("Tabellendaten wurden geändert", "Orange")
+ Else
+ MyValidationLogger?.Debug("Separate Grid-Form wurde NICHT geändert (IsDirty = False)")
+ End If
+
+ ' WICHTIG: Formular NICHT disposen, da wir das GridControl noch brauchen!
+ ' frmTable.Dispose() ← NICHT aufrufen!
+
+ Catch ex As Exception
+ MyValidationLogger?.Error($"Fehler beim Öffnen des separaten Grid-Fensters: {ex.Message}", ex)
+ XtraMessageBox.Show(
+ $"Fehler beim Öffnen des separaten Fensters:{vbCrLf}{ex.Message}",
+ "Fehler",
+ MessageBoxButtons.OK,
+ MessageBoxIcon.Error
+ )
+ End Try
+ End Sub
+
Public Sub onDGVRowValidating(ByVal sender As Object, ByVal e As DataGridViewCellCancelEventArgs)
Dim dgv As DataGridView = sender
Try
@@ -4035,6 +4155,8 @@ Public Class frmValidator
_CachedSqlDataCache.Clear()
_CachedSqlScalarCache.Clear()
+ _separateGridDataCache.Clear()
+ _separateGridControlCache.Clear()
_CachedSqlControlsByGuid = Nothing
CURRENT_WMFILE = Nothing
activate_controls(False)
@@ -4237,6 +4359,9 @@ Public Class frmValidator
Next
For Each oControl As Control In PanelValidatorControl.Controls
+ If oControl.Name.StartsWith("BTNDYN_GRID") Then
+ Continue For
+ End If
Dim controlId = DirectCast(oControl.Tag, ClassControlCreator.ControlMetadata).Guid
If sqlControlIds.Contains(controlId) Then
LoadSQLData(oControl, controlId)
@@ -4284,6 +4409,9 @@ Public Class frmValidator
End If
For Each oControl As Control In PanelValidatorControl.Controls
Try
+ If oControl.Name.StartsWith("BTNDYN_GRID") Then
+ Continue For
+ End If
If TypeOf oControl Is GridControl Then
Dim oGrid As GridControl = DirectCast(oControl, GridControl)
Dim oControlMeta = DirectCast(oControl.Tag, ClassControlCreator.ControlMetadata)
@@ -4914,7 +5042,7 @@ Public Class frmValidator
End Function
- Private Function GetVariableValuefromSource(oSourceIndexName As String, Optional oIDBTyp As Integer = 0, Optional FromIDB As Boolean = False) As Object
+ Public Function GetVariableValuefromSource(oSourceIndexName As String, Optional oIDBTyp As Integer = 0, Optional FromIDB As Boolean = False) As Object
Try
Dim oValuefromSource
If IDB_ACTIVE = False Then
@@ -4985,6 +5113,9 @@ Public Class frmValidator
_CachedControlsByGuid = New Dictionary(Of Integer, Control)()
For Each ctrl As Control In PanelValidatorControl.Controls
Try
+ If ctrl.Name.StartsWith("BTNDYN_GRID") Then
+ Continue For
+ End If
Dim meta = DirectCast(ctrl.Tag, ClassControlCreator.ControlMetadata)
_CachedControlsByGuid(meta.Guid) = ctrl
Catch
@@ -5011,6 +5142,9 @@ Public Class frmValidator
If DTVWCONTROL_INDEX.Rows.Count > 0 Then
Dim oCount As Integer = 0
For Each oControl As Control In Me.PanelValidatorControl.Controls
+ If oControl.Name.StartsWith("BTNDYN_GRID") Then
+ Continue For
+ End If
Dim oValueFromSource
Dim oFormattedValue As String = ""
@@ -5228,9 +5362,6 @@ Public Class frmValidator
oControlType = "DevExpress.XtraGrid.GridControl"
Dim oMyGridControl As GridControl = oControl
- ' ========== OPTIMIERUNG 6: Dictionary-Lookup statt Select() ==========
- ' VORHER: DT_COLUMNS_GRID.Select($"CONTROL_ID = {oControlId}") → O(n) pro Grid
- ' NACHHER: Dictionary.TryGetValue() → O(1)
Dim oDTColumnsPerDevExGrid As DataTable = Nothing
If columnsByControl IsNot Nothing AndAlso columnsByControl.TryGetValue(oControlId, oDTColumnsPerDevExGrid) Then
MyValidationLogger.Debug($"Grid [{oControl.Name}]: {oDTColumnsPerDevExGrid.Rows.Count} Spalten aus Cache geladen")
@@ -5238,7 +5369,6 @@ Public Class frmValidator
oDTColumnsPerDevExGrid = DT_COLUMNS_GRID.Clone()
MyValidationLogger.Warn($"⚠️ Grid [{oControl.Name}]: Keine Spalten-Definition gefunden!")
End If
- ' ========== ENDE OPTIMIERUNG 6 ==========
Try
If oSourceIndexName = "" Then
@@ -5993,7 +6123,7 @@ Public Class frmValidator
MyValidationLogger.Info("[PERF] frmValidation_Shown START")
End If
Try
-
+ _gridDataLoader = New ClassGridDataLoader(DatabaseFallback)
' Refresh_FileList()
Load_Next_Document(True)
If LOG_HOTSPOTS Then
@@ -6511,6 +6641,9 @@ Public Class frmValidator
If IsNumeric(CTRL_ID) Then
For Each oControl As Control In Me.PanelValidatorControl.Controls
Try
+ If oControl.Name.StartsWith("BTNDYN_GRID") Then
+ Continue For
+ End If
If IsNothing(DirectCast(oControl.Tag, ClassControlCreator.ControlMetadata).Guid) Then
Continue For
End If
@@ -6856,6 +6989,9 @@ Public Class frmValidator
' ========== ENDE BATCH START ==========
' ========== OPTIMIERUNG: Nur geänderte Controls durchlaufen ==========
For Each oControl As Control In Me.PanelValidatorControl.Controls
+ If oControl.Name.StartsWith("BTNDYN_GRID") Then
+ Continue For
+ End If
Dim oMeta As ClassControlCreator.ControlMetadata = Nothing
Try
oMeta = DirectCast(oControl.Tag, ClassControlCreator.ControlMetadata)
@@ -7709,6 +7845,65 @@ Public Class frmValidator
Next ' End For Each oControl
+ ' ========== TEIL 2: Separate Grids aus Cache verarbeiten ==========
+ ' Nach dem Ende der "For Each oControl As Control In Me.PanelValidatorControl.Controls" Schleife
+
+ If _separateGridControlCache.Count > 0 Then
+ MyValidationLogger?.Debug($"Verarbeite {_separateGridControlCache.Count} separate Grid(s) aus Cache")
+
+ For Each kvp As KeyValuePair(Of String, GridControl) In _separateGridControlCache
+ Dim controlName As String = kvp.Key
+ Dim oGrid As GridControl = kvp.Value
+
+ ' Nur verarbeiten, wenn Control als "dirty" markiert ist
+ If Not listofControls.Contains(controlName) Then
+ MyValidationLogger?.Debug($"Separate Grid '{controlName}' wurde nicht geändert - überspringe")
+ Continue For
+ End If
+
+ MyValidationLogger?.Debug($"[4] Separates GridControl verarbeiten: [{controlName}]")
+
+ ' Control-Metadaten holen (EXAKT wie bei normalem Grid)
+ Dim oControlRow As DataRow = GetControlMetaBySql($"NAME='{controlName}'").Rows(0)
+ Dim oGUID = oControlRow("GUID")
+ Dim oControlRow1 = (From form In DTVWCONTROL_INDEX.AsEnumerable()
+ Where form.Item("GUID") = oGUID).SingleOrDefault()
+ Dim oIndexName As String = If(IsDBNull(oControlRow1("INDEX_NAME")), "", oControlRow1("INDEX_NAME").ToString())
+ Dim oIsRequired As Boolean = True
+ Dim oIDBTyp As Integer = If(IsDBNull(oControlRow1("IDB_TYP")), 0, CInt(oControlRow1("IDB_TYP")))
+
+ ' Cleanup (wie bei normalem Grid)
+ CleanupDeletedRows(oGrid)
+
+ ' Settings erstellen (EXAKT wie bei normalem Grid)
+ Dim oSettings = New ControlSettings() With {
+ .IndexName = oIndexName,
+ .ControlType = GetType(GridControl).ToString,
+ .Name = controlName,
+ .IsRequired = oIsRequired,
+ .IDBAttributeType = oIDBTyp
+ }
+
+ ' Spalten-Definition holen (EXAKT wie bei normalem Grid)
+ Dim oGridColumnDefinition As DataTable = DT_COLUMNS_GRID.Clone()
+ Dim oExpression = $"CONTROL_ID = {oGUID}"
+ Dim selectedRows() As DataRow = DT_COLUMNS_GRID.Select(oExpression, "SEQUENCE")
+
+ If selectedRows.Length > 0 Then
+ selectedRows.CopyToDataTable(oGridColumnDefinition, LoadOption.PreserveChanges)
+ End If
+
+ ' WICHTIG: DEINE BESTEHENDE ValidateGridControl Funktion verwenden!
+ Dim oResult = ValidateGridControl(oGrid, oSettings, oGridColumnDefinition, oMissing, oErrMsgMissingInput)
+
+ If oResult = False Then
+ MyValidationLogger?.Warn($"⚠️ Validierung fehlgeschlagen für separates Grid [{controlName}] → Exit For")
+ Exit For
+ End If
+ Next
+ End If
+
+
' ========== BATCH: Gesammelte Statements abfeuern ==========
If IDB_ACTIVE Then
If oMissing = False Then
diff --git a/app/TaskFlow/logtaskflow.txt b/app/TaskFlow/logtaskflow.txt
index 5f28270..2498ded 100644
--- a/app/TaskFlow/logtaskflow.txt
+++ b/app/TaskFlow/logtaskflow.txt
@@ -1 +1,712 @@
-
\ No newline at end of file
+17:22:13.5249|taskFLOW|INFO >> MoveNext(frmMain.vb:2146) -> Starting Profile Loading
+17:22:13.5302|taskFLOW|DEBUG >> MoveNext(frmMain.vb:2160) -> User clicked normal row.
+17:22:13.5302|taskFLOW|DEBUG >> MoveNext(frmMain.vb:2176) -> Clicked ProfileId: [6], Started From: [CMROW]
+17:22:13.5302|taskFLOW|DEBUG >> MoveNext(frmMain.vb:2345) -> Item_Scope: InDataRow
+17:22:13.5302|taskFLOW|DEBUG >> MoveNext(frmMain.vb:2348) -> Item_Scope: GRID_LOAD_TYPE = OVERVIEW
+17:22:13.5302|taskFLOW|DEBUG >> MoveNext(frmMain.vb:2351) -> Item_Scope: OVERVIEWgroupRowText Profile (Fixed): IDB - WISAG-like - VA
+17:22:13.5302|taskFLOW|DEBUG >> MoveNext(frmMain.vb:2377) -> Item_Scope: Valid PROFIL_ID
+17:22:13.5302|taskFLOW|DEBUG >> MoveNext(frmMain.vb:2389) -> Item_Scope: hitInfo.InDataRow...
+17:22:13.5302|taskFLOW|DEBUG >> MoveNext(frmMain.vb:2412) -> Item_Scope: GotDocID 12002 and DocGUID 21231
+17:22:13.5302|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=XXXXX;
+17:22:13.5302|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:13.5302|MSSQLServer|DEBUG >> GetScalarValueWithConnectionObject(MSSQLServer.vb:580) -> GetScalarValueWithConnectionObject: Running Query [SELECT [dbo].[FNPM_CHECK_DocGUID_Valid] (21231)] with Parameters []
+17:22:13.5580|frmValidator|DEBUG >> .ctor(frmValidator.vb:158) -> Initialize Components...
+17:22:17.0972|frmValidator|DEBUG >> .ctor(frmValidator.vb:163) -> Initialize _frmValidatorSearch...
+17:22:17.3396|frmValidator|DEBUG >> frmValidation_Load(frmValidator.vb:305) -> ###frmValidation_Load###
+17:22:17.3396|frmValidator|DEBUG >> frmValidation_Load(frmValidator.vb:306) -> Current User Language: [de-DE]
+17:22:17.3396|Cache|DEBUG >> .ctor(Cache.vb:34) -> Initializing DocumentResultCache with capacity of [104900000] bytes.
+17:22:18.0300|FilesystemEx|DEBUG >> CreateDirectory(FilesystemEx.vb:332) -> Directory C:\Users\SchreiberM\AppData\Roaming\Digital Data\taskFLOW\1.0.0.0\DocumentViewer already exists. Skipping.
+17:22:18.0300|FilesystemEx|DEBUG >> CreateDirectory(FilesystemEx.vb:352) -> Using path C:\Users\SchreiberM\AppData\Roaming\Digital Data\taskFLOW\1.0.0.0\DocumentViewer
+17:22:18.0300|ConfigManager`1|DEBUG >> LoadAppConfig(ConfigManager.vb:247) -> ApplicationConfig does not exist.
+17:22:18.0300|ConfigManager`1|DEBUG >> LoadComputerConfig(ConfigManager.vb:269) -> Computer config does not exist.
+17:22:18.0300|ConfigManager`1|DEBUG >> ReadFromFile(ConfigManager.vb:367) -> Loading config from: C:\Users\SchreiberM\AppData\Roaming\Digital Data\taskFLOW\1.0.0.0\DocumentViewer\UserConfig.xml
+17:22:18.0431|ConfigManager`1|DEBUG >> LoadUserConfig(ConfigManager.vb:280) -> UserConfig exists and will be used. [C:\Users\SchreiberM\AppData\Roaming\Digital Data\taskFLOW\1.0.0.0\DocumentViewer\UserConfig.xml]
+17:22:18.0431|frmValidator|DEBUG >> frmValidation_Load(frmValidator.vb:407) -> Profile Data loaded
+17:22:18.0431|frmValidator|DEBUG >> frmValidation_Load(frmValidator.vb:416) -> frmValidation_Load finished till Step 3!
+17:22:18.0431|frmValidator|DEBUG >> frmValidation_Load(frmValidator.vb:426) -> Step 4
+17:22:18.0431|frmValidator|DEBUG >> frmValidation_Load(frmValidator.vb:432) -> Step 5
+17:22:18.0431|frmValidator|DEBUG >> frmValidation_Load(frmValidator.vb:436) -> Step 6
+17:22:18.0431|frmValidator|DEBUG >> frmValidation_Load(frmValidator.vb:538) -> Buttontext validation loaded
+17:22:18.0431|frmValidator|DEBUG >> frmValidation_Load(frmValidator.vb:561) -> oProfileRejectionText: Einfach mal ablehnen
+17:22:18.0431|frmValidator|DEBUG >> frmValidation_Load(frmValidator.vb:562) -> oProfile_REJECT_SQL_REASONS: Select 'Ablehnungsgrund 1' union select 'Ablehnungsgrund 2' union select 'Ablehnungsgrund 3'
+17:22:18.0431|frmValidator|DEBUG >> frmValidation_Load(frmValidator.vb:563) -> oProfileNotResponsibleText: Nicht zuständig
+17:22:18.0431|frmValidator|DEBUG >> frmValidation_Load(frmValidator.vb:564) -> oProfile_NOT_RESP_SQL: SELECT '0' OverrideAll,0 IncludeFI
+17:22:18.0431|frmValidator|DEBUG >> frmValidation_Load(frmValidator.vb:587) -> Nicht zuständig und Ablehnungs-Buttons werden eingeblendet!
+17:22:18.0431|frmValidator|DEBUG >> frmValidation_Load(frmValidator.vb:641) -> >> profiledata saved:
+17:22:18.0582|frmValidator|DEBUG >> frmValidation_Load(frmValidator.vb:642) -> >> finalProfile: True
+17:22:18.0582|frmValidator|DEBUG >> frmValidation_Load(frmValidator.vb:643) -> >> Move2Folder:
+17:22:18.0582|frmValidator|DEBUG >> frmValidation_Load(frmValidator.vb:644) -> >> Right_Delete: False
+17:22:18.0582|frmValidator|DEBUG >> frmValidation_Load(frmValidator.vb:647) -> PROFIL_sortbynewest: True
+17:22:18.0582|frmValidator|DEBUG >> frmValidation_Load(frmValidator.vb:661) -> Right_Delete: False
+17:22:18.1633|DatabaseWithFallback|DEBUG >> GetDatatable(DatabaseWithFallback.vb:193) -> Client is empty, falling back to direct database access.
+17:22:18.1633|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:341) -> Fetching data from database [ECM] with Connection Id [ECM]
+17:22:18.1633|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=XXXXX;
+17:22:18.1633|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:18.1668|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [SELECT IIF(LANG.CAPTION IS NULL,T.SPALTEN_HEADER,LANG.CAPTION) SPALTEN_HEADER_LANG, T.* from TBPM_CONTROL_TABLE T WITH (NOLOCK) INNER JOIN TBPM_PROFILE_CONTROLS T1 WITH (NOLOCK) ON T.CONTROL_ID = T1.GUID
+ LEFT JOIN (SELECT * FROM TBPM_CONTOL_TABLE_LANG WHERE LANG_CODE = 'de-DE') LANG ON T.GUID = LANG.COL_ID WHERE T1.CONTROL_ACTIVE = 1 AND T.CONTROL_ID = T1.GUID AND T1.PROFIL_ID = 6 ORDER BY T.SEQUENCE] and Parameters []
+17:22:18.1962|DatabaseWithFallback|DEBUG >> GetDatatable(DatabaseWithFallback.vb:193) -> Client is empty, falling back to direct database access.
+17:22:18.1962|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:341) -> Fetching data from database [ECM] with Connection Id [ECM]
+17:22:18.1982|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=XXXXX;
+17:22:18.1982|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:18.1982|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [SELECT T1.GUID As CONTROL_ID, T1.PROFIL_ID, T.CONNECTION_ID, T.SQL_COMMAND, T.SPALTENNAME,T.FORMATTYPE,T.FORMATSTRING, T.ADVANCED_LOOKUP from TBPM_CONTROL_TABLE T WITH (NOLOCK), TBPM_PROFILE_CONTROLS T1 WITH (NOLOCK) WHERE T1.CONTROL_ACTIVE = 1 AND T.CONTROL_ID = T1.GUID AND T1.PROFIL_ID = 6 AND LEN(T.SQL_COMMAND) > 0 ORDER BY T.SEQUENCE] and Parameters []
+17:22:18.1982|DatabaseWithFallback|DEBUG >> GetDatatable(DatabaseWithFallback.vb:193) -> Client is empty, falling back to direct database access.
+17:22:18.1982|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:341) -> Fetching data from database [ECM] with Connection Id [ECM]
+17:22:18.1982|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=XXXXX;
+17:22:18.1982|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:18.1982|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [SELECT
+ T1.GUID As CONTROL_ID,
+ T1.PROFIL_ID,
+ T.CONNECTION_ID,
+ T.SQL_COMMAND,
+ T.SPALTENNAME,
+ T.FORMATTYPE,
+ T.FORMATSTRING,
+ T.ADVANCED_LOOKUP
+ FROM
+ TBPM_CONTROL_TABLE T,
+ TBPM_PROFILE_CONTROLS T1
+ WHERE
+ T1.CONTROL_ACTIVE = 1 AND
+ T.CONTROL_ID = T1.GUID AND
+ T1.PROFIL_ID = 6 AND
+ LEN(T.SQL_COMMAND) > 0 AND
+ T.SQL_COMMAND LIKE '%{#CTRL%'
+ ORDER BY T.SEQUENCE] and Parameters []
+17:22:18.1982|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1730) -> [LBL#CtrlID: 116 - CtrlName: LBL_9407c06c - CtrlIndex: ]: End of Select...
+17:22:18.1982|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1730) -> [LBL#CtrlID: 120 - CtrlName: LBL_40dee67 - CtrlIndex: ]: End of Select...
+17:22:18.1982|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1730) -> [LBL#CtrlID: 135 - CtrlName: LBL_17cbc463 - CtrlIndex: ]: End of Select...
+17:22:18.2577|taskFLOW|DEBUG >> ReplaceControlValues(clsPatterns.vb:303) -> Control cache initialized with 3 controls
+17:22:18.2577|DatabaseWithFallback|DEBUG >> GetDatatable(DatabaseWithFallback.vb:193) -> Client is empty, falling back to direct database access.
+17:22:18.2577|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:341) -> Fetching data from database [ECM] with Connection Id [ECM]
+17:22:18.2577|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:349) -> Retrieving Connection String from Connection Id [1]
+17:22:18.2608|MSSQLServer|DEBUG >> Get_ConnectionStringforID(MSSQLServer.vb:173) -> Getting ConnectionString for ConnectionId [1]
+17:22:18.2608|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=XXXXX;
+17:22:18.2608|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:18.2608|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [SELECT * FROM TBDD_CONNECTION WHERE GUID = 1] and Parameters []
+17:22:18.2608|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Data Source=SDD-VMP04-SQL17\DD_DEVELOP01;Initial Catalog=DD_ECM;User ID=sa;Password=XXXXX
+17:22:18.2608|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:18.2608|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [select 'Kreditor 1' union
+select 'Kreditor 2' union
+select 'Kreditor 3' union
+select 'Kreditor 4' union
+select 'Kreditor 5'
+
+
+] and Parameters []
+17:22:18.2608|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1625) -> createControlsLU - Found 2 Controls which are depending on LUAttrStr2
+17:22:18.2608|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1730) -> [LOOKUP#CtrlID: 50 - CtrlName: LUAttrStr2 - CtrlIndex: Attribut String 2]: End of Select...
+17:22:18.2608|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1441) -> [TXT#CtrlID: 119 - CtrlName: TXTDisplayOnly - CtrlIndex: @@DISPLAY_ONLY] - TXT Try to create control...
+17:22:18.2786|ClassControlCreator|INFO >> TransformDataRow(ClassControlCreator.vb:129) -> Override oReadOnly = True for Control [TXTDisplayOnly] as Attribute is @@DISPLAY_ONLY and ReadOnly = False
+17:22:18.2786|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1454) -> [TXT#CtrlID: 119 - CtrlName: TXTDisplayOnly - CtrlIndex: @@DISPLAY_ONLY] - TXT Created!!
+17:22:18.2786|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1730) -> [TXT#CtrlID: 119 - CtrlName: TXTDisplayOnly - CtrlIndex: @@DISPLAY_ONLY]: End of Select...
+17:22:18.2925|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1632) -> createControlsLU - Found 1 Controls which' enable state is depending on LU_Attr1_Dep_Attr2
+17:22:18.2925|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1730) -> [LOOKUP#CtrlID: 134 - CtrlName: LU_Attr1_Dep_Attr2 - CtrlIndex: Attribut String1]: End of Select...
+17:22:18.2925|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1730) -> [LBL#CtrlID: 117 - CtrlName: LBL_3de45179 - CtrlIndex: ]: End of Select...
+17:22:18.2925|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1730) -> [CtrlID: 54 - CtrlName: BTN_1b70920b - CtrlIndex: ]: End of Select...
+17:22:18.2925|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1441) -> [TXT#CtrlID: 118 - CtrlName: txtAttributString1 - CtrlIndex: Attribut String1] - TXT Try to create control...
+17:22:18.2925|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1454) -> [TXT#CtrlID: 118 - CtrlName: txtAttributString1 - CtrlIndex: Attribut String1] - TXT Created!!
+17:22:18.2925|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1730) -> [TXT#CtrlID: 118 - CtrlName: txtAttributString1 - CtrlIndex: Attribut String1]: End of Select...
+17:22:18.3202|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1730) -> [DTP#CtrlID: 52 - CtrlName: DTP_e3b36d2e - CtrlIndex: Attribut Date1]: End of Select...
+17:22:18.3368|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1730) -> [LBL#CtrlID: 144 - CtrlName: LBL_81e62ba3 - CtrlIndex: ]: End of Select...
+17:22:18.3388|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1730) -> [LBL#CtrlID: 55 - CtrlName: LBL_da93a37 - CtrlIndex: ]: End of Select...
+17:22:18.3388|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1730) -> [CHK#CtrlID: 53 - CtrlName: CHK_Bit1 - CtrlIndex: Attribut Bit1]: End of Select...
+17:22:18.3388|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1441) -> [TXT#CtrlID: 143 - CtrlName: txtCurrencyFloat - CtrlIndex: Currency] - TXT Try to create control...
+17:22:18.3388|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1454) -> [TXT#CtrlID: 143 - CtrlName: txtCurrencyFloat - CtrlIndex: Currency] - TXT Created!!
+17:22:18.3388|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1730) -> [TXT#CtrlID: 143 - CtrlName: txtCurrencyFloat - CtrlIndex: Currency]: End of Select...
+17:22:18.3388|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1730) -> [DTP#CtrlID: 49 - CtrlName: DTP_750906e8 - CtrlIndex: Attribut Date1]: End of Select...
+17:22:18.3388|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1441) -> [TXT#CtrlID: 200 - CtrlName: txtCurrencyReadOnly - CtrlIndex: Currency] - TXT Try to create control...
+17:22:18.3388|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1454) -> [TXT#CtrlID: 200 - CtrlName: txtCurrencyReadOnly - CtrlIndex: Currency] - TXT Created!!
+17:22:18.3388|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1730) -> [TXT#CtrlID: 200 - CtrlName: txtCurrencyReadOnly - CtrlIndex: Currency]: End of Select...
+17:22:18.3559|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1730) -> [LBL#CtrlID: 202 - CtrlName: LBL_EpKU6h3z-kOELa3QtGty7w - CtrlIndex: ]: End of Select...
+17:22:18.3559|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1441) -> [TXT#CtrlID: 201 - CtrlName: TXT_CurrencyRO - CtrlIndex: Currency] - TXT Try to create control...
+17:22:18.3559|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1454) -> [TXT#CtrlID: 201 - CtrlName: TXT_CurrencyRO - CtrlIndex: Currency] - TXT Created!!
+17:22:18.3559|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1730) -> [TXT#CtrlID: 201 - CtrlName: TXT_CurrencyRO - CtrlIndex: Currency]: End of Select...
+17:22:18.3559|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1671) -> We got a DTGRID_COLUMNS definition for [TABLE#CtrlID: 51 - CtrlName: TBCurrency - CtrlIndex: PM-LOGGING]
+17:22:18.3951|GridControl|DEBUG >> FillGridTables(GridControl.vb:330) -> No SQL_COMMAND for Column[SpalteCurrency] – skipping.
+17:22:18.3951|GridControl|DEBUG >> FillGridTables(GridControl.vb:300) -> Working on SQL for Column[column1]...
+17:22:18.3951|GridControl|DEBUG >> FillGridTables(GridControl.vb:315) -> ...has complex patterns!!
+17:22:18.4021|GridControl|DEBUG >> ConfigureViewColumns(GridControl.vb:565) -> CURRENCY column [SpalteCurrency]: DisplayFormat wird von ConfigureViewColumnsCurrency gesetzt
+17:22:18.4021|GridControl|DEBUG >> ConfigureViewColumns(GridControl.vb:583) -> Applying currency summary format for column [SpalteCurrency]
+17:22:18.4021|GridControl|DEBUG >> ApplyCurrencySummaryFormat(GridControl.vb:395) -> Applying currency summary format for column [SpalteCurrency] with symbol [EUR]
+17:22:18.4021|GridControl|DEBUG >> ConfigureViewColumnsCurrency(GridControl.vb:634) -> [ConfigureViewColumnsCurrency] riTextEdit erstellt: DisplayFormat=[#,##0.00 EUR], HashCode=[23182124]
+17:22:18.4021|GridControl|DEBUG >> ConfigureViewColumnsCurrency(GridControl.vb:636) -> [ConfigureViewColumnsCurrency] pGrid.RepositoryItems.Count VOR Schleife=[0]
+17:22:18.4021|GridControl|DEBUG >> ConfigureViewColumnsCurrency(GridControl.vb:667) -> [ConfigureViewColumnsCurrency] [SpalteCurrency] VOR ColumnEdit: RepositoryItems.Count=[0]
+17:22:18.4021|GridControl|DEBUG >> ConfigureViewColumnsCurrency(GridControl.vb:672) -> [ConfigureViewColumnsCurrency] [SpalteCurrency] NACH ColumnEdit: RepositoryItems.Count=[0]
+17:22:18.4021|GridControl|DEBUG >> ConfigureViewEvents(GridControl.vb:721) -> [ConfigureViewEvents] Column [column1] registered as DYNAMIC_EDITOR column (has placeholders)
+17:22:18.4172|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1730) -> [TABLE#CtrlID: 51 - CtrlName: TBCurrency - CtrlIndex: PM-LOGGING]: End of Select...
+17:22:18.4746|taskFLOW|DEBUG >> ReplaceAllValues(clsPatterns.vb:164) -> input BEFORE replacing: [Declare @Attribut1 Varchar(100) = '{#CTRL#LU_Attr1_dep_Attr2}'
+If @Attribut1 = 'TBDD_USER'
+ select USERNAME FROM TBDD_USER ORDER BY USERNAME
+Else
+ select NAME FROM TBDD_USER ORDER BY NAME
+
+]
+17:22:18.4746|taskFLOW|WARN >> ReplaceControlValues(clsPatterns.vb:333) -> Control [LU_Attr1_dep_Attr2] not found in cache!
+17:22:18.4802|taskFLOW|INFO >> ReplaceControlValues(clsPatterns.vb:342) -> Control [LU_Attr1_dep_Attr2] found via fallback. Adding to cache.
+17:22:18.4802|taskFLOW|WARN >> ReplaceControlValues(clsPatterns.vb:390) -> ⚠️ LookupControl [LU_Attr1_dep_Attr2] SelectedValues is empty! Using ERROR_REPLACE_VALUE
+17:22:18.4802|taskFLOW|DEBUG >> ReplaceAllValues(clsPatterns.vb:180) -> input AFTER replacing: [Declare @Attribut1 Varchar(100) = '0'
+If @Attribut1 = 'TBDD_USER'
+ select USERNAME FROM TBDD_USER ORDER BY USERNAME
+Else
+ select NAME FROM TBDD_USER ORDER BY NAME
+
+]
+17:22:18.4802|GridControl|DEBUG >> ResolveSqlTemplate(GridControl.vb:111) -> [ResolveSqlTemplate] ✓ Cached SQL: Key=[-1847042817]
+17:22:18.4802|GridControl|INFO >> _Lambda$__2(GridControl.vb:853) -> [CustomRowCellEdit] 🆕 MISS: Creating editor for [column1]
+17:22:18.4802|DatabaseWithFallback|DEBUG >> GetDatatable(DatabaseWithFallback.vb:193) -> Client is empty, falling back to direct database access.
+17:22:18.4802|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:341) -> Fetching data from database [ECM] with Connection Id [ECM]
+17:22:18.4802|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:349) -> Retrieving Connection String from Connection Id [1]
+17:22:18.4802|MSSQLServer|DEBUG >> Get_ConnectionStringforID(MSSQLServer.vb:173) -> Getting ConnectionString for ConnectionId [1]
+17:22:18.4802|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=XXXXX;
+17:22:18.4802|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:18.4802|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [SELECT * FROM TBDD_CONNECTION WHERE GUID = 1] and Parameters []
+17:22:18.4802|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Data Source=SDD-VMP04-SQL17\DD_DEVELOP01;Initial Catalog=DD_ECM;User ID=sa;Password=XXXXX
+17:22:18.4802|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:18.4802|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [Declare @Attribut1 Varchar(100) = '0'
+If @Attribut1 = 'TBDD_USER'
+ select USERNAME FROM TBDD_USER ORDER BY USERNAME
+Else
+ select NAME FROM TBDD_USER ORDER BY NAME
+
+] and Parameters []
+17:22:18.4802|taskFLOW|DEBUG >> CreateRowSpecificEditor(GridControl.vb:1459) -> [CreateRowSpecificEditor] Retrieved 18 rows for column [column1]
+17:22:18.4950|GridControl|DEBUG >> CreateRowSpecificEditor(GridControl.vb:1498) -> [CreateRowSpecificEditor] Created ComboBox with 18 items
+17:22:18.4950|GridControl|INFO >> _Lambda$__2(GridControl.vb:868) -> [CustomRowCellEdit] ✓ Cached [column1] editor (Type=[RepositoryItemComboBox])
+17:22:18.4950|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1671) -> We got a DTGRID_COLUMNS definition for [TABLE#CtrlID: 56 - CtrlName: TBKontierung - CtrlIndex: KONTIERUNG]
+17:22:25.6600|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1730) -> [TABLE#CtrlID: 56 - CtrlName: TBKontierung - CtrlIndex: KONTIERUNG]: End of Select...
+17:22:25.6770|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1730) -> [LBL#CtrlID: 122 - CtrlName: LBL_cc1524f - CtrlIndex: ]: End of Select...
+17:22:25.6770|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1671) -> We got a DTGRID_COLUMNS definition for [TABLE#CtrlID: 121 - CtrlName: TBKontierung read only - CtrlIndex: KONTIERUNG]
+17:22:25.6883|GridControl|DEBUG >> FillGridTables(GridControl.vb:330) -> No SQL_COMMAND for Column[column1] – skipping.
+17:22:25.6883|GridControl|DEBUG >> FillGridTables(GridControl.vb:330) -> No SQL_COMMAND for Column[column2] – skipping.
+17:22:25.6883|GridControl|DEBUG >> FillGridTables(GridControl.vb:330) -> No SQL_COMMAND for Column[col3KontierungReadOnly] – skipping.
+17:22:25.6883|GridControl|DEBUG >> ConfigureViewColumns(GridControl.vb:565) -> CURRENCY column [col3KontierungReadOnly]: DisplayFormat wird von ConfigureViewColumnsCurrency gesetzt
+17:22:25.6883|GridControl|DEBUG >> ConfigureViewColumnsCurrency(GridControl.vb:634) -> [ConfigureViewColumnsCurrency] riTextEdit erstellt: DisplayFormat=[#,##0.00 EUR], HashCode=[21405046]
+17:22:25.6883|GridControl|DEBUG >> ConfigureViewColumnsCurrency(GridControl.vb:636) -> [ConfigureViewColumnsCurrency] pGrid.RepositoryItems.Count VOR Schleife=[0]
+17:22:25.6883|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1730) -> [TABLE#CtrlID: 121 - CtrlName: TBKontierung read only - CtrlIndex: KONTIERUNG]: End of Select...
+17:22:25.7293|frmValidator|DEBUG >> Create_Controls(frmValidator.vb:1758) -> Create_Controls finished!
+17:22:25.7293|frmValidator|DEBUG >> frmValidation_Load(frmValidator.vb:673) -> frmValidation_Load finished!
+17:22:25.8314|taskFLOW|DEBUG >> Load_Profil_from_Grid(frmMain.vb:2107) -> Overlay closed in Load_Profil_from_Grid
+17:22:25.8859|frmValidator|DEBUG >> ShowOverlaySafe(frmValidator.vb:180) -> [Overlay] Geöffnet (RefCount: 0 → 1)
+17:22:25.9285|frmValidator|DEBUG >> activate_controls(frmValidator.vb:4688) -> Sub activate_controls - status = False
+17:22:26.1456|taskFLOW|DEBUG >> ReplaceAllValues(clsPatterns.vb:164) -> input BEFORE replacing: [Declare @Attribut1 Varchar(100) = '{#CTRL#LU_Attr1_dep_Attr2}'
+If @Attribut1 = 'TBDD_USER'
+ select USERNAME FROM TBDD_USER ORDER BY USERNAME
+Else
+ select NAME FROM TBDD_USER ORDER BY NAME
+
+]
+17:22:26.1456|taskFLOW|DEBUG >> ReplaceControlValues(clsPatterns.vb:303) -> Control cache initialized with 22 controls
+17:22:26.1456|taskFLOW|WARN >> ReplaceControlValues(clsPatterns.vb:333) -> Control [LU_Attr1_dep_Attr2] not found in cache!
+17:22:26.1456|taskFLOW|INFO >> ReplaceControlValues(clsPatterns.vb:342) -> Control [LU_Attr1_dep_Attr2] found via fallback. Adding to cache.
+17:22:26.1456|taskFLOW|WARN >> ReplaceControlValues(clsPatterns.vb:390) -> ⚠️ LookupControl [LU_Attr1_dep_Attr2] SelectedValues is empty! Using ERROR_REPLACE_VALUE
+17:22:26.1456|taskFLOW|DEBUG >> ReplaceAllValues(clsPatterns.vb:180) -> input AFTER replacing: [Declare @Attribut1 Varchar(100) = '0'
+If @Attribut1 = 'TBDD_USER'
+ select USERNAME FROM TBDD_USER ORDER BY USERNAME
+Else
+ select NAME FROM TBDD_USER ORDER BY NAME
+
+]
+17:22:26.1456|GridControl|INFO >> _Lambda$__2(GridControl.vb:846) -> [CustomRowCellEdit] ✓ CACHE HIT: [column1|-1847042817]
+17:22:26.2944|frmValidator|DEBUG >> Load_Next_Document(frmValidator.vb:4103) -> In Load_Next_Document
+17:22:26.2944|frmValidator|DEBUG >> Load_Next_Document(frmValidator.vb:4114) -> First Document
+17:22:26.2944|frmValidator|DEBUG >> Load_Next_Document(frmValidator.vb:4126) -> CURRENT_JUMP_DOC_GUID: 21231'
+17:22:26.2944|frmValidator|INFO >> Load_Next_Document(frmValidator.vb:4139) -> LoadNextDocument - Dokument-GUID: '21231'
+17:22:26.2944|DatabaseWithFallback|DEBUG >> GetDatatable(DatabaseWithFallback.vb:193) -> Client is empty, falling back to direct database access.
+17:22:26.2944|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:341) -> Fetching data from database [ECM] with Connection Id [ECM]
+17:22:26.2944|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=XXXXX;
+17:22:26.2944|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:26.2944|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [SELECT dbo.FNPM_GET_FILEPATH(21231,0) AS PATH0, dbo.FNPM_GET_FILEPATH(21231,1) AS PATH1] and Parameters []
+17:22:26.2944|frmValidator|DEBUG >> GetDocPathWindows(frmValidator.vb:3962) -> First Checking file [\\172.24.12.15\windream\WISAG\3031_5701002069.pdf] exists?...
+17:22:26.5737|DocumentPathHandler|DEBUG >> TryMapNetworkDrive(DocumentPathHandler.vb:221) -> 📂 WMSUFFIX erkannt - starte Laufwerks-Mapping
+17:22:26.5737|Map_Drive|DEBUG >> MapDriveAutomatic(Map_Drive.vb:537) -> 🔍 Suche automatisch freien Laufwerksbuchstaben...
+17:22:26.5737|Map_Drive|DEBUG >> MapDriveAutomatic(Map_Drive.vb:538) -> Blacklist: []
+17:22:26.5737|Map_Drive|DEBUG >> MapDriveAutomatic(Map_Drive.vb:539) -> Netzwerkpfad: [\\172.24.12.15\windream]
+17:22:26.5737|Map_Drive|INFO >> MapNetworkDrive(Map_Drive.vb:166) -> Kein Laufwerksbuchstabe angegeben - suche nächsten freien Buchstaben...
+17:22:26.5737|Map_Drive|DEBUG >> GetNextFreeDriveLetter(Map_Drive.vb:85) -> Nächster freier Laufwerksbuchstabe gefunden: Z:
+17:22:26.5737|Map_Drive|INFO >> MapNetworkDrive(Map_Drive.vb:174) -> Automatisch gewählter Laufwerksbuchstabe: Z:
+17:22:26.5737|Map_Drive|DEBUG >> MapNetworkDrive(Map_Drive.vb:205) -> ✓ Laufwerk Z: existiert noch nicht - kein Disconnect nötig
+17:22:26.5737|Map_Drive|DEBUG >> DisconnectNetworkDrive(Map_Drive.vb:342) -> ℹ️ Laufwerk Z: existiert nicht - Disconnect übersprungen
+17:22:26.7306|Map_Drive|DEBUG >> MapNetworkDriveInternal(Map_Drive.vb:251) -> ✓ Laufwerk Z: erfolgreich gemappt
+17:22:26.7306|Map_Drive|INFO >> MapNetworkDrive(Map_Drive.vb:211) -> ✓ Netzlaufwerk Z: erfolgreich gemappt zu \\172.24.12.15\windream
+17:22:26.7306|Map_Drive|DEBUG >> MapDriveAutomatic(Map_Drive.vb:545) -> ✓ Automatisch gewähltes Laufwerk: Z:
+17:22:26.7306|DocumentPathHandler|DEBUG >> TryMapNetworkDrive(DocumentPathHandler.vb:249) -> 📄 Original: [\\172.24.12.15\windream\WISAG\3031_5701002069.pdf]
+17:22:26.7306|DocumentPathHandler|DEBUG >> TryMapNetworkDrive(DocumentPathHandler.vb:250) -> 📄 Gemappt: [Z:\WISAG\3031_5701002069.pdf]
+17:22:26.7306|DocumentPathHandler|INFO >> ProcessDocumentPath(DocumentPathHandler.vb:137) -> ✓ Laufwerk gemappt: Z:
+17:22:26.7306|DocumentPathHandler|DEBUG >> ProcessDocumentPath(DocumentPathHandler.vb:159) -> 📂 Starte Temp-Kopie für: [Z:\WISAG\3031_5701002069.pdf]
+17:22:26.7306|DocumentPathHandler|DEBUG >> EnsureTempFolder(DocumentPathHandler.vb:21) -> 📂 Überprüfe Temp-Ordner: []
+17:22:26.7306|DocumentPathHandler|DEBUG >> EnsureTempFolder(DocumentPathHandler.vb:23) -> ⚠️ Temp-Ordner nicht konfiguriert, verwende TEMP_DOCUMENT_FOLDER aus AppSettings
+17:22:26.7306|DocumentPathHandler|INFO >> CopyToTempFolder(DocumentPathHandler.vb:279) -> [TempCopy] Effektiver Temp-Ordner: [C:\Users\SchreiberM\AppData\Local\Temp\Documents]
+17:22:26.7306|DocumentPathHandler|DEBUG >> CopyToTempFolder(DocumentPathHandler.vb:280) -> [TempCopy] InputTemp=[], GlobalTemp=[C:\Users\SchreiberM\AppData\Local\Temp\Documents]
+17:22:26.7306|DocumentPathHandler|DEBUG >> CopyToTempFolder(DocumentPathHandler.vb:290) -> 📄 Kopiere nach Temp:
+17:22:26.7306|DocumentPathHandler|DEBUG >> CopyToTempFolder(DocumentPathHandler.vb:291) -> Von: [Z:\WISAG\3031_5701002069.pdf]
+17:22:26.7306|DocumentPathHandler|DEBUG >> CopyToTempFolder(DocumentPathHandler.vb:292) -> Nach: [C:\Users\SchreiberM\AppData\Local\Temp\Documents\3031_5701002069_20260623_172226_735.pdf]
+17:22:26.7862|DocumentPathHandler|INFO >> ProcessDocumentPath(DocumentPathHandler.vb:165) -> ✓ Datei in Temp kopiert: [3031_5701002069_20260623_172226_735.pdf]
+17:22:26.7979|Map_Drive|DEBUG >> DisconnectNetworkDrive(Map_Drive.vb:350) -> ✓ Netzlaufwerk Z: erfolgreich getrennt
+17:22:26.7979|DocumentPathHandler|INFO >> UnmapDrive(DocumentPathHandler.vb:316) -> 🔌 Laufwerk Z: getrennt
+17:22:26.7979|frmValidator|INFO >> GetDocPathWindows(frmValidator.vb:4007) -> ✓ Dokument verarbeitet: [3031_5701002069_20260623_172226_735.pdf]
+17:22:26.7979|frmValidator|INFO >> GetDocPathWindows(frmValidator.vb:4027) -> GetWMDocPathWindows CURRENT_DOC_PATH: \\172.24.12.15\windream\WISAG\3031_5701002069.pdf
+17:22:26.7979|frmValidator|DEBUG >> Load_IDB_DOC_DATA(frmValidator.vb:4063) -> Load_IDB_DOC_DATA SQL: select T.* from IDB.dbo.VWIDB_DOC_DATA_DE T, TBPM_PROFILE_FILES T1 WHERE T.IDB_OBJ_ID = T1.DOC_ID AND T1.GUID = 21231
+17:22:26.7979|DatabaseWithFallback|DEBUG >> GetDatatable(DatabaseWithFallback.vb:193) -> Client is empty, falling back to direct database access.
+17:22:26.7979|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:341) -> Fetching data from database [ECM] with Connection Id [ECM]
+17:22:26.7979|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=XXXXX;
+17:22:26.7979|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:26.7979|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [select T.* from IDB.dbo.VWIDB_DOC_DATA_DE T, TBPM_PROFILE_FILES T1 WHERE T.IDB_OBJ_ID = T1.DOC_ID AND T1.GUID = 21231] and Parameters []
+17:22:26.8076|frmValidator|DEBUG >> Load_Next_Document(frmValidator.vb:4166) -> Got one IDB DocData Result
+17:22:26.8076|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=XXXXX;
+17:22:26.8076|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:26.8076|MSSQLServer|DEBUG >> ExecuteNonQueryWithConnectionObject(MSSQLServer.vb:491) -> ExecuteNonQueryWithConnectionObject: Running Command [EXEC PRTF_PROFILE_FILES_WORK 12002,6,1,'InWork'] and Parameters []
+17:22:26.8076|frmValidator|DEBUG >> Load_Next_Document(frmValidator.vb:4199) -> AllDocInfo created...
+17:22:26.8076|Loader|DEBUG >> Load(Loader.vb:55) -> DRL Loader - Loading Document Load_FromWindream
+17:22:26.8076|Loader|DEBUG >> Load_FromDisk(Loader.vb:140) -> Loading file [C:\Users\SchreiberM\AppData\Local\Temp\Documents\3031_5701002069_20260623_172226_735.pdf]
+17:22:26.8305|Loader|DEBUG >> Load_FromDisk(Loader.vb:144) -> Loaded file [C:\Users\SchreiberM\AppData\Local\Temp\Documents\3031_5701002069_20260623_172226_735.pdf] successfully.
+17:22:26.8305|Cache|DEBUG >> Add(Cache.vb:50) -> Adding document [12002].
+17:22:26.8305|frmValidator|INFO >> LoadDocument_DDViewer(frmValidator.vb:4665) -> LoadDocument_DDViewer - Current_Document.FullPath: C:\Users\SchreiberM\AppData\Local\Temp\Documents\3031_5701002069_20260623_172226_735.pdf
+17:22:26.8305|DocumentViewer|INFO >> LoadFile_FromPath(DocumentViewer.vb:187) -> Loading file [C:\Users\SchreiberM\AppData\Local\Temp\Documents\3031_5701002069_20260623_172226_735.pdf] from Filesystem
+17:22:26.8305|DocumentViewer|DEBUG >> SetViewerMode(DocumentViewer.vb:532) -> Viewermode set to [GDPicture] based on extension [.pdf]
+17:22:26.8305|DocumentViewer|DEBUG >> DoLoadFile(DocumentViewer.vb:665) -> Starting DoLoadFile with path [C:\Users\SchreiberM\AppData\Local\Temp\Documents\3031_5701002069_20260623_172226_735.pdf] and view override []
+17:22:26.8305|DocumentViewer|DEBUG >> LoadGdPictureFile(DocumentViewer.vb:737) -> Loading GdPicture: C:\Users\SchreiberM\AppData\Local\Temp\Documents\3031_5701002069_20260623_172226_735.pdf
+17:22:27.5188|DocumentViewer|INFO >> UpdateMainUi(DocumentViewer.vb:944) -> Updating main UI for viewer mode [GDPicture]
+17:22:27.6182|frmValidator|DEBUG >> Load_Next_Document(frmValidator.vb:4250) -> Kein PROFIL_CURRENCY_ATTRIBUTE konfiguriert → EUR
+17:22:27.6182|frmValidator|INFO >> Load_Next_Document(frmValidator.vb:4254) -> [FINAL] DocCurrency = [EUR]
+17:22:27.6315|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5109) -> INDEX: - CONTROLNAME: LBL_9407c06c - LOAD IDXVALUES: True
+17:22:27.6315|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5109) -> INDEX: - CONTROLNAME: LBL_40dee67 - LOAD IDXVALUES: True
+17:22:27.6315|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5109) -> INDEX: - CONTROLNAME: LBL_17cbc463 - LOAD IDXVALUES: True
+17:22:27.6315|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5109) -> INDEX: Attribut String 2 - CONTROLNAME: LUAttrStr2 - LOAD IDXVALUES: True
+17:22:27.6315|frmValidator|DEBUG >> GetVariableValuefromSource(frmValidator.vb:4991) -> GetVariableValuefromSource - IDBCase - IndexName: Attribut String 2, IDBTyp: 1, FromIDB: False
+17:22:27.6315|taskFLOW|DEBUG >> GetVariableValue(ClassIDBData.vb:161) -> IDBData - GetVariableValue - Attribute: [Attribut String 2] - IsSingleAttribute: [True] - FromIDB: [False]
+17:22:27.6315|taskFLOW|DEBUG >> GetVariableValue(ClassIDBData.vb:168) -> IDBData - GetVariableValue - Retrieved from cache: Attribute=[Attribut String 2] MappedName=[Attribut String 2] Value=[Row 3]
+17:22:27.6315|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5819) -> [FillIndexValues BUGFIX] Lookup [LUAttrStr2]: DataSource-Backup erstellt
+17:22:27.6371|frmValidator|DEBUG >> onLookUpselectedValue(frmValidator.vb:2189) -> onLookUpselectedValue
+17:22:27.6371|frmValidator|DEBUG >> onLookUpselectedValue(frmValidator.vb:2192) -> onLookUpselectedValue suppressed (global guard active)
+17:22:27.6371|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5831) -> [FillIndexValues BUGFIX] Lookup [LUAttrStr2]: SelectedValues auf leere Liste zurückgesetzt
+17:22:27.6371|frmValidator|DEBUG >> onLookUpselectedValue(frmValidator.vb:2189) -> onLookUpselectedValue
+17:22:27.6371|frmValidator|DEBUG >> onLookUpselectedValue(frmValidator.vb:2192) -> onLookUpselectedValue suppressed (global guard active)
+17:22:27.6371|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5839) -> [FillIndexValues BUGFIX] Lookup [LUAttrStr2]: SelectedValues FINAL gesetzt = [Row 3]
+17:22:27.6371|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5109) -> INDEX: @@DISPLAY_ONLY - CONTROLNAME: TXTDisplayOnly - LOAD IDXVALUES: False
+17:22:27.6371|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5126) -> oControl TXTDisplayOnly: Indexwert soll nicht geladen werden.
+17:22:27.6371|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5109) -> INDEX: Attribut String1 - CONTROLNAME: LU_Attr1_Dep_Attr2 - LOAD IDXVALUES: True
+17:22:27.6371|frmValidator|DEBUG >> GetVariableValuefromSource(frmValidator.vb:4991) -> GetVariableValuefromSource - IDBCase - IndexName: Attribut String1, IDBTyp: 1, FromIDB: False
+17:22:27.6371|taskFLOW|DEBUG >> GetVariableValue(ClassIDBData.vb:161) -> IDBData - GetVariableValue - Attribute: [Attribut String1] - IsSingleAttribute: [True] - FromIDB: [False]
+17:22:27.6371|taskFLOW|DEBUG >> GetVariableValue(ClassIDBData.vb:168) -> IDBData - GetVariableValue - Retrieved from cache: Attribute=[Attribut String1] MappedName=[Attribut String1] Value=[1000002]
+17:22:27.6371|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5819) -> [FillIndexValues BUGFIX] Lookup [LU_Attr1_Dep_Attr2]: DataSource-Backup erstellt
+17:22:27.6371|frmValidator|DEBUG >> onLookUpselectedValue(frmValidator.vb:2189) -> onLookUpselectedValue
+17:22:27.6371|frmValidator|DEBUG >> onLookUpselectedValue(frmValidator.vb:2192) -> onLookUpselectedValue suppressed (global guard active)
+17:22:27.6371|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5831) -> [FillIndexValues BUGFIX] Lookup [LU_Attr1_Dep_Attr2]: SelectedValues auf leere Liste zurückgesetzt
+17:22:27.6371|frmValidator|DEBUG >> onLookUpselectedValue(frmValidator.vb:2189) -> onLookUpselectedValue
+17:22:27.6371|frmValidator|DEBUG >> onLookUpselectedValue(frmValidator.vb:2192) -> onLookUpselectedValue suppressed (global guard active)
+17:22:27.6371|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5839) -> [FillIndexValues BUGFIX] Lookup [LU_Attr1_Dep_Attr2]: SelectedValues FINAL gesetzt = [1000002]
+17:22:27.6371|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5109) -> INDEX: - CONTROLNAME: LBL_3de45179 - LOAD IDXVALUES: True
+17:22:27.6371|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5109) -> INDEX: - CONTROLNAME: BTN_1b70920b - LOAD IDXVALUES: True
+17:22:27.6371|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5109) -> INDEX: Attribut String1 - CONTROLNAME: txtAttributString1 - LOAD IDXVALUES: True
+17:22:27.6371|frmValidator|DEBUG >> GetVariableValuefromSource(frmValidator.vb:4991) -> GetVariableValuefromSource - IDBCase - IndexName: Attribut String1, IDBTyp: 1, FromIDB: False
+17:22:27.6371|taskFLOW|DEBUG >> GetVariableValue(ClassIDBData.vb:161) -> IDBData - GetVariableValue - Attribute: [Attribut String1] - IsSingleAttribute: [True] - FromIDB: [False]
+17:22:27.6371|taskFLOW|DEBUG >> GetVariableValue(ClassIDBData.vb:168) -> IDBData - GetVariableValue - Retrieved from cache: Attribute=[Attribut String1] MappedName=[Attribut String1] Value=[1000002]
+17:22:27.6371|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5159) -> Value from Source: [1000002]
+17:22:27.6371|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5109) -> INDEX: Attribut Date1 - CONTROLNAME: DTP_e3b36d2e - LOAD IDXVALUES: True
+17:22:27.6371|frmValidator|DEBUG >> GetVariableValuefromSource(frmValidator.vb:4991) -> GetVariableValuefromSource - IDBCase - IndexName: Attribut Date1, IDBTyp: 0, FromIDB: False
+17:22:27.6371|taskFLOW|DEBUG >> GetVariableValue(ClassIDBData.vb:161) -> IDBData - GetVariableValue - Attribute: [Attribut Date1] - IsSingleAttribute: [True] - FromIDB: [False]
+17:22:27.6371|taskFLOW|DEBUG >> GetVariableValue(ClassIDBData.vb:168) -> IDBData - GetVariableValue - Retrieved from cache: Attribute=[Attribut Date1] MappedName=[Attribut Date1] Value=[10.06.2031 00:00:00]
+17:22:27.6371|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5872) -> DATE konnte umgewandelt werden
+17:22:27.6522|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5109) -> INDEX: - CONTROLNAME: LBL_81e62ba3 - LOAD IDXVALUES: True
+17:22:27.6522|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5109) -> INDEX: - CONTROLNAME: LBL_da93a37 - LOAD IDXVALUES: True
+17:22:27.6522|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5109) -> INDEX: Attribut Bit1 - CONTROLNAME: CHK_Bit1 - LOAD IDXVALUES: True
+17:22:27.6522|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5664) -> Loading checkbox...
+17:22:27.6522|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5678) -> Loading Bool-Value from Source...
+17:22:27.6522|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5684) -> ..Now GetVariableValue(Attribut Bit1)...
+17:22:27.6522|frmValidator|DEBUG >> GetVariableValuefromSource(frmValidator.vb:4991) -> GetVariableValuefromSource - IDBCase - IndexName: Attribut Bit1, IDBTyp: 7, FromIDB: False
+17:22:27.6522|taskFLOW|DEBUG >> GetVariableValue(ClassIDBData.vb:161) -> IDBData - GetVariableValue - Attribute: [Attribut Bit1] - IsSingleAttribute: [True] - FromIDB: [False]
+17:22:27.6522|taskFLOW|DEBUG >> GetVariableValue(ClassIDBData.vb:168) -> IDBData - GetVariableValue - Retrieved from cache: Attribute=[Attribut Bit1] MappedName=[Attribut Bit1] Value=[]
+17:22:27.6522|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5704) -> oValueFromSource:
+17:22:27.6522|frmValidator|INFO >> FillIndexValues(frmValidator.vb:5706) -> >> Versuch, default Value zu laden
+17:22:27.6522|frmValidator|INFO >> FillIndexValues(frmValidator.vb:5718) -> >> defaultValue war leer
+17:22:27.6522|frmValidator|DEBUG >> onCheckBox_CheckedChange(frmValidator.vb:2513) -> onCheckBox_CheckedChange
+17:22:27.6522|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5109) -> INDEX: Currency - CONTROLNAME: txtCurrencyFloat - LOAD IDXVALUES: True
+17:22:27.6522|frmValidator|DEBUG >> GetVariableValuefromSource(frmValidator.vb:4991) -> GetVariableValuefromSource - IDBCase - IndexName: Currency, IDBTyp: 1, FromIDB: False
+17:22:27.6522|taskFLOW|DEBUG >> GetVariableValue(ClassIDBData.vb:161) -> IDBData - GetVariableValue - Attribute: [Currency] - IsSingleAttribute: [True] - FromIDB: [False]
+17:22:27.6522|taskFLOW|DEBUG >> GetVariableValue(ClassIDBData.vb:168) -> IDBData - GetVariableValue - Retrieved from cache: Attribute=[Currency] MappedName=[Currency] Value=[120,58]
+17:22:27.6522|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5159) -> Value from Source: [120,58]
+17:22:27.6522|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5109) -> INDEX: Attribut Date1 - CONTROLNAME: DTP_750906e8 - LOAD IDXVALUES: True
+17:22:27.6522|frmValidator|DEBUG >> GetVariableValuefromSource(frmValidator.vb:4991) -> GetVariableValuefromSource - IDBCase - IndexName: Attribut Date1, IDBTyp: 0, FromIDB: False
+17:22:27.6522|taskFLOW|DEBUG >> GetVariableValue(ClassIDBData.vb:161) -> IDBData - GetVariableValue - Attribute: [Attribut Date1] - IsSingleAttribute: [True] - FromIDB: [False]
+17:22:27.6522|taskFLOW|DEBUG >> GetVariableValue(ClassIDBData.vb:168) -> IDBData - GetVariableValue - Retrieved from cache: Attribute=[Attribut Date1] MappedName=[Attribut Date1] Value=[10.06.2031 00:00:00]
+17:22:27.6522|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5872) -> DATE konnte umgewandelt werden
+17:22:27.6522|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5109) -> INDEX: Currency - CONTROLNAME: txtCurrencyReadOnly - LOAD IDXVALUES: True
+17:22:27.6522|frmValidator|DEBUG >> GetVariableValuefromSource(frmValidator.vb:4991) -> GetVariableValuefromSource - IDBCase - IndexName: Currency, IDBTyp: 1, FromIDB: False
+17:22:27.6522|taskFLOW|DEBUG >> GetVariableValue(ClassIDBData.vb:161) -> IDBData - GetVariableValue - Attribute: [Currency] - IsSingleAttribute: [True] - FromIDB: [False]
+17:22:27.6522|taskFLOW|DEBUG >> GetVariableValue(ClassIDBData.vb:168) -> IDBData - GetVariableValue - Retrieved from cache: Attribute=[Currency] MappedName=[Currency] Value=[120,58]
+17:22:27.6522|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5159) -> Value from Source: [120,58]
+17:22:27.6522|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5109) -> INDEX: - CONTROLNAME: LBL_EpKU6h3z-kOELa3QtGty7w - LOAD IDXVALUES: True
+17:22:27.6522|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5109) -> INDEX: Currency - CONTROLNAME: TXT_CurrencyRO - LOAD IDXVALUES: True
+17:22:27.6522|frmValidator|DEBUG >> GetVariableValuefromSource(frmValidator.vb:4991) -> GetVariableValuefromSource - IDBCase - IndexName: Currency, IDBTyp: 1, FromIDB: False
+17:22:27.6522|taskFLOW|DEBUG >> GetVariableValue(ClassIDBData.vb:161) -> IDBData - GetVariableValue - Attribute: [Currency] - IsSingleAttribute: [True] - FromIDB: [False]
+17:22:27.6522|taskFLOW|DEBUG >> GetVariableValue(ClassIDBData.vb:168) -> IDBData - GetVariableValue - Retrieved from cache: Attribute=[Currency] MappedName=[Currency] Value=[120,58]
+17:22:27.6522|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5159) -> Value from Source: [120,58]
+17:22:27.6522|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5109) -> INDEX: PM-LOGGING - CONTROLNAME: TBCurrency - LOAD IDXVALUES: True
+17:22:27.6522|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5302) -> Grid [TBCurrency]: 2 Spalten aus Cache geladen
+17:22:35.2511|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5338) -> [FillIndexValues] GridControl [TBCurrency] wird über ClassGridDataLoader befüllt...
+17:22:35.2511|ClassGridDataLoader|DEBUG >> FillGridData(ClassGridDataLoader.vb:37) -> FillGridData für Control GUID=51, Name=TBCurrency, Type=TABLE
+17:22:35.2844|ClassGridDataLoader|ERROR >> GetFilteredColumnDefinitions(ClassGridDataLoader.vb:390) -> Fehler in GetFilteredColumnDefinitions: Spalte 'SORT_ORDER' gehört nicht zu Tabelle .
+17:22:35.2844|ClassGridDataLoader|WARN >> FillGridData(ClassGridDataLoader.vb:49) -> Keine Spalten-Definitionen für Grid GUID=51
+17:22:40.0659|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5356) -> ✓ GridControl [TBCurrency] erfolgreich über ClassGridDataLoader befüllt
+17:22:40.0659|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5109) -> INDEX: - CONTROLNAME: LBL_cc1524f - LOAD IDXVALUES: True
+17:22:40.0659|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5109) -> INDEX: KONTIERUNG - CONTROLNAME: TBKontierung read only - LOAD IDXVALUES: True
+17:22:40.0659|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5302) -> Grid [TBKontierung read only]: 3 Spalten aus Cache geladen
+17:22:40.9451|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5338) -> [FillIndexValues] GridControl [TBKontierung read only] wird über ClassGridDataLoader befüllt...
+17:22:40.9486|ClassGridDataLoader|DEBUG >> FillGridData(ClassGridDataLoader.vb:37) -> FillGridData für Control GUID=121, Name=TBKontierung read only, Type=TABLE
+17:22:40.9486|ClassGridDataLoader|ERROR >> GetFilteredColumnDefinitions(ClassGridDataLoader.vb:390) -> Fehler in GetFilteredColumnDefinitions: Spalte 'SORT_ORDER' gehört nicht zu Tabelle .
+17:22:40.9486|ClassGridDataLoader|WARN >> FillGridData(ClassGridDataLoader.vb:49) -> Keine Spalten-Definitionen für Grid GUID=121
+17:22:41.9303|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5356) -> ✓ GridControl [TBKontierung read only] erfolgreich über ClassGridDataLoader befüllt
+17:22:41.9624|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:5950) -> ⚠️ FillIndexValues - SQL-Command for Grid-Dropdown-Column contains #CTRL# placeholder, skipping dropdown creation for CONTROL-ID [56] - Column [Summe]
+17:22:41.9624|DatabaseWithFallback|DEBUG >> GetDatatable(DatabaseWithFallback.vb:193) -> Client is empty, falling back to direct database access.
+17:22:41.9646|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:341) -> Fetching data from database [IDB] with Connection Id [IDB]
+17:22:41.9646|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Data Source=SDD-VMP04-SQL17\DD_DEVELOP01;Initial Catalog=IDB;User ID=sa;Password=XXXXX
+17:22:41.9646|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:41.9646|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [select Attribut, TERM_VALUE from VWIDB_VALUE_TEXT WHERE LANG_CODE IN ('de-DE','UNQID') AND IDB_OBJ_ID = 12002 AND Attribut in ('PM_Info1','PM_Info2') ORDER BY Attribut] and Parameters []
+17:22:41.9646|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:6015) -> No PM_Info-Configuration!!
+17:22:41.9646|frmValidator|DEBUG >> Load_Additional_Searches(frmValidator.vb:971) -> ========================================
+17:22:41.9646|frmValidator|DEBUG >> Load_Additional_Searches(frmValidator.vb:972) -> === Load_Additional_Searches START ===
+17:22:41.9646|frmValidator|DEBUG >> Load_Additional_Searches(frmValidator.vb:973) -> Parameter: Preload=False
+17:22:41.9646|frmValidator|DEBUG >> Load_Additional_Searches(frmValidator.vb:974) -> Current_Document: Id=12002, Path=C:\Users\SchreiberM\AppData\Local\Temp\Documents\3031_5701002069_20260623_172226_735.pdf
+17:22:41.9646|frmValidator|DEBUG >> Load_Additional_Searches(frmValidator.vb:975) -> ========================================
+17:22:41.9646|frmValidator|DEBUG >> Load_Additional_Searches(frmValidator.vb:1006) -> --- Ergebnisse werden geprüft (DATA/DOC) ---
+17:22:41.9646|DatabaseWithFallback|DEBUG >> GetDatatable(DatabaseWithFallback.vb:193) -> Client is empty, falling back to direct database access.
+17:22:41.9646|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:341) -> Fetching data from database [ECM] with Connection Id [ECM]
+17:22:41.9646|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:349) -> Retrieving Connection String from Connection Id [1]
+17:22:41.9646|MSSQLServer|DEBUG >> Get_ConnectionStringforID(MSSQLServer.vb:173) -> Getting ConnectionString for ConnectionId [1]
+17:22:41.9646|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=XXXXX;
+17:22:41.9646|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:41.9646|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [SELECT * FROM TBDD_CONNECTION WHERE GUID = 1] and Parameters []
+17:22:41.9646|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Data Source=SDD-VMP04-SQL17\DD_DEVELOP01;Initial Catalog=DD_ECM;User ID=sa;Password=XXXXX
+17:22:41.9646|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:41.9646|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [Select 'Test' ] and Parameters []
+17:22:41.9646|frmValidator|INFO >> Load_Additional_Searches(frmValidator.vb:1026) -> ✓ SQL-Search 'Mein TabTitle': 1 Ergebnisse gefunden
+17:22:41.9646|DatabaseWithFallback|DEBUG >> GetDatatable(DatabaseWithFallback.vb:193) -> Client is empty, falling back to direct database access.
+17:22:41.9646|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:341) -> Fetching data from database [ECM] with Connection Id [ECM]
+17:22:41.9646|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:349) -> Retrieving Connection String from Connection Id [1]
+17:22:41.9803|MSSQLServer|DEBUG >> Get_ConnectionStringforID(MSSQLServer.vb:173) -> Getting ConnectionString for ConnectionId [1]
+17:22:41.9803|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=XXXXX;
+17:22:41.9803|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:41.9803|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [SELECT * FROM TBDD_CONNECTION WHERE GUID = 1] and Parameters []
+17:22:41.9803|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Data Source=SDD-VMP04-SQL17\DD_DEVELOP01;Initial Catalog=DD_ECM;User ID=sa;Password=XXXXX
+17:22:41.9803|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:41.9803|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [Select TOP 125 T.DocID,T.FULL_FILENAME,T.Doctype from [VWCW_DOC_SEARCH] T ] and Parameters []
+17:22:42.0096|frmValidator|INFO >> Load_Additional_Searches(frmValidator.vb:1052) -> ✓ Doc-Search 'Eine DocSuche': 125 Dokumente gefunden
+17:22:42.0116|frmValidator|DEBUG >> Load_Additional_Searches(frmValidator.vb:1072) -> Zusätzliche Doc-Results gecached: 125 Rows
+17:22:42.0116|frmValidator|DEBUG >> Load_Additional_Searches(frmValidator.vb:1077) -> Ergebnisprüfung abgeschlossen: AdditionalDataResultsExist=True, AdditionalDocResultsExist=True
+17:22:42.0116|frmValidator|DEBUG >> Load_Additional_Searches(frmValidator.vb:1079) -> rbnPgGroupAttmt.Visible gesetzt auf: True | Stack:
+ bei taskFLOW.frmValidator.FillIndexValues(Boolean first, String SingleAttribute) in E:\SchreiberM\Visual Studio\GIT\1_smartUP\TaskFlow\app\TaskFlow\frmValidator.vb:Zeile 6037.
+17:22:42.0116|frmValidator|DEBUG >> Load_Additional_Searches(frmValidator.vb:1114) -> --- NORMAL-MODUS aktiviert (nur vorbereiten, NICHT Show) ---
+17:22:42.0116|taskFLOW|DEBUG >> TabPreload(frmValidatorSearch.vb:86) -> === TabPreload START ===
+17:22:42.0116|taskFLOW|DEBUG >> TabPreload(frmValidatorSearch.vb:87) -> Parameters: TabCountSQL=1, TabCountDoc=1, DTSQL.Rows=1, DTDOC.Rows=1
+17:22:42.0116|taskFLOW|DEBUG >> TabPreload(frmValidatorSearch.vb:106) -> Ausführung auf UI-Thread
+17:22:42.0116|taskFLOW|DEBUG >> TabPreload(frmValidatorSearch.vb:120) -> 🚫 Tab-Events deaktiviert
+17:22:42.0116|taskFLOW|DEBUG >> TabPreload(frmValidatorSearch.vb:126) -> ✓ _DTDATASearches und _DTDocSearches zugewiesen: SQL=1, Doc=1
+17:22:42.0116|taskFLOW|DEBUG >> TabPreload(frmValidatorSearch.vb:146) -> Panel1Collapsed (SQL)=False, Panel2Collapsed (Doc)=False
+17:22:42.0116|taskFLOW|DEBUG >> TabPreload(frmValidatorSearch.vb:154) -> ✓ DocumentViewer1 sichtbar gemacht (Doc-Searches vorhanden)
+17:22:42.0116|taskFLOW|DEBUG >> TabPreload(frmValidatorSearch.vb:165) -> Konfiguriere SQL-Tabs: 1 Definitionen
+17:22:42.0116|taskFLOW|DEBUG >> XtraTabControlSQL_SelectedPageChanged(frmValidatorSearch.vb:330) -> 🚫 XtraTabControlSQL_SelectedPageChanged unterdrückt (SelectedTabPageIndex=1)
+17:22:42.0116|taskFLOW|DEBUG >> XtraTabControlSQL_SelectedPageChanged(frmValidatorSearch.vb:330) -> 🚫 XtraTabControlSQL_SelectedPageChanged unterdrückt (SelectedTabPageIndex=2)
+17:22:42.0116|taskFLOW|DEBUG >> XtraTabControlSQL_SelectedPageChanged(frmValidatorSearch.vb:330) -> 🚫 XtraTabControlSQL_SelectedPageChanged unterdrückt (SelectedTabPageIndex=3)
+17:22:42.0116|taskFLOW|DEBUG >> XtraTabControlSQL_SelectedPageChanged(frmValidatorSearch.vb:330) -> 🚫 XtraTabControlSQL_SelectedPageChanged unterdrückt (SelectedTabPageIndex=4)
+17:22:42.0116|taskFLOW|DEBUG >> XtraTabControlSQL_SelectedPageChanged(frmValidatorSearch.vb:330) -> 🚫 XtraTabControlSQL_SelectedPageChanged unterdrückt (SelectedTabPageIndex=-1)
+17:22:42.0116|taskFLOW|DEBUG >> TabPreload(frmValidatorSearch.vb:171) -> Alle 5 SQL-Tabs auf PageVisible=False gesetzt
+17:22:42.0116|taskFLOW|DEBUG >> XtraTabControlSQL_SelectedPageChanged(frmValidatorSearch.vb:330) -> 🚫 XtraTabControlSQL_SelectedPageChanged unterdrückt (SelectedTabPageIndex=0)
+17:22:42.0116|taskFLOW|DEBUG >> TabPreload(frmValidatorSearch.vb:182) -> SQL-Tab 0: Text='Mein TabTitle', PageVisible=True
+17:22:42.0116|taskFLOW|INFO >> TabPreload(frmValidatorSearch.vb:189) -> ✓ 1 SQL-Tabs konfiguriert
+17:22:42.0116|taskFLOW|DEBUG >> TabPreload(frmValidatorSearch.vb:199) -> Konfiguriere Doc-Tabs: 1 Definitionen
+17:22:42.0278|taskFLOW|DEBUG >> XtraTabControlDocs_SelectedPageChanged_1(frmValidatorSearch.vb:385) -> 🚫 XtraTabControlDocs_SelectedPageChanged unterdrückt (SelectedTabPageIndex=1)
+17:22:42.0278|taskFLOW|DEBUG >> XtraTabControlDocs_SelectedPageChanged_1(frmValidatorSearch.vb:385) -> 🚫 XtraTabControlDocs_SelectedPageChanged unterdrückt (SelectedTabPageIndex=2)
+17:22:42.0278|taskFLOW|DEBUG >> XtraTabControlDocs_SelectedPageChanged_1(frmValidatorSearch.vb:385) -> 🚫 XtraTabControlDocs_SelectedPageChanged unterdrückt (SelectedTabPageIndex=3)
+17:22:42.0278|taskFLOW|DEBUG >> XtraTabControlDocs_SelectedPageChanged_1(frmValidatorSearch.vb:385) -> 🚫 XtraTabControlDocs_SelectedPageChanged unterdrückt (SelectedTabPageIndex=4)
+17:22:42.0278|taskFLOW|DEBUG >> XtraTabControlDocs_SelectedPageChanged_1(frmValidatorSearch.vb:385) -> 🚫 XtraTabControlDocs_SelectedPageChanged unterdrückt (SelectedTabPageIndex=-1)
+17:22:42.0278|taskFLOW|DEBUG >> TabPreload(frmValidatorSearch.vb:205) -> Alle 5 Doc-Tabs auf PageVisible=False gesetzt
+17:22:42.0278|taskFLOW|DEBUG >> XtraTabControlDocs_SelectedPageChanged_1(frmValidatorSearch.vb:385) -> 🚫 XtraTabControlDocs_SelectedPageChanged unterdrückt (SelectedTabPageIndex=0)
+17:22:42.0278|taskFLOW|DEBUG >> TabPreload(frmValidatorSearch.vb:216) -> Doc-Tab 0: Text='Eine DocSuche', PageVisible=True
+17:22:42.0278|taskFLOW|INFO >> TabPreload(frmValidatorSearch.vb:223) -> ✓ 1 Doc-Tabs konfiguriert
+17:22:42.0278|taskFLOW|DEBUG >> TabPreload(frmValidatorSearch.vb:236) -> ✓ Tab-Events reaktiviert
+17:22:42.0278|taskFLOW|DEBUG >> TabPreload(frmValidatorSearch.vb:251) -> Setze SQL SelectedTabPageIndex manuell auf 0
+17:22:42.0278|taskFLOW|DEBUG >> TabPreload(frmValidatorSearch.vb:266) -> SQL-Tab 0: erzwungener Initial-Refresh
+17:22:42.0278|DatabaseWithFallback|DEBUG >> GetDatatable(DatabaseWithFallback.vb:193) -> Client is empty, falling back to direct database access.
+17:22:42.0278|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:341) -> Fetching data from database [ECM] with Connection Id [ECM]
+17:22:42.0278|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:349) -> Retrieving Connection String from Connection Id [1]
+17:22:42.0278|MSSQLServer|DEBUG >> Get_ConnectionStringforID(MSSQLServer.vb:173) -> Getting ConnectionString for ConnectionId [1]
+17:22:42.0278|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=XXXXX;
+17:22:42.0278|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:42.0278|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [SELECT * FROM TBDD_CONNECTION WHERE GUID = 1] and Parameters []
+17:22:42.0278|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Data Source=SDD-VMP04-SQL17\DD_DEVELOP01;Initial Catalog=DD_ECM;User ID=sa;Password=XXXXX
+17:22:42.0278|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:42.0278|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [Select 'Test' ] and Parameters []
+17:22:42.0506|taskFLOW|DEBUG >> TabPreload(frmValidatorSearch.vb:286) -> Setze Doc SelectedTabPageIndex manuell auf 0
+17:22:42.0506|taskFLOW|DEBUG >> TabPreload(frmValidatorSearch.vb:301) -> Doc-Tab 0: erzwungener Initial-Refresh
+17:22:42.0506|DatabaseWithFallback|DEBUG >> GetDatatable(DatabaseWithFallback.vb:193) -> Client is empty, falling back to direct database access.
+17:22:42.0506|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:341) -> Fetching data from database [ECM] with Connection Id [ECM]
+17:22:42.0506|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:349) -> Retrieving Connection String from Connection Id [1]
+17:22:42.0506|MSSQLServer|DEBUG >> Get_ConnectionStringforID(MSSQLServer.vb:173) -> Getting ConnectionString for ConnectionId [1]
+17:22:42.0506|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=XXXXX;
+17:22:42.0506|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:42.0506|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [SELECT * FROM TBDD_CONNECTION WHERE GUID = 1] and Parameters []
+17:22:42.0506|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Data Source=SDD-VMP04-SQL17\DD_DEVELOP01;Initial Catalog=DD_ECM;User ID=sa;Password=XXXXX
+17:22:42.0506|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:42.0506|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [Select TOP 125 T.DocID,T.FULL_FILENAME,T.Doctype from [VWCW_DOC_SEARCH] T ] and Parameters []
+17:22:42.0905|taskFLOW|DEBUG >> TabPreload(frmValidatorSearch.vb:310) -> === TabPreload END ===
+17:22:42.0905|frmValidator|DEBUG >> Load_Additional_Searches(frmValidator.vb:1123) -> Load_Additional_Searches: Vorbereitung abgeschlossen (Preload=False), Formular bleibt geschlossen.
+17:22:42.0905|frmValidator|DEBUG >> Load_Additional_Searches(frmValidator.vb:1129) -> === Load_Additional_Searches END ===
+17:22:42.0905|frmValidator|DEBUG >> FillIndexValues(frmValidator.vb:6038) -> [FillIndexValues] Nach Load_Additional_Searches: rbnPgGroupAttmt.Visible=True
+17:22:42.0905|taskFLOW|DEBUG >> ReplaceAllValues(clsPatterns.vb:164) -> input BEFORE replacing: [Declare @Attribut1 Varchar(100) = '{#CTRL#LU_Attr1_dep_Attr2}'
+If @Attribut1 = 'TBDD_USER'
+ select USERNAME FROM TBDD_USER ORDER BY USERNAME
+Else
+ select NAME FROM TBDD_USER ORDER BY NAME
+
+]
+17:22:42.0905|taskFLOW|DEBUG >> ReplaceAllValues(clsPatterns.vb:180) -> input AFTER replacing: [Declare @Attribut1 Varchar(100) = '1000002'
+If @Attribut1 = 'TBDD_USER'
+ select USERNAME FROM TBDD_USER ORDER BY USERNAME
+Else
+ select NAME FROM TBDD_USER ORDER BY NAME
+
+]
+17:22:42.0905|DatabaseWithFallback|DEBUG >> GetDatatable(DatabaseWithFallback.vb:193) -> Client is empty, falling back to direct database access.
+17:22:42.0905|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:341) -> Fetching data from database [ECM] with Connection Id [ECM]
+17:22:42.0905|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:349) -> Retrieving Connection String from Connection Id [1]
+17:22:42.0905|MSSQLServer|DEBUG >> Get_ConnectionStringforID(MSSQLServer.vb:173) -> Getting ConnectionString for ConnectionId [1]
+17:22:42.0905|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=XXXXX;
+17:22:42.0905|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:42.0905|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [SELECT * FROM TBDD_CONNECTION WHERE GUID = 1] and Parameters []
+17:22:42.0905|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Data Source=SDD-VMP04-SQL17\DD_DEVELOP01;Initial Catalog=DD_ECM;User ID=sa;Password=XXXXX
+17:22:42.0905|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:42.0905|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [Declare @Attribut1 Varchar(100) = '1000002'
+If @Attribut1 = 'TBDD_USER'
+ select USERNAME FROM TBDD_USER ORDER BY USERNAME
+Else
+ select NAME FROM TBDD_USER ORDER BY NAME
+
+] and Parameters []
+17:22:42.0905|ClassControlCreator|DEBUG >> GridTables_HandleControlValueChange(ClassControlCreator.vb:917) -> Force-setting Editor for all Gridcells..
+17:22:42.0905|taskFLOW|DEBUG >> ReplaceAllValues(clsPatterns.vb:164) -> input BEFORE replacing: [SELECT EMAIL, GUID, USERNAME,PRENAME,NAME,LANGUAGE,USERID_FK_INT_ECM,DATE_FORMAT,ADDED_WHO,ADDED_WHEN FROm TBDD_USER
+WHERE USERID_FK_INT_ECM > {#CTRL#txtAttributString1}
+]
+17:22:42.0905|taskFLOW|DEBUG >> ReplaceAllValues(clsPatterns.vb:180) -> input AFTER replacing: [SELECT EMAIL, GUID, USERNAME,PRENAME,NAME,LANGUAGE,USERID_FK_INT_ECM,DATE_FORMAT,ADDED_WHO,ADDED_WHEN FROm TBDD_USER
+WHERE USERID_FK_INT_ECM > 1000002
+]
+17:22:42.0905|DatabaseWithFallback|DEBUG >> GetDatatable(DatabaseWithFallback.vb:193) -> Client is empty, falling back to direct database access.
+17:22:42.0905|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:341) -> Fetching data from database [ECM] with Connection Id [ECM]
+17:22:42.0905|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:349) -> Retrieving Connection String from Connection Id [1]
+17:22:42.0905|MSSQLServer|DEBUG >> Get_ConnectionStringforID(MSSQLServer.vb:173) -> Getting ConnectionString for ConnectionId [1]
+17:22:42.0905|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=XXXXX;
+17:22:42.0905|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:42.0905|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [SELECT * FROM TBDD_CONNECTION WHERE GUID = 1] and Parameters []
+17:22:42.0905|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Data Source=SDD-VMP04-SQL17\DD_DEVELOP01;Initial Catalog=DD_ECM;User ID=sa;Password=XXXXX
+17:22:42.0905|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:42.1055|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [SELECT EMAIL, GUID, USERNAME,PRENAME,NAME,LANGUAGE,USERID_FK_INT_ECM,DATE_FORMAT,ADDED_WHO,ADDED_WHEN FROm TBDD_USER
+WHERE USERID_FK_INT_ECM > 1000002
+] and Parameters []
+17:22:42.1055|ClassControlCreator|DEBUG >> GridTables_HandleControlValueChange(ClassControlCreator.vb:917) -> Force-setting Editor for all Gridcells..
+17:22:42.1055|ClassControlCreator|DEBUG >> GridTables_HandleControlValueChange(ClassControlCreator.vb:908) -> GridTables_HandleControlValueChange -> Skipping column [Col7] (has #TBCOL# placeholders, will be resolved per row)
+17:22:42.1261|frmValidator|DEBUG >> UpdateGridCurrencyFormats(frmValidator.vb:4466) -> [UpdateGridCurrencyFormats] DocCurrency is EUR or empty, cache updated but skipping format rebuild.
+17:22:42.1261|frmValidator|DEBUG >> LoadSQLData(frmValidator.vb:1167) -> in LoadSQLData for ControlID [50]...
+17:22:42.1261|frmValidator|DEBUG >> LoadSQLData(frmValidator.vb:1180) -> LoadSQLData for Control [LUAttrStr2] with GUID [50] ...
+17:22:42.1261|DatabaseWithFallback|DEBUG >> GetDatatable(DatabaseWithFallback.vb:193) -> Client is empty, falling back to direct database access.
+17:22:42.1261|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:341) -> Fetching data from database [ECM] with Connection Id [ECM]
+17:22:42.1261|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=XXXXX;
+17:22:42.1261|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:42.1261|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [select 'Kreditor 1' union
+select 'Kreditor 2' union
+select 'Kreditor 3' union
+select 'Kreditor 4' union
+select 'Kreditor 5'
+
+
+] and Parameters []
+17:22:42.1261|frmValidator|DEBUG >> LoadSQLData(frmValidator.vb:1223) -> [LoadSQLData DEBUG] Lookup [LUAttrStr2] konfiguriert:
+17:22:42.1261|frmValidator|DEBUG >> LoadSQLData(frmValidator.vb:1224) -> DataSource-Typ: System.Data.DataTable
+17:22:42.1261|frmValidator|DEBUG >> LoadSQLData(frmValidator.vb:1225) -> ValueMember: [Column1]
+17:22:42.1261|frmValidator|DEBUG >> LoadSQLData(frmValidator.vb:1226) -> DisplayMember: [Column1]
+17:22:42.1261|frmValidator|DEBUG >> LoadSQLData(frmValidator.vb:1233) -> [LoadSQLData BUGFIX] Alte SelectedValues gesichert: [Row 3]
+17:22:42.1261|frmValidator|WARN >> LoadSQLData(frmValidator.vb:1264) -> ⚠️ [LoadSQLData BUGFIX] Wert [Row 3] existiert NICHT im neuen DataSource ✗
+17:22:42.1261|frmValidator|DEBUG >> LoadSQLData(frmValidator.vb:1167) -> in LoadSQLData for ControlID [119]...
+17:22:42.1261|frmValidator|DEBUG >> LoadSQLData(frmValidator.vb:1180) -> LoadSQLData for Control [TXTDisplayOnly] with GUID [119] ...
+17:22:42.1261|taskFLOW|DEBUG >> ReplaceAllValues(clsPatterns.vb:164) -> input BEFORE replacing: [SELECT CASE '{#CTRL#LUAttrStr2}'
+WHEN 'Kreditor 1' THEN 'Ort 1'
+WHEN 'Kreditor 2' THEN 'Ort 2'
+WHEN 'Kreditor 3' THEN 'Ort 3'
+WHEN 'Kreditor 4' THEN 'Ort 4'
+WHEN 'Kreditor 5' THEN 'Ort 5' END
+]
+17:22:42.1261|taskFLOW|DEBUG >> ReplaceAllValues(clsPatterns.vb:180) -> input AFTER replacing: [SELECT CASE 'Row 3'
+WHEN 'Kreditor 1' THEN 'Ort 1'
+WHEN 'Kreditor 2' THEN 'Ort 2'
+WHEN 'Kreditor 3' THEN 'Ort 3'
+WHEN 'Kreditor 4' THEN 'Ort 4'
+WHEN 'Kreditor 5' THEN 'Ort 5' END
+]
+17:22:42.1261|DatabaseWithFallback|DEBUG >> GetDatatable(DatabaseWithFallback.vb:193) -> Client is empty, falling back to direct database access.
+17:22:42.1261|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:341) -> Fetching data from database [ECM] with Connection Id [ECM]
+17:22:42.1362|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:349) -> Retrieving Connection String from Connection Id [1]
+17:22:42.1362|MSSQLServer|DEBUG >> Get_ConnectionStringforID(MSSQLServer.vb:173) -> Getting ConnectionString for ConnectionId [1]
+17:22:42.1362|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=XXXXX;
+17:22:42.1362|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:42.1362|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [SELECT * FROM TBDD_CONNECTION WHERE GUID = 1] and Parameters []
+17:22:42.1362|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Data Source=SDD-VMP04-SQL17\DD_DEVELOP01;Initial Catalog=DD_ECM;User ID=sa;Password=XXXXX
+17:22:42.1362|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:42.1362|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [SELECT CASE 'Row 3'
+WHEN 'Kreditor 1' THEN 'Ort 1'
+WHEN 'Kreditor 2' THEN 'Ort 2'
+WHEN 'Kreditor 3' THEN 'Ort 3'
+WHEN 'Kreditor 4' THEN 'Ort 4'
+WHEN 'Kreditor 5' THEN 'Ort 5' END
+] and Parameters []
+17:22:42.1362|frmValidator|DEBUG >> LoadSQLData(frmValidator.vb:1167) -> in LoadSQLData for ControlID [134]...
+17:22:42.1362|frmValidator|DEBUG >> LoadSQLData(frmValidator.vb:1180) -> LoadSQLData for Control [LU_Attr1_Dep_Attr2] with GUID [134] ...
+17:22:42.1362|taskFLOW|DEBUG >> ReplaceAllValues(clsPatterns.vb:164) -> input BEFORE replacing: [Declare @Attribut2 Varchar(100) = '{#CTRL#LUAttrStr2}'
+If @Attribut2 = 'Kreditor 1'
+ select 'Bankverbindung1 Kred 1' union
+select 'Bankverbindung2 Kred 1'
+Else
+ select 'Bankverbindung1 Kred Else'
+union
+select 'Bankverbindung2 Kred Else'
+
+]
+17:22:42.1362|taskFLOW|DEBUG >> ReplaceAllValues(clsPatterns.vb:180) -> input AFTER replacing: [Declare @Attribut2 Varchar(100) = 'Row 3'
+If @Attribut2 = 'Kreditor 1'
+ select 'Bankverbindung1 Kred 1' union
+select 'Bankverbindung2 Kred 1'
+Else
+ select 'Bankverbindung1 Kred Else'
+union
+select 'Bankverbindung2 Kred Else'
+
+]
+17:22:42.1362|DatabaseWithFallback|DEBUG >> GetDatatable(DatabaseWithFallback.vb:193) -> Client is empty, falling back to direct database access.
+17:22:42.1362|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:341) -> Fetching data from database [ECM] with Connection Id [ECM]
+17:22:42.1362|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=XXXXX;
+17:22:42.1362|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:42.1362|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [Declare @Attribut2 Varchar(100) = 'Row 3'
+If @Attribut2 = 'Kreditor 1'
+ select 'Bankverbindung1 Kred 1' union
+select 'Bankverbindung2 Kred 1'
+Else
+ select 'Bankverbindung1 Kred Else'
+union
+select 'Bankverbindung2 Kred Else'
+
+] and Parameters []
+17:22:42.1362|frmValidator|DEBUG >> LoadSQLData(frmValidator.vb:1223) -> [LoadSQLData DEBUG] Lookup [LU_Attr1_Dep_Attr2] konfiguriert:
+17:22:42.1362|frmValidator|DEBUG >> LoadSQLData(frmValidator.vb:1224) -> DataSource-Typ: System.Data.DataTable
+17:22:42.1362|frmValidator|DEBUG >> LoadSQLData(frmValidator.vb:1225) -> ValueMember: []
+17:22:42.1362|frmValidator|DEBUG >> LoadSQLData(frmValidator.vb:1226) -> DisplayMember: []
+17:22:42.1362|frmValidator|DEBUG >> LoadSQLData(frmValidator.vb:1233) -> [LoadSQLData BUGFIX] Alte SelectedValues gesichert: [1000002]
+17:22:42.1362|frmValidator|WARN >> LoadSQLData(frmValidator.vb:1264) -> ⚠️ [LoadSQLData BUGFIX] Wert [1000002] existiert NICHT im neuen DataSource ✗
+17:22:42.1627|frmValidator|ERROR >> Load_Next_Document(frmValidator.vb:4423) -> System.InvalidCastException: Das Objekt des Typs "System.Data.DataRow" kann nicht in Typ "ControlMetadata" umgewandelt werden.
+17:22:42.1735|frmValidator|INFO >> Load_Next_Document(frmValidator.vb:4427) -> unexpected error in Load_Next_Document: Das Objekt des Typs "System.Data.DataRow" kann nicht in Typ "ControlMetadata" umgewandelt werden.
+17:22:42.1957|taskFLOW|DEBUG >> frmError_Activated(frmError.vb:70) -> [frmError] Dialog aktiviert
+17:22:42.2726|taskFLOW|DEBUG >> frmError_Shown(frmError.vb:66) -> [frmError] Dialog angezeigt - Enabled: True
+17:22:42.3658|taskFLOW|DEBUG >> ReplaceAllValues(clsPatterns.vb:164) -> input BEFORE replacing: [Declare @Attribut1 Varchar(100) = '{#CTRL#LU_Attr1_dep_Attr2}'
+If @Attribut1 = 'TBDD_USER'
+ select USERNAME FROM TBDD_USER ORDER BY USERNAME
+Else
+ select NAME FROM TBDD_USER ORDER BY NAME
+
+]
+17:22:42.3658|taskFLOW|DEBUG >> ReplaceAllValues(clsPatterns.vb:180) -> input AFTER replacing: [Declare @Attribut1 Varchar(100) = '1000002'
+If @Attribut1 = 'TBDD_USER'
+ select USERNAME FROM TBDD_USER ORDER BY USERNAME
+Else
+ select NAME FROM TBDD_USER ORDER BY NAME
+
+]
+17:22:42.3658|GridControl|DEBUG >> ResolveSqlTemplate(GridControl.vb:111) -> [ResolveSqlTemplate] ✓ Cached SQL: Key=[-445029346]
+17:22:42.3658|GridControl|INFO >> _Lambda$__2(GridControl.vb:853) -> [CustomRowCellEdit] 🆕 MISS: Creating editor for [column1]
+17:22:42.3658|DatabaseWithFallback|DEBUG >> GetDatatable(DatabaseWithFallback.vb:193) -> Client is empty, falling back to direct database access.
+17:22:42.3658|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:341) -> Fetching data from database [ECM] with Connection Id [ECM]
+17:22:42.3658|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase(DatabaseWithFallback.vb:349) -> Retrieving Connection String from Connection Id [1]
+17:22:42.3658|MSSQLServer|DEBUG >> Get_ConnectionStringforID(MSSQLServer.vb:173) -> Getting ConnectionString for ConnectionId [1]
+17:22:42.3658|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=XXXXX;
+17:22:42.3705|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:42.3705|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [SELECT * FROM TBDD_CONNECTION WHERE GUID = 1] and Parameters []
+17:22:42.3705|MSSQLServer|DEBUG >> GetConnection(MSSQLServer.vb:276) -> The Following Connection is open: Data Source=SDD-VMP04-SQL17\DD_DEVELOP01;Initial Catalog=DD_ECM;User ID=sa;Password=XXXXX
+17:22:42.3705|MSSQLServer|DEBUG >> MaybeGetTransaction(MSSQLServer.vb:118) -> Transaction Mode: [WithTransaction]
+17:22:42.3705|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject(MSSQLServer.vb:408) -> GetDatatableWithConnectionObject: Running Query [Declare @Attribut1 Varchar(100) = '1000002'
+If @Attribut1 = 'TBDD_USER'
+ select USERNAME FROM TBDD_USER ORDER BY USERNAME
+Else
+ select NAME FROM TBDD_USER ORDER BY NAME
+
+] and Parameters []
+17:22:42.3705|taskFLOW|DEBUG >> CreateRowSpecificEditor(GridControl.vb:1459) -> [CreateRowSpecificEditor] Retrieved 18 rows for column [column1]
+17:22:42.3705|GridControl|DEBUG >> CreateRowSpecificEditor(GridControl.vb:1498) -> [CreateRowSpecificEditor] Created ComboBox with 18 items
+17:22:42.3705|GridControl|INFO >> _Lambda$__2(GridControl.vb:868) -> [CustomRowCellEdit] ✓ Cached [column1] editor (Type=[RepositoryItemComboBox])
+17:22:42.3868|taskFLOW|DEBUG >> ReplaceAllValues(clsPatterns.vb:164) -> input BEFORE replacing: [Declare @Attribut1 Varchar(100) = '{#CTRL#LU_Attr1_dep_Attr2}'
+If @Attribut1 = 'TBDD_USER'
+ select USERNAME FROM TBDD_USER ORDER BY USERNAME
+Else
+ select NAME FROM TBDD_USER ORDER BY NAME
+
+]
+17:22:42.3868|taskFLOW|DEBUG >> ReplaceAllValues(clsPatterns.vb:180) -> input AFTER replacing: [Declare @Attribut1 Varchar(100) = '1000002'
+If @Attribut1 = 'TBDD_USER'
+ select USERNAME FROM TBDD_USER ORDER BY USERNAME
+Else
+ select NAME FROM TBDD_USER ORDER BY NAME
+
+]
+17:22:42.3868|GridControl|INFO >> _Lambda$__2(GridControl.vb:846) -> [CustomRowCellEdit] ✓ CACHE HIT: [column1|-445029346]
+17:22:45.4034|taskFLOW|DEBUG >> frmError_Activated(frmError.vb:70) -> [frmError] Dialog aktiviert
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:13) -> [frmError] OK_Button_Click aufgerufen von:
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> frmError.OK_Button_Click (Zeile 12)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> Control.OnClick (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> Button.OnClick (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> Button.OnMouseUp (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> Control.WmMouseUp (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> Control.WndProc (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> ButtonBase.WndProc (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> Button.WndProc (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> ControlNativeWindow.OnMessage (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> ControlNativeWindow.WndProc (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> NativeWindow.DebuggableCallback (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> UnsafeNativeMethods.DispatchMessageW (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> ThreadContext.RunMessageLoopInner (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> ThreadContext.RunMessageLoop (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> Application.RunDialog (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> Form.ShowDialog (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> Form.ShowDialog (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> frmValidator.Load_Next_Document (Zeile 4429)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> frmValidator.frmValidation_Shown (Zeile 6140)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> Form.OnShown (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> XtraForm.OnShown (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> Form.CallShownEvent (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> Control.InvokeMarshaledCallbackDo (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> Control.InvokeMarshaledCallbackHelper (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> ExecutionContext.RunInternal (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> ExecutionContext.Run (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> ExecutionContext.Run (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> Control.InvokeMarshaledCallback (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> Control.InvokeMarshaledCallbacks (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> Control.WndProc (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> ScrollableControl.WndProc (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> Form.WndProc (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> DForm.WndProc (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> XtraForm.WndProc (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> RibbonForm.WndProc (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> ControlNativeWindow.OnMessage (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> ControlNativeWindow.WndProc (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> NativeWindow.DebuggableCallback (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> UnsafeNativeMethods.DefSubclassProc (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> Win32Subclasser.SubClassProcInner (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> UnsafeNativeMethods.DispatchMessageW (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> ThreadContext.RunMessageLoopInner (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> ThreadContext.RunMessageLoop (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> WindowsFormsApplicationBase.OnRun (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> WindowsFormsApplicationBase.DoApplicationModel (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> WindowsFormsApplicationBase.Run (Zeile 0)
+17:22:45.5478|taskFLOW|DEBUG >> OK_Button_Click(frmError.vb:15) -> MyApplication.Main (Zeile 83)
+17:22:45.5478|taskFLOW|DEBUG >> CloseDialog(frmError.vb:51) -> [frmError] CloseDialog: Flag gesetzt, starte verzögerten Close
+17:22:45.5590|taskFLOW|DEBUG >> frmError_FormClosing(frmError.vb:75) -> [frmError] FormClosing: Close bereits aktiv, erlauben
+17:22:45.5590|taskFLOW|DEBUG >> _Lambda$__25-0(frmError.vb:59) -> [frmError] Dialog geschlossen via BeginInvoke
+17:22:45.5849|frmValidator|DEBUG >> CloseOverlaySafe(frmValidator.vb:200) -> [Overlay] RefCount: 1 → 0
+17:22:45.5849|frmValidator|DEBUG >> CloseOverlaySafe(frmValidator.vb:206) -> [Overlay] ✓ Geschlossen
+17:22:45.5925|frmValidator|DEBUG >> frmValidation_Shown(frmValidator.vb:6221) -> frmValidation_Shown finished!
+17:22:45.5925|frmValidator|DEBUG >> frmValidation_Shown(frmValidator.vb:6228) -> ℹ Overlay war bereits geschlossen