Compare commits
6 Commits
Cockpit_Tr
...
c0a17f5cd4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c0a17f5cd4 | ||
|
|
6260c215f2 | ||
|
|
e49713246b | ||
|
|
501adeda52 | ||
|
|
bd72e9cecc | ||
|
|
46a9742d5d |
@@ -110,26 +110,27 @@
|
|||||||
</Component>
|
</Component>
|
||||||
|
|
||||||
<Component Id="DDLibs" Guid="BA2979E3-3778-48B8-B0D8-4B77825B9293">
|
<Component Id="DDLibs" Guid="BA2979E3-3778-48B8-B0D8-4B77825B9293">
|
||||||
<File Id="LookupGrid" Name="DigitalData.Controls.LookupGrid.dll" Source="DigitalData.Controls.LookupGrid.dll"/>
|
<File Id="LookupGrid" Name="DigitalData.Controls.LookupGrid.dll" Source="DigitalData.Controls.LookupGrid.dll"/>
|
||||||
<File Id="DDSnapPanel" Name="DigitalData.Controls.SnapPanel.dll" Source="DigitalData.Controls.SnapPanel.dll"/>
|
<File Id="DDSnapPanel" Name="DigitalData.Controls.SnapPanel.dll" Source="DigitalData.Controls.SnapPanel.dll"/>
|
||||||
<File Id="DDCommonGUIs" Name="DigitalData.GUIs.Common.dll" Source="DigitalData.GUIs.Common.dll"/>
|
<File Id="DDCommonGUIs" Name="DigitalData.GUIs.Common.dll" Source="DigitalData.GUIs.Common.dll"/>
|
||||||
<File Id="DDConfig" Name="DigitalData.Modules.Config.dll" Source="DigitalData.Modules.Config.dll"/>
|
<File Id="DDConfig" Name="DigitalData.Modules.Config.dll" Source="DigitalData.Modules.Config.dll"/>
|
||||||
<File Id="DDLogging" Name="DigitalData.Modules.Logging.dll" Source="DigitalData.Modules.Logging.dll"/>
|
<File Id="DDLogging" Name="DigitalData.Modules.Logging.dll" Source="DigitalData.Modules.Logging.dll"/>
|
||||||
<File Id="DDInterfaces" Name="DigitalData.Modules.Interfaces.dll" Source="DigitalData.Modules.Interfaces.dll"/>
|
<File Id="DDInterfaces" Name="DigitalData.Modules.Interfaces.dll" Source="DigitalData.Modules.Interfaces.dll"/>
|
||||||
<File Id="DDBase" Name="DigitalData.Modules.Base.dll" Source="DigitalData.Modules.Base.dll"/>
|
<File Id="DDBase" Name="DigitalData.Modules.Base.dll" Source="DigitalData.Modules.Base.dll"/>
|
||||||
<File Id="DDFilesystem" Name="DigitalData.Modules.Filesystem.dll" Source="DigitalData.Modules.Filesystem.dll"/>
|
<File Id="DDFilesystem" Name="DigitalData.Modules.Filesystem.dll" Source="DigitalData.Modules.Filesystem.dll"/>
|
||||||
<File Id="DDEncryption" Name="DigitalData.Modules.Encryption.dll" Source="DigitalData.Modules.Encryption.dll"/>
|
<File Id="DDEncryption" Name="DigitalData.Modules.Encryption.dll" Source="DigitalData.Modules.Encryption.dll"/>
|
||||||
<File Id="DDWindream" Name="DigitalData.Modules.Windream.dll" Source="DigitalData.Modules.Windream.dll"/>
|
<File Id="DDWindream" Name="DigitalData.Modules.Windream.dll" Source="DigitalData.Modules.Windream.dll"/>
|
||||||
<File Id="DDWindows" Name="DigitalData.Modules.Windows.dll" Source="DigitalData.Modules.Windows.dll"/>
|
<File Id="DDWindows" Name="DigitalData.Modules.Windows.dll" Source="DigitalData.Modules.Windows.dll"/>
|
||||||
<File Id="DDZooflow" Name="DigitalData.Modules.Zooflow.dll" Source="DigitalData.Modules.Zooflow.dll"/>
|
<File Id="DDZooflow" Name="DigitalData.Modules.Zooflow.dll" Source="DigitalData.Modules.Zooflow.dll"/>
|
||||||
<File Id="DDDatabase" Name="DigitalData.Modules.Database.dll" Source="DigitalData.Modules.Database.dll"/>
|
<File Id="DDDatabase" Name="DigitalData.Modules.Database.dll" Source="DigitalData.Modules.Database.dll"/>
|
||||||
<File Id="DDPatterns" Name="DigitalData.Modules.Patterns.dll" Source="DigitalData.Modules.Patterns.dll"/>
|
<File Id="DDPatterns" Name="DigitalData.Modules.Patterns.dll" Source="DigitalData.Modules.Patterns.dll"/>
|
||||||
<File Id="DDEDMIAPI" Name="DigitalData.Modules.EDMI.API.dll" Source="DigitalData.Modules.EDMI.API.dll"/>
|
<File Id="DDEDMIAPI" Name="DigitalData.Modules.EDMI.API.dll" Source="DigitalData.Modules.EDMI.API.dll"/>
|
||||||
<File Id="DDDocumentViewer" Name="DigitalData.Controls.DocumentViewer.dll" Source="DigitalData.Controls.DocumentViewer.dll"/>
|
<File Id="DDDocumentViewer" Name="DigitalData.Controls.DocumentViewer.dll" Source="DigitalData.Controls.DocumentViewer.dll"/>
|
||||||
<File Id="Messaging" Name="DigitalData.Modules.Messaging.dll" Source="DigitalData.Modules.Messaging.dll" KeyPath="no" />
|
<File Id="DDLicenseManager" Name="DLLLicenseManager.dll" Source="DLLLicenseManager.dll" KeyPath="no" />
|
||||||
<File Id="Messaging.License" Name="MailLicense.xml" Source="MailLicense.xml" KeyPath="no" />
|
<File Id="Messaging" Name="DigitalData.Modules.Messaging.dll" Source="DigitalData.Modules.Messaging.dll" KeyPath="no" />
|
||||||
<File Id="Limilabs.Mail" Name="Mail.dll" Source="Mail.dll" KeyPath="no" />
|
<File Id="Messaging.License" Name="MailLicense.xml" Source="MailLicense.xml" KeyPath="no" />
|
||||||
<File Id="NLog" Name="NLog.dll" Source="NLog.dll"/>
|
<File Id="Limilabs.Mail" Name="Mail.dll" Source="Mail.dll" KeyPath="no" />
|
||||||
|
<File Id="NLog" Name="NLog.dll" Source="NLog.dll"/>
|
||||||
</Component>
|
</Component>
|
||||||
<Component Id="RuntimeLibs" Guid="F7170744-3DB5-4275-ACCD-7F3B9BDE1D6E">
|
<Component Id="RuntimeLibs" Guid="F7170744-3DB5-4275-ACCD-7F3B9BDE1D6E">
|
||||||
<File Id="Newtonsoft.Json" Name="Newtonsoft.Json.dll" Source="Newtonsoft.Json.dll" KeyPath="yes" />
|
<File Id="Newtonsoft.Json" Name="Newtonsoft.Json.dll" Source="Newtonsoft.Json.dll" KeyPath="yes" />
|
||||||
|
|||||||
@@ -45,7 +45,9 @@ Namespace ControlCreator
|
|||||||
Private Class FormulaSqlDefinition
|
Private Class FormulaSqlDefinition
|
||||||
Public Property SqlTemplate As String
|
Public Property SqlTemplate As String
|
||||||
Public Property ReferencedColumns As List(Of String)
|
Public Property ReferencedColumns As List(Of String)
|
||||||
|
Public Property ConnectionId As Integer
|
||||||
End Class
|
End Class
|
||||||
|
|
||||||
''' <summary>
|
''' <summary>
|
||||||
''' Extrahiert alle {#TBCOL#ColumnName}-Platzhalter aus einem SQL-Template.
|
''' Extrahiert alle {#TBCOL#ColumnName}-Platzhalter aus einem SQL-Template.
|
||||||
''' </summary>
|
''' </summary>
|
||||||
@@ -81,7 +83,7 @@ Namespace ControlCreator
|
|||||||
safeValue = "NULL"
|
safeValue = "NULL"
|
||||||
ElseIf TypeOf cellValue Is String Then
|
ElseIf TypeOf cellValue Is String Then
|
||||||
' SQL-Injection-Schutz: Einfache Anführungszeichen escapen
|
' SQL-Injection-Schutz: Einfache Anführungszeichen escapen
|
||||||
safeValue = "'" & cellValue.ToString().Replace("'", "''") & "'"
|
safeValue = cellValue.ToString().Replace("'", "''")
|
||||||
ElseIf TypeOf cellValue Is Boolean Then
|
ElseIf TypeOf cellValue Is Boolean Then
|
||||||
safeValue = If(CBool(cellValue), "1", "0")
|
safeValue = If(CBool(cellValue), "1", "0")
|
||||||
Else
|
Else
|
||||||
@@ -218,6 +220,13 @@ Namespace ControlCreator
|
|||||||
Dim oComboboxDataTable As DataTable = Nothing
|
Dim oComboboxDataTable As DataTable = Nothing
|
||||||
Dim oColumnName As String = oRow.Item("SPALTENNAME")
|
Dim oColumnName As String = oRow.Item("SPALTENNAME")
|
||||||
_Logger.Debug("Working on SQL for Column[{0}]...", oColumnName)
|
_Logger.Debug("Working on SQL for Column[{0}]...", oColumnName)
|
||||||
|
|
||||||
|
' *** NEU: Platzhalter-Check ***
|
||||||
|
If ContainsTableColumnPlaceholder(oSqlCommand) Then
|
||||||
|
_Logger.Debug("...SQL contains #TBCOL# placeholders – skipping static caching, will be resolved per row.")
|
||||||
|
Continue For ' Überspringen – wird in CustomRowCellEdit behandelt
|
||||||
|
End If
|
||||||
|
|
||||||
If Not clsPatterns.HasComplexPatterns(oSqlCommand) Then
|
If Not clsPatterns.HasComplexPatterns(oSqlCommand) Then
|
||||||
_Logger.Debug("SQL has no complex patterns!")
|
_Logger.Debug("SQL has no complex patterns!")
|
||||||
'oComboboxDataTable = ClassDatabase.Return_Datatable_ConId(oSqlCommand, oConnectionId)
|
'oComboboxDataTable = ClassDatabase.Return_Datatable_ConId(oSqlCommand, oConnectionId)
|
||||||
@@ -562,6 +571,8 @@ Namespace ControlCreator
|
|||||||
If oFormulaExpression <> String.Empty AndAlso oFormulaSql <> String.Empty Then
|
If oFormulaExpression <> String.Empty AndAlso oFormulaSql <> String.Empty Then
|
||||||
_Logger.Warn("[ConfigureViewColumnsCurrency] Column [{0}] has BOTH FORMULA_EXPRESSION and FORMULA_SQL – treating as EXPRESSION only.", oCol.FieldName)
|
_Logger.Warn("[ConfigureViewColumnsCurrency] Column [{0}] has BOTH FORMULA_EXPRESSION and FORMULA_SQL – treating as EXPRESSION only.", oCol.FieldName)
|
||||||
oFormulaSql = String.Empty
|
oFormulaSql = String.Empty
|
||||||
|
ElseIf oFormulaSql <> String.Empty Then
|
||||||
|
_Logger.Debug("[ConfigureViewColumnsCurrency] Column [{0}] is a SQL formula column: {1}", oCol.FieldName, oFormulaSql)
|
||||||
End If
|
End If
|
||||||
|
|
||||||
' Spalte ist eine Formel-Spalte (Expression ODER SQL) → nur DisplayFormat, kein ColumnEdit
|
' Spalte ist eine Formel-Spalte (Expression ODER SQL) → nur DisplayFormat, kein ColumnEdit
|
||||||
@@ -669,10 +680,10 @@ Namespace ControlCreator
|
|||||||
For Each r As DataRow In pColumnTable.Rows
|
For Each r As DataRow In pColumnTable.Rows
|
||||||
Dim oColName = r.Item("SPALTENNAME").ToString()
|
Dim oColName = r.Item("SPALTENNAME").ToString()
|
||||||
Dim oExpr = ObjectEx.NotNull(r.Item("FORMULA_EXPRESSION"), String.Empty).ToString()
|
Dim oExpr = ObjectEx.NotNull(r.Item("FORMULA_EXPRESSION"), String.Empty).ToString()
|
||||||
Dim oSql = ObjectEx.NotNull(r.Item("FORMULA_SQL"), String.Empty).ToString()
|
Dim oSql_FORMULA = ObjectEx.NotNull(r.Item("FORMULA_SQL"), String.Empty).ToString()
|
||||||
|
|
||||||
' *** VALIDIERUNG: Beides gleichzeitig ist nicht erlaubt ***
|
' *** VALIDIERUNG: Beides gleichzeitig ist nicht erlaubt ***
|
||||||
If oExpr <> String.Empty AndAlso oSql <> String.Empty Then
|
If oExpr <> String.Empty AndAlso oSql_FORMULA <> String.Empty Then
|
||||||
_Logger.Warn("⚠️ Column [{0}] has BOTH FORMULA_EXPRESSION and FORMULA_SQL – this is not allowed! FORMULA_SQL will be ignored.", oColName)
|
_Logger.Warn("⚠️ Column [{0}] has BOTH FORMULA_EXPRESSION and FORMULA_SQL – this is not allowed! FORMULA_SQL will be ignored.", oColName)
|
||||||
MsgBox(String.Format(
|
MsgBox(String.Format(
|
||||||
"Die Spalte '{0}' enthält sowohl eine FORMULA_EXPRESSION als auch eine FORMULA_SQL." & vbCrLf &
|
"Die Spalte '{0}' enthält sowohl eine FORMULA_EXPRESSION als auch eine FORMULA_SQL." & vbCrLf &
|
||||||
@@ -680,22 +691,23 @@ Namespace ControlCreator
|
|||||||
"FORMULA_SQL wird ignoriert. Bitte korrigieren Sie die Konfiguration im Tabellen-Designer.",
|
"FORMULA_SQL wird ignoriert. Bitte korrigieren Sie die Konfiguration im Tabellen-Designer.",
|
||||||
oColName), MsgBoxStyle.Exclamation, "Ungültige Spalten-Konfiguration")
|
oColName), MsgBoxStyle.Exclamation, "Ungültige Spalten-Konfiguration")
|
||||||
' FORMULA_EXPRESSION hat Vorrang → SQL ignorieren
|
' FORMULA_EXPRESSION hat Vorrang → SQL ignorieren
|
||||||
oSql = String.Empty
|
oSql_FORMULA = String.Empty
|
||||||
End If
|
End If
|
||||||
|
|
||||||
If oExpr <> String.Empty Then
|
If oExpr <> String.Empty Then
|
||||||
_FormulaColumnNames.Add(oColName)
|
_FormulaColumnNames.Add(oColName)
|
||||||
_Logger.Debug("[ConfigureViewEvents] Column [{0}] registered as FORMULA_EXPRESSION column.", oColName)
|
_Logger.Debug("[ConfigureViewEvents] Column [{0}] registered as FORMULA_EXPRESSION column.", oColName)
|
||||||
ElseIf oSql <> String.Empty Then
|
ElseIf oSql_FORMULA <> String.Empty Then
|
||||||
Dim oConnectionId As Integer = r.ItemEx("CONNECTION_ID", 0)
|
Dim oConnectionId As Integer = r.ItemEx("CONNECTION_ID", 0)
|
||||||
_FormulaSqlColumns(oColName) = New FormulaSqlDefinition() With {
|
_FormulaSqlColumns(oColName) = New FormulaSqlDefinition() With {
|
||||||
.SqlTemplate = oSql,
|
.SqlTemplate = oSql_FORMULA,
|
||||||
.ReferencedColumns = GetReferencedSqlColumnNames(oSql)
|
.ReferencedColumns = GetReferencedSqlColumnNames(oSql_FORMULA),
|
||||||
}
|
.ConnectionId = oConnectionId ' *** Hier speichern ***
|
||||||
|
}
|
||||||
' SQL-Spalten auch in _FormulaColumnNames aufnehmen → Editor-Blockade + ReadOnly
|
' SQL-Spalten auch in _FormulaColumnNames aufnehmen → Editor-Blockade + ReadOnly
|
||||||
_FormulaColumnNames.Add(oColName)
|
_FormulaColumnNames.Add(oColName)
|
||||||
_Logger.Debug("[ConfigureViewEvents] Column [{0}] registered as FORMULA_SQL column. ReferencedColumns=[{1}]",
|
_Logger.Debug("[ConfigureViewEvents] Column [{0}] registered as FORMULA_SQL column. ReferencedColumns=[{1}]",
|
||||||
oColName, String.Join(", ", GetReferencedSqlColumnNames(oSql)))
|
oColName, String.Join(", ", GetReferencedSqlColumnNames(oSql_FORMULA)))
|
||||||
End If
|
End If
|
||||||
Next
|
Next
|
||||||
|
|
||||||
@@ -797,6 +809,8 @@ Namespace ControlCreator
|
|||||||
For Each oRow As DataRow In pColumnTable.Rows
|
For Each oRow As DataRow In pColumnTable.Rows
|
||||||
Dim oColumnName As String = oRow.Item("SPALTENNAME").ToString()
|
Dim oColumnName As String = oRow.Item("SPALTENNAME").ToString()
|
||||||
If oColumnName <> e.Column.FieldName Then Continue For
|
If oColumnName <> e.Column.FieldName Then Continue For
|
||||||
|
Dim oSqlCommand As String = oRow.ItemEx("SQL_COMMAND", "")
|
||||||
|
Dim oConnectionId As Integer = oRow.ItemEx("CONNECTION_ID", 1)
|
||||||
|
|
||||||
Dim oEditorExists = GridTables_TestEditorExistsByControlAndColumn(pControlId, oColumnName)
|
Dim oEditorExists = GridTables_TestEditorExistsByControlAndColumn(pControlId, oColumnName)
|
||||||
|
|
||||||
@@ -958,31 +972,73 @@ Namespace ControlCreator
|
|||||||
AddHandler pControl.LostFocus, AddressOf Control_LostFocus
|
AddHandler pControl.LostFocus, AddressOf Control_LostFocus
|
||||||
|
|
||||||
AddHandler pGridView.ShowingEditor,
|
AddHandler pGridView.ShowingEditor,
|
||||||
Sub(sender As Object, e As CancelEventArgs)
|
Sub(sender As Object, e As CancelEventArgs)
|
||||||
Try
|
Try
|
||||||
Dim oView As GridView = TryCast(sender, GridView)
|
Dim oView As GridView = TryCast(sender, GridView)
|
||||||
If oView Is Nothing Then Return
|
If oView Is Nothing Then Return
|
||||||
|
|
||||||
_Logger.Debug("Showing editor.")
|
_Logger.Debug("Showing editor.")
|
||||||
|
|
||||||
' Formel-Spalten dürfen keinen Editor öffnen (gilt für EXPRESSION UND SQL)
|
' Formel-Spalten dürfen keinen Editor öffnen
|
||||||
If oView.FocusedColumn IsNot Nothing Then
|
If oView.FocusedColumn IsNot Nothing Then
|
||||||
Dim oFieldName As String = oView.FocusedColumn.FieldName
|
Dim oFieldName As String = oView.FocusedColumn.FieldName
|
||||||
If _FormulaColumnNames.Contains(oFieldName) Then
|
If _FormulaColumnNames.Contains(oFieldName) Then
|
||||||
_Logger.Debug("Cancelling editor – column [{0}] is a formula column (Expression or SQL).", oFieldName)
|
_Logger.Debug("Cancelling editor – column [{0}] is a formula column (Expression or SQL).", oFieldName)
|
||||||
e.Cancel = True
|
e.Cancel = True
|
||||||
Return
|
Return
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
' *** NEU: Row-specific Editor für #TBCOL# Platzhalter ***
|
||||||
|
If oView.FocusedColumn IsNot Nothing Then
|
||||||
|
Dim oFocusedColumnName As String = oView.FocusedColumn.FieldName
|
||||||
|
Dim oRowHandle As Integer = oView.FocusedRowHandle
|
||||||
|
|
||||||
|
' Spalten-Metadata aus pColumnTable holen
|
||||||
|
Dim oColumnData As DataRow = pColumnTable.
|
||||||
|
Select($"SPALTENNAME = '{oFocusedColumnName}'").
|
||||||
|
FirstOrDefault()
|
||||||
|
|
||||||
|
If oColumnData IsNot Nothing Then
|
||||||
|
Dim oSqlCommand As String = oColumnData.ItemEx("SQL_COMMAND", "")
|
||||||
|
Dim oConnectionId As Integer = oColumnData.ItemEx("CONNECTION_ID", 1)
|
||||||
|
|
||||||
|
' Prüfen ob SQL Platzhalter enthält
|
||||||
|
If oSqlCommand <> "" AndAlso ContainsTableColumnPlaceholder(oSqlCommand) Then
|
||||||
|
_Logger.Debug("[ShowingEditor] Column [{0}] has SQL with #TBCOL# placeholders – creating row-specific editor", oFocusedColumnName)
|
||||||
|
|
||||||
|
' Platzhalter ersetzen mit aktuellen Zeilenwerten
|
||||||
|
Dim resolvedSql As String = ResolveSqlTemplate(oSqlCommand, oView, oRowHandle)
|
||||||
|
|
||||||
|
' Editor mit aufgelöstem SQL laden
|
||||||
|
Dim oRowSpecificEditor = CreateRowSpecificEditor(
|
||||||
|
oFocusedColumnName,
|
||||||
|
resolvedSql,
|
||||||
|
oConnectionId,
|
||||||
|
oColumnData.ItemEx("ADVANCED_LOOKUP", False))
|
||||||
|
|
||||||
|
If oRowSpecificEditor IsNot Nothing Then
|
||||||
|
' Editor temporär zur Spalte hinzufügen
|
||||||
|
oView.FocusedColumn.ColumnEdit = oRowSpecificEditor
|
||||||
|
_Logger.Debug("[ShowingEditor] Row-specific editor assigned for [{0}]", oFocusedColumnName)
|
||||||
|
Else
|
||||||
|
_Logger.Warn("[ShowingEditor] Failed to create row-specific editor for [{0}] – cancelling edit", oFocusedColumnName)
|
||||||
|
e.Cancel = True
|
||||||
|
Return
|
||||||
|
End If
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
If oView.IsNewItemRow(oView.FocusedRowHandle) AndAlso Not newRowModified Then
|
' BESTEHENDER CODE: NewItemRow-Handling
|
||||||
_Logger.Debug("Adding new row.")
|
If oView.IsNewItemRow(oView.FocusedRowHandle) AndAlso Not newRowModified Then
|
||||||
oView.AddNewRow()
|
_Logger.Debug("Adding new row.")
|
||||||
End If
|
oView.AddNewRow()
|
||||||
Catch ex As Exception
|
End If
|
||||||
_Logger.Error(ex)
|
Catch ex As Exception
|
||||||
End Try
|
_Logger.Error(ex)
|
||||||
End Sub
|
End Try
|
||||||
|
End Sub
|
||||||
|
|
||||||
AddHandler pGridView.FocusedColumnChanged,
|
AddHandler pGridView.FocusedColumnChanged,
|
||||||
Sub(sender As Object, e As FocusedColumnChangedEventArgs)
|
Sub(sender As Object, e As FocusedColumnChangedEventArgs)
|
||||||
@@ -1054,6 +1110,8 @@ Namespace ControlCreator
|
|||||||
_Logger.Debug("[FormulaRefresh] FALLBACK DisplayText for [{0}]: [{1}]",
|
_Logger.Debug("[FormulaRefresh] FALLBACK DisplayText for [{0}]: [{1}]",
|
||||||
oFormulaColumnName, oView.GetRowCellDisplayText(oRowHandle, oGridColumn))
|
oFormulaColumnName, oView.GetRowCellDisplayText(oRowHandle, oGridColumn))
|
||||||
Next
|
Next
|
||||||
|
' Dies fängt den Fall ab, dass eine SQL-Spalte eine Expression-Spalte referenziert
|
||||||
|
TriggerSqlFormulasAfterExpressionUpdate(oView, oRowHandle, oFormulaColumnsToRefresh)
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
_Logger.Error(ex)
|
_Logger.Error(ex)
|
||||||
End Try
|
End Try
|
||||||
@@ -1146,6 +1204,224 @@ Namespace ControlCreator
|
|||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
End Sub
|
End Sub
|
||||||
|
''' <summary>
|
||||||
|
''' Prüft, ob ein SQL-Command Tabellen-Spalten-Platzhalter ({#TBCOL#...}) enthält.
|
||||||
|
''' </summary>
|
||||||
|
Private Function ContainsTableColumnPlaceholder(sqlCommand As String) As Boolean
|
||||||
|
If String.IsNullOrWhiteSpace(sqlCommand) Then Return False
|
||||||
|
Return sqlCommand.IndexOf("{#TBCOL#", StringComparison.OrdinalIgnoreCase) >= 0
|
||||||
|
End Function
|
||||||
|
''' <summary>
|
||||||
|
''' Erstellt einen zeilenspezifischen Editor (Combobox/Lookup) basierend auf aufgelöstem SQL.
|
||||||
|
''' Wird verwendet, wenn SQL_COMMAND Platzhalter wie {#TBCOL#...} enthält.
|
||||||
|
''' </summary>
|
||||||
|
Private Function CreateRowSpecificEditor(
|
||||||
|
columnName As String,
|
||||||
|
resolvedSql As String,
|
||||||
|
connectionId As Integer,
|
||||||
|
isAdvancedLookup As Boolean) As RepositoryItem
|
||||||
|
|
||||||
|
Try
|
||||||
|
_Logger.Debug("[CreateRowSpecificEditor] Executing SQL for column [{0}]: {1}", columnName, resolvedSql)
|
||||||
|
|
||||||
|
' SQL ausführen
|
||||||
|
Dim oDataTable As DataTable = DatabaseFallback.GetDatatable(
|
||||||
|
New GetDatatableOptions(resolvedSql, DatabaseType.ECM) With {
|
||||||
|
.ConnectionId = connectionId
|
||||||
|
})
|
||||||
|
|
||||||
|
If oDataTable Is Nothing OrElse oDataTable.Rows.Count = 0 Then
|
||||||
|
_Logger.Warn("[CreateRowSpecificEditor] No data returned for column [{0}]", columnName)
|
||||||
|
Return Nothing
|
||||||
|
End If
|
||||||
|
|
||||||
|
_Logger.Debug("[CreateRowSpecificEditor] Retrieved {0} rows for column [{1}]", oDataTable.Rows.Count, columnName)
|
||||||
|
|
||||||
|
' Editor erstellen (analog zu GridTables_GetRepositoryItemForColumn)
|
||||||
|
If isAdvancedLookup Then
|
||||||
|
Dim oEditor = New RepositoryItemLookupControl3 With {
|
||||||
|
.DisplayMember = oDataTable.Columns(0).ColumnName,
|
||||||
|
.ValueMember = oDataTable.Columns(0).ColumnName,
|
||||||
|
.DataSource = oDataTable
|
||||||
|
}
|
||||||
|
Return oEditor
|
||||||
|
Else
|
||||||
|
Dim oEditor = New RepositoryItemComboBox()
|
||||||
|
Dim oItems As New List(Of String)
|
||||||
|
|
||||||
|
AddHandler oEditor.Validating,
|
||||||
|
Sub(_sender As ComboBoxEdit, _e As CancelEventArgs)
|
||||||
|
If oItems.Contains(_sender.EditValue) Then
|
||||||
|
_e.Cancel = False
|
||||||
|
Else
|
||||||
|
_e.Cancel = True
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
For Each oRow2 As DataRow In oDataTable.Rows
|
||||||
|
Dim oValue = oRow2.Item(0).ToString()
|
||||||
|
Try
|
||||||
|
If oRow2.ItemArray.Length > 1 Then
|
||||||
|
oValue &= $" | {oRow2.Item(1)}"
|
||||||
|
End If
|
||||||
|
Catch ex As Exception
|
||||||
|
End Try
|
||||||
|
|
||||||
|
oEditor.Items.Add(oValue)
|
||||||
|
oItems.Add(oValue)
|
||||||
|
Next
|
||||||
|
|
||||||
|
Return oEditor
|
||||||
|
End If
|
||||||
|
|
||||||
|
Catch ex As Exception
|
||||||
|
_Logger.Error("[CreateRowSpecificEditor] Failed to create editor for column [{0}]: {1}", columnName, ex.Message)
|
||||||
|
_Logger.Error(ex)
|
||||||
|
Return Nothing
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
''' <summary>
|
||||||
|
''' Triggert SQL-Formeln, die Expression-Spalten referenzieren (z.B. Gesamt referenziert Brutto).
|
||||||
|
''' Wird aufgerufen NACHDEM Expression-Spalten aktualisiert wurden.
|
||||||
|
''' </summary>
|
||||||
|
Private Sub TriggerSqlFormulasAfterExpressionUpdate(
|
||||||
|
pView As GridView,
|
||||||
|
pColumnTable As DataTable,
|
||||||
|
pRowHandle As Integer,
|
||||||
|
pUpdatedExpressionColumns As List(Of String))
|
||||||
|
|
||||||
|
If pUpdatedExpressionColumns.Count = 0 Then Return
|
||||||
|
|
||||||
|
' Finde alle SQL-Formeln, die eine der aktualisierten Expression-Spalten referenzieren
|
||||||
|
Dim oSqlColumnsToRefresh As New List(Of String)
|
||||||
|
For Each kvp In _FormulaSqlColumns
|
||||||
|
For Each updatedExprCol In pUpdatedExpressionColumns
|
||||||
|
If kvp.Value.ReferencedColumns.Any(
|
||||||
|
Function(col) String.Equals(col, updatedExprCol, StringComparison.OrdinalIgnoreCase)) Then
|
||||||
|
|
||||||
|
If Not oSqlColumnsToRefresh.Contains(kvp.Key) Then
|
||||||
|
oSqlColumnsToRefresh.Add(kvp.Key)
|
||||||
|
End If
|
||||||
|
Exit For
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
Next
|
||||||
|
|
||||||
|
If oSqlColumnsToRefresh.Count > 0 Then
|
||||||
|
_Logger.Debug("[FormulaSql] Expression columns [{0}] trigger SQL refresh for: [{1}]",
|
||||||
|
String.Join(", ", pUpdatedExpressionColumns),
|
||||||
|
String.Join(", ", oSqlColumnsToRefresh))
|
||||||
|
|
||||||
|
ExecuteSqlFormulas(pView, pRowHandle, oSqlColumnsToRefresh)
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' Führt SQL-Formeln aus und aktualisiert die Zellwerte.
|
||||||
|
''' Ausgelagert in separate Methode, um Code-Duplikation zu vermeiden.
|
||||||
|
''' </summary>
|
||||||
|
Private Sub ExecuteSqlFormulas(
|
||||||
|
pView As GridView,
|
||||||
|
pRowHandle As Integer,
|
||||||
|
pSqlColumnsToRefresh As List(Of String))
|
||||||
|
|
||||||
|
pView.GridControl.BeginInvoke(New Action(
|
||||||
|
Sub()
|
||||||
|
Try
|
||||||
|
If Not pView.IsValidRowHandle(pRowHandle) Then Return
|
||||||
|
|
||||||
|
For Each oSqlColumnName As String In pSqlColumnsToRefresh
|
||||||
|
Dim oDefinition = _FormulaSqlColumns(oSqlColumnName)
|
||||||
|
|
||||||
|
' Prüfen ob ALLE referenzierten Spalten einen Wert haben
|
||||||
|
Dim allValuesPresent As Boolean = True
|
||||||
|
For Each refCol In oDefinition.ReferencedColumns
|
||||||
|
Dim cellVal = pView.GetRowCellValue(pRowHandle, refCol)
|
||||||
|
If cellVal Is Nothing OrElse IsDBNull(cellVal) Then
|
||||||
|
_Logger.Debug("[FormulaSql] Column [{0}] has NULL value – skipping SQL for [{1}]", refCol, oSqlColumnName)
|
||||||
|
allValuesPresent = False
|
||||||
|
Exit For
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
|
||||||
|
If Not allValuesPresent Then Continue For
|
||||||
|
|
||||||
|
' Pattern ersetzen und SQL ausführen
|
||||||
|
Dim resolvedSql = ResolveSqlTemplate(oDefinition.SqlTemplate, pView, pRowHandle)
|
||||||
|
_Logger.Debug("[FormulaSql] Executing SQL for [{0}]: [{1}]", oSqlColumnName, resolvedSql)
|
||||||
|
|
||||||
|
Try
|
||||||
|
' *** VEREINFACHT: ConnectionId direkt aus Definition ***
|
||||||
|
Dim oConnectionId As Integer = oDefinition.ConnectionId
|
||||||
|
_Logger.Debug("[FormulaSql] Using ConnectionId [{0}] for column [{1}]", oConnectionId, oSqlColumnName)
|
||||||
|
|
||||||
|
Dim oResultTable As DataTable = DatabaseFallback.GetDatatable(
|
||||||
|
New GetDatatableOptions(resolvedSql, DatabaseType.ECM) With {
|
||||||
|
.ConnectionId = oConnectionId
|
||||||
|
})
|
||||||
|
|
||||||
|
If oResultTable IsNot Nothing AndAlso oResultTable.Rows.Count > 0 Then
|
||||||
|
Dim oResult = oResultTable.Rows(0).Item(0)
|
||||||
|
_Logger.Debug("[FormulaSql] Result for [{0}]: [{1}]", oSqlColumnName, oResult)
|
||||||
|
|
||||||
|
_isRefreshingFormula = True
|
||||||
|
Try
|
||||||
|
pView.SetRowCellValue(pRowHandle, oSqlColumnName,
|
||||||
|
If(oResult Is Nothing OrElse IsDBNull(oResult), DBNull.Value, oResult))
|
||||||
|
pView.RefreshRowCell(pRowHandle, pView.Columns.ColumnByFieldName(oSqlColumnName))
|
||||||
|
Finally
|
||||||
|
_isRefreshingFormula = False
|
||||||
|
End Try
|
||||||
|
Else
|
||||||
|
_Logger.Warn("[FormulaSql] No result returned for [{0}]", oSqlColumnName)
|
||||||
|
End If
|
||||||
|
|
||||||
|
Catch sqlEx As Exception
|
||||||
|
_Logger.Warn("⚠️ [FormulaSql] SQL execution failed for [{0}]: {1}", oSqlColumnName, sqlEx.Message)
|
||||||
|
_Logger.Error(sqlEx)
|
||||||
|
End Try
|
||||||
|
Next
|
||||||
|
Catch ex As Exception
|
||||||
|
_Logger.Error(ex)
|
||||||
|
End Try
|
||||||
|
End Sub))
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' Triggert SQL-Formeln, die Expression-Spalten referenzieren (z.B. Gesamt referenziert Brutto).
|
||||||
|
''' Wird aufgerufen NACHDEM Expression-Spalten aktualisiert wurden.
|
||||||
|
''' </summary>
|
||||||
|
Private Sub TriggerSqlFormulasAfterExpressionUpdate(
|
||||||
|
pView As GridView,
|
||||||
|
pRowHandle As Integer,
|
||||||
|
pUpdatedExpressionColumns As List(Of String))
|
||||||
|
|
||||||
|
If pUpdatedExpressionColumns.Count = 0 Then Return
|
||||||
|
|
||||||
|
' Finde alle SQL-Formeln, die eine der aktualisierten Expression-Spalten referenzieren
|
||||||
|
Dim oSqlColumnsToRefresh As New List(Of String)
|
||||||
|
For Each kvp In _FormulaSqlColumns
|
||||||
|
For Each updatedExprCol In pUpdatedExpressionColumns
|
||||||
|
If kvp.Value.ReferencedColumns.Any(
|
||||||
|
Function(col) String.Equals(col, updatedExprCol, StringComparison.OrdinalIgnoreCase)) Then
|
||||||
|
|
||||||
|
If Not oSqlColumnsToRefresh.Contains(kvp.Key) Then
|
||||||
|
oSqlColumnsToRefresh.Add(kvp.Key)
|
||||||
|
End If
|
||||||
|
Exit For
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
Next
|
||||||
|
|
||||||
|
If oSqlColumnsToRefresh.Count > 0 Then
|
||||||
|
_Logger.Debug("[FormulaSql] Expression columns [{0}] trigger SQL refresh for: [{1}]",
|
||||||
|
String.Join(", ", pUpdatedExpressionColumns),
|
||||||
|
String.Join(", ", oSqlColumnsToRefresh))
|
||||||
|
|
||||||
|
' *** pColumnTable nicht mehr nötig ***
|
||||||
|
ExecuteSqlFormulas(pView, pRowHandle, oSqlColumnsToRefresh)
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
Private Sub HandleInheritedColumnValue(pView As GridView, pColumnDefinition As DataTable, pArgs As CellValueChangedEventArgs)
|
Private Sub HandleInheritedColumnValue(pView As GridView, pColumnDefinition As DataTable, pArgs As CellValueChangedEventArgs)
|
||||||
If pView Is Nothing OrElse pArgs Is Nothing OrElse pArgs.Column Is Nothing Then
|
If pView Is Nothing OrElse pArgs Is Nothing OrElse pArgs.Column Is Nothing Then
|
||||||
Return
|
Return
|
||||||
|
|||||||
@@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices
|
|||||||
' übernehmen, indem Sie "*" eingeben:
|
' übernehmen, indem Sie "*" eingeben:
|
||||||
' <Assembly: AssemblyVersion("1.0.*")>
|
' <Assembly: AssemblyVersion("1.0.*")>
|
||||||
|
|
||||||
<Assembly: AssemblyVersion("2.9.1.0")>
|
<Assembly: AssemblyVersion("2.9.3.0")>
|
||||||
<Assembly: AssemblyFileVersion("1.0.0.0")>
|
<Assembly: AssemblyFileVersion("1.0.0.0")>
|
||||||
<Assembly: NeutralResourcesLanguage("")>
|
<Assembly: NeutralResourcesLanguage("")>
|
||||||
|
|||||||
@@ -136,9 +136,18 @@ Public Class frmColumn_Detail
|
|||||||
CURRENT_DESIGN_TYPE = "SQL_SOURCE_TABLE_COLUMN"
|
CURRENT_DESIGN_TYPE = "SQL_SOURCE_TABLE_COLUMN"
|
||||||
CURRENT_INDEX_ID = GUIDTextBox.Text
|
CURRENT_INDEX_ID = GUIDTextBox.Text
|
||||||
Dim oForm2 As New frmSQLEditor(LOGCONFIG, DatabaseECM) With {
|
Dim oForm2 As New frmSQLEditor(LOGCONFIG, DatabaseECM) With {
|
||||||
.SQLCommand = SQL_COMMANDTextBox.Text,
|
.SQLCommand = SQL_COMMANDTextBox.Text,
|
||||||
.SQLConnection = 0
|
.SQLConnection = 1,
|
||||||
}
|
.PlaceholdersManualPrefix = "CTRL",
|
||||||
|
.PlaceholdersManualTitle = "Controls",
|
||||||
|
.PlaceholdersManual = CURRENT_CONTROL_NAME_LIST.ToDictionary(Function(name) name, Function(name) name)
|
||||||
|
}
|
||||||
|
If IDB_ACTIVE = False Then
|
||||||
|
oForm2.ATTRIBUTE_STORE = "WM"
|
||||||
|
oForm2.PlaceholdersWindream = MVSource_AllIndicies
|
||||||
|
Else
|
||||||
|
oForm2.ATTRIBUTE_STORE = "IDB"
|
||||||
|
End If
|
||||||
oForm2.ShowDialog()
|
oForm2.ShowDialog()
|
||||||
|
|
||||||
If oForm2.DialogResult = DialogResult.OK Then
|
If oForm2.DialogResult = DialogResult.OK Then
|
||||||
|
|||||||
@@ -1021,12 +1021,19 @@ Public Class frmFormDesigner
|
|||||||
Dim oSQL = $"SELECT SQL_BTN_FINISH FROM TBPM_PROFILE WHERE GUID = {ProfileId}"
|
Dim oSQL = $"SELECT SQL_BTN_FINISH FROM TBPM_PROFILE WHERE GUID = {ProfileId}"
|
||||||
Dim oldSQL = DatabaseFallback.GetScalarValueECM(oSQL)
|
Dim oldSQL = DatabaseFallback.GetScalarValueECM(oSQL)
|
||||||
Dim oForm As New frmSQLEditor(LOGCONFIG, DatabaseECM) With {
|
Dim oForm As New frmSQLEditor(LOGCONFIG, DatabaseECM) With {
|
||||||
.SQLCommand = oldSQL,
|
.SQLCommand = oldSQL,
|
||||||
.SQLConnection = 1,
|
.SQLConnection = 1,
|
||||||
.PlaceholdersManualPrefix = "CTRL",
|
.PlaceholdersManualPrefix = "CTRL",
|
||||||
.PlaceholdersManualTitle = "Controls",
|
.PlaceholdersManualTitle = "Controls",
|
||||||
.PlaceholdersManual = CURRENT_CONTROL_NAME_LIST.ToDictionary(Function(name) name, Function(name) name)
|
.PlaceholdersManual = CURRENT_CONTROL_NAME_LIST.ToDictionary(Function(name) name, Function(name) name)
|
||||||
}
|
}
|
||||||
|
If IDB_ACTIVE = False Then
|
||||||
|
oForm.ATTRIBUTE_STORE = "WM"
|
||||||
|
oForm.PlaceholdersWindream = MVSource_AllIndicies
|
||||||
|
Else
|
||||||
|
oForm.ATTRIBUTE_STORE = "IDB"
|
||||||
|
End If
|
||||||
|
|
||||||
oForm.ShowDialog()
|
oForm.ShowDialog()
|
||||||
|
|
||||||
If oForm.DialogResult = DialogResult.OK Then
|
If oForm.DialogResult = DialogResult.OK Then
|
||||||
|
|||||||
@@ -616,7 +616,7 @@
|
|||||||
<value>DocumentViewer1</value>
|
<value>DocumentViewer1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>DocumentViewer1.Type" xml:space="preserve">
|
<data name=">>DocumentViewer1.Type" xml:space="preserve">
|
||||||
<value>DigitalData.Controls.DocumentViewer.DocumentViewer, DigitalData.Controls.DocumentViewer, Version=2.7.0.0, Culture=neutral, PublicKeyToken=null</value>
|
<value>DigitalData.Controls.DocumentViewer.DocumentViewer, DigitalData.Controls.DocumentViewer, Version=2.7.2.0, Culture=neutral, PublicKeyToken=null</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>DocumentViewer1.Parent" xml:space="preserve">
|
<data name=">>DocumentViewer1.Parent" xml:space="preserve">
|
||||||
<value>SplitContainer1.Panel2</value>
|
<value>SplitContainer1.Panel2</value>
|
||||||
|
|||||||
@@ -865,7 +865,7 @@ Public Class frmValidator
|
|||||||
Try
|
Try
|
||||||
If COPY_WMFILE_2TEMP = True Then
|
If COPY_WMFILE_2TEMP = True Then
|
||||||
MyValidationLogger.Debug("🗑️ Bereinige Temp-Ordner beim Schließen...")
|
MyValidationLogger.Debug("🗑️ Bereinige Temp-Ordner beim Schließen...")
|
||||||
CleanupTempFolder()
|
_documentPathHandler.CleanupTempFolder()
|
||||||
End If
|
End If
|
||||||
Catch cleanupEx As Exception
|
Catch cleanupEx As Exception
|
||||||
MyValidationLogger.Warn($"⚠️ Fehler beim Bereinigen des Temp-Ordners: {cleanupEx.Message}")
|
MyValidationLogger.Warn($"⚠️ Fehler beim Bereinigen des Temp-Ordners: {cleanupEx.Message}")
|
||||||
@@ -901,52 +901,7 @@ Public Class frmValidator
|
|||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Private Sub CleanupTempFolder()
|
|
||||||
Try
|
|
||||||
If String.IsNullOrEmpty(TEMP_DOCUMENT_FOLDER) Then
|
|
||||||
MyValidationLogger.Debug("TEMP_DOCUMENT_FOLDER ist nicht gesetzt → Kein Cleanup erforderlich")
|
|
||||||
Return
|
|
||||||
End If
|
|
||||||
|
|
||||||
If Not System.IO.Directory.Exists(TEMP_DOCUMENT_FOLDER) Then
|
|
||||||
MyValidationLogger.Debug($"Temp-Ordner [{TEMP_DOCUMENT_FOLDER}] existiert nicht → Kein Cleanup erforderlich")
|
|
||||||
Return
|
|
||||||
End If
|
|
||||||
|
|
||||||
' Alle Dateien im Ordner ermitteln
|
|
||||||
Dim files As String() = System.IO.Directory.GetFiles(TEMP_DOCUMENT_FOLDER)
|
|
||||||
|
|
||||||
If files.Length = 0 Then
|
|
||||||
MyValidationLogger.Debug($"Temp-Ordner [{TEMP_DOCUMENT_FOLDER}] ist bereits leer")
|
|
||||||
Return
|
|
||||||
End If
|
|
||||||
|
|
||||||
' Alle Dateien löschen
|
|
||||||
Dim deletedCount As Integer = 0
|
|
||||||
Dim errorCount As Integer = 0
|
|
||||||
|
|
||||||
For Each filePath As String In files
|
|
||||||
Try
|
|
||||||
System.IO.File.Delete(filePath)
|
|
||||||
deletedCount += 1
|
|
||||||
MyValidationLogger.Debug($"Datei gelöscht: [{System.IO.Path.GetFileName(filePath)}]")
|
|
||||||
Catch fileEx As Exception
|
|
||||||
errorCount += 1
|
|
||||||
MyValidationLogger.Warn($"⚠️ Datei konnte nicht gelöscht werden: [{System.IO.Path.GetFileName(filePath)}] - {fileEx.Message}")
|
|
||||||
End Try
|
|
||||||
Next
|
|
||||||
|
|
||||||
If errorCount = 0 Then
|
|
||||||
MyValidationLogger.Debug($"✓ Temp-Ordner bereinigt: {deletedCount} Datei(en) gelöscht")
|
|
||||||
Else
|
|
||||||
MyValidationLogger.Warn($"⚠️ Temp-Ordner teilweise bereinigt: {deletedCount} gelöscht, {errorCount} Fehler")
|
|
||||||
End If
|
|
||||||
|
|
||||||
Catch ex As Exception
|
|
||||||
MyValidationLogger.Error($"❌ Fehler beim Bereinigen des Temp-Ordners: {ex.Message}")
|
|
||||||
MyValidationLogger.Error(ex)
|
|
||||||
End Try
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Public Function Test_Additional_Data_Searches_Exist() As Boolean
|
Public Function Test_Additional_Data_Searches_Exist() As Boolean
|
||||||
If DT_FILTERED_PROFILE_SEARCHES_DATA.Rows.Count > 0 Then
|
If DT_FILTERED_PROFILE_SEARCHES_DATA.Rows.Count > 0 Then
|
||||||
@@ -1018,6 +973,8 @@ Public Class frmValidator
|
|||||||
MyValidationLogger.Debug($"Current_Document: Id={Current_Document?.Id}, Path={Current_Document?.FullPath}")
|
MyValidationLogger.Debug($"Current_Document: Id={Current_Document?.Id}, Path={Current_Document?.FullPath}")
|
||||||
MyValidationLogger.Debug("========================================")
|
MyValidationLogger.Debug("========================================")
|
||||||
|
|
||||||
|
DT_AdditionalSearches_Resultset_Docs = Nothing
|
||||||
|
|
||||||
Dim allSQLSearches As DataTable = DT_FILTERED_PROFILE_SEARCHES_DATA
|
Dim allSQLSearches As DataTable = DT_FILTERED_PROFILE_SEARCHES_DATA
|
||||||
Dim allDocSearches As DataTable = DT_FILTERED_PROFILE_SEARCHES_DOC
|
Dim allDocSearches As DataTable = DT_FILTERED_PROFILE_SEARCHES_DOC
|
||||||
|
|
||||||
@@ -1048,6 +1005,7 @@ Public Class frmValidator
|
|||||||
MyValidationLogger.Debug("--- Ergebnisse werden geprüft (DATA/DOC) ---")
|
MyValidationLogger.Debug("--- Ergebnisse werden geprüft (DATA/DOC) ---")
|
||||||
Dim validSQLSearches As DataTable = allSQLSearches.Clone()
|
Dim validSQLSearches As DataTable = allSQLSearches.Clone()
|
||||||
Dim validDocSearches As DataTable = allDocSearches.Clone()
|
Dim validDocSearches As DataTable = allDocSearches.Clone()
|
||||||
|
Dim aggregatedDocResults As DataTable = Nothing
|
||||||
|
|
||||||
If hasDATASearches Then
|
If hasDATASearches Then
|
||||||
For i As Integer = 0 To allSQLSearches.Rows.Count - 1
|
For i As Integer = 0 To allSQLSearches.Rows.Count - 1
|
||||||
@@ -1091,6 +1049,12 @@ Public Class frmValidator
|
|||||||
If IsValidDocSearchResult(testDT) Then
|
If IsValidDocSearchResult(testDT) Then
|
||||||
validDocSearches.ImportRow(searchRow)
|
validDocSearches.ImportRow(searchRow)
|
||||||
MyValidationLogger.Info($"✓ Doc-Search '{tabTitle}': {testDT.Rows.Count} Dokumente gefunden")
|
MyValidationLogger.Info($"✓ Doc-Search '{tabTitle}': {testDT.Rows.Count} Dokumente gefunden")
|
||||||
|
If aggregatedDocResults Is Nothing Then
|
||||||
|
aggregatedDocResults = testDT.Clone()
|
||||||
|
End If
|
||||||
|
For Each resultRow As DataRow In testDT.Rows
|
||||||
|
aggregatedDocResults.ImportRow(resultRow)
|
||||||
|
Next
|
||||||
Else
|
Else
|
||||||
MyValidationLogger.Warn($"⚠️ Doc-Search '{tabTitle}' liefert kein Dokument-Schema (DocID/FULL_FILENAME) und wird übersprungen.")
|
MyValidationLogger.Warn($"⚠️ Doc-Search '{tabTitle}' liefert kein Dokument-Schema (DocID/FULL_FILENAME) und wird übersprungen.")
|
||||||
End If
|
End If
|
||||||
@@ -1102,6 +1066,10 @@ Public Class frmValidator
|
|||||||
End Try
|
End Try
|
||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
|
DT_AdditionalSearches_Resultset_Docs = aggregatedDocResults
|
||||||
|
If DT_AdditionalSearches_Resultset_Docs IsNot Nothing Then
|
||||||
|
MyValidationLogger.Debug($"Zusätzliche Doc-Results gecached: {DT_AdditionalSearches_Resultset_Docs.Rows.Count} Rows")
|
||||||
|
End If
|
||||||
|
|
||||||
AdditionalDataResultsExist = validSQLSearches.Rows.Count > 0
|
AdditionalDataResultsExist = validSQLSearches.Rows.Count > 0
|
||||||
AdditionalDocResultsExist = validDocSearches.Rows.Count > 0
|
AdditionalDocResultsExist = validDocSearches.Rows.Count > 0
|
||||||
@@ -5810,26 +5778,30 @@ Public Class frmValidator
|
|||||||
|
|
||||||
Dim oAdvancedLookup = oRow.Item("ADVANCED_LOOKUP")
|
Dim oAdvancedLookup = oRow.Item("ADVANCED_LOOKUP")
|
||||||
oSqlCommand = clsPatterns.ReplaceAllValues(oSqlCommand, PanelValidatorControl, True)
|
oSqlCommand = clsPatterns.ReplaceAllValues(oSqlCommand, PanelValidatorControl, True)
|
||||||
|
' Prüfen ob Platzhalter enthalten sind
|
||||||
|
If Not ContainsTableColumnPlaceholder(oSqlCommand?.ToString()) Then
|
||||||
|
Try
|
||||||
|
Dim oDTRESULT_FOR_COLUMN As DataTable = GetCachedDatatable(oSqlCommand, oCONNID)
|
||||||
|
|
||||||
Try
|
If Not IsNothing(oDTRESULT_FOR_COLUMN) Then
|
||||||
Dim oDTRESULT_FOR_COLUMN As DataTable = GetCachedDatatable(oSqlCommand, oCONNID)
|
MyValidationLogger.Debug($"Trying to create a DropDown(FIV) for CONTROL-ID [{oDEPENDING_CTRL_ID}] - RowCount: [{oDTRESULT_FOR_COLUMN.Rows.Count}] ")
|
||||||
|
|
||||||
If Not IsNothing(oDTRESULT_FOR_COLUMN) Then
|
' Dictionary-Lookup statt Loop
|
||||||
MyValidationLogger.Debug($"Trying to create a DropDown(FIV) for CONTROL-ID [{oDEPENDING_CTRL_ID}] - RowCount: [{oDTRESULT_FOR_COLUMN.Rows.Count}] ")
|
Dim oControl As Control = Nothing
|
||||||
|
If _CachedControlsByGuid.TryGetValue(oDEPENDING_CTRL_ID, oControl) Then
|
||||||
' Dictionary-Lookup statt Loop
|
ControlCreator.GridTables_CacheDatatableForColumn(oDEPENDING_CTRL_ID, oDEPENDING_COLUMN, oSqlCommand, oCONNID, oAdvancedLookup)
|
||||||
Dim oControl As Control = Nothing
|
Else
|
||||||
If _CachedControlsByGuid.TryGetValue(oDEPENDING_CTRL_ID, oControl) Then
|
MyValidationLogger.Warn($"⚠️ Control mit ID {oDEPENDING_CTRL_ID} nicht gefunden!")
|
||||||
ControlCreator.GridTables_CacheDatatableForColumn(oDEPENDING_CTRL_ID, oDEPENDING_COLUMN, oSqlCommand, oCONNID, oAdvancedLookup)
|
End If
|
||||||
Else
|
Else
|
||||||
MyValidationLogger.Warn($"⚠️ Control mit ID {oDEPENDING_CTRL_ID} nicht gefunden!")
|
MyValidationLogger.Warn($"⚠️ FillIndexValues - oDTRESULT_FOR_COLUMN is nothing!")
|
||||||
End If
|
End If
|
||||||
Else
|
Catch ex As Exception
|
||||||
MyValidationLogger.Warn($"⚠️ FillIndexValues - oDTRESULT_FOR_COLUMN is nothing!")
|
MyValidationLogger.Warn($"⚠️ FillIndexValues - Unexpected error in creating Grid-Dropdown-Column [{oDEPENDING_COLUMN}] for CONTROL-ID [{oDEPENDING_CTRL_ID}]: " & ex.Message)
|
||||||
End If
|
End Try
|
||||||
Catch ex As Exception
|
Else
|
||||||
MyValidationLogger.Warn($"⚠️ FillIndexValues - Unexpected error in creating Grid-Dropdown-Column [{oDEPENDING_COLUMN}] for CONTROL-ID [{oDEPENDING_CTRL_ID}]: " & ex.Message)
|
MyValidationLogger.Debug($"⚠️ FillIndexValues - SQL-Command for Grid-Dropdown-Column contains #CTRL# placeholder, skipping dropdown creation for CONTROL-ID [{oDEPENDING_CTRL_ID}] - Column [{oDEPENDING_COLUMN}]")
|
||||||
End Try
|
End If
|
||||||
Next
|
Next
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
MyValidationLogger.Warn($"⚠️ FillIndexValues - Unexpected error in creating dropdown for Grid: " & ex.Message)
|
MyValidationLogger.Warn($"⚠️ FillIndexValues - Unexpected error in creating dropdown for Grid: " & ex.Message)
|
||||||
@@ -5967,7 +5939,19 @@ Public Class frmValidator
|
|||||||
End If
|
End If
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
|
''' <summary>
|
||||||
|
''' Prüft, ob ein SQL-Command Grid-Spalten-Platzhalter enthält
|
||||||
|
''' </summary>
|
||||||
|
''' <param name="sqlCommand">Der zu prüfende SQL-Command</param>
|
||||||
|
''' <returns>True wenn Platzhalter enthalten sind, sonst False</returns>
|
||||||
|
Private Function ContainsTableColumnPlaceholder(sqlCommand As String) As Boolean
|
||||||
|
If String.IsNullOrWhiteSpace(sqlCommand) Then
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
|
||||||
|
' Prüft auf #TBCOL# Platzhalter (case-insensitive)
|
||||||
|
Return sqlCommand.IndexOf("#TBCOL#", StringComparison.OrdinalIgnoreCase) >= 0
|
||||||
|
End Function
|
||||||
Private Sub ApplyCurrencyMask(pTextEdit As TextEdit)
|
Private Sub ApplyCurrencyMask(pTextEdit As TextEdit)
|
||||||
If pTextEdit Is Nothing Then Return
|
If pTextEdit Is Nothing Then Return
|
||||||
Try
|
Try
|
||||||
@@ -8578,9 +8562,9 @@ Public Class frmValidator
|
|||||||
|
|
||||||
oFilenameOnly = Path.GetFileName(DocPathWindows)
|
oFilenameOnly = Path.GetFileName(DocPathWindows)
|
||||||
oExtension = Path.GetExtension(DocPathWindows)
|
oExtension = Path.GetExtension(DocPathWindows)
|
||||||
oSQLGetFilename = $"DECLARE @Filename Varchar(512) " & vbcrlf &
|
oSQLGetFilename = $"DECLARE @Filename Varchar(512) " & vbCrLf &
|
||||||
$"EXEC dbo.PRPM_GETFILENAME_EXPORT {CURRENT_DOC_ID}, 1, @Outputfilename = @Filename OUTPUT;" & vbcrlf &
|
$"EXEC dbo.PRPM_GETFILENAME_EXPORT {CURRENT_DOC_ID}, 1, @Outputfilename = @Filename OUTPUT;" & vbCrLf &
|
||||||
"SELECT @Filename"
|
"SELECT @Filename"
|
||||||
|
|
||||||
Dim oExportFilename = DatabaseFallback.GetScalarValueECM(oSQLGetFilename)
|
Dim oExportFilename = DatabaseFallback.GetScalarValueECM(oSQLGetFilename)
|
||||||
If Not IsNothing(oExportFilename) Then
|
If Not IsNothing(oExportFilename) Then
|
||||||
@@ -8621,23 +8605,49 @@ Public Class frmValidator
|
|||||||
MyValidationLogger.Info($"File {oFile2Export} exported successfully!")
|
MyValidationLogger.Info($"File {oFile2Export} exported successfully!")
|
||||||
oCount += 1
|
oCount += 1
|
||||||
Else
|
Else
|
||||||
MsgBox("Error encountered while extracting Export-Filename!" & vbcrlf & "Please inform Admin-Team!", MsgBoxStyle.Critical, ADDITIONAL_TITLE)
|
MsgBox("Error encountered while extracting Export-Filename!" & vbCrLf & "Please inform Admin-Team!", MsgBoxStyle.Critical, ADDITIONAL_TITLE)
|
||||||
End If
|
End If
|
||||||
|
Else
|
||||||
|
MyValidationLogger.Info($"#### ATTENTION: oExportFilename is Nothing - SQL: {oSQLGetFilename}")
|
||||||
|
MsgBox("Error encountered while extracting Export-Filename - Result is Nothing!" & vbCrLf & "Please inform Admin-Team!", MsgBoxStyle.Critical, ADDITIONAL_TITLE)
|
||||||
End If
|
End If
|
||||||
|
|
||||||
Dim oFileCount As Integer = 1
|
Dim oFileCount As Integer = 1
|
||||||
If Not IsNothing(DT_AdditionalSearches_Resultset_Docs) Then
|
If Not IsNothing(DT_AdditionalSearches_Resultset_Docs) Then
|
||||||
|
|
||||||
For Each oFileRecord As DataRow In DT_AdditionalSearches_Resultset_Docs.Rows
|
For Each oFileRecord As DataRow In DT_AdditionalSearches_Resultset_Docs.Rows
|
||||||
Dim oFromFilename = oFileRecord.Item("FULL_FILENAME")
|
Dim oFromFilename = oFileRecord.Item("FULL_FILENAME")?.ToString()
|
||||||
Dim oDocID = oFileRecord.Item("DocID")
|
Dim oDocID = oFileRecord.Item("DocID")
|
||||||
If File.Exists(oFromFilename) Then
|
|
||||||
|
' COPY_WMFILE_2TEMP: Pfad analog zu GetDocPathWindows() auflösen
|
||||||
|
Dim oResolvedFilename As String = oFromFilename
|
||||||
|
If COPY_WMFILE_2TEMP = True AndAlso Not String.IsNullOrWhiteSpace(oFromFilename) Then
|
||||||
|
Dim options As New DocumentPathHandler.DocumentPathOptions With {
|
||||||
|
.EnableMapping = True,
|
||||||
|
.WMSuffix = WMSUFFIX,
|
||||||
|
.SpecificDrive = If(Len(MAP_SHARE_DRIVE) = 1, MAP_SHARE_DRIVE, ""),
|
||||||
|
.DriveBlacklist = MAP_BLACKLIST,
|
||||||
|
.CopyToTemp = True,
|
||||||
|
.TempFolder = TEMP_DOCUMENT_FOLDER,
|
||||||
|
.UnmapAfterCopy = True
|
||||||
|
}
|
||||||
|
Dim result = _documentPathHandler.ProcessDocumentPath(oFromFilename, options)
|
||||||
|
If result.Success AndAlso Not String.IsNullOrWhiteSpace(result.FinalPath) AndAlso File.Exists(result.FinalPath) Then
|
||||||
|
MyValidationLogger.Info($"✓ Zusatzdokument via Temp aufgelöst: [{result.FinalPath}]")
|
||||||
|
oResolvedFilename = result.FinalPath
|
||||||
|
Else
|
||||||
|
MyValidationLogger.Warn($"⚠️ Temp-Auflösung fehlgeschlagen für [{oFromFilename}]: {result.ErrorMessage} - Fallback auf Originalpfad")
|
||||||
|
oResolvedFilename = oFromFilename
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
If File.Exists(oResolvedFilename) Then
|
||||||
|
MyValidationLogger.Debug($"Found additional document for export: [{oResolvedFilename}] (WM: [{oFromFilename}]) with DocID [{oDocID}]")
|
||||||
oFileCount += 1
|
oFileCount += 1
|
||||||
oSQLGetFilename = $"DECLARE @Filename Varchar(512) " & vbcrlf &
|
oSQLGetFilename = $"DECLARE @Filename Varchar(512) " & vbCrLf &
|
||||||
$"EXEC dbo.PRPM_GETFILENAME_EXPORT {oDocID}, {oFileCount}, @Outputfilename = @Filename OUTPUT;" & vbcrlf &
|
$"EXEC dbo.PRPM_GETFILENAME_EXPORT {oDocID}, {oFileCount}, @Outputfilename = @Filename OUTPUT;" & vbCrLf &
|
||||||
"SELECT @Filename"
|
"SELECT @Filename"
|
||||||
oExportFilename = DatabaseFallback.GetScalarValueECM(oSQLGetFilename)
|
oExportFilename = DatabaseFallback.GetScalarValueECM(oSQLGetFilename)
|
||||||
oExtension = Path.GetExtension(oFromFilename)
|
oExtension = Path.GetExtension(oResolvedFilename)
|
||||||
If Not IsNothing(oExportFilename) Then
|
If Not IsNothing(oExportFilename) Then
|
||||||
If IsDBNull(oExportFilename) Then
|
If IsDBNull(oExportFilename) Then
|
||||||
MyValidationLogger.Info($"#### ATTENTION: oExportFilename is DBNULL - SQL: {oSQLGetFilename}")
|
MyValidationLogger.Info($"#### ATTENTION: oExportFilename is DBNULL - SQL: {oSQLGetFilename}")
|
||||||
@@ -8645,18 +8655,25 @@ Public Class frmValidator
|
|||||||
End If
|
End If
|
||||||
If oExportFilename <> String.Empty Then
|
If oExportFilename <> String.Empty Then
|
||||||
oTargetPath = FolderBrowserDialog1.SelectedPath & "\" & oExportFilename & oExtension
|
oTargetPath = FolderBrowserDialog1.SelectedPath & "\" & oExportFilename & oExtension
|
||||||
File.Copy(oFromFilename, oTargetPath)
|
File.Copy(oResolvedFilename, oTargetPath)
|
||||||
|
MyValidationLogger.Info($"Additional file [{oResolvedFilename}] exported successfully to [{oTargetPath}]")
|
||||||
oCount += 1
|
oCount += 1
|
||||||
Else
|
Else
|
||||||
Dim omsg = $"Error encountered while extracting ATTACHMENT-Export-Filename DocID [{oDocID}]!"
|
Dim omsg = $"Error encountered while extracting ATTACHMENT-Export-Filename DocID [{oDocID}]!"
|
||||||
MyValidationLogger.Info($"#### ATTENTION: {omsg} SQL: {oSQLGetFilename}")
|
MyValidationLogger.Info($"#### ATTENTION: {omsg} SQL: {oSQLGetFilename}")
|
||||||
MsgBox(omsg & vbcrlf & "Please inform Admin-Team!", MsgBoxStyle.Critical, ADDITIONAL_TITLE)
|
MsgBox(omsg & vbCrLf & "Please inform Admin-Team!", MsgBoxStyle.Critical, ADDITIONAL_TITLE)
|
||||||
End If
|
End If
|
||||||
|
Else
|
||||||
|
Dim omsg = $"Error encountered while extracting ATTACHMENT-Export-Filename DocID [{oDocID}] - Result is Nothing!"
|
||||||
|
MyValidationLogger.Info($"#### ATTENTION: {omsg} SQL: {oSQLGetFilename}")
|
||||||
|
MsgBox(omsg & vbCrLf & "Please inform Admin-Team!", MsgBoxStyle.Critical, ADDITIONAL_TITLE)
|
||||||
End If
|
End If
|
||||||
'oFilenameOnly = Path.GetFileName(oFromFilename)
|
Else
|
||||||
|
MyValidationLogger.Warn($"⚠️ Additional file for export not found: [{oResolvedFilename}] (WM: [{oFromFilename}]) with DocID [{oDocID}]")
|
||||||
End If
|
End If
|
||||||
Next
|
Next
|
||||||
|
Else
|
||||||
|
MyValidationLogger.Info("No additional documents to export (DT_AdditionalSearches_Resultset_Docs is Nothing)")
|
||||||
End If
|
End If
|
||||||
|
|
||||||
CONFIG.Config.LastExportPath = FolderBrowserDialog1.SelectedPath
|
CONFIG.Config.LastExportPath = FolderBrowserDialog1.SelectedPath
|
||||||
@@ -8665,7 +8682,7 @@ Public Class frmValidator
|
|||||||
|
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
MyValidationLogger.Error(ex)
|
MyValidationLogger.Error(ex)
|
||||||
MsgBox("Could not move file to target: " & vbcrlf & ex.Message, MsgBoxStyle.Critical, ADDITIONAL_TITLE)
|
MsgBox("Could not move file to target: " & vbCrLf & ex.Message, MsgBoxStyle.Critical, ADDITIONAL_TITLE)
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
|
|||||||
@@ -1,150 +1 @@
|
|||||||
13:45:45.0872|frmValidator|INFO >> Load_Additional_Searches -> ✓ SQL-Search 'Inhalte ZUGFeRD-XML': 67 Ergebnisse gefunden
|
|
||||||
13:45:45.0872|taskFLOW|DEBUG >> ReplaceAllValues -> input BEFORE replacing: [Select T.DocID,T.FULL_FILENAME,T.Doctype from TBPM_CUST_ATTACHMENTS T WITH (NOLOCK) INNER JOIN idb.dbo.VWIDB_DOC_DATA T1 ON T.EmailMessageID = T1.EmailMessageID WHERE T1.IDB_OBJ_ID = {#IDBA#ObjectID}]
|
|
||||||
13:45:45.0872|taskFLOW|DEBUG >> ReplaceIDBAttributes -> Starting ReplaceIDBAttributes with input: [Select T.DocID,T.FULL_FILENAME,T.Doctype from TBPM_CUST_ATTACHMENTS T WITH (NOLOCK) INNER JOIN idb.dbo.VWIDB_DOC_DATA T1 ON T.EmailMessageID = T1.EmailMessageID WHERE T1.IDB_OBJ_ID = {#IDBA#ObjectID}] for document ID: 4511694
|
|
||||||
13:45:45.0872|taskFLOW|DEBUG >> ReplaceIDBAttributes -> IS_SQL = True - oReplaceValue = [{#IDBA#ObjectID}]
|
|
||||||
13:45:45.0872|taskFLOW|DEBUG >> ReplaceIDBAttributes -> oIDBValue = 4511694
|
|
||||||
13:45:45.0872|taskFLOW|DEBUG >> ReplaceIDBAttributes -> sql after ReplaceIDBAttributes: Select T.DocID,T.FULL_FILENAME,T.Doctype from TBPM_CUST_ATTACHMENTS T WITH (NOLOCK) INNER JOIN idb.dbo.VWIDB_DOC_DATA T1 ON T.EmailMessageID = T1.EmailMessageID WHERE T1.IDB_OBJ_ID = {#IDBA#ObjectID}
|
|
||||||
13:45:45.0872|taskFLOW|DEBUG >> ReplaceControlValues -> Starting ReplaceControlValues with input: [Select T.DocID,T.FULL_FILENAME,T.Doctype from TBPM_CUST_ATTACHMENTS T WITH (NOLOCK) INNER JOIN idb.dbo.VWIDB_DOC_DATA T1 ON T.EmailMessageID = T1.EmailMessageID WHERE T1.IDB_OBJ_ID = 4511694] for document ID: 4511694
|
|
||||||
13:45:45.0872|taskFLOW|DEBUG >> ReplaceAllValues -> input AFTER replacing: [Select T.DocID,T.FULL_FILENAME,T.Doctype from TBPM_CUST_ATTACHMENTS T WITH (NOLOCK) INNER JOIN idb.dbo.VWIDB_DOC_DATA T1 ON T.EmailMessageID = T1.EmailMessageID WHERE T1.IDB_OBJ_ID = 4511694]
|
|
||||||
13:45:45.0872|DatabaseWithFallback|DEBUG >> GetDatatable -> ForceFallback is True, falling back to direct database access.
|
|
||||||
13:45:45.0872|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase -> Fetching data from database [ECM] with Connection Id [ECM]
|
|
||||||
13:45:45.0872|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase -> Retrieving Connection String from Connection Id [1]
|
|
||||||
13:45:45.0872|MSSQLServer|DEBUG >> Get_ConnectionStringforID -> Getting ConnectionString for ConnectionId [1]
|
|
||||||
13:45:45.0872|MSSQLServer|DEBUG >> GetConnection -> The Following Connection is open: Server=W2K19SRV398;Database=DD_ECM;User Id=EDMAdmin;Password=XXXXX;Application Name=DD_EDMIAppService;Workstation ID=W2K19SRV391;
|
|
||||||
13:45:45.0872|MSSQLServer|DEBUG >> MaybeGetTransaction -> Transaction Mode: [WithTransaction]
|
|
||||||
13:45:45.0872|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject -> GetDatatableWithConnectionObject: Running Query [SELECT * FROM TBDD_CONNECTION WHERE GUID = 1] and Parameters []
|
|
||||||
13:45:45.0872|MSSQLServer|DEBUG >> GetConnection -> The Following Connection is open: Data Source=w2k19srv398;Initial Catalog=DD_ECM;User ID=EDMAdmin;Password=XXXXX
|
|
||||||
13:45:45.0872|MSSQLServer|DEBUG >> MaybeGetTransaction -> Transaction Mode: [WithTransaction]
|
|
||||||
13:45:45.0872|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject -> GetDatatableWithConnectionObject: Running Query [Select T.DocID,T.FULL_FILENAME,T.Doctype from TBPM_CUST_ATTACHMENTS T WITH (NOLOCK) INNER JOIN idb.dbo.VWIDB_DOC_DATA T1 ON T.EmailMessageID = T1.EmailMessageID WHERE T1.IDB_OBJ_ID = 4511694] and Parameters []
|
|
||||||
13:45:45.5262|frmValidator|DEBUG >> Load_Additional_Searches -> ℹ️ Doc-Search 'Attachments': Keine Ergebnisse gefunden
|
|
||||||
13:45:45.5262|frmValidator|DEBUG >> Load_Additional_Searches -> Ergebnisprüfung abgeschlossen: AdditionalDataResultsExist=True, AdditionalDocResultsExist=False
|
|
||||||
13:45:45.5262|frmValidator|DEBUG >> Load_Additional_Searches -> rbnPgGroupAttmt.Visible gesetzt auf: True | Stack:
|
|
||||||
at taskFLOW.frmValidator.FillIndexValues(Boolean first, String SingleAttribute)
|
|
||||||
13:45:45.5262|frmValidator|DEBUG >> Load_Additional_Searches -> --- NORMAL-MODUS aktiviert (nur vorbereiten, NICHT Show) ---
|
|
||||||
13:45:45.5262|taskFLOW|DEBUG >> TabPreload -> === TabPreload START ===
|
|
||||||
13:45:45.5262|taskFLOW|DEBUG >> TabPreload -> Parameters: TabCountSQL=1, TabCountDoc=0, DTSQL.Rows=1, DTDOC.Rows=0
|
|
||||||
13:45:45.5262|taskFLOW|DEBUG >> TabPreload -> Ausführung auf UI-Thread
|
|
||||||
13:45:45.5262|taskFLOW|DEBUG >> TabPreload -> 🚫 Tab-Events deaktiviert
|
|
||||||
13:45:45.5262|taskFLOW|DEBUG >> TabPreload -> ✓ _DTDATASearches und _DTDocSearches zugewiesen: SQL=1, Doc=0
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> TabPreload -> Panel1Collapsed (SQL)=False, Panel2Collapsed (Doc)=True
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> TabPreload -> Konfiguriere SQL-Tabs: 1 Definitionen
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> XtraTabControlSQL_SelectedPageChanged -> 🚫 XtraTabControlSQL_SelectedPageChanged unterdrückt (SelectedTabPageIndex=1)
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> XtraTabControlSQL_SelectedPageChanged -> 🚫 XtraTabControlSQL_SelectedPageChanged unterdrückt (SelectedTabPageIndex=2)
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> XtraTabControlSQL_SelectedPageChanged -> 🚫 XtraTabControlSQL_SelectedPageChanged unterdrückt (SelectedTabPageIndex=3)
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> XtraTabControlSQL_SelectedPageChanged -> 🚫 XtraTabControlSQL_SelectedPageChanged unterdrückt (SelectedTabPageIndex=4)
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> XtraTabControlSQL_SelectedPageChanged -> 🚫 XtraTabControlSQL_SelectedPageChanged unterdrückt (SelectedTabPageIndex=-1)
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> TabPreload -> Alle 5 SQL-Tabs auf PageVisible=False gesetzt
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> XtraTabControlSQL_SelectedPageChanged -> 🚫 XtraTabControlSQL_SelectedPageChanged unterdrückt (SelectedTabPageIndex=0)
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> TabPreload -> SQL-Tab 0: Text='Inhalte ZUGFeRD-XML', PageVisible=True
|
|
||||||
13:45:45.5322|taskFLOW|INFO >> TabPreload -> ✓ 1 SQL-Tabs konfiguriert
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> TabPreload -> Keine Doc-Daten, alle Tabs ausblenden
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> XtraTabControlDocs_SelectedPageChanged_1 -> 🚫 XtraTabControlDocs_SelectedPageChanged unterdrückt (SelectedTabPageIndex=1)
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> XtraTabControlDocs_SelectedPageChanged_1 -> 🚫 XtraTabControlDocs_SelectedPageChanged unterdrückt (SelectedTabPageIndex=2)
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> XtraTabControlDocs_SelectedPageChanged_1 -> 🚫 XtraTabControlDocs_SelectedPageChanged unterdrückt (SelectedTabPageIndex=3)
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> XtraTabControlDocs_SelectedPageChanged_1 -> 🚫 XtraTabControlDocs_SelectedPageChanged unterdrückt (SelectedTabPageIndex=4)
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> XtraTabControlDocs_SelectedPageChanged_1 -> 🚫 XtraTabControlDocs_SelectedPageChanged unterdrückt (SelectedTabPageIndex=-1)
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> TabPreload -> ✓ Tab-Events reaktiviert
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> TabPreload -> Setze SQL SelectedTabPageIndex manuell auf 0
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> ReplaceAllValues -> input BEFORE replacing: [SELECT
|
|
||||||
SPEC_NAME [Definitions-Name],
|
|
||||||
ITEM_DESCRIPTION [Beschreibung],
|
|
||||||
CASE
|
|
||||||
WHEN SPEC_NAME = 'INVOICE_POSITION_NOTE' THEN
|
|
||||||
REPLACE(REPLACE(ITEM_VALUE, CHAR(13),' '),CHAR(10),' ')
|
|
||||||
ELSE
|
|
||||||
ITEM_VALUE
|
|
||||||
END [Inhalt xml],
|
|
||||||
GROUP_COUNTER [Gruppenzähler],
|
|
||||||
IS_REQUIRED [Pflichtangabe],
|
|
||||||
CREATEDWHEN [Erstellt]
|
|
||||||
FROM dbo.TBEDMI_ITEM_VALUE WITH (NOLOCK)
|
|
||||||
WHERE REFERENCE_GUID = (SELECT EmailMessageID FROM IDB.dbo.VWIDB_DOC_DATA WHERE IDB_OBJ_ID = {#IDBA#ObjectID})
|
|
||||||
ORDER BY GROUP_COUNTER, SPEC_NAME]
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> ReplaceIDBAttributes -> Starting ReplaceIDBAttributes with input: [SELECT
|
|
||||||
SPEC_NAME [Definitions-Name],
|
|
||||||
ITEM_DESCRIPTION [Beschreibung],
|
|
||||||
CASE
|
|
||||||
WHEN SPEC_NAME = 'INVOICE_POSITION_NOTE' THEN
|
|
||||||
REPLACE(REPLACE(ITEM_VALUE, CHAR(13),' '),CHAR(10),' ')
|
|
||||||
ELSE
|
|
||||||
ITEM_VALUE
|
|
||||||
END [Inhalt xml],
|
|
||||||
GROUP_COUNTER [Gruppenzähler],
|
|
||||||
IS_REQUIRED [Pflichtangabe],
|
|
||||||
CREATEDWHEN [Erstellt]
|
|
||||||
FROM dbo.TBEDMI_ITEM_VALUE WITH (NOLOCK)
|
|
||||||
WHERE REFERENCE_GUID = (SELECT EmailMessageID FROM IDB.dbo.VWIDB_DOC_DATA WHERE IDB_OBJ_ID = {#IDBA#ObjectID})
|
|
||||||
ORDER BY GROUP_COUNTER, SPEC_NAME] for document ID: 4511694
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> ReplaceIDBAttributes -> IS_SQL = True - oReplaceValue = [{#IDBA#ObjectID}]
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> ReplaceIDBAttributes -> oIDBValue = 4511694
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> ReplaceIDBAttributes -> sql after ReplaceIDBAttributes: SELECT
|
|
||||||
SPEC_NAME [Definitions-Name],
|
|
||||||
ITEM_DESCRIPTION [Beschreibung],
|
|
||||||
CASE
|
|
||||||
WHEN SPEC_NAME = 'INVOICE_POSITION_NOTE' THEN
|
|
||||||
REPLACE(REPLACE(ITEM_VALUE, CHAR(13),' '),CHAR(10),' ')
|
|
||||||
ELSE
|
|
||||||
ITEM_VALUE
|
|
||||||
END [Inhalt xml],
|
|
||||||
GROUP_COUNTER [Gruppenzähler],
|
|
||||||
IS_REQUIRED [Pflichtangabe],
|
|
||||||
CREATEDWHEN [Erstellt]
|
|
||||||
FROM dbo.TBEDMI_ITEM_VALUE WITH (NOLOCK)
|
|
||||||
WHERE REFERENCE_GUID = (SELECT EmailMessageID FROM IDB.dbo.VWIDB_DOC_DATA WHERE IDB_OBJ_ID = {#IDBA#ObjectID})
|
|
||||||
ORDER BY GROUP_COUNTER, SPEC_NAME
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> ReplaceControlValues -> Starting ReplaceControlValues with input: [SELECT
|
|
||||||
SPEC_NAME [Definitions-Name],
|
|
||||||
ITEM_DESCRIPTION [Beschreibung],
|
|
||||||
CASE
|
|
||||||
WHEN SPEC_NAME = 'INVOICE_POSITION_NOTE' THEN
|
|
||||||
REPLACE(REPLACE(ITEM_VALUE, CHAR(13),' '),CHAR(10),' ')
|
|
||||||
ELSE
|
|
||||||
ITEM_VALUE
|
|
||||||
END [Inhalt xml],
|
|
||||||
GROUP_COUNTER [Gruppenzähler],
|
|
||||||
IS_REQUIRED [Pflichtangabe],
|
|
||||||
CREATEDWHEN [Erstellt]
|
|
||||||
FROM dbo.TBEDMI_ITEM_VALUE WITH (NOLOCK)
|
|
||||||
WHERE REFERENCE_GUID = (SELECT EmailMessageID FROM IDB.dbo.VWIDB_DOC_DATA WHERE IDB_OBJ_ID = 4511694)
|
|
||||||
ORDER BY GROUP_COUNTER, SPEC_NAME] for document ID: 4511694
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> ReplaceAllValues -> input AFTER replacing: [SELECT
|
|
||||||
SPEC_NAME [Definitions-Name],
|
|
||||||
ITEM_DESCRIPTION [Beschreibung],
|
|
||||||
CASE
|
|
||||||
WHEN SPEC_NAME = 'INVOICE_POSITION_NOTE' THEN
|
|
||||||
REPLACE(REPLACE(ITEM_VALUE, CHAR(13),' '),CHAR(10),' ')
|
|
||||||
ELSE
|
|
||||||
ITEM_VALUE
|
|
||||||
END [Inhalt xml],
|
|
||||||
GROUP_COUNTER [Gruppenzähler],
|
|
||||||
IS_REQUIRED [Pflichtangabe],
|
|
||||||
CREATEDWHEN [Erstellt]
|
|
||||||
FROM dbo.TBEDMI_ITEM_VALUE WITH (NOLOCK)
|
|
||||||
WHERE REFERENCE_GUID = (SELECT EmailMessageID FROM IDB.dbo.VWIDB_DOC_DATA WHERE IDB_OBJ_ID = 4511694)
|
|
||||||
ORDER BY GROUP_COUNTER, SPEC_NAME]
|
|
||||||
13:45:45.5322|taskFLOW|DEBUG >> TabPreload -> SQL-Tab 0: erzwungener Initial-Refresh
|
|
||||||
13:45:45.5322|DatabaseWithFallback|DEBUG >> GetDatatable -> ForceFallback is True, falling back to direct database access.
|
|
||||||
13:45:45.5322|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase -> Fetching data from database [ECM] with Connection Id [ECM]
|
|
||||||
13:45:45.5322|DatabaseWithFallback|DEBUG >> GetDatatableFromDatabase -> Retrieving Connection String from Connection Id [1]
|
|
||||||
13:45:45.5322|MSSQLServer|DEBUG >> Get_ConnectionStringforID -> Getting ConnectionString for ConnectionId [1]
|
|
||||||
13:45:45.5322|MSSQLServer|DEBUG >> GetConnection -> The Following Connection is open: Server=W2K19SRV398;Database=DD_ECM;User Id=EDMAdmin;Password=XXXXX;Application Name=DD_EDMIAppService;Workstation ID=W2K19SRV391;
|
|
||||||
13:45:45.5322|MSSQLServer|DEBUG >> MaybeGetTransaction -> Transaction Mode: [WithTransaction]
|
|
||||||
13:45:45.5322|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject -> GetDatatableWithConnectionObject: Running Query [SELECT * FROM TBDD_CONNECTION WHERE GUID = 1] and Parameters []
|
|
||||||
13:45:45.5322|MSSQLServer|DEBUG >> GetConnection -> The Following Connection is open: Data Source=w2k19srv398;Initial Catalog=DD_ECM;User ID=EDMAdmin;Password=XXXXX
|
|
||||||
13:45:45.5322|MSSQLServer|DEBUG >> MaybeGetTransaction -> Transaction Mode: [WithTransaction]
|
|
||||||
13:45:45.5322|MSSQLServer|DEBUG >> GetDatatableWithConnectionObject -> GetDatatableWithConnectionObject: Running Query [SELECT
|
|
||||||
SPEC_NAME [Definitions-Name],
|
|
||||||
ITEM_DESCRIPTION [Beschreibung],
|
|
||||||
CASE
|
|
||||||
WHEN SPEC_NAME = 'INVOICE_POSITION_NOTE' THEN
|
|
||||||
REPLACE(REPLACE(ITEM_VALUE, CHAR(13),' '),CHAR(10),' ')
|
|
||||||
ELSE
|
|
||||||
ITEM_VALUE
|
|
||||||
END [Inhalt xml],
|
|
||||||
GROUP_COUNTER [Gruppenzähler],
|
|
||||||
IS_REQUIRED [Pflichtangabe],
|
|
||||||
CREATEDWHEN [Erstellt]
|
|
||||||
FROM dbo.TBEDMI_ITEM_VALUE WITH (NOLOCK)
|
|
||||||
WHERE REFERENCE_GUID = (SELECT EmailMessageID FROM IDB.dbo.VWIDB_DOC_DATA WHERE IDB_OBJ_ID = 4511694)
|
|
||||||
ORDER BY GROUP_COUNTER, SPEC_NAME] and Parameters []
|
|
||||||
13:45:45.5832|taskFLOW|DEBUG >> TabPreload -> === TabPreload END ===
|
|
||||||
Reference in New Issue
Block a user