2415 lines
126 KiB
VB.net
2415 lines
126 KiB
VB.net
Option Explicit On
|
|
|
|
Imports System.DirectoryServices
|
|
Imports System.IO
|
|
Imports System.Security.AccessControl
|
|
Imports System.Security.Principal
|
|
Imports System.Text.RegularExpressions
|
|
Imports DigitalData.GUIs.GlobalIndexer
|
|
Imports DigitalData.Modules.Logging
|
|
Imports DigitalData.Modules.Language.Utils
|
|
Imports DigitalData.Controls.LookupGrid
|
|
Imports Independentsoft
|
|
Imports DevExpress.XtraEditors.Controls
|
|
|
|
Public Class frmGlobix_Index
|
|
#Region "+++++ Variablen ++++++"
|
|
Public vPathFile As String
|
|
Private MULTIFILES As Integer
|
|
Private akttxtbox As TextBox
|
|
Dim DT_VWGI_DOCTYPE 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
|
|
Private _Patterns As GlobixPatterns
|
|
Private _Controls As DigitalData.GUIs.GlobalIndexer.ControlCreator
|
|
Private _FileEx As DigitalData.Modules.Filesystem.File
|
|
|
|
Public Class DocType
|
|
Public Property Guid
|
|
Public Property Name
|
|
|
|
Public Overrides Function ToString() As String
|
|
Return Name
|
|
End Function
|
|
End Class
|
|
Public Class ControlMeta
|
|
Public Property IndexName As String
|
|
Public Property IndexType As String
|
|
Public Property MultipleValues As Boolean = False
|
|
End Class
|
|
#End Region
|
|
Public Sub New(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)
|
|
_Patterns = New GlobixPatterns(LogConfig)
|
|
_FileEx = New Modules.Filesystem.File(LogConfig)
|
|
|
|
Localizer.Active = New LookupGridLocalizer()
|
|
End Sub
|
|
|
|
Private Sub frmGlobix_Index_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
|
Me.ColorizeInactiveIcon = False
|
|
|
|
' Abbruchzähler zurücksetzen
|
|
CancelAttempts = 0
|
|
|
|
My.Application.Globix.INDEXING_ACTIVE = True
|
|
|
|
Try
|
|
My.Application.Globix.CURRENT_ISATTACHMENT = False
|
|
DropType = My.DatabaseECM.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.DatabaseECM.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
|
|
chkMultiindexing.Caption = "Alle nachfolgenden Dateien (" & MULTIFILES & ") identisch indexieren"
|
|
Else
|
|
chkMultiindexing.Caption = "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 SkipItem_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles SkipItem.ItemClick
|
|
My.DatabaseECM.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
|
|
Dim oFoundDocType = ComboBoxEdit1.Properties.Items.
|
|
Cast(Of DocType)().
|
|
Where(Function(dt) dt.Name = My.Application.Globix.CURRENT_LASTDOCTYPE).
|
|
FirstOrDefault()
|
|
If oFoundDocType IsNot Nothing Then
|
|
ComboBoxEdit1.SelectedItem = oFoundDocType
|
|
End If
|
|
|
|
|
|
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)
|
|
Dim oFoundDocType = ComboBoxEdit1.Properties.Items.
|
|
Cast(Of DocType)().
|
|
Where(Function(dt) dt.Name = My.Application.Globix.CURRENT_LASTDOCTYPE).
|
|
FirstOrDefault()
|
|
|
|
If oFoundDocType IsNot Nothing Then
|
|
ComboBoxEdit1.SelectedItem = oFoundDocType
|
|
End If
|
|
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 = '{My.Application.User.UserName}'"
|
|
DT_VWGI_DOCTYPE = _DataASorDB.GetDatatable("DD_ECM", oSql, "VWGI_DOCTYPE", oFilter, "SEQUENCE")
|
|
|
|
For Each oRow As DataRow In DT_VWGI_DOCTYPE.Rows
|
|
ComboBoxEdit1.Properties.Items.Add(New DocType With {
|
|
.Guid = oRow.Item("DOCTYPE_ID"),
|
|
.Name = oRow.Item("DOCTYPE")
|
|
})
|
|
Next
|
|
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 ComboBoxEdit1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBoxEdit1.SelectedIndexChanged
|
|
If ComboBoxEdit1.SelectedIndex <> -1 And FormLoaded = True Then
|
|
Dim oSelectedItem As DocType = ComboBoxEdit1.SelectedItem
|
|
|
|
My.Application.Globix.CURRENT_DOCTYPE_ID = oSelectedItem.Guid
|
|
|
|
'lblhinweis.Visible = False
|
|
ClearNotice()
|
|
|
|
'lblerror.Visible = False
|
|
ClearError()
|
|
|
|
pnlIndex.Controls.Clear()
|
|
Dim oSql As String = "Select * from TBDD_DOKUMENTART WHERE GUID = " & oSelectedItem.Guid
|
|
Dim oFilter = "GUID = " & oSelectedItem.Guid
|
|
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(My.Application.Globix.CURRENT_DOCTYPE_ID)
|
|
|
|
|
|
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(pIndexName As String, hinweis As String, ylbl As Integer, anz As String)
|
|
Dim lbl As New Label With {
|
|
.Name = "lbl" & pIndexName,
|
|
.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 oScreen As New DigitalData.Modules.Windows.Screen()
|
|
Dim oDpiScale = oScreen.GetScreenScaling(Me)
|
|
|
|
Dim oControlCount As Integer = 1
|
|
Dim oLabelPosition As Integer = 11 * oDpiScale
|
|
Dim oControlPosition As Integer = 33 * oDpiScale
|
|
|
|
Dim oControls As New DigitalData.GUIs.GlobalIndexer.ControlCreator(_LogConfig, pnlIndex, Me) With {
|
|
.OnControlChanged = AddressOf PrepareDependingControl,
|
|
.OnLookupData = AddressOf GetLookupData
|
|
}
|
|
|
|
_Logger.Info("Loading Indicies for Screen Scaling Factor [{0}]", oDpiScale)
|
|
|
|
_Controls = oControls
|
|
If DT_INDEXEMAN.Rows.Count = 0 Then
|
|
ShowError("Keine Manuellen Indizes für die " & vbNewLine & "Dokumentart " & ComboBoxEdit1.Text & " definiert")
|
|
_Logger.Info(" - Keine Manuellen Indizes für die " & vbNewLine & "Dokumentart " & ComboBoxEdit1.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.AddLookupControl(oControlName, oControlPosition, MultiSelect, oDataType, oRow.Item("SQL_RESULT"), oConnectionId, oDefaultValue, AddNewItems, PreventDuplicates)
|
|
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.AddLookupControl(oControlName, oControlPosition, MultiSelect, oDataType, oRow.Item("SQL_RESULT"), oConnectionId, oDefaultValue, AddNewItems, PreventDuplicates)
|
|
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)
|
|
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 * oDpiScale
|
|
oControlPosition += 50 * oDpiScale
|
|
'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
|
|
Private Sub PrepareDependingControl(pControl As Control)
|
|
If TypeOf pControl Is Label Then
|
|
Exit Sub
|
|
End If
|
|
|
|
Try
|
|
Dim oMeta = DirectCast(pControl.Tag, ControlMeta)
|
|
Dim oIndexName As String = oMeta.IndexName
|
|
Dim oSQL = $"SELECT * FROM TBDD_INDEX_MAN WHERE SQL_RESULT LIKE '%{oIndexName}%' AND DOK_ID = {My.Application.Globix.CURRENT_DOCTYPE_ID}"
|
|
Dim oDatatable As DataTable = My.DatabaseECM.GetDatatable(oSQL)
|
|
|
|
If Not IsNothing(oDatatable) Then
|
|
_Logger.Debug("Found [{0}] depending controls for [{1}]", oDatatable.Rows.Count, pControl.Name)
|
|
|
|
For Each oRow As DataRow In oDatatable.Rows
|
|
Dim oControlName As String = NotNull(oRow.Item("NAME"), "")
|
|
Dim oConnectionId As Integer = NotNull(oRow.Item("CONNECTION_ID"), -1)
|
|
Dim oControlSql As String = NotNull(oRow.Item("SQL_RESULT"), "")
|
|
|
|
If oConnectionId = -1 Or oControlSql = String.Empty Then
|
|
_Logger.Warn("Missing SQL Query or ConnectionId for Control [{0}]! Continuing.", oControlName)
|
|
Continue For
|
|
End If
|
|
|
|
oControlSql = _Patterns.ReplaceUserValues(oControlSql, My.Application.Globix.CURRENT_DOCTYPE_ID)
|
|
oControlSql = _Patterns.ReplaceInternalValues(oControlSql)
|
|
oControlSql = _Patterns.ReplaceControlValues(oControlSql, pnlIndex)
|
|
_Logger.Debug("Setting new value for [{0}]", oControlName)
|
|
SetDependingControlResult(oControlName, oControlSql, oConnectionId)
|
|
Next
|
|
End If
|
|
Catch ex As Exception
|
|
_Logger.Error(ex)
|
|
End Try
|
|
End Sub
|
|
Private Sub SetDependingControlResult(IndexName As String, pSqlCommand As String, SqlConnectionId As Integer)
|
|
Try
|
|
If pSqlCommand Is Nothing OrElse pSqlCommand = String.Empty Then
|
|
_Logger.Warn("New Value for Index [{0}] could not be set. Supplied SQL is empty.")
|
|
Exit Sub
|
|
End If
|
|
|
|
Dim oConnectionString = GetConnectionString(SqlConnectionId)
|
|
|
|
|
|
Dim oDatatable As DataTable = My.DatabaseECM.GetDatatableWithConnection(pSqlCommand, oConnectionString)
|
|
Dim oFoundControl As Control = Nothing
|
|
|
|
For Each oControl As Control In pnlIndex.Controls
|
|
If TypeOf oControl Is Label Then
|
|
Continue For
|
|
End If
|
|
|
|
Dim oMeta = DirectCast(oControl.Tag, ControlMeta)
|
|
Dim oIndex As String = oMeta.IndexName
|
|
|
|
If oIndex = IndexName Then
|
|
oFoundControl = oControl
|
|
Exit For
|
|
End If
|
|
Next
|
|
|
|
If oFoundControl Is Nothing Then
|
|
_Logger.Warn("Depending Control for Index [{0}] not found!", IndexName)
|
|
End If
|
|
|
|
If oDatatable Is Nothing Then
|
|
_Logger.Warn("Error in SQL Command: {0}", pSqlCommand)
|
|
End If
|
|
|
|
Select Case oFoundControl.GetType.Name
|
|
Case GetType(DevExpress.XtraEditors.TextEdit).Name
|
|
If oDatatable.Rows.Count > 0 Then
|
|
Dim oFirstRow As DataRow = oDatatable.Rows.Item(0)
|
|
|
|
If oFirstRow.ItemArray.Length > 0 Then
|
|
Dim oValue = oFirstRow.Item(0).ToString()
|
|
|
|
_Logger.Debug("Setting Value for TextEdit [{0}]: [{1}]", oFoundControl.Name, oValue)
|
|
DirectCast(oFoundControl, DevExpress.XtraEditors.TextEdit).Text = oValue
|
|
End If
|
|
End If
|
|
Case GetType(LookupControl3).Name
|
|
_Logger.Debug("Setting Value for LookupControl [{0}]: [{1}]", oFoundControl.Name, "DATATABLE")
|
|
DirectCast(oFoundControl, LookupControl3).Properties.DataSource = oDatatable
|
|
Case GetType(ComboBox).Name
|
|
_Logger.Debug("Setting Value for Combobox [{0}]: [{1}]", oFoundControl.Name, "DATATABLE")
|
|
DirectCast(oFoundControl, ComboBox).DataSource = oDatatable
|
|
Case Else
|
|
_Logger.Debug("Could not set depending control result for [{0}]", oFoundControl.GetType.Name)
|
|
End Select
|
|
Catch ex As Exception
|
|
_Logger.Error(ex)
|
|
End Try
|
|
End Sub
|
|
Private Function GetLookupData(pLookup As LookupControl3, pSQLCommand As String, pConnectionId As Integer)
|
|
Dim oConnectionString = GetConnectionString(pConnectionId)
|
|
|
|
If oConnectionString IsNot Nothing And pSQLCommand.Length > 0 Then
|
|
_Logger.Debug("Connection String (redacted): [{0}]", oConnectionString.Substring(0, 30))
|
|
|
|
If _Patterns.HasComplexPatterns(pSQLCommand) Then
|
|
_Logger.Debug(" >>sql enthält Platzhalter und wird erst während der Laufzeit gefüllt!", False)
|
|
Return Nothing
|
|
Else
|
|
pSQLCommand = _Patterns.ReplaceInternalValues(pSQLCommand)
|
|
pSQLCommand = _Patterns.ReplaceUserValues(pSQLCommand, My.Application.Globix.CURRENT_DOCTYPE_ID)
|
|
|
|
Dim oDatatable = My.DatabaseECM.GetDatatableWithConnection(pSQLCommand, oConnectionString)
|
|
Return oDatatable
|
|
End If
|
|
Else
|
|
_Logger.Warn("Connection String for control [{0}] is empty!", pLookup.Name)
|
|
Return Nothing
|
|
End If
|
|
End Function
|
|
Function GetPlaceholderValue(InputValue As String, FileName As String, 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.DatabaseECM.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.DatabaseECM.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.DatabaseECM.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
|
|
Dim oDokart As DocType = ComboBoxEdit1.SelectedItem
|
|
My.Application.Globix.CURRENT_DOCTYPE_ID = oDokart.Guid
|
|
|
|
If CheckWrite_IndexeMan(oDokart.Guid) = True Then
|
|
'##### Manuelle Indexe indexiert #####
|
|
_Logger.Info("Datei [" & My.Application.Globix.CURRENT_WORKFILE & "] wird nun indexiert...")
|
|
If FillIndexe_Autom(oDokart.Guid) = 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 = oDokart.Name
|
|
_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.DatabaseECM.ExecuteNonQuery(oDEL)
|
|
|
|
If My.Application.Globix.CURR_DELETE_ORIGIN = True Then
|
|
_Logger.Info("Datei [" & My.Application.Globix.CURRENT_WORKFILE & "] wird gelöscht.")
|
|
Try
|
|
System.IO.File.Delete(My.Application.Globix.CURRENT_WORKFILE)
|
|
Catch ex As Exception
|
|
_Logger.Error(ex)
|
|
End Try
|
|
_Logger.Info("Datei [" & My.Application.Globix.CURRENT_WORKFILE & "] wurde gelöscht.")
|
|
End If
|
|
|
|
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.DatabaseECM.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.DatabaseECM.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.DatabaseECM.ExecuteNonQuery(sqlUpdate)
|
|
Else
|
|
sqlUpdate = "Update TBGI_HISTORY SET ATTACHMENT = 0, MSG_ID = '" & My.Application.Globix.CURRENT_MESSAGEID & "' WHERE GUID = " & GUID
|
|
My.DatabaseECM.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
|
|
|
|
MsgBox(NI_MESSAGE, MsgBoxStyle.Critical, NI_TITLE)
|
|
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
|
|
Else
|
|
Return False
|
|
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
|
|
My.Application.Globix.CURRENT_NEWFILENAME = _FileEx.GetVersionedFilename(_NewFilename)
|
|
|
|
Dim opath = Path.GetDirectoryName(My.Application.Globix.CURRENT_NEWFILENAME)
|
|
If Directory.Exists(opath) = False Then
|
|
Directory.CreateDirectory(opath)
|
|
End If
|
|
|
|
'Die Datei wird nun an den neuen Ort kopiert
|
|
My.Computer.FileSystem.MoveFile(My.Application.Globix.CURRENT_WORKFILE, My.Application.Globix.CURRENT_NEWFILENAME)
|
|
|
|
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.DatabaseECM.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.DatabaseECM.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.DatabaseECM.GetScalarValue(oSql)
|
|
Else
|
|
oSql = "Update TBGI_HISTORY SET ATTACHMENT = 0, MSG_ID = '" & My.Application.Globix.CURRENT_MESSAGEID & "' WHERE GUID = " & oGUID
|
|
My.DatabaseECM.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, LookupControl3)
|
|
Dim values As List(Of String) = oLookup.Properties.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.DatabaseECM.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.DatabaseECM.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.DatabaseECM.GetScalarValueWithConnection(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.DatabaseECM.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.DatabaseECM.GetScalarValueWithConnection(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 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.DatabaseECM.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" '<change this value to your actual domain region. For example: "com" as in "yahoo.com"
|
|
|
|
Dim path As String = String.Format("LDAP://CN=User,DC={0}", domainName)
|
|
Dim userEmail As String = String.Empty
|
|
|
|
Using search As DirectorySearcher = New DirectorySearcher(path)
|
|
Dim result As SearchResult
|
|
Try
|
|
search.Filter = "(SAMAccountName=" & userName & ")"
|
|
search.PropertiesToLoad.Add("mail")
|
|
result = search.FindOne()
|
|
Catch ex As Exception
|
|
_Logger.Error(ex)
|
|
search.Filter = ""
|
|
search.Filter = "(GivenName=" & userName & ")"
|
|
search.PropertiesToLoad.Add("mail")
|
|
End Try
|
|
|
|
Try
|
|
result = search.FindOne()
|
|
If result IsNot Nothing Then userEmail = result.Properties("mail").ToString
|
|
Catch ex As Exception
|
|
_Logger.Info(">> 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)
|
|
|
|
End Sub
|
|
|
|
Private Sub btnAblageFlow_Click(sender As Object, e As EventArgs) Handles btnAblageFlow.Click
|
|
GlobixFlow()
|
|
End Sub
|
|
End Class
|