V 2.9.9.0
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.
This commit is contained in:
@@ -2044,12 +2044,12 @@ Public Class frmMain
|
||||
End If
|
||||
|
||||
' ========== SEARCH SQL PREPARATION ==========
|
||||
BASEDATA_DT_PROFILE_SEARCHES_SQL = Nothing
|
||||
rows = BASEDATA_DT_PROFILES_SEARCHES_SQL.Select(oExpression, "TAB_INDEX")
|
||||
DT_FILTERED_PROFILE_SEARCHES_DATA = Nothing
|
||||
rows = BASEDATA_DT_PROFILES_SEARCHES_DATA.Select(oExpression, "TAB_INDEX")
|
||||
If rows.Length > 0 Then
|
||||
BASEDATA_DT_PROFILE_SEARCHES_SQL = rows.CopyToDataTable()
|
||||
DT_FILTERED_PROFILE_SEARCHES_DATA = rows.CopyToDataTable()
|
||||
Else
|
||||
BASEDATA_DT_PROFILE_SEARCHES_SQL = BASEDATA_DT_PROFILES_SEARCHES_SQL.Clone()
|
||||
DT_FILTERED_PROFILE_SEARCHES_DATA = BASEDATA_DT_PROFILES_SEARCHES_DATA.Clone()
|
||||
End If
|
||||
|
||||
' ========== VALIDATOR-FORM ÖFFNEN ==========
|
||||
@@ -3178,6 +3178,7 @@ FROM VWPM_PROFILE_ACTIVE T WHERE T.GUID IN (SELECT PROFILE_ID FROM [dbo].[FNPM_G
|
||||
End If
|
||||
|
||||
BASEDATA_DT_PROFILES_SEARCHES_DOC = DatabaseECM.GetDatatable(oSQL)
|
||||
EnsureProfileSearchType(BASEDATA_DT_PROFILES_SEARCHES_DOC, "DOC", NameOf(BASEDATA_DT_PROFILES_SEARCHES_DOC))
|
||||
|
||||
If pMode = "Load" Then
|
||||
DT_FILTERED_PROFILE_SEARCHES_DOC = BASEDATA_DT_PROFILES_SEARCHES_DOC.Clone()
|
||||
@@ -3185,16 +3186,18 @@ FROM VWPM_PROFILE_ACTIVE T WHERE T.GUID IN (SELECT PROFILE_ID FROM [dbo].[FNPM_G
|
||||
If pMode = "bwBasicData" Then bwBasicData.ReportProgress(50)
|
||||
oSQL = "select * from TBPM_PROFILE_SEARCH WITH (NOLOCK) where TYPE = 'SQL' AND ACTIVE = 1 ORDER BY PROFILE_ID,TAB_INDEX"
|
||||
|
||||
BASEDATA_DT_PROFILES_SEARCHES_SQL = DatabaseFallback.GetDatatable("TBPM_PROFILE_SEARCH", New GetDatatableOptions(oSQL, DatabaseType.ECM) With {
|
||||
.FilterExpression = "TYPE = 'SQL'",
|
||||
.SortByColumn = "PROFILE_ID,TAB_INDEX"
|
||||
BASEDATA_DT_PROFILES_SEARCHES_DATA = DatabaseFallback.GetDatatable("TBPM_PROFILE_SEARCH", New GetDatatableOptions(oSQL, DatabaseType.ECM) With {
|
||||
.FilterExpression = "TYPE = 'SQL'",
|
||||
.SortByColumn = "PROFILE_ID,TAB_INDEX"
|
||||
})
|
||||
EnsureProfileSearchType(BASEDATA_DT_PROFILES_SEARCHES_DATA, "SQL", NameOf(BASEDATA_DT_PROFILES_SEARCHES_DATA))
|
||||
|
||||
oSQL = String.Format("SELECT [dbo].[FNPM_LANGUAGE_CONTROL_TEXT] (NAME,'{0}',CTRL_TYPE,CTRL_TEXT) CTRL_CAPTION_LANG, '{0}' as LANGUAGE, * FROM TBPM_PROFILE_CONTROLS WITH (NOLOCK)", {USER_LANGUAGE})
|
||||
BASEDATA_TBPM_PROFILE_CONTROLS = DatabaseFallback.GetDatatable("TBPM_PROFILE_CONTROLS_LANGUAGE", New GetDatatableOptions(oSQL, DatabaseType.ECM) With {
|
||||
.FilterExpression = String.Format("LANGUAGE = '{0}'", {USER_LANGUAGE})
|
||||
})
|
||||
If pMode = "Load" Then
|
||||
BASEDATA_DT_PROFILE_SEARCHES_SQL = BASEDATA_DT_PROFILES_SEARCHES_SQL.Clone()
|
||||
DT_FILTERED_PROFILE_SEARCHES_DATA = BASEDATA_DT_PROFILES_SEARCHES_DATA.Clone()
|
||||
End If
|
||||
If pMode = "bwBasicData" Then bwBasicData.ReportProgress(60)
|
||||
LoadVWPM_CONTROL_INDEX()
|
||||
@@ -3215,6 +3218,53 @@ FROM VWPM_PROFILE_ACTIVE T WHERE T.GUID IN (SELECT PROFILE_ID FROM [dbo].[FNPM_G
|
||||
End Try
|
||||
oStopWatch.Done()
|
||||
End Sub
|
||||
Private Sub EnsureProfileSearchType(ByRef pTable As DataTable, expectedType As String, tableName As String)
|
||||
Try
|
||||
If pTable Is Nothing Then
|
||||
LOGGER.Warn($"{tableName} is Nothing - type guard skipped")
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
If pTable.Columns.Contains("TYPE") = False Then
|
||||
LOGGER.Warn($"{tableName} has no TYPE column - type guard skipped")
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
Dim cleanedTable As DataTable = pTable.Clone()
|
||||
Dim removedCount As Integer = 0
|
||||
Dim sampleInvalidSql As String = String.Empty
|
||||
|
||||
For Each row As DataRow In pTable.Rows
|
||||
Dim rowType As String = String.Empty
|
||||
If row("TYPE") IsNot DBNull.Value Then
|
||||
rowType = row("TYPE").ToString().Trim().ToUpperInvariant()
|
||||
End If
|
||||
|
||||
If rowType = expectedType.ToUpperInvariant() Then
|
||||
cleanedTable.ImportRow(row)
|
||||
Else
|
||||
removedCount += 1
|
||||
If sampleInvalidSql = String.Empty AndAlso pTable.Columns.Contains("SQL_COMMAND") Then
|
||||
If row("SQL_COMMAND") IsNot DBNull.Value Then
|
||||
sampleInvalidSql = row("SQL_COMMAND").ToString()
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
|
||||
If removedCount > 0 Then
|
||||
LOGGER.Warn($"{tableName}: removed {removedCount} row(s) with unexpected TYPE. Expected TYPE='{expectedType}'.")
|
||||
If sampleInvalidSql <> String.Empty Then
|
||||
LOGGER.Warn($"{tableName}: sample unexpected SQL_COMMAND => {sampleInvalidSql}")
|
||||
End If
|
||||
End If
|
||||
LOGGER.Debug($"{tableName}: {cleanedTable.Rows.Count} rows with TYPE='{expectedType}' after type guard.")
|
||||
pTable = cleanedTable
|
||||
Catch ex As Exception
|
||||
LOGGER.Error(ex)
|
||||
LOGGER.Warn($"EnsureProfileSearchType failed for {tableName}")
|
||||
End Try
|
||||
End Sub
|
||||
Private Sub ConfigureGlobalLookAndFeel()
|
||||
If RIBBON_COLOR_SCHEME <> "" Then
|
||||
UserLookAndFeel.Default.UseDefaultLookAndFeel = False
|
||||
@@ -4082,10 +4132,10 @@ FROM VWPM_PROFILE_ACTIVE T WHERE T.GUID IN (SELECT PROFILE_ID FROM [dbo].[FNPM_G
|
||||
oExpression = $"PROFILE_ID = {CURRENT_ProfilGUID}"
|
||||
BASEDATA_DT_PROFILES_SEARCHES_DOC.Select(oExpression, "TAB_INDEX").CopyToDataTable(DT_FILTERED_PROFILE_SEARCHES_DOC, LoadOption.PreserveChanges)
|
||||
|
||||
BASEDATA_DT_PROFILE_SEARCHES_SQL = Nothing
|
||||
BASEDATA_DT_PROFILE_SEARCHES_SQL = BASEDATA_DT_PROFILES_SEARCHES_SQL.Copy
|
||||
BASEDATA_DT_PROFILE_SEARCHES_SQL.Clear()
|
||||
BASEDATA_DT_PROFILES_SEARCHES_SQL.Select(oExpression, "TAB_INDEX").CopyToDataTable(BASEDATA_DT_PROFILE_SEARCHES_SQL, LoadOption.PreserveChanges)
|
||||
DT_FILTERED_PROFILE_SEARCHES_DATA = Nothing
|
||||
DT_FILTERED_PROFILE_SEARCHES_DATA = BASEDATA_DT_PROFILES_SEARCHES_DATA.Copy
|
||||
DT_FILTERED_PROFILE_SEARCHES_DATA.Clear()
|
||||
BASEDATA_DT_PROFILES_SEARCHES_DATA.Select(oExpression, "TAB_INDEX").CopyToDataTable(DT_FILTERED_PROFILE_SEARCHES_DATA, LoadOption.PreserveChanges)
|
||||
|
||||
Try
|
||||
Dim oEnvironment = GetEnvironment()
|
||||
|
||||
Reference in New Issue
Block a user