Bug Multiindexing, Cache load
This commit is contained in:
@@ -34,6 +34,10 @@ Public Class frmWM_IndexFile
|
||||
|
||||
|
||||
End Class
|
||||
Private _multiIndexDecisionMade As Boolean = False
|
||||
Private _multiIndexOverwriteExisting As Boolean = False
|
||||
Private _processedFileIds As New List(Of Integer)
|
||||
|
||||
Function WORK_FILE(ImportFilePath As String, VerzeichnisZiel As String, vDokart_ID As Integer, vDokart As String, multiindex As Boolean)
|
||||
'Dim swWORK_FILE As New SW("WORK_FILE: " & DOCTYPE_IDTextBox.Text)
|
||||
Try
|
||||
@@ -54,30 +58,64 @@ Public Class frmWM_IndexFile
|
||||
End If
|
||||
sw.Done()
|
||||
sw = New SW("CheckFileExists")
|
||||
Dim existsonlyasMaster = False
|
||||
|
||||
If WMMOD.TestFileExists(CURRENT_NEWFILENAME) = True Then
|
||||
Dim msg As String
|
||||
If USER_LANGUAGE <> "de-DE" Then
|
||||
msg = "A file with the same name already exists!" & vbCrLf &
|
||||
"YES → Replace the existing file (all former versions will be deleted)" & vbCrLf &
|
||||
"NO → Keep both files (your file will be versioned automatically)"
|
||||
' ── Multi-Index-Logik: Entscheidung nur einmal fragen ─────────
|
||||
Dim shouldOverwrite As Boolean
|
||||
|
||||
If multiindex = True Then
|
||||
If _multiIndexDecisionMade = False Then
|
||||
' Erste Kollision → Benutzer fragen
|
||||
Dim msg As String
|
||||
If USER_LANGUAGE <> "de-DE" Then
|
||||
msg = "A file with the same name already exists!" & vbCrLf &
|
||||
"This decision will apply to ALL remaining files in Multi-Indexing." & vbCrLf & vbCrLf &
|
||||
"YES → Replace existing files (all former versions will be deleted)" & vbCrLf &
|
||||
"NO → Keep both files (files will be versioned automatically)"
|
||||
Else
|
||||
msg = "Eine Datei mit identischem Namen existiert bereits!" & vbCrLf &
|
||||
"Diese Entscheidung gilt für ALLE weiteren Dateien im Multi-Indexing." & vbCrLf & vbCrLf &
|
||||
"JA → Bestehende Dateien ersetzen (alle vorherigen Versionen werden dabei gelöscht)" & vbCrLf &
|
||||
"NEIN → Dateien versionieren (beide Dateien werden behalten)"
|
||||
End If
|
||||
|
||||
Dim result As MsgBoxResult = MessageBox.Show(msg, "File already exists (Multi-Indexing):",
|
||||
MessageBoxButtons.YesNo, MessageBoxIcon.Question)
|
||||
|
||||
_multiIndexOverwriteExisting = (result = MsgBoxResult.Yes)
|
||||
_multiIndexDecisionMade = True
|
||||
|
||||
LOGGER.Info($"Multi-Indexing: User decision for file conflicts = {If(_multiIndexOverwriteExisting, "OVERWRITE", "VERSION")}")
|
||||
End If
|
||||
|
||||
shouldOverwrite = _multiIndexOverwriteExisting
|
||||
Else
|
||||
msg = "Eine Datei mit identischem Namen existiert bereits!" & vbCrLf &
|
||||
"JA → Bestehende Datei ersetzen (alle vorherigen Versionen werden dabei gelöscht)" & vbCrLf &
|
||||
"NEIN → Beide Dateien behalten (Ihre Datei wird automatisch versioniert)"
|
||||
' Einzeldatei → wie bisher
|
||||
Dim msg As String
|
||||
If USER_LANGUAGE <> "de-DE" Then
|
||||
msg = "A file with the same name already exists!" & vbCrLf &
|
||||
"YES → Replace the existing file (all former versions will be deleted)" & vbCrLf &
|
||||
"NO → Keep both files (your file will be versioned automatically)"
|
||||
Else
|
||||
msg = "Eine Datei mit identischem Namen existiert bereits!" & vbCrLf &
|
||||
"JA → Bestehende Datei ersetzen (alle vorherigen Versionen werden dabei gelöscht)" & vbCrLf &
|
||||
"NEIN → Beide Dateien behalten (Ihre Datei wird automatisch versioniert)"
|
||||
End If
|
||||
|
||||
Dim result As MsgBoxResult = MessageBox.Show(msg, "File already exists:",
|
||||
MessageBoxButtons.YesNo, MessageBoxIcon.Question)
|
||||
shouldOverwrite = (result = MsgBoxResult.Yes)
|
||||
End If
|
||||
Dim result As MsgBoxResult
|
||||
result = MessageBox.Show(msg, "File already exists:", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
|
||||
If result = MsgBoxResult.Yes Then
|
||||
|
||||
' ── Entscheidung ausführen ────────────────────────────────────
|
||||
If shouldOverwrite Then
|
||||
If WMMOD.RemoveFile(CURRENT_NEWFILENAME) = False Then
|
||||
' Löschen fehlgeschlagen → Abbruch
|
||||
Return False
|
||||
Else
|
||||
Dim oNormPath = WMMOD.GetNormalizedPath(CURRENT_NEWFILENAME, 0)
|
||||
|
||||
Dim oGetDoc = String.Format("select DOC_ID,RECORD_ID from TBPMO_DOC_RECORD_LINK RL INNER JOIN TBPMO_DOCRESULT_LIST DRL WITH (NOLOCK) ON RL.DOC_ID = DRL.DocID
|
||||
WHERE FULL_FILENAME = '{0}'", oNormPath)
|
||||
Dim oGetDoc = String.Format(
|
||||
"SELECT DOC_ID,RECORD_ID FROM TBPMO_DOC_RECORD_LINK RL " &
|
||||
"INNER JOIN TBPMO_DOCRESULT_LIST DRL WITH (NOLOCK) ON RL.DOC_ID = DRL.DocID " &
|
||||
"WHERE FULL_FILENAME = '{0}'", oNormPath)
|
||||
Dim oDT As DataTable = MYDB_ECM.GetDatatable(oGetDoc)
|
||||
|
||||
For Each oRow As DataRow In oDT.Rows
|
||||
@@ -87,13 +125,10 @@ Public Class frmWM_IndexFile
|
||||
}
|
||||
ClassFileResult.Delete_ResultFile(oDoc.DocId, oDoc.RecordId, 1)
|
||||
Next
|
||||
|
||||
' Löschen erfolgreich → Import wird fortgesetzt
|
||||
End If
|
||||
Else
|
||||
CURRENT_NEWFILENAME = ClassHelper.Versionierung_Datei(CURRENT_NEWFILENAME)
|
||||
End If
|
||||
|
||||
End If
|
||||
sw.Done()
|
||||
'#################################################################
|
||||
@@ -220,7 +255,7 @@ Public Class frmWM_IndexFile
|
||||
err = True
|
||||
Exit For
|
||||
End If
|
||||
|
||||
_processedFileIds.Add(CURRENT_FILEID)
|
||||
Next
|
||||
If err = True Then
|
||||
'swWORK_FILE.Done()
|
||||
@@ -389,6 +424,11 @@ Public Class frmWM_IndexFile
|
||||
Try
|
||||
Me.Cursor = Cursors.WaitCursor
|
||||
SaveMySettingsValue("WD_IndexDeleteDocs", WD_IndexDeleteDocs, "ConfigMain")
|
||||
|
||||
' ── Multi-Indexing-Flags zurücksetzen beim Start ──────────────────
|
||||
_multiIndexDecisionMade = False
|
||||
_multiIndexOverwriteExisting = False
|
||||
|
||||
If chkMultiIndexer.Visible = True And chkMultiIndexer.Checked = True Then
|
||||
' ── Erste Datei: FILE_HASH sicherstellen ───────────────────────
|
||||
For Each oRow As DataRow In CURRENT_TBPMO_FILES_USER.Rows
|
||||
@@ -410,7 +450,6 @@ Public Class frmWM_IndexFile
|
||||
"AND GUID <> " & firstFileId & " AND USER_WORK = '" & USER_USERNAME & "'")
|
||||
|
||||
If DTFiles2Work Is Nothing OrElse DTFiles2Work.Rows.Count = 0 Then
|
||||
' Keine weiteren Dateien – trotzdem Erfolg
|
||||
NEW_FILES_ADDED = True
|
||||
FILE_WORKED = True
|
||||
Me.Cursor = Cursors.Default
|
||||
@@ -478,9 +517,10 @@ Public Class frmWM_IndexFile
|
||||
Return False
|
||||
End If
|
||||
End If
|
||||
Me.Cursor = Cursors.Default
|
||||
|
||||
Catch ex As Exception
|
||||
MsgBox("Error in Indexing_File:" & vbCrLf & ex.Message, MsgBoxStyle.Critical)
|
||||
Return False
|
||||
Finally
|
||||
Me.Cursor = Cursors.Default
|
||||
End Try
|
||||
@@ -1202,24 +1242,14 @@ Public Class frmWM_IndexFile
|
||||
|
||||
Private Sub frmWM_IndexFile_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
|
||||
Try
|
||||
If IsNothing(CURRENT_FILEID) OrElse CURRENT_FILEID.ToString = "" Then
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
' Direkt in der DB prüfen – nicht auf das Flag FILE_WORKED verlassen
|
||||
Dim checkSql = $"SELECT WORKED FROM TBPMO_FILES_USER WHERE GUID = {CURRENT_FILEID}"
|
||||
Dim workedValue = MYDB_ECM.GetScalarValue(checkSql)
|
||||
|
||||
If IsNothing(workedValue) OrElse IsDBNull(workedValue) Then
|
||||
' Datensatz existiert nicht mehr – kein Löschen notwendig
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
If CBool(workedValue) = False Then
|
||||
Dim oDelete = $"DELETE FROM TBPMO_FILES_USER WHERE GUID = {CURRENT_FILEID} AND WORKED = 0"
|
||||
MYDB_ECM.ExecuteNonQuery(oDelete)
|
||||
LOGGER.Info($"TBPMO_FILES_USER: Eintrag GUID={CURRENT_FILEID} gelöscht (nicht verarbeitet).")
|
||||
' Alle nicht-verarbeiteten Dateien löschen (außer den erfolgreichen)
|
||||
Dim processedIds = String.Join(",", _processedFileIds)
|
||||
Dim oDelete = $"DELETE FROM TBPMO_FILES_USER WHERE USER_WORK = '{USER_USERNAME}' AND WORKED = 0"
|
||||
If _processedFileIds.Count > 0 Then
|
||||
oDelete &= $" AND GUID NOT IN ({processedIds})"
|
||||
End If
|
||||
MYDB_ECM.ExecuteNonQuery(oDelete)
|
||||
LOGGER.Info($"TBPMO_FILES_USER: Nicht-verarbeitete Einträge bereinigt (User: {USER_USERNAME})")
|
||||
Catch ex As Exception
|
||||
LOGGER.Warn($"Fehler beim Bereinigen von TBPMO_FILES_USER (Closing): {ex.Message}")
|
||||
End Try
|
||||
|
||||
Reference in New Issue
Block a user