Public Class ClassFinalizeDoc Public Shared Function Write_Final_Metadata() Try Dim _error As Boolean = False If CURRENT_DT_FINAL_INDEXING.Rows.Count > 0 Then 'Jetzt finale Indexe setzen If LogErrorsOnly = False Then ClassLogger.Add(" >> working final indices for doc: " & CURRENT_WMFILE.aName, False) For Each dr As DataRow In CURRENT_DT_FINAL_INDEXING.Rows Dim value As String = dr.Item("VALUE").ToString Dim INDEXNAME = dr.Item("INDEXNAME").ToString If value.ToUpper = "SQL-Command".ToUpper Then '###### Indexierung mit variablen SQL ### If LogErrorsOnly = False Then ClassLogger.Add(" >> indexing with dynamic sql...", False) Dim SQL_COMMAND = dr.Item("SQL_COMMAND") ' Regulären Ausdruck zum Auslesen der Indexe definieren Dim preg As String = "\[%{1}[a-zA-Z0-9\!\$\&\/\(\)\=\?\,\.\-\;\:_öÖüÜäÄ\#\'\+\*\~\{\}\@\€\<\>\ ]+]{1}" ' 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(SQL_COMMAND) '#### ' alle Vorkommen innerhalbd er Namenkonvention durchlaufen For Each element As System.Text.RegularExpressions.Match In elemente Try If LogErrorsOnly = False Then ClassLogger.Add(" >> element in RegeX: " & element.Value, False) Dim WDINDEXNAME = element.Value.Substring(2, element.Value.Length - 3) Dim wertWD = CURRENT_WMFILE.GetVariableValue(WDINDEXNAME) If Not IsNothing(wertWD) Then SQL_COMMAND = SQL_COMMAND.ToString.Replace(element.Value, wertWD) Else ClassLogger.Add(">>Attention: indexvalue is invalid", False) End If Catch ex As Exception ClassLogger.Add("Unexpected Error in Checking control values for Variable SQL Result - ERROR: " & ex.Message) End Try Next Dim dynamic_value = ClassDatabase.Execute_Scalar(SQL_COMMAND, MyConnectionString, True) If Not IsNothing(dynamic_value) Then value = dynamic_value Else Continue For End If Else If value.StartsWith("v") Then Select Case dr.Item("VALUE").ToString Case "vDate" value = Now.ToShortDateString Case "vUserName" value = Environment.UserName Case Else value = dr.Item("VALUE") End Select End If End If Dim result() As String ReDim Preserve result(0) result(0) = value If INDEXNAME.StartsWith("[%VKT") Then Dim PM_String = Return_PM_VEKTOR(value, INDEXNAME) 'Hier muss nun separat als Vektorfeld indexiert werden If Indexiere_VektorfeldPM(PM_String, CURRENT_PROFILE_VEKTOR_LOG) = False Then If LogErrorsOnly = False Then ClassLogger.Add(" >> FINALER INDEX '" & INDEXNAME.Replace("[%VKT", "") & "' WURDE ERFOLGREICH GESETZT", False) Else MsgBox("Unexpected error in finalindexing vektorvalue - check the log", MsgBoxStyle.Critical) _error = True End If Else If LogErrorsOnly = False Then ClassLogger.Add(" >> now indexing..", False) If Indexiere_File(INDEXNAME, result) = True Then If LogErrorsOnly = False Then ClassLogger.Add(" >> FINALER INDEX '" & INDEXNAME & "' WURDE ERFOLGREICH GESETZT", False) If LogErrorsOnly = False Then ClassLogger.Add("") 'Nun das Logging If CURRENT_PROFILE_VEKTOR_LOG <> "" Then Dim logstr = Return_LOGString(value, "DDFINALINDEX", INDEXNAME) Indexiere_VektorfeldPM(logstr, CURRENT_PROFILE_VEKTOR_LOG) End If Else MsgBox("Unexpected error in final index - check the log", MsgBoxStyle.Critical) _error = True End If End If If _error = True Then Exit For End If Next If _error = True Then Return False Else Return True End If Else Return True End If Catch ex As Exception ClassLogger.Add(">> unexpected error in Write_Final_Metadata: " & ex.Message.ToString, True) Return False End Try End Function Private Shared Function Indexiere_File(idxxname As String, idxvalue As Object) Dim File_indexiert As Boolean = False Try 'Die Arrays vorbereiten Dim arrIndex() As String = Nothing Dim arrValue() As String = Nothing arrIndex = Nothing arrValue = Nothing 'Den Indexnamen übergeben ReDim Preserve arrIndex(0) arrIndex(0) = idxxname 'Das Array der Idnexwerte überprüfen If idxvalue Is Nothing = False Then If idxvalue.Length() > 1 Then If LogErrorsOnly = False Then ClassLogger.Add(" >> Indexing Index '" & idxxname & "' with Arrayvalue", False) Dim anzahl As Integer = 0 For Each indexvalue As String In idxvalue ReDim Preserve arrValue(anzahl) arrValue(anzahl) = indexvalue anzahl += 1 Next Else If LogErrorsOnly = False Then ClassLogger.Add(" >> Indexing Index '" & idxxname & "' with value '" & idxvalue(0) & "'", False) ReDim Preserve arrValue(0) arrValue(0) = idxvalue(0).ToString End If Dim _windreamPM As New ClassPMWindream 'Jetzt das eigentliche Indexieren der Datei File_indexiert = _windreamPM.RunIndexing(CURRENT_WMFILE, arrIndex, arrValue) Return File_indexiert End If Catch ex As Exception ClassLogger.Add(">> Unvorhergesehener Fehler bei Indexiere_File: " & ex.Message.ToString, True) Return Err() End Try End Function Private Shared Function Indexiere_VektorfeldPM(input As String, NameVectorfield As String) Dim _success As Boolean = True Dim Anzahl As Integer = 0 Dim myInputArr As String() 'Jeden Wert des Vektorfeldes durchlaufen Dim wertWD = CURRENT_WMFILE.GetVariableValue(NameVectorfield) If wertWD Is Nothing = False Then 'Es wird gegen ein Vektorfeld nachindexiert If wertWD.GetType.ToString.Contains("System.Object") Then 'es handelt sich um ein Vektorfeld - Zuweisen der Indexwerte des Vektorfeldes zu Array For Each obj As Object In wertWD If obj Is Nothing = False Then 'Das Array anpassen ReDim Preserve myInputArr(Anzahl) 'Den Wert im Array speichern myInputArr(Anzahl) = obj.ToString Anzahl += 1 End If Next End If 'Das Array anpassen ReDim Preserve myInputArr(Anzahl) 'und den letzten Wert übergeben myInputArr(Anzahl) = input Else 'Das Array anpassen ReDim Preserve myInputArr(Anzahl) 'und den letzten Wert übergeben myInputArr(Anzahl) = input End If If myInputArr.Length > 0 Then 'Jetzt die Datei indexieren If Indexiere_File(NameVectorfield, myInputArr) = False Then _success = False 'errmessage = "Fehler beim Indexieren Vektorfeld '" & NameVKTIndex & "' - ERROR: " & idxerr_message End If End If Return _success End Function Private Shared Function Return_PM_VEKTOR(input As String, VKTBezeichner As String) Dim PM_String As String Try Dim Bezeichner As String = VKTBezeichner.Replace("[%VKT", "") PM_String = "DD-PM#" & Bezeichner & "#" & input & "#" & Environment.UserName & "#" & Now.ToString Catch ex As Exception ClassLogger.Add(">> Fehler in Return_PM_VEKTOR: " & ex.Message, True) PM_String = "DD-PM ERROR: " & ex.Message End Try Return PM_String End Function Private Shared Function Return_LOGString(input As String, old As String, indexname As String) Dim PM_String As String Try If old = "DDFINALINDEX" Then PM_String = "DD-PMlog-FINAL" & "#" & indexname & "#" & input & "#" & Environment.UserName & "#" & Now.ToString Else PM_String = "DD-PMlog-CHG" & "#" & indexname & "#" & "NEW: '" & input & "' - OLD: '" & old & "'" & "#" & Environment.UserName & "#" & Now.ToString End If Catch ex As Exception ClassLogger.Add(">> Fehler in Return_LOGString: " & ex.Message, True) PM_String = "DD-PM ERROR: " & ex.Message End Try Return PM_String End Function End Class