Zu testen bei ewa

This commit is contained in:
Developer01
2026-03-18 15:31:59 +01:00
parent a50e7e3c55
commit 1469063ad7
7 changed files with 591 additions and 266 deletions

View File

@@ -41,11 +41,18 @@ Public Class frmWM_IndexFile
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
LOGGER.Debug($" WORK_FILE aufgerufen: CURRENT_FILEID={CURRENT_FILEID}, Datei={Me.txtFilepath.Text}")
LOGGER.Debug($"=== WORK_FILE START: multiindex={multiindex} ===")
LOGGER.Debug($" Datei: {ImportFilePath}")
LOGGER.Debug($" Flags: _multiIndexDecisionMade={_multiIndexDecisionMade}, _multiIndexOverwriteExisting={_multiIndexOverwriteExisting}")
CURRENT_DOC_ID = Nothing
Dim odeleteRights As Boolean = True
Dim oSQL = $"SELECT GUID FROM TBPMO_FILES_USER WHERE FILENAME2WORK = '{ImportFilePath}' AND WORKED = 0 AND USER_WORK = '{Environment.UserName}'"
CURRENT_FILEID = MYDB_ECM.GetScalarValue(oSQL)
If CURRENT_FILEID = 0 OrElse CURRENT_FILEID = Nothing Then
LOGGER.Error("WORK_FILE: CURRENT_FILEID ist ungültig (0 oder Nothing)!")
Return False
End If
CURRENT_DOKARTSTRING = vDokart
Dim err As Boolean = False
'#################################################################
@@ -64,6 +71,7 @@ Public Class frmWM_IndexFile
If multiindex = True Then
If _multiIndexDecisionMade = False Then
LOGGER.Debug(" ZEIGE DIALOG für Multi-Index-Entscheidung")
' Erste Kollision → Benutzer fragen
Dim msg As String
If USER_LANGUAGE <> "de-DE" Then
@@ -84,12 +92,16 @@ Public Class frmWM_IndexFile
_multiIndexOverwriteExisting = (result = MsgBoxResult.Yes)
_multiIndexDecisionMade = True
LOGGER.Info($"Multi-Indexing: User decision for file conflicts = {If(_multiIndexOverwriteExisting, "OVERWRITE", "VERSION")}")
LOGGER.Debug($" Benutzer-Entscheidung: {If(_multiIndexOverwriteExisting, "OVERWRITE", "VERSION")}")
LOGGER.Debug($" Flags NACH Dialog: _multiIndexDecisionMade={_multiIndexDecisionMade}, _multiIndexOverwriteExisting={_multiIndexOverwriteExisting}")
Else
LOGGER.Debug($" Verwende GESPEICHERTE Entscheidung: {If(_multiIndexOverwriteExisting, "OVERWRITE", "VERSION")}")
End If
shouldOverwrite = _multiIndexOverwriteExisting
Else
' Einzeldatei → wie bisher
LOGGER.Debug(" Einzeldatei: Zeige Dialog")
Dim msg As String
If USER_LANGUAGE <> "de-DE" Then
msg = "A file with the same name already exists!" & vbCrLf &
@@ -104,10 +116,12 @@ Public Class frmWM_IndexFile
Dim result As MsgBoxResult = MessageBox.Show(msg, "File already exists:",
MessageBoxButtons.YesNo, MessageBoxIcon.Question)
shouldOverwrite = (result = MsgBoxResult.Yes)
LOGGER.Debug($" Einzeldatei-Entscheidung: {If(shouldOverwrite, "OVERWRITE", "VERSION")}")
End If
' ── Entscheidung ausführen ────────────────────────────────────
If shouldOverwrite Then
LOGGER.Debug(" Führe OVERWRITE aus")
If WMMOD.RemoveFile(CURRENT_NEWFILENAME) = False Then
Return False
Else
@@ -127,8 +141,12 @@ Public Class frmWM_IndexFile
Next
End If
Else
LOGGER.Debug(" Führe VERSIONIERUNG aus")
CURRENT_NEWFILENAME = ClassHelper.Versionierung_Datei(CURRENT_NEWFILENAME)
LOGGER.Debug($" Neuer Dateiname: {CURRENT_NEWFILENAME}")
End If
Else
LOGGER.Debug(" Datei existiert NICHT, kein Konflikt")
End If
sw.Done()
'#################################################################
@@ -291,15 +309,23 @@ Public Class frmWM_IndexFile
stg1 = "Success:"
End If
If multiindex = False Then CURRENT_NOTIFICATION_MSG = stg
MYDB_ECM.GetScalarValue("UPDATE TBPMO_FILES_USER SET WORKED = 1 WHERE GUID = " & CURRENT_FILEID)
For Each row As DataRow In CURRENT_TBPMO_FILES_USER.Rows
If row.Item("GUID") = CURRENT_FILEID Then
row.Item("WORKED") = 1
If IsNothing(droptype) Then
droptype = row.Item("HANDLE_TYPE")
End If
End If
Next
' Neu - NUR wenn NICHT im Multi-Index-Modus:
If multiindex = False Then
MYDB_ECM.ExecuteNonQuery("UPDATE TBPMO_FILES_USER SET WORKED = 1 WHERE GUID = " & CURRENT_FILEID)
LOGGER.Debug($" Einzeldatei als WORKED markiert: GUID={CURRENT_FILEID}")
' ✅ DEBUG: Was steht JETZT in der DB?
Dim debugSQL = $"SELECT GUID, WORKED, FILENAME_ONLY FROM TBPMO_FILES_USER WHERE USER_WORK = '{USER_USERNAME}' ORDER BY GUID DESC"
Dim debugDT = MYDB_ECM.GetDatatable(debugSQL)
LOGGER.Debug($" ═══ DEBUG NACH UPDATE ═══")
LOGGER.Debug($" Anzahl Dateien in DB: {debugDT.Rows.Count}")
For Each row As DataRow In debugDT.Rows
LOGGER.Debug($" - GUID={row("GUID")}, WORKED={row("WORKED")}, Datei={row("FILENAME_ONLY")}")
Next
LOGGER.Debug($" ═══════════════════════")
End If
If IsNothing(CURRENT_DOC_ID) Then
sw = New SW("GettingDocID")
sql = String.Format("SELECT DocID FROM VWPMO_DOC_SYNC WHERE FULL_FILENAME = '{0}' AND CONVERT(DATE,Change_DateTime) = CONVERT(DATE,GETDATE())", CURRENT_FILEIN_WD)
@@ -425,31 +451,70 @@ Public Class frmWM_IndexFile
Me.Cursor = Cursors.WaitCursor
SaveMySettingsValue("WD_IndexDeleteDocs", WD_IndexDeleteDocs, "ConfigMain")
' ── Multi-Indexing-Flags zurücksetzen beim Start ──────────────────
LOGGER.Debug("=== HANDLE_FILE START ===")
LOGGER.Debug($" Flags VOR Reset: _multiIndexDecisionMade={_multiIndexDecisionMade}, _multiIndexOverwriteExisting={_multiIndexOverwriteExisting}")
_multiIndexDecisionMade = False
_multiIndexOverwriteExisting = False
LOGGER.Debug($" Flags NACH Reset: _multiIndexDecisionMade={_multiIndexDecisionMade}, _multiIndexOverwriteExisting={_multiIndexOverwriteExisting}")
LOGGER.Debug($" chkMultiIndexer: Visible={chkMultiIndexer.Visible}, Checked={chkMultiIndexer.Checked}")
If chkMultiIndexer.Visible = True And chkMultiIndexer.Checked = True Then
' ── Erste Datei: FILE_HASH sicherstellen ───────────────────────
LOGGER.Debug("=== MULTI-INDEXING MODUS AKTIV ===")
' ── Erste Datei: FILE_HASH und CURRENT_FILEID sicherstellen ───
Dim firstFileId As Integer = CURRENT_FILEID
Dim firstFileName As String = CURRENT_FILENAME
For Each oRow As DataRow In CURRENT_TBPMO_FILES_USER.Rows
If oRow.Item("GUID") = CURRENT_FILEID Then
FILE_HASH = oRow.Item("FILE_HASH")
firstFileName = oRow.Item("FILENAME2WORK")
Exit For
End If
Next
If WORK_FILE(Me.txtFilepath.Text, Me.PATHTextBox.Text, doctype_id, My.Settings.WD_INDEXDOKART_SAVE, True) = False Then
LOGGER.Debug($" Verarbeite erste Datei (CURRENT_FILEID={firstFileId}): {firstFileName}")
If WORK_FILE(firstFileName, Me.PATHTextBox.Text, doctype_id, My.Settings.WD_INDEXDOKART_SAVE, True) = False Then
Me.Cursor = Cursors.Default
LOGGER.Warn(" Erste Datei fehlgeschlagen!")
Return False
End If
' ── Erste Datei erfolgreich: GUID merken, Folgedateien laden ──
Dim firstFileId = CURRENT_FILEID
Dim DTFiles2Work As DataTable = MYDB_ECM.GetDatatable(
"SELECT * FROM TBPMO_FILES_USER WHERE WORKED = 0 " &
"AND GUID <> " & firstFileId & " AND USER_WORK = '" & USER_USERNAME & "'")
LOGGER.Debug(" Erste Datei erfolgreich verarbeitet")
If DTFiles2Work Is Nothing OrElse DTFiles2Work.Rows.Count = 0 Then
' ── WICHTIG: Erste Datei als WORKED markieren UND DataTable neu laden ──
LOGGER.Debug($" Markiere erste Datei als WORKED: GUID={firstFileId}")
MYDB_ECM.ExecuteNonQuery($"UPDATE TBPMO_FILES_USER SET WORKED = 1 WHERE GUID = {firstFileId}")
LOGGER.Debug(" Lade aktualisierte Dateiliste aus Datenbank...")
' ✅ SCHRITT 1: Prüfe mit COUNT(*), wie viele Dateien in der DB sind
Dim countSQL = $"SELECT COUNT(*) FROM TBPMO_FILES_USER WHERE USER_WORK = '{USER_USERNAME}' AND WORKED = 0"
Dim remainingCount = CInt(MYDB_ECM.GetScalarValue(countSQL))
LOGGER.Debug($" SQL COUNT ergab: {remainingCount} verbleibende Dateien")
' ✅ SCHRITT 2: Nur wenn COUNT > 0, dann DataTable laden
If remainingCount > 0 Then
CURRENT_TBPMO_FILES_USER = MYDB_ECM.GetDatatable("SELECT *, CONVERT(BIT,0) AS DELETE_FILE FROM TBPMO_FILES_USER " &
"WHERE USER_WORK = '" & USER_USERNAME & "' AND WORKED = 0")
If CURRENT_TBPMO_FILES_USER Is Nothing Then
LOGGER.Error(" WARNUNG: GetDatatable gab Nothing zurück, obwohl COUNT > 0!")
CURRENT_TBPMO_FILES_USER = New DataTable()
Else
LOGGER.Debug($" DataTable geladen: {CURRENT_TBPMO_FILES_USER.Rows.Count} Zeilen")
End If
Else
LOGGER.Info(" SQL COUNT ergab 0 Dateien")
CURRENT_TBPMO_FILES_USER = New DataTable()
End If
' ── Folgedateien aus aktualierter DataTable verarbeiten ──
If CURRENT_TBPMO_FILES_USER Is Nothing OrElse CURRENT_TBPMO_FILES_USER.Rows.Count = 0 Then
LOGGER.Info(" Keine weiteren Dateien vorhanden")
NEW_FILES_ADDED = True
FILE_WORKED = True
Me.Cursor = Cursors.Default
@@ -457,12 +522,24 @@ Public Class frmWM_IndexFile
Return True
End If
LOGGER.Debug($" Weitere Dateien gefunden: {CURRENT_TBPMO_FILES_USER.Rows.Count}")
LOGGER.Debug($" Flags VOR Schleife: _multiIndexDecisionMade={_multiIndexDecisionMade}, _multiIndexOverwriteExisting={_multiIndexOverwriteExisting}")
Dim err As Boolean = False
For Each filerow As DataRow In DTFiles2Work.Rows
CURRENT_FILEID = filerow.Item("GUID")
CURRENT_FILENAME = filerow.Item("FILENAME2WORK")
FILE_HASH = filerow.Item("FILE_HASH")
aktFiledropped = CURRENT_FILENAME
Dim fileCount As Integer = 0
For Each filerow As DataRow In CURRENT_TBPMO_FILES_USER.Rows
fileCount += 1
Dim currentFileId As Integer = filerow.Item("GUID")
Dim currentFileName As String = filerow.Item("FILENAME2WORK")
Dim currentFileHash As String = filerow.Item("FILE_HASH")
CURRENT_FILEID = currentFileId
CURRENT_FILENAME = currentFileName
FILE_HASH = currentFileHash
aktFiledropped = currentFileName
LOGGER.Debug($" [{fileCount}/{CURRENT_TBPMO_FILES_USER.Rows.Count}] Verarbeite Datei: {currentFileName}, FILEID={currentFileId}")
LOGGER.Debug($" Flags: _multiIndexDecisionMade={_multiIndexDecisionMade}, _multiIndexOverwriteExisting={_multiIndexOverwriteExisting}")
Dim handleType As String = filerow.Item("HANDLE_TYPE")
Select Case handleType
@@ -476,10 +553,15 @@ Public Class frmWM_IndexFile
droptype = handleType
End Select
If WORK_FILE(CURRENT_FILENAME, Me.PATHTextBox.Text, doctype_id, My.Settings.WD_INDEXDOKART_SAVE, True) = False Then
If WORK_FILE(currentFileName, Me.PATHTextBox.Text, doctype_id, My.Settings.WD_INDEXDOKART_SAVE, True) = False Then
err = True
LOGGER.Warn($" Datei fehlgeschlagen!")
Exit For
End If
LOGGER.Debug($" Datei erfolgreich verarbeitet")
LOGGER.Debug($" Markiere Datei als WORKED: GUID={currentFileId}")
MYDB_ECM.ExecuteNonQuery($"UPDATE TBPMO_FILES_USER SET WORKED = 1 WHERE GUID = {currentFileId}")
Next
Me.Cursor = Cursors.Default
@@ -493,6 +575,7 @@ Public Class frmWM_IndexFile
stg = "All files were transferred via Multiindexing to windream"
stg1 = "Success:"
End If
LOGGER.Info("=== MULTI-INDEXING ERFOLGREICH ABGESCHLOSSEN ===")
MsgBox(stg, MsgBoxStyle.Information, stg1)
Me.Close()
Return True
@@ -501,25 +584,123 @@ Public Class frmWM_IndexFile
Return False
Else
' ── Einzeldatei ───────────────────────────────────────────────
If WORK_FILE(Me.txtFilepath.Text, Me.PATHTextBox.Text, doctype_id, My.Settings.WD_INDEXDOKART_SAVE, False) = True Then
NEW_FILES_ADDED = True
FILE_WORKED = True
' ✅ EINZELDATEI MODUS
LOGGER.Debug("=== EINZELDATEI MODUS ===")
' ✅ WICHTIG: CURRENT_FILEID VOR WORK_FILE setzen!
For Each oRow As DataRow In CURRENT_TBPMO_FILES_USER.Rows
If oRow.Item("FILENAME2WORK") = Me.txtFilepath.Text Then
CURRENT_FILEID = CInt(oRow("GUID"))
FILE_HASH = oRow("FILE_HASH").ToString()
LOGGER.Debug($" Datei gefunden in CURRENT_TBPMO_FILES_USER: FILEID={CURRENT_FILEID}")
Exit For
End If
Next
' ✅ Validierung NACH Schleife
If CURRENT_FILEID = 0 Then
LOGGER.Error($" Datei nicht gefunden in CURRENT_TBPMO_FILES_USER: {Me.txtFilepath.Text}")
Me.Cursor = Cursors.Default
MessageBox.Show("Die Datei konnte nicht in der Verarbeitungsliste gefunden werden!",
"Fehler:", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return False
End If
If WORK_FILE(Me.txtFilepath.Text, Me.PATHTextBox.Text, doctype_id, My.Settings.WD_INDEXDOKART_SAVE, False) = False Then
Me.Cursor = Cursors.Default
MessageBox.Show("Import to windream was not successful." & vbCrLf &
"Check the log for further information!",
"Unexpected Error in windream-Stream:",
MessageBoxButtons.OK, MessageBoxIcon.Error)
Return False
End If
' ── Datei erfolgreich verarbeitet ──
NEW_FILES_ADDED = True
FILE_WORKED = True
LOGGER.Debug(" Einzeldatei erfolgreich verarbeitet")
' ✅ Prüfen, ob weitere Dateien vorhanden sind
LOGGER.Debug(" Lade aktualisierte Dateiliste für Einzeldatei-Check...")
' ✅ SCHRITT 1: Prüfe mit COUNT(*), wie viele Dateien in der DB sind
Dim countSQL = $"SELECT COUNT(*) FROM TBPMO_FILES_USER WHERE USER_WORK = '{USER_USERNAME}' AND WORKED = 0"
Dim remainingCount = CInt(MYDB_ECM.GetScalarValue(countSQL))
LOGGER.Debug($" ═══ SQL COUNT NACH WORK_FILE ═══")
LOGGER.Debug($" COUNT(*) ergab: {remainingCount} verbleibende Dateien")
' ✅ SCHRITT 2: Dateiliste laden UND vergleichen
ClassHelper.Create_USER_FILE_TABLE()
If CURRENT_TBPMO_FILES_USER Is Nothing Then
LOGGER.Error($" ❌ KRITISCHER FEHLER: Create_USER_FILE_TABLE gab Nothing zurück!")
ElseIf CURRENT_TBPMO_FILES_USER.Rows.Count <> remainingCount Then
LOGGER.Error($" ❌ KRITISCHER FEHLER: COUNT ergab {remainingCount}, aber DataTable hat {CURRENT_TBPMO_FILES_USER.Rows.Count} Zeilen!")
LOGGER.Error($" ❌ VERDACHT: Race-Condition oder Transaction-Problem!")
Else
LOGGER.Debug($" ✅ OK: COUNT und DataTable stimmen überein ({remainingCount} Dateien)")
End If
LOGGER.Debug($" ═══════════════════════════════")
If CURRENT_TBPMO_FILES_USER IsNot Nothing AndAlso CURRENT_TBPMO_FILES_USER.Rows.Count > 0 Then
LOGGER.Info($" Einzeldatei-Modus: Weitere {CURRENT_TBPMO_FILES_USER.Rows.Count} Dateien vorhanden - aktualisiere Formular")
' ── Lade ERSTE Datei aus der NEUEN Liste ──
Dim nextFile = CURRENT_TBPMO_FILES_USER.Rows(0)
CURRENT_FILEID = CInt(nextFile("GUID"))
CURRENT_FILENAME = nextFile("FILENAME2WORK").ToString()
FILE_HASH = nextFile("FILE_HASH").ToString()
aktFiledropped = CURRENT_FILENAME
txtFilepath.Text = CURRENT_FILENAME
LOGGER.Debug($" Nächste Datei geladen: FILEID={CURRENT_FILEID}, Datei={CURRENT_FILENAME}")
' ── Update MULTIFILES-Anzeige ──
MULTIFILES = CURRENT_TBPMO_FILES_USER.Rows.Count - 1
If MULTIFILES > 0 Then
chkMultiIndexer.Text = "Multi-Indexing - Alle nachfolgenden Dateien (" & MULTIFILES & ") identisch indexieren"
chkMultiIndexer.Visible = True
chkMultiIndexer.Checked = False
Else
chkMultiIndexer.Visible = False
End If
' ── Handle-Type setzen ──
Dim handleType As String = nextFile("HANDLE_TYPE").ToString()
Select Case handleType
Case "@DROPFROMFSYSTEM@"
droptype = "dragdrop file"
chkdelete_origin.Visible = True
Case "@OUTLOOK_ATTMNT@"
droptype = "dragdrop attachment"
chkdelete_origin.Visible = True
Case "@OUTLOOKMESSAGE@"
droptype = "dragdrop message"
chkdelete_origin.Visible = True
Case "SCAN"
droptype = "scan"
chkdelete_origin.Visible = False
Case Else
droptype = handleType
chkdelete_origin.Visible = False
End Select
Me.Cursor = Cursors.Default
LOGGER.Debug(" Formular bleibt offen für nächste Datei")
Return True ' ← Formular bleibt offen!
Else
' ✅ Keine weiteren Dateien → Formular schließen
LOGGER.Info(" Einzeldatei-Modus: Keine weiteren Dateien - schließe Formular")
Me.Cursor = Cursors.Default
Me.Close()
Return True
Else
Me.Cursor = Cursors.Default
MessageBox.Show("Import to windream was not successful." & vbCrLf &
"Check the log for further information!",
"Unexpected Error in windream-Stream:",
MessageBoxButtons.OK, MessageBoxIcon.Error)
Return False
End If
End If
Catch ex As Exception
MsgBox("Error in Indexing_File:" & vbCrLf & ex.Message, MsgBoxStyle.Critical)
LOGGER.Error($"Handle_File Exception: {ex.Message}{vbCrLf}{ex.StackTrace}")
Return False
Finally
Me.Cursor = Cursors.Default
@@ -1113,37 +1294,63 @@ Public Class frmWM_IndexFile
CURRENT_FILENAME = ""
Me.VWDDINDEX_AUTOMTableAdapter.Connection.ConnectionString = MYDB_ECM.CurrentConnectionString
chkMultiIndexer.Checked = False
' ── Multi-Indexing-Flags beim Formular-Load zurücksetzen ──
LOGGER.Debug("=== FORM LOAD: Flags zurücksetzen ===")
LOGGER.Debug($" VOR Reset: _multiIndexDecisionMade = {_multiIndexDecisionMade}, _multiIndexOverwriteExisting = {_multiIndexOverwriteExisting}")
_multiIndexDecisionMade = False
_multiIndexOverwriteExisting = False
_processedFileIds.Clear()
LOGGER.Debug($" NACH Reset: _multiIndexDecisionMade = {_multiIndexDecisionMade}, _multiIndexOverwriteExisting = {_multiIndexOverwriteExisting}")
LOGGER.Debug($" ProcessedFileIds Count: {_processedFileIds.Count}")
LOGGER.Debug("frmWD_Index_Dokart_Load")
chkdelete_origin.Checked = False
chkdelete_origin.Visible = False
Dim oReconnect = WMMOD.SessionReconnect
'= New Windream(LOGCONFIG, False, WMDriveLetter, WMPATH_PREFIX, True, WM_SERVER, WM_USER, WM_USER_PW, WM_DOMAIN)
' ── WICHTIG: Prüfen, ob überhaupt Dateien vorhanden sind ──
If CURRENT_TBPMO_FILES_USER Is Nothing OrElse CURRENT_TBPMO_FILES_USER.Rows.Count = 0 Then
LOGGER.Info("frmWD_Index_Dokart_Load: Keine Dateien vorhanden - Formular wird geschlossen")
Me.Close()
Exit Sub
End If
Dim oHandleType As String
For Each oRow As DataRow In CURRENT_TBPMO_FILES_USER.Rows
If oRow.Item("GUID") = CURRENT_FILEID Then
CURRENT_FILENAME = oRow.Item("FILENAME2WORK")
oHandleType = oRow.Item("HANDLE_TYPE")
FILE_HASH = oRow.Item("FILE_HASH")
Exit For ' ← Hinzugefügt: Schleife verlassen, wenn gefunden
End If
Next
If CURRENT_FILENAME = "" Then
MsgBox("Chekc the Temp Files Table, as it seems to be empty!", MsgBoxStyle.Exclamation)
LOGGER.Warn("Check the Temp Files Table, as it seems to be empty or CURRENT_FILEID not found!")
MsgBox("Check the Temp Files Table, as it seems to be empty!", MsgBoxStyle.Exclamation)
Me.Close() ' ← Formular schließen statt Exit Sub
Exit Sub
End If
MULTIFILES = 0
For Each row As DataRow In CURRENT_TBPMO_FILES_USER.Rows
If row.Item("GUID") <> CURRENT_FILEID Then
MULTIFILES += 1
End If
Next
' ── KORREKTUR: Zähle alle Dateien außer der aktuellen ──
MULTIFILES = CURRENT_TBPMO_FILES_USER.Rows.Count - 1
LOGGER.Debug($" MULTIFILES berechnet: Gesamt={CURRENT_TBPMO_FILES_USER.Rows.Count}, MULTIFILES={MULTIFILES}")
If MULTIFILES > 0 Then
chkMultiIndexer.Text = "Multi-Indexing - Alle nachfolgenden Dateien (" & MULTIFILES & ") identisch indexieren"
chkMultiIndexer.Visible = True
LOGGER.Debug($" chkMultiIndexer: Visible=True, Text={chkMultiIndexer.Text}")
Else
chkMultiIndexer.Visible = False
LOGGER.Debug(" chkMultiIndexer: Visible=False (keine weiteren Dateien)")
End If
aktFiledropped = CURRENT_FILENAME
txtFilepath.Text = aktFiledropped
If oHandleType = "@DROPFROMFSYSTEM@" Then
droptype = "dragdrop file"
chkdelete_origin.Visible = True
@@ -1159,21 +1366,19 @@ Public Class frmWM_IndexFile
ElseIf oHandleType = "SCAM" Then
droptype = "scan"
End If
Dim sql = String.Format("SELECT FORMVIEW_ID, FORM_ID, FORM_TITLE, DOKUMENTTYPE_ID, DOKUMENTTYPE, PATH, SHORTNAME, OBJECT_TYPE, FW_DOCTYPE_ID FROM VWPMO_DOKUMENTTYPES WHERE (FORMVIEW_ID = {0}) " &
"ORDER BY SEQUENCE, DOKUMENTTYPE", CURRENT_FORMVIEW_ID)
DTVWPMO_DOKUMENTTYPES = MYDB_ECM.GetDatatable(sql)
'VWPMO_DOKUMENTTYPESTableAdapter.Connection.ConnectionString = MYDB_ECM.CurrentConnectionString
'Me.VWPMO_DOKUMENTTYPESTableAdapter.Fill(Me.DD_DMSDataSet.VWPMO_DOKUMENTTYPES, CURRENT_FORMVIEW_ID)
Dim sql = String.Format("SELECT FORMVIEW_ID, FORM_ID, FORM_TITLE, DOKUMENTTYPE_ID, DOKUMENTTYPE, PATH, SHORTNAME, OBJECT_TYPE, FW_DOCTYPE_ID FROM VWPMO_DOKUMENTTYPES WHERE (FORMVIEW_ID = {0}) " &
"ORDER BY SEQUENCE, DOKUMENTTYPE", CURRENT_FORMVIEW_ID)
DTVWPMO_DOKUMENTTYPES = MYDB_ECM.GetDatatable(sql)
CURRENT_REDUNDANT_FORM_ID = 0
CURRENT_REDUNDANT_FORMVIEW_ID = 0
If DTVWPMO_DOKUMENTTYPES.Rows.Count = 0 Then ' DD_DMSDataSet.VWPMO_DOKUMENTTYPES.Rows.Count = 0 Then
If DTVWPMO_DOKUMENTTYPES.Rows.Count = 0 Then
If CURRENT_ENTITY_REDUNDANT_ID <> 0 Then
Dim FVID = MYDB_ECM.GetScalarValue(String.Format("SELECT GUID FROM TBPMO_FORM_VIEW WHERE FORM_ID = {0} and SCREEN_ID = 1", CURRENT_ENTITY_REDUNDANT_ID), True)
'Me.VWPMO_DOKUMENTTYPESTableAdapter.Fill(Me.DD_DMSDataSet.VWPMO_DOKUMENTTYPES, FVID)
If DTVWPMO_DOKUMENTTYPES.Rows.Count = 0 Then 'DD_DMSDataSet.VWPMO_DOKUMENTTYPES.Rows.Count = 0 Then
If DTVWPMO_DOKUMENTTYPES.Rows.Count = 0 Then
MsgBox("No documenttypes for the redundant entity configured either! Indexing is not possible!" & vbCrLf & "Please check the configuration!", MsgBoxStyle.Exclamation)
Me.Close()
Exit Sub
Else
LOGGER.Debug("Redundant EntityID: " & CURRENT_ENTITY_REDUNDANT_ID)
@@ -1184,12 +1389,15 @@ Public Class frmWM_IndexFile
End If
Else
MsgBox("No documenttypes for this entity configured! Indexing is not possible!" & vbCrLf & "Please check the configuration!", MsgBoxStyle.Exclamation)
Me.Close()
Exit Sub
End If
End If
Catch ex As Exception
LOGGER.Error($"Error in frmWD_Index_Dokart_Load: {ex.Message}")
MsgBox("Error in frmWD_Index_Dokart_Load:" & vbCrLf & ex.Message, MsgBoxStyle.Critical)
Me.Close()
End Try
End Sub
@@ -1242,19 +1450,63 @@ Public Class frmWM_IndexFile
Private Sub frmWM_IndexFile_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
Try
' 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})"
' ── Multi-Indexing-Flags zurücksetzen ──
_multiIndexDecisionMade = False
_multiIndexOverwriteExisting = False
' ✅ WICHTIG: Liste NEU LADEN, bevor wir zählen!
LOGGER.Debug("=== CLOSING: Lade aktuelle Dateiliste ===")
ClassHelper.Create_USER_FILE_TABLE() ' ← Lädt CURRENT_TBPMO_FILES_USER NEU!
' ── Prüfen, ob noch Dateien zu verarbeiten sind ──
If CURRENT_TBPMO_FILES_USER IsNot Nothing AndAlso CURRENT_TBPMO_FILES_USER.Rows.Count > 0 Then
' Es gibt noch nicht verarbeitete Dateien → Benutzer fragen
LOGGER.Debug($"TBPMO_FILES_USER: Formular wird geschlossen, aber {CURRENT_TBPMO_FILES_USER.Rows.Count} Dateien sind noch vorhanden.")
Dim msg As String
Dim title As String
If USER_LANGUAGE <> "de-DE" Then
msg = $"There are still {CURRENT_TBPMO_FILES_USER.Rows.Count} unprocessed file(s)!" & vbCrLf & vbCrLf &
"Do you really want to cancel the import?" & vbCrLf & vbCrLf &
"YES → Cancel import and delete all pending files" & vbCrLf &
"NO → Continue indexing"
title = "Cancel Import?"
Else
msg = $"Es sind noch {CURRENT_TBPMO_FILES_USER.Rows.Count} nicht verarbeitete Datei(en) vorhanden!" & vbCrLf & vbCrLf &
"Möchten Sie den Import wirklich abbrechen?" & vbCrLf & vbCrLf &
"JA → Import abbrechen und alle ausstehenden Dateien löschen" & vbCrLf &
"NEIN → Indexierung fortsetzen"
title = "Import abbrechen?"
End If
Dim result As MsgBoxResult = MessageBox.Show(msg, title, MessageBoxButtons.YesNo, MessageBoxIcon.Warning)
If result = MsgBoxResult.No Then
' Benutzer will NICHT abbrechen → Formular-Schließen verhindern
LOGGER.Info("Benutzer hat Abbruch verhindert - Formular bleibt offen")
e.Cancel = True
Exit Sub
Else
' Benutzer will abbrechen → Alle Dateien löschen
LOGGER.Info("Benutzer hat Abbruch bestätigt - Lösche alle ausstehenden Dateien")
Dim oDelete = $"DELETE FROM TBPMO_FILES_USER WHERE USER_WORK = '{USER_USERNAME}' AND WORKED = 0"
MYDB_ECM.ExecuteNonQuery(oDelete)
LOGGER.Info($"TBPMO_FILES_USER: {CURRENT_TBPMO_FILES_USER.Rows.Count} nicht-verarbeitete Einträge wurden gelöscht (User: {USER_USERNAME})")
' ── WICHTIG: DataTable leeren, damit Load-Event korrekt reagiert ──
CURRENT_TBPMO_FILES_USER.Clear()
LOGGER.Debug("CURRENT_TBPMO_FILES_USER wurde geleert")
End If
Else
' Keine Dateien mehr vorhanden → Normal schließen, aufräumen
LOGGER.Debug("Keine ausstehenden Dateien mehr vorhanden ")
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
End Sub
Private Sub frmWM_IndexFile_Closed(sender As Object, e As EventArgs) Handles Me.Closed
Try
Cursor = Cursors.Default
@@ -1262,4 +1514,8 @@ Public Class frmWM_IndexFile
End Try
End Sub
Private Sub chkMultiIndexer_CheckedChanged(sender As Object, e As EventArgs) Handles chkMultiIndexer.CheckedChanged
LOGGER.Debug($"chkMultiIndexer.CheckedChanged: {chkMultiIndexer.Checked}")
End Sub
End Class