Vor GridControl Length
This commit is contained in:
@@ -1,5 +1,77 @@
|
||||
Public Class ClassIDBData
|
||||
Public DTVWIDB_BE_ATTRIBUTE As DataTable
|
||||
Public IDBSystemIndices As List(Of String)
|
||||
''' <summary>
|
||||
''' Wenn True, werden SQL-Statements nicht sofort ausgeführt,
|
||||
''' sondern in <see cref="_sqlBatch"/> gesammelt.
|
||||
''' </summary>
|
||||
Public Property BatchMode As Boolean = False
|
||||
Private _sqlBatch As New List(Of String)
|
||||
|
||||
''' <summary>
|
||||
''' Startet den Batch-Sammelmodus.
|
||||
''' </summary>
|
||||
Public Sub BeginBatch()
|
||||
_sqlBatch.Clear()
|
||||
BatchMode = True
|
||||
End Sub
|
||||
''' <summary>
|
||||
''' Führt alle gesammelten SQL-Statements als einen einzigen String
|
||||
''' an ExecuteNonQueryIDB weiter. Jeder Block wird in BEGIN...END
|
||||
''' gekapselt, damit DECLARE-Variablen nicht kollidieren.
|
||||
''' </summary>
|
||||
''' <returns>True wenn erfolgreich</returns>
|
||||
Public Function CommitBatch() As Boolean
|
||||
BatchMode = False
|
||||
If _sqlBatch.Count = 0 Then Return True
|
||||
Try
|
||||
Dim oStatements = _sqlBatch.
|
||||
Where(Function(s) Not String.IsNullOrWhiteSpace(s)).
|
||||
ToList()
|
||||
|
||||
' @NEW_OBJ_MD_ID pro Statement eindeutig umbenennen → kein Namenskonflikt im Batch
|
||||
Dim oNumberedStatements As New List(Of String)
|
||||
Dim oIndex As Integer = 0
|
||||
For Each oStatement As String In oStatements
|
||||
Dim oNumbered = oStatement.Replace("@NEW_OBJ_MD_ID", $"@NEW_OBJ_MD_ID_{oIndex}")
|
||||
oNumberedStatements.Add(oNumbered)
|
||||
oIndex += 1
|
||||
Next
|
||||
|
||||
Dim oBatchSQL = String.Join(vbNewLine, oNumberedStatements)
|
||||
|
||||
LOGGER.Debug($"CommitBatch - Executing {oStatements.Count} statements as one batch:{vbNewLine}{oBatchSQL}")
|
||||
|
||||
Dim oResult = DatabaseFallback.ExecuteNonQueryIDB(oBatchSQL)
|
||||
_sqlBatch.Clear()
|
||||
Return oResult
|
||||
Catch ex As Exception
|
||||
LOGGER.Error(ex)
|
||||
_sqlBatch.Clear()
|
||||
Return False
|
||||
End Try
|
||||
End Function
|
||||
|
||||
''' <summary>
|
||||
''' Verwirft alle gesammelten Statements ohne Ausführung.
|
||||
''' </summary>
|
||||
Public Sub RollbackBatch()
|
||||
_sqlBatch.Clear()
|
||||
BatchMode = False
|
||||
End Sub
|
||||
|
||||
''' <summary>
|
||||
''' Führt ein SQL-Statement aus – sofort oder gesammelt je nach BatchMode.
|
||||
''' </summary>
|
||||
Private Function ExecuteOrQueue(oSQL As String) As Boolean
|
||||
If BatchMode Then
|
||||
_sqlBatch.Add(oSQL)
|
||||
LOGGER.Debug($"BatchMode - Queued statement: {oSQL}")
|
||||
Return True
|
||||
Else
|
||||
Return DatabaseFallback.ExecuteNonQueryIDB(oSQL)
|
||||
End If
|
||||
End Function
|
||||
''' <summary>
|
||||
''' Gets all indices by BusinessEntity.
|
||||
''' </summary>
|
||||
@@ -7,15 +79,16 @@
|
||||
''' <returns>Array with all Indices</returns>
|
||||
''' <remarks></remarks>
|
||||
'''
|
||||
Public Function Init()
|
||||
Public Function Init() As Boolean
|
||||
Dim oSQL = $"SELECT DISTINCT ATTR_TITLE, TYP_ID, TYP_ID as [TYPE_ID] FROM VWIDB_BE_ATTRIBUTE WHERE SYS_ATTRIBUTE = 0 ORDER BY ATTR_TITLE"
|
||||
DTVWIDB_BE_ATTRIBUTE = DatabaseFallback.GetDatatableIDB(oSQL)
|
||||
If IsNothing(DTVWIDB_BE_ATTRIBUTE) Then
|
||||
oSQL = $"SELECT DISTINCT ATTR_TITLE, TYP_ID, TYP_ID as [TYPE_ID] FROM VWIDB_BE_ATTRIBUTE ORDER BY ATTR_TITLE "
|
||||
DTVWIDB_BE_ATTRIBUTE = DatabaseFallback.GetDatatableIDB(oSQL)
|
||||
End If
|
||||
Return True
|
||||
End Function
|
||||
Public IDBSystemIndices As List(Of String)
|
||||
|
||||
Public Function GetIndicesByBE(ByVal BusinessEntity As String) As String()
|
||||
Try
|
||||
Dim aNames(4) As String
|
||||
@@ -140,8 +213,9 @@
|
||||
End If
|
||||
|
||||
Dim oDELSQL = $"EXEC PRIDB_DELETE_TERM_OBJECT_METADATA {CURRENT_DOC_ID},'{oAttributeName}','{oTerm2Delete}','{USER_USERNAME}','{USER_LANGUAGE}',{oID_IS_FOREIGN}"
|
||||
DatabaseFallback.ExecuteNonQueryIDB(oDELSQL)
|
||||
|
||||
LOGGER.Debug($"Delete_Term_Object_From_Metadata: {oDELSQL}")
|
||||
'DatabaseFallback.ExecuteNonQueryIDB(oDELSQL)
|
||||
Return ExecuteOrQueue(oDELSQL)
|
||||
Catch ex As Exception
|
||||
LOGGER.Error(ex)
|
||||
Return Nothing
|
||||
@@ -151,8 +225,9 @@
|
||||
Public Function Delete_AttributeData(pIDB_OBJID As Int64, pAttributeName As String) As Object
|
||||
Try
|
||||
Dim oDELSQL = $"EXEC PRIDB_DELETE_ATTRIBUTE_DATA {pIDB_OBJID},'{pAttributeName}','{USER_USERNAME}'"
|
||||
DatabaseFallback.ExecuteNonQueryIDB(oDELSQL)
|
||||
|
||||
LOGGER.Debug($"Delete_Attribute_Data: {oDELSQL}")
|
||||
' DatabaseFallback.ExecuteNonQueryIDB(oDELSQL)
|
||||
Return ExecuteOrQueue(oDELSQL)
|
||||
Catch ex As Exception
|
||||
LOGGER.Error(ex)
|
||||
Return Nothing
|
||||
@@ -165,15 +240,15 @@
|
||||
Dim omytype = oNewValue.GetType.ToString
|
||||
If omytype = "System.Data.DataTable" Then
|
||||
Dim oDTMyNewValues As DataTable = oNewValue
|
||||
Dim oOldAttributeResult
|
||||
Dim oAttributeResultFromDB
|
||||
Dim oTypeOldResult
|
||||
|
||||
If CheckDeleted = True Then
|
||||
oOldAttributeResult = GetVariableValue(oAttributeName, oIDBTyp)
|
||||
oTypeOldResult = oOldAttributeResult.GetType.ToString
|
||||
If oTypeOldResult = "System.Data.DataTable" Then
|
||||
Dim myOldValues As DataTable = oOldAttributeResult
|
||||
If myOldValues.Rows.Count > 1 Then
|
||||
oAttributeResultFromDB = GetVariableValue(oAttributeName, oIDBTyp)
|
||||
oTypeOldResult = oAttributeResultFromDB.GetType.ToString
|
||||
If TypeOf oAttributeResultFromDB Is DataTable Then
|
||||
Dim myOldValues As DataTable = oAttributeResultFromDB
|
||||
If myOldValues.Rows.Count >= 1 Then
|
||||
|
||||
'now Checking whether the old row still remains in Vector? If not it will be deleted as it cannot be replaced in multivalues
|
||||
For Each oOldValueRow As DataRow In myOldValues.Rows
|
||||
@@ -199,27 +274,26 @@
|
||||
'### Old Value is a single value ###
|
||||
If oDTMyNewValues.Rows.Count > 1 Then
|
||||
'### there is more than one new value ###
|
||||
Dim oExists As Boolean
|
||||
Dim oExists As Boolean = False
|
||||
For Each oNewValueRow As DataRow In oDTMyNewValues.Rows
|
||||
oExists = False
|
||||
Dim oInfo1 = $"Checking oldValue[{oOldAttributeResult}] vs NewValue [{oNewValueRow.Item(1)}]"
|
||||
If oNewValueRow.Item(1).ToString.ToUpper = oOldAttributeResult.ToString.ToUpper Then
|
||||
LOGGER.Debug($"Checking oldValue[{oAttributeResultFromDB}] vs NewValue [{oNewValueRow.Item(1)}]")
|
||||
If oNewValueRow.Item(1).ToString.ToUpper = oAttributeResultFromDB.ToString.ToUpper Then
|
||||
oExists = True
|
||||
Exit For ' ← sobald gefunden, abbrechen
|
||||
End If
|
||||
Next
|
||||
If oExists = False Then
|
||||
Dim oInfo2 = $"Value [{oOldAttributeResult}] no longer existing in Vector-Attribute [{oAttributeName}] - will be deleted!"
|
||||
LOGGER.Debug(oInfo2)
|
||||
LOGGER.Debug($"Value [{oAttributeResultFromDB}] no longer existing in Attribute [{oAttributeName}] - will be deleted!")
|
||||
'SetVariableValue(CURRENT_PROFILE_LOG_INDEX, oInfo2)
|
||||
Delete_Term_Object_From_Metadata(oAttributeName, oOldAttributeResult)
|
||||
Delete_Term_Object_From_Metadata(oAttributeName, oAttributeResultFromDB)
|
||||
End If
|
||||
Else
|
||||
'### there is only ONE new value ###
|
||||
If oDTMyNewValues.Rows(0).Item(1) <> oOldAttributeResult Then
|
||||
Dim oInfo = $"Value [{oOldAttributeResult}] of Attribute [{oAttributeName}] obviously was updated during runtime - will be deleted!"
|
||||
If oDTMyNewValues.Rows(0).Item(1) <> oAttributeResultFromDB Then
|
||||
Dim oInfo = $"Value [{oAttributeResultFromDB}] of Attribute [{oAttributeName}] obviously was updated during runtime - will be deleted!"
|
||||
LOGGER.Debug(oInfo)
|
||||
SetVariableValue(CURRENT_PROFILE_LOG_INDEX, oInfo)
|
||||
Delete_Term_Object_From_Metadata(oAttributeName, oOldAttributeResult)
|
||||
Delete_Term_Object_From_Metadata(oAttributeName, oAttributeResultFromDB)
|
||||
Else
|
||||
LOGGER.Debug($"Attributvalue of [{oAttributeName}] did not change!")
|
||||
End If
|
||||
@@ -231,22 +305,24 @@
|
||||
End If
|
||||
|
||||
For Each oNewValueRow As DataRow In oDTMyNewValues.Rows
|
||||
Dim oSuccess As Boolean = False
|
||||
'Dim oSuccess As Boolean = False
|
||||
Dim oVALUE = oNewValueRow.Item(1).ToString
|
||||
oVALUE = oVALUE.Replace("'", "''")
|
||||
Dim oPRSQL = $"DECLARE @NEW_OBJ_MD_ID BIGINT " & vbNewLine & $"EXEC PRIDB_NEW_OBJ_DATA {CURRENT_DOC_ID},'{oAttributeName}','{USER_USERNAME}','{oVALUE}','{USER_LANGUAGE}',0,@OMD_ID = @NEW_OBJ_MD_ID OUTPUT"
|
||||
LOGGER.Debug(oPRSQL)
|
||||
oSuccess = DatabaseFallback.ExecuteNonQueryIDB(oPRSQL)
|
||||
If oSuccess = False Then
|
||||
Return False
|
||||
End If
|
||||
'oSuccess = DatabaseFallback.ExecuteNonQueryIDB(oPRSQL)
|
||||
If Not ExecuteOrQueue(oPRSQL) Then Return False
|
||||
'If oSuccess = False Then
|
||||
' Return False
|
||||
'End If
|
||||
Next
|
||||
Return True
|
||||
Else
|
||||
'oNewValue = oNewValue.Replace("'", "' + NCHAR(39) + '")
|
||||
Dim oFNSQL = $"DECLARE @NEW_OBJ_MD_ID BIGINT " & vbNewLine & $"EXEC PRIDB_NEW_OBJ_DATA {CURRENT_DOC_ID},'{oAttributeName}','{USER_USERNAME}','{oNewValue}','{USER_LANGUAGE}',0,@OMD_ID = @NEW_OBJ_MD_ID OUTPUT"
|
||||
LOGGER.Debug(oFNSQL)
|
||||
Return DatabaseFallback.ExecuteNonQueryIDB(oFNSQL)
|
||||
Dim oPRIDB_NEW_OBJ_DATA = $"DECLARE @NEW_OBJ_MD_ID BIGINT " & vbNewLine & $"EXEC PRIDB_NEW_OBJ_DATA {CURRENT_DOC_ID},'{oAttributeName}','{USER_USERNAME}','{oNewValue}','{USER_LANGUAGE}',0,@OMD_ID = @NEW_OBJ_MD_ID OUTPUT"
|
||||
LOGGER.Debug(oPRIDB_NEW_OBJ_DATA)
|
||||
' Return DatabaseFallback.ExecuteNonQueryIDB(oPRIDB_NEW_OBJ_DATA)
|
||||
Return ExecuteOrQueue(oPRIDB_NEW_OBJ_DATA)
|
||||
End If
|
||||
|
||||
Catch ex As Exception
|
||||
|
||||
@@ -15,6 +15,7 @@ Imports DevExpress.XtraGrid.Views.Grid
|
||||
Imports DevExpress.XtraGrid.Views.Grid.ViewInfo
|
||||
Imports DevExpress.XtraNavBar
|
||||
Imports DevExpress.XtraPrinting
|
||||
Imports DevExpress.XtraSplashScreen
|
||||
Imports DigitalData.GUIs.Common
|
||||
Imports DigitalData.Modules.Base
|
||||
Imports DigitalData.Modules.EDMI.API.Constants
|
||||
@@ -61,6 +62,7 @@ Public Class frmMain
|
||||
Private DetailLinkActive As Boolean = False
|
||||
Private FRONTEND_ACTION As String = "NONE"
|
||||
Private Ev_Filter_Panel_Closed As Boolean = False
|
||||
Private _overlayActive As Boolean = False
|
||||
|
||||
Dim omsgOpenWorkflow As String
|
||||
Dim omsgTitleWarning As String
|
||||
@@ -1398,6 +1400,13 @@ Public Class frmMain
|
||||
' HAUPTLADEMETHODE - Koordiniert den gesamten Ladevorgang
|
||||
' ========================================
|
||||
Private Async Function Decide_Load(pIsFormLoad As Boolean, Optional ForceReload As Boolean = False) As Tasks.Task
|
||||
Dim oHandle As Object = Nothing
|
||||
Dim overlayStartedHere As Boolean = False
|
||||
If Not _overlayActive Then
|
||||
oHandle = SplashScreenManager.ShowOverlayForm(Me)
|
||||
_overlayActive = True
|
||||
overlayStartedHere = True
|
||||
End If
|
||||
Dim perfStart As DateTime = DateTime.MinValue
|
||||
Dim refreshWasEnabled As Boolean = False
|
||||
|
||||
@@ -1436,10 +1445,10 @@ Public Class frmMain
|
||||
LOGGER.Info("[PERF Decide_Load] ruft LoadOverviewData auf...")
|
||||
End If
|
||||
|
||||
' UI vorbereiten
|
||||
If Not PrepareGridForLoading() Then
|
||||
Exit Function
|
||||
End If
|
||||
'' UI vorbereiten
|
||||
'If Not PrepareGridForLoading() Then
|
||||
' Exit Function
|
||||
'End If
|
||||
|
||||
Await Task.Yield()
|
||||
|
||||
@@ -1451,10 +1460,10 @@ Public Class frmMain
|
||||
LOGGER.Info("[PERF Decide_Load] ruft LoadProfileData auf...")
|
||||
End If
|
||||
|
||||
' UI vorbereiten
|
||||
If Not PrepareGridForLoading() Then
|
||||
Exit Function
|
||||
End If
|
||||
'' UI vorbereiten
|
||||
'If Not PrepareGridForLoading() Then
|
||||
' Exit Function
|
||||
'End If
|
||||
|
||||
Await Task.Yield()
|
||||
|
||||
@@ -1477,7 +1486,10 @@ Public Class frmMain
|
||||
LOGGER.Info("Unexpected error in Decide_load: " & ex.Message)
|
||||
Finally
|
||||
FRONTEND_ACTION = FA_NONE
|
||||
|
||||
If overlayStartedHere Then
|
||||
_overlayActive = False
|
||||
SplashScreenManager.CloseOverlayForm(oHandle)
|
||||
End If
|
||||
If refreshWasEnabled Then
|
||||
TimerRefresh.Start()
|
||||
End If
|
||||
@@ -1491,33 +1503,6 @@ Public Class frmMain
|
||||
End If
|
||||
End Try
|
||||
End Function
|
||||
|
||||
' ========================================
|
||||
' UI-VORBEREITUNG - Macht Grid sichtbar und zeigt LoadingPanel
|
||||
' ========================================
|
||||
Private Function PrepareGridForLoading() As Boolean
|
||||
Try
|
||||
' Grid sichtbar machen
|
||||
If GridControlWorkflows.Visible = False Then
|
||||
GridControlWorkflows.Visible = True
|
||||
End If
|
||||
|
||||
' UI-Thread Zeit geben
|
||||
Application.DoEvents()
|
||||
|
||||
' LoadingPanel anzeigen
|
||||
GridViewWorkflows.ShowLoadingPanel()
|
||||
|
||||
' Nochmal Zeit zum Rendern
|
||||
Application.DoEvents()
|
||||
|
||||
Return True
|
||||
Catch ex As Exception
|
||||
LOGGER.Error(ex)
|
||||
Return False
|
||||
End Try
|
||||
End Function
|
||||
|
||||
' ========================================
|
||||
' OVERVIEW DATEN LADEN - Spezialisiert auf Overview
|
||||
' ========================================
|
||||
@@ -1686,9 +1671,6 @@ Public Class frmMain
|
||||
GridControlWorkflows.EndUpdate()
|
||||
End If
|
||||
|
||||
' LoadingPanel verstecken (NUR HIER!)
|
||||
GridViewWorkflows.HideLoadingPanel()
|
||||
|
||||
If LOG_HOTSPOTS Then
|
||||
Dim totalElapsed = (DateTime.Now - perfStart).TotalMilliseconds
|
||||
If totalElapsed > 4000 Then
|
||||
@@ -1759,9 +1741,6 @@ Public Class frmMain
|
||||
If gridUpdateStarted Then
|
||||
GridControlWorkflows.EndUpdate()
|
||||
End If
|
||||
|
||||
' LoadingPanel verstecken (NUR HIER!)
|
||||
GridViewWorkflows.HideLoadingPanel()
|
||||
End Try
|
||||
End Function
|
||||
|
||||
@@ -2548,11 +2527,9 @@ Public Class frmMain
|
||||
Dim viewUpdateStarted As Boolean = False
|
||||
Dim layoutRestored As Boolean = False
|
||||
Dim resetLayoutTriggered As Boolean = False
|
||||
Dim showLoadingPanel As Boolean = False
|
||||
Dim useWaitCursorApplied As Boolean = False
|
||||
Dim previousMessage As String = bsiMessage.Caption
|
||||
Dim loadingMessageApplied As Boolean = False
|
||||
Dim gridWasMadeVisible As Boolean = False
|
||||
|
||||
If LOG_HOTSPOTS Then
|
||||
perfStart = DateTime.Now
|
||||
@@ -2564,24 +2541,11 @@ Public Class frmMain
|
||||
' SCHRITT 1: Grid sichtbar machen
|
||||
If GridControlWorkflows.Visible = False Then
|
||||
GridControlWorkflows.Visible = True
|
||||
gridWasMadeVisible = True
|
||||
End If
|
||||
|
||||
GRID_LOAD_TYPE = "OVERVIEW"
|
||||
CURRENT_CLICKED_PROFILE_ID = 0
|
||||
|
||||
' SCHRITT 2: UI-Thread Zeit geben, das Grid zu rendern
|
||||
Application.DoEvents()
|
||||
Await Task.Delay(100)
|
||||
|
||||
' SCHRITT 3: LoadingPanel anzeigen (jetzt ist das Grid definitiv sichtbar!)
|
||||
GridViewWorkflows.ShowLoadingPanel()
|
||||
showLoadingPanel = True
|
||||
|
||||
' SCHRITT 4: UI-Thread Zeit zum Rendern des LoadingPanels geben
|
||||
Application.DoEvents()
|
||||
Await Task.Delay(150)
|
||||
|
||||
If LOG_HOTSPOTS Then
|
||||
Dim elapsed = (DateTime.Now - perfStep).TotalMilliseconds
|
||||
If elapsed > 4000 Then
|
||||
@@ -2876,7 +2840,6 @@ Public Class frmMain
|
||||
|
||||
Finally
|
||||
' ========== AUFRÄUMEN ==========
|
||||
' EndUpdate IMMER aufrufen (vor dem Verstecken des LoadingPanel)
|
||||
If viewUpdateStarted Then
|
||||
GridViewWorkflows.EndUpdate()
|
||||
End If
|
||||
@@ -2884,11 +2847,6 @@ Public Class frmMain
|
||||
GridControlWorkflows.EndUpdate()
|
||||
End If
|
||||
|
||||
' LoadingPanel SOFORT nach EndUpdate verstecken
|
||||
If showLoadingPanel Then
|
||||
GridViewWorkflows.HideLoadingPanel()
|
||||
End If
|
||||
|
||||
' WaitCursor entfernen
|
||||
If useWaitCursorApplied Then
|
||||
Me.UseWaitCursor = False
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -624,6 +624,12 @@
|
||||
<Compile Include="frmError.vb">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="frmExpression_Designer.Designer.vb">
|
||||
<DependentUpon>frmExpression_Designer.vb</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="frmExpression_Designer.vb">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="frmFileInfo.Designer.vb">
|
||||
<DependentUpon>frmFileInfo.vb</DependentUpon>
|
||||
</Compile>
|
||||
@@ -868,6 +874,9 @@
|
||||
<DependentUpon>frmError.vb</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="frmExpression_Designer.resx">
|
||||
<DependentUpon>frmExpression_Designer.vb</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="frmFileInfo.resx">
|
||||
<DependentUpon>frmFileInfo.vb</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
|
||||
Reference in New Issue
Block a user