Verbesserung DocSearchLoad, Mapping Sharedrive Refactoring Zusatzsuchen, Dokumentenhandling & Cleanup Umfangreiches Refactoring der Zusatzsuchen-Logik (Validator/ValidatorSearch): Vereinheitlichung und Typprüfung der DataTables, zentrale Filterung, robustere Tab-Steuerung und thread-sicheres Nachladen. Netzlaufwerk-Mapping und Dokumentenpfad-Handling wurden entfernt bzw. auf neue Handler ausgelagert. Profilsuchen-Handling vereinheitlicht, Parametrierung (Working Mode) klarer strukturiert. Diverse Bugfixes, verbessertes Logging, Cleanup von Ressourcen und Projektdateien, veraltete Komponenten entfernt. Update auf DocumentViewer 2.6.0.0. Die Anwendung ist robuster, wartbarer und für Erweiterungen vorbereitet.
1199 lines
55 KiB
VB.net
1199 lines
55 KiB
VB.net
Imports System.ComponentModel
|
|
Imports System.Data.SqlClient
|
|
Imports System.IO
|
|
Imports System.Runtime.InteropServices
|
|
Imports DevExpress.Utils
|
|
Imports DevExpress.XtraGrid
|
|
Imports DevExpress.XtraGrid.Columns
|
|
Imports DevExpress.XtraGrid.Views.Base
|
|
Imports DevExpress.XtraGrid.Views.Grid
|
|
Imports DevExpress.XtraTab
|
|
Imports DigitalData.GUIs.Common
|
|
Imports DigitalData.GUIs.Common.DocumentResultList
|
|
Imports DigitalData.Modules.Base
|
|
Imports DigitalData.Modules.EDMI.API.Constants
|
|
Imports DigitalData.Modules.EDMI.API.DatabaseWithFallback
|
|
Imports DigitalData.Modules.ZooFlow
|
|
Imports DigitalData.Modules.ZooFlow.Constants
|
|
|
|
Public Class frmValidatorSearch
|
|
<DllImport("Shell32", CharSet:=CharSet.Auto, SetLastError:=True)>
|
|
Public Shared Function ShellExecuteEx(ByRef lpExecInfo As SHELLEXECUTEINFO) As Boolean
|
|
End Function
|
|
Public Structure SHELLEXECUTEINFO
|
|
Public cbSize As Integer
|
|
Public fMask As Integer
|
|
Public hwnd As IntPtr
|
|
<MarshalAs(UnmanagedType.LPTStr)> Public lpVerb As String
|
|
<MarshalAs(UnmanagedType.LPTStr)> Public lpFile As String
|
|
<MarshalAs(UnmanagedType.LPTStr)> Public lpParameters As String
|
|
<MarshalAs(UnmanagedType.LPTStr)> Public lpDirectory As String
|
|
Dim nShow As Integer
|
|
Dim hInstApp As IntPtr
|
|
Dim lpIDList As IntPtr
|
|
<MarshalAs(UnmanagedType.LPTStr)> Public lpClass As String
|
|
Public hkeyClass As IntPtr
|
|
Public dwHotKey As Integer
|
|
Public hIcon As IntPtr
|
|
Public hProcess As IntPtr
|
|
End Structure
|
|
#Region "Laufzeitvariablen & Konstanten"
|
|
Private Const SEE_MASK_INVOKEIDLIST = &HC
|
|
Private Const SEE_MASK_NOCLOSEPROCESS = &H40
|
|
Private Const SEE_MASK_FLAG_NO_UI = &H400
|
|
Public Const SW_SHOW As Short = 5
|
|
#End Region
|
|
Public formLoaded As Boolean = False
|
|
Public _DTDocSearches As DataTable
|
|
Public _DTDATASearches As DataTable
|
|
Private _frmValidator As frmValidator 'You need a reference to Form1
|
|
Private Shared BW_DocPath As String
|
|
Private Shared BW_DocID As Integer
|
|
Private LastDocID As Int64 = 0
|
|
Private Documentloader As Loader
|
|
Private Property OperationMode As OperationMode
|
|
Private ReadOnly Environment As Environment
|
|
Private _documentPathHandler As DocumentPathHandler
|
|
Private _suppressTabEvents As Boolean = False
|
|
|
|
Public Sub New(pfrmValidator As frmValidator, pEnvironment As Environment)
|
|
|
|
' Dieser Aufruf ist für den Designer erforderlich.
|
|
InitializeComponent()
|
|
' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
|
|
_frmValidator = pfrmValidator
|
|
Environment = pEnvironment
|
|
End Sub
|
|
Private Function GetOperationMode() As OperationMode
|
|
Dim oOperationMode As OperationMode
|
|
If Environment.Service.Client Is Nothing Then
|
|
Return OperationMode.NoAppServer
|
|
End If
|
|
|
|
If Environment.Service.Client.IsOnline AndAlso Environment.Service.Client.ServerAddress <> String.Empty And IDB_USES_WMFILESTORE = False Then
|
|
oOperationMode = OperationMode.WithAppServer
|
|
Else
|
|
oOperationMode = OperationMode.NoAppServer
|
|
End If
|
|
If OPERATION_MODE_FS = ClassConstants.OpModeFS_ZF Then
|
|
oOperationMode = OperationMode.ZooFlow
|
|
End If
|
|
|
|
Return oOperationMode
|
|
End Function
|
|
Public Sub TabPreload(TabCountSQL As Integer, TabCountDoc As Integer, DTSQL As DataTable, DTDOC As DataTable)
|
|
Try
|
|
LOGGER.Debug("=== TabPreload START ===")
|
|
LOGGER.Debug($"Parameters: TabCountSQL={TabCountSQL}, TabCountDoc={TabCountDoc}, DTSQL.Rows={If(DTSQL?.Rows.Count, 0)}, DTDOC.Rows={If(DTDOC?.Rows.Count, 0)}")
|
|
|
|
' Validierung der Parameter
|
|
If DTSQL Is Nothing Then
|
|
LOGGER.Warn("⚠️ DTSQL ist Nothing")
|
|
DTSQL = New DataTable()
|
|
End If
|
|
If DTDOC Is Nothing Then
|
|
LOGGER.Warn("⚠️ DTDOC ist Nothing")
|
|
DTDOC = New DataTable()
|
|
End If
|
|
|
|
' Thread-Synchronisation
|
|
If Me.InvokeRequired() Then
|
|
LOGGER.Debug("InvokeRequired=True, rufe auf UI-Thread auf")
|
|
Me.Invoke(Sub() TabPreload(TabCountSQL, TabCountDoc, DTSQL, DTDOC))
|
|
Return
|
|
End If
|
|
|
|
LOGGER.Debug("Ausführung auf UI-Thread")
|
|
|
|
' ============================================================
|
|
' WICHTIG: Variablen VOR Try-Block deklarieren
|
|
' ============================================================
|
|
Dim hasSQLData As Boolean = False
|
|
Dim hasDocData As Boolean = False
|
|
Dim actualSQLTabCount As Integer = 0
|
|
Dim actualDocTabCount As Integer = 0
|
|
|
|
' ============================================================
|
|
' KRITISCH: Events DEAKTIVIEREN während der Rekonfiguration
|
|
' ============================================================
|
|
_suppressTabEvents = True
|
|
LOGGER.Debug("🚫 Tab-Events deaktiviert")
|
|
|
|
Try
|
|
' KRITISCH: DataTables SOFORT zuweisen
|
|
_DTDATASearches = DTSQL
|
|
_DTDocSearches = DTDOC
|
|
LOGGER.Debug($"✓ _DTDATASearches und _DTDocSearches zugewiesen: SQL={_DTDATASearches.Rows.Count}, Doc={_DTDocSearches.Rows.Count}")
|
|
|
|
' TabCount-Validierung
|
|
actualSQLTabCount = Math.Min(TabCountSQL, DTSQL.Rows.Count)
|
|
actualDocTabCount = Math.Min(TabCountDoc, DTDOC.Rows.Count)
|
|
|
|
If actualSQLTabCount <> TabCountSQL Then
|
|
LOGGER.Warn($"⚠️ TabCountSQL korrigiert: {TabCountSQL} → {actualSQLTabCount}")
|
|
End If
|
|
If actualDocTabCount <> TabCountDoc Then
|
|
LOGGER.Warn($"⚠️ TabCountDoc korrigiert: {TabCountDoc} → {actualDocTabCount}")
|
|
End If
|
|
|
|
' Panel-Sichtbarkeit
|
|
hasSQLData = DTSQL.Rows.Count > 0 AndAlso actualSQLTabCount > 0
|
|
hasDocData = DTDOC.Rows.Count > 0 AndAlso actualDocTabCount > 0
|
|
|
|
SplitContainerSearches.Panel1Collapsed = Not hasSQLData
|
|
SplitContainerSearches.Panel2Collapsed = Not hasDocData
|
|
|
|
LOGGER.Debug($"Panel1Collapsed (SQL)={SplitContainerSearches.Panel1Collapsed}, Panel2Collapsed (Doc)={SplitContainerSearches.Panel2Collapsed}")
|
|
|
|
' ============================================================
|
|
' KRITISCH: DocumentViewer nur bei Doc-Searches sichtbar
|
|
' ============================================================
|
|
If hasDocData Then
|
|
If Not DocumentViewer1.Visible Then
|
|
DocumentViewer1.Visible = True
|
|
LOGGER.Debug("✓ DocumentViewer1 sichtbar gemacht (Doc-Searches vorhanden)")
|
|
End If
|
|
Else
|
|
If DocumentViewer1.Visible Then
|
|
DocumentViewer1.Visible = False
|
|
LOGGER.Debug("✓ DocumentViewer1 ausgeblendet (keine Doc-Searches)")
|
|
End If
|
|
End If
|
|
|
|
' #### SQL Tabs konfigurieren
|
|
If hasSQLData Then
|
|
LOGGER.Debug($"Konfiguriere SQL-Tabs: {DTSQL.Rows.Count} Definitionen")
|
|
|
|
' ALLE Tabs unsichtbar machen
|
|
For p As Integer = 0 To XtraTabControlSQL.TabPages.Count - 1
|
|
XtraTabControlSQL.TabPages(p).PageVisible = False
|
|
Next
|
|
LOGGER.Debug($"Alle {XtraTabControlSQL.TabPages.Count} SQL-Tabs auf PageVisible=False gesetzt")
|
|
|
|
' Nur benötigte Tabs sichtbar machen
|
|
Dim processedTabs As Integer = 0
|
|
For p As Integer = 0 To Math.Min(actualSQLTabCount - 1, XtraTabControlSQL.TabPages.Count - 1)
|
|
If p < DTSQL.Rows.Count Then
|
|
Try
|
|
Dim tabTitle As String = If(DTSQL.Rows(p).Item("TAB_TITLE")?.ToString(), $"Tab {p + 1}")
|
|
XtraTabControlSQL.TabPages(p).Text = tabTitle
|
|
XtraTabControlSQL.TabPages(p).PageVisible = True
|
|
processedTabs += 1
|
|
LOGGER.Debug($"SQL-Tab {p}: Text='{tabTitle}', PageVisible=True")
|
|
Catch ex As Exception
|
|
LOGGER.Error($"❌ Fehler beim Konfigurieren von SQL-Tab {p}", ex)
|
|
End Try
|
|
End If
|
|
Next
|
|
|
|
LOGGER.Info($"✓ {processedTabs} SQL-Tabs konfiguriert")
|
|
Else
|
|
LOGGER.Debug("Keine SQL-Daten, alle Tabs ausblenden")
|
|
For p As Integer = 0 To XtraTabControlSQL.TabPages.Count - 1
|
|
XtraTabControlSQL.TabPages(p).PageVisible = False
|
|
Next
|
|
End If
|
|
|
|
' #### Doc Tabs konfigurieren
|
|
If hasDocData Then
|
|
LOGGER.Debug($"Konfiguriere Doc-Tabs: {DTDOC.Rows.Count} Definitionen")
|
|
|
|
' ALLE Tabs unsichtbar machen
|
|
For p As Integer = 0 To XtraTabControlDocs.TabPages.Count - 1
|
|
XtraTabControlDocs.TabPages(p).PageVisible = False
|
|
Next
|
|
LOGGER.Debug($"Alle {XtraTabControlDocs.TabPages.Count} Doc-Tabs auf PageVisible=False gesetzt")
|
|
|
|
' Nur benötigte Tabs sichtbar machen
|
|
Dim processedTabs As Integer = 0
|
|
For p As Integer = 0 To Math.Min(actualDocTabCount - 1, XtraTabControlDocs.TabPages.Count - 1)
|
|
If p < DTDOC.Rows.Count Then
|
|
Try
|
|
Dim tabTitle As String = If(DTDOC.Rows(p).Item("TAB_TITLE")?.ToString(), $"Tab {p + 1}")
|
|
XtraTabControlDocs.TabPages(p).Text = tabTitle
|
|
XtraTabControlDocs.TabPages(p).PageVisible = True
|
|
processedTabs += 1
|
|
LOGGER.Debug($"Doc-Tab {p}: Text='{tabTitle}', PageVisible=True")
|
|
Catch ex As Exception
|
|
LOGGER.Error($"❌ Fehler beim Konfigurieren von Doc-Tab {p}", ex)
|
|
End Try
|
|
End If
|
|
Next
|
|
|
|
LOGGER.Info($"✓ {processedTabs} Doc-Tabs konfiguriert")
|
|
Else
|
|
LOGGER.Debug("Keine Doc-Daten, alle Tabs ausblenden")
|
|
For p As Integer = 0 To XtraTabControlDocs.TabPages.Count - 1
|
|
XtraTabControlDocs.TabPages(p).PageVisible = False
|
|
Next
|
|
End If
|
|
|
|
Finally
|
|
' ============================================================
|
|
' KRITISCH: Events REAKTIVIEREN nach Rekonfiguration
|
|
' ============================================================
|
|
_suppressTabEvents = False
|
|
LOGGER.Debug("✓ Tab-Events reaktiviert")
|
|
End Try
|
|
|
|
' JETZT manuell den ersten sichtbaren Tab aktivieren
|
|
' ERSETZE im unteren Teil von TabPreload den SQL-Block:
|
|
If hasSQLData AndAlso XtraTabControlSQL.TabPages.Count > 0 Then
|
|
Dim firstVisibleSqlIndex As Integer = -1
|
|
For i As Integer = 0 To XtraTabControlSQL.TabPages.Count - 1
|
|
If XtraTabControlSQL.TabPages(i).PageVisible Then
|
|
firstVisibleSqlIndex = i
|
|
Exit For
|
|
End If
|
|
Next
|
|
|
|
If firstVisibleSqlIndex >= 0 AndAlso _DTDATASearches IsNot Nothing AndAlso firstVisibleSqlIndex < _DTDATASearches.Rows.Count Then
|
|
LOGGER.Debug($"Setze SQL SelectedTabPageIndex manuell auf {firstVisibleSqlIndex}")
|
|
|
|
Dim prevSuppress As Boolean = _suppressTabEvents
|
|
_suppressTabEvents = True
|
|
XtraTabControlSQL.SelectedTabPageIndex = firstVisibleSqlIndex
|
|
_suppressTabEvents = prevSuppress
|
|
|
|
Try
|
|
Dim selectedRow As DataRow = _DTDATASearches.Rows(firstVisibleSqlIndex)
|
|
Dim oConID As Integer = If(IsDBNull(selectedRow.Item("CONN_ID")), 1, CInt(selectedRow.Item("CONN_ID")))
|
|
Dim oCommand As String = selectedRow.Item("SQL_COMMAND")?.ToString()
|
|
Dim oTabCaption As String = If(selectedRow.Item("TAB_TITLE")?.ToString(), $"Tab {firstVisibleSqlIndex}")
|
|
|
|
If Not String.IsNullOrEmpty(oCommand) Then
|
|
oCommand = clsPatterns.ReplaceAllValues(oCommand, _frmValidator.PanelValidatorControl, True)
|
|
LOGGER.Debug($"SQL-Tab {firstVisibleSqlIndex}: erzwungener Initial-Refresh")
|
|
RefreshTabSQL(oConID, oCommand, firstVisibleSqlIndex, oTabCaption)
|
|
End If
|
|
Catch ex As Exception
|
|
LOGGER.Error("❌ Fehler beim SQL-Initial-Refresh in TabPreload", ex)
|
|
End Try
|
|
End If
|
|
End If
|
|
|
|
' ERSETZE im unteren Teil von TabPreload den Doc-Block:
|
|
If hasDocData AndAlso XtraTabControlDocs.TabPages.Count > 0 Then
|
|
Dim firstVisibleDocIndex As Integer = -1
|
|
For i As Integer = 0 To XtraTabControlDocs.TabPages.Count - 1
|
|
If XtraTabControlDocs.TabPages(i).PageVisible Then
|
|
firstVisibleDocIndex = i
|
|
Exit For
|
|
End If
|
|
Next
|
|
|
|
If firstVisibleDocIndex >= 0 AndAlso _DTDocSearches IsNot Nothing AndAlso firstVisibleDocIndex < _DTDocSearches.Rows.Count Then
|
|
LOGGER.Debug($"Setze Doc SelectedTabPageIndex manuell auf {firstVisibleDocIndex}")
|
|
|
|
Dim prevSuppress As Boolean = _suppressTabEvents
|
|
_suppressTabEvents = True
|
|
XtraTabControlDocs.SelectedTabPageIndex = firstVisibleDocIndex
|
|
_suppressTabEvents = prevSuppress
|
|
|
|
Try
|
|
Dim selectedRow As DataRow = _DTDocSearches.Rows(firstVisibleDocIndex)
|
|
Dim oConID As Integer = If(IsDBNull(selectedRow.Item("CONN_ID")), 1, CInt(selectedRow.Item("CONN_ID")))
|
|
Dim oCommand As String = selectedRow.Item("SQL_COMMAND")?.ToString()
|
|
Dim oTabCaption As String = If(selectedRow.Item("TAB_TITLE")?.ToString(), $"Tab {firstVisibleDocIndex}")
|
|
|
|
If Not String.IsNullOrEmpty(oCommand) Then
|
|
oCommand = clsPatterns.ReplaceAllValues(oCommand, _frmValidator.PanelValidatorControl, True)
|
|
LOGGER.Debug($"Doc-Tab {firstVisibleDocIndex}: erzwungener Initial-Refresh")
|
|
RefreshTabDoc(oConID, oCommand, firstVisibleDocIndex, oTabCaption)
|
|
End If
|
|
Catch ex As Exception
|
|
LOGGER.Error("❌ Fehler beim Doc-Initial-Refresh in TabPreload", ex)
|
|
End Try
|
|
End If
|
|
End If
|
|
|
|
LOGGER.Debug("=== TabPreload END ===")
|
|
|
|
Catch ex As Exception
|
|
LOGGER.Error("❌ Fehler in TabPreload", ex)
|
|
LOGGER.Error($"Stack Trace: {ex.StackTrace}")
|
|
_suppressTabEvents = False ' Sicherstellung
|
|
|
|
Try
|
|
SplitContainerSearches.Panel1Collapsed = True
|
|
SplitContainerSearches.Panel2Collapsed = True
|
|
DocumentViewer1.Visible = False
|
|
Catch collapseEx As Exception
|
|
LOGGER.Error("❌ Fehler beim Kollabieren der Panels", collapseEx)
|
|
End Try
|
|
End Try
|
|
End Sub
|
|
Private Sub XtraTabControlSQL_SelectedPageChanged(sender As Object, e As TabPageChangedEventArgs) Handles XtraTabControlSQL.SelectedPageChanged
|
|
Try
|
|
' KRITISCH: Event unterdrücken während TabPreload läuft
|
|
If _suppressTabEvents Then
|
|
LOGGER.Debug($"🚫 XtraTabControlSQL_SelectedPageChanged unterdrückt (SelectedTabPageIndex={XtraTabControlSQL.SelectedTabPageIndex})")
|
|
Exit Sub
|
|
End If
|
|
|
|
LOGGER.Debug($"=== XtraTabControlSQL_SelectedPageChanged START - SelectedTabPageIndex={XtraTabControlSQL.SelectedTabPageIndex} ===")
|
|
|
|
If _DTDATASearches Is Nothing Then
|
|
LOGGER.Warn("⚠️ _DTDATASearches ist Nothing - Exit Sub")
|
|
Exit Sub
|
|
End If
|
|
If XtraTabControlSQL.SelectedTabPageIndex >= 0 AndAlso
|
|
Not XtraTabControlSQL.TabPages(XtraTabControlSQL.SelectedTabPageIndex).PageVisible Then
|
|
LOGGER.Debug("SQL-Tab ist nicht sichtbar - Exit Sub")
|
|
Exit Sub
|
|
End If
|
|
|
|
If XtraTabControlSQL.SelectedTabPageIndex >= _DTDATASearches.Rows.Count Then
|
|
LOGGER.Error($"❌ SelectedTabPageIndex ({XtraTabControlSQL.SelectedTabPageIndex}) >= _DTDATASearches.Rows.Count ({_DTDATASearches.Rows.Count}) - Exit Sub")
|
|
Exit Sub
|
|
End If
|
|
|
|
Dim selectedRow As DataRow = _DTDATASearches.Rows(XtraTabControlSQL.SelectedTabPageIndex)
|
|
Dim oConID As Integer = If(IsDBNull(selectedRow.Item("CONN_ID")), 1, CInt(selectedRow.Item("CONN_ID")))
|
|
Dim oCommand As String = selectedRow.Item("SQL_COMMAND")?.ToString()
|
|
Dim oTabIndex As Integer = XtraTabControlSQL.SelectedTabPageIndex
|
|
Dim oTabCaption As String = If(selectedRow.Item("TAB_TITLE")?.ToString(), $"Tab {oTabIndex}")
|
|
|
|
LOGGER.Debug($"Tab-Info: '{oTabCaption}', ConID={oConID}, TabIndex={oTabIndex}")
|
|
|
|
If String.IsNullOrEmpty(oCommand) Then
|
|
LOGGER.Warn($"⚠️ SQL_COMMAND ist leer für Tab '{oTabCaption}' - Exit Sub")
|
|
Exit Sub
|
|
End If
|
|
|
|
oCommand = clsPatterns.ReplaceAllValues(oCommand, _frmValidator.PanelValidatorControl, True)
|
|
LOGGER.Debug($"SQL ersetzt, Länge={oCommand.Length} Zeichen")
|
|
|
|
' ============================================================
|
|
' KRITISCH: RefreshTabSQL aufrufen!
|
|
' ============================================================
|
|
LOGGER.Debug($"Rufe RefreshTabSQL auf für Tab '{oTabCaption}'")
|
|
RefreshTabSQL(oConID, oCommand, oTabIndex, oTabCaption)
|
|
|
|
LOGGER.Debug("=== XtraTabControlSQL_SelectedPageChanged END ===")
|
|
|
|
Catch ex As Exception
|
|
LOGGER.Error("❌ Fehler in XtraTabControlSQL_SelectedPageChanged", ex)
|
|
LOGGER.Error($"Details: SelectedTabPageIndex={XtraTabControlSQL.SelectedTabPageIndex}, _DTDATASearches.Rows.Count={If(_DTDATASearches?.Rows.Count, 0)}")
|
|
End Try
|
|
End Sub
|
|
|
|
Private Sub XtraTabControlDocs_SelectedPageChanged_1(sender As Object, e As TabPageChangedEventArgs) Handles XtraTabControlDocs.SelectedPageChanged
|
|
Try
|
|
' KRITISCH: Event unterdrücken während TabPreload läuft
|
|
If _suppressTabEvents Then
|
|
LOGGER.Debug($"🚫 XtraTabControlDocs_SelectedPageChanged unterdrückt (SelectedTabPageIndex={XtraTabControlDocs.SelectedTabPageIndex})")
|
|
Exit Sub
|
|
End If
|
|
|
|
LOGGER.Debug($"=== XtraTabControlDocs_SelectedPageChanged START - SelectedTabPageIndex={XtraTabControlDocs.SelectedTabPageIndex} ===")
|
|
|
|
If _DTDocSearches Is Nothing Then
|
|
LOGGER.Warn("⚠️ _DTDocSearches ist Nothing - Exit Sub")
|
|
Exit Sub
|
|
End If
|
|
|
|
If XtraTabControlDocs.SelectedTabPageIndex < 0 Then
|
|
LOGGER.Debug("SelectedTabPageIndex < 0 - Exit Sub")
|
|
Exit Sub
|
|
End If
|
|
|
|
If XtraTabControlDocs.SelectedTabPageIndex >= _DTDocSearches.Rows.Count Then
|
|
LOGGER.Error($"❌ SelectedTabPageIndex ({XtraTabControlDocs.SelectedTabPageIndex}) >= _DTDocSearches.Rows.Count ({_DTDocSearches.Rows.Count}) - Exit Sub")
|
|
Exit Sub
|
|
End If
|
|
|
|
Dim selectedRow As DataRow = _DTDocSearches.Rows(XtraTabControlDocs.SelectedTabPageIndex)
|
|
Dim oConID As Integer = If(IsDBNull(selectedRow.Item("CONN_ID")), 1, CInt(selectedRow.Item("CONN_ID")))
|
|
Dim oCommand As String = selectedRow.Item("SQL_COMMAND")?.ToString()
|
|
Dim oTabIndex As Integer = XtraTabControlDocs.SelectedTabPageIndex
|
|
Dim oTabCaption As String = If(selectedRow.Item("TAB_TITLE")?.ToString(), $"Tab {oTabIndex}")
|
|
|
|
LOGGER.Debug($"Tab-Info: '{oTabCaption}', ConID={oConID}, TabIndex={oTabIndex}")
|
|
|
|
If String.IsNullOrEmpty(oCommand) Then
|
|
LOGGER.Warn($"⚠️ SQL_COMMAND ist leer für Tab '{oTabCaption}' - Exit Sub")
|
|
Exit Sub
|
|
End If
|
|
|
|
oCommand = clsPatterns.ReplaceAllValues(oCommand, _frmValidator.PanelValidatorControl, True)
|
|
LOGGER.Debug($"SQL ersetzt, Länge={oCommand.Length} Zeichen")
|
|
|
|
' ============================================================
|
|
' KRITISCH: RefreshTabDoc aufrufen!
|
|
' ============================================================
|
|
LOGGER.Debug($"Rufe RefreshTabDoc auf für Tab '{oTabCaption}'")
|
|
RefreshTabDoc(oConID, oCommand, oTabIndex, oTabCaption)
|
|
|
|
LOGGER.Debug("=== XtraTabControlDocs_SelectedPageChanged END ===")
|
|
|
|
Catch ex As Exception
|
|
LOGGER.Error("❌ Fehler in XtraTabControlDocs_SelectedPageChanged", ex)
|
|
LOGGER.Error($"Details: SelectedTabPageIndex={XtraTabControlDocs.SelectedTabPageIndex}, _DTDocSearches.Rows.Count={If(_DTDocSearches?.Rows.Count, 0)}")
|
|
End Try
|
|
End Sub
|
|
Public Sub RefreshTabSQL(ConID As Integer, SQLCommand As String, TabIndex As Integer, TabCaption As String)
|
|
If Me.InvokeRequired() Then
|
|
Me.Invoke(Sub() RefreshTabSQL(ConID, SQLCommand, TabIndex, TabCaption))
|
|
Else
|
|
'Code to refresh your textbox here
|
|
Refresh_Load_GridSQL(ConID, SQLCommand, TabIndex, TabCaption)
|
|
End If
|
|
End Sub
|
|
Public Sub RefreshTabDoc(ConID As Integer, SQLCommand As String, TabIndex As Integer, TabCaption As String)
|
|
If Me.InvokeRequired() Then
|
|
Me.Invoke(Sub() RefreshTabDoc(ConID, SQLCommand, TabIndex, TabCaption))
|
|
Else
|
|
'Code to refresh your textbox here
|
|
Refresh_Load_GridDoc(ConID, SQLCommand, TabIndex, TabCaption)
|
|
End If
|
|
End Sub
|
|
Sub Refresh_Load_GridSQL(ConID As Integer, SQLCommand As String, TabIndex As Integer, TabCaption As String)
|
|
Try
|
|
Dim myGridControl As DevExpress.XtraGrid.GridControl
|
|
Dim myGridview As DevExpress.XtraGrid.Views.Grid.GridView
|
|
Select Case TabIndex
|
|
Case 0
|
|
GridControlSearch1.DataSource = Nothing
|
|
GridViewSearch1.Columns.Clear()
|
|
myGridview = GridViewSearch1
|
|
myGridControl = GridControlSearch1
|
|
Case 1
|
|
GridControlSearch2.DataSource = Nothing
|
|
GridViewSearch2.Columns.Clear()
|
|
myGridview = GridViewSearch2
|
|
myGridControl = GridControlSearch2
|
|
Case 2
|
|
GridControlSearch3.DataSource = Nothing
|
|
GridViewSearch3.Columns.Clear()
|
|
myGridview = GridViewSearch3
|
|
myGridControl = GridControlSearch3
|
|
Case 3
|
|
GridControlSearch4.DataSource = Nothing
|
|
GridViewSearch4.Columns.Clear()
|
|
myGridview = GridViewSearch4
|
|
myGridControl = GridControlSearch4
|
|
Case 4
|
|
GridControlSearch5.DataSource = Nothing
|
|
GridViewSearch5.Columns.Clear()
|
|
myGridview = GridViewSearch5
|
|
myGridControl = GridControlSearch5
|
|
End Select
|
|
myGridControl.ContextMenuStrip = ContextMenuStripSQL
|
|
'Dim oDatatable As DataTable = ClassDatabase.Return_Datatable_ConId(SQLCommand, ConID)
|
|
Dim oDatatable As DataTable = DatabaseFallback.GetDatatable(New GetDatatableOptions(SQLCommand, DatabaseType.ECM) With {
|
|
.ConnectionId = ConID
|
|
})
|
|
|
|
If Not IsNothing(oDatatable) Then
|
|
XtraTabControlSQL.TabPages(TabIndex).Text = $"{TabCaption} ({oDatatable.Rows.Count})"
|
|
Select Case TabIndex
|
|
Case 0
|
|
GridControlSearch1.DataSource = oDatatable
|
|
GridViewSearch1.BestFitColumns(True)
|
|
Case 1
|
|
GridControlSearch2.DataSource = oDatatable
|
|
GridViewSearch2.BestFitColumns(True)
|
|
Case 2
|
|
GridControlSearch3.DataSource = oDatatable
|
|
GridViewSearch3.BestFitColumns(True)
|
|
Case 3
|
|
GridControlSearch4.DataSource = oDatatable
|
|
GridViewSearch4.BestFitColumns(True)
|
|
Case 4
|
|
GridControlSearch5.DataSource = oDatatable
|
|
GridViewSearch5.BestFitColumns(True)
|
|
|
|
End Select
|
|
tsslblSQL.Text = $"Tab [{TabCaption}] refreshed - {Now}"
|
|
End If
|
|
Catch ex As Exception
|
|
LOGGER.Error(ex)
|
|
End Try
|
|
End Sub
|
|
Sub Refresh_Load_GridDoc(ConID As Integer, SQLCommand As String, TabIndex As Integer, TabCaption As String)
|
|
Try
|
|
Dim myGridControl As DevExpress.XtraGrid.GridControl
|
|
Dim myGridview As DevExpress.XtraGrid.Views.Grid.GridView
|
|
Select Case TabIndex
|
|
Case 0
|
|
GridControlDocSearch1.DataSource = Nothing
|
|
GridViewDocSearch1.Columns.Clear()
|
|
myGridview = GridViewDocSearch1
|
|
myGridControl = GridControlDocSearch1
|
|
Case 1
|
|
GridControlDocSearch2.DataSource = Nothing
|
|
GridViewDocSearch2.Columns.Clear()
|
|
myGridview = GridViewDocSearch2
|
|
myGridControl = GridControlDocSearch2
|
|
Case 2
|
|
GridControlDocSearch3.DataSource = Nothing
|
|
GridViewDocSearch3.Columns.Clear()
|
|
myGridview = GridViewDocSearch3
|
|
myGridControl = GridControlDocSearch3
|
|
Case 3
|
|
GridControlDocSearch4.DataSource = Nothing
|
|
GridViewDocSearch4.Columns.Clear()
|
|
myGridControl = GridControlDocSearch4
|
|
myGridview = GridViewDocSearch4
|
|
Case 4
|
|
GridControlDocSearch5.DataSource = Nothing
|
|
GridViewDocSearch5.Columns.Clear()
|
|
myGridControl = GridControlDocSearch5
|
|
myGridview = GridViewDocSearch5
|
|
End Select
|
|
myGridControl.ContextMenuStrip = ContextMenuStripWMFile
|
|
|
|
Dim oDatatable As DataTable = DatabaseFallback.GetDatatable(New GetDatatableOptions(SQLCommand, DatabaseType.ECM) With {
|
|
.ConnectionId = ConID
|
|
})
|
|
|
|
If Not IsNothing(oDatatable) Then
|
|
XtraTabControlDocs.TabPages(TabIndex).Text = $"{TabCaption} ({oDatatable.Rows.Count})"
|
|
|
|
' FIX: Nicht jedes Doc-Tab liefert echte Dokumentspalten
|
|
Dim hasDocId As Boolean = oDatatable.Columns.Contains("DocID")
|
|
Dim hasFullFilename As Boolean = oDatatable.Columns.Contains("FULL_FILENAME")
|
|
|
|
If Not hasDocId OrElse Not hasFullFilename Then
|
|
LOGGER.Warn($"⚠️ Refresh_Load_GridDoc: Tab [{TabCaption}] liefert kein Dokument-Schema (DocID/FULL_FILENAME fehlt). Fallback auf Standard-Grid.")
|
|
myGridControl.DataSource = oDatatable
|
|
myGridview.BestFitColumns(True)
|
|
clsWMDocGrid.DTDocuments = Nothing
|
|
ToolStripDropDownButtonFile.Visible = False
|
|
tslblState.Text = $"Tab [{TabCaption}] refreshed (fallback grid) - {Now}"
|
|
Exit Sub
|
|
End If
|
|
|
|
clsWMDocGrid.DTDocuments = oDatatable
|
|
Create_GridControl(myGridview, oDatatable)
|
|
|
|
Dim oxmlPath As String = ""
|
|
oxmlPath = Get_DocGrid_Layout_Filename(XtraTabControlDocs.SelectedTabPageIndex)
|
|
|
|
If File.Exists(oxmlPath) Then
|
|
myGridview.RestoreLayoutFromXml(oxmlPath)
|
|
myGridview.GuessAutoFilterRowValuesFromFilter()
|
|
End If
|
|
tslblState.Text = $"Tab [{TabCaption}] refreshed - {Now}"
|
|
Else
|
|
clsWMDocGrid.DTDocuments = Nothing
|
|
End If
|
|
Catch ex As Exception
|
|
LOGGER.Error(ex)
|
|
End Try
|
|
End Sub
|
|
Private Function Create_GridControl(MyGridView As GridView, _datatable As DataTable) As GridView
|
|
Dim oMyDocDatatable As New DataTable
|
|
Try
|
|
'Die Icon Colum erstellen und konfigurieren
|
|
Dim oColIcon As New System.Data.DataColumn()
|
|
oColIcon.DataType = GetType(Image)
|
|
oColIcon.ColumnName = "ICON"
|
|
oColIcon.Caption = ""
|
|
oMyDocDatatable.Columns.Add(oColIcon)
|
|
|
|
Dim oColPath As New System.Data.DataColumn()
|
|
oColPath.DataType = GetType(String)
|
|
oColPath.ColumnName = "FULL_FILENAME"
|
|
oColPath.Caption = "Fullpath"
|
|
oMyDocDatatable.Columns.Add(oColPath)
|
|
Dim oColDocID As New System.Data.DataColumn()
|
|
oColDocID.DataType = GetType(Int32)
|
|
oColDocID.ColumnName = "DocID"
|
|
oColDocID.Caption = "DocID"
|
|
oMyDocDatatable.Columns.Add(oColDocID)
|
|
Dim oRestColArray As New List(Of String)
|
|
For Each oCol As DataColumn In _datatable.Columns
|
|
Dim onewColumn As New System.Data.DataColumn()
|
|
If oCol.ColumnName <> "DocID" And oCol.ColumnName <> "FULL_FILENAME" And oCol.ColumnName <> "Filename" Then
|
|
|
|
onewColumn.DataType = GetType(String)
|
|
onewColumn.ColumnName = oCol.ColumnName
|
|
onewColumn.Caption = oCol.Caption
|
|
oMyDocDatatable.Columns.Add(onewColumn)
|
|
oRestColArray.Add(onewColumn.ColumnName)
|
|
End If
|
|
|
|
Next
|
|
For Each FILE_ROW As DataRow In _datatable.Rows
|
|
Dim oFullpath = FILE_ROW.Item("FULL_FILENAME")
|
|
Dim oDocID = FILE_ROW.Item("DocID")
|
|
'Dim Folderpath = Path.GetDirectoryName(fullpath)
|
|
Dim oFilename = Path.GetFileName(oFullpath)
|
|
Dim oFileextension = Path.GetExtension(oFullpath)
|
|
Dim oNewRow As DataRow
|
|
oNewRow = oMyDocDatatable.NewRow()
|
|
'Icon zuweisen
|
|
Select Case oFileextension.ToUpper
|
|
Case ".csv".ToUpper
|
|
oNewRow.Item(0) = My.Resources.doc_excel_csv
|
|
Case ".txt".ToUpper
|
|
oNewRow.Item(0) = My.Resources.txt
|
|
Case ".pdf".ToUpper
|
|
oNewRow.Item(0) = My.Resources.pdf
|
|
Case ".doc".ToUpper
|
|
oNewRow.Item(0) = My.Resources.doc
|
|
Case ".docx".ToUpper
|
|
oNewRow.Item(0) = My.Resources.doc
|
|
Case ".xls".ToUpper
|
|
oNewRow.Item(0) = My.Resources.xls
|
|
Case ".xlsx".ToUpper
|
|
oNewRow.Item(0) = My.Resources.xls
|
|
Case ".xlsm".ToUpper
|
|
oNewRow.Item(0) = My.Resources.xls
|
|
Case ".ppt".ToUpper
|
|
oNewRow.Item(0) = My.Resources.ppt
|
|
Case ".pptx".ToUpper
|
|
oNewRow.Item(0) = My.Resources.ppt
|
|
Case ".dwg".ToUpper
|
|
oNewRow.Item(0) = My.Resources.dwg
|
|
Case ".dxf".ToUpper
|
|
oNewRow.Item(0) = My.Resources.dxf
|
|
Case ".msg".ToUpper
|
|
oNewRow.Item(0) = My.Resources.email_go
|
|
Case ".msg".ToUpper
|
|
oNewRow.Item(0) = My.Resources.email_go
|
|
Case Else
|
|
oNewRow.Item(0) = My.Resources._blank
|
|
End Select
|
|
'Den Filepath mitgeben
|
|
oNewRow.Item(1) = oFullpath
|
|
oNewRow.Item(2) = oDocID
|
|
|
|
Dim i = 3 'Fängt bei 3 an, um die definierten Spalten zu überspringen
|
|
For Each Colname As String In oRestColArray
|
|
Dim oRowValue
|
|
oRowValue = FILE_ROW.Item(Colname)
|
|
oNewRow.Item(i) = oRowValue.ToString
|
|
i += 1
|
|
Next
|
|
oMyDocDatatable.Rows.Add(oNewRow)
|
|
Next
|
|
Dim sdsd As String = ""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dim oGridControl As GridControl = MyGridView.GridControl
|
|
oGridControl.DataSource = oMyDocDatatable
|
|
oGridControl.ForceInitialize()
|
|
Try
|
|
MyGridView.Columns.Item("DocID").Visible = False
|
|
Catch ex As Exception
|
|
End Try
|
|
Try
|
|
MyGridView.Columns.Item("FULL_FILENAME").Visible = False
|
|
Catch ex As Exception
|
|
End Try
|
|
|
|
Dim created, changed As String
|
|
If USER_LANGUAGE <> "de-DE" Then
|
|
changed = "Changed"
|
|
created = "Created"
|
|
Else
|
|
changed = "Geändert"
|
|
created = "Erstellt"
|
|
End If
|
|
|
|
Dim createdColumn = MyGridView.Columns(created)
|
|
If Not IsNothing(createdColumn) Then
|
|
createdColumn.DisplayFormat.FormatType = FormatType.DateTime
|
|
createdColumn.DisplayFormat.FormatString = USER_DATE_FORMAT & " HH:MM:ss"
|
|
End If
|
|
|
|
Dim changedColumn = MyGridView.Columns(changed)
|
|
If Not IsNothing(changedColumn) Then
|
|
changedColumn.DisplayFormat.FormatType = FormatType.DateTime
|
|
changedColumn.DisplayFormat.FormatString = USER_DATE_FORMAT & " HH:MM:ss"
|
|
End If
|
|
' Alle Spalten aus ReadOnly setzen, danach werden alle passenden auf nicht ReadOnly gesetzt
|
|
For Each column As GridColumn In MyGridView.Columns
|
|
column.OptionsColumn.AllowEdit = False
|
|
Next
|
|
MyGridView.Columns.Item("ICON").MaxWidth = 24
|
|
MyGridView.Columns.Item("ICON").MinWidth = 24
|
|
MyGridView.OptionsView.BestFitMaxRowCount = -1
|
|
MyGridView.BestFitColumns(True)
|
|
Return MyGridView
|
|
Catch ex As Exception
|
|
LOGGER.Error(ex)
|
|
Return Nothing
|
|
End Try
|
|
End Function
|
|
Private Sub frmValidatorSearch_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
|
|
Try
|
|
DocumentViewer1.Done()
|
|
Catch ex As Exception
|
|
LOGGER.Warn($"Unexpected error in DocumentViewerValSearch.Done: {ex.Message}")
|
|
End Try
|
|
Try
|
|
' Position und Größe speichern
|
|
My.Settings.frmValidatorSearchSize = Me.Size
|
|
My.Settings.frmValidatorSearchPosition = Me.Location
|
|
My.Settings.frmValSearchSplitterDistance = SplitContainerSearches.SplitterDistance
|
|
My.Settings.Save()
|
|
Catch ex As Exception
|
|
LOGGER.Error(ex)
|
|
LOGGER.Info("Error in Save FormLayout: " & ex.Message)
|
|
End Try
|
|
|
|
End Sub
|
|
|
|
Private Sub frmValidatorSearch_Load(sender As Object, e As EventArgs) Handles Me.Load
|
|
Try
|
|
DocumentViewer1.Init(LOGCONFIG, GDPICTURE_LICENSE, New DigitalData.Controls.DocumentViewer.DocumentViewer.ToolbarSettings() With {
|
|
.ShowPrintButton = True,
|
|
.ShowRotateButton = True,
|
|
.ShowFlipButton = True,
|
|
.ShowSettingButton = True
|
|
})
|
|
Catch ex As Exception
|
|
LOGGER.Warn("⚠️ Error initializing DocViewDocsValdiatorSearch: " & ex.Message)
|
|
End Try
|
|
|
|
OperationMode = GetOperationMode()
|
|
Documentloader = New Loader(LOGCONFIG, OperationMode, Environment.Service.Client, Environment.User)
|
|
|
|
|
|
SplitContainerSearches.Panel1Collapsed = True
|
|
If My.Settings.frmValidatorSearchPosition.IsEmpty = False Then
|
|
If My.Settings.frmValidatorSearchPosition.X > 0 And My.Settings.frmValidatorSearchPosition.Y > 0 Then
|
|
Location = My.Settings.frmValidatorSearchPosition
|
|
End If
|
|
End If
|
|
If My.Settings.frmValidatorSearchSize.IsEmpty = False Then
|
|
If My.Settings.frmValidatorSearchSize.Height > 120 And My.Settings.frmValidatorSearchSize.Width > 120 Then
|
|
Me.Size = My.Settings.frmValidatorSearchSize
|
|
End If
|
|
End If
|
|
If My.Settings.frmValSearchSplitterDistance > 20 Then
|
|
SplitContainerSearches.SplitterDistance = My.Settings.frmValSearchSplitterDistance
|
|
End If
|
|
' DocumentPathHandler initialisieren
|
|
_documentPathHandler = New DocumentPathHandler(LOGCONFIG)
|
|
|
|
ToolStripDropDownButtonFile.Visible = False
|
|
End Sub
|
|
|
|
Private Sub EnsureFormIsVisible()
|
|
Try
|
|
' Aktuellen Bildschirm basierend auf der Formularposition ermitteln
|
|
Dim currentScreen As Screen = Screen.FromPoint(Me.Location)
|
|
Dim workingArea As Rectangle = currentScreen.WorkingArea
|
|
|
|
' Prüfen ob das Formular vollständig außerhalb des sichtbaren Bereichs liegt
|
|
Dim formBounds As New Rectangle(Me.Location, Me.Size)
|
|
|
|
' Wenn das Formular nicht mit dem Arbeitsbereich überschneidet
|
|
If Not workingArea.IntersectsWith(formBounds) Then
|
|
CenterFormOnScreen()
|
|
Exit Sub
|
|
End If
|
|
|
|
' Optional: Prüfen ob das Formular zu weit außerhalb liegt (z.B. nur 20% sichtbar)
|
|
Dim visibleArea As Rectangle = Rectangle.Intersect(workingArea, formBounds)
|
|
Dim visiblePercentage As Double = (visibleArea.Width * visibleArea.Height) / (formBounds.Width * formBounds.Height)
|
|
|
|
If visiblePercentage < 0.2 Then ' Weniger als 20% sichtbar
|
|
CenterFormOnScreen()
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
LOGGER.Error(ex)
|
|
' Bei Fehler sicherheitshalber zentrieren
|
|
CenterFormOnScreen()
|
|
End Try
|
|
End Sub
|
|
|
|
Private Sub CenterFormOnScreen()
|
|
Try
|
|
' Formular auf dem primären Bildschirm zentrieren
|
|
Me.StartPosition = FormStartPosition.CenterScreen
|
|
|
|
' Alternative: Auf aktuellem Bildschirm zentrieren
|
|
Dim currentScreen As Screen = Screen.PrimaryScreen
|
|
Dim x As Integer = currentScreen.WorkingArea.Left + (currentScreen.WorkingArea.Width - Me.Width) \ 2
|
|
Dim y As Integer = currentScreen.WorkingArea.Top + (currentScreen.WorkingArea.Height - Me.Height) \ 2
|
|
Me.Location = New Point(x, y)
|
|
|
|
LOGGER.Info("Formular wurde zentriert, da es außerhalb des sichtbaren Bereichs lag")
|
|
Catch ex As Exception
|
|
LOGGER.Error(ex)
|
|
End Try
|
|
End Sub
|
|
Private Sub frmValidatorSearch_Shown(sender As Object, e As EventArgs) Handles Me.Shown
|
|
' Prüfen ob das Formular im sichtbaren Bereich liegt
|
|
EnsureFormIsVisible()
|
|
formLoaded = True
|
|
End Sub
|
|
|
|
|
|
|
|
Private Sub EigenschaftenDateiToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles EigenschaftenDateiToolStripMenuItem.Click
|
|
Show_File_Properties()
|
|
End Sub
|
|
Sub Show_File_Properties()
|
|
If IsNothing(clsWMDocGrid.DTDocuments) Then
|
|
MsgBox("Could not read file Parameters!", MsgBoxStyle.Exclamation)
|
|
Exit Sub
|
|
End If
|
|
For Each oRow As DataRow In clsWMDocGrid.DTDocuments.Rows
|
|
If oRow.Item("DOC_PATH") <> "" Then
|
|
Cursor = Cursors.WaitCursor
|
|
Dim sei As New SHELLEXECUTEINFO
|
|
sei.cbSize = Marshal.SizeOf(sei)
|
|
sei.lpVerb = "properties"
|
|
sei.lpFile = oRow.Item("DOC_PATH")
|
|
sei.nShow = SW_SHOW
|
|
sei.fMask = SEE_MASK_INVOKEIDLIST
|
|
If Not ShellExecuteEx(sei) Then
|
|
Dim ex As New System.ComponentModel.Win32Exception(System.Runtime.InteropServices.Marshal.GetLastWin32Error())
|
|
MsgBox("Error in Open file propertys: " & ex.Message, MsgBoxStyle.Critical)
|
|
LOGGER.Error(ex)
|
|
End If
|
|
End If
|
|
Cursor = Cursors.Default
|
|
Next
|
|
End Sub
|
|
Sub Refresh_DocID(myGrid As GridView)
|
|
If myGrid Is Nothing Then
|
|
LOGGER.Warn("⚠️ Refresh_DocID: myGrid is Nothing - Exit Sub")
|
|
Return
|
|
End If
|
|
|
|
Try
|
|
myGrid.ShowLoadingPanel()
|
|
clsWMDocGrid.ActiveDocGrid = myGrid
|
|
clsWMDocGrid.ActiveDocGrid.EndSelection()
|
|
clsWMDocGrid.GetDocItems()
|
|
|
|
If ToolStripDropDownButtonFile.Visible = False Then
|
|
ToolStripDropDownButtonFile.Visible = True
|
|
End If
|
|
|
|
If clsWMDocGrid.SELECTED_DOC_ID = 0 Then
|
|
tslblDocID.Text = "DocRow not selected"
|
|
ToolStripDropDownButtonFile.Enabled = False
|
|
Return
|
|
End If
|
|
|
|
If LastDocID = clsWMDocGrid.SELECTED_DOC_ID Then
|
|
Return
|
|
End If
|
|
|
|
tslblDocID.Text = "DocID: " & clsWMDocGrid.SELECTED_DOC_ID.ToString
|
|
ToolStripDropDownButtonFile.Enabled = True
|
|
LOGGER.Debug($"✓ DocID aktualisiert: {clsWMDocGrid.SELECTED_DOC_ID}")
|
|
If IsNothing(Documentloader) Then
|
|
If OperationMode = Nothing Then
|
|
OperationMode = GetOperationMode()
|
|
End If
|
|
Documentloader = New Loader(LOGCONFIG, OperationMode, Environment.Service.Client, Environment.User)
|
|
End If
|
|
|
|
If _documentPathHandler Is Nothing Then
|
|
_documentPathHandler = New DocumentPathHandler(LOGCONFIG)
|
|
End If
|
|
|
|
Dim oDocument As DocumentResultList.Document = Documentloader.Load(clsWMDocGrid.SELECTED_DOC_ID, clsWMDocGrid.SELECTED_DOC_PATH)
|
|
|
|
If IsNothing(oDocument) Then
|
|
LOGGER.Warn($"⚠️ Refresh_DocID: Documentloader.Load lieferte Nothing (DocID={clsWMDocGrid.SELECTED_DOC_ID})")
|
|
statlbl.Text = "Dokument konnte nicht geladen werden."
|
|
Return
|
|
Else
|
|
LOGGER.Debug($"✓ Documentloader.Load erfolgreich für DocID={clsWMDocGrid.SELECTED_DOC_ID}, Pfad: {clsWMDocGrid.SELECTED_DOC_PATH}")
|
|
End If
|
|
|
|
If Not IsNothing(DocumentViewer1) AndAlso Not IsNothing(oDocument.Contents) Then
|
|
Dim options As New DocumentPathHandler.DocumentPathOptions With {
|
|
.EnableMapping = COPY_WMFILE_2TEMP AndAlso Not String.IsNullOrWhiteSpace(WMSUFFIX),
|
|
.WMSuffix = WMSUFFIX,
|
|
.SpecificDrive = If(Len(MAP_SHARE_DRIVE) = 1, MAP_SHARE_DRIVE, ""),
|
|
.DriveBlacklist = MAP_BLACKLIST,
|
|
.CopyToTemp = COPY_WMFILE_2TEMP,
|
|
.TempFolder = TEMP_DOCUMENT_FOLDER,
|
|
.UnmapAfterCopy = True
|
|
}
|
|
|
|
Dim result = _documentPathHandler.ProcessDocumentPath(clsWMDocGrid.SELECTED_DOC_PATH, options)
|
|
|
|
If result.Success Then
|
|
DocumentViewer1.LoadFile_FromPath(result.FinalPath)
|
|
LastDocID = clsWMDocGrid.SELECTED_DOC_ID
|
|
DocumentViewer1.RightViewOnly(USER_RIGHT_VIEW_ONLY)
|
|
LOGGER.Debug($"✓ [ValidatorSearch] Dokument geladen: [{Path.GetFileName(result.FinalPath)}]")
|
|
Else
|
|
LOGGER.Error($"❌ [ValidatorSearch] {result.ErrorMessage}")
|
|
statlbl.Text = $"Fehler: {result.ErrorMessage}"
|
|
End If
|
|
Else
|
|
statlbl.Text = "Dokumentinhalt ist leer."
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
LOGGER.Error(ex)
|
|
Finally
|
|
Try
|
|
myGrid.HideLoadingPanel()
|
|
Catch
|
|
End Try
|
|
End Try
|
|
End Sub
|
|
Private Sub GridViewDocSearch_FocusedRowChanged(sender As Object, e As FocusedRowChangedEventArgs) Handles GridViewDocSearch1.FocusedRowChanged,
|
|
GridViewDocSearch2.FocusedRowChanged,
|
|
GridViewDocSearch3.FocusedRowChanged,
|
|
GridViewDocSearch4.FocusedRowChanged,
|
|
GridViewDocSearch5.FocusedRowChanged
|
|
|
|
If Not Me.Visible Then
|
|
Return
|
|
End If
|
|
|
|
Dim activeGrid As GridView = TryCast(sender, GridView)
|
|
If activeGrid Is Nothing Then
|
|
Return
|
|
End If
|
|
|
|
LOGGER.Debug($"FocusedRowChanged ausgelöst: [{activeGrid.Name}]")
|
|
Refresh_DocID(activeGrid)
|
|
End Sub
|
|
|
|
Private Sub GridViewDocSearch_FocusedColumnChanged(sender As Object, e As FocusedColumnChangedEventArgs) Handles GridViewDocSearch1.FocusedColumnChanged,
|
|
GridViewDocSearch2.FocusedColumnChanged,
|
|
GridViewDocSearch3.FocusedColumnChanged,
|
|
GridViewDocSearch4.FocusedColumnChanged,
|
|
GridViewDocSearch5.FocusedColumnChanged
|
|
|
|
If Not Me.Visible Then
|
|
Return
|
|
End If
|
|
|
|
Dim activeGrid As GridView = TryCast(sender, GridView)
|
|
If activeGrid Is Nothing Then
|
|
Return
|
|
End If
|
|
|
|
LOGGER.Debug($"FocusedColumnChanged ausgelöst: [{activeGrid.Name}]")
|
|
Refresh_DocID(activeGrid)
|
|
End Sub
|
|
|
|
Private Sub DateiÖffnenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DateiÖffnenToolStripMenuItem.Click
|
|
FileShow()
|
|
|
|
End Sub
|
|
Sub FileShow()
|
|
Try
|
|
If IsNothing(clsWMDocGrid.SELECTED_DOC_PATH) Then
|
|
MsgBox("Could not read fileparameters(5)!", MsgBoxStyle.Exclamation)
|
|
Exit Sub
|
|
End If
|
|
File_SYSOPEN(clsWMDocGrid.SELECTED_DOC_PATH, clsWMDocGrid.SELECTED_DOC_ID)
|
|
Catch ex As Exception
|
|
|
|
End Try
|
|
End Sub
|
|
Private Shared Sub File_SYSOPEN(RESULT_DOC_PATH As Object, DocID As String)
|
|
Try
|
|
If RESULT_DOC_PATH <> Nothing Then
|
|
If File.Exists(RESULT_DOC_PATH) Then
|
|
BW_DocPath = RESULT_DOC_PATH
|
|
BW_DocID = DocID
|
|
|
|
Dim BWFileHandler As New BackgroundWorker
|
|
AddHandler BWFileHandler.DoWork, AddressOf BWFileHandler_DoWork
|
|
BWFileHandler.RunWorkerAsync()
|
|
Else
|
|
MsgBox("Document is not existing or accessible!", MsgBoxStyle.Exclamation)
|
|
|
|
End If
|
|
|
|
Else
|
|
LOGGER.Warn("⚠️ Attention: RESULT_DOC_PATH is nothing")
|
|
End If
|
|
Catch ex As Exception
|
|
MsgBox("Unexpected Error in File_SYSOPEN:" & vbNewLine & ex.Message & vbNewLine & RESULT_DOC_PATH & vbNewLine & "DocID: " & DocID, MsgBoxStyle.Critical)
|
|
LOGGER.Error(ex)
|
|
End Try
|
|
End Sub
|
|
Private Shared Sub BWFileHandler_DoWork()
|
|
Try
|
|
|
|
Dim oMyProcess = New Process()
|
|
|
|
Try
|
|
'Dim oPSI As New ProcessStartInfo(BW_DocPath)
|
|
oMyProcess.StartInfo.FileName = BW_DocPath
|
|
oMyProcess.StartInfo.UseShellExecute = True
|
|
oMyProcess.StartInfo.RedirectStandardOutput = False
|
|
oMyProcess.Start()
|
|
|
|
'oMyProcess.WaitForExit()
|
|
Catch ex As Exception
|
|
LOGGER.Error(ex)
|
|
Exit Sub
|
|
End Try
|
|
|
|
Catch ex As Exception
|
|
LOGGER.Error(ex)
|
|
|
|
Try
|
|
Process.Start(BW_DocPath)
|
|
Catch ex1 As Exception
|
|
LOGGER.Error(ex)
|
|
|
|
End Try
|
|
End Try
|
|
End Sub
|
|
Private Sub DateiÖffnenToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles DateiÖffnenToolStripMenuItem1.Click
|
|
FileShow()
|
|
End Sub
|
|
|
|
Private Sub EigenschaftenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles EigenschaftenToolStripMenuItem.Click
|
|
Show_File_Properties()
|
|
End Sub
|
|
Private Function Get_DocGrid_Layout_Filename(oIndex As Integer)
|
|
Dim oUserConfigPath = USER_CONFIG_DIRECTORY
|
|
Dim oFilename As String = String.Format("GridViewDoc_Search-{0}-{1}-{2}-UserLayout.xml", oIndex, CURRENT_ProfilGUID, USER_LANGUAGE)
|
|
Dim oPath = System.IO.Path.Combine(oUserConfigPath, oFilename)
|
|
Return oPath
|
|
End Function
|
|
Private Sub GridControlDocSearch_Leave(sender As Object, e As EventArgs) Handles GridControlDocSearch1.Leave, GridControlDocSearch2.Leave, GridControlDocSearch3.Leave, GridControlDocSearch4.Leave, GridControlDocSearch5.Leave
|
|
SaveDocGridLayout()
|
|
End Sub
|
|
|
|
Sub SaveDocGridLayout()
|
|
Dim oXMLPath = Get_DocGrid_Layout_Filename(XtraTabControlDocs.SelectedTabPageIndex)
|
|
If File.Exists(oXMLPath) Then
|
|
clsWMDocGrid.ActiveDocGrid.SaveLayoutToXml(oXMLPath)
|
|
End If
|
|
|
|
|
|
End Sub
|
|
Private Sub ToolStripButtonRefreshSearches_Click(sender As Object, e As EventArgs) Handles ToolStripButtonRefreshSearches.Click
|
|
If DT_FILTERED_PROFILE_SEARCHES_DATA.Rows.Count > 0 Then
|
|
LOGGER.Debug($"There are [{DT_FILTERED_PROFILE_SEARCHES_DATA.Rows.Count}] DATASearches configured!")
|
|
_DTDATASearches = DT_FILTERED_PROFILE_SEARCHES_DATA
|
|
Dim oConID = DT_FILTERED_PROFILE_SEARCHES_DATA.Rows(0).Item("CONN_ID")
|
|
Dim oCommand = DT_FILTERED_PROFILE_SEARCHES_DATA.Rows(0).Item("SQL_COMMAND")
|
|
oCommand = clsPatterns.ReplaceAllValues(oCommand, _frmValidator.PanelValidatorControl, True)
|
|
XtraTabControlSQL.SelectedTabPageIndex = 0
|
|
Refresh_Load_GridSQL(oConID, oCommand, 0, DT_FILTERED_PROFILE_SEARCHES_DATA.Rows(0).Item("TAB_TITLE"))
|
|
Else
|
|
LOGGER.Debug("No DATASearches configured for this profile!")
|
|
End If
|
|
If DT_FILTERED_PROFILE_SEARCHES_DOC.Rows.Count > 0 Then
|
|
LOGGER.Debug($"There are [{DT_FILTERED_PROFILE_SEARCHES_DOC.Rows.Count}] DocSearches configured!")
|
|
_DTDocSearches = DT_FILTERED_PROFILE_SEARCHES_DOC
|
|
Dim oConID = DT_FILTERED_PROFILE_SEARCHES_DOC.Rows(0).Item("CONN_ID")
|
|
Dim oCommand = DT_FILTERED_PROFILE_SEARCHES_DOC.Rows(0).Item("SQL_COMMAND")
|
|
oCommand = clsPatterns.ReplaceAllValues(oCommand, _frmValidator.PanelValidatorControl, True)
|
|
XtraTabControlDocs.SelectedTabPageIndex = 0
|
|
RefreshTabDoc(oConID, oCommand, 0, DT_FILTERED_PROFILE_SEARCHES_DOC.Rows(0).Item("TAB_TITLE"))
|
|
Else
|
|
LOGGER.Debug("No DocSearches configured for this profile!")
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub GridViewDocSearch_ColumnWidthChanged(sender As Object, e As ColumnEventArgs) Handles GridViewDocSearch1.ColumnWidthChanged, GridViewDocSearch2.ColumnWidthChanged, GridViewDocSearch3.ColumnWidthChanged, GridViewDocSearch4.ColumnWidthChanged, GridViewDocSearch5.ColumnWidthChanged
|
|
SaveDocGridLayout()
|
|
End Sub
|
|
|
|
Private Sub ToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem1.Click
|
|
ReLoad_Active_DocTab()
|
|
End Sub
|
|
Sub ReLoad_Active_DocTab()
|
|
Dim oTabIndex = XtraTabControlDocs.SelectedTabPageIndex
|
|
Dim oConID = DT_FILTERED_PROFILE_SEARCHES_DOC.Rows(oTabIndex).Item("CONN_ID")
|
|
Dim oCommand = DT_FILTERED_PROFILE_SEARCHES_DOC.Rows(oTabIndex).Item("SQL_COMMAND")
|
|
oCommand = clsPatterns.ReplaceAllValues(oCommand, _frmValidator.PanelValidatorControl, True)
|
|
RefreshTabDoc(oConID, oCommand, oTabIndex, DT_FILTERED_PROFILE_SEARCHES_DOC.Rows(oTabIndex).Item("TAB_TITLE"))
|
|
End Sub
|
|
|
|
Private Sub LayoutZurücksetzenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles LayoutZurücksetzenToolStripMenuItem.Click
|
|
Set_DoclayoutBack()
|
|
|
|
End Sub
|
|
Sub Set_DoclayoutBack()
|
|
Dim oXMLPath = Get_DocGrid_Layout_Filename(XtraTabControlDocs.SelectedTabPageIndex)
|
|
Try
|
|
If File.Exists(oXMLPath) Then
|
|
File.Delete(oXMLPath)
|
|
ReLoad_Active_DocTab()
|
|
tslblState.Text = "Layout has been set back!"
|
|
Else
|
|
tslblState.Text = ""
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
tslblState.Text = ""
|
|
End Try
|
|
|
|
|
|
End Sub
|
|
Private Sub ToolStripMenuItem4_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem4.Click
|
|
ReLoad_Active_SQLTab()
|
|
End Sub
|
|
Sub ReLoad_Active_SQLTab()
|
|
Dim oTabIndex = XtraTabControlSQL.SelectedTabPageIndex
|
|
Dim oConID = DT_FILTERED_PROFILE_SEARCHES_DATA.Rows(oTabIndex).Item("CONN_ID")
|
|
Dim oCommand = DT_FILTERED_PROFILE_SEARCHES_DATA.Rows(oTabIndex).Item("SQL_COMMAND")
|
|
oCommand = clsPatterns.ReplaceAllValues(oCommand, _frmValidator.PanelValidatorControl, True)
|
|
RefreshTabSQL(oConID, oCommand, oTabIndex, DT_FILTERED_PROFILE_SEARCHES_DATA.Rows(oTabIndex).Item("TAB_TITLE"))
|
|
End Sub
|
|
|
|
Private Sub GridControlDocSearch1_DoubleClick(sender As Object, e As EventArgs) Handles GridControlDocSearch1.DoubleClick
|
|
If Not Me.Visible Then Return
|
|
Refresh_DocID(GridViewDocSearch1)
|
|
FileShow()
|
|
End Sub
|
|
Private Sub GridControlDocSearch2_DoubleClick(sender As Object, e As EventArgs) Handles GridControlDocSearch2.DoubleClick
|
|
If Not Me.Visible Then Return
|
|
Refresh_DocID(GridViewDocSearch2)
|
|
FileShow()
|
|
End Sub
|
|
Private Sub GridControlDocSearch3_DoubleClick(sender As Object, e As EventArgs) Handles GridControlDocSearch3.DoubleClick
|
|
If Not Me.Visible Then Return
|
|
Refresh_DocID(GridViewDocSearch3)
|
|
FileShow()
|
|
End Sub
|
|
Private Sub GridControlDocSearch4_DoubleClick(sender As Object, e As EventArgs) Handles GridControlDocSearch4.DoubleClick
|
|
If Not Me.Visible Then Return
|
|
Refresh_DocID(GridViewDocSearch4)
|
|
FileShow()
|
|
End Sub
|
|
Private Sub GridControlDocSearch5_DoubleClick(sender As Object, e As EventArgs) Handles GridControlDocSearch5.DoubleClick
|
|
If Not Me.Visible Then Return
|
|
Refresh_DocID(GridViewDocSearch5)
|
|
FileShow()
|
|
End Sub
|
|
|
|
Private Sub GridControlDocSearch1_Click(sender As Object, e As EventArgs) Handles GridControlDocSearch1.Click
|
|
If Not Me.Visible Then Return
|
|
Refresh_DocID(GridViewDocSearch1)
|
|
|
|
End Sub
|
|
Private Sub GridControlDocSearch2_Click(sender As Object, e As EventArgs) Handles GridControlDocSearch2.Click
|
|
If Not Me.Visible Then Return
|
|
Refresh_DocID(GridViewDocSearch2)
|
|
End Sub
|
|
Private Sub GridControlDocSearch3_Click(sender As Object, e As EventArgs) Handles GridControlDocSearch3.Click
|
|
If Not Me.Visible Then Return
|
|
Refresh_DocID(GridViewDocSearch3)
|
|
End Sub
|
|
Private Sub GridControlDocSearch4_Click(sender As Object, e As EventArgs) Handles GridControlDocSearch4.Click
|
|
If Not Me.Visible Then Return
|
|
Refresh_DocID(GridViewDocSearch4)
|
|
End Sub
|
|
Private Sub GridControlDocSearch5_Click(sender As Object, e As EventArgs) Handles GridControlDocSearch5.Click
|
|
If Not Me.Visible Then Return
|
|
Refresh_DocID(GridViewDocSearch5)
|
|
End Sub
|
|
|
|
Private Sub ContextMenuStripWMFile_Opening(sender As Object, e As CancelEventArgs) Handles ContextMenuStripWMFile.Opening
|
|
|
|
End Sub
|
|
End Class |