Option Explicit On Imports System.IO Imports System.Security.AccessControl Imports System.Security.Principal Imports System.Text.RegularExpressions Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Language.Utils Public Class frmGlobix_Index #Region "+++++ Variablen ++++++" Public vPathFile As String Private MULTIFILES As Integer Private akttxtbox As TextBox Dim DT_DOKART As DataTable Public FormLoaded As Boolean = False Dim DropType As String Private DT_INDEXEMAN As DataTable Dim sql_history_INSERT_INTO As String Dim sql_history_Index_Values As String Private NewFileString As String Private CancelAttempts As Integer = 0 Private Const MaxCancelAttempts = 2 Private Property ViewerString As String Private Const TEXT_MISSING_INPUT = "Bitte vervollständigen Sie die Eingaben!" Private _LogConfig As LogConfig Private _Logger As Logger Private clswindowLocation As ClassWindowLocation Private clsPatterns As GlobixPatterns Private clsPostProcessing As GlobixPostprocessing #End Region Public Sub New(LogConfig As LogConfig) ' Dieser Aufruf ist für den Designer erforderlich. InitializeComponent() ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. _Logger = LogConfig.GetLogger() _LogConfig = LogConfig clswindowLocation = New ClassWindowLocation(_LogConfig) clsPatterns = New GlobixPatterns(LogConfig) clsPostProcessing = New GlobixPostprocessing(LogConfig) End Sub Private Sub frmGlobix_Index_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' Abbruchzähler zurücksetzen CancelAttempts = 0 My.Application.Globix.INDEXING_ACTIVE = True Try My.Application.Globix.CURRENT_ISATTACHMENT = False DropType = My.Database.GetScalarValue("SELECT HANDLE_TYPE FROM TBGI_FILES_USER WHERE GUID = " & My.Application.Globix.CURRENT_WORKFILE_GUID).ToString My.Application.Globix.CURR_DELETE_ORIGIN = My.UIConfig.Globix.DeleteOriginalFile SourceDeleteItem.Enabled = True SourceDeleteItem.Checked = My.UIConfig.Globix.DeleteOriginalFile DocumentViewer1.Init(_LogConfig, My.Application.GDPictureLicense) If DropType Is Nothing Then _Logger.Debug("File with Id [{0}] was not found in TBGI_FILES_USER. Exiting.", My.Application.Globix.CURRENT_WORKFILE_GUID) CancelAttempts = MaxCancelAttempts Close() Else My.Application.Globix.CURRENT_DROPTYPE = DropType.Replace("|", "") If DropType.StartsWith("|FW") Then ' Eine Datei aus FolderWatch wird IMMER gelöscht, egal wie die Einstellung in der Config lautet My.Application.Globix.CURR_DELETE_ORIGIN = True SourceDeleteItem.Visibility = DevExpress.XtraBars.BarItemVisibility.Never ElseIf DropType.Contains("|OUTLOOK_MESSAGE|") Then ' Eine (DragDrop)-Outlook Nachricht wird NIE gelöscht, egal wie die Einstellung in der Config lautet My.Application.Globix.CURR_DELETE_ORIGIN = False SourceDeleteItem.Visibility = DevExpress.XtraBars.BarItemVisibility.Never Else SourceDeleteItem.Visibility = DevExpress.XtraBars.BarItemVisibility.Always End If If DropType = "|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 DropType = "|OUTLOOK_MESSAGE|" Or DropType = "|FW_MSGONLY|" Then Select Case DropType 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 DropType = "|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 DropType = "|ATTMNTEXTRACTED|" Or DropType = "|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 DropType = "|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 labelFilePath.Caption = My.Application.Globix.CURRENT_WORKFILE clswindowLocation.LoadFormLocationSize(Me) SetFilePreview(My.UIConfig.Globix.FilePreview) SplitContainerControl1.SplitterPosition = My.UIConfig.Globix.SplitterDistanceViewer My.Application.Globix.DTTBGI_REGEX_DOCTYPE = My.Database.GetDatatable("SELECT DISTINCT T1.DOCTYPE as DocType, T.* FROM TBGI_REGEX_DOCTYPE T, VWGI_DOCTYPE T1 WHERE T.DOCTYPE_ID = T1.DOCTYPE_ID") My.Application.Globix.CURR_INDEX_MAN_POSTPROCESSING = My.Database.GetDatatable("SELECT * FROM TBDD_INDEX_MAN_POSTPROCESSING") MULTIFILES = My.Database.GetScalarValue("SELECT COUNT(*) FROM TBGI_FILES_USER WHERE WORKED = 0 AND GUID <> " & My.Application.Globix.CURRENT_WORKFILE_GUID & " AND UPPER(USER@WORK) = UPPER('" & Environment.UserName & "')") My.Application.Globix.MULTIINDEXING_ACTIVE = False If MULTIFILES > 0 Then If My.Application.User.Language = "de-DE" Then RibbonPageGroupMultiIndex.Text = "Alle nachfolgenden Dateien (" & MULTIFILES & ") identisch indexieren" Else RibbonPageGroupMultiIndex.Text = "All following files (" & MULTIFILES & ") will be indexed identically" End If chkMultiindexing.Checked = False chkMultiindexing.Visibility = DevExpress.XtraBars.BarItemVisibility.Always Else chkMultiindexing.Visibility = DevExpress.XtraBars.BarItemVisibility.Never End If End If Catch ex As Exception _Logger.Warn(" - Unexpected error in Öffnen des Formulares - Fehler: " & vbNewLine & ex.Message) _Logger.Error(ex.Message) MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error in Öffnen des Formulares:") End Try 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.CURRENT_WORKFILE) Catch ex As Exception _Logger.Error(ex) MsgBox(ex.Message, MsgBoxStyle.Critical, "Fehler in PreviewFile:") 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.CURR_DELETE_ORIGIN = SourceDeleteItem.Checked My.UIConfig.Globix.DeleteOriginalFile = SourceDeleteItem.Checked My.SystemConfigManager.Save() End If End Sub Private Sub BarCheckItem5_CheckedChanged(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles PreviewItem.CheckedChanged End Sub Private Sub SourceDeleteItem_CheckedChanged(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles SourceDeleteItem.CheckedChanged End Sub 'Private Sub SaveProfileItem_CheckedChanged(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles SaveProfileItem.CheckedChanged ' My.UIConfig.Globix.ProfilePreselection = SaveProfileItem.Checked ' My.SystemConfigManager.Save() 'End Sub Private Sub SkipItem_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles SkipItem.ItemClick My.Database.ExecuteNonQuery($"DELETE FROM TBGI_FILES_USER WHERE GUID = {My.Application.Globix.CURRENT_WORKFILE_GUID}") CancelAttempts = 2 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 frmGlobix_Index_Shown(sender As Object, e As EventArgs) Handles Me.Shown BringToFront() Focus() Cursor = Cursors.Default Refresh_Dokart() pnlIndex.Controls.Clear() checkItemTopMost.Checked = My.UIConfig.Globix.TopMost TopMost = My.UIConfig.Globix.TopMost BringToFront() FormLoaded = True Try ' Letzte Auswahl merken überschreibt die automatische selektion If My.UIConfig.Globix.ProfilePreselection Then checkItemPreselection.Checked = True If My.Application.Globix.CURRENT_LASTDOCTYPE <> "" Then cmbDoctype.SelectedIndex = cmbDoctype.FindStringExact(My.Application.Globix.CURRENT_LASTDOCTYPE) End If Else If My.Application.Globix.DTTBGI_REGEX_DOCTYPE.Rows.Count > 0 Then For Each oRoW As DataRow In My.Application.Globix.DTTBGI_REGEX_DOCTYPE.Rows Dim oOnlyFilename = Path.GetFileName(My.Application.Globix.CURRENT_WORKFILE) 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) cmbDoctype.SelectedIndex = cmbDoctype.FindStringExact(oRoW.Item("DOCTYPE")) Exit For End If Next End If End If Catch ex As Exception _Logger.Warn("Unexpected error DTTBGI_REGEX_DOCTYPE - ErrorMessage: " & vbNewLine & ex.Message) End Try End Sub Sub Refresh_Dokart() Try Dim sql = String.Format("select * from VWGI_DOCTYPE where UPPER(USERNAME) = UPPER('{0}') ORDER BY SEQUENCE", Environment.UserName) _Logger.Debug("SQL DoctypeList: " & sql) DT_DOKART = My.Database.GetDatatable(sql) cmbDoctype.DataSource = DT_DOKART cmbDoctype.ValueMember = DT_DOKART.Columns("DOCTYPE_ID").ColumnName cmbDoctype.DisplayMember = DT_DOKART.Columns("DOCTYPE").ColumnName cmbDoctype.AutoCompleteMode = AutoCompleteMode.Suggest cmbDoctype.AutoCompleteSource = AutoCompleteSource.ListItems cmbDoctype.SelectedIndex = -1 Catch ex As Exception _Logger.Warn("Unexpected error in Refresh_Dokart: " & vbNewLine & ex.Message) MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error in Laden der Dokumentarten:") End Try End Sub Private Sub cmbDoctype_SelectedValueChanged(sender As Object, e As EventArgs) Handles cmbDoctype.SelectedValueChanged End Sub Private Sub cmbDoctype_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbDoctype.SelectedIndexChanged If cmbDoctype.SelectedIndex <> -1 And FormLoaded = True Then If cmbDoctype.SelectedValue.GetType.ToString = "System.Int32" Then My.Application.Globix.CURRENT_DOCTYPE_ID = cmbDoctype.SelectedValue 'lblhinweis.Visible = False ClearNotice() 'lblerror.Visible = False ClearError() Me.pnlIndex.Controls.Clear() Dim sql As String = "Select * from TBDD_DOKUMENTART WHERE GUID = " & cmbDoctype.SelectedValue.ToString My.Application.Globix.CURR_DT_DOCTYPE = My.Database.GetDatatable(sql) My.Application.Globix.CURRENT_DOCTYPE_DuplicateHandling = My.Application.Globix.CURR_DT_DOCTYPE.Rows(0).Item("DUPLICATE_HANDLING").ToString Refresh_IndexeMan(cmbDoctype.SelectedValue) End If End If End Sub Private Sub Refresh_IndexeMan(dokartid As Integer) Dim oSql Try oSql = "select T1.BEZEICHNUNG AS DOKUMENTART,T.* from TBDD_INDEX_MAN T, TBDD_DOKUMENTART T1 where T.ACTIVE = 1 AND T.DOK_ID = T1.GUID AND T.DOK_ID = " & dokartid & " ORDER BY T.SEQUENCE" DT_INDEXEMAN = My.Database.GetDatatable(oSql) pnlIndex.Visible = True LoadIndexe_Man() Catch ex As System.Exception _Logger.Error(ex) _Logger.Warn("Fehler Refresh_IndexeMan: DOKART-ID: " & dokartid & " - Fehler: " & vbNewLine & ex.Message & vbNewLine & oSql) MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error in Refresh_IndexeMan:") End Try End Sub Sub addLabel(indexname As String, hinweis As String, ylbl As Integer, anz As String) Dim lbl As New Label With { .Name = "lbl" & indexname, .AutoSize = True, .Text = hinweis, .Location = New Point(11, ylbl) } pnlIndex.Controls.Add(lbl) End Sub Sub ShowError(text As String) 'lblerror.Visible = True 'lblerror.Text = text 'lblerror.ForeColor = Color.Red labelError.Visibility = DevExpress.XtraBars.BarItemVisibility.Always labelError.Caption = text End Sub Private Sub LoadIndexe_Man() Try Dim oControlCount As Integer = 1 Dim oLabelPosition As Integer = 11 Dim oControlPosition As Integer = 33 Dim oControls As New GlobixControls(_LogConfig, pnlIndex, Me) If DT_INDEXEMAN.Rows.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 oRow As DataRow In DT_INDEXEMAN.Rows Dim oDataType = oRow.Item("DATATYPE") Dim MultiSelect As Boolean = oRow.Item("MULTISELECT") Dim AddNewItems As Boolean = oRow.Item("VKT_ADD_ITEM") Dim PreventDuplicates As Boolean = oRow.Item("VKT_PREVENT_MULTIPLE_VALUES") Dim oControlName As String = oRow.Item("NAME") Dim oConnectionId = NotNull(oRow.Item("CONNECTION_ID"), 0) Dim oSQLSuggestion = oRow.Item("SUGGESTION") If oDataType <> "BOOLEAN" Then addLabel(oControlName, oRow.Item("COMMENT").ToString, oLabelPosition, oControlCount) End If 'Dim DefaultValue = Check_HistoryValues(oControlName, oRow.Item("DOKUMENTART")) ' If DefaultValue Is Nothing Then Dim DefaultValue = GetPlaceholderValue(oRow.Item("DEFAULT_VALUE"), My.Application.Globix.CURRENT_WORKFILE, My.Application.User.ShortName) ' End If Select Case oDataType Case "BOOLEAN" Dim chk As CheckBox = oControls.AddCheckBox(oControlName, oControlPosition, DefaultValue, oRow.Item("COMMENT").ToString) If Not IsNothing(chk) Then pnlIndex.Controls.Add(chk) End If Case "INTEGER" If (oSQLSuggestion = True And oRow.Item("SQL_RESULT").ToString.Length > 0) Or MultiSelect = True Then Dim oControl = oControls.AddVorschlag_ComboBox(oControlName, oControlPosition, oConnectionId, oRow.Item("SQL_RESULT"), MultiSelect, oDataType, DefaultValue, AddNewItems, PreventDuplicates, oSQLSuggestion) If Not IsNothing(oControl) Then pnlIndex.Controls.Add(oControl) End If Else 'nur eine Textbox Dim oControl = oControls.AddTextBox(oControlName, oControlPosition, DefaultValue, oDataType) If Not IsNothing(oControl) Then pnlIndex.Controls.Add(oControl) End If End If Case "VARCHAR" If (oSQLSuggestion = True And oRow.Item("SQL_RESULT").ToString.Length > 0) Or MultiSelect = True Then Dim oControl = oControls.AddVorschlag_ComboBox(oControlName, oControlPosition, oConnectionId, oRow.Item("SQL_RESULT"), MultiSelect, oDataType, DefaultValue, AddNewItems, PreventDuplicates, oSQLSuggestion) If Not IsNothing(oControl) Then pnlIndex.Controls.Add(oControl) End If Else If oControlName.ToString.ToLower = "dateiname" Then Dim oControl = oControls.AddTextBox(oControlName, oControlPosition, System.IO.Path.GetFileNameWithoutExtension(My.Application.Globix.CURRENT_WORKFILE), oDataType) If Not IsNothing(oControl) Then pnlIndex.Controls.Add(oControl) End If Else Dim VORBELGUNG As String = DefaultValue Dim oControl = oControls.AddTextBox(oControlName, oControlPosition, VORBELGUNG, oDataType) If Not IsNothing(oControl) Then pnlIndex.Controls.Add(oControl) End If End If End If Case "DATE" Dim oPicker = oControls.AddDateTimePicker(oControlName, oControlPosition, oDataType, DefaultValue) pnlIndex.Controls.Add(oPicker) Case Else If My.Application.User.Language = "de-DE" Then MsgBox("Bitte überprüfen Sie den Datentyp des hinterlegten Indexwertes!", MsgBoxStyle.Critical, "Achtung:") Else MsgBox("Please check Datatype of Indexvalue!", MsgBoxStyle.Critical, "Warning:") End If _Logger.Warn(" - Datentyp nicht hinterlegt - LoadIndexe_Man") End Select oControlCount += 1 oLabelPosition += 50 oControlPosition += 50 'make y as height in fom Next Dim oPanelHeight = oControlPosition - 30 If pnlIndex.Height < oPanelHeight Then If (Me.Height - 315) < oPanelHeight Then Me.Height = (Me.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 Function GetPlaceholderValue(InputValue As String, FileName As String, UserShortName As String) As String Dim oResult As String Try Select Case InputValue.ToString.ToUpper Case "$filename_ext".ToUpper oResult = Path.GetFileName(FileName) Case "$filename".ToUpper oResult = Path.GetFileNameWithoutExtension(FileName) Case "$extension".ToUpper oResult = Path.GetExtension(FileName).Replace(".", "") Case "$FileCreateDate".ToUpper Dim oFileInfo As New FileInfo(FileName) Dim oCreationDate As Date = oFileInfo.CreationTime oResult = oCreationDate.ToShortDateString Case "$FileCreatedWho".ToUpper Dim oFileSecurity As FileSecurity = File.GetAccessControl(FileName) Dim oSecurityId As IdentityReference = oFileSecurity.GetOwner(GetType(SecurityIdentifier)) Dim oNTAccount As IdentityReference = oSecurityId.Translate(GetType(NTAccount)) Dim oOwner As String = oNTAccount.ToString() oResult = oOwner Case "$DateDDMMYYY".ToUpper oResult = System.DateTime.Now.ToShortDateString Case "$Username".ToUpper oResult = Environment.UserName Case "$Usercode".ToUpper oResult = UserShortName Case Else oResult = InputValue End Select Catch ex As Exception _Logger.Warn("Error in ReplacePlaceholders: " & ex.Message) _Logger.Error(ex.Message) oResult = Nothing End Try Return oResult End Function 'Function Check_HistoryValues(Indexname As String, Dokart As String) As String ' Try ' Dim result = Nothing ' Dim DT As DataTable = MyDataset.TBTEMP_INDEXRESULTS ' If DT.Rows.Count > 0 Then ' For Each row As DataRow In DT.Rows ' If row.Item("Indexname") = Indexname And row.Item("Dokumentart") = Dokart Then ' result = row.Item("Value") ' Return result ' End If ' Next ' Else ' Return Nothing ' End If ' Catch ex As Exception ' _Logger.Error(ex) ' MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error in Check_HistoryValues:") ' Return Nothing ' End Try 'End Function Sub ClearError() labelError.Visibility = DevExpress.XtraBars.BarItemVisibility.Never labelError.Caption = String.Empty End Sub Sub ShowNotice(text As String) 'lblhinweis.Visible = True 'lblhinweis.Text = text 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.CURRENT_FILENAME) Then Select Case CancelAttempts Case 0 If My.Application.User.Language = "de-DE" Then MsgBox("Bitte indexieren Sie die Datei vollständig!" & vbNewLine & "(Abbruch 1 des Indexierungsvorgangs)", MsgBoxStyle.Information) Else MsgBox("Please Index file completely" & vbNewLine & "(Abort 1 of Indexdialog)", MsgBoxStyle.Information) End If CancelAttempts = CancelAttempts + 1 e.Cancel = True Case 1 Dim result As MsgBoxResult If My.Application.User.Language = "de-DE" Then result = MessageBox.Show("Sie brechen nun zum zweiten Mal den Indexierungsvorgang ab!" & vbNewLine & "Wollen Sie die Indexierung aller Dateien abbrechen?", "Bestätigung erforderlich:", MessageBoxButtons.YesNo, MessageBoxIcon.Question) Else result = MessageBox.Show("You abort the indexdialog for the 2nd time!" & vbNewLine & "Do You want to abort indexing?", "Confirmation needed:", MessageBoxButtons.YesNo, MessageBoxIcon.Question) End If If result = MsgBoxResult.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 UPPER(USER@WORK) = UPPER('{My.Application.User.UserName}')" Dim DT As DataTable = My.Database.GetDatatable(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.ExecuteNonQuery($"DELETE FROM TBGI_FILES_USER WHERE UPPER(USER@WORK) = UPPER('{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() clswindowLocation.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() clswindowLocation.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 Sub GlobixFlow() ClearError() ClearNotice() Me.Cursor = Cursors.WaitCursor Refresh_RegexTable() For Each rowregex As DataRow In My.Application.BASE_DATA_DT_REGEX.Rows If rowregex.Item("FUNCTION_NAME") = "CLEAN_FILENAME" Then My.Application.Globix.REGEX_CLEAN_FILENAME = rowregex.Item("REGEX") End If Next If chkMultiindexing.Visibility = DevExpress.XtraBars.BarItemVisibility.Always And chkMultiindexing.Checked = True Then 'Die erste Datei indexieren If WORK_FILE() = True Then 'Und nun die folgenden Dim DTFiles2Work As DataTable = My.Database.GetDatatable("SELECT * FROM TBGI_FILES_USER WHERE WORKED = 0 AND GUID <> " & My.Application.Globix.CURRENT_WORKFILE_GUID & " AND UPPER(USER@WORK) = UPPER('" & My.Application.User.UserName & "')") If Not DTFiles2Work Is Nothing Then Dim err = False For Each filerow As DataRow In DTFiles2Work.Rows My.Application.Globix.CURRENT_WORKFILE_GUID = filerow.Item("GUID") My.Application.Globix.CURRENT_WORKFILE = filerow.Item("FILENAME2WORK") DropType = filerow.Item("HANDLE_TYPE") If WORK_FILE() = False Then err = True Exit For End If Next Me.Cursor = Cursors.Default If err = False Then If My.Application.User.Language = "de-DE" Then MsgBox("Alle Dateien wurden mit Multiindexing erfolgreich verarbeitet!", MsgBoxStyle.Information, "Erfolgsmeldung:") Else MsgBox("All files were successfully processed through Multiindexing", MsgBoxStyle.Information, "Success") End If 'DTACTUAL_FILES.Clear() DocumentViewer1.CloseDocument() DocumentViewer1.Done() CancelAttempts = 2 Me.Close() End If End If End If Else If WORK_FILE() = True Then Me.Cursor = Cursors.Default If My.UIConfig.Globix.ShowIndexResult = True Then If My.Application.User.Language = "de-DE" Then MsgBox("Die Datei wurde erfolgreich verarbeitet!" & vbNewLine & "Ablagepfad:" & vbNewLine & My.Application.Globix.CURRENT_NEWFILENAME, MsgBoxStyle.Information, "Erfolgsmeldung") Else MsgBox("File sucessfully processed!" & vbNewLine & "Path:" & vbNewLine & My.Application.Globix.CURRENT_NEWFILENAME, MsgBoxStyle.Information, "Success") End If End If DocumentViewer1.CloseDocument() DocumentViewer1.Done() CancelAttempts = 2 Me.Close() End If End If Me.Cursor = Cursors.Default End Sub Private Function WORK_FILE() Try Dim oSQL = $"SELECT * ,CONVERT(VARCHAR(512),'') As IndexValueGUI,CONVERT(VARCHAR(512),'') As IndexValue_File,CONVERT(Bit,0) as Indexed FROM VWDDINDEX_MAN WHERE DOK_ID = {My.Application.Globix.CURRENT_DOCTYPE_ID}" My.Application.Globix.CURR_DT_MAN_INDEXE = My.Database.GetDatatable(oSQL) _Logger.Debug("Manuelle Indexe geladen") If My.Application.Globix.CURR_DT_MAN_INDEXE.Rows.Count > 0 Then My.Application.Globix.CURRENT_DOCTYPE_ID = Me.cmbDoctype.SelectedValue If CheckWrite_IndexeMan(Me.cmbDoctype.SelectedValue) = True Then '##### Manuelle Indexe indexiert ##### _Logger.Info("Datei [" & My.Application.Globix.CURRENT_WORKFILE & "] wird nun indexiert...") If FillIndexe_Autom(Me.cmbDoctype.SelectedValue) = True Then _Logger.Debug(" ...FillIndexe_Autom durchlaufen") 'Den Zielnamen zusammenbauen If Name_Generieren() = True Then 'Dokumentenviewer ausblenden um keinen Zugriffsfehler zu produzieren DocumentViewer1.Done() DocumentViewer1.CloseDocument() _Logger.Debug(" ...Viewer geschlossen") 'Die Datei verschieben If Move_File2_Target() = True Then _Logger.Debug(" ...Move_File2_Target durchlaufen") My.Application.Globix.CURRENT_LASTDOCTYPE = cmbDoctype.Text _Logger.Info("Datei '" & My.Application.Globix.CURRENT_NEWFILENAME & "' erfolgreich erzeugt.") Dim oDEL As String = "DELETE FROM TBGI_FILES_USER WHERE GUID = " & My.Application.Globix.CURRENT_WORKFILE_GUID My.Database.ExecuteNonQuery(oDEL) Return True End If Else If My.Application.User.Language = "de-DE" Then MsgBox("Unerwarteter Fehler in Name_Generieren - Bitte überprüfen sie die Logdatei", MsgBoxStyle.Critical) Else MsgBox("Unexpected error in Name_Generieren - Please check the Logfile", MsgBoxStyle.Critical) End If Return False End If Else If My.Application.User.Language = "de-DE" Then MsgBox("Unerwarteter Fehler in FillIndexe_Autom - Bitte überprüfen sie die Logdatei", MsgBoxStyle.Critical) Else MsgBox("Unexpected error in FillIndexe_Autom - Please check the Logfile", MsgBoxStyle.Critical) End If Return False End If '#### Automatische Werte indexieren #### End If Else If My.Application.User.Language = "de-DE" Then MsgBox("Bitte überprüfen Sie die Konfiguration dieser Dokumentart." & vbNewLine & "Es sind KEINE manuellen Indizes konfiguriert oder aktiv geschaltet!", MsgBoxStyle.Exclamation) Else MsgBox("Please check the configuration for this document-type." & vbNewLine & "There are NO manual indicies that are either configured or set to active!", MsgBoxStyle.Exclamation) End If Return False End If Catch ex As Exception _Logger.Error(ex) MsgBox("Unexpected Error in WORK_FILE:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) Return False End Try End Function Function Name_Generieren() Try _Logger.Debug("#### Name_Generieren ####") My.Application.Globix.FILE_DELIMITER = "~" My.Application.Globix.VERSION_DELIMITER = "~" Dim oFilesystem As New DigitalData.Modules.Filesystem.File(_LogConfig) Dim err As Boolean = False Dim folder_Created As Boolean = False Dim oRAWZielordner As String Dim extension As String = System.IO.Path.GetExtension(My.Application.Globix.CURRENT_WORKFILE) sql_history_INSERT_INTO = "INSERT INTO TBGI_HISTORY (FILENAME_ORIGINAL,FILENAME_NEW" sql_history_Index_Values = "" Dim AnzahlIndexe As Integer = 1 'CURR_DOKART_OBJECTTYPE = DT.Rows(0).Item("OBJEKTTYP") My.Application.Globix.CURRENT_WORKFILE_EXTENSION = extension oRAWZielordner = My.Application.Globix.CURR_DT_DOCTYPE.Rows(0).Item("ZIEL_PFAD") '#### ' Regulären Ausdruck zum Auslesen der Indexe definieren Dim preg As String = "\[%{1}[a-zA-Z0-9ß\!\$\&\/\(\)\=\?\,\.\-\;\:_öÖüÜäÄ\#\'\+\*\~\{\}\@\€\<\>\ ]+]{1}" 'schonmal den gesamten Pfad laden Dim oNamenkonvention As String = FilterDatatable(My.Application.Globix.CURR_DT_DOCTYPE, $"", "NAMENKONVENTION", "", False).ToString & My.Application.Globix.CURRENT_WORKFILE_EXTENSION NewFileString = oNamenkonvention ' einen Regulären Ausdruck laden Dim regulärerAusdruck As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex(preg) ' die Vorkommen im SQL-String auslesen Dim oMatchelements As System.Text.RegularExpressions.MatchCollection = regulärerAusdruck.Matches(oNamenkonvention) '#### If oMatchelements.Count = 0 Then _Logger.Debug("No RegularExpression Fileds on Nameconvention!") End If ' alle Vorkommen innerhalbd er Namenkonvention durchlaufen For Each oElement As System.Text.RegularExpressions.Match In oMatchelements Select Case oElement.Value.Substring(2, 1).ToUpper 'Manueller Indexwert Case "M" _Logger.Debug("NameGenerieren: Manueller Index wird geprüft...") Dim Indexname = oElement.Value.Substring(3, oElement.Value.Length - 4) Dim optional_index As Boolean = FilterDatatable(My.Application.Globix.CURR_DT_MAN_INDEXE, $"DOK_ID = {My.Application.Globix.CURRENT_DOCTYPE_ID} AND INDEXNAME = '{Indexname}'", "OPTIONAL", "", False) Dim oManValue As String = GetManIndex_Value(Indexname, "FILE", optional_index) If oManValue <> String.Empty Then Dim firstVectorValue = oManValue.Split(ClassConstants.VECTORSEPARATOR).First() oNamenkonvention = oNamenkonvention.Replace(oElement.Value, firstVectorValue) NewFileString = oNamenkonvention sql_history_INSERT_INTO = sql_history_INSERT_INTO & ", INDEX" & AnzahlIndexe.ToString AnzahlIndexe += 1 sql_history_Index_Values = sql_history_Index_Values & ", '" & oManValue.Replace("'", "''") & "'" Else If optional_index = True Then oNamenkonvention = oNamenkonvention.Replace("-" & oElement.Value & "-", "-") oNamenkonvention = oNamenkonvention.Replace("_" & oElement.Value & "_", "_") oNamenkonvention = oNamenkonvention.Replace("_" & oElement.Value & "-", "_") oNamenkonvention = oNamenkonvention.Replace("-" & oElement.Value & "_", "-") oNamenkonvention = oNamenkonvention.Replace("-" & oElement.Value, "-") oNamenkonvention = oNamenkonvention.Replace("_" & oElement.Value, "_") oNamenkonvention = oNamenkonvention.Replace(oElement.Value & "-", "-") oNamenkonvention = oNamenkonvention.Replace(oElement.Value & "_", "_") oNamenkonvention = oNamenkonvention.Replace(oElement.Value, oManValue) Dim oFilenameWithoutExtension = Path.GetFileNameWithoutExtension(oNamenkonvention) Dim oExtension = Path.GetExtension(oNamenkonvention) If oFilenameWithoutExtension.EndsWith("-") Or oFilenameWithoutExtension.EndsWith("_") Then oFilenameWithoutExtension = oFilenameWithoutExtension.Substring(0, oFilenameWithoutExtension.Count - 1) End If NewFileString = oFilenameWithoutExtension & oExtension sql_history_INSERT_INTO = sql_history_INSERT_INTO & ", INDEX" & AnzahlIndexe.ToString AnzahlIndexe += 1 sql_history_Index_Values = sql_history_Index_Values & ", '" & oManValue.Replace("'", "''") & "'" Else _Logger.Debug("Der Indexvalue für Index '" & Indexname & "' ist String.Empty") err = True End If End If Case "A" Dim value As String = GetAutoIndex_Value(oElement.Value.Substring(3, oElement.Value.Length - 4)) If value <> String.Empty Then If value = "EMPTY_OI" Then oNamenkonvention = oNamenkonvention.Replace(oElement.Value, "") NewFileString = oNamenkonvention Else oNamenkonvention = oNamenkonvention.Replace(oElement.Value, value) NewFileString = oNamenkonvention sql_history_INSERT_INTO = sql_history_INSERT_INTO & ", INDEX" & AnzahlIndexe.ToString AnzahlIndexe += 1 sql_history_Index_Values = sql_history_Index_Values & ", '" & value.Replace("'", "''") & "'" End If Else err = True End If Case "V" Dim datetemp As String Dim _Month As String = My.Computer.Clock.LocalTime.Month If _Month.Length = 1 Then _Month = "0" & _Month End If Dim _day As String = My.Computer.Clock.LocalTime.Day If _day.Length = 1 Then _day = "0" & _day End If Dim type = oElement.Value '.ToUpper.Replace("[v%", "") type = type.Replace("[%v_", "") type = type.Replace("[%v", "") type = type.Replace("]", "") Select Case type Case "YY_MM_DD" datetemp = My.Computer.Clock.LocalTime.Year.ToString.Substring(2) & "_" & _Month & "_" & _day Case "YYYY_MM_DD" datetemp = My.Computer.Clock.LocalTime.Year & "_" & _Month & "_" & _day Case "DD_MM_YY" datetemp = _day & "_" & _Month & "_" & My.Computer.Clock.LocalTime.Year.ToString.Substring(2) Case "DD_MM_YYYY" datetemp = _day & "_" & _Month & "_" & My.Computer.Clock.LocalTime.Year Case "YYMMDD" datetemp = My.Computer.Clock.LocalTime.Year.ToString.Substring(2) & _Month & _day Case "YYYYMMDD" datetemp = My.Computer.Clock.LocalTime.Year & _Month & _day Case "DDMMYY" datetemp = _day & _Month & My.Computer.Clock.LocalTime.Year.ToString.Substring(2) Case "DDMMYYYY" datetemp = _day & _Month & My.Computer.Clock.LocalTime.Year Case "OFilename" oNamenkonvention = oNamenkonvention.Replace(oElement.Value, System.IO.Path.GetFileNameWithoutExtension(My.Application.Globix.CURRENT_WORKFILE)) Case "Username".ToUpper oNamenkonvention = oNamenkonvention.Replace(oElement.Value, Environment.UserName) Case "Usercode".ToUpper oNamenkonvention = oNamenkonvention.Replace(oElement.Value, My.Application.User.ShortName) Case "" End Select If datetemp <> "" Then oNamenkonvention = oNamenkonvention.Replace(oElement.Value, datetemp) End If NewFileString = oNamenkonvention Case "[%Version]".ToUpper Try Dim version As Integer = 1 Dim Stammname As String = oRAWZielordner & "\" & oNamenkonvention.Replace(oElement.Value, "") Dim _neuername As String = oRAWZielordner & "\" & oNamenkonvention.Replace(oElement.Value, "") Stammname = _neuername.Replace(My.Application.Globix.VERSION_DELIMITER, "") _neuername = _neuername.Replace(My.Application.Globix.VERSION_DELIMITER, "") 'Dim MoveFilename As String = DATEINAME.Replace(element.Value, "") 'Überprüfen ob File existiert If File.Exists(_neuername) = False Then NewFileString = _neuername Else Do While File.Exists(_neuername) version = version + 1 _neuername = Stammname.Replace(extension, "") & My.Application.Globix.VERSION_DELIMITER & version & extension NewFileString = _neuername Loop End If Catch ex As Exception _Logger.Warn(" - Unexpected error in NameGenerieren - Fehler: " & vbNewLine & ex.Message) _Logger.Error(ex.Message) MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error in Umbenennnen der Datei:") err = True End Try Case Else _Logger.Info(" - Achtung - in der Namenkonvention wurde ein Element gefunden welches nicht zugeordnet werden kann!" & vbNewLine & "Elementname: " & oElement.Value.ToUpper) MsgBox("Achtung - in der Namenkonvention wurde ein Element gefunden welches nicht zugeordnet werden kann!" & vbNewLine & "Elementname: " & oElement.Value.ToUpper, MsgBoxStyle.Exclamation, "Unexpected error in Name generieren:") End Select Next My.Application.Globix.CURRENT_NEWFILENAME = oFilesystem.GetCleanFilename(NewFileString) 'CURRENT_NEWFILENAME = ClassFilehandle.CleanFilename(NewFileString, "") My.Application.Globix.CURRENT_NEWFILENAME = Path.Combine(oRAWZielordner, My.Application.Globix.CURRENT_NEWFILENAME) _Logger.Debug("#### ENDE Name_Generieren ####") _Logger.Debug("") If err = False Then Return True Else Return False End If Catch ex As Exception _Logger.Warn(" - Unvorhergesehener Unexpected error in Name_Generieren - Fehler: " & vbNewLine & ex.Message) _Logger.Error(ex.Message) MsgBox(ex.Message, MsgBoxStyle.Critical, "Allgemeiner Unexpected error in Name_Generieren:") Return False End Try End Function Private Function Move_File2_Target() Dim oError As Boolean Try Dim oFolderForIndex = FilterDatatable(My.Application.Globix.CURR_DT_DOCTYPE, $"", "FOLDER_FOR_INDEX", "", False) If Not IsDBNull(oFolderForIndex) Then CreateFolderForIndex(oFolderForIndex) Else CreateFolderForIndex(String.Empty) End If Dim oExportSuccessful As Boolean = False 'Variable Folder If DropType = "|DROPFROMFSYSTEM|" Or DropType = "|OUTLOOK_ATTACHMENT|" Or DropType = "|ATTMNTEXTRACTED|" Or DropType = "|FW_SIMPLEINDEXER|" Then Move_File(My.Application.Globix.CURRENT_WORKFILE, My.Application.Globix.CURRENT_NEWFILENAME, My.Application.Globix.CURRENT_WORKFILE_EXTENSION, My.Application.Globix.FILE_DELIMITER) ' oExportSuccessful = SINGLEFILE_2_WINDREAM(My.Application.Globix.CURR_D) ElseIf DropType = "|OUTLOOK_MESSAGE|" Or DropType = "|FW_MSGONLY|" Or DropType = "|MSGONLY|" Or DropType = "|FW_OUTLOOK_MESSAGE|" Then ' oExportSuccessful = SINGLEFILE_2_WINDREAM(CURR_DOKART_OBJECTTYPE) End If If oExportSuccessful = True Then 'Kein Fehler in Export2windream oError = False If Write_Indizes() = True Then 'Kein Fehler in Setzen der windream-Indizes Dim Insert_String As String Try Dim tempCur_WF = My.Application.Globix.CURRENT_WORKFILE.Replace("'", "''") Dim tempCur_New_FN = My.Application.Globix.CURRENT_NEWFILENAME.Replace("'", "''") Insert_String = sql_history_INSERT_INTO & ",ADDED_WHO) VALUES ('" & tempCur_WF & "','" & tempCur_New_FN & "'" & sql_history_Index_Values & ",'" & Environment.UserDomainName & "\" & Environment.UserName & "')" My.Database.GetScalarValue(Insert_String) If DropType.Contains("MSG") Or DropType = "|ATTMNTEXTRACTED|" Or DropType = "|OUTLOOK_ATTACHMENT|" Then If My.Application.Globix.CURRENT_MESSAGEID <> "" Then Dim max As String = "SELECT MAX(GUID) FROM TBGI_HISTORY" Dim GUID = My.Database.GetScalarValue(max) Try If GUID > 0 Then Dim sqlUpdate As String If DropType = "|ATTMNTEXTRACTED|" Or DropType = "|OUTLOOK_ATTACHMENT|" Then sqlUpdate = "Update TBGI_HISTORY SET ATTACHMENT = 1, MSG_ID = '" & My.Application.Globix.CURRENT_MESSAGEID & "' WHERE GUID = " & GUID My.Database.ExecuteNonQuery(sqlUpdate) Else sqlUpdate = "Update TBGI_HISTORY SET ATTACHMENT = 0, MSG_ID = '" & My.Application.Globix.CURRENT_MESSAGEID & "' WHERE GUID = " & GUID My.Database.ExecuteNonQuery(sqlUpdate) End If End If Catch ex As Exception _Logger.Error(ex) End Try End If End If Catch ex As Exception _Logger.Error(ex) MsgBox("Error in Insert-History - View logfile: " & ex.Message, MsgBoxStyle.Critical) _Logger.Warn(" - Unexpected error in Insert-History - Fehler: " & vbNewLine & ex.Message) _Logger.Warn(" - Unexpected error in Insert-History - SQL: " & Insert_String) oError = True End Try Else oError = True End If Else oError = True If My.Application.User.Language = "de-DE" Then MsgBox("Der Export nach windream war nicht erfolgreich - Check LogFile", MsgBoxStyle.Exclamation) Else MsgBox("Export to windream was unsucessful - Check LogFile", MsgBoxStyle.Exclamation) End If End If 'False oder True zurückgeben 'Kein Fehler aufgetreten If oError = False Then Return True Else 'Fehler aufgetreten Return False End If Catch ex As Exception _Logger.Error(ex) MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected Error in Move File2Target:") Return False End Try End Function Private Function ImportFile2IDB() As Boolean Try If Move_File(My.Application.Globix.CURRENT_WORKFILE, My.Application.Globix.CURRENT_NEWFILENAME, My.Application.Globix.CURRENT_WORKFILE_EXTENSION, My.Application.Globix.VERSION_DELIMITER) = True Then Dim oEXEC As String = $"EXEC PRIDB_ADD_DOC_FROM_FOLDER '{My.Application.Globix.CURRENT_NEWFILENAME}','{My.Application.User.UserName}'" Dim oDTRESULT As DataTable = My.DatabaseIDB.GetDatatable(oEXEC) If IsNothing(oDTRESULT) Then Return False Else If oDTRESULT.Rows.Count = 0 Then Return False Else My.Application.Globix.CURRENT_DOC_ID = oDTRESULT.Rows(0).Item(0) Return True End If End If End If Catch ex As Exception _Logger.Error(ex) End Try End Function Function Move_File(Quelle As String, _NewFilename As String, extension As String, _versionTz As String) As Boolean 'Überprüfen ob File existiert If File.Exists(_NewFilename) = False Then My.Application.Globix.CURRENT_NEWFILENAME = _NewFilename Else 'Versionieren Dim version As Integer = 1 Dim Stammname As String = _NewFilename Dim neuername As String = _NewFilename Do While File.Exists(neuername) version = version + 1 neuername = Stammname.Replace(extension, "") & _versionTz & version & extension My.Application.Globix.CURRENT_NEWFILENAME = neuername Loop End If 'Die Datei wird nun verschoben If My.Application.Globix.CURR_DELETE_ORIGIN = True Then My.Computer.FileSystem.MoveFile(My.Application.Globix.CURRENT_WORKFILE, My.Application.Globix.CURRENT_NEWFILENAME) Else My.Computer.FileSystem.CopyFile(My.Application.Globix.CURRENT_WORKFILE, My.Application.Globix.CURRENT_NEWFILENAME) End If Dim Insert_String As String Try Dim tempCur_WF = My.Application.Globix.CURRENT_WORKFILE.Replace("'", "''") Dim tempCur_New_FN = My.Application.Globix.CURRENT_NEWFILENAME.Replace("'", "''") Insert_String = sql_history_INSERT_INTO & ",ADDED_WHO,ADDED_WHERE) VALUES ('" & tempCur_WF & "','" & tempCur_New_FN & "'" & sql_history_Index_Values & ",'" & Environment.UserDomainName & "\" & Environment.UserName & "','" & Environment.MachineName & "')" If My.Database.ExecuteNonQuery(Insert_String) = True Then If My.Application.Globix.CURRENT_MESSAGEID <> "" Then Dim oMax As String = "SELECT MAX(GUID) FROM TBGI_HISTORY" Dim oGUID = My.Database.GetScalarValue(oMax) Try If oGUID > 0 Then Dim oSql As String If My.Application.Globix.CURRENT_ISATTACHMENT = True Then oSql = "Update TBGI_HISTORY SET ATTACHMENT = 1, MSG_ID = '" & My.Application.Globix.CURRENT_MESSAGEID & "' WHERE GUID = " & oGUID My.Database.GetScalarValue(oSql) Else oSql = "Update TBGI_HISTORY SET ATTACHMENT = 0, MSG_ID = '" & My.Application.Globix.CURRENT_MESSAGEID & "' WHERE GUID = " & oGUID My.Database.GetScalarValue(oSql) End If End If Catch ex As Exception End Try End If End If Return True Catch ex As Exception _Logger.Error(ex.Message) _Logger.Warn(" - Unexpected error in Move_Rename - Insert_String: " & Insert_String) Return False End Try End Function Private Function Write_Indizes() Try Dim indexierung_erfolgreich As Boolean = False ' 'Manuelle Indexe Indexieren ' Dim DTMan As DataTable = MyDataset.VWDDINDEX_MAN ' If DTMan.Rows.Count > 0 Then ' Dim Count As Integer = 0 ' For Each row As DataRow In DTMan.Rows ' Dim idxvalue = row.Item("IndexValueGUI") ' Dim indexname = row.Item("WD_INDEX").ToString ' _Logger.Debug($"Write_Indizes - Index [{indexname}]...") ' Dim optional_Index = CBool(row.Item("OPTIONAL")) ' Dim Indexed = CBool(row.Item("Indexed")) ' If Indexed And idxvalue.ToString <> "" And idxvalue <> "EMPTY_OI" Then ' If indexname <> String.Empty Then ' If row.Item("SAVE_VALUE") = True Then ' 'Den Indexwert zwischenspeichern ' Dim DTTemp As DataTable = MyDataset.TBTEMP_INDEXRESULTS ' Dim rowexists As Boolean = False ' For Each rowTemp As DataRow In DTTemp.Rows ' 'Wenn bereits ein Eintrag existiert..... ' If rowTemp.Item("Dokumentart") = row.Item("DOKUMENTART") And rowTemp.Item("Indexname") = row.Item("INDEXNAME") Then ' rowexists = True ' '......überschreiben ' rowTemp.Item("Value") = row.Item("IndexValueGUI") ' End If ' Next ' '.....ansonsten neu anlegen ' If rowexists = False Then ' Dim newRow As DataRow = DTTemp.NewRow() ' newRow("Dokumentart") = row.Item("DOKUMENTART").ToString ' newRow("Indexname") = row.Item("INDEXNAME").ToString ' newRow("Value") = row.Item("IndexValueGUI") ' DTTemp.Rows.Add(newRow) ' End If ' End If ' _Logger.Debug($"Manueller Indexvalue [{idxvalue.ToString}]...NOW THE INDEXING...") ' Count += 1 ' ' den Typ des Zielindexes auslesen ' Dim oIndexType As Integer = WINDREAM.GetIndexType(indexname) ' _Logger.Debug($"oIndexType [{oIndexType.ToString}]...") ' If oIndexType < WINDREAM.WMObjectVariableValueTypeVector Then ' _Logger.Debug($"Indexing oIndexType < WINDREAM.WMObjectVariableValueTypeVector...") ' indexierung_erfolgreich = WINDREAM.SetFileIndex(CURRENT_NEWFILENAME, indexname, idxvalue, CURR_DOKART_OBJECTTYPE) ' Else ' Dim oSplitArray = Split(idxvalue, ClassConstants.VECTORSEPARATOR) ' Dim oListofString As New List(Of String) ' If oSplitArray.Count = 0 Then ' oListofString.Add(idxvalue) ' Else ' For Each oStr In oSplitArray ' oListofString.Add(oStr) ' Next ' End If ' indexierung_erfolgreich = WINDREAM.SetFileIndex(CURRENT_NEWFILENAME, indexname, oListofString, CURR_DOKART_OBJECTTYPE) ' End If ' 'indexierung_erfolgreich = ClassWindream.DateiIndexieren(CURRENT_NEWFILENAME, indexname, idxvalue) ' If indexierung_erfolgreich = False Then ' MsgBox("Error in Indexing file - See log", MsgBoxStyle.Critical) ' Return False ' Exit For ' End If ' Else ' _Logger.Debug("No Indexing: indexname: " & indexname) ' _Logger.Debug("No Indexing: is optional? " & optional_Index.ToString) ' End If ' Else ' _Logger.Debug("Indexvalue is empty or field is not indexed - Indexname: " & indexname) ' _Logger.Info("Indexvalue is empty or field is not indexed - Indexname: " & indexname) ' End If ' Next ' End If ' 'Automatische Indexe Indexieren ' Dim DTAut As DataTable = MyDataset.VWDDINDEX_AUTOM ' If DTAut.Rows.Count > 0 Then ' Dim Count As Integer = 0 ' For Each row As DataRow In DTAut.Rows ' Dim Indexed = CBool(row.Item("Indexed")) ' Dim Indexvalue = row.Item("IndexValueGUI").ToString ' Dim indexname = row.Item("INDEXNAME").ToString ' If Indexed = True And Indexvalue <> "" Then ' If Indexvalue <> "EMPTY_OI" Then ' _Logger.Info("Auto Indexname: " & indexname.ToString) ' _Logger.Info("Indexvalue: " & Indexvalue.ToString) ' Count += 1 ' ' den Typ des Zielindexes auslesen ' Dim indexType As Integer = WINDREAM.GetIndexType(indexname) ' If indexType < WINDREAM.WMObjectVariableValueTypeVector Then ' indexierung_erfolgreich = WINDREAM.SetFileIndex(CURRENT_NEWFILENAME, indexname, Indexvalue, CURR_DOKART_OBJECTTYPE) ' Else ' Dim oSplitArray = Split(Indexvalue, ClassConstants.VECTORSEPARATOR) ' Dim oListofString As New List(Of String) ' If oSplitArray.Count = 0 Then ' oListofString.Add(Indexvalue) ' Else ' For Each oStr In oSplitArray ' oListofString.Add(oStr) ' Next ' End If ' indexierung_erfolgreich = WINDREAM.SetFileIndex(CURRENT_NEWFILENAME, indexname, oListofString, CURR_DOKART_OBJECTTYPE) ' End If ' 'indexierung_erfolgreich = WINDREAM.SetFileIndex(CURRENT_NEWFILENAME, indexname, Indexvalue, CURR_DOKART_OBJECTTYPE) ' If indexierung_erfolgreich = False Then ' MsgBox("Error in indexing file - See log", MsgBoxStyle.Critical) ' Return False ' Exit For ' End If ' End If ' End If ' Next ' End If ' If DropType = "|OUTLOOK_MESSAGE|" Or DropType = "|FW_MSGONLY|" Or DropType = "|MSGONLY|" Or CURRENT_NEWFILENAME.EndsWith(".msg") Then ' indexierung_erfolgreich = SetEmailIndices() ' If indexierung_erfolgreich = False Then ' MsgBox("Error in SetEmailIndices - See log", MsgBoxStyle.Critical) ' Return False ' End If ' ElseIf DropType = "|ATTMNTEXTRACTED|" Or DropType = "|OUTLOOK_ATTACHMENT|" Then ' indexierung_erfolgreich = SetAttachmentIndices() ' If indexierung_erfolgreich = False Then ' MsgBox("Error in SetEmailIndices - See log", MsgBoxStyle.Critical) ' Return False ' End If ' End If Return True Catch ex As Exception _Logger.Warn("Unexpected error in Write_Indizes - Fehler: " & vbNewLine & ex.Message) _Logger.Error(ex.Message) MsgBox("Error in Write_Indizes:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) Return False End Try End Function Private Function CreateFolderForIndex(DynamicFolderConfig As String) Try Dim oRootFolder As String = Path.GetDirectoryName(My.Application.Globix.CURRENT_NEWFILENAME) Dim oFilesystem As New DigitalData.Modules.Filesystem.File(_LogConfig) If DynamicFolderConfig <> String.Empty Then '###### Dim oRegexString As String = "\[%{1}[a-zA-Z0-9\!\$\&\/\(\)\=\?\,\.\-\;\:_öÖüÜäÄ\#\'\+\*\~\{\}\@\€\<\>\ ]+]{1}" ' einen Regulären Ausdruck laden Dim oRegex As Regex = New Regex(oRegexString) ' die Vorkommen im Folder-String auslesen Dim oMatches As MatchCollection = oRegex.Matches(DynamicFolderConfig) '#### ' alle Vorkommen innerhalb des Ordnerstrings durchlaufen For Each oMatch As Match In oMatches _Logger.Info("Elementname in FolderString: '" & oMatch.ToString & "'") Select Case oMatch.Value.Substring(2, 1).ToUpper 'Manueller Indexwert Case "M" Dim oManIndexName = oMatch.Value.Substring(3, oMatch.Value.Length - 4) Dim oIsOptional As Boolean = FilterDatatable(My.Application.Globix.CURR_DT_MAN_INDEXE, $"DOK_ID = {My.Application.Globix.CURRENT_DOCTYPE_ID} AND INDEXNAME = '{oManIndexName}'", "OPTIONAL", "", False) _Logger.Info("Versuch den Indexwert aus '" & oManIndexName & "' auszulesen.") Dim oManIndexValue As String = GetManIndex_Value(oManIndexName, "FILE", oIsOptional) _Logger.Info("Ergebnis/Wert für neuen Ordner: '" & oManIndexName & "'") If Not oManIndexValue = String.Empty Then If IsDate(oManIndexValue) Then oManIndexValue = CDate(oManIndexValue).ToString("yyyyMMdd") End If oManIndexValue = oFilesystem.GetCleanPath(oManIndexValue) 'oManIndexValue = ClassFilehandle.CleanFilename(oManIndexValue, "") DynamicFolderConfig = DynamicFolderConfig.Replace(oMatch.ToString, oManIndexValue) _Logger.Info("FolderPattern: '" & DynamicFolderConfig & "'") Else If oIsOptional = True Then _Logger.Info("Optionaler Indexwert ist NICHT gefüllt") DynamicFolderConfig = DynamicFolderConfig.Replace(oMatch.ToString, String.Empty) Else _Logger.Info(" - Achtung Ausnahme in 'CrFolderForIndex': der Index ist leer!") Return True End If End If Case "A" Dim oAutoIndexName = oMatch.Value.Substring(3, oMatch.Value.Length - 4) _Logger.Info("Versuch den Auto-Indexwert aus '" & oAutoIndexName & "' auszulesen.") Dim oAutoIndexValue As String = GetAutoIndex_Value(oAutoIndexName) _Logger.Info("Ergebnis/Wert für neuen Ordner: '" & oAutoIndexName & "'") If Not oAutoIndexValue = String.Empty Then oAutoIndexValue = oFilesystem.GetCleanPath(oAutoIndexValue) 'oAutoIndexValue = ClassFilehandle.CleanFilename(oAutoIndexValue, "") If oAutoIndexValue = "EMPTY_OI" Then DynamicFolderConfig = DynamicFolderConfig.Replace(oMatch.ToString, "") Else DynamicFolderConfig = DynamicFolderConfig.Replace(oMatch.ToString, oAutoIndexValue) _Logger.Info("FolderPattern: '" & DynamicFolderConfig & "'") End If Else _Logger.Info(" - Achtung Ausnahme in 'CrFolderForIndex': der Index ist leer!") End If Case "V" Dim oElementTemp As String Dim _Month As String = My.Computer.Clock.LocalTime.Month If _Month.Length = 1 Then _Month = "0" & _Month End If Dim _day As String = My.Computer.Clock.LocalTime.Day If _day.Length = 1 Then _day = "0" & _day End If Dim type = oMatch.Value.Substring(3, oMatch.Value.Length - 4) If type.StartsWith("_") Then type = type.Replace("_", "") End If Select Case type Case "YYYY/MM/DD" oElementTemp = My.Computer.Clock.LocalTime.Year & "\" & _Month & "\" & _day Case "YYYY/MM" oElementTemp = My.Computer.Clock.LocalTime.Year & "\" & _Month Case "YYYY" oElementTemp = My.Computer.Clock.LocalTime.Year Case "YYYY-MM" oElementTemp = My.Computer.Clock.LocalTime.Year & "-" & _Month End Select DynamicFolderConfig = DynamicFolderConfig.Replace(oMatch.ToString, oElementTemp) _Logger.Info("FolderPatter nach V-Element: '" & DynamicFolderConfig & "'") Case Else _Logger.Warn(" - Achtung - in der Namenkonvention wurde ein Element gefunden welches nicht zugeordnet werden kann!" & vbNewLine & "Elementname: " & oMatch.Value.ToUpper) If My.Application.User.Language = "de-DE" Then MsgBox("Achtung - in der Namenkonvention wurde ein Element gefunden welches nicht zugeordnet werden kann!" & vbNewLine & "Elementname: " & oMatch.Value.ToUpper, MsgBoxStyle.Exclamation, "Unexpected error in Name generieren:") Else MsgBox("Attention - One element in Namingconvention could not be matched!" & vbNewLine & "Elementname: " & oMatch.Value.ToUpper, MsgBoxStyle.Exclamation, "Unexpected error in Name generieren:") End If End Select Next End If _Logger.Info("Den Root-Folder zusammenfügen>> ") Dim oNewFullPath As String = System.IO.Path.Combine(oRootFolder, DynamicFolderConfig) _Logger.Info("Fullpath (mit evtl. Sonderzeichen (SZ)) '" & oNewFullPath & "'") Dim invalidPathChars() As Char = Path.GetInvalidPathChars() For Each sonderChar As Char In invalidPathChars 'Sonderzeichen ausser Whitespace entfernen If Char.IsWhiteSpace(sonderChar) = False Then If oNewFullPath.Contains(sonderChar) Then oNewFullPath = oNewFullPath.Replace(sonderChar, "") End If End If Next sonderChar ' oNewFullPath = WINDREAM.GetCleanedPath(oNewFullPath) _Logger.Info("Fullpath (ohne SZ) '" & oNewFullPath & "'") If Directory.Exists(oNewFullPath) = False Then Try Dim oCreatedPath = Directory.CreateDirectory(oNewFullPath) oNewFullPath = oCreatedPath.FullName _Logger.Info("Folder '" & oNewFullPath & "' wurde angelegt") Catch ex As Exception _Logger.Info("Error in CreateFolderforIndex-Method - Root Folder '" & oNewFullPath & "' could not be created. " & ex.Message) _Logger.Error(ex.Message) MsgBox("Attention: Root Folder '" & oNewFullPath & "' could not be created." & vbNewLine & ex.Message, MsgBoxStyle.Critical) Return False End Try End If My.Application.Globix.CURRENT_NEWFILENAME = Path.Combine(oNewFullPath, Path.GetFileName(My.Application.Globix.CURRENT_NEWFILENAME)) Return True Catch ex As Exception MsgBox("Unexpected Error in CreateFolderforIndex-Method:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) _Logger.Warn("Fehler in CrFolderForIndex: " & ex.Message) _Logger.Error(ex) Return False End Try End Function Function GetAutoIndex_Value(indexname As String) Try For Each oDataRow As DataRow In My.Application.Globix.CURR_DT_MAN_INDEXE.Rows If oDataRow.Item("INDEXNAME").ToString.ToLower = indexname.ToLower Then Dim oIndexWert = oDataRow.Item("IndexValueGUI") Dim oIsIndexed = oDataRow.Item("Indexed") If oIsIndexed = True Then If oIndexWert.ToString <> String.Empty Then oIndexWert = oIndexWert.ToString ' If Index is a vectorfield (read: Value contains the VECTORSEPARATOR character), use the first value If oIndexWert.Contains(ClassConstants.VECTORSEPARATOR) Then Return oIndexWert.ToString.Split(ClassConstants.VECTORSEPARATOR).FirstOrDefault() Else ' Else just return the normal value Return oIndexWert End If Else ShowNotice("Der Automatische Index: " & oDataRow.Item("INDEXNAME") & " wurde nicht ordnungsgemäss indexiert!") Return "" End If Else ShowNotice("Der Automatische Index: " & oDataRow.Item("INDEXNAME") & " wurde nicht ordnungsgemäss indexiert!") Return "" End If Exit For End If Next Catch ex As Exception _Logger.Warn(" - Unvorhergesehener Unexpected error in GetAutoIndex_Value - Indexname: " & indexname & " - Fehler: " & vbNewLine & ex.Message) _Logger.Error(ex.Message) MsgBox("Indexname: " & indexname & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Unexpected error in GetAutoIndex_Value:") Return "" End Try End Function Function GetManIndex_Value(indexname As String, RequestFor As String, opt As Boolean) Try For Each DR As DataRow In My.Application.Globix.CURR_DT_MAN_INDEXE.Rows If DR.Item("INDEXNAME").ToString.ToLower = indexname.ToLower Then If DR.Item("Indexed") = True Then _Logger.Info("## Manueller Index: " & indexname) Select Case RequestFor Case "FILE" If DR.Item("IndexValue_File").ToString <> String.Empty Then _Logger.Info("Es liegt ein separater nachbearbeiteter Wert für die Dateibenennung vor: " & DR.Item("IndexValue_File").ToString) _Logger.Info("Zurückgegebener NachbearbeitungsWert: " & DR.Item("IndexValue_File")) Return DR.Item("IndexValue_File") Else If DR.Item("IndexValueGUI").ToString <> String.Empty Then _Logger.Info("Zurückgegebener manueller Indexwert: " & DR.Item("IndexValueGUI")) Return DR.Item("IndexValueGUI") Else If opt = False Then _Logger.Info("Achtung, der Indexwert des manuellen Indexes '" & indexname & "' ist String.empty!") ShowNotice("Indexed = True - Der Index: " & DR.Item("INDEXNAME") & " wurde nicht ordnungsgemäss indexiert! - Automatischer Index konnte nicht gesetzt werden!") Return Nothing Else Return "" End If End If End If Case Else If DR.Item("IndexValueGUI").ToString <> String.Empty Then _Logger.Info("Zurückgegebener manueller Indexwert: " & DR.Item("IndexValueGUI")) Return DR.Item("IndexValueGUI") Else If opt = False Then _Logger.Info("Achtung, der Indexwert des manuellen Indexes '" & indexname & "' ist String.empty!") ShowNotice("Indexiert = True - Der Index: " & DR.Item("INDEXNAME") & " wurde nicht ordnungsgemäss indexiert! - Automatischer Index konnte nicht gesetzt werden!") Return Nothing Else Return "" End If End If End Select Else ShowNotice("Der Index: " & DR.Item("INDEXNAME") & " wurde nicht ordnungsgemäss indexiert! - Automatischer Index konnte nicht gesetzt werden!") Return Nothing End If Exit For End If Next Catch ex As Exception _Logger.Warn(" - Unvorhergesehener Unexpected error in GetManIndex_Value - Fehler: " & vbNewLine & ex.Message) _Logger.Error(ex.Message) MsgBox("Indexname: " & indexname & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Unexpected error in GetManIndex_Value:") Return Nothing End Try End Function Function CheckWrite_IndexeMan(dokartid As Integer) '#### Zuerst manuelle Werte indexieren #### Try _Logger.Info("In CheckWrite_IndexeMan") Dim result As Boolean = False For Each oControl As Control In Me.pnlIndex.Controls ' MsgBox(ctrl.Name) If oControl.Name.StartsWith("txt") Then Dim box As DevExpress.XtraEditors.TextEdit = oControl If box.Text = "" Then Dim oIndexName = Replace(box.Name, "txt", "") Dim optional_index As Boolean = FilterDatatable(My.Application.Globix.CURR_DT_MAN_INDEXE, $"DOK_ID = {dokartid} AND INDEXNAME = '{oIndexName}'", "OPTIONAL", "", False) If optional_index = False Then MsgBox(TEXT_MISSING_INPUT, MsgBoxStyle.Exclamation, "Fehlende Eingabe:") box.Focus() Return False Else Indexwert_Postprocessing(Replace(box.Name, "txt", ""), "") result = True End If Else If Indexwert_checkValueDB(Replace(box.Name, "txt", ""), box.Text) = False Then _Logger.Info(" - Der eingegebene Wert wurde nicht in der Datenbank gefunden") MsgBox("Der eingegebene Wert wurde nicht in der Datenbank gefunden!", MsgBoxStyle.Exclamation, "Fehlerhafte Indexierung:") box.Focus() Return False Else Indexwert_Postprocessing(Replace(box.Name, "txt", ""), box.Text) result = True End If End If End If If oControl.Name.StartsWith("cmbMulti") Then Dim oLookup = DirectCast(oControl, DigitalData.Controls.LookupGrid.LookupControl2) Dim values As List(Of String) = oLookup.SelectedValues If values.Count = 0 Then Dim oIndexName = Replace(oLookup.Name, "cmbMulti", "") Dim optional_index As Boolean = FilterDatatable(My.Application.Globix.CURR_DT_MAN_INDEXE, $"DOK_ID = {dokartid} AND INDEXNAME = '{oIndexName}'", "OPTIONAL", "", False) If optional_index = False Then MsgBox(TEXT_MISSING_INPUT, MsgBoxStyle.Exclamation, Text) oLookup.Focus() Return False Else Indexwert_Postprocessing(Replace(oLookup.Name, "cmbMulti", ""), "") result = True End If Else Dim vectorValue = String.Join(ClassConstants.VECTORSEPARATOR, values) Indexwert_Postprocessing(Replace(oLookup.Name, "cmbMulti", ""), vectorValue) result = True End If ElseIf oControl.Name.StartsWith("cmbSingle") Then Dim cmbSingle As TextBox = oControl If cmbSingle.Text = "" Then Dim oIndexName = Replace(cmbSingle.Name, "cmbSingle", "") Dim optional_index As Boolean = FilterDatatable(My.Application.Globix.CURR_DT_MAN_INDEXE, $"DOK_ID = dokartid AND INDEXNAME = '{oIndexName}'", "OPTIONAL", "", False) If optional_index = False Then MsgBox(TEXT_MISSING_INPUT, MsgBoxStyle.Exclamation, Text) cmbSingle.Focus() Return False Else Indexwert_Postprocessing(Replace(cmbSingle.Name, "cmbSingle", ""), "") result = True End If Else Indexwert_Postprocessing(Replace(cmbSingle.Name, "cmbSingle", ""), cmbSingle.Text) result = True End If ElseIf oControl.Name.StartsWith("cmb") Then Dim cmb As ComboBox = oControl If cmb.Text = "" Then Dim oIndexName = Replace(cmb.Name, "cmb", "") Dim optional_index As Boolean = FilterDatatable(My.Application.Globix.CURR_DT_MAN_INDEXE, $"DOK_ID = dokartid AND INDEXNAME = '{oIndexName}'", "OPTIONAL", "", False) If optional_index = False Then MsgBox(TEXT_MISSING_INPUT, MsgBoxStyle.Exclamation, Text) cmb.Focus() Return False Else Indexwert_Postprocessing(Replace(cmb.Name, "cmb", ""), "") result = True End If Else Indexwert_Postprocessing(Replace(cmb.Name, "cmb", ""), cmb.Text) result = True End If End If If oControl.Name.StartsWith("dtp") Then Dim dtp As DevExpress.XtraEditors.DateEdit = oControl Dim oIndexName As String = Replace(dtp.Name, "dtp", "") If dtp.Text = String.Empty Then Dim optional_index As Boolean = FilterDatatable(My.Application.Globix.CURR_DT_MAN_INDEXE, $"DOK_ID = dokartid AND INDEXNAME = '{oIndexName}'", "OPTIONAL", "", False) If optional_index = False Then MsgBox(TEXT_MISSING_INPUT, MsgBoxStyle.Exclamation, Text) dtp.Focus() Return False Else Indexwert_Postprocessing(oIndexName, "") result = True End If Else Indexwert_Postprocessing(Replace(dtp.Name, "dtp", ""), dtp.Text) result = True End If End If If oControl.Name.StartsWith("chk") Then Dim chk As CheckBox = oControl Indexwert_Postprocessing(Replace(chk.Name, "chk", ""), chk.Checked) result = True End If If TypeOf (oControl) Is Button Then Continue For End If If oControl.Name.StartsWith("lbl") = False And result = False Then _Logger.Info("Die Überprüfung der manuellen Indices ist fehlerhaft. Bitte informieren Sie den Systembetreuer") Return False End If Next Return True Catch ex As Exception _Logger.Warn(" - Unvorhergesehener Fehler in CheckWrite_IndexeMan - Fehler: " & vbNewLine & ex.Message) _Logger.Error(ex.Message) MsgBox(ex.Message, MsgBoxStyle.Critical, "Unerwarteter Unexpected error in CheckWrite_IndexeMan:") Return False End Try End Function Function Indexwert_checkValueDB(indexname As String, wert As String) Try Dim oRow As DataRow 'DT = DD_DMSLiteDataSet.VWINDEX_MAN For Each oRow In DT_INDEXEMAN.Rows If oRow.Item("NAME") = indexname Then If oRow.Item("SQL_CHECK").ToString <> String.Empty Then Dim connectionString As String Dim sql As String connectionString = My.Database.Get_ConnectionStringforID(oRow.Item("CONNECTION_ID")) If connectionString <> "" Then Dim sqlscalar = oRow.Item("SQL_CHECK") Select Case oRow.Item("DATENTYP") Case "INTEGER" sqlscalar = sqlscalar.ToString.Replace("@manValue", wert) Case Else sqlscalar = sqlscalar.ToString.Replace("@manValue", "'" & wert & "'") End Select sql = sqlscalar Dim ergebnis As Integer 'If DR.Item("SQL_PROVIDER") = "Oracle" Then ' ergebnis = ClassDatabase.OracleExecute_Scalar(sql, connectionString) 'Else 'MSQL ergebnis = My.Database.GetScalarValueConStr(sql, connectionString) ' End If Select Case ergebnis Case 1 Return True Case 2 ShowNotice("Indexwert nicht eindeutig: " & sql) Return False Case 99 Return False End Select End If Else Return True End If End If Next Catch ex As Exception MsgBox("Indexname: " & indexname & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Unexpected error in Indexwert_checkValue:") _Logger.Info(" - Unvorhergesehener Unexpected error in Indexwert_checkValue - Fehler: " & vbNewLine & ex.Message) Return False End Try End Function Function FillIndexe_Autom(dokart_id As Integer) Try Dim oSQL = $"SELECT * FROM VWDDINDEX_AUTOM WHERE DOCTYPE_ID = {My.Application.Globix.CURRENT_DOCTYPE_ID}" My.Application.Globix.CURR_DT_AUTO_INDEXE = My.Database.GetDatatable(oSQL) Dim oRegex As New Regex("\[%{1}[a-zA-Z0-9\!\$\&\/\(\)\=\?\,\.\-\;\:_öÖüÜäÄ\#\'\+\*\~\{\}\@\€\<\>\ ]+]{1}") If My.Application.Globix.CURR_DT_AUTO_INDEXE.Rows.Count = 0 Then Return True End If ' 1. Schritt: Einfach-Indexe und Platzhalter ersetzen For Each oAutoIndexRow As DataRow In My.Application.Globix.CURR_DT_AUTO_INDEXE.Rows _Logger.Info("Working on AutomaticIndex: " & oAutoIndexRow.Item("INDEXNAME") & "...") Dim oSqlResult As String = NotNull(oAutoIndexRow.Item("SQL_RESULT"), "") Dim oSqlActive As Boolean = NotNull(oAutoIndexRow.Item("SQL_ACTIVE"), False) Dim oSqlConnectionId As Integer = NotNull(oAutoIndexRow.Item("CONNECTION_ID"), -1) Dim oSqlProvider As String = NotNull(oAutoIndexRow.Item("SQL_PROVIDER"), "") Dim oEndResult As New List(Of String) ' Wenn kein SQL Befehl vorhanden oder aktiv ist, ' versuchen wir, die Spalte VALUE zu ersetzen If oSqlResult = String.Empty Or oSqlActive = 0 Then Dim oPlaceholderResult As String Dim oValue As String = NotNull(oAutoIndexRow.Item("VALUE"), "") oPlaceholderResult = GetPlaceholderValue(oValue, My.Application.Globix.CURRENT_WORKFILE, My.Application.User.ShortName) If Not IsNothing(oPlaceholderResult) Then oValue = oPlaceholderResult End If oAutoIndexRow.Item("Indexed") = True oAutoIndexRow.Item("IndexValueGUI") = oValue Continue For End If ' Wenn ein SQL Befehl vorhanden und aktiv ist ' Alle Platzhalter finden Dim oMatches As MatchCollection = oRegex.Matches(oSqlResult) For Each oMatch As Match In oMatches Dim oIndexValue As String = StripPlaceholder(oMatch.Value) Dim oOptionalIndex = False Dim oPlaceholderResult As String = Nothing Dim oManualIndexResult As String = Nothing ' Einfachen Platzhalter Wert erzeugen oPlaceholderResult = GetPlaceholderValue(oIndexValue, My.Application.Globix.CURRENT_WORKFILE, My.Application.User.ShortName) ' Einfachen Platzhalter ersetzen If Not IsNothing(oPlaceholderResult) Then oSqlResult = oSqlResult.Replace(oMatch.Value, oPlaceholderResult) End If oOptionalIndex = FilterDatatable(My.Application.Globix.CURR_DT_MAN_INDEXE, $"DOK_ID = {My.Application.Globix.CURRENT_DOCTYPE_ID} AND INDEXNAME = '{oIndexValue}'", "OPTIONAL", "", False) oManualIndexResult = GetManIndex_Value(oIndexValue, "IDX_AUTO", oOptionalIndex) ' Wenn Ergebnis den VektorPlatzhalter enthält, soll nichts ersetzt werden. ' Werden im nächsten Schritt ersetzt. If oManualIndexResult.Contains(ClassConstants.VECTORSEPARATOR) Then oManualIndexResult = Nothing End If If Not IsNothing(oManualIndexResult) Then oSqlResult = oSqlResult.Replace(oMatch.Value, oManualIndexResult) End If Next 'TODO: Replace Windream Patterns? oSqlResult = clsPatterns.ReplaceControlValues(oSqlResult, pnlIndex) oSqlResult = clsPatterns.ReplaceInternalValues(oSqlResult) If oSqlResult <> String.Empty Then _Logger.Debug("oSqlResult after Replace [" & oSqlResult & "]") End If ' Ergebnis: Es wurden alle einfachen Platzhalter ersetzt, jetzt haben wir einen SQL Befehl, ' der nur noch vektorfelder-platzhalter enthält ' 2. Schritt: Vektorfelder ersetzen Dim oVectorMatches As MatchCollection = oRegex.Matches(oSqlResult) If oVectorMatches.Count > 0 Then _Logger.Info(" There are " & oVectorMatches.Count & " matches for vectors!") Dim oIsFirstMatch = True For Each oVectorMatch As Match In oVectorMatches Dim oIndexValue As String = StripPlaceholder(oVectorMatch.Value) Dim oOptionalIndex = False Dim oManualIndexResult As String = Nothing oOptionalIndex = FilterDatatable(My.Application.Globix.CURR_DT_MAN_INDEXE, $"DOK_ID = {My.Application.Globix.CURRENT_DOCTYPE_ID} AND INDEXNAME = '{oIndexValue}'", "OPTIONAL", "", False) oManualIndexResult = GetManIndex_Value(oIndexValue, "IDX_AUTO", oOptionalIndex) Dim oVectorIndexValues = oManualIndexResult.Split(ClassConstants.VECTORSEPARATOR).ToList() For Each oVectorIndexValue In oVectorIndexValues Dim oTempSql = oSqlResult.Replace(oVectorMatch.Value, oVectorIndexValue) Dim oResult = GetAutomaticIndexSQLValue(oTempSql, oSqlConnectionId, oSqlProvider) oEndResult.Add(oResult) Next ' Verhindert, dass die Schleife mehrmals durchlaufen wird If oIsFirstMatch Then Exit For End If oAutoIndexRow.Item("Indexed") = True oAutoIndexRow.Item("IndexValueGUI") = String.Join(ClassConstants.VECTORSEPARATOR, oEndResult.ToArray) Next Else Dim oResult = GetAutomaticIndexSQLValue(oSqlResult, oSqlConnectionId, oSqlProvider) _Logger.Info("Got a simple SQLResult: " & oResult.ToString) oAutoIndexRow.Item("Indexed") = True oAutoIndexRow.Item("IndexValueGUI") = oResult End If Next Return True Catch ex As Exception _Logger.Error(ex) MsgBox(ex.Message) Return False End Try End Function Function StripPlaceholder(Placeholder As String) As String Dim oResult = Placeholder oResult = Regex.Replace(oResult, "^\[%", "") oResult = Regex.Replace(oResult, "\]$", "") Return oResult End Function Function GetAutomaticIndexSQLValue(SQLCommand As String, vconnectionID As Integer, vProvider As String) As String Try Dim oConnectionString As String oConnectionString = My.Database.Get_ConnectionStringforID(vconnectionID) If oConnectionString <> "" Then 'NEU Dim oErgebnis 'Welcher Provider? 'If vProvider.ToLower = "oracle" Then 'oErgebnis = My.Database.leExecute_Scalar(SQLCommand, oConnectionString) 'Else 'im Moment nur SQL-Server oErgebnis = My.Database.GetScalarValueConStr(SQLCommand, oConnectionString) 'End If _Logger.Debug("SQL-ConnectionString: " & oConnectionString.Substring(0, oConnectionString.LastIndexOf("="))) If oErgebnis Is Nothing Then 'showlblhinweis("Kein Ergebnis für automatisches SQL: " & vsqlstatement) Return "" Else Return oErgebnis End If End If Catch ex As Exception _Logger.Warn(" - Unexpected error in Get_AutomatischerIndex_SQL - Fehler: " & vbNewLine & ex.Message) _Logger.Error(ex.Message) MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error in Get_AutomatischerIndex_SQL:") Return "" End Try End Function Sub Indexwert_Postprocessing(indexname As String, wert_in As String) Try Dim value_post As String = "" For Each oDataRow As DataRow In My.Application.Globix.CURR_DT_MAN_INDEXE.Rows If oDataRow.Item("INDEXNAME") = indexname Then Dim idxid As Integer = oDataRow.Item("GUID") If idxid > 0 Then ' In jedem Fall schon mal den Wert einfügen oDataRow.Item("IndexValueGUI") = wert_in 'Die Nachbearbeitungsschritte laden 'FILE AND INDEX 'Zuerst nur die Fälle für die Variante ONLY FILE/FOLDER Dim DTNB As DataTable = FilterDatatable(My.Application.Globix.CURR_INDEX_MAN_POSTPROCESSING, "IDXMAN_ID = " & idxid & " AND VARIANT = 'ONLY FILE/FOLDER'", "", "SEQUENCE", True) 'ClassDatabase.Return_Datatable("SELECT * FROM TBDD_INDEX_MAN_POSTPROCESSING WHERE IDXMAN_ID = " & idxid & " AND VARIANT = 'ONLY FILE/FOLDER' ORDER BY SEQUENCE") If DTNB Is Nothing = False Then If DTNB.Rows.Count > 0 Then value_post = clsPostProcessing.Get_Nachbearbeitung_Wert(wert_in, DTNB) oDataRow.Item("IndexValueGUI") = value_post oDataRow.Item("IndexValue_File") = value_post End If End If 'Jetzt die Fälle für die Variante FILE AND INDEX DTNB = Nothing DTNB = FilterDatatable(My.Application.Globix.CURR_INDEX_MAN_POSTPROCESSING, "IDXMAN_ID = " & idxid & " AND VARIANT = 'FILE AND INDEX'", "", "SEQUENCE", True) 'ClassDatabase.Return_Datatable("SELECT * FROM TBDD_INDEX_MAN_POSTPROCESSING WHERE IDXMAN_ID = " & idxid & " AND VARIANT = 'FILE AND INDEX' ORDER BY SEQUENCE") If DTNB Is Nothing = False Then If DTNB.Rows.Count > 0 Then value_post = clsPostProcessing.Get_Nachbearbeitung_Wert(wert_in, DTNB) oDataRow.Item("IndexValueGUI") = value_post End If End If End If oDataRow.Item("Indexed") = True End If Next Catch ex As Exception _Logger.Warn(" - Unvorhergesehener Unexpected error in Indexwert_Postprocessing - Indexname: " & indexname & " - Fehler: " & vbNewLine & ex.Message) _Logger.Error(ex.Message) MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error in Indexwert_Postprocessing:") End Try End Sub Private Sub PictureEdit1_Click(sender As Object, e As EventArgs) Handles PictureEdit1.Click GlobixFlow() End Sub Private Sub PictureEdit1_EditValueChanged(sender As Object, e As EventArgs) Handles PictureEdit1.EditValueChanged End Sub End Class