From 9e27a8e8ebc7c98b858ad5ab509d0054c6561f5d Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Mon, 25 May 2020 12:01:40 +0200 Subject: [PATCH] add missing validation for datetime picker, generalize validation massages, fix file deletion check --- Global_Indexer/frmIndex.vb | 208 ++++++------------------------------- 1 file changed, 29 insertions(+), 179 deletions(-) diff --git a/Global_Indexer/frmIndex.vb b/Global_Indexer/frmIndex.vb index 066e6c0..24c7d57 100644 --- a/Global_Indexer/frmIndex.vb +++ b/Global_Indexer/frmIndex.vb @@ -32,6 +32,8 @@ Public Class frmIndex Private Property ViewerString As String + Private Const TEXT_MISSING_INPUT = "Bitte vervollständigen Sie die Eingaben!" + #End Region Public Sub DisposeViewer() @@ -285,7 +287,7 @@ Public Class frmIndex If box.Text = "" Then Dim optional_index As Boolean = ClassDatabase.Execute_Scalar("SELECT OPTIONAL FROM TBDD_INDEX_MAN WHERE DOK_ID = " & dokartid & " AND NAME = '" & Replace(box.Name, "txt", "") & "'", MyConnectionString, True) If optional_index = False Then - MsgBox("Bitte geben Sie einen Indexwert ein!", MsgBoxStyle.Exclamation, "Fehlende Eingabe:") + MsgBox(TEXT_MISSING_INPUT, MsgBoxStyle.Exclamation, "Fehlende Eingabe:") box.Focus() Return False Else @@ -313,7 +315,7 @@ Public Class frmIndex Dim optional_index As Boolean = ClassDatabase.Execute_Scalar("SELECT OPTIONAL FROM TBDD_INDEX_MAN WHERE DOK_ID = " & dokartid & " AND NAME = '" & Replace(oLookup.Name, "cmbMulti", "") & "'", MyConnectionString, True) If optional_index = False Then - MsgBox("Bitte wählen Sie einen Wert aus der Combobox.", MsgBoxStyle.Exclamation) + MsgBox(TEXT_MISSING_INPUT, MsgBoxStyle.Exclamation, Text) oLookup.Focus() Return False Else @@ -332,7 +334,7 @@ Public Class frmIndex Dim optional_index As Boolean = ClassDatabase.Execute_Scalar("SELECT OPTIONAL FROM TBDD_INDEX_MAN WHERE DOK_ID = " & dokartid & " AND NAME = '" & Replace(cmbSingle.Name, "cmbSingle", "") & "'", MyConnectionString, True) If optional_index = False Then - MsgBox("Bitte wählen Sie einen Wert aus der Combobox.", MsgBoxStyle.Exclamation) + MsgBox(TEXT_MISSING_INPUT, MsgBoxStyle.Exclamation, Text) cmbSingle.Focus() Return False Else @@ -348,7 +350,7 @@ Public Class frmIndex If cmb.Text = "" Then Dim optional_index As Boolean = ClassDatabase.Execute_Scalar("SELECT OPTIONAL FROM TBDD_INDEX_MAN WHERE DOK_ID = " & dokartid & " AND NAME = '" & Replace(cmb.Name, "cmb", "") & "'", MyConnectionString, True) If optional_index = False Then - MsgBox("Bitte wählen Sie einen Wert aus der Combobox.", MsgBoxStyle.Exclamation) + MsgBox(TEXT_MISSING_INPUT, MsgBoxStyle.Exclamation, Text) cmb.Focus() Return False Else @@ -362,8 +364,23 @@ Public Class frmIndex End If If oControl.Name.StartsWith("dtp") Then Dim dtp As DevExpress.XtraEditors.DateEdit = oControl - Indexwert_Postprocessing(Replace(dtp.Name, "dtp", ""), dtp.Text) - result = True + Dim oIndexName As String = Replace(dtp.Name, "dtp", "") + + If dtp.Text = String.Empty Then + Dim optional_index As Boolean = ClassDatabase.Execute_Scalar($"SELECT OPTIONAL FROM TBDD_INDEX_MAN WHERE DOK_ID = {dokartid} AND NAME = '{oIndexName}'", MyConnectionString, True) + + 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 @@ -1190,7 +1207,7 @@ Public Class frmIndex End Function - Private Function SINGLEFILE_2_WINDREAM(_Objekttyp As String) + Private Function SINGLEFILE_2_WINDREAM(_Objekttyp As String) As Boolean Try CURR_DOKART_OBJECTTYPE = _Objekttyp Dim oWMCheckPath = WINDREAM.VersionWMFilename(CURRENT_NEWFILENAME, System.IO.Path.GetExtension(CURRENT_NEWFILENAME)) @@ -1198,9 +1215,11 @@ Public Class frmIndex LOGGER.Info($"Target [{CURRENT_NEWFILENAME}] already existed!! - NewWMFilename [{oWMCheckPath}]") CURRENT_NEWFILENAME = oWMCheckPath End If - Dim streamresult = WINDREAM.NewFileStream(CURRENT_WORKFILE, CURRENT_NEWFILENAME) - If File.Exists(CURRENT_NEWFILENAME) And streamresult = True Then + Dim oStreamSuccessful = WINDREAM.NewFileStream(CURRENT_WORKFILE, CURRENT_NEWFILENAME) + Dim oAbsFilename = $"\\windream\objects{CURRENT_NEWFILENAME}" + + If File.Exists(oAbsFilename) And oStreamSuccessful Then If CONFIG.Config.DeleteOriginalFile = True Then Try My.Computer.FileSystem.DeleteFile(CURRENT_WORKFILE) @@ -1210,7 +1229,7 @@ Public Class frmIndex End If End If - Return streamresult + Return oStreamSuccessful Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical, "Error in SINGLEFILE_2_WINDREAM:") Return False @@ -1864,10 +1883,6 @@ Public Class frmIndex oAutoIndexRow.Item("Indexwert") = oResult End If - - - - Next Return True @@ -1875,167 +1890,6 @@ Public Class frmIndex MsgBox(ex.Message) Return False End Try - - - ' 3. Schritt: SQL ausführen - ' 4. Schritt: Resultat in Datatable schreiben - - - - 'Try - ' Me.VWINDEX_AUTOMTableAdapter.Fill(Me.MyDataset.VWDDINDEX_AUTOM, CURRENT_DOKART_ID) - ' Dim DT_INDEXAUTOM As DataTable = MyDataset.VWDDINDEX_AUTOM - ' If DT_INDEXAUTOM.Rows.Count > 0 Then - ' ' MsgBox(DT.Rows.Count.ToString) - ' For Each DR_AUTOINDEX As DataRow In DT_INDEXAUTOM.Rows - ' Dim optionalIndex As Boolean - ' Dim indexname As String = DR_AUTOINDEX.Item("INDEXNAME") - ' LOGGER.Info("Build Automatischer Index '" & indexname & "'") - ' If DR_AUTOINDEX.Item("SQL_RESULT").ToString <> String.Empty And CBool(DR_AUTOINDEX.Item("SQL_ACTIVE")) = True Then - ' ' Regulären Ausdruck zum Auslesen der windream-Indexe definieren - ' Dim preg As String = "\[%{1}[a-zA-Z0-9\!\$\&\/\(\)\=\?\,\.\-\;\:_öÖüÜäÄ\#\'\+\*\~\{\}\@\€\<\>\ ]+]{1}" - ' ' SQL-String für aktuellen INdex laden - ' Dim SqlString As String = DR_AUTOINDEX.Item("SQL_RESULT") - ' ' 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 elemente As System.Text.RegularExpressions.MatchCollection = regulärerAusdruck.Matches(SqlString) - ' ' alle Vorkommen der Indexe im SQL-String durchlaufen - ' For Each element As System.Text.RegularExpressions.Match In elemente - - ' ' MsgBox(element.Value.ToUpper) - ' LOGGER.Info("Element: '" & element.Value & "'") - ' '' wenn es sich nicht um dedizeirte Werte handelt (es sollen ja nur die Indexe ausgelesen werden) - ' 'If Not element.Value.ToUpper = "[%SPALTE]" And Not element.Value.ToUpper = "[%VIEW]" Then - ' 'die Zeichen [% und ] entfernen (liefert den wirklichen windream-Index) - ' Dim elementOhneSonderzeichen As String = element.Value.Substring(2, element.Value.Length - 3) - ' LOGGER.Info("elementOhneSonderzeichen: '" & elementOhneSonderzeichen & "'") - ' optionalIndex = ClassDatabase.Execute_Scalar("SELECT OPTIONAL FROM TBDD_INDEX_MAN WHERE DOK_ID = " & CURRENT_DOKART_ID & " AND UPPER(NAME) = UPPER('" & elementOhneSonderzeichen & "')", MyConnectionString, True) - ' If elementOhneSonderzeichen.StartsWith("$") Then 'windowsParameter - ' Dim result = "" - ' Try - ' Select Case elementOhneSonderzeichen.ToString.ToUpper - ' Case "$filename_ext".ToUpper - ' result = Path.GetFileName(CURRENT_WORKFILE) - ' Case "$filename".ToUpper - ' result = Path.GetFileNameWithoutExtension(CURRENT_WORKFILE) - ' Case "$extension".ToUpper - ' result = Path.GetExtension(CURRENT_WORKFILE) - ' result = result.Replace(".", "") - ' Case "$FileCreateDate".ToUpper - ' Dim FI As New FileInfo(CURRENT_WORKFILE) - ' Dim CreationDate As Date = FI.CreationTime - ' result = CreationDate.ToShortDateString - ' Case "$FileCreatedWho".ToUpper - ' Dim fs As FileSecurity = File.GetAccessControl(CURRENT_WORKFILE) - ' Dim sid As IdentityReference = fs.GetOwner(GetType(SecurityIdentifier)) - ' Dim ntaccount As IdentityReference = sid.Translate(GetType(NTAccount)) - ' Dim owner As String = ntaccount.ToString() - ' result = owner - ' Case "$DateDDMMYYY".ToUpper - ' result = System.DateTime.Now.ToShortDateString - ' Case "$Username" - ' result = Environment.UserName - ' Case "$Usercode" - ' result = USER_SHORT_NAME - ' End Select - ' Catch ex As Exception - ' result = "XXX" - ' LOGGER.Info(" - Unexpected error in FillIndexe_Autom - WindowsFilePatterns - Fehler: " & vbNewLine & ex.Message) - ' MsgBox("Unexpected error in Replacement WindowsFilePatterns: " & vbNewLine & ex.Message & vbNewLine & vbNewLine & "Routine will continue - Please check logfile", MsgBoxStyle.Exclamation, ) - ' End Try - ' If result <> "" Then - ' LOGGER.Info("file-related parameter found: '" & elementOhneSonderzeichen & "' - Result: '" & result & "'") - ' SqlString = SqlString.Replace(element.Value, result) - ' Else - ' LOGGER.Info(">> Attention: file-related parameter '" & elementOhneSonderzeichen & "' returned an empty string!") - ' End If - ' Else 'ganz normaler manueller Index - ' 'den Platzhalter im SQL-String durch den Wert ersetzen - ' Dim manIndexwert = GetManIndex_Value(elementOhneSonderzeichen, "IDX_AUTO", optionalIndex) - ' If Not IsNothing(manIndexwert) Then - ' SqlString = SqlString.Replace(element.Value, manIndexwert) - ' Else - ' LOGGER.Info(">> Attention: manIndexwert is NOTHING - Funktion: FillIndexe_Autom") - ' ' Return False - ' End If - ' End If - - ' Next - ' LOGGER.Info("Replaced and complete SQL-result: " & SqlString) - ' LOGGER.Info("Ausführen SQL....") - ' Dim automatischerValue As String = "" - ' automatischerValue = GetAutomaticIndexSQLValue(SqlString, DR_AUTOINDEX.Item("CONNECTION_ID"), DR_AUTOINDEX.Item("SQL_PROVIDER")) - ' LOGGER.Info("Ergebnis SQL: '" & automatischerValue & "'") - ' If automatischerValue <> String.Empty Then - ' DR_AUTOINDEX.Item("Indexiert") = True - ' DR_AUTOINDEX.Item("Indexwert") = automatischerValue - ' Else - ' If optionalIndex = True Then - ' DR_AUTOINDEX.Item("Indexiert") = True - ' DR_AUTOINDEX.Item("Indexwert") = "EMPTY_OI" - ' ' Return True - ' Else - ' LOGGER.Info(" - ACHTUNG: automatischerValue = String.Empty - Funktion: FillIndexe_Autom") - ' LOGGER.Info(" - SqlString: " & SqlString) - ' ' Return False - ' End If - - ' End If - ' Else - ' If Not IsDBNull(DR_AUTOINDEX.Item("VALUE")) Then - ' If DR_AUTOINDEX.Item("VALUE") <> "" Then - ' Dim DEFAULTVALUE As String = DR_AUTOINDEX.Item("VALUE") - ' 'Indexierung mit WindowsVariable - ' If DEFAULTVALUE.StartsWith("$") Then - ' LOGGER.Info("Indexierung mit einer Windowsvariable: '" & DEFAULTVALUE & "'") - ' Select Case DEFAULTVALUE.ToUpper - ' Case "$filename_ext".ToUpper - ' DEFAULTVALUE = Path.GetFileName(CURRENT_WORKFILE) - ' Case "$filename".ToUpper - ' DEFAULTVALUE = Path.GetFileNameWithoutExtension(CURRENT_WORKFILE) - ' Case "$extension".ToUpper - ' DEFAULTVALUE = Path.GetExtension(CURRENT_WORKFILE) - ' Case "$FileCreateDate".ToUpper - ' Dim FI As New FileInfo(CURRENT_WORKFILE) - ' Dim CreationDate As Date = FI.CreationTime - ' DEFAULTVALUE = CreationDate.ToShortDateString - ' Case "$FileCreatedWho".ToUpper - ' Dim fs As FileSecurity = File.GetAccessControl(CURRENT_WORKFILE) - ' Dim sid As IdentityReference = fs.GetOwner(GetType(SecurityIdentifier)) - ' Dim ntaccount As IdentityReference = sid.Translate(GetType(NTAccount)) - ' Dim owner As String = ntaccount.ToString() - ' DEFAULTVALUE = owner - ' Case "$DateDDMMYYY".ToUpper - ' DEFAULTVALUE = System.DateTime.Now.ToShortDateString - ' Case "$Username" - ' DEFAULTVALUE = Environment.UserName - ' Case "$Usercode" - ' DEFAULTVALUE = USER_SHORT_NAME - - ' End Select - ' LOGGER.Info("Ergebnis der Windowsvariable: '" & DEFAULTVALUE & "'") - ' Else - ' LOGGER.Info("Indexierung mit einem Festen Wert: '" & DEFAULTVALUE & "'") - ' End If - ' 'Den Wert in der Zwischentabelle speichern - ' DR_AUTOINDEX.Item("Indexiert") = True - ' DR_AUTOINDEX.Item("Indexwert") = DEFAULTVALUE - ' End If - ' End If - ' End If - ' Next - ' 'MsgBox("Noch kein automatischer Index-SQL-String hinterlegt, dennoch wird das Dokument abgelegt!") - ' Return True - ' Else - ' Return True - ' End If - 'Catch ex As System.Exception - ' LOGGER.Info(" - Unexpected error in FillIndexe_Autom - Fehler: " & vbNewLine & ex.Message) - ' MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error in FillIndexe_Autom") - ' Return False - 'End Try - End Function Private Sub btnVorschau_Click(sender As System.Object, e As System.EventArgs) PreviewFile() @@ -2665,8 +2519,4 @@ Public Class frmIndex CONFIG.Config.ProfilePreselection = checkItemPreselection.Checked CONFIG.Save() End Sub - - Private Sub frmIndex_RightToLeftChanged(sender As Object, e As EventArgs) Handles Me.RightToLeftChanged - - End Sub End Class