Release für ewa
This commit is contained in:
@@ -527,7 +527,7 @@ Public Class ClassDOC_SEARCH
|
||||
Return False
|
||||
End Try
|
||||
End Function
|
||||
Public Shared Function SET_WD_RIGHTS(oWMObject As WINDREAMLib.WMObject, RESULT_DOCID As Integer, RESULT_DOC_PATH As String, DeleteRightsBefore As Boolean)
|
||||
Public Shared Function SET_WD_RIGHTS(oWMObject As WINDREAMLib.WMObject, pDocID As Integer, RESULT_DOC_PATH As String, DeleteRightsBefore As Boolean)
|
||||
Try
|
||||
If CURRENT_RECORD_ID = 0 Then
|
||||
MsgBox("No Record selected - Please select one!", MsgBoxStyle.Exclamation)
|
||||
@@ -535,7 +535,7 @@ Public Class ClassDOC_SEARCH
|
||||
End If
|
||||
LOGGER.Debug("#### SETTING RIGHTS FOR FILE ######")
|
||||
If ClassWDRights.Init = True Then
|
||||
If ClassWDRights.Doc_Renew_Rights(oWMObject, RESULT_DOCID, RESULT_DOC_PATH, DeleteRightsBefore) Then
|
||||
If ClassWDRights.Doc_Renew_Rights(oWMObject, pDocID, RESULT_DOC_PATH, DeleteRightsBefore) Then
|
||||
If ClassWDRights.MSG_RESULT <> "" Then
|
||||
Dim msg = "Achtung: einige Rechte konnten nicht gesetzt werden: " & vbCrLf & ClassWDRights.MSG_RESULT
|
||||
If USER_LANGUAGE <> "de-DE" Then
|
||||
|
||||
@@ -23,6 +23,8 @@ Public Class ClassDocGrid
|
||||
End Class
|
||||
|
||||
Private ReadOnly GridView As GridView
|
||||
' ✅ NEU: Flag zum Unterdrücken aller Grid-Events während Bulk-Operationen
|
||||
Public Shared Property IsBulkSelectionActive As Boolean = False
|
||||
|
||||
Public ReadOnly Property SelectedDocuments As List(Of clsWMDoc)
|
||||
Get
|
||||
@@ -66,6 +68,8 @@ Public Class ClassDocGrid
|
||||
Private Shared _checkValueChangedHandler As EventHandler
|
||||
Private Shared EnableVerboseGridLogging As Boolean = False ' PRODUKTIV: FALSE!
|
||||
Private Shared _isGridRefreshing As Boolean = False
|
||||
|
||||
|
||||
Private Shared Function Init_Table()
|
||||
Try
|
||||
Dim table As New DataTable With {
|
||||
@@ -684,11 +688,51 @@ Public Class ClassDocGrid
|
||||
End Try
|
||||
End Sub
|
||||
Public Shared Sub GVDoc_Values_FocusedRowChanged(sender As GridView, e As DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs)
|
||||
If IsBulkSelectionActive Then Return
|
||||
|
||||
LOGGER.Debug("GVDoc_Values_FocusedRowChanged triggered...")
|
||||
Try
|
||||
ClassDocGrid.GetDocItems(sender)
|
||||
If sender.FocusedRowHandle < 0 Then Return
|
||||
|
||||
' Nur die fokussierte Zeile in DT_RESULTFILES speichern (Legacy-Kompatibilität)
|
||||
If Init_Table() Then
|
||||
Dim newRow As DataRow = DT_RESULTFILES.NewRow()
|
||||
Try
|
||||
Dim oDocID = sender.GetFocusedRowCellValue(sender.Columns("DocID"))
|
||||
SELECTED_DOC_ID = If(oDocID IsNot Nothing, CInt(oDocID), 0)
|
||||
newRow("DOC_ID") = SELECTED_DOC_ID ' ✅ DOC_ID wird gesetzt
|
||||
Catch ex As Exception
|
||||
newRow("DOC_ID") = 0
|
||||
SELECTED_DOC_ID = 0
|
||||
End Try
|
||||
Try
|
||||
SELECTED_DOC_PATH = sender.GetFocusedRowCellValue(sender.Columns("FULLPATH"))
|
||||
If IsNothing(SELECTED_DOC_PATH) Then
|
||||
SELECTED_DOC_PATH = sender.GetFocusedRowCellValue(sender.Columns("FULL_FILENAME"))
|
||||
End If
|
||||
newRow("DOC_PATH") = If(SELECTED_DOC_PATH, "")
|
||||
Catch ex As Exception
|
||||
newRow("DOC_PATH") = ""
|
||||
End Try
|
||||
Try
|
||||
newRow("OBJECTTYPE") = sender.GetFocusedRowCellValue(sender.Columns("OBJECTTYPE"))
|
||||
Catch ex As Exception
|
||||
newRow("OBJECTTYPE") = ""
|
||||
End Try
|
||||
Try
|
||||
Dim dpn = sender.GetFocusedRowCellValue(sender.Columns("Displayname"))
|
||||
newRow("DISPLAYNAME") = If(IsDBNull(dpn) OrElse dpn Is Nothing, "", dpn)
|
||||
Catch ex As Exception
|
||||
newRow("DISPLAYNAME") = ""
|
||||
End Try
|
||||
' ✅ FIX: INWORK-Spalte setzen, sonst ConstraintException beim Add
|
||||
newRow("INWORK") = False
|
||||
newRow("ACCESS_RIGHT") = 0
|
||||
DT_RESULTFILES.Rows.Add(newRow)
|
||||
DT_RESULTFILES.AcceptChanges()
|
||||
End If
|
||||
Catch ex As Exception
|
||||
LOGGER.Warn("Unexpected error in GVDoc_Values_FocusedRowChanged: " & ex.Message)
|
||||
MsgBox("Unexpected error in GVDoc_Values_FocusedRowChanged: " & ex.Message, MsgBoxStyle.Critical)
|
||||
End Try
|
||||
End Sub
|
||||
Public Shared Sub gridView_MasterRowExpanded(sender As GridView, e As DevExpress.XtraGrid.Views.Grid.CustomMasterRowEventArgs)
|
||||
|
||||
@@ -5,6 +5,131 @@ Imports Microsoft.Office.Interop.Outlook
|
||||
Public Class ClassDragDrop
|
||||
Public Shared files_dropped As String()
|
||||
Public Shared Event FilesDroppedReady(ByVal files As String())
|
||||
|
||||
''' <summary>
|
||||
''' Eindeutiges Drag-Format für DocID-Transfers zwischen frmNodeNavigation-Instanzen.
|
||||
''' Muss mit frmNodeNavigation.DRAGDROP_FORMAT_DOCID identisch sein.
|
||||
''' </summary>
|
||||
Public Shared ReadOnly DRAGDROP_FORMAT_DOCID As String = "DD_RecordOrganizer_DocID"
|
||||
''' <summary>
|
||||
''' Zeichen, die im Dateinamen Probleme bei DB-Import und Dateihandling verursachen können.
|
||||
''' </summary>
|
||||
Private Shared ReadOnly ProblematicChars As Char() = {
|
||||
"'"c, "`"c, ";"c, "%"c, "&"c, "+"c, "#"c, "~"c,
|
||||
"{"c, "}"c, "["c, "]"c, "^"c, "="c, "@"c
|
||||
}
|
||||
|
||||
Private Shared Function CheckAndSanitizeFilename(filePath As String) As String
|
||||
Try
|
||||
Dim dir As String = Path.GetDirectoryName(filePath)
|
||||
Dim originalName As String = Path.GetFileNameWithoutExtension(filePath)
|
||||
Dim ext As String = Path.GetExtension(filePath)
|
||||
|
||||
' ── 1) Unicode-Normalisierung NFD → NFC ──────────────────────────────
|
||||
Dim normalizedName As String = originalName.Normalize(System.Text.NormalizationForm.FormC)
|
||||
Dim hadNormalizationIssue As Boolean = (normalizedName <> originalName)
|
||||
|
||||
If hadNormalizationIssue Then
|
||||
LOGGER?.Warn($"CheckAndSanitizeFilename: NFD-Encoding erkannt in [{originalName}{ext}]")
|
||||
|
||||
Dim normMsg As String
|
||||
If USER_LANGUAGE <> "de-DE" Then
|
||||
normMsg = $"The filename contains Unicode characters in decomposed form (NFD encoding)." &
|
||||
vbCrLf & vbCrLf &
|
||||
$"File: {originalName}{ext}" & vbCrLf & vbCrLf &
|
||||
"This causes garbled characters in the database (e.g. ü → Ru¨ckbau)." & vbCrLf & vbCrLf &
|
||||
"Please rename the file and try again." & vbCrLf &
|
||||
"The import of this file has been aborted."
|
||||
Else
|
||||
normMsg = $"Der Dateiname enthält nicht sichtbare Unicode-Zeichen in dekomponiierter Form (NFD-Kodierung)." &
|
||||
vbCrLf & vbCrLf &
|
||||
$"Datei: {originalName}{ext}" & vbCrLf & vbCrLf &
|
||||
"Dies kann zu kryptischen Zeichen in der Datenbank (z.B. ü → Ru¨ckbau) oder Problemen beim Import nach windream führen." & vbCrLf & vbCrLf &
|
||||
"Ursache dafür kann sein, das die Datei aus einer NICHT Windows Umgebung erstellt wurde. (MacOS, Linux etc)" & vbCrLf &
|
||||
"Bitte benennen Sie die Datei um und versuchen Sie es erneut." & vbCrLf &
|
||||
"Der Import dieser Datei wurde abgebrochen."
|
||||
End If
|
||||
|
||||
Dim normCaption As String = If(USER_LANGUAGE <> "de-DE", "Invalid Filename", "Ungültiger Dateiname")
|
||||
MessageBox.Show(normMsg, normCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning)
|
||||
LOGGER?.Warn($"CheckAndSanitizeFilename: Import abgebrochen wegen NFD-Problem [{originalName}{ext}].")
|
||||
Return Nothing
|
||||
End If
|
||||
|
||||
' ── 2) Leerzeichen-Probleme prüfen (führend, abschließend, doppelt) ──
|
||||
Dim hasLeadingOrTrailingSpace As Boolean = (originalName <> originalName.Trim())
|
||||
Dim hasDoubleSpace As Boolean = originalName.Contains(" ") ' zwei aufeinanderfolgende Leerzeichen
|
||||
|
||||
If hasLeadingOrTrailingSpace OrElse hasDoubleSpace Then
|
||||
LOGGER?.Warn($"CheckAndSanitizeFilename: Leerzeichen-Problem in [{originalName}{ext}]")
|
||||
|
||||
Dim spaceMsg As String
|
||||
If USER_LANGUAGE <> "de-DE" Then
|
||||
spaceMsg = $"The filename contains leading, trailing or consecutive spaces:" &
|
||||
vbCrLf & vbCrLf &
|
||||
$"File: ""{originalName}{ext}""" & vbCrLf & vbCrLf &
|
||||
"This can cause problems during database import or file comparisons." & vbCrLf & vbCrLf &
|
||||
"Please rename the file (remove extra spaces) and try again." & vbCrLf &
|
||||
"The import of this file has been aborted."
|
||||
Else
|
||||
spaceMsg = $"Der Dateiname enthält führende, abschließende oder doppelte Leerzeichen:" &
|
||||
vbCrLf & vbCrLf &
|
||||
$"Datei: ""{originalName}{ext}""" & vbCrLf & vbCrLf &
|
||||
"Dies kann beim Datenbankimport oder Dateivergleichen zu Problemen führen." & vbCrLf & vbCrLf &
|
||||
"Bitte benennen Sie die Datei um (Leerzeichen entfernen) und versuchen Sie es erneut." & vbCrLf &
|
||||
"Der Import dieser Datei wurde abgebrochen."
|
||||
End If
|
||||
|
||||
Dim spaceCaption As String = If(USER_LANGUAGE <> "de-DE", "Invalid Filename", "Ungültiger Dateiname")
|
||||
MessageBox.Show(spaceMsg, spaceCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning)
|
||||
LOGGER?.Warn($"CheckAndSanitizeFilename: Import abgebrochen wegen Leerzeichen-Problem [{originalName}{ext}].")
|
||||
Return Nothing
|
||||
End If
|
||||
|
||||
' ── 3) Problematische Sonderzeichen prüfen ───────────────────────────
|
||||
Dim found As New System.Text.StringBuilder()
|
||||
For Each c As Char In ProblematicChars
|
||||
If originalName.IndexOf(c) >= 0 Then
|
||||
If found.Length > 0 Then found.Append(" ")
|
||||
found.Append($"'{c}'")
|
||||
End If
|
||||
Next
|
||||
|
||||
If found.Length = 0 Then
|
||||
Return filePath
|
||||
End If
|
||||
|
||||
LOGGER?.Warn($"CheckAndSanitizeFilename: Problematische Zeichen in [{originalName}{ext}]: {found}")
|
||||
|
||||
Dim msg As String
|
||||
If USER_LANGUAGE <> "de-DE" Then
|
||||
msg = $"The filename contains characters that cause problems during database import or file handling:" &
|
||||
vbCrLf & vbCrLf &
|
||||
$"File: {originalName}{ext}" & vbCrLf &
|
||||
$"Problematic chars: {found}" & vbCrLf & vbCrLf &
|
||||
"Please rename the file and try again." & vbCrLf &
|
||||
"The import of this file has been aborted."
|
||||
Else
|
||||
msg = $"Der Dateiname enthält nicht sichtbare Zeichen, die beim Datenbankimport oder späteren Dateihandling in windream Probleme verursachen:" &
|
||||
vbCrLf & vbCrLf &
|
||||
$"Datei: {originalName}{ext}" & vbCrLf &
|
||||
$"Problematische Zeichen: {found}" & vbCrLf & vbCrLf &
|
||||
"Ursache dafür kann sein, das die Datei aus einer NICHT Windows Umgebung erstellt wurde. (MacOS, Linux etc)" & vbCrLf &
|
||||
"Bitte benennen Sie die Datei um und versuchen Sie es erneut." & vbCrLf &
|
||||
"Der Import dieser Datei wurde abgebrochen."
|
||||
End If
|
||||
|
||||
Dim caption As String = If(USER_LANGUAGE <> "de-DE", "Invalid Filename", "Ungültiger Dateiname")
|
||||
MessageBox.Show(msg, caption, MessageBoxButtons.OK, MessageBoxIcon.Warning)
|
||||
LOGGER?.Warn($"CheckAndSanitizeFilename: Import abgebrochen für [{originalName}{ext}].")
|
||||
Return Nothing
|
||||
|
||||
Catch ex As System.Exception
|
||||
LOGGER?.Warn("CheckAndSanitizeFilename Fehler: " & ex.Message)
|
||||
Return filePath
|
||||
End Try
|
||||
End Function
|
||||
|
||||
Public Shared Function Drop_File(e As DragEventArgs)
|
||||
Try
|
||||
LOGGER.Debug("In Drop_File....")
|
||||
@@ -12,10 +137,6 @@ Public Class ClassDragDrop
|
||||
|
||||
files_dropped = New String() {}
|
||||
|
||||
' WICHTIG: DB-Löschung NICHT im UI-Thread erzwingen.
|
||||
' => Verschiebe in aufrufenden Code per BeginInvoke/Task.Run (siehe Kommentar unten).
|
||||
' MYDB_ECM?.ExecuteNonQuery(Sql)
|
||||
|
||||
Dim hasOutlookUnicode As Boolean = e.Data.GetDataPresent("FileGroupDescriptorW")
|
||||
Dim hasOutlookAnsi As Boolean = e.Data.GetDataPresent("FileGroupDescriptor")
|
||||
Dim hasOutlookContents As Boolean = e.Data.GetDataPresent("FileContents")
|
||||
@@ -30,16 +151,14 @@ Public Class ClassDragDrop
|
||||
End If
|
||||
|
||||
'2) ATTACHMENT oder komplette Mail aus Outlook/WebView2: KEIN Descriptor+Contents, ABER FileDrop vorhanden
|
||||
' => zuerst FileDrop verarbeiten. Wenn leer (delayed rendering), dann Fallback über Outlook COM Selection/Inspector
|
||||
If hasFileDrop AndAlso (hasChromiumMime OrElse hasFileNameW) AndAlso Not hasOutlookContents Then
|
||||
LOGGER?.Debug("WebView2/Outlook Attachment or Mail: try FileDrop, skip Outlook COM initially")
|
||||
Dim ok As Boolean = HandleFileDrop(e)
|
||||
If ok Then Return True
|
||||
|
||||
' FileDrop leer -> Fallback: versuche ausgewählte Mail via Outlook COM zu speichern
|
||||
LOGGER?.Warn("FileDrop vorhanden, aber leer. Fallback auf Outlook COM für komplette Mail.")
|
||||
ScheduleOutlookComFallback()
|
||||
Return True ' Wichtig: UI-Thread nicht blockieren; wir verarbeiten asynchron.
|
||||
Return True
|
||||
End If
|
||||
|
||||
'3) Outlook Mail (.msg): Descriptor ohne Contents ODER Chromium/WebView2 Indikatoren – nur wenn KEIN FileDrop vorhanden
|
||||
@@ -70,7 +189,6 @@ Public Class ClassDragDrop
|
||||
Return True
|
||||
Else
|
||||
LOGGER?.Warn("Outlook: Keine Auswahl im Explorer und kein ActiveInspector.CurrentItem verfügbar.")
|
||||
' Namen loggen – aber zurück zum FileDrop-Fallback
|
||||
If hasFileNameW Then
|
||||
Dim namesObj As Object = e.Data.GetData(If(e.Data.GetDataPresent("FileNameW"), "FileNameW", "FileName"), True)
|
||||
Dim names As String() = TryCast(namesObj, String())
|
||||
@@ -116,13 +234,11 @@ CheckFileDrop:
|
||||
|
||||
LOGGER?.Warn("Drop_File: Kein extrahierbarer Inhalt. Bitte Attachment aus der Nachrichtenliste ziehen oder zunächst speichern.")
|
||||
Return False
|
||||
|
||||
|
||||
End Function
|
||||
|
||||
' FileDrop defensiv behandeln – erst ohne, dann mit autoConvert
|
||||
Private Shared Function HandleFileDrop(e As DragEventArgs) As Boolean
|
||||
Try
|
||||
' Versuch1: ohne AutoConvert
|
||||
Dim rawObj As Object = e.Data.GetData(DataFormats.FileDrop)
|
||||
Dim rawFiles As String() = TryCast(rawObj, String())
|
||||
If Not (rawFiles Is Nothing OrElse rawFiles.Length = 0) Then
|
||||
@@ -133,7 +249,6 @@ CheckFileDrop:
|
||||
Return True
|
||||
End If
|
||||
|
||||
' Versuch2: mit AutoConvert (delayed rendering)
|
||||
Dim convObj As Object = e.Data.GetData(DataFormats.FileDrop, True)
|
||||
Dim convFiles As String() = TryCast(convObj, String())
|
||||
If Not (convFiles Is Nothing OrElse convFiles.Length = 0) Then
|
||||
@@ -151,11 +266,21 @@ CheckFileDrop:
|
||||
Return False
|
||||
End Try
|
||||
End Function
|
||||
Private Shared Sub AppendDroppedFile(prefix As String, filePath As String)
|
||||
|
||||
''' <summary>
|
||||
''' Hängt eine Datei an files_dropped an – mit vorheriger Sonderzeichen-Prüfung.
|
||||
''' Gibt False zurück wenn der Dateiname ungültig ist.
|
||||
''' </summary>
|
||||
Private Shared Function AppendDroppedFile(prefix As String, filePath As String) As Boolean
|
||||
Dim checkedPath As String = CheckAndSanitizeFilename(filePath)
|
||||
If checkedPath Is Nothing Then
|
||||
Return False
|
||||
End If
|
||||
Dim idx As Integer = files_dropped.Length
|
||||
ReDim Preserve files_dropped(idx)
|
||||
files_dropped(idx) = prefix & filePath
|
||||
End Sub
|
||||
files_dropped(idx) = prefix & checkedPath
|
||||
Return True
|
||||
End Function
|
||||
|
||||
Private Shared Sub SaveMailItemToTemp(ByVal mailObj As Object)
|
||||
Dim subj As String = ""
|
||||
@@ -197,7 +322,6 @@ CheckFileDrop:
|
||||
Next
|
||||
|
||||
If saved Then
|
||||
' UI-Thread benachrichtigen
|
||||
Dim uiForm = If(System.Windows.Forms.Application.OpenForms.Count > 0, System.Windows.Forms.Application.OpenForms(0), Nothing)
|
||||
If uiForm IsNot Nothing Then
|
||||
uiForm.BeginInvoke(
|
||||
@@ -209,7 +333,6 @@ CheckFileDrop:
|
||||
End Try
|
||||
End Sub)
|
||||
Else
|
||||
' Falls kein Form verfügbar, zumindest Event auslösen (Listener müssen ggf. selbst marshalen)
|
||||
RaiseEvent FilesDroppedReady(files_dropped)
|
||||
End If
|
||||
Else
|
||||
@@ -270,6 +393,12 @@ CheckFileDrop:
|
||||
Public Shared Sub Drag_enter(e As DragEventArgs)
|
||||
Try
|
||||
My.Settings.WD_INDEXDOKART_SAVE = ""
|
||||
' ✅ DocID-Format hat Vorrang – Early Exit
|
||||
If e.Data.GetDataPresent(DRAGDROP_FORMAT_DOCID) Then
|
||||
e.Effect = DragDropEffects.Copy
|
||||
LOGGER?.Debug("DragEnter ... DocID-Format erkannt (Inter-Instance Transfer)")
|
||||
Return
|
||||
End If
|
||||
|
||||
Dim hasOutlookUnicode As Boolean = e.Data.GetDataPresent("FileGroupDescriptorW")
|
||||
Dim hasOutlookAnsi As Boolean = e.Data.GetDataPresent("FileGroupDescriptor")
|
||||
@@ -297,5 +426,4 @@ CheckFileDrop:
|
||||
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
End Class
|
||||
End Class
|
||||
@@ -258,24 +258,26 @@ Public Class ClassHelper
|
||||
End If
|
||||
' ###### Prozess starten ######
|
||||
|
||||
' Prozess kann Nothing sein, wenn eine bestehende Anwendung (z. B. Outlook)
|
||||
' die Datei übernimmt, ohne einen neuen Prozess zu erstellen.
|
||||
If oMyProcess IsNot Nothing Then
|
||||
Dim ProcID As Integer = oMyProcess.Id
|
||||
LOGGER.Debug($"Started process ID {ProcID} for document [{BW_DocPath}].")
|
||||
|
||||
' ID des gestarteten Prozesses holen (nicht den eigenen!)
|
||||
Dim ProcID As Integer = oMyProcess.Id
|
||||
LOGGER.Debug($"Started process ID {ProcID} for document [{BW_DocPath}].")
|
||||
oMyProcess.WaitForExit()
|
||||
|
||||
' Warten, bis der Benutzer das Dokument geschlossen hat
|
||||
oMyProcess.WaitForExit()
|
||||
|
||||
' Nachbearbeitung, wenn Format bearbeitbar ist
|
||||
oExtension = Path.GetExtension(BW_DocPath).ToLower()
|
||||
LOGGER.Debug($"Checking if file extension [{oExtension}] may change during edit...")
|
||||
|
||||
If FILE_FORMATS_CHANGE_DURING_EDIT.Contains(oExtension) And oOverrideRunPath = "" Then
|
||||
LOGGER.Debug("Create possible Document change in TBPMO_DOC_ID_CHANGED.")
|
||||
Dim oInsert = $"INSERT INTO TBPMO_DOC_ID_CHANGED (USER_ID,PROCESS_ID,VERSION_ID,OLD_DOC_ID,NEW_DOC_ID,DOC_PATH) VALUES (" &
|
||||
$"{USER_GUID},'{ProcID}',9999,{BW_DocID},0,'{BW_DocPath}')"
|
||||
MYDB_ECM.ExecuteNonQuery(oInsert)
|
||||
oExtension = Path.GetExtension(BW_DocPath).ToLower()
|
||||
LOGGER.Debug($"Checking if file extension [{oExtension}] may change during edit...")
|
||||
|
||||
If FILE_FORMATS_CHANGE_DURING_EDIT.Contains(oExtension) And oOverrideRunPath = "" Then
|
||||
LOGGER.Debug("Create possible Document change in TBPMO_DOC_ID_CHANGED.")
|
||||
Dim oInsert = $"INSERT INTO TBPMO_DOC_ID_CHANGED (USER_ID,PROCESS_ID,VERSION_ID,OLD_DOC_ID,NEW_DOC_ID,DOC_PATH) VALUES (" &
|
||||
$"{USER_GUID},'{ProcID}',9999,{BW_DocID},0,'{BW_DocPath}')"
|
||||
MYDB_ECM.ExecuteNonQuery(oInsert)
|
||||
End If
|
||||
Else
|
||||
' Kein neuer Prozess gestartet – Datei wurde von bestehender Anwendung übernommen
|
||||
LOGGER.Debug($"No new process created for [{BW_DocPath}]. File likely handled by existing application (e.g. Outlook).")
|
||||
End If
|
||||
|
||||
Catch ex As Exception
|
||||
@@ -508,7 +510,7 @@ Public Class ClassHelper
|
||||
End Function
|
||||
Public Shared Function Insert_USER_File(pFilename As String, handleType As String)
|
||||
Try
|
||||
Dim filename_only As String = Path.GetFileName(pFilename)
|
||||
Dim oImport_filename_only As String = Path.GetFileName(pFilename)
|
||||
Dim CURRENT_FILE_HASH = ""
|
||||
|
||||
If File.Exists(pFilename) Then
|
||||
@@ -539,16 +541,16 @@ Public Class ClassHelper
|
||||
Dim oMSG As String
|
||||
|
||||
If USER_LANGUAGE <> "de-DE" Then
|
||||
oMSG = $"This file has already been imported into orgFLOW!" & vbCrLf &
|
||||
$"File: [{oFilename}]" & vbCrLf &
|
||||
oMSG = $"This file [{oImport_filename_only}] has already been imported into orgFLOW!" & vbCrLf &
|
||||
$"File already imported: [{oFilename}]" & vbCrLf &
|
||||
$"Imported on: {oADDED_WHEN}" & vbCrLf &
|
||||
$"Imported by: {oUSER}" & vbCrLf &
|
||||
$"Total imports with identical content: {oDTCHECK.Rows.Count}" & vbCrLf & vbCrLf &
|
||||
"Do you want to import this file again?" & vbCrLf &
|
||||
"NO → Teh complete Import will be cancelled."
|
||||
"NO → The complete import will be cancelled."
|
||||
Else
|
||||
oMSG = $"Diese Datei wurde bereits in orgFLOW importiert!" & vbCrLf &
|
||||
$"Datei: [{oFilename}]" & vbCrLf &
|
||||
oMSG = $"Diese Datei [{oImport_filename_only}] wurde bereits in orgFLOW importiert!" & vbCrLf &
|
||||
$"Bereits vorhandene Datei: [{oFilename}]" & vbCrLf &
|
||||
$"Importiert am: {oADDED_WHEN}" & vbCrLf &
|
||||
$"Importiert von: {oUSER}" & vbCrLf &
|
||||
$"Anzahl Importe mit identischem Inhalt: {oDTCHECK.Rows.Count}" & vbCrLf & vbCrLf &
|
||||
@@ -560,10 +562,10 @@ Public Class ClassHelper
|
||||
result = MessageBox.Show(oMSG, CAPTION_CONFIRMATION, MessageBoxButtons.YesNo, MessageBoxIcon.Question)
|
||||
|
||||
If result = MsgBoxResult.No Then
|
||||
LOGGER.Info($"User wählte NEIN bei Hash-Duplikat-Check für [{filename_only}] - Import abgebrochen")
|
||||
LOGGER.Info($"User wählte NEIN bei Hash-Duplikat-Check für [{oImport_filename_only}] - Import abgebrochen")
|
||||
Return False
|
||||
Else
|
||||
LOGGER.Info($"User wählte JA bei Hash-Duplikat-Check für [{filename_only}] - fahre fort")
|
||||
LOGGER.Info($"User wählte JA bei Hash-Duplikat-Check für [{oImport_filename_only}] - fahre fort")
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
@@ -580,7 +582,7 @@ Public Class ClassHelper
|
||||
End If
|
||||
|
||||
' ✅ INSERT mit explizitem Logging
|
||||
Dim ins As String = String.Format("INSERT INTO TBPMO_FILES_USER (FILENAME2WORK, USER_WORK, HANDLE_TYPE, FILENAME_ONLY, FILE_HASH) VALUES ('{0}','{1}','{2}','{3}','{4}')", pFilename, USER_USERNAME, handleType, filename_only, CURRENT_FILE_HASH)
|
||||
Dim ins As String = String.Format("INSERT INTO TBPMO_FILES_USER (FILENAME2WORK, USER_WORK, HANDLE_TYPE, FILENAME_ONLY, FILE_HASH) VALUES ('{0}','{1}','{2}','{3}','{4}')", pFilename, USER_USERNAME, handleType, oImport_filename_only, CURRENT_FILE_HASH)
|
||||
|
||||
LOGGER.Debug($"Führe INSERT aus: [{ins}]")
|
||||
Dim insertResult = MYDB_ECM.ExecuteNonQuery(ins)
|
||||
@@ -593,12 +595,12 @@ Public Class ClassHelper
|
||||
If verifyDT IsNot Nothing AndAlso verifyDT.Rows.Count > 0 Then
|
||||
Dim insertedGUID = verifyDT.Rows(0)("GUID")
|
||||
Dim insertedADDED_WHEN = verifyDT.Rows(0)("ADDED_WHEN")
|
||||
LOGGER.Info($"INSERT ERFOLGREICH: GUID={insertedGUID}, ADDED_WHEN={insertedADDED_WHEN}, Datei=[{filename_only}]")
|
||||
LOGGER.Info($"INSERT ERFOLGREICH: GUID={insertedGUID}, ADDED_WHEN={insertedADDED_WHEN}, Datei=[{oImport_filename_only}]")
|
||||
Else
|
||||
LOGGER.Error($"INSERT fehlgeschlagen (VERIFY)! Datei=[{filename_only}], Hash=[{CURRENT_FILE_HASH}]")
|
||||
LOGGER.Error($"INSERT fehlgeschlagen (VERIFY)! Datei=[{oImport_filename_only}], Hash=[{CURRENT_FILE_HASH}]")
|
||||
End If
|
||||
Else
|
||||
LOGGER.Error($"INSERT fehlgeschlagen (ExecuteNonQuery)! Datei=[{filename_only}]")
|
||||
LOGGER.Error($"INSERT fehlgeschlagen (ExecuteNonQuery)! Datei=[{oImport_filename_only}]")
|
||||
End If
|
||||
|
||||
Return insertResult
|
||||
|
||||
@@ -230,8 +230,8 @@ Public Class ClassWDRights
|
||||
End Select
|
||||
MSG_RESULT &= String.Format("Error while working on RightChange:" & vbNewLine & "Fileright: {0}" & vbNewLine & "User: {1} " & vbNewLine & "File: {2}", _right, oFileRightString, reldocpath) & vbNewLine
|
||||
LOGGER.Warn(ex.Message)
|
||||
End Try
|
||||
Next
|
||||
End Try
|
||||
Next
|
||||
|
||||
|
||||
'Für jede Gruppe das Recht einzeln hinzufügen
|
||||
|
||||
Reference in New Issue
Block a user