Option Explicit On Imports System.DirectoryServices Imports System.IO Imports System.Security.AccessControl Imports System.Security.Principal Imports System.Text.RegularExpressions Imports DigitalData.Modules.Logging Imports Independentsoft 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 Private _DataASorDB As ClassDataASorDB Private _idbdata As ClassIDBData #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 _DataASorDB = New ClassDataASorDB(LogConfig) clswindowLocation = New ClassWindowLocation(LogConfig) clsPatterns = New GlobixPatterns(LogConfig) clsPostProcessing = New GlobixPostprocessing(LogConfig) _idbdata = New ClassIDBData(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.Settings.GdPictureKey) 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 Dim oSQL As String = "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.DTTBGI_REGEX_DOCTYPE = _DataASorDB.GetDatatable("DD_ECM", oSQL, "DTTBGI_REGEX_DOCTYPE", "", "") oSQL = "SELECT * FROM TBDD_INDEX_MAN_POSTPROCESSING" My.Application.Globix.CURR_INDEX_MAN_POSTPROCESSING = _DataASorDB.GetDatatable("DD_ECM", oSQL, "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 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 oSql = String.Format("select * from VWGI_DOCTYPE where UPPER(USERNAME) = UPPER('{0}') ORDER BY SEQUENCE", My.Application.User.UserName) Dim oFilter = $"USERNAME like '%{My.Application.User.UserName}%'" DT_DOKART = _DataASorDB.GetDatatable("DD_ECM", oSql, "VWGI_DOCTYPE", oFilter, "SEQUENCE") 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 oSql As String = "Select * from TBDD_DOKUMENTART WHERE GUID = " & cmbDoctype.SelectedValue.ToString Dim oFilter = "GUID = " & cmbDoctype.SelectedValue.ToString My.Application.Globix.CURR_DT_DOCTYPE = _DataASorDB.GetDatatable("DD_ECM", oSql, "TBDD_DOKUMENTART", oFilter, "") 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" Dim oFilter = "DOK_ID = " & dokartid DT_INDEXEMAN = _DataASorDB.GetDatatable("DD_ECM", oSql, "DT_INDEXE_MAN", oFilter, "SEQUENCE") 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 oDefaultValue = Check_HistoryValues(oControlName, oRow.Item("DOKUMENTART")) If oDefaultValue Is Nothing Then oDefaultValue = 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, oDefaultValue, 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, oDefaultValue, AddNewItems, PreventDuplicates, oSQLSuggestion) If Not IsNothing(oControl) Then pnlIndex.Controls.Add(oControl) End If Else 'nur eine Textbox Dim oControl = oControls.AddTextBox(oControlName, oControlPosition, oDefaultValue, 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, oDefaultValue, 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 = oDefaultValue 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, oDefaultValue) 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 = GlobixDataset.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.Globix.DT_FUNCTION_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 NI_TYPE = "INFO" If My.Application.User.Language = "de-DE" Then NI_TITLE = "Globix Flow erfolgreich" NI_MESSAGE = "Die Datei wurde erfolgreich verarbeitet" Else NI_TITLE = "Success Globix Flow" NI_MESSAGE = "File successfully processed" 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}" Dim oFilter = "DOK_ID = " & My.Application.Globix.CURRENT_DOCTYPE_ID My.Application.Globix.CURR_DT_MAN_INDEXE = _DataASorDB.GetDatatable("DD_ECM", oSQL, "VWDDINDEX_MAN", oFilter, "") _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 oIDBImportResult As Boolean = False 'Variable Folder If DropType = "|DROPFROMFSYSTEM|" Or DropType = "|OUTLOOK_ATTACHMENT|" Or DropType = "|ATTMNTEXTRACTED|" Or DropType = "|FW_SIMPLEINDEXER|" Then oIDBImportResult = ImportFile2IDB() ' 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 oIDBImportResult = ImportFile2IDB() End If If oIDBImportResult = 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.ExecuteNonQuery(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 NI_TYPE = "ERROR" If My.Application.User.Language = "de-DE" Then NI_TITLE = "Fehler Globix-Import" NI_MESSAGE = "Der Import war nicht erfolgreich - Check LogFile" Else NI_TITLE = "Error Globix-Import" NI_MESSAGE = "The import was not successful - Check LogFile" 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_IDB_OBJ_ID = oDTRESULT.Rows(0).Item(0) Return True End If End If End If Catch ex As Exception _Logger.Error(ex) Return False 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 Dim opath = Path.GetDirectoryName(My.Application.Globix.CURRENT_NEWFILENAME) If Directory.Exists(opath) = False Then Directory.CreateDirectory(opath) 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 oSetVariableOK As Boolean = False Dim oAttributeValue As String Dim oAttributeName As String 'Manuelle Indexe Indexieren If My.Application.Globix.CURR_DT_MAN_INDEXE.Rows.Count > 0 Then Dim Count As Integer = 0 For Each row As DataRow In My.Application.Globix.CURR_DT_MAN_INDEXE.Rows oAttributeValue = row.Item("IndexValueGUI") oAttributeName = row.Item("WD_INDEX").ToString _Logger.Debug($"Write_Indizes - Index [{oAttributeName}]...") Dim oIsOptional = CBool(row.Item("OPTIONAL")) Dim oIndexed = CBool(row.Item("Indexed")) If oIndexed And oAttributeValue.ToString <> "" And oAttributeValue <> "EMPTY_OI" Then If oAttributeName <> String.Empty Then If row.Item("SAVE_VALUE") = True Then 'Den Indexwert zwischenspeichern Dim oDTIndexResults As DataTable = GlobixDataset.TBTEMP_INDEXRESULTS Dim rowexists As Boolean = False For Each rowTemp As DataRow In oDTIndexResults.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 = oDTIndexResults.NewRow() newRow("Dokumentart") = row.Item("DOKUMENTART").ToString newRow("Indexname") = row.Item("INDEXNAME").ToString newRow("Value") = row.Item("IndexValueGUI") oDTIndexResults.Rows.Add(newRow) End If End If End If _Logger.Debug($"Manueller Indexvalue [{oAttributeValue.ToString}]...NOW THE INDEXING...") Count += 1 ' den Typ des Zielindexes auslesen Dim oIndexType As Integer = _idbdata.GetTypeOfIndex(oAttributeName) _Logger.Debug($"oIndexType [{oIndexType.ToString}]...") _Logger.Debug($"Indexing oIndexType < 8...") oSetVariableOK = _idbdata.SetVariableValue(oAttributeName, oAttributeValue) 'indexierung_erfolgreich = ClassWindream.DateiIndexieren(CURRENT_NEWFILENAME, indexname, idxvalue) If oSetVariableOK = False Then MsgBox("Error in Indexing file - See log", MsgBoxStyle.Critical) Return False Exit For End If Else _Logger.Debug("No Indexing Attributename: " & oAttributeName) _Logger.Debug("is optional? " & oIsOptional.ToString) End If 'Else '_Logger.Debug("Indexvalue is empty or field is not indexed - Indexname: " & oAttributeName) '_Logger.Info("Indexvalue is empty or field is not indexed - Indexname: " & oAttributeName) 'End If Next End If oSetVariableOK = False 'Automatische Indexe Indexieren If My.Application.Globix.CURR_DT_AUTO_INDEXE.Rows.Count > 0 Then Dim Count As Integer = 0 For Each row As DataRow In My.Application.Globix.CURR_DT_AUTO_INDEXE.Rows oSetVariableOK = CBool(row.Item("Indexed")) oAttributeValue = row.Item("IndexValueGUI").ToString oAttributeName = row.Item("INDEXNAME").ToString If oSetVariableOK = True And oAttributeValue <> "" Then If oAttributeValue <> "EMPTY_OI" Then _Logger.Info("Auto Indexname: " & oAttributeName.ToString) _Logger.Info("oAttributeValue: " & oAttributeValue.ToString) Count += 1 ' den Typ des Zielindexes auslesen Dim indexType As Integer = _idbdata.GetTypeOfIndex(oAttributeName) oSetVariableOK = _idbdata.SetVariableValue(oAttributeName, oAttributeValue) If oSetVariableOK = 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 My.Application.Globix.CURRENT_NEWFILENAME.EndsWith(".msg") Then oSetVariableOK = SetEmailIndices() If oSetVariableOK = False Then MsgBox("Error in SetEmailIndices - See log", MsgBoxStyle.Critical) Return False End If ElseIf DropType = "|ATTMNTEXTRACTED|" Or DropType = "|OUTLOOK_ATTACHMENT|" Then oSetVariableOK = SetAttachmentIndices() If oSetVariableOK = 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 Private Function SetAttachmentIndices() Dim indexierung_erfolgreich As Boolean = True Try Dim DT As DataTable = My.Database.GetDatatable("SELECT * FROM TBGI_OBJECTTYPE_EMAIL_INDEX WHERE OBJECTTYPE = 'DEFAULT'") If DT.Rows.Count = 1 Then If Not My.Application.Globix.CURRENT_MESSAGEID Is Nothing Then If My.Application.Globix.CURRENT_MESSAGEID <> "" Then indexierung_erfolgreich = _idbdata.SetVariableValue(DT.Rows(0).Item("IDX_EMAIL_ID").ToString, My.Application.Globix.CURRENT_MESSAGEID) If indexierung_erfolgreich = False Then MsgBox("Error in SetAttachmentIndices MESSAGE-ID - See log", MsgBoxStyle.Critical) Return False End If End If End If 'Das Subject speichern If My.Application.Globix.CURRENT_MESSAGESUBJECT <> "" Then indexierung_erfolgreich = _idbdata.SetVariableValue(DT.Rows(0).Item("IDX_EMAIL_SUBJECT").ToString, My.Application.Globix.CURRENT_MESSAGESUBJECT) If indexierung_erfolgreich = False Then MsgBox("Error in SetAttachmentIndices SUBJECT - See log", MsgBoxStyle.Critical) Return False End If End If 'Das MesageDate speichern If My.Application.Globix.CURRENT_MESSAGEDATE <> "" Then indexierung_erfolgreich = _idbdata.SetVariableValue(DT.Rows(0).Item("IDX_EMAIL_DATE_IN").ToString, My.Application.Globix.CURRENT_MESSAGEDATE) If indexierung_erfolgreich = False Then MsgBox("Error in SetAttachmentIndices DATE - See log", MsgBoxStyle.Critical) Return False End If End If 'Kennzeichnen das es ein Anhang war! indexierung_erfolgreich = _idbdata.SetVariableValue(DT.Rows(0).Item("IDX_CHECK_ATTACHMENT").ToString, True) If indexierung_erfolgreich = False Then MsgBox("Error in SetAttachmentIndices ATTACHMENT Y/N - See log", MsgBoxStyle.Critical) Return False End If Return indexierung_erfolgreich End If Catch ex As Exception _Logger.Error(ex) MsgBox("Error in SetAttachmentIndices:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) 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}" Dim oFilter = $"DOCTYPE_ID = {My.Application.Globix.CURRENT_DOCTYPE_ID}" My.Application.Globix.CURR_DT_AUTO_INDEXE = _DataASorDB.GetDatatable("DD_ECM", oSQL, "VWDDINDEX_AUTOM", oFilter, "") 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) 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) 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 Function SetEmailIndices() Dim indexierung_erfolgreich As Boolean = False Dim _step As String = "1" Try Dim msg As Msg.Message = New Msg.Message(My.Application.Globix.CURRENT_NEWFILENAME) Dim msgDisplayTo = msg.DisplayTo Dim msgInternetAccountName = msg.InternetAccountName _Logger.Debug("") _Logger.Debug("msgInternetAccountName: " & msgInternetAccountName) _Logger.Debug("SenderName: " & msg.SenderName) _Logger.Debug("SenderEmailAddress: " & msg.SenderEmailAddress) _Logger.Debug("ReceivedByName: " & msg.ReceivedByName) _Logger.Debug("ReceivedByEmailAddress: " & msg.ReceivedByEmailAddress) _Logger.Debug("") _step = "2" Dim fromPattern As String = "" Dim toPattern As String = "" Dim messageIDPattern As String = "" Dim finalize_pattern As String = "" ' Email Header auslesen Dim headers As String = ClassEmailHeaderExtractor.getMessageHeaders(msg) For Each rowregex As DataRow In My.Application.Globix.DT_FUNCTION_REGEX.Rows If rowregex.Item("FUNCTION_NAME") = "FROM_EMAIL_HEADER" Then fromPattern = rowregex.Item("REGEX") ElseIf rowregex.Item("FUNCTION_NAME") = "TO_EMAIL_HEADER" Then toPattern = rowregex.Item("REGEX") ElseIf rowregex.Item("FUNCTION_NAME") = "MESSAGE_ID" Then messageIDPattern = rowregex.Item("REGEX") ElseIf rowregex.Item("FUNCTION_NAME") = "FINALIZE" Then finalize_pattern = rowregex.Item("REGEX") End If Next Dim DT As DataTable = My.Database.GetDatatable("SELECT * FROM TBGI_OBJECTTYPE_EMAIL_INDEX WHERE OBJECTTYPE = 'DEFAULT'") If IsNothing(DT) Then _Logger.Info("SELECT * FROM TBGI_OBJECTTYPE_EMAIL_INDEX RESULTED in NOTHING") Return False End If If DT.Rows.Count = 1 Then _step = "3" My.Application.Globix.CURRENT_MESSAGEDATE = "" My.Application.Globix.CURRENT_MESSAGESUBJECT = "" 'Message-ID nur auswerten wenn vorher nicht gestzt wurde! If My.Application.Globix.CURRENT_MESSAGEID = "" Then If Not msg.InternetMessageId Is Nothing Then indexierung_erfolgreich = _idbdata.SetVariableValue(DT.Rows(0).Item("IDX_EMAIL_ID").ToString, msg.InternetMessageId) 'Die aktuelle Message-ID zwischenspeichern My.Application.Globix.CURRENT_MESSAGEID = msg.InternetMessageId If indexierung_erfolgreich = False Then MsgBox("Error in SetEmailIndices-EmailID - See log", MsgBoxStyle.Critical) Return False End If Else If messageIDPattern = String.Empty Then _Logger.Info("A messageID could not be read!") Else If Not IsNothing(headers) Then My.Application.Globix.CURRENT_MESSAGEID = ClassEmailHeaderExtractor.extractFromHeader(headers, messageIDPattern) If IsNothing(My.Application.Globix.CURRENT_MESSAGEID) Then My.Application.Globix.CURRENT_MESSAGEID = "" End If Else _Logger.Info("A messageID could not be read - messageheader nothing/messagIDpattern value!") End If End If End If Else indexierung_erfolgreich = _idbdata.SetVariableValue(DT.Rows(0).Item("IDX_EMAIL_ID").ToStrin, My.Application.Globix.CURRENT_MESSAGEID) If indexierung_erfolgreich = False Then MsgBox("Error in SetEmailIndices-EmailID - See log", MsgBoxStyle.Critical) Return False End If End If _step = "4" ' Regular Expressions vorbereiten If fromPattern <> "" And toPattern <> "" Then _step = "4.1" Dim FromRegexList As New List(Of Regex) Dim ToRegexList As New List(Of Regex) Dim fromRegex As New Regex(fromPattern, RegexOptions.IgnoreCase) Dim toRegex As New Regex(toPattern, RegexOptions.IgnoreCase) FromRegexList.Add(fromRegex) ToRegexList.Add(toRegex) Dim emailFrom Dim emailTo ' Email Absender und Empfänger If headers Is Nothing Then _step = "4.2" If IsNothing(msgDisplayTo) Then _step = "4.3" _Logger.Info("DisplayTo in email is nothing - default will be set") emailTo = "NO RECIPIENT" Else _step = "4.4" emailTo = msgDisplayTo.ToString.Replace("'", "") End If If IsNothing(msgInternetAccountName) Then _step = "4.5" _Logger.Info("InternetAccountName in email is nothing - default will be set") emailFrom = "" Else _step = "4.6" emailFrom = msgInternetAccountName.ToString.Replace("'", "") End If Else _step = "5" _Logger.Info("emailTo and From Extraction via messageheader.") emailFrom = ClassEmailHeaderExtractor.extractFromHeader(headers, fromPattern) 'FromRegexList) emailTo = ClassEmailHeaderExtractor.extractFromHeader(headers, toPattern) ' extractToAddress(headers, ToRegexList) 'Handler für leere emailTo-Adresse If IsNothing(emailTo) Then _step = "5.1" _Logger.Info("emailTo couldn't be extracted from messageheader...") If (headers.Contains("exc") Or headers.Contains("exchange")) Then _step = "5.2" _Logger.Info("...try with LDAP-option") Dim _email = GetUserEmailfromLDAP(msgDisplayTo) _step = "5.3" If _email <> "" Then emailTo = _email Else _Logger.Info(">> email-adress couldn't be read from LDAP with name '" & msgDisplayTo & "'") MsgBox("Could't get 'emailto' from messageHeader and later on with LDAP-Option." & vbNewLine & "Please check the dropped email and Configuration of Email-Indexing!", MsgBoxStyle.Exclamation) Return False End If Else _step = "5.4" CURR_MISSING_PATTERN_NAME = "Email To" CURR_MISSING_SEARCH_STRING = headers CURR_MISSING_MANUAL_VALUE = String.Empty frmGlobixMissingInput.ShowDialog() _step = "5.4.1" If CURR_MISSING_MANUAL_VALUE <> String.Empty Then _step = "5.4.2" emailTo = CURR_MISSING_MANUAL_VALUE Else _step = "5.4.3" _Logger.Info("no exchange patterns found in headers!") MsgBox("Could't get 'emailto' from messageHeader and exhange-Patterns weren't found." & vbNewLine & "Please check the dropped email and Configuration of Email-Indexing!", MsgBoxStyle.Exclamation) Return False End If End If End If _step = "6" emailTo = ClassEmailHeaderExtractor.extractFromHeader(emailTo, finalize_pattern) emailFrom = ClassEmailHeaderExtractor.extractFromHeader(emailFrom, finalize_pattern) _step = "6.1" If Not IsNothing(emailFrom) Then emailFrom = emailFrom.Replace("<", "") emailFrom = emailFrom.Replace(">", "") Else _step = "6.1.x" _Logger.Info("emailFrom is Nothing?!") End If If Not IsNothing(emailTo) Then _step = "6.1.1 " & emailTo.ToString emailTo = emailTo.Replace("<", "") emailTo = emailTo.Replace(">", "") _step = "6.2" Dim _duplicatesCheck As List(Of String) = New List(Of String) _duplicatesCheck = emailTo.ToString.Split(";").ToList ' Filter distinct elements, and convert back into list. Dim result As List(Of String) = _duplicatesCheck.Distinct().ToList ' Display result. Dim i As Integer = 0 For Each element As String In result If i = 0 Then emailTo = element Else emailTo = emailTo & ";" & element End If i += 1 Next Else _step = "6.3" _Logger.Info("emailTo is Nothing?!") End If _Logger.Info("Headers-Content: ") _Logger.Info(headers.ToString) End If 'Handler für leere emailFrom-Adresse If IsNothing(emailFrom) Then _step = "7" _Logger.Info("emailFrom couldn't be extracted from messageheader...") If Not IsNothing(msg.SenderEmailAddress) Then If msg.SenderEmailAddress <> String.Empty Then _step = "7.1" _Logger.Info("emailFrom via msg.SenderEmailAddress will be used instead!") emailFrom = msg.SenderEmailAddress.ToString.Replace("'", "") End If End If End If If IsNothing(emailFrom) Or emailFrom = String.Empty Then _step = "7.2" CURR_MISSING_PATTERN_NAME = "Email From" CURR_MISSING_SEARCH_STRING = emailFrom CURR_MISSING_MANUAL_VALUE = String.Empty frmGlobixMissingInput.ShowDialog() If CURR_MISSING_MANUAL_VALUE <> String.Empty Then _step = "7.3" emailFrom = CURR_MISSING_MANUAL_VALUE Else MsgBox("Could't get 'emailfrom' from messageHeader." & vbNewLine & "Please check the dropped email and Configuration of Email-Indexing!", MsgBoxStyle.Exclamation) Return False End If End If _Logger.Info("emailFrom: " & emailFrom) _Logger.Info("emailTo: " & emailTo) 'FROM If Not IsNothing(emailFrom) Then indexierung_erfolgreich = _idbdata.SetVariableValue(DT.Rows(0).Item("IDX_EMAIL_FROM").ToString, emailFrom) If indexierung_erfolgreich = False Then MsgBox("Error in SetEmailIndices [emailFrom] - See log", MsgBoxStyle.Critical) Return False End If Else _Logger.Info("emailFrom is still Nothing?!") _step = "7.4" End If 'TO If Not IsNothing(emailTo) Then indexierung_erfolgreich = _idbdata.SetVariableValue(DT.Rows(0).Item("IDX_EMAIL_TO").ToString, emailTo) If indexierung_erfolgreich = False Then MsgBox("Error in SetEmailIndices [emailTo] - See log", MsgBoxStyle.Critical) Return False End If Else _Logger.Info("emailTo is still Nothing?!") _step = "7.5" End If ' Dim subj As String = ClassFormFunctions.CleanInput(msg.Subject) Dim subj As String = msg.Subject If IsNothing(subj) Or subj = "" Then _Logger.Info("msg subject is empty...DEFAULT will be set") subj = "No subject" MsgBox("Attention: Email was send without a subject - Default value 'No subject' will be used!", MsgBoxStyle.Exclamation) Else subj = encode_utf8(msg.Subject) If IsNothing(subj) Then subj = msg.Subject End If End If _Logger.Info("Now all email-items will be indexed!") _Logger.Info("subj: " & subj) indexierung_erfolgreich = _idbdata.SetVariableValue(DT.Rows(0).Item("IDX_EMAIL_SUBJECT").ToString, subj) My.Application.Globix.CURRENT_MESSAGESUBJECT = subj If indexierung_erfolgreich = False Then MsgBox("Error in SetEmailIndices [Subject] - See log", MsgBoxStyle.Critical) Return False End If _Logger.Info("MessageDeliveryTime: " & msg.MessageDeliveryTime) indexierung_erfolgreich = _idbdata.SetVariableValue(DT.Rows(0).Item("IDX_EMAIL_DATE_IN").ToString, msg.MessageDeliveryTime) My.Application.Globix.CURRENT_MESSAGEDATE = msg.MessageDeliveryTime If indexierung_erfolgreich = False Then MsgBox("Error in SetEmailIndices [Datein] - See log", MsgBoxStyle.Critical) Return False End If Else indexierung_erfolgreich = False End If Return indexierung_erfolgreich End If Catch ex As Exception MsgBox("Error in SetEmailIndices:" & vbNewLine & ex.Message & vbNewLine & "Please check the configuration Email-Indexing!", MsgBoxStyle.Critical) _Logger.Warn("Error in SetEmailIndices (Step finisched: " & _step & "): " & ex.Message) _Logger.Error(ex) Return False End Try End Function Public Function GetUserEmailfromLDAP(ByVal userName As String) As String Dim domainName As String = Environment.UserDomainName '"PutYourDomainNameHere" '< Change this value to your actual domain name. For example: "yahoo" Dim dommain As String = "com" '> Unexpected Error in GetUserEmail from LDAP: " & ex.Message) _Logger.Error(ex) End Try End Using Return userEmail End Function Private Sub PictureEdit1_EditValueChanged(sender As Object, e As EventArgs) Handles PictureEdit1.EditValueChanged End Sub End Class