891 lines
40 KiB
VB.net
891 lines
40 KiB
VB.net
Option Explicit On
|
|
|
|
Imports System.IO
|
|
Imports System.Text.RegularExpressions
|
|
Imports DevExpress.XtraEditors.Controls
|
|
Imports DigitalData.Controls.LookupGrid
|
|
Imports DigitalData.GUIs.GlobalIndexer
|
|
Imports DigitalData.GUIs.ZooFlow.Globix.Models
|
|
Imports DigitalData.Modules.Database
|
|
Imports DigitalData.Modules.EDMI.API
|
|
Imports DigitalData.Modules.EDMI.API.EDMIServiceReference
|
|
Imports DigitalData.Modules.EDMI.API.Constants.DatabaseType
|
|
Imports DigitalData.Modules.Language
|
|
Imports DigitalData.Modules.Language.Utils
|
|
Imports DigitalData.Modules.Logging
|
|
Imports DigitalData.Modules.Patterns
|
|
Imports DevExpress.XtraEditors
|
|
Imports DevExpress.XtraSplashScreen
|
|
Imports DigitalData.GUIs.Common
|
|
|
|
Public Class frmGlobix_Index
|
|
#Region "+++++ Variablen ++++++"
|
|
Private ReadOnly LogConfig As LogConfig
|
|
Private ReadOnly Logger As Logger
|
|
|
|
Private Property CancelAttempts As Integer = 0
|
|
|
|
Private Const MAX_CANCEL_ATTEMPTS = 2
|
|
Private Const TEXT_MISSING_INPUT = "Bitte vervollständigen Sie die Eingaben!"
|
|
|
|
Private Property MultifileCount As Integer
|
|
Public Property FormLoaded As Boolean = False
|
|
Public Property DropType As String
|
|
|
|
|
|
Public Property ManualIndexes As List(Of ManualIndex)
|
|
Public Property DocTypes As List(Of DocType)
|
|
Public Property SelectedDocType As DocType
|
|
|
|
Private Property WindowLocation As ClassWindowLayout
|
|
Private Property Database As DatabaseWithFallback
|
|
Private Property Patterns2 As Patterns2
|
|
Private ReadOnly FormHelper As FormHelper
|
|
|
|
Private Property OverlayHandle As IOverlaySplashScreenHandle
|
|
Public Property oSuccess As Boolean = False
|
|
|
|
'Public Class ControlMeta
|
|
' Public Property IndexName As String
|
|
' Public Property IndexType As String
|
|
' Public Property MultipleValues As Boolean = False
|
|
'End Class
|
|
|
|
#End Region
|
|
Public Sub New(pLogConfig As LogConfig)
|
|
' Dieser Aufruf ist für den Designer erforderlich.
|
|
InitializeComponent()
|
|
|
|
' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
|
|
Logger = pLogConfig.GetLogger()
|
|
LogConfig = pLogConfig
|
|
|
|
Database = New DatabaseWithFallback(pLogConfig, My.Application.Service.Client, My.DatabaseECM, My.DatabaseIDB)
|
|
WindowLocation = New ClassWindowLayout(pLogConfig)
|
|
Patterns2 = New Patterns2(pLogConfig)
|
|
FormHelper = New FormHelper(pLogConfig, Me)
|
|
|
|
Localizer.Active = New LookupGridLocalizer()
|
|
End Sub
|
|
|
|
Private Sub frmGlobix_Index_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
|
ColorizeInactiveIcon = DevExpress.Utils.DefaultBoolean.True
|
|
|
|
' Abbruchzähler zurücksetzen
|
|
CancelAttempts = 0
|
|
|
|
' Show Loading Overlay
|
|
OverlayHandle = SplashScreenManager.ShowOverlayForm(Me)
|
|
|
|
My.Application.Globix.INDEXING_ACTIVE = True
|
|
End Sub
|
|
|
|
Private Async Sub frmGlobix_Index_Shown(sender As Object, e As EventArgs) Handles Me.Shown
|
|
Cursor = Cursors.Default
|
|
|
|
checkItemTopMost.Checked = My.UIConfig.Globix.TopMost
|
|
TopMost = My.UIConfig.Globix.TopMost
|
|
BringToFront()
|
|
Focus()
|
|
|
|
Try
|
|
DocumentViewer1.Init(LogConfig, My.Application.Settings.GdPictureKey)
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
End Try
|
|
|
|
Try
|
|
Refresh_Dokart()
|
|
pnlIndex.Controls.Clear()
|
|
|
|
My.Application.Globix.CURRENT_ISATTACHMENT = False
|
|
Dim oSql = $"SELECT HANDLE_TYPE FROM TBGI_FILES_USER WHERE GUID = {My.Application.Globix.CurrentWorkfile.Id}"
|
|
DropType = Await My.Database.GetScalarValueECMAsync(oSql)
|
|
|
|
My.Application.Globix.DeleteOriginalFile = My.UIConfig.Globix.DeleteOriginalFile
|
|
SplitContainerControl1.SplitterPosition = My.UIConfig.Globix.SplitterDistanceViewer
|
|
SourceDeleteItem.Enabled = True
|
|
SourceDeleteItem.Checked = My.UIConfig.Globix.DeleteOriginalFile
|
|
|
|
If DropType Is Nothing Then
|
|
Logger.Debug("File with Id [{0}] was not found in TBGI_FILES_USER. Exiting.", My.Application.Globix.CurrentWorkfile.Id)
|
|
CancelAttempts = MAX_CANCEL_ATTEMPTS
|
|
Close()
|
|
Exit Sub
|
|
End If
|
|
|
|
SetDropType(DropType)
|
|
|
|
|
|
labelFilePath.Caption = My.Application.Globix.CurrentWorkfile.FilePath
|
|
WindowLocation.LoadFormLocationSize(Me)
|
|
|
|
|
|
SetFilePreview(My.UIConfig.Globix.FilePreview)
|
|
|
|
|
|
MultifileCount = Await My.Database.GetScalarValueECMAsync("SELECT COUNT(*) FROM TBGI_FILES_USER WHERE WORKED = 0 AND GUID <> " & My.Application.Globix.CurrentWorkfile.Id & " AND UPPER(USER@WORK) = UPPER('" & Environment.UserName & "')")
|
|
My.Application.Globix.MULTIINDEXING_ACTIVE = False
|
|
|
|
If MultifileCount > 0 Then
|
|
If My.Application.User.Language = "de-DE" Then
|
|
chkMultiindexing.Caption = $"Alle nachfolgenden Dateien (#{MultifileCount}) identisch indexieren"
|
|
Else
|
|
chkMultiindexing.Caption = "All following files (#{MultifileCount}) will be indexed identically"
|
|
End If
|
|
|
|
chkMultiindexing.Checked = False
|
|
chkMultiindexing.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
|
|
|
|
Else
|
|
chkMultiindexing.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
|
|
|
|
End If
|
|
If My.UIConfig.Globix.DeleteOriginalFile Then
|
|
SourceDeleteItem.Checked = True
|
|
End If
|
|
' Letzte Auswahl merken überschreibt die automatische selektion
|
|
If My.UIConfig.Globix.ProfilePreselection Then
|
|
checkItemPreselection.Checked = True
|
|
|
|
If My.Application.Globix.CURRENT_LASTDOCTYPE <> "" Then
|
|
Dim oFoundDocType = cmbDocType.Properties.Items.
|
|
Cast(Of DocType)().
|
|
Where(Function(dt) dt.Name = My.Application.Globix.CURRENT_LASTDOCTYPE).
|
|
FirstOrDefault()
|
|
If oFoundDocType IsNot Nothing Then
|
|
cmbDocType.SelectedItem = oFoundDocType
|
|
End If
|
|
|
|
|
|
End If
|
|
Else
|
|
oSql = "SELECT DISTINCT T1.DOCTYPE as DocType, T.* FROM TBGI_REGEX_DOCTYPE T, VWGI_DOCTYPE_USER T1 WHERE T.DOCTYPE_ID = T1.DOCTYPE_ID"
|
|
Dim oRegexDoctypeTable = Database.GetDatatable("DTTBGI_REGEX_DOCTYPE", oSql, ECM)
|
|
|
|
For Each oRoW As DataRow In oRegexDoctypeTable.Rows
|
|
Dim oOnlyFilename = Path.GetFileName(My.Application.Globix.CurrentWorkfile.FilePath)
|
|
If Regex.IsMatch(oOnlyFilename, oRoW.Item("Regex")) Then
|
|
|
|
Logger.Debug("There is a match on REGEX_DOCTYPE: [{0}]", oRoW.Item("DOCTYPE"))
|
|
Logger.Debug("Regex: [{0}], FileName: [{1}]", oRoW.Item("Regex"), oOnlyFilename)
|
|
Dim oFoundDocType = cmbDocType.Properties.Items.
|
|
Cast(Of DocType)().
|
|
Where(Function(dt) dt.Name = My.Application.Globix.CURRENT_LASTDOCTYPE).
|
|
FirstOrDefault()
|
|
|
|
If oFoundDocType IsNot Nothing Then
|
|
cmbDocType.SelectedItem = oFoundDocType
|
|
End If
|
|
Exit For
|
|
End If
|
|
Next
|
|
End If
|
|
|
|
|
|
Catch ex As Exception
|
|
Logger.Warn("Unexpected error DTTBGI_REGEX_DOCTYPE - ErrorMessage: " & vbNewLine & ex.Message)
|
|
|
|
FormHelper.ShowErrorMessage(ex, "Laden des Formulars")
|
|
Finally
|
|
SplashScreenManager.CloseOverlayForm(OverlayHandle)
|
|
FormLoaded = True
|
|
End Try
|
|
End Sub
|
|
|
|
|
|
Public Sub SetDropType(pDropType As String)
|
|
If pDropType Is Nothing Then
|
|
Logger.Debug("File with Id [{0}] was not found in TBGI_FILES_USER. Exiting.", My.Application.Globix.CurrentWorkfile.Id)
|
|
CancelAttempts = MAX_CANCEL_ATTEMPTS
|
|
Close()
|
|
Else
|
|
If pDropType.StartsWith("|FW") Then
|
|
' Eine Datei aus FolderWatch wird IMMER gelöscht, egal wie die Einstellung in der Config lautet
|
|
My.Application.Globix.DeleteOriginalFile = True
|
|
SourceDeleteItem.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
|
|
ElseIf pDropType.Contains("|OUTLOOK_MESSAGE|") Then
|
|
' Eine (DragDrop)-Outlook Nachricht wird NIE gelöscht, egal wie die Einstellung in der Config lautet
|
|
My.Application.Globix.DeleteOriginalFile = False
|
|
SourceDeleteItem.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
|
|
Else
|
|
SourceDeleteItem.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
|
|
End If
|
|
|
|
If pDropType = "|DROPFROMFSYSTEM|" Then
|
|
If My.Application.User.Language <> "de-DE" Then
|
|
Me.Text = "Storage-Flow of dropped file"
|
|
Else
|
|
Me.Text = "Ablage-Flow - Dropped File"
|
|
End If
|
|
ElseIf pDropType = "|OUTLOOK_MESSAGE|" Or pDropType = "|FW_MSGONLY|" Then
|
|
Select Case pDropType
|
|
Case "|FW_MSGONLY|"
|
|
Logger.Info(".msg-file from folderwatch")
|
|
If My.Application.User.Language <> "de-DE" Then
|
|
Me.Text = "Storage-Flow - msg-File (without Attachments) - from Folderwatch"
|
|
Else
|
|
Me.Text = "Ablage-Flow - msg-Datei (ohne Anhang) - aus Folderwatch"
|
|
End If
|
|
Case "|OUTLOOK_MESSAGE|"
|
|
Logger.Info(".msg-file through dragdrop")
|
|
If My.Application.User.Language <> "de-DE" Then
|
|
Me.Text = "Storage-Flow - msg-File (without Attachments)"
|
|
Else
|
|
Me.Text = "Ablage-Flow - msg-Datei (ohne Anhang)"
|
|
End If
|
|
End Select
|
|
|
|
ElseIf pDropType = "|MSGONLY|" Then
|
|
If My.Application.User.Language = "de-DE" Then
|
|
Me.Text = "Ablage-Flow der msg-Datei (ohne Anhang)"
|
|
Else
|
|
Me.Text = "Storage-Flow of msg-File (without Attachments)"
|
|
End If
|
|
ElseIf pDropType = "|ATTMNTEXTRACTED|" Or pDropType = "|OUTLOOK_ATTACHMENT|" Then
|
|
My.Application.Globix.CURRENT_ISATTACHMENT = True
|
|
|
|
If My.Application.User.Language = "de-DE" Then
|
|
Me.Text = "Ablage-Flow eines Email-Attachments"
|
|
Else
|
|
Me.Text = "Storage-Flow of email-Attachment"
|
|
End If
|
|
ElseIf pDropType = "|FW_SIMPLEINDEXER|" Then
|
|
|
|
If My.Application.User.Language = "de-DE" Then
|
|
Me.Text = "Ablage-Flow einer Folderwatch-Datei"
|
|
Else
|
|
Me.Text = "Storage-Flow of Folderwatch-File"
|
|
End If
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub SetFilePreview(ShowPreview As Boolean)
|
|
If ShowPreview Then
|
|
SplitContainerControl1.Collapsed = False
|
|
PreviewFile()
|
|
PreviewItem.Checked = True
|
|
Else
|
|
SplitContainerControl1.Collapsed = True
|
|
PreviewItem.Checked = False
|
|
End If
|
|
End Sub
|
|
Sub PreviewFile()
|
|
Try
|
|
DocumentViewer1.LoadFile(My.Application.Globix.CurrentWorkfile.FilePath)
|
|
Catch ex As Exception
|
|
FormHelper.ShowErrorMessage(ex, "Laden der Vorschau")
|
|
End Try
|
|
End Sub
|
|
|
|
Private Sub BarButtonItem1_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles SourceDeleteItem.ItemClick
|
|
If SourceDeleteItem.Visibility <> DevExpress.XtraBars.BarItemVisibility.Never Then
|
|
My.Application.Globix.DeleteOriginalFile = SourceDeleteItem.Checked
|
|
My.UIConfig.Globix.DeleteOriginalFile = SourceDeleteItem.Checked
|
|
My.SystemConfigManager.Save()
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub SkipItem_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles SkipItem.ItemClick
|
|
My.Database.ExecuteNonQueryECM($"DELETE FROM TBGI_FILES_USER WHERE GUID = {My.Application.Globix.CurrentWorkfile.Id}")
|
|
CancelAttempts = MAX_CANCEL_ATTEMPTS
|
|
Close()
|
|
End Sub
|
|
|
|
Private Sub BarCheckItem3_CheckedChanged(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles chkMultiindexing.CheckedChanged
|
|
If chkMultiindexing.Checked Then
|
|
chkMultiindexing.Caption = "Active"
|
|
Else
|
|
chkMultiindexing.Caption = "Inactive"
|
|
End If
|
|
End Sub
|
|
|
|
|
|
Private Sub checkItemPreselection_CheckedChanged(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles checkItemPreselection.CheckedChanged
|
|
My.UIConfig.Globix.ProfilePreselection = checkItemPreselection.Checked
|
|
My.SystemConfigManager.Save()
|
|
End Sub
|
|
Sub Refresh_Dokart()
|
|
Try
|
|
Dim oDocTypes As New List(Of DocType)
|
|
Dim oSql = String.Format($"SELECT A.DOCTYPE_ID,A.USERNAME,DL.Doctype,A.OBJECT_ST_NAME, DL.Doctype_ID as IDBDoctype_ID,DL.LANG_CODE,A.SEQUENCE FROM VWGI_DOCTYPE_USER A INNER JOIN TBDD_DOKUMENTART DT ON A.DOCTYPE_ID = DT.GUID
|
|
INNER JOIN IDB.dbo.VWIDB_DOCTYPE_LANGUAGE DL ON DT.IDB_DOCTYPE_ID = DL.Doctype_ID WHERE A.AKTIV = 1 AND A.USERNAME = '{My.Application.User.UserName}' AND DL.LANG_CODE = '{My.Application.User.Language}' ORDER BY A.SEQUENCE")
|
|
Dim oTable = Database.GetDatatable("VWGI_DOCTYPE_USER", oSql, ECM,
|
|
pSortByColumn:="SEQUENCE",
|
|
pFilterExpression:=$"AKTIV = 1 AND USERNAME = '{My.Application.User.UserName}' AND LANG_CODE = '{My.Application.User.Language}'")
|
|
|
|
For Each oRow As DataRow In oTable.Rows
|
|
Dim oDocType = New DocType With {
|
|
.Guid = oRow.Item("DOCTYPE_ID"),
|
|
.Name = oRow.Item("Doctype"),
|
|
.ObjectStore = oRow.Item("OBJECT_ST_NAME"),
|
|
.IDB_DoctypeID = oRow.Item("IDBDoctype_ID")
|
|
}
|
|
|
|
oDocTypes.Add(oDocType)
|
|
cmbDocType.Properties.Items.Add(oDocType)
|
|
Next
|
|
|
|
DocTypes = oDocTypes
|
|
Catch ex As Exception
|
|
FormHelper.ShowErrorMessage(ex, "Laden des Profils")
|
|
End Try
|
|
End Sub
|
|
|
|
|
|
Private Sub ComboBoxEdit1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbDocType.SelectedIndexChanged
|
|
If cmbDocType.SelectedIndex <> -1 And FormLoaded = True Then
|
|
Dim oSelectedItem As DocType = cmbDocType.SelectedItem
|
|
|
|
ClearNotice()
|
|
ClearError()
|
|
|
|
pnlIndex.Controls.Clear()
|
|
|
|
SelectedDocType = oSelectedItem
|
|
'My.Application.Globix.CURRENT_DOCTYPE_DuplicateHandling = My.Application.Globix.CURR_DT_DOCTYPE.Rows(0).Item("DUPLICATE_HANDLING").ToString
|
|
|
|
ManualIndexes = Refresh_IndexeMan(oSelectedItem.Guid)
|
|
LoadIndexe_Man(ManualIndexes)
|
|
|
|
End If
|
|
End Sub
|
|
Private Function Refresh_IndexeMan(dokartid As Integer) As List(Of ManualIndex)
|
|
Dim oSql
|
|
Try
|
|
oSql = $"SELECT
|
|
T1.BEZEICHNUNG AS DOKUMENTART, T.*
|
|
FROM TBDD_INDEX_MAN T,
|
|
TBDD_DOKUMENTART T1
|
|
WHERE T.DOK_ID = T1.GUID AND
|
|
T.DOK_ID = {dokartid}
|
|
ORDER BY T.SEQUENCE"
|
|
|
|
Dim oTable = My.Database.GetDatatable("VWDDINDEX_MAN", oSql, ECM,
|
|
pSortByColumn:="SEQUENCE",
|
|
pFilterExpression:=$"DOK_ID = {dokartid}")
|
|
|
|
Dim oManualIndexes As New List(Of ManualIndex)
|
|
|
|
For Each oRow As DataRow In oTable.Rows
|
|
Dim oIndex As New ManualIndex With {
|
|
.Id = oRow.ItemEx(Of Integer)("GUID"),
|
|
.DocTypeId = oRow.ItemEx(Of Integer)("DOK_ID"),
|
|
.DocTypeName = oRow.ItemEx(Of String)("DOKUMENTART"),
|
|
.Name = oRow.ItemEx(Of String)("WD_INDEX"),
|
|
.InternalName = oRow.ItemEx(Of String)("INDEXNAME"),
|
|
.LabelCaption = oRow.ItemEx(Of String)("COMMENT"),
|
|
.DataType = oRow.ItemEx(Of String)("DATATYPE"),
|
|
.Sequence = oRow.ItemEx("SEQUENCE", 0),
|
|
.SQLCommand = oRow.ItemEx("SQL_RESULT", String.Empty),
|
|
.SQLConnection = oRow.ItemEx("CONNECTION_ID", 0),
|
|
.SQLSuggestion = oRow.ItemEx("SUGGESTION", String.Empty),
|
|
.DefaultValue = oRow.ItemEx("DEFAULT_VALUE", String.Empty),
|
|
.IsOptional = oRow.ItemEx(Of Integer)("OPTIONAL", False),
|
|
.IsMultiselect = oRow.ItemEx("MULTISELECT", False)
|
|
}
|
|
|
|
oManualIndexes.Add(oIndex)
|
|
Next
|
|
|
|
Return oManualIndexes
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error in Refresh_IndexeMan:")
|
|
Return Nothing
|
|
|
|
End Try
|
|
End Function
|
|
|
|
Private Sub LoadIndexe_Man(pManualIndexes As List(Of ManualIndex))
|
|
Try
|
|
Dim oScreen As New DigitalData.Modules.Windows.Screen()
|
|
Dim oDpiScale = oScreen.GetScreenScaling(Me)
|
|
|
|
Dim oControlCount As Integer = 1
|
|
Dim oLabelPosition As Integer = 11 * oDpiScale
|
|
Dim oControlPosition As Integer = 33 * oDpiScale
|
|
|
|
Dim oControls As New ControlCreator(LogConfig, pnlIndex, Me) With {
|
|
.OnControlChanged = AddressOf PrepareDependingControl,
|
|
.OnLookupData = AddressOf GetLookupData
|
|
}
|
|
|
|
pnlIndex.Visible = True
|
|
|
|
Logger.Info("Loading Indicies for Screen Scaling Factor [{0}]", oDpiScale)
|
|
|
|
If pManualIndexes Is Nothing OrElse pManualIndexes.Count = 0 Then
|
|
ShowError("Keine Manuellen Indizes für die " & vbNewLine & "Dokumentart " & cmbDocType.Text & " definiert")
|
|
Logger.Info(" - Keine Manuellen Indizes für die " & vbNewLine & "Dokumentart " & cmbDocType.Text & " definiert")
|
|
End If
|
|
|
|
For Each oIndex As ManualIndex In pManualIndexes
|
|
Dim MultiSelect As Boolean = oIndex.IsMultiselect
|
|
Dim AddNewItems As Boolean = oIndex.AllowAddingItems
|
|
Dim PreventDuplicates As Boolean = oIndex.PreventMultleValue
|
|
Dim oControlName As String = oIndex.Name
|
|
Dim oConnectionId = oIndex.SQLConnection
|
|
Dim oDataType = oIndex.DataType
|
|
|
|
If oDataType <> "BOOLEAN" Then
|
|
Dim oLabel = oControls.AddLabel(oControlName, oIndex.LabelCaption, oLabelPosition, oControlCount)
|
|
pnlIndex.Controls.Add(oLabel)
|
|
End If
|
|
|
|
'Dim oDefaultValue = Check_HistoryValues(oControlName, oIndex.DocTypeName)
|
|
'If oDefaultValue Is Nothing Then
|
|
' 'oDefaultValue = GetPlaceholderValue(oIndex.DefaultValue, My.Application.Globix.CURRENT_WORKFILE)
|
|
'End If
|
|
Dim oDefaultValue = GetPlaceholderValue(oIndex.DefaultValue, My.Application.Globix.CurrentWorkfile.FilePath)
|
|
Dim oControl As Control = Nothing
|
|
Dim oHasSqlCommand = (oConnectionId > 0 And oIndex.SQLCommand.Length > 0)
|
|
Dim oNeedsLookup As Boolean = oHasSqlCommand Or MultiSelect = True
|
|
|
|
Select Case oIndex.DataType
|
|
Case "BOOLEAN"
|
|
Dim oCheckbox = oControls.AddCheckBox(oControlName, oControlPosition, oDefaultValue, oIndex.LabelCaption)
|
|
oControl = oCheckbox
|
|
|
|
Case "INTEGER"
|
|
If oNeedsLookup Then
|
|
oControl = oControls.AddLookupControl(oControlName, oControlPosition, MultiSelect, oDataType, oIndex.SQLCommand, oConnectionId, oDefaultValue, AddNewItems, PreventDuplicates)
|
|
Else
|
|
oControl = oControls.AddTextBox(oControlName, oControlPosition, oDefaultValue, oDataType)
|
|
End If
|
|
|
|
Case "VARCHAR"
|
|
If oNeedsLookup Then
|
|
oControl = oControls.AddLookupControl(oControlName, oControlPosition, MultiSelect, oDataType, oIndex.SQLCommand, oConnectionId, oDefaultValue, AddNewItems, PreventDuplicates)
|
|
Else
|
|
oControl = oControls.AddTextBox(oControlName, oControlPosition, oDefaultValue, oDataType)
|
|
End If
|
|
|
|
Case "DATE"
|
|
oControl = oControls.AddDateTimePicker(oControlName, oControlPosition, oDataType)
|
|
|
|
Case Else
|
|
Dim omsg As String
|
|
If My.Application.User.Language = "de-DE" Then
|
|
omsg = "Bitte überprüfen Sie den Datentyp des hinterlegten Indexwertes!"
|
|
Else
|
|
omsg = "Please check Datatype of Indexvalue!"
|
|
End If
|
|
Dim oMsgBox As New frmDialog(omsg, "Indexe Laden", frmDialog.DialogType.Warning)
|
|
oMsgBox.ShowDialog()
|
|
Logger.Warn("DataType [{0}] not implemented!", oIndex.DataType)
|
|
End Select
|
|
|
|
If Not IsNothing(oControl) Then
|
|
pnlIndex.Controls.Add(oControl)
|
|
End If
|
|
|
|
oControlCount += 1
|
|
oLabelPosition += 50 * oDpiScale
|
|
oControlPosition += 50 * oDpiScale
|
|
'make y as height in fom
|
|
Next
|
|
Dim oPanelHeight = oControlPosition - 30
|
|
|
|
If pnlIndex.Height < oPanelHeight Then
|
|
If (Height - 315) < oPanelHeight Then
|
|
Height = (Height - 315) + oPanelHeight
|
|
End If
|
|
pnlIndex.Height = oPanelHeight
|
|
End If
|
|
|
|
SendKeys.Send("{TAB}")
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error in LoadIndexe_Man:")
|
|
End Try
|
|
End Sub
|
|
Private Sub PrepareDependingControl(pControl As Control)
|
|
If TypeOf pControl Is Label Then
|
|
Exit Sub
|
|
End If
|
|
|
|
Try
|
|
Dim oMeta = DirectCast(pControl.Tag, ControlCreator.ControlMeta)
|
|
Dim oIndexName As String = oMeta.IndexName
|
|
Dim oSQL = $"SELECT * FROM TBDD_INDEX_MAN WHERE SQL_RESULT LIKE '%{oIndexName}%' AND DOK_ID = {SelectedDocType.Guid}"
|
|
Dim oDatatable As DataTable = My.Database.GetDatatableECM(oSQL)
|
|
|
|
If Not IsNothing(oDatatable) Then
|
|
Logger.Debug("Found [{0}] depending controls for [{1}]", oDatatable.Rows.Count, pControl.Name)
|
|
|
|
For Each oRow As DataRow In oDatatable.Rows
|
|
Dim oControlName As String = NotNull(oRow.Item("NAME"), "")
|
|
Dim oConnectionId As Integer = NotNull(oRow.Item("CONNECTION_ID"), -1)
|
|
Dim oControlSql As String = NotNull(oRow.Item("SQL_RESULT"), "")
|
|
|
|
If oConnectionId = -1 Or oControlSql = String.Empty Then
|
|
Logger.Warn("Missing SQL Query or ConnectionId for Control [{0}]! Continuing.", oControlName)
|
|
Continue For
|
|
End If
|
|
|
|
oControlSql = Patterns2.ReplaceInternalValues(oControlSql)
|
|
oControlSql = Patterns2.ReplaceUserValues(oControlSql, My.Application.User)
|
|
oControlSql = Patterns2.ReplaceControlValues(oControlSql, pnlIndex)
|
|
|
|
Logger.Debug("Setting new value for [{0}]", oControlName)
|
|
SetDependingControlResult(oControlName, oControlSql, oConnectionId)
|
|
Next
|
|
End If
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
End Try
|
|
End Sub
|
|
Private Sub SetDependingControlResult(IndexName As String, pSqlCommand As String, SqlConnectionId As Integer)
|
|
Try
|
|
If pSqlCommand Is Nothing OrElse pSqlCommand = String.Empty Then
|
|
Logger.Warn("New Value for Index [{0}] could not be set. Supplied SQL is empty.")
|
|
Exit Sub
|
|
End If
|
|
|
|
Dim oDatatable As DataTable = My.Database.GetDatatable(pSqlCommand, SqlConnectionId)
|
|
Dim oFoundControl As Control = Nothing
|
|
|
|
For Each oControl As Control In pnlIndex.Controls
|
|
If TypeOf oControl Is Label Then
|
|
Continue For
|
|
End If
|
|
|
|
Dim oMeta = DirectCast(oControl.Tag, ControlCreator.ControlMeta)
|
|
Dim oIndex As String = oMeta.IndexName
|
|
|
|
If oIndex = IndexName Then
|
|
oFoundControl = oControl
|
|
Exit For
|
|
End If
|
|
Next
|
|
|
|
If oFoundControl Is Nothing Then
|
|
Logger.Warn("Depending Control for Index [{0}] not found!", IndexName)
|
|
End If
|
|
|
|
If oDatatable Is Nothing Then
|
|
Logger.Warn("Error in SQL Command: {0}", pSqlCommand)
|
|
End If
|
|
|
|
Select Case oFoundControl.GetType.Name
|
|
Case GetType(DevExpress.XtraEditors.TextEdit).Name
|
|
If oDatatable.Rows.Count > 0 Then
|
|
Dim oFirstRow As DataRow = oDatatable.Rows.Item(0)
|
|
|
|
If oFirstRow.ItemArray.Length > 0 Then
|
|
Dim oValue = oFirstRow.Item(0).ToString()
|
|
|
|
Logger.Debug("Setting Value for TextEdit [{0}]: [{1}]", oFoundControl.Name, oValue)
|
|
DirectCast(oFoundControl, DevExpress.XtraEditors.TextEdit).Text = oValue
|
|
End If
|
|
End If
|
|
Case GetType(LookupControl3).Name
|
|
Logger.Debug("Setting Value for LookupControl [{0}]: [{1}]", oFoundControl.Name, "DATATABLE")
|
|
DirectCast(oFoundControl, LookupControl3).Properties.DataSource = oDatatable
|
|
Case GetType(Windows.Forms.ComboBox).Name
|
|
Logger.Debug("Setting Value for Combobox [{0}]: [{1}]", oFoundControl.Name, "DATATABLE")
|
|
DirectCast(oFoundControl, Windows.Forms.ComboBox).DataSource = oDatatable
|
|
Case Else
|
|
Logger.Debug("Could not set depending control result for [{0}]", oFoundControl.GetType.Name)
|
|
End Select
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
End Try
|
|
End Sub
|
|
Private Function GetLookupData(pLookup As LookupControl3, pSQLCommand As String, pConnectionId As Integer)
|
|
|
|
Dim oConnectionString = Database.GetConnectionString(pConnectionId)
|
|
'Dim oConnectionString = GetConnectionString(pConnectionId)
|
|
oConnectionString = MSSQLServer.DecryptConnectionString(oConnectionString)
|
|
|
|
If oConnectionString IsNot Nothing And pSQLCommand.Length > 0 Then
|
|
Logger.Debug("Connection String (redacted): [{0}]", oConnectionString.Substring(0, 30))
|
|
|
|
If Patterns2.HasComplexPatterns(pSQLCommand) Then
|
|
Logger.Debug(" >>sql enthält Platzhalter und wird erst während der Laufzeit gefüllt!", False)
|
|
Return Nothing
|
|
Else
|
|
pSQLCommand = Patterns2.ReplaceInternalValues(pSQLCommand)
|
|
pSQLCommand = Patterns2.ReplaceUserValues(pSQLCommand, My.Application.User)
|
|
|
|
Dim oDatatable = My.Database.GetDatatable(pSQLCommand, pConnectionId)
|
|
Return oDatatable
|
|
End If
|
|
Else
|
|
Logger.Warn("Connection String for control [{0}] is empty!", pLookup.Name)
|
|
Return Nothing
|
|
End If
|
|
End Function
|
|
Function GetPlaceholderValue(InputValue As String, FileName As String) As String
|
|
Dim oResult As String = InputValue
|
|
Dim oFileInfo As New FileInfo(FileName)
|
|
|
|
Dim oPatterns As New Modules.Patterns.Patterns2(My.LogConfig)
|
|
oResult = oPatterns.ReplaceInternalValues(oResult)
|
|
oResult = oPatterns.ReplaceFileValues(oResult, oFileInfo)
|
|
oResult = oPatterns.ReplaceUserValues(oResult, My.Application.User)
|
|
|
|
Return oResult
|
|
End Function
|
|
|
|
Sub ShowError(text As String)
|
|
labelError.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
|
|
labelError.Caption = text
|
|
End Sub
|
|
|
|
Sub ClearError()
|
|
labelError.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
|
|
labelError.Caption = String.Empty
|
|
End Sub
|
|
|
|
Sub ShowNotice(text As String)
|
|
labelNotice.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
|
|
labelNotice.Caption = text
|
|
End Sub
|
|
|
|
Sub ClearNotice()
|
|
labelNotice.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
|
|
labelNotice.Caption = String.Empty
|
|
End Sub
|
|
|
|
Private Sub frmGlobix_Index_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
|
|
If File.Exists(My.Application.Globix.CurrentWorkfile.FilePath) Then
|
|
Dim oMsg As String
|
|
Select Case CancelAttempts
|
|
Case 0
|
|
|
|
If My.Application.User.Language = "de-DE" Then
|
|
oMsg = "Bitte indexieren Sie die Datei vollständig!" & vbNewLine & "(Abbruch 1 des Indexierungsvorgangs)"
|
|
Else
|
|
oMsg = "Please Index file completely" & vbNewLine & "(Abort 1 of Indexdialog)"
|
|
End If
|
|
Dim oMsgBox As New frmDialog(oMsg, Text, frmDialog.DialogType.Warning)
|
|
oMsgBox.CancelButtonInvisible()
|
|
oMsgBox.ShowDialog()
|
|
CancelAttempts += 1
|
|
e.Cancel = True
|
|
Case 1
|
|
|
|
If My.Application.User.Language = "de-DE" Then
|
|
oMsg = "Sie brechen nun zum zweiten Mal den Indexierungsvorgang ab!" & vbNewLine & "Wollen Sie die Indexierung aller Dateien abbrechen?"
|
|
Else
|
|
oMsg = "You abort the indexdialog for the 2nd time!" & vbNewLine & "Do You want to abort indexing?"
|
|
End If
|
|
Dim oMsgBox As New frmDialog(oMsg, Text, frmDialog.DialogType.Question)
|
|
oMsgBox.CancelButtonVisible()
|
|
|
|
If oMsgBox.DialogResult = DialogResult.Yes Then
|
|
Dim containsfw_file As Boolean = False
|
|
Try
|
|
My.Application.Globix.ABORT_INDEXING = True
|
|
Dim sql As String = $"SELECT * FROM TBGI_FILES_USER WHERE WORKED = 0 AND USER@WORK = '{My.Application.User.UserName}'"
|
|
Dim DT As DataTable = My.Database.GetDatatableECM(sql)
|
|
|
|
Dim anz = DT.Rows.Count
|
|
For Each Filerow As DataRow In DT.Rows
|
|
Dim filestring As String = Filerow.Item("FILENAME2WORK")
|
|
Dim handletype As String = Filerow.Item("HANDLE_TYPE")
|
|
|
|
If handletype = "|MSGONLY|" Or handletype = "|ATTMNTEXTRACTED|" Then
|
|
Try
|
|
System.IO.File.Delete(filestring)
|
|
Catch ex As Exception
|
|
|
|
End Try
|
|
|
|
ElseIf handletype.StartsWith("|FW") Then
|
|
containsfw_file = True
|
|
End If
|
|
Next
|
|
'Zuerst die Daten des Ablaufs löschen
|
|
If My.Database.ExecuteNonQueryECM($"DELETE FROM TBGI_FILES_USER WHERE USER@WORK = '{My.Application.User.UserName}'") = True Then
|
|
If containsfw_file = True Then
|
|
If My.Application.User.Language = "de-DE" Then
|
|
MsgBox("Der Indexierungsprozess beinhaltete (auch) Dateien per Folderwatch!" & vbNewLine & "Diese Dateien wurden nicht gelöscht und verbleiben im Folderwatch-Verzeichnis!" & vbNewLine & "Bitte verschieben Sie die Dateien ggfls.", MsgBoxStyle.Information, "Achtung - Hinweis:")
|
|
Else
|
|
MsgBox("The Indexingprocess contained (also) files from folderwatch!" & vbNewLine & "These files weren't deleted and will stay in the folderwatch-folder!" & vbNewLine & "Please move these files manually.", MsgBoxStyle.Information, "Achtung - Hinweis:")
|
|
End If
|
|
|
|
End If
|
|
End If
|
|
|
|
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
MsgBox("Unexpected Error in Abort Indexing: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
|
|
End Try
|
|
|
|
Try
|
|
My.Application.Globix.INDEXING_ACTIVE = False
|
|
|
|
DocumentViewer1.CloseDocument()
|
|
DocumentViewer1.Done()
|
|
WindowLocation.SaveFormLocationSize(Me)
|
|
My.Settings.Save()
|
|
Catch ex As Exception
|
|
Logger.Info(" - Unexpected error in Schliessen des Formulares - Fehler: " & vbNewLine & ex.Message)
|
|
Logger.Error(ex.Message)
|
|
MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error in Schliessen des Formulares:")
|
|
End Try
|
|
|
|
e.Cancel = False
|
|
Else
|
|
e.Cancel = True
|
|
End If
|
|
Case Else
|
|
Try
|
|
My.Application.Globix.INDEXING_ACTIVE = False
|
|
|
|
DocumentViewer1.CloseDocument()
|
|
DocumentViewer1.Done()
|
|
WindowLocation.SaveFormLocationSize(Me)
|
|
My.Settings.Save()
|
|
Catch ex As Exception
|
|
Logger.Warn(" - Unexpected error in Schliessen des Formulares - Fehler: " & vbNewLine & ex.Message)
|
|
Logger.Error(ex)
|
|
MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error in Schliessen des Formulares:")
|
|
End Try
|
|
End Select
|
|
Else
|
|
My.Application.Globix.INDEXING_ACTIVE = False
|
|
End If
|
|
End Sub
|
|
|
|
Private Async Function GlobixFlowNew(pDocType As DocType) As Threading.Tasks.Task(Of Boolean)
|
|
Try
|
|
ClearError()
|
|
ClearNotice()
|
|
Cursor = Cursors.WaitCursor
|
|
|
|
Logger.Info("Validating user values")
|
|
|
|
Dim oValidator As New ClassValidator(My.LogConfig, My.Application.Service.Client, ManualIndexes)
|
|
If oValidator.ValidateControls(pnlIndex, pDocType) = False Then
|
|
Return False
|
|
End If
|
|
|
|
Logger.Info("Collecting user values")
|
|
|
|
Dim oValues = oValidator.GetControlValues(pnlIndex)
|
|
|
|
Logger.Info("Preparing method parameters")
|
|
|
|
Dim oFilePath As String = My.Application.Globix.CurrentWorkfile.FilePath
|
|
Dim oObjectStore As String = SelectedDocType.ObjectStore
|
|
Dim oIDBDoctypeId As Long = SelectedDocType.IDB_DoctypeID
|
|
Dim oObjectKind As String = "DOC"
|
|
Dim oProfileId As Integer = SelectedDocType.Guid
|
|
Dim oAttributes As List(Of UserAttributeValue) = oValues
|
|
Dim oOptions As New Options.ImportFileOptions
|
|
|
|
Logger.Debug("FilePath: [{0}]", oFilePath)
|
|
Logger.Debug("ObjectStore: [{0}]", oObjectStore)
|
|
Logger.Debug("ObjectKind: [{0}]", oObjectKind)
|
|
Logger.Debug("ProfileId: [{0}]", oProfileId)
|
|
Logger.Debug("IDB DoctypeId: [{0}]", oIDBDoctypeId)
|
|
|
|
Logger.Info("Running Import")
|
|
|
|
Dim oResult = Await My.Application.Service.Client.Globix_ImportFileAsync(
|
|
oFilePath, oProfileId, oAttributes, oObjectStore, oObjectKind, oIDBDoctypeId, oOptions)
|
|
|
|
Logger.Info("Import result: [{0}]", oResult.OK)
|
|
Logger.Info("Imported file got ObjectId [{0}]", oResult.ObjectId)
|
|
|
|
If oResult.OK Then
|
|
Return True
|
|
Else
|
|
Logger.Warn("Import failed with message: [{0}] and details [{1}]", oResult.ErrorMessage, oResult.ErrorDetails)
|
|
MsgBox($"Die Datei wurde nicht verarbeitet.{vbNewLine}{vbNewLine}Fehler: {oResult.ErrorMessage}", MsgBoxStyle.Critical, Text)
|
|
Return False
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
MsgBox("Ablage fehlgeschlagen!", MsgBoxStyle.Critical, Text)
|
|
Return False
|
|
|
|
Finally
|
|
Cursor = Cursors.Default
|
|
|
|
End Try
|
|
End Function
|
|
|
|
Private Async Sub SimpleButton1_Click(sender As Object, e As EventArgs) Handles SimpleButton1.Click
|
|
Dim oDokart As DocType = cmbDocType.SelectedItem
|
|
|
|
If oDokart Is Nothing Then
|
|
Exit Sub
|
|
End If
|
|
|
|
Logger.Info("Importing file with DocumentType [{0}]", oDokart.Name)
|
|
Dim oResult = Await GlobixFlowNew(oDokart)
|
|
If oResult = True Then
|
|
oSuccess = True
|
|
' Dim oArgs = GetMessageBoxArgs()
|
|
' Dim oMessageResult = XtraMessageBox.Show(oArgs)
|
|
Dim oDEL As String = "DELETE FROM TBGI_FILES_USER WHERE GUID = " & My.Application.Globix.CurrentWorkfile.Id
|
|
My.DatabaseECM.ExecuteNonQuery(oDEL)
|
|
|
|
|
|
DocumentViewer1.CloseDocument()
|
|
DocumentViewer1.Done()
|
|
|
|
|
|
CancelAttempts = MAX_CANCEL_ATTEMPTS
|
|
|
|
If My.Application.Globix.DeleteOriginalFile = True Or My.Application.Globix.CurrentWorkfile.HotfolderFile = True Then
|
|
Logger.Info("File [" & My.Application.Globix.CurrentWorkfile.FilePath & "] will be deleted...")
|
|
Try
|
|
System.IO.File.Delete(My.Application.Globix.CurrentWorkfile.FilePath)
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
End Try
|
|
Logger.Info("File [" & My.Application.Globix.CurrentWorkfile.FilePath & "] has been deleted.")
|
|
End If
|
|
Close()
|
|
End If
|
|
End Sub
|
|
|
|
|
|
|
|
Private Sub PreviewItem_CheckedChanged(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles PreviewItem.CheckedChanged
|
|
If FormLoaded Then
|
|
SetFilePreview(PreviewItem.Checked)
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub checkItemTopMost_CheckedChanged(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles checkItemTopMost.CheckedChanged
|
|
If FormLoaded Then
|
|
My.UIConfig.Globix.TopMost = checkItemTopMost.Checked
|
|
My.UIConfigManager.Save()
|
|
End If
|
|
End Sub
|
|
|
|
Private Function GetMessageBoxArgs() As XtraMessageBoxArgs
|
|
Dim oArgs As New XtraMessageBoxArgs With {
|
|
.LookAndFeel = LookAndFeel,
|
|
.Text = "Die Datei wurde erfolgreich verarbeitet!",
|
|
.Caption = Text,
|
|
.DoNotShowAgainCheckBoxVisible = True
|
|
}
|
|
AddHandler oArgs.Closed, AddressOf MessageboxClosed
|
|
AddHandler oArgs.Load, AddressOf MessageboxLoad
|
|
Return oArgs
|
|
End Function
|
|
|
|
Private Sub MessageboxClosed(sender As Object, e As XtraMessageBoxClosedArgs)
|
|
Dim oShowMessageBoxNextTime = e.Visible
|
|
My.UIConfig.Globix.ShowSuccessMessageBox = oShowMessageBoxNextTime
|
|
My.UIConfigManager.Save()
|
|
End Sub
|
|
|
|
Private Sub MessageboxLoad(sender As Object, e As XtraMessageBoxLoadArgs)
|
|
e.Visible = My.UIConfig.Globix.ShowSuccessMessageBox
|
|
End Sub
|
|
|
|
|
|
End Class
|