3 Commits

Author SHA1 Message Date
Developer01
3dd884096b Verbesserung der SQL-Logik und Debugging-Optimierung
Die Sichtbarkeitslogik in `ClassRefreshHelper.vb` wurde verbessert, um ungültige Indizes zu vermeiden. In `frmMain.vb` wurde die Methode `PrepareSQLWithReplacements` erweitert, um einen zusätzlichen Parameter `oProfileID` zu unterstützen, was die Flexibilität bei der SQL-Verarbeitung erhöht.

Zusätzliche Debug-Logs wurden hinzugefügt, um die Nachvollziehbarkeit zu verbessern, insbesondere bei SQL-Fehlern, Ladeprozessen und TreeList-Operationen. Die Fehlerbehandlung wurde optimiert, um spezifischere Warnungen und Validierungen zu ermöglichen.

Weitere Verbesserungen umfassen die Behandlung von `CUSTOM_OVERVIEW_SQL`, die Validierung des Overlays in `Decide_Load` und die Optimierung der SQL-Verarbeitung in `LoadOverviewData`. Allgemeine Code-Qualitätsmaßnahmen wie Kommentare und Strukturverbesserungen wurden ebenfalls vorgenommen.
2026-05-28 16:48:32 +02:00
Developer01
a386fdd841 Fehlerbehandlung für oExportFilename verbessert
Eine zusätzliche Bedingung wurde hinzugefügt, um den Fall zu behandeln, dass `oExportFilename` den Wert `Nothing` hat. In diesem Fall wird eine Log-Nachricht mit dem SQL-Befehl protokolliert und eine Fehlermeldung angezeigt, die den Benutzer auffordert, das Admin-Team zu informieren.

Außerdem wurde die bestehende Fehlermeldung angepasst, indem `vbcrlf` durch `vbCrLf` ersetzt wurde, um den Code konsistenter zu gestalten.
2026-05-19 09:11:08 +02:00
Developer01
c249b5c591 Neue Datei hinzugefügt und Logging verbessert
In der Datei Product.wxs wurde die Datei DLLLicenseManager.dll
zum Installationspaket hinzugefügt.

In frmInvDashboard.Designer.vb wurde der Adapter
VWPM_CHART_TOP5TableAdapter entfernt und durch das neue
Element CreateChartOtherRibbonPage1 ersetzt.

In frmValidator.vb wurden mehrere Verbesserungen vorgenommen:
- Debug- und Info-Logs für Exportprozesse hinzugefügt.
- SQL-Befehl für Export-Dateinamen angepasst.
- Verbesserte Fehlerbehandlung und Logging bei fehlenden
  oder ungültigen Export-Dateinamen.
- Warn-Log für nicht gefundene Dateien ergänzt.
- Info-Log für leere Dokumentenlisten hinzugefügt.
2026-05-19 09:08:52 +02:00
5 changed files with 84 additions and 28 deletions

View File

@@ -126,6 +126,7 @@
<File Id="DDPatterns" Name="DigitalData.Modules.Patterns.dll" Source="DigitalData.Modules.Patterns.dll"/> <File Id="DDPatterns" Name="DigitalData.Modules.Patterns.dll" Source="DigitalData.Modules.Patterns.dll"/>
<File Id="DDEDMIAPI" Name="DigitalData.Modules.EDMI.API.dll" Source="DigitalData.Modules.EDMI.API.dll"/> <File Id="DDEDMIAPI" Name="DigitalData.Modules.EDMI.API.dll" Source="DigitalData.Modules.EDMI.API.dll"/>
<File Id="DDDocumentViewer" Name="DigitalData.Controls.DocumentViewer.dll" Source="DigitalData.Controls.DocumentViewer.dll"/> <File Id="DDDocumentViewer" Name="DigitalData.Controls.DocumentViewer.dll" Source="DigitalData.Controls.DocumentViewer.dll"/>
<File Id="DLLLicenseManager" Name="DLLLicenseManager.dll" Source="M:\Bibliotheken\Digital Data\DD_Modules\DLLLicenseManager.dll"/>
<File Id="Messaging" Name="DigitalData.Modules.Messaging.dll" Source="DigitalData.Modules.Messaging.dll" KeyPath="no" /> <File Id="Messaging" Name="DigitalData.Modules.Messaging.dll" Source="DigitalData.Modules.Messaging.dll" KeyPath="no" />
<File Id="Messaging.License" Name="MailLicense.xml" Source="MailLicense.xml" KeyPath="no" /> <File Id="Messaging.License" Name="MailLicense.xml" Source="MailLicense.xml" KeyPath="no" />
<File Id="Limilabs.Mail" Name="Mail.dll" Source="Mail.dll" KeyPath="no" /> <File Id="Limilabs.Mail" Name="Mail.dll" Source="Mail.dll" KeyPath="no" />

View File

@@ -194,14 +194,30 @@ Public Class RefreshHelper
End Sub End Sub
Private Sub SaveVisibleIndex() Private Sub SaveVisibleIndex()
_VisibleRowIndex = _View.GetVisibleIndex(_View.FocusedRowHandle) - _View.TopRowIndex If _View.FocusedRowHandle <> GridControl.InvalidRowHandle AndAlso _View.FocusedRowHandle >= 0 Then
_VisibleRowIndex = _View.GetVisibleIndex(_View.FocusedRowHandle) - _View.TopRowIndex
Else
_VisibleRowIndex = 0
End If
End Sub End Sub
Private Sub LoadVisibleIndex() Private Sub LoadVisibleIndex()
Try Try
If _View.FocusedRowHandle = GridControl.InvalidRowHandle OrElse _View.FocusedRowHandle < 0 Then
LOGGER.Debug("No valid focused row handle found. Skipping visible index restoration.")
Return
End If
_View.MakeRowVisible(_View.FocusedRowHandle, True) _View.MakeRowVisible(_View.FocusedRowHandle, True)
If _View.FocusedRowHandle <> -1 Then
_View.TopRowIndex = _View.GetVisibleIndex(_View.FocusedRowHandle) - _VisibleRowIndex Dim currentVisibleIndex As Integer = _View.GetVisibleIndex(_View.FocusedRowHandle)
Dim newTopRowIndex As Integer = currentVisibleIndex - _VisibleRowIndex
' Verhindere negative oder ungültige TopRowIndex-Werte
If newTopRowIndex >= 0 AndAlso newTopRowIndex < _View.RowCount Then
_View.TopRowIndex = newTopRowIndex
Else
LOGGER.Debug($"Calculated TopRowIndex {newTopRowIndex} is out of bounds. Skipping setting TopRowIndex.")
End If End If
Catch ex As Exception Catch ex As Exception

View File

@@ -1384,10 +1384,7 @@ Partial Class frmInvDashboard
Me.ChartBottomRight.Size = New System.Drawing.Size(808, 130) Me.ChartBottomRight.Size = New System.Drawing.Size(808, 130)
Me.ChartBottomRight.TabIndex = 1 Me.ChartBottomRight.TabIndex = 1
' '
'VWPM_CHART_TOP5TableAdapter
'
Me.VWPM_CHART_TOP5TableAdapter.ClearBeforeFill = True
'
'CreateChartOtherRibbonPage1 'CreateChartOtherRibbonPage1
' '
Me.CreateChartOtherRibbonPage1.Name = "CreateChartOtherRibbonPage1" Me.CreateChartOtherRibbonPage1.Name = "CreateChartOtherRibbonPage1"

View File

@@ -646,6 +646,7 @@ Public Class frmMain
Sub(oNode As DevExpress.XtraTreeList.Nodes.TreeListNode) Sub(oNode As DevExpress.XtraTreeList.Nodes.TreeListNode)
' ===== NUR KNOTEN MIT TYPE_ID = 0 ODER 1 VERARBEITEN ===== ' ===== NUR KNOTEN MIT TYPE_ID = 0 ODER 1 VERARBEITEN =====
Dim oTypeId As Object = oNode.GetValue("TYPE_ID") Dim oTypeId As Object = oNode.GetValue("TYPE_ID")
Dim oProfileID As Object = oNode.GetValue("FK_PROFILE_ID")
If oTypeId Is Nothing OrElse IsDBNull(oTypeId) Then If oTypeId Is Nothing OrElse IsDBNull(oTypeId) Then
LOGGER.Debug($"AppendCountsToTreeAsync: Node [{oNode.GetValue("NAME")}] has no TYPE_ID - skipping.") LOGGER.Debug($"AppendCountsToTreeAsync: Node [{oNode.GetValue("NAME")}] has no TYPE_ID - skipping.")
Exit Sub Exit Sub
@@ -657,7 +658,7 @@ Public Class frmMain
Dim oSqlCount As Object = oNode.GetValue("SQL_QUERY_COUNT") Dim oSqlCount As Object = oNode.GetValue("SQL_QUERY_COUNT")
If oSqlCount IsNot Nothing AndAlso Not IsDBNull(oSqlCount) AndAlso Not String.IsNullOrWhiteSpace(oSqlCount.ToString()) Then If oSqlCount IsNot Nothing AndAlso Not IsDBNull(oSqlCount) AndAlso Not String.IsNullOrWhiteSpace(oSqlCount.ToString()) Then
Dim oPreparedSQL As String = PrepareSQLWithReplacements(oSqlCount.ToString()) Dim oPreparedSQL As String = PrepareSQLWithReplacements(oSqlCount.ToString(), CInt(oProfileID))
Dim oName As String = oNode.GetValue("NAME")?.ToString() Dim oName As String = oNode.GetValue("NAME")?.ToString()
If Not String.IsNullOrWhiteSpace(oName) Then If Not String.IsNullOrWhiteSpace(oName) Then
oWorkItems.Add((oNode, oPreparedSQL, oName)) oWorkItems.Add((oNode, oPreparedSQL, oName))
@@ -1205,7 +1206,7 @@ Public Class frmMain
LOGGER.Info($"ATTENTION: CURR_DT_VWPM_PROFILE_ACTIVE is nothing!") LOGGER.Info($"ATTENTION: CURR_DT_VWPM_PROFILE_ACTIVE is nothing!")
Return False Return False
End If End If
LOGGER.Debug($"Load_Profiles_for_User: Current datatable has {CURR_DT_VWPM_PROFILE_ACTIVE.Rows.Count} rows")
Return True Return True
Catch ex As Exception Catch ex As Exception
LOGGER.Error(ex) LOGGER.Error(ex)
@@ -1522,7 +1523,7 @@ Public Class frmMain
End If End If
TimerRefresh_running = True TimerRefresh_running = True
LOGGER.Debug("TimerRefresh_Tick started")
' Cancel Refresh if a Validator Form or an Admin Form is opened ' Cancel Refresh if a Validator Form or an Admin Form is opened
If Application.OpenForms().OfType(Of frmMassValidator).Any() Or If Application.OpenForms().OfType(Of frmMassValidator).Any() Or
Application.OpenForms().OfType(Of frmValidator).Any() Or Application.OpenForms().OfType(Of frmValidator).Any() Or
@@ -1577,10 +1578,14 @@ Public Class frmMain
Private Async Function Decide_Load(pIsFormLoad As Boolean, Optional ForceReload As Boolean = False) As Tasks.Task Private Async Function Decide_Load(pIsFormLoad As Boolean, Optional ForceReload As Boolean = False) As Tasks.Task
Dim oHandle As Object = Nothing Dim oHandle As Object = Nothing
Dim overlayStartedHere As Boolean = False Dim overlayStartedHere As Boolean = False
If Not _overlayActive Then ' Overlay nur anzeigen, wenn die Anwendung aktuell den Fokus hat
Dim appHasFocus As Boolean = Application.OpenForms().Cast(Of Form)().Any(Function(f) f.ContainsFocus)
If Not _overlayActive AndAlso appHasFocus Then
oHandle = SplashScreenManager.ShowOverlayForm(Me) oHandle = SplashScreenManager.ShowOverlayForm(Me)
_overlayActive = True _overlayActive = True
overlayStartedHere = True overlayStartedHere = True
Else
LOGGER.Debug("Overlay wird nicht angezeigt, da bereits aktiv oder Anwendung keinen Fokus hat.")
End If End If
Dim perfStart As DateTime = DateTime.MinValue Dim perfStart As DateTime = DateTime.MinValue
Dim refreshWasEnabled As Boolean = False Dim refreshWasEnabled As Boolean = False
@@ -1637,10 +1642,13 @@ Public Class frmMain
End If End If
If Not loadSuccess Then If Not loadSuccess Then
LOGGER.Warn($"LoadProfileData for Profile-ID [{CURRENT_CLICKED_PROFILE_ID}] - Title [{CURRENT_CLICKED_PROFILE_TITLE}] failed or has no Data - exiting Decide_Load") If GRID_LOAD_TYPE <> "OVERVIEW" Then
LOGGER.Warn($"LoadProfileData for Profile-ID [{CURRENT_CLICKED_PROFILE_ID}] - Title [{CURRENT_CLICKED_PROFILE_TITLE}] failed or has no Data - exiting Decide_Load")
Else
LOGGER.Warn($"LoadOverviewData failed or has no Data - exiting Decide_Load")
End If
Exit Function Exit Function
End If End If
' ========== NACHBEARBEITUNG ========== ' ========== NACHBEARBEITUNG ==========
ApplyPostLoadSettings() ApplyPostLoadSettings()
@@ -1710,7 +1718,7 @@ Public Class frmMain
End If End If
If LOG_HOTSPOTS Then If LOG_HOTSPOTS Then
LOGGER.Info($"[PERF LoadOverviewData] Load_Profiles_for_User wird aufgerufen...") LOGGER.Debug($"[PERF LoadOverviewData] Load_Profiles_for_User wird aufgerufen...")
End If End If
Load_Profiles_for_User() Load_Profiles_for_User()
@@ -1730,13 +1738,22 @@ Public Class frmMain
If Not String.IsNullOrWhiteSpace(CUSTOM_OVERVIEW_SQL) Then If Not String.IsNullOrWhiteSpace(CUSTOM_OVERVIEW_SQL) Then
LOGGER.Debug($"[LoadOverviewData] Using CUSTOM_OVERVIEW_SQL from TreeList node") LOGGER.Debug($"[LoadOverviewData] Using CUSTOM_OVERVIEW_SQL from TreeList node")
oSQLOverview = CUSTOM_OVERVIEW_SQL oSQLOverview = CUSTOM_OVERVIEW_SQL
CUSTOM_OVERVIEW_SQL = String.Empty
Else Else
oSQLOverview = BASEDATA_DT_CONFIG.Rows(0).Item("SQL_PROFILE_MAIN_VIEW") oSQLOverview = BASEDATA_DT_CONFIG.Rows(0).Item("SQL_PROFILE_MAIN_VIEW")
End If End If
If IsDBNull(oSQLOverview) OrElse Not oSQLOverview.ToString.Contains("GROUP_TEXT") Then If IsDBNull(oSQLOverview) OrElse Not oSQLOverview.ToString.Contains("GROUP_TEXT") Then
LOGGER.Warn("Overview SQL is Null or not properly configured (missing or GROUP_TEXT column) - cannot load overview data") If IsDBNull(oSQLOverview) Then
LOGGER.Warn("Overview SQL is Null - cannot load overview data")
ElseIf Not oSQLOverview.ToString.Contains("GROUP_TEXT") Then
LOGGER.Warn("Overview SQL is not properly configured - missing GROUP_TEXT column - cannot load overview data")
LOGGER.Warn($"Overview SQL so far: {oSQLOverview}")
Else
LOGGER.Warn("Overview SQL is not properly configured (missing, empty or GROUP_TEXT column not included) - cannot load overview data")
LOGGER.Warn($"Overview SQL so far: {oSQLOverview}")
End If
NO_WORKFLOW_ITEMS = True NO_WORKFLOW_ITEMS = True
GridControlWorkflows.Visible = False GridControlWorkflows.Visible = False
bindsourcegrid.DataSource = Nothing bindsourcegrid.DataSource = Nothing
@@ -1745,7 +1762,7 @@ Public Class frmMain
End If End If
' SQL-Platzhalter ersetzen ' SQL-Platzhalter ersetzen
oSQLOverview = PrepareSQLWithReplacements(oSQLOverview) oSQLOverview = PrepareSQLWithReplacements(oSQLOverview, 0)
If LOG_HOTSPOTS Then If LOG_HOTSPOTS Then
Dim rowCount = If(DT_CURR_WF_ITEMS IsNot Nothing, DT_CURR_WF_ITEMS.Rows.Count, 0) Dim rowCount = If(DT_CURR_WF_ITEMS IsNot Nothing, DT_CURR_WF_ITEMS.Rows.Count, 0)
@@ -1887,7 +1904,7 @@ Public Class frmMain
' ========== SQL VORBEREITEN UND AUSFÜHREN ========== ' ========== SQL VORBEREITEN UND AUSFÜHREN ==========
Dim oSQL = foundRow.Item("SQL_VIEW") Dim oSQL = foundRow.Item("SQL_VIEW")
oSQL = PrepareSQLWithReplacements(oSQL) oSQL = PrepareSQLWithReplacements(oSQL, CURRENT_CLICKED_PROFILE_ID)
DT_CURR_WF_ITEMS = Await DatabaseFallback.GetDatatableECMAsync(oSQL) DT_CURR_WF_ITEMS = Await DatabaseFallback.GetDatatableECMAsync(oSQL)
@@ -1931,14 +1948,25 @@ Public Class frmMain
' HILFSMETHODEN - Extrahierte Logik für Wiederverwendung ' HILFSMETHODEN - Extrahierte Logik für Wiederverwendung
' ======================================== ' ========================================
Private Function PrepareSQLWithReplacements(oSQL As String) As String Private Function PrepareSQLWithReplacements(oSQL As String, oProfileID As Integer) As String
oSQL = clsPatterns.ReplaceInternalValues(oSQL) oSQL = clsPatterns.ReplaceInternalValues(oSQL)
oSQL = clsPatterns.ReplaceUserValues(oSQL) oSQL = clsPatterns.ReplaceUserValues(oSQL)
oSQL = oSQL.Replace("@USER_ID", USER_ID) oSQL = oSQL.Replace("@USER_ID", USER_ID)
oSQL = oSQL.Replace("@USERNAME", USER_USERNAME) oSQL = oSQL.Replace("@USERNAME", USER_USERNAME)
oSQL = oSQL.Replace("@MACHINE_NAME", System.Environment.MachineName) oSQL = oSQL.Replace("@MACHINE_NAME", System.Environment.MachineName)
oSQL = oSQL.Replace("@DATE", Now.ToShortDateString) oSQL = oSQL.Replace("@DATE", Now.ToShortDateString)
oSQL = oSQL.Replace("@PROFILE_ID", CURRENT_CLICKED_PROFILE_ID) If oProfileID = 0 Then
If GRID_LOAD_TYPE = "OVERVIEW" Then
LOGGER.Debug("PrepareSQLWithReplacements called with oProfileID = 0 in OVERVIEW context")
Else
LOGGER.Warn("PrepareSQLWithReplacements called with oProfileID = 0, using CURRENT_CLICKED_PROFILE_ID instead")
End If
oProfileID = CURRENT_CLICKED_PROFILE_ID
Else
LOGGER.Debug($"PrepareSQLWithReplacements called with oProfileID = {oProfileID}")
End If
oSQL = oSQL.Replace("@PROFILE_ID", oProfileID)
oSQL = oSQL.Replace("@PROFIL_ID", oProfileID)
Return oSQL Return oSQL
End Function End Function
@@ -4451,7 +4479,9 @@ FROM VWPM_PROFILE_ACTIVE T WHERE T.GUID IN (SELECT PROFILE_ID FROM [dbo].[FNPM_G
Finally Finally
Me.Cursor = Cursors.Default Me.Cursor = Cursors.Default
End Try End Try
' ✅ CUSTOM_OVERVIEW_SQL erst HIER leeren nach dem kompletten Lade-Zyklus inkl. internem GridLayout_Reset
LOGGER.Debug("TreeList_Cockpit: Clearing CUSTOM_OVERVIEW_SQL after loading overview")
CUSTOM_OVERVIEW_SQL = String.Empty
If GridControlWorkflows.Visible = True And FormOpenClose = False Then If GridControlWorkflows.Visible = True And FormOpenClose = False Then
RefreshHelper.LoadViewInfo() RefreshHelper.LoadViewInfo()
End If End If
@@ -4552,9 +4582,10 @@ FROM VWPM_PROFILE_ACTIVE T WHERE T.GUID IN (SELECT PROFILE_ID FROM [dbo].[FNPM_G
End If End If
If FormShown = False Then If FormShown = False Then
LOGGER.Debug("TreeList1_FocusedNodeChanged: Form not shown - skipping")
Exit Sub Exit Sub
End If End If
LOGGER.Debug("TreeList1_FocusedNodeChanged: Node changed - processing")
Await ProcessTreeListNodeAsync(e.Node) Await ProcessTreeListNodeAsync(e.Node)
Catch ex As Exception Catch ex As Exception

View File

@@ -8621,20 +8621,23 @@ Public Class frmValidator
MyValidationLogger.Info($"File {oFile2Export} exported successfully!") MyValidationLogger.Info($"File {oFile2Export} exported successfully!")
oCount += 1 oCount += 1
Else Else
MsgBox("Error encountered while extracting Export-Filename!" & vbcrlf & "Please inform Admin-Team!", MsgBoxStyle.Critical, ADDITIONAL_TITLE) MsgBox("Error encountered while extracting Export-Filename!" & vbCrLf & "Please inform Admin-Team!", MsgBoxStyle.Critical, ADDITIONAL_TITLE)
End If End If
Else
MyValidationLogger.Info($"#### ATTENTION: oExportFilename is Nothing - SQL: {oSQLGetFilename}")
MsgBox("Error encountered while extracting Export-Filename - Result is Nothing!" & vbCrLf & "Please inform Admin-Team!", MsgBoxStyle.Critical, ADDITIONAL_TITLE)
End If End If
Dim oFileCount As Integer = 1 Dim oFileCount As Integer = 1
If Not IsNothing(DT_AdditionalSearches_Resultset_Docs) Then If Not IsNothing(DT_AdditionalSearches_Resultset_Docs) Then
For Each oFileRecord As DataRow In DT_AdditionalSearches_Resultset_Docs.Rows For Each oFileRecord As DataRow In DT_AdditionalSearches_Resultset_Docs.Rows
Dim oFromFilename = oFileRecord.Item("FULL_FILENAME") Dim oFromFilename = oFileRecord.Item("FULL_FILENAME")
Dim oDocID = oFileRecord.Item("DocID") Dim oDocID = oFileRecord.Item("DocID")
If File.Exists(oFromFilename) Then If File.Exists(oFromFilename) Then
MyValidationLogger.Debug($"Found additional document for export: [{oFromFilename}] with DocID [{oDocID}]")
oFileCount += 1 oFileCount += 1
oSQLGetFilename = $"DECLARE @Filename Varchar(512) " & vbcrlf & oSQLGetFilename = $"DECLARE @Filename Varchar(512) " & vbCrLf &
$"EXEC dbo.PRPM_GETFILENAME_EXPORT {oDocID}, {oFileCount}, @Outputfilename = @Filename OUTPUT;" & vbcrlf & $"EXEC dbo.PRPM_GETFILENAME_EXPORT {oDocID}, {oFileCount}, @Outputfilename = @Filename OUTPUT;" & vbCrLf &
"SELECT @Filename" "SELECT @Filename"
oExportFilename = DatabaseFallback.GetScalarValueECM(oSQLGetFilename) oExportFilename = DatabaseFallback.GetScalarValueECM(oSQLGetFilename)
oExtension = Path.GetExtension(oFromFilename) oExtension = Path.GetExtension(oFromFilename)
@@ -8646,17 +8649,25 @@ Public Class frmValidator
If oExportFilename <> String.Empty Then If oExportFilename <> String.Empty Then
oTargetPath = FolderBrowserDialog1.SelectedPath & "\" & oExportFilename & oExtension oTargetPath = FolderBrowserDialog1.SelectedPath & "\" & oExportFilename & oExtension
File.Copy(oFromFilename, oTargetPath) File.Copy(oFromFilename, oTargetPath)
LOGGER.Info($"Additional file [{oFromFilename}] exported successfully to [{oTargetPath}]")
oCount += 1 oCount += 1
Else Else
Dim omsg = $"Error encountered while extracting ATTACHMENT-Export-Filename DocID [{oDocID}]!" Dim omsg = $"Error encountered while extracting ATTACHMENT-Export-Filename DocID [{oDocID}]!"
MyValidationLogger.Info($"#### ATTENTION: {omsg} SQL: {oSQLGetFilename}") MyValidationLogger.Info($"#### ATTENTION: {omsg} SQL: {oSQLGetFilename}")
MsgBox(omsg & vbcrlf & "Please inform Admin-Team!", MsgBoxStyle.Critical, ADDITIONAL_TITLE) MsgBox(omsg & vbCrLf & "Please inform Admin-Team!", MsgBoxStyle.Critical, ADDITIONAL_TITLE)
End If End If
Else
Dim omsg = $"Error encountered while extracting ATTACHMENT-Export-Filename DocID [{oDocID}] - Result is Nothing!"
MyValidationLogger.Info($"#### ATTENTION: {omsg} SQL: {oSQLGetFilename}")
MsgBox(omsg & vbCrLf & "Please inform Admin-Team!", MsgBoxStyle.Critical, ADDITIONAL_TITLE)
End If End If
'oFilenameOnly = Path.GetFileName(oFromFilename) 'oFilenameOnly = Path.GetFileName(oFromFilename)
Else
MyValidationLogger.Warn($"⚠️ Additional file for export not found: [{oFromFilename}] with DocID [{oDocID}]")
End If End If
Next Next
Else
MyValidationLogger.Info("No additional documents to export (DT_AdditionalSearches_Resultset_Docs is Nothing)")
End If End If
CONFIG.Config.LastExportPath = FolderBrowserDialog1.SelectedPath CONFIG.Config.LastExportPath = FolderBrowserDialog1.SelectedPath