MS Anpassung Speicherung IDBData
This commit is contained in:
@@ -210,7 +210,7 @@
|
||||
oID_IS_FOREIGN = 1
|
||||
End If
|
||||
|
||||
Dim oDELSQL = $"EXEC PRIDB_DELETE_TERM_OBJECT_METADATA {CURRENT_DOC_ID},'{oAttributeName}','{oTerm2Delete}','{USER_USERNAME}','{USER_LANGUAGE}',{oID_IS_FOREIGN}"
|
||||
Dim oDELSQL = $"EXEC PRIDB_DELETE_TERM_OBJECT_METADATA {CURRENT_DOC_ID},'{oAttributeName}','{oTerm2Delete}','{USER_USERNAME}','{USER_LANGUAGE}',{oID_IS_FOREIGN};"
|
||||
LOGGER.Debug($"Delete_Term_Object_From_Metadata: {oDELSQL}")
|
||||
'DatabaseFallback.ExecuteNonQueryIDB(oDELSQL)
|
||||
Return ExecuteOrQueue(oDELSQL)
|
||||
@@ -222,7 +222,7 @@
|
||||
End Function
|
||||
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}'"
|
||||
Dim oDELSQL = $"EXEC PRIDB_DELETE_ATTRIBUTE_DATA {pIDB_OBJID},'{pAttributeName}','{USER_USERNAME}';"
|
||||
LOGGER.Debug($"Delete_Attribute_Data: {oDELSQL}")
|
||||
' DatabaseFallback.ExecuteNonQueryIDB(oDELSQL)
|
||||
Return ExecuteOrQueue(oDELSQL)
|
||||
@@ -235,13 +235,18 @@
|
||||
|
||||
Public Function SetVariableValue(oAttributeName As String, oNewValue As Object, Optional CheckDeleted As Boolean = False, Optional oIDBTyp As Integer = 0)
|
||||
Try
|
||||
Dim omsg = $"IDBData - SetVariableValue - Attribute: [{oAttributeName}] - NewValue: [{oNewValue}] - CheckDeleted: [{CheckDeleted.ToString}] - oIDBTyp: [{oIDBTyp}]"
|
||||
LOGGER.Debug(omsg)
|
||||
Dim omytype = oNewValue.GetType.ToString
|
||||
If omytype = "System.Data.DataTable" Then
|
||||
Dim oDTMyNewValues As DataTable = oNewValue
|
||||
Dim oAttributeResultFromDB
|
||||
Dim oTypeOldResult
|
||||
' Für DataTable (Mehrfachauswahl/Vektor) IMMER auf gelöschte Werte prüfen,
|
||||
' unabhängig vom übergebenen CheckDeleted-Parameter.
|
||||
Dim oEffectiveCheckDeleted As Boolean = True
|
||||
|
||||
If CheckDeleted = True Then
|
||||
If oEffectiveCheckDeleted = True Then
|
||||
oAttributeResultFromDB = GetVariableValue(oAttributeName, oIDBTyp)
|
||||
oTypeOldResult = oAttributeResultFromDB.GetType.ToString
|
||||
If TypeOf oAttributeResultFromDB Is DataTable Then
|
||||
@@ -306,7 +311,7 @@
|
||||
'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"
|
||||
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 Not ExecuteOrQueue(oPRSQL) Then Return False
|
||||
@@ -317,7 +322,7 @@
|
||||
Return True
|
||||
Else
|
||||
'oNewValue = oNewValue.Replace("'", "' + NCHAR(39) + '")
|
||||
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"
|
||||
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)
|
||||
|
||||
@@ -716,8 +716,8 @@ Public Class frmValidator
|
||||
Try
|
||||
Dim oSQL As String
|
||||
If CURRENT_DOC_GUID <> 0 Then
|
||||
Dim oPRoc = String.Format("EXEC PRTF_PROFILE_FILES_WORK {0},{1},{2},'FreeFile'", CURRENT_DOC_ID, CURRENT_ProfilGUID, USER_ID)
|
||||
oSQL = $"DELETE FROM TBPM_DOCWALKOVER WHERE UserID = {USER_ID};" & vbNewLine & oPRoc
|
||||
Dim oPRoc = String.Format("EXEC PRTF_PROFILE_FILES_WORK {0},{1},{2},'FreeFile';", CURRENT_DOC_ID, CURRENT_ProfilGUID, USER_ID)
|
||||
oSQL = $"DELETE FROM TBPM_DOCWALKOVER WHERE UserID = {USER_ID};" & vbCrLf & oPRoc
|
||||
Else
|
||||
oSQL = $"DELETE FROM TBPM_DOCWALKOVER WHERE UserID = {USER_ID};"
|
||||
End If
|
||||
@@ -999,83 +999,55 @@ Public Class frmValidator
|
||||
MyValidationLogger.Debug($" DataSource-Typ: {lookup.Properties.DataSource?.GetType()}")
|
||||
MyValidationLogger.Debug($" ValueMember: [{lookup.Properties.ValueMember}]")
|
||||
MyValidationLogger.Debug($" DisplayMember: [{lookup.Properties.DisplayMember}]")
|
||||
Dim ds = TryCast(lookup.Properties.DataSource, DataTable)
|
||||
If ds IsNot Nothing Then
|
||||
MyValidationLogger.Debug($" DataSource hat {ds.Rows.Count} Zeilen, {ds.Columns.Count} Spalten")
|
||||
If ds.Rows.Count > 0 Then
|
||||
MyValidationLogger.Debug($" Erster Wert: [{ds.Rows(0)(lookup.Properties.ValueMember)}]")
|
||||
MyValidationLogger.Debug($" Spalten: {String.Join(", ", ds.Columns.Cast(Of DataColumn)().Select(Function(c) c.ColumnName))}")
|
||||
End If
|
||||
Else
|
||||
MyValidationLogger.Warn($"⚠️ DataSource ist NICHT vom Typ DataTable!")
|
||||
End If
|
||||
' ========== BUGFIX: Wert SICHERN bevor DataSource überschrieben wird ==========
|
||||
Dim previousSelectedValues As List(Of String) = Nothing
|
||||
Dim originalValueMember = lookup.Properties.ValueMember
|
||||
Dim originalDisplayMember = lookup.Properties.DisplayMember
|
||||
|
||||
' Aber ACHTUNG: Nur sichern, wenn bereits Werte gesetzt sind!
|
||||
Dim previousSelectedValues As List(Of String) = Nothing
|
||||
If lookup.Properties.SelectedValues IsNot Nothing AndAlso lookup.Properties.SelectedValues.Count > 0 Then
|
||||
' Hier KÖNNEN Werte drin sein (z.B. "4711" aus FillIndexValues)
|
||||
previousSelectedValues = New List(Of String)(lookup.Properties.SelectedValues)
|
||||
MyValidationLogger.Debug($"[LoadSQLData BUGFIX] Alte SelectedValues gesichert: [{String.Join(",", previousSelectedValues)}]")
|
||||
End If
|
||||
|
||||
' DataSource MIT NEUEM DataTable ÜBERSCHREIBEN (das ist der "Fehler")
|
||||
lookup.Properties.DataSource = oDTContent
|
||||
lookup.Properties.ValueMember = oDTContent.Columns.Item(0).ColumnName
|
||||
lookup.Properties.DisplayMember = oDTContent.Columns.Item(0).ColumnName
|
||||
' *** DEBUG-CODE HIER EINFÜGEN ***
|
||||
MyValidationLogger.Debug($"[LoadSQLData DEBUG] Lookup [{name}] konfiguriert:")
|
||||
MyValidationLogger.Debug($" DataSource-Typ: {lookup.Properties.DataSource?.GetType()}")
|
||||
MyValidationLogger.Debug($" ValueMember: [{lookup.Properties.ValueMember}]")
|
||||
MyValidationLogger.Debug($" DisplayMember: [{lookup.Properties.DisplayMember}]")
|
||||
lookup.Properties.BeginUpdate()
|
||||
Try
|
||||
lookup.Properties.DataSource = oDTContent
|
||||
|
||||
ds = TryCast(lookup.Properties.DataSource, DataTable)
|
||||
If ds IsNot Nothing Then
|
||||
MyValidationLogger.Debug($" DataSource hat {ds.Rows.Count} Zeilen, {ds.Columns.Count} Spalten")
|
||||
If ds.Rows.Count > 0 Then
|
||||
Try
|
||||
MyValidationLogger.Debug($" Erster Wert: [{ds.Rows(0)(lookup.Properties.ValueMember)}]")
|
||||
MyValidationLogger.Debug($" Spalten: {String.Join(", ", ds.Columns.Cast(Of DataColumn)().Select(Function(c) c.ColumnName))}")
|
||||
Catch ex As Exception
|
||||
MyValidationLogger.Warn($"⚠️ Error in LookUpLoadSQLData: {ex.Message}")
|
||||
End Try
|
||||
Dim valueMember As String = originalValueMember
|
||||
If String.IsNullOrWhiteSpace(valueMember) OrElse Not oDTContent.Columns.Contains(valueMember) Then
|
||||
valueMember = oDTContent.Columns(0).ColumnName
|
||||
End If
|
||||
Else
|
||||
MyValidationLogger.Warn($"⚠️ DataSource ist NICHT vom Typ DataTable!")
|
||||
End If
|
||||
' *** ENDE DEBUG-CODE ***
|
||||
' ========== CRITICAL: Nach DataSource-Zuweisung sind SelectedValues GELÖSCHT! ==========
|
||||
' Daher müssen wir sie WIEDERHERSTELLEN:
|
||||
If previousSelectedValues IsNot Nothing AndAlso previousSelectedValues.Count > 0 Then
|
||||
' Nur wiederherstellen wenn:
|
||||
' 1. Wir vorher Werte gesichert haben UND
|
||||
' 2. Die Werte im NEUEN DataSource existieren
|
||||
|
||||
' Optional: Validierung dass Werte noch im neuen DataSource vorhanden sind
|
||||
Dim newDataSource As DataTable = lookup.Properties.DataSource
|
||||
Dim validValues As New List(Of String)
|
||||
Dim displayMember As String = originalDisplayMember
|
||||
If String.IsNullOrWhiteSpace(displayMember) OrElse Not oDTContent.Columns.Contains(displayMember) Then
|
||||
displayMember = valueMember
|
||||
End If
|
||||
|
||||
For Each oldValue As String In previousSelectedValues
|
||||
' Prüfe ob oldValue im neuen DataSource existiert
|
||||
Dim exists = newDataSource.AsEnumerable().
|
||||
Any(Function(r) r.Item(0).ToString = oldValue)
|
||||
lookup.Properties.ValueMember = valueMember
|
||||
lookup.Properties.DisplayMember = displayMember
|
||||
|
||||
If exists Then
|
||||
validValues.Add(oldValue)
|
||||
MyValidationLogger.Debug($"[LoadSQLData BUGFIX] Wert [{oldValue}] existiert im neuen DataSource ✓")
|
||||
Else
|
||||
MyValidationLogger.Warn($"⚠️ [LoadSQLData BUGFIX] Wert [{oldValue}] existiert NICHT im neuen DataSource ✗")
|
||||
If previousSelectedValues IsNot Nothing AndAlso previousSelectedValues.Count > 0 Then
|
||||
Dim validValues As New List(Of String)
|
||||
|
||||
For Each oldValue As String In previousSelectedValues
|
||||
Dim exists = oDTContent.AsEnumerable().
|
||||
Any(Function(r) r.Item(valueMember).ToString = oldValue)
|
||||
|
||||
If exists Then
|
||||
validValues.Add(oldValue)
|
||||
MyValidationLogger.Debug($"[LoadSQLData BUGFIX] Wert [{oldValue}] existiert im neuen DataSource ✓")
|
||||
Else
|
||||
MyValidationLogger.Warn($"⚠️ [LoadSQLData BUGFIX] Wert [{oldValue}] existiert NICHT im neuen DataSource ✗")
|
||||
End If
|
||||
Next
|
||||
|
||||
If validValues.Count > 0 Then
|
||||
lookup.Properties.SelectedValues = validValues
|
||||
MyValidationLogger.Debug($"[LoadSQLData BUGFIX] SelectedValues wiederhergestellt: [{String.Join(",", validValues)}]")
|
||||
End If
|
||||
Next
|
||||
|
||||
' Nur wenn noch gültige Werte übrig sind
|
||||
If validValues.Count > 0 Then
|
||||
lookup.Properties.SelectedValues = validValues
|
||||
MyValidationLogger.Debug($"[LoadSQLData BUGFIX] SelectedValues wiederhergestellt: [{String.Join(",", validValues)}]")
|
||||
Else
|
||||
MyValidationLogger.Warn($"⚠️ [LoadSQLData BUGFIX] Keine Werte zum Wiederherstellen vorhanden!")
|
||||
End If
|
||||
End If
|
||||
Finally
|
||||
lookup.Properties.EndUpdate()
|
||||
End Try
|
||||
|
||||
Catch ex As Exception
|
||||
MyValidationLogger.Warn("⚠️ Error in LookUpLoadSQLData: " & ex.Message)
|
||||
@@ -6985,7 +6957,7 @@ Public Class frmValidator
|
||||
Try
|
||||
MyValidationLogger.Debug("Skipping document....(Datei_ueberspringen)")
|
||||
Dim oPRoc = String.Format("EXEC PRTF_PROFILE_FILES_WORK {0},{1},{2},{3}", CURRENT_DOC_ID, CURRENT_ProfilGUID, USER_ID, "FreeFile")
|
||||
Dim oSQL = oPRoc & vbNewLine &
|
||||
Dim oSQL = oPRoc & vbCrLf &
|
||||
$"EXECUTE PRPM_FILES_NOT_INDEXED '{USER_USERNAME}',{CURRENT_ProfilGUID},'{WMDocPathWindows}',{CURRENT_DOC_GUID};"
|
||||
If LOG_HOTSPOTS Then
|
||||
' ========== DIAGNOSE: Vor DB-Execute ==========
|
||||
|
||||
Reference in New Issue
Block a user