MS WIndream Init

This commit is contained in:
SchreiberM 2020-04-27 14:17:05 +02:00
parent 59afa60f7b
commit b2096b5fe7
10 changed files with 142 additions and 143 deletions

View File

@ -74,7 +74,7 @@ Public Class ClassInit
Else Else
If IDB_ACTIVE = False Then If IDB_ACTIVE = False Then
Try Try
WINDREAM = New Windream(LOGCONFIG, False, "", "", True, "", "", "", "") WINDREAM = New Windream(LOGCONFIG, False, WMDrive, "\\windream\objects", True, "", "", "", "")
If Not IsNothing(WINDREAM) Then If Not IsNothing(WINDREAM) Then
If WINDREAM.SessionLoggedin = True Then If WINDREAM.SessionLoggedin = True Then
LOGGER.Debug("windream initialisiert") LOGGER.Debug("windream initialisiert")
@ -99,11 +99,15 @@ Public Class ClassInit
If DT.Rows.Count = 1 Then If DT.Rows.Count = 1 Then
GI_withWindream = DT.Rows(0).Item("BIT1") GI_withWindream = DT.Rows(0).Item("BIT1")
'vWLaufwerk = DT.Rows(0).Item("STRING1") 'vWLaufwerk = DT.Rows(0).Item("STRING1")
End If
oSql = "select * from TBDD_BASECONFIG"
DT = ClassDatabase.Return_Datatable(oSql)
If DT.Rows.Count = 1 Then
WMDrive = DT.Rows(0).Item("WM_DRIVE")
Return True Return True
Else Else
Return False Return False
End If End If
Catch ex As Exception Catch ex As Exception
MsgBox("Error in Load_BasicConfig" & vbNewLine & ex.Message, MsgBoxStyle.Critical) MsgBox("Error in Load_BasicConfig" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
Return False Return False
@ -229,7 +233,7 @@ Public Class ClassInit
Exit Sub Exit Sub
End If End If
If DT_CHECKUSER_MODULE.Rows.Count = 1 Then If DT_CHECKUSER_MODULE.Rows.Count = 1 Then
If DT_CHECKUSER_MODULE.Rows(0).Item("USER_ID") = 0 Then If DT_CHECKUSER_MODULE.Rows(0).Item("USER_ID") = 0 And IsDBNull(DT_CHECKUSER_MODULE.Rows(0).Item("USER_SURNAME")) Then
LOGGER.Info("User '" & Environment.UserName & "' not configured in Useradministration!") LOGGER.Info("User '" & Environment.UserName & "' not configured in Useradministration!")
START_INCOMPLETE = True START_INCOMPLETE = True
Throw New Exception("You are not configured in the Useradministration." & vbNewLine & "Please contact the system administrator!") Throw New Exception("You are not configured in the Useradministration." & vbNewLine & "Please contact the system administrator!")

View File

@ -176,7 +176,7 @@ Public Class ClassPatterns
Continue For Continue For
End If End If
LOGGER.Debug("Getting control metadata from object: [{0}]", oControl?.Tag?.ToString()) LOGGER.Debug("Getting control metadata from Control: [{0}]", oControl.Name)
If oControl.Tag Is Nothing Then If oControl.Tag Is Nothing Then
LOGGER.Warn("No Metadata object found for control [{0}]. Skipping.", oControl.Name) LOGGER.Warn("No Metadata object found for control [{0}]. Skipping.", oControl.Name)
@ -257,7 +257,7 @@ Public Class ClassPatterns
oTryCounter += 1 oTryCounter += 1
End While End While
LOGGER.Debug("sql after ReplaceControlValues: " & input) LOGGER.Debug("input after ReplaceControlValues [{input}]")
Return result Return result
Catch ex As Exception Catch ex As Exception
LOGGER.Error(ex) LOGGER.Error(ex)

View File

@ -173,9 +173,9 @@
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>P:\Visual Studio Projekte\Bibliotheken\DLLLicenseManager.dll</HintPath> <HintPath>P:\Visual Studio Projekte\Bibliotheken\DLLLicenseManager.dll</HintPath>
</Reference> </Reference>
<Reference Include="Independentsoft.Msg.2.0.570.21482, Version=2.0.570.21482, Culture=neutral, PublicKeyToken=76be97fe952f1ec7, processorArchitecture=MSIL"> <Reference Include="Independentsoft.Msg, Version=2.0.570.21482, Culture=neutral, PublicKeyToken=76be97fe952f1ec7, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>P:\Visual Studio Projekte\Bibliotheken\MSG .NET\Bin\Independentsoft.Msg.2.0.570.21482.dll</HintPath> <HintPath>P:\Visual Studio Projekte\Bibliotheken\MSG .NET\Bin\22_11_19\Independentsoft.Msg.dll</HintPath>
</Reference> </Reference>
<Reference Include="Interop.WINDREAMLib"> <Reference Include="Interop.WINDREAMLib">
<HintPath>P:\Visual Studio Projekte\Bibliotheken\windream\Interop.WINDREAMLib.dll</HintPath> <HintPath>P:\Visual Studio Projekte\Bibliotheken\windream\Interop.WINDREAMLib.dll</HintPath>

View File

@ -9,7 +9,7 @@ Module ModuleRuntime
Public MyConnectionString As String = "" Public MyConnectionString As String = ""
Public LogErrorsOnly As Boolean = True Public LogErrorsOnly As Boolean = True
Public GI_withWindream As Boolean = False Public GI_withWindream As Boolean = False
'Public vWLaufwerk As String = "W" Public WMDrive As String = "W"
'Public myPreviewActive As Boolean = True 'Public myPreviewActive As Boolean = True
Public FW_started As Boolean = False Public FW_started As Boolean = False
Public IDB_ACTIVE As Boolean = False Public IDB_ACTIVE As Boolean = False

View File

@ -33,7 +33,7 @@ Imports System.Runtime.InteropServices
' übernehmen, indem Sie "*" eingeben: ' übernehmen, indem Sie "*" eingeben:
' <Assembly: AssemblyVersion("1.0.*")> ' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("2.0.0.23")> <Assembly: AssemblyVersion("2.0.0.24")>
<Assembly: AssemblyFileVersion("1.0.0.0")> <Assembly: AssemblyFileVersion("1.0.0.0")>
<Assembly: NeutralResourcesLanguageAttribute("")> <Assembly: NeutralResourcesLanguageAttribute("")>

View File

@ -3522,7 +3522,7 @@ Die erhaltenen Werte können in Indizes geschrieben oder zur Benennung der Datei
<value>1</value> <value>1</value>
</data> </data>
<data name="btnAddWindowsVariable.Location" type="System.Drawing.Point, System.Drawing"> <data name="btnAddWindowsVariable.Location" type="System.Drawing.Point, System.Drawing">
<value>678, 87</value> <value>677, 85</value>
</data> </data>
<data name="btnAddWindowsVariable.Size" type="System.Drawing.Size, System.Drawing"> <data name="btnAddWindowsVariable.Size" type="System.Drawing.Size, System.Drawing">
<value>31, 22</value> <value>31, 22</value>
@ -3648,7 +3648,7 @@ Die erhaltenen Werte können in Indizes geschrieben oder zur Benennung der Datei
<value>False</value> <value>False</value>
</data> </data>
<data name="INDEXNAME_AutoIndexCMB.Location" type="System.Drawing.Point, System.Drawing"> <data name="INDEXNAME_AutoIndexCMB.Location" type="System.Drawing.Point, System.Drawing">
<value>259, 89</value> <value>259, 86</value>
</data> </data>
<data name="INDEXNAME_AutoIndexCMB.Size" type="System.Drawing.Size, System.Drawing"> <data name="INDEXNAME_AutoIndexCMB.Size" type="System.Drawing.Size, System.Drawing">
<value>198, 21</value> <value>198, 21</value>
@ -3768,7 +3768,7 @@ Die erhaltenen Werte können in Indizes geschrieben oder zur Benennung der Datei
<value>Tahoma, 8.25pt</value> <value>Tahoma, 8.25pt</value>
</data> </data>
<data name="GUIDAUTO_INDEXTextbox.Location" type="System.Drawing.Point, System.Drawing"> <data name="GUIDAUTO_INDEXTextbox.Location" type="System.Drawing.Point, System.Drawing">
<value>163, 87</value> <value>163, 86</value>
</data> </data>
<data name="GUIDAUTO_INDEXTextbox.Size" type="System.Drawing.Size, System.Drawing"> <data name="GUIDAUTO_INDEXTextbox.Size" type="System.Drawing.Size, System.Drawing">
<value>90, 21</value> <value>90, 21</value>
@ -3822,7 +3822,7 @@ Die erhaltenen Werte können in Indizes geschrieben oder zur Benennung der Datei
<value>False</value> <value>False</value>
</data> </data>
<data name="VALUETextBox.Location" type="System.Drawing.Point, System.Drawing"> <data name="VALUETextBox.Location" type="System.Drawing.Point, System.Drawing">
<value>463, 89</value> <value>463, 86</value>
</data> </data>
<data name="VALUETextBox.Size" type="System.Drawing.Size, System.Drawing"> <data name="VALUETextBox.Size" type="System.Drawing.Size, System.Drawing">
<value>209, 21</value> <value>209, 21</value>
@ -4152,7 +4152,7 @@ Die erhaltenen Werte können in Indizes geschrieben oder zur Benennung der Datei
<value>False</value> <value>False</value>
</data> </data>
<data name="INDEXNAME_AutoIndexTXT.Location" type="System.Drawing.Point, System.Drawing"> <data name="INDEXNAME_AutoIndexTXT.Location" type="System.Drawing.Point, System.Drawing">
<value>259, 89</value> <value>259, 86</value>
</data> </data>
<data name="INDEXNAME_AutoIndexTXT.Size" type="System.Drawing.Size, System.Drawing"> <data name="INDEXNAME_AutoIndexTXT.Size" type="System.Drawing.Size, System.Drawing">
<value>198, 21</value> <value>198, 21</value>

View File

@ -49,7 +49,6 @@ Public Class frmAdministration
oDragDropManager.AddGridView(viewAssignedUsers) oDragDropManager.AddGridView(viewAssignedUsers)
oDragDropManager.AddGridView(viewAvailableUsers) oDragDropManager.AddGridView(viewAvailableUsers)
RibbonPageUserGroups.Visible = False
RibbonPageEmail.Visible = False RibbonPageEmail.Visible = False
Dim oDatatable As New DataTable() Dim oDatatable As New DataTable()
@ -87,7 +86,6 @@ Public Class frmAdministration
Try Try
pnlObjekttype_Config.Enabled = False pnlObjekttype_Config.Enabled = False
Dim oDokumentTyp As WINDREAMLib.WMObject
' Combobox leeren ' Combobox leeren
Me.OBJEKTTYPComboBox.Items.Clear() Me.OBJEKTTYPComboBox.Items.Clear()
ListBoxControl1.Items.Clear() ListBoxControl1.Items.Clear()
@ -98,8 +96,8 @@ Public Class frmAdministration
For Each otype As String In SourceObjectTypes For Each otype As String In SourceObjectTypes
' und in die Combobox eintragen ' und in die Combobox eintragen
Me.OBJEKTTYPComboBox.Items.Add(oDokumentTyp.aName) Me.OBJEKTTYPComboBox.Items.Add(otype)
ListBoxControl1.Items.Add(oDokumentTyp.aName) ListBoxControl1.Items.Add(otype)
Next Next
@ -317,6 +315,7 @@ Public Class frmAdministration
If Me.OBJEKTTYPComboBox.SelectedIndex <> -1 Then If Me.OBJEKTTYPComboBox.SelectedIndex <> -1 Then
Me.WD_INDEXComboBox.Items.Clear() Me.WD_INDEXComboBox.Items.Clear()
Me.WD_INDEXComboBox.Items.Add("") Me.WD_INDEXComboBox.Items.Add("")
Me.INDEXNAME_AutoIndexCMB.Items.Clear()
If SourceAttributes Is Nothing Then If SourceAttributes Is Nothing Then
SourceAttributes = WINDREAM.GetIndiciesByObjecttype(OBJEKTTYPComboBox.Text) SourceAttributes = WINDREAM.GetIndiciesByObjecttype(OBJEKTTYPComboBox.Text)
End If End If
@ -326,6 +325,7 @@ Public Class frmAdministration
If SourceAttributes IsNot Nothing Then If SourceAttributes IsNot Nothing Then
For Each index As String In SourceAttributes For Each index As String In SourceAttributes
Me.WD_INDEXComboBox.Items.Add(index) Me.WD_INDEXComboBox.Items.Add(index)
INDEXNAME_AutoIndexCMB.Items.Add(index)
Next Next
End If End If
End If End If
@ -333,23 +333,6 @@ Public Class frmAdministration
MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Error in load_WDIndices: ") MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Error in load_WDIndices: ")
End Try End Try
End Sub End Sub
Sub load_WDIndices2AutoIndizes()
Try
If Me.OBJEKTTYPComboBox.SelectedIndex <> -1 Then
Me.INDEXNAME_AutoIndexCMB.Items.Clear()
If SourceAttributes Is Nothing Then
SourceAttributes = WINDREAM.GetIndiciesByObjecttype(OBJEKTTYPComboBox.Text)
End If
If SourceAttributes IsNot Nothing Then
For Each index As String In SourceAttributes
Me.INDEXNAME_AutoIndexCMB.Items.Add(index)
Next
End If
End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Error in load_WDIndices2AutoIndizes: ")
End Try
End Sub
Private Sub frmAdministration_Shown(sender As Object, e As EventArgs) Handles Me.Shown Private Sub frmAdministration_Shown(sender As Object, e As EventArgs) Handles Me.Shown
If DOKART_GUIDTextBox.Text <> "" Then If DOKART_GUIDTextBox.Text <> "" Then
Load_Dokart() Load_Dokart()
@ -407,7 +390,6 @@ Public Class frmAdministration
If WINDREAM_DIRECTCheckBox.Checked = True Then If WINDREAM_DIRECTCheckBox.Checked = True Then
INDEXNAME_AutoIndexTXT.Visible = False INDEXNAME_AutoIndexTXT.Visible = False
INDEXNAME_AutoIndexCMB.Visible = True INDEXNAME_AutoIndexCMB.Visible = True
load_WDIndices2AutoIndizes()
Else Else
INDEXNAME_AutoIndexTXT.Visible = True INDEXNAME_AutoIndexTXT.Visible = True
INDEXNAME_AutoIndexCMB.Visible = False INDEXNAME_AutoIndexCMB.Visible = False
@ -491,13 +473,6 @@ Public Class frmAdministration
RibbonControl1.SelectedPage = RibbonPageStart RibbonControl1.SelectedPage = RibbonPageStart
End If End If
If oSelectedPageName = XtraTabPageUsersGroups.Name Then
RibbonPageUserGroups.Visible = True
RibbonControl1.SelectedPage = RibbonPageUserGroups
Else
RibbonPageUserGroups.Visible = False
End If
If oSelectedPageName = XtraTabPageEmail.Name Then If oSelectedPageName = XtraTabPageEmail.Name Then
RibbonPageEmail.Visible = True RibbonPageEmail.Visible = True
@ -555,7 +530,6 @@ Public Class frmAdministration
End Sub End Sub
Private Sub ObjektTypenListBoxEintragen() Private Sub ObjektTypenListBoxEintragen()
Try Try
Dim oDokumentTyp As WINDREAMLib.WMObject
' Combobox leeren ' Combobox leeren
ListBoxControl1.Items.Clear() ListBoxControl1.Items.Clear()
' alle Objekttypen durchlaufen ' alle Objekttypen durchlaufen
@ -564,7 +538,7 @@ Public Class frmAdministration
End If End If
For Each oDokumentTyp In SourceObjectTypes For Each oDokumentTyp In SourceObjectTypes
' und in die Combobox eintragen ' und in die Combobox eintragen
ListBoxControl1.Items.Add(oDokumentTyp.aName) ListBoxControl1.Items.Add(oDokumentTyp)
Next Next
Catch ex As Exception Catch ex As Exception
MsgBox("Error in ObjektTypenListBoxEintragen:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) MsgBox("Error in ObjektTypenListBoxEintragen:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)

View File

@ -3,7 +3,6 @@
Private Control_Sequence As Integer Private Control_Sequence As Integer
Private Sub ObjektTypenEintragen() Private Sub ObjektTypenEintragen()
Try Try
Dim oDokumentTyp As WINDREAMLib.WMObject
' Combobox leeren ' Combobox leeren
Me.cmbObjekttyp.Items.Clear() Me.cmbObjekttyp.Items.Clear()
' alle Objekttypen durchlaufen ' alle Objekttypen durchlaufen

View File

@ -146,7 +146,7 @@ Public Class frmIndex
For Each DR In DT.Rows For Each DR In DT.Rows
If DR.Item("INDEXNAME").ToString.ToLower = indexname.ToLower Then If DR.Item("INDEXNAME").ToString.ToLower = indexname.ToLower Then
If DR.Item("Indexiert") = True Then If DR.Item("Indexiert") = True Then
LOGGER.Info(" >>Manueller Index: " & indexname) LOGGER.Info("## Manueller Index: " & indexname)
Select Case RequestFor Select Case RequestFor
Case "FILE" Case "FILE"
If DR.Item("Indexwert_File").ToString <> String.Empty Then If DR.Item("Indexwert_File").ToString <> String.Empty Then
@ -155,11 +155,11 @@ Public Class frmIndex
Return DR.Item("Indexwert_File") Return DR.Item("Indexwert_File")
Else Else
If DR.Item("Indexwert").ToString <> String.Empty Then If DR.Item("Indexwert").ToString <> String.Empty Then
LOGGER.Info(" >>Zurückgegebener manueller Indexwert: " & DR.Item("Indexwert")) LOGGER.Info("Zurückgegebener manueller Indexwert: " & DR.Item("Indexwert"))
Return DR.Item("Indexwert") Return DR.Item("Indexwert")
Else Else
If opt = False Then If opt = False Then
LOGGER.Info(" >> Achtung, der Indexwert des manuellen Indexes '" & indexname & "' ist String.empty!") 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!") ShowNotice("Indexiert = True - Der Index: " & DR.Item("INDEXNAME") & " wurde nicht ordnungsgemäss indexiert! - Automatischer Index konnte nicht gesetzt werden!")
Return Nothing Return Nothing
Else Else
@ -175,7 +175,7 @@ Public Class frmIndex
Else Else
'Dim optional_index As Boolean = ClassDatabase.Execute_Scalar("SELECT OPTIONAL FROM TBDD_INDEX_MAN WHERE DOK_ID = " & CURRENT_DOKART_ID & " AND UPPER(NAME) = UPPER('" & indexname & "')", MyConnectionString, True) 'Dim optional_index As Boolean = ClassDatabase.Execute_Scalar("SELECT OPTIONAL FROM TBDD_INDEX_MAN WHERE DOK_ID = " & CURRENT_DOKART_ID & " AND UPPER(NAME) = UPPER('" & indexname & "')", MyConnectionString, True)
If opt = False Then If opt = False Then
LOGGER.Info(" >> Achtung, der Indexwert des manuellen Indexes '" & indexname & "' ist String.empty!") 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!") ShowNotice("Indexiert = True - Der Index: " & DR.Item("INDEXNAME") & " wurde nicht ordnungsgemäss indexiert! - Automatischer Index konnte nicht gesetzt werden!")
Return Nothing Return Nothing
Else Else
@ -276,7 +276,7 @@ Public Class frmIndex
Function CheckWrite_IndexeMan(dokartid As Integer) Function CheckWrite_IndexeMan(dokartid As Integer)
'#### Zuerst manuelle Werte indexieren #### '#### Zuerst manuelle Werte indexieren ####
Try Try
LOGGER.Info(" >> In CheckWrite_IndexeMan") LOGGER.Info("In CheckWrite_IndexeMan")
Dim result As Boolean = False Dim result As Boolean = False
For Each oControl As Control In Me.pnlIndex.Controls For Each oControl As Control In Me.pnlIndex.Controls
' MsgBox(ctrl.Name) ' MsgBox(ctrl.Name)
@ -433,6 +433,7 @@ Public Class frmIndex
Function Name_Generieren() Function Name_Generieren()
Try Try
LOGGER.Debug("#### Name_Generieren ####")
Dim sql As String = "select VERSION_DELIMITER, FILE_DELIMITER FROM TBDD_MODULES WHERE GUID = 1" Dim sql As String = "select VERSION_DELIMITER, FILE_DELIMITER FROM TBDD_MODULES WHERE GUID = 1"
Dim DT1 As DataTable = ClassDatabase.Return_Datatable(sql) Dim DT1 As DataTable = ClassDatabase.Return_Datatable(sql)
For Each row As DataRow In DT1.Rows For Each row As DataRow In DT1.Rows
@ -465,25 +466,25 @@ Public Class frmIndex
Dim oMatchelements As System.Text.RegularExpressions.MatchCollection = regulärerAusdruck.Matches(oNamenkonvention) Dim oMatchelements As System.Text.RegularExpressions.MatchCollection = regulärerAusdruck.Matches(oNamenkonvention)
'#### '####
If oMatchelements.Count = 0 Then If oMatchelements.Count = 0 Then
LOGGER.Info(" >> No RegularExpression Fileds on Nameconvention!") LOGGER.Debug("No RegularExpression Fileds on Nameconvention!")
End If End If
' alle Vorkommen innerhalbd er Namenkonvention durchlaufen ' alle Vorkommen innerhalbd er Namenkonvention durchlaufen
For Each oElement As System.Text.RegularExpressions.Match In oMatchelements For Each oElement As System.Text.RegularExpressions.Match In oMatchelements
Select Case oElement.Value.Substring(2, 1).ToUpper Select Case oElement.Value.Substring(2, 1).ToUpper
'Manueller Indexwert 'Manueller Indexwert
Case "M" Case "M"
LOGGER.Info(" >>Manueller Index wird geprüft...") LOGGER.Debug("NameGenerieren: Manueller Index wird geprüft...")
Dim Indexname = oElement.Value.Substring(3, oElement.Value.Length - 4) Dim Indexname = oElement.Value.Substring(3, oElement.Value.Length - 4)
Dim optional_index As Boolean = ClassDatabase.Execute_Scalar("SELECT OPTIONAL FROM TBDD_INDEX_MAN WHERE DOK_ID = " & CURRENT_DOKART_ID & " AND UPPER(NAME) = UPPER('" & Indexname & "')", MyConnectionString, True) Dim optional_index As Boolean = ClassDatabase.Execute_Scalar("SELECT OPTIONAL FROM TBDD_INDEX_MAN WHERE DOK_ID = " & CURRENT_DOKART_ID & " AND UPPER(NAME) = UPPER('" & Indexname & "')", MyConnectionString, True)
Dim value As String = GetManIndex_Value(Indexname, "FILE", optional_index) Dim oManValue As String = GetManIndex_Value(Indexname, "FILE", optional_index)
If value <> String.Empty Then If oManValue <> String.Empty Then
Dim firstVectorValue = value.Split(ClassConstants.VECTORSEPARATOR).First() Dim firstVectorValue = oManValue.Split(ClassConstants.VECTORSEPARATOR).First()
oNamenkonvention = oNamenkonvention.Replace(oElement.Value, firstVectorValue) oNamenkonvention = oNamenkonvention.Replace(oElement.Value, firstVectorValue)
NewFileString = oNamenkonvention NewFileString = oNamenkonvention
sql_history_INSERT_INTO = sql_history_INSERT_INTO & ", INDEX" & AnzahlIndexe.ToString sql_history_INSERT_INTO = sql_history_INSERT_INTO & ", INDEX" & AnzahlIndexe.ToString
AnzahlIndexe += 1 AnzahlIndexe += 1
sql_history_Index_Values = sql_history_Index_Values & ", '" & value.Replace("'", "''") & "'" sql_history_Index_Values = sql_history_Index_Values & ", '" & oManValue.Replace("'", "''") & "'"
Else Else
If optional_index = True Then If optional_index = True Then
@ -502,16 +503,16 @@ Public Class frmIndex
' AnzahlIndexe += 1 ' AnzahlIndexe += 1
' sql_history_Index_Values = sql_history_Index_Values & ", '" & System.IO.Path.GetFileNameWithoutExtension(CURRENT_WORKFILE).Replace("'", "''") & "'" ' sql_history_Index_Values = sql_history_Index_Values & ", '" & System.IO.Path.GetFileNameWithoutExtension(CURRENT_WORKFILE).Replace("'", "''") & "'"
'Else 'Else
oNamenkonvention = oNamenkonvention.Replace("_" & oElement.Value, value) oNamenkonvention = oNamenkonvention.Replace("_" & oElement.Value, oManValue)
oNamenkonvention = oNamenkonvention.Replace("-" & oElement.Value, value) oNamenkonvention = oNamenkonvention.Replace("-" & oElement.Value, oManValue)
NewFileString = oNamenkonvention NewFileString = oNamenkonvention
sql_history_INSERT_INTO = sql_history_INSERT_INTO & ", INDEX" & AnzahlIndexe.ToString sql_history_INSERT_INTO = sql_history_INSERT_INTO & ", INDEX" & AnzahlIndexe.ToString
AnzahlIndexe += 1 AnzahlIndexe += 1
sql_history_Index_Values = sql_history_Index_Values & ", '" & value.Replace("'", "''") & "'" sql_history_Index_Values = sql_history_Index_Values & ", '" & oManValue.Replace("'", "''") & "'"
' End If ' End If
Else Else
LOGGER.Info(" >> Der Indexvalue für Index '" & Indexname & "' ist String.Empty") LOGGER.Debug("Der Indexvalue für Index '" & Indexname & "' ist String.Empty")
err = True err = True
End If End If
@ -594,7 +595,7 @@ Public Class frmIndex
Loop Loop
End If End If
Catch ex As Exception Catch ex As Exception
LOGGER.Info(" - Unexpected error in Umbenennnen der Datei - Fehler: " & vbNewLine & ex.Message) LOGGER.Warn(" - Unexpected error in NameGenerieren - Fehler: " & vbNewLine & ex.Message)
LOGGER.Error(ex.Message) LOGGER.Error(ex.Message)
MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error in Umbenennnen der Datei:") MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error in Umbenennnen der Datei:")
err = True err = True
@ -642,6 +643,8 @@ Public Class frmIndex
folder_Created = True folder_Created = True
End If End If
'False oder True zurückgeben 'False oder True zurückgeben
LOGGER.Debug("#### ENDE Name_Generieren ####")
LOGGER.Debug("")
If err = False Then If err = False Then
Return True Return True
Else Else
@ -662,11 +665,11 @@ Public Class frmIndex
'Manuelle Indexe Indexieren 'Manuelle Indexe Indexieren
Dim DTMan As DataTable = MyDataset.VWDDINDEX_MAN Dim DTMan As DataTable = MyDataset.VWDDINDEX_MAN
If DTMan.Rows.Count > 0 Then If DTMan.Rows.Count > 0 Then
Dim Count As Integer = 0 Dim Count As Integer = 0
For Each row As DataRow In DTMan.Rows For Each row As DataRow In DTMan.Rows
Dim idxvalue = row.Item("Indexwert") Dim idxvalue = row.Item("Indexwert")
Dim indexname = row.Item("WD_INDEX").ToString Dim indexname = row.Item("WD_INDEX").ToString
LOGGER.Debug($"Write_Indizes - Index [{indexname}]...")
Dim optional_Index = CBool(row.Item("OPTIONAL")) Dim optional_Index = CBool(row.Item("OPTIONAL"))
Dim indexiert = CBool(row.Item("Indexiert")) Dim indexiert = CBool(row.Item("Indexiert"))
If indexiert And idxvalue.ToString <> "" And idxvalue <> "EMPTY_OI" Then If indexiert And idxvalue.ToString <> "" And idxvalue <> "EMPTY_OI" Then
@ -693,18 +696,26 @@ Public Class frmIndex
End If End If
End If End If
LOGGER.Info(" >> Manueller Indexvalue: " & idxvalue.ToString) LOGGER.Debug($"Manueller Indexvalue [{idxvalue.ToString}]...NOW THE INDEXING...")
Count += 1 Count += 1
' den Typ des Zielindexes auslesen ' den Typ des Zielindexes auslesen
Dim indexType As Integer = WINDREAM.GetIndexType(indexname) Dim oIndexType As Integer = WINDREAM.GetIndexType(indexname)
LOGGER.Debug($"oIndexType [{oIndexType.ToString}]...")
If indexType < WINDREAM.WMObjectVariableValueTypeVector Then If oIndexType < WINDREAM.WMObjectVariableValueTypeVector Then
indexierung_erfolgreich = WINDREAM.SetFileIndex(CURRENT_NEWFILENAME, indexname, idxvalue, CURR_DOKART_OBJECTTYPE) indexierung_erfolgreich = WINDREAM.SetFileIndex(CURRENT_NEWFILENAME, indexname, idxvalue, CURR_DOKART_OBJECTTYPE)
Else Else
Dim oSplitArray = Split(idxvalue, ClassConstants.VECTORSEPARATOR) Dim oSplitArray = Split(idxvalue, ClassConstants.VECTORSEPARATOR)
Dim oListofString As List(Of String) Dim oListofString As New List(Of String)
oListofString = (From o In oSplitArray Select 0.ToString.ToList) If oSplitArray.Count = 0 Then
oListofString.Add(idxvalue)
Else
For Each oStr In oSplitArray
oListofString.Add(oStr)
Next
End If
indexierung_erfolgreich = WINDREAM.SetFileIndex(CURRENT_NEWFILENAME, indexname, oListofString, CURR_DOKART_OBJECTTYPE) indexierung_erfolgreich = WINDREAM.SetFileIndex(CURRENT_NEWFILENAME, indexname, oListofString, CURR_DOKART_OBJECTTYPE)
End If End If
@ -715,13 +726,13 @@ Public Class frmIndex
Exit For Exit For
End If End If
Else Else
If LogErrorsOnly = False Then
LOGGER.Info(" >> No Indexing: indexname: " & indexname) LOGGER.Debug("No Indexing: indexname: " & indexname)
LOGGER.Info(" >> No Indexing: is optional? " & optional_Index.ToString) LOGGER.Debug("No Indexing: is optional? " & optional_Index.ToString)
End If
End If End If
Else Else
LOGGER.Info(" >> Indexvalue is empty or field is not indexed - Indexname: " & indexname) LOGGER.Debug("Indexvalue is empty or field is not indexed - Indexname: " & indexname)
LOGGER.Info("Indexvalue is empty or field is not indexed - Indexname: " & indexname)
End If End If
Next Next
@ -736,8 +747,8 @@ Public Class frmIndex
Dim indexname = row.Item("INDEXNAME").ToString Dim indexname = row.Item("INDEXNAME").ToString
If indexiert = True And Indexvalue <> "" Then If indexiert = True And Indexvalue <> "" Then
If Indexvalue <> "EMPTY_OI" Then If Indexvalue <> "EMPTY_OI" Then
LOGGER.Info(" >> Auto Indexname: " & indexname.ToString) LOGGER.Info("Auto Indexname: " & indexname.ToString)
LOGGER.Info(" >> Indexvalue: " & Indexvalue.ToString) LOGGER.Info("Indexvalue: " & Indexvalue.ToString)
Count += 1 Count += 1
' den Typ des Zielindexes auslesen ' den Typ des Zielindexes auslesen
@ -747,8 +758,14 @@ Public Class frmIndex
indexierung_erfolgreich = WINDREAM.SetFileIndex(CURRENT_NEWFILENAME, indexname, Indexvalue, CURR_DOKART_OBJECTTYPE) indexierung_erfolgreich = WINDREAM.SetFileIndex(CURRENT_NEWFILENAME, indexname, Indexvalue, CURR_DOKART_OBJECTTYPE)
Else Else
Dim oSplitArray = Split(Indexvalue, ClassConstants.VECTORSEPARATOR) Dim oSplitArray = Split(Indexvalue, ClassConstants.VECTORSEPARATOR)
Dim oListofString As List(Of String) Dim oListofString As New List(Of String)
oListofString = (From o In oSplitArray Select 0.ToString.ToList) If oSplitArray.Count = 0 Then
oListofString.Add(Indexvalue)
Else
For Each oStr In oSplitArray
oListofString.Add(oStr)
Next
End If
indexierung_erfolgreich = WINDREAM.SetFileIndex(CURRENT_NEWFILENAME, indexname, oListofString, CURR_DOKART_OBJECTTYPE) indexierung_erfolgreich = WINDREAM.SetFileIndex(CURRENT_NEWFILENAME, indexname, oListofString, CURR_DOKART_OBJECTTYPE)
End If End If
@ -785,7 +802,7 @@ Public Class frmIndex
End Function End Function
Private Function WriteIndex2File(indexname As String, indexvalue As String) Private Function WriteIndex2File(indexname As String, indexvalue As String)
Try Try
LOGGER.Info(" >> Indexvalue: " & indexvalue.ToString) LOGGER.Info("Indexvalue: " & indexvalue.ToString)
Return WINDREAM.SetFileIndex(CURRENT_NEWFILENAME, indexname, indexvalue, CURR_DOKART_OBJECTTYPE) Return WINDREAM.SetFileIndex(CURRENT_NEWFILENAME, indexname, indexvalue, CURR_DOKART_OBJECTTYPE)
Catch ex As Exception Catch ex As Exception
MsgBox("Error in WriteIndex2File:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) MsgBox("Error in WriteIndex2File:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
@ -803,11 +820,11 @@ Public Class frmIndex
Dim msgInternetAccountName = msg.InternetAccountName Dim msgInternetAccountName = msg.InternetAccountName
If LogErrorsOnly = False Then If LogErrorsOnly = False Then
LOGGER.Info("") LOGGER.Info("")
LOGGER.Info(" >> msgInternetAccountName: " & msgInternetAccountName) LOGGER.Info("msgInternetAccountName: " & msgInternetAccountName)
LOGGER.Info(" >> SenderName: " & msg.SenderName) LOGGER.Info("SenderName: " & msg.SenderName)
LOGGER.Info(" >> SenderEmailAddress: " & msg.SenderEmailAddress) LOGGER.Info("SenderEmailAddress: " & msg.SenderEmailAddress)
LOGGER.Info(" >> ReceivedByName: " & msg.ReceivedByName) LOGGER.Info("ReceivedByName: " & msg.ReceivedByName)
LOGGER.Info(" >> ReceivedByEmailAddress: " & msg.ReceivedByEmailAddress) LOGGER.Info("ReceivedByEmailAddress: " & msg.ReceivedByEmailAddress)
LOGGER.Info("") LOGGER.Info("")
End If End If
_step = "2" _step = "2"
@ -844,7 +861,7 @@ Public Class frmIndex
Next Next
Dim DT As DataTable = ClassDatabase.Return_Datatable("SELECT * FROM TBGI_OBJECTTYPE_EMAIL_INDEX WHERE OBJECTTYPE = '" & CURR_DOKART_OBJECTTYPE & "'") Dim DT As DataTable = ClassDatabase.Return_Datatable("SELECT * FROM TBGI_OBJECTTYPE_EMAIL_INDEX WHERE OBJECTTYPE = '" & CURR_DOKART_OBJECTTYPE & "'")
If IsNothing(DT) Then If IsNothing(DT) Then
LOGGER.Info(" >> SELECT * FROM TBGI_OBJECTTYPE_EMAIL_INDEX WHERE OBJECTTYPE = '" & CURR_DOKART_OBJECTTYPE & "' RESULTED in NOTHING") LOGGER.Info("SELECT * FROM TBGI_OBJECTTYPE_EMAIL_INDEX WHERE OBJECTTYPE = '" & CURR_DOKART_OBJECTTYPE & "' RESULTED in NOTHING")
Return False Return False
End If End If
If DT.Rows.Count = 1 Then If DT.Rows.Count = 1 Then
@ -904,7 +921,7 @@ Public Class frmIndex
_step = "4.2" _step = "4.2"
If IsNothing(msgDisplayTo) Then If IsNothing(msgDisplayTo) Then
_step = "4.3" _step = "4.3"
LOGGER.Info(" >> DisplayTo in email is nothing - default will be set") LOGGER.Info("DisplayTo in email is nothing - default will be set")
emailTo = "NO RECIPIENT" emailTo = "NO RECIPIENT"
Else Else
_step = "4.4" _step = "4.4"
@ -912,7 +929,7 @@ Public Class frmIndex
End If End If
If IsNothing(msgInternetAccountName) Then If IsNothing(msgInternetAccountName) Then
_step = "4.5" _step = "4.5"
LOGGER.Info(" >> InternetAccountName in email is nothing - default will be set") LOGGER.Info("InternetAccountName in email is nothing - default will be set")
emailFrom = "" emailFrom = ""
Else Else
_step = "4.6" _step = "4.6"
@ -920,7 +937,7 @@ Public Class frmIndex
End If End If
Else Else
_step = "5" _step = "5"
LOGGER.Info(" >> emailTo and From Extraction via messageheader.") LOGGER.Info("emailTo and From Extraction via messageheader.")
emailFrom = ClassEmailHeaderExtractor.extractFromHeader(headers, fromPattern) 'FromRegexList) emailFrom = ClassEmailHeaderExtractor.extractFromHeader(headers, fromPattern) 'FromRegexList)
emailTo = ClassEmailHeaderExtractor.extractFromHeader(headers, toPattern) ' extractToAddress(headers, ToRegexList) emailTo = ClassEmailHeaderExtractor.extractFromHeader(headers, toPattern) ' extractToAddress(headers, ToRegexList)
@ -928,10 +945,10 @@ Public Class frmIndex
'Handler für leere emailTo-Adresse 'Handler für leere emailTo-Adresse
If IsNothing(emailTo) Then If IsNothing(emailTo) Then
_step = "5.1" _step = "5.1"
LOGGER.Info(" >> emailTo couldn't be extracted from messageheader...") LOGGER.Info("emailTo couldn't be extracted from messageheader...")
If (headers.Contains("exc") Or headers.Contains("exchange")) Then If (headers.Contains("exc") Or headers.Contains("exchange")) Then
_step = "5.2" _step = "5.2"
LOGGER.Info(" >> ...try with LDAP-option") LOGGER.Info("...try with LDAP-option")
Dim _email = GetUserEmailfromLDAP(msgDisplayTo) Dim _email = GetUserEmailfromLDAP(msgDisplayTo)
_step = "5.3" _step = "5.3"
If _email <> "" Then If _email <> "" Then
@ -953,7 +970,7 @@ Public Class frmIndex
emailTo = CURR_MISSING_MANUAL_VALUE emailTo = CURR_MISSING_MANUAL_VALUE
Else Else
_step = "5.4.3" _step = "5.4.3"
LOGGER.Info(" >> no exchange patterns found in headers!") 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) 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 Return False
End If End If
@ -969,7 +986,7 @@ Public Class frmIndex
emailFrom = emailFrom.Replace(">", "") emailFrom = emailFrom.Replace(">", "")
Else Else
_step = "6.1.x" _step = "6.1.x"
LOGGER.Info(" >> emailFrom is Nothing?!") LOGGER.Info("emailFrom is Nothing?!")
End If End If
If Not IsNothing(emailTo) Then If Not IsNothing(emailTo) Then
@ -993,20 +1010,20 @@ Public Class frmIndex
Next Next
Else Else
_step = "6.3" _step = "6.3"
LOGGER.Info(" >> emailTo is Nothing?!") LOGGER.Info("emailTo is Nothing?!")
End If End If
LOGGER.Info(" >> Headers-Content: ") LOGGER.Info("Headers-Content: ")
LOGGER.Info(headers.ToString) LOGGER.Info(headers.ToString)
End If End If
'Handler für leere emailFrom-Adresse 'Handler für leere emailFrom-Adresse
If IsNothing(emailFrom) Then If IsNothing(emailFrom) Then
_step = "7" _step = "7"
LOGGER.Info(" >> emailFrom couldn't be extracted from messageheader...") LOGGER.Info("emailFrom couldn't be extracted from messageheader...")
If Not IsNothing(msg.SenderEmailAddress) Then If Not IsNothing(msg.SenderEmailAddress) Then
If msg.SenderEmailAddress <> String.Empty Then If msg.SenderEmailAddress <> String.Empty Then
_step = "7.1" _step = "7.1"
LOGGER.Info(" >> emailFrom via msg.SenderEmailAddress will be used instead!") LOGGER.Info("emailFrom via msg.SenderEmailAddress will be used instead!")
emailFrom = msg.SenderEmailAddress.ToString.Replace("'", "") emailFrom = msg.SenderEmailAddress.ToString.Replace("'", "")
End If End If
End If End If
@ -1026,8 +1043,8 @@ Public Class frmIndex
End If End If
End If End If
LOGGER.Info(" >> emailFrom: " & emailFrom) LOGGER.Info("emailFrom: " & emailFrom)
LOGGER.Info(" >> emailTo: " & emailTo) LOGGER.Info("emailTo: " & emailTo)
'FROM 'FROM
If Not IsNothing(emailFrom) Then If Not IsNothing(emailFrom) Then
indexierung_erfolgreich = WriteIndex2File(DT.Rows(0).Item("IDX_EMAIL_FROM").ToString, emailFrom) indexierung_erfolgreich = WriteIndex2File(DT.Rows(0).Item("IDX_EMAIL_FROM").ToString, emailFrom)
@ -1036,7 +1053,7 @@ Public Class frmIndex
Return False Return False
End If End If
Else Else
LOGGER.Info(" >> emailFrom is still Nothing?!") LOGGER.Info("emailFrom is still Nothing?!")
_step = "7.4" _step = "7.4"
End If End If
'TO 'TO
@ -1047,14 +1064,14 @@ Public Class frmIndex
Return False Return False
End If End If
Else Else
LOGGER.Info(" >> emailTo is still Nothing?!") LOGGER.Info("emailTo is still Nothing?!")
_step = "7.5" _step = "7.5"
End If End If
' Dim subj As String = ClassFormFunctions.CleanInput(msg.Subject) ' Dim subj As String = ClassFormFunctions.CleanInput(msg.Subject)
Dim subj As String = msg.Subject Dim subj As String = msg.Subject
If IsNothing(subj) Or subj = "" Then If IsNothing(subj) Or subj = "" Then
LOGGER.Info(" >> msg subject is empty...DEFAULT will be set") LOGGER.Info("msg subject is empty...DEFAULT will be set")
subj = "No subject" subj = "No subject"
MsgBox("Attention: Email was send without a subject - Default value 'No subject' will be used!", MsgBoxStyle.Exclamation) MsgBox("Attention: Email was send without a subject - Default value 'No subject' will be used!", MsgBoxStyle.Exclamation)
Else Else
@ -1064,16 +1081,16 @@ Public Class frmIndex
End If End If
End If End If
LOGGER.Info(" >> Now all email-items will be indexed!") LOGGER.Info("Now all email-items will be indexed!")
LOGGER.Info(" >> subj: " & subj) LOGGER.Info("subj: " & subj)
indexierung_erfolgreich = WriteIndex2File(DT.Rows(0).Item("IDX_EMAIL_SUBJECT").ToString, subj) indexierung_erfolgreich = WriteIndex2File(DT.Rows(0).Item("IDX_EMAIL_SUBJECT").ToString, subj)
CURRENT_MESSAGESUBJECT = subj CURRENT_MESSAGESUBJECT = subj
If indexierung_erfolgreich = False Then If indexierung_erfolgreich = False Then
MsgBox("Error in SetEmailIndices [Subject] - See log", MsgBoxStyle.Critical) MsgBox("Error in SetEmailIndices [Subject] - See log", MsgBoxStyle.Critical)
Return False Return False
End If End If
LOGGER.Info(" >> MessageDeliveryTime: " & msg.MessageDeliveryTime) LOGGER.Info("MessageDeliveryTime: " & msg.MessageDeliveryTime)
indexierung_erfolgreich = WriteIndex2File(DT.Rows(0).Item("IDX_EMAIL_DATE_IN").ToString, msg.MessageDeliveryTime) indexierung_erfolgreich = WriteIndex2File(DT.Rows(0).Item("IDX_EMAIL_DATE_IN").ToString, msg.MessageDeliveryTime)
CURRENT_MESSAGEDATE = msg.MessageDeliveryTime CURRENT_MESSAGEDATE = msg.MessageDeliveryTime
If indexierung_erfolgreich = False Then If indexierung_erfolgreich = False Then
@ -1177,6 +1194,11 @@ Public Class frmIndex
Private Function SINGLEFILE_2_WINDREAM(_Objekttyp As String) Private Function SINGLEFILE_2_WINDREAM(_Objekttyp As String)
Try Try
CURR_DOKART_OBJECTTYPE = _Objekttyp CURR_DOKART_OBJECTTYPE = _Objekttyp
Dim oWMCheckPath = WINDREAM.VersionWMFilename(CURRENT_NEWFILENAME, System.IO.Path.GetExtension(CURRENT_NEWFILENAME))
If CURRENT_NEWFILENAME.ToUpper <> oWMCheckPath.ToString.ToUpper Then
LOGGER.Info($"Target [{CURRENT_NEWFILENAME}] already existed!! - NewWMFilename [{oWMCheckPath}]")
CURRENT_NEWFILENAME = oWMCheckPath
End If
Dim streamresult = WINDREAM.NewFileStream(CURRENT_WORKFILE, CURRENT_NEWFILENAME) Dim streamresult = WINDREAM.NewFileStream(CURRENT_WORKFILE, CURRENT_NEWFILENAME)
If CONFIG.Config.DeleteOriginalFile = True Then If CONFIG.Config.DeleteOriginalFile = True Then
@ -1382,14 +1404,14 @@ Public Class frmIndex
ElseIf DropType = "|OUTLOOK_MESSAGE|" Or DropType = "|FW_MSGONLY|" Then ElseIf DropType = "|OUTLOOK_MESSAGE|" Or DropType = "|FW_MSGONLY|" Then
Select Case DropType Select Case DropType
Case "|FW_MSGONLY|" Case "|FW_MSGONLY|"
LOGGER.Info(" >> .msg-file from folderwatch") LOGGER.Info(".msg-file from folderwatch")
If USER_LANGUAGE <> "de-DE" Then If USER_LANGUAGE <> "de-DE" Then
Me.Text = "Indexing of msg-File (without Attachments) - from Folderwatch" Me.Text = "Indexing of msg-File (without Attachments) - from Folderwatch"
Else Else
Me.Text = "Indexierung der msg-Datei (ohne Anhang) - aus Folderwatch" Me.Text = "Indexierung der msg-Datei (ohne Anhang) - aus Folderwatch"
End If End If
Case "|OUTLOOK_MESSAGE|" Case "|OUTLOOK_MESSAGE|"
LOGGER.Info(" >> .msg-file through dragdrop") LOGGER.Info(".msg-file through dragdrop")
If USER_LANGUAGE <> "de-DE" Then If USER_LANGUAGE <> "de-DE" Then
Me.Text = "Indexing of msg-File (without Attachments)" Me.Text = "Indexing of msg-File (without Attachments)"
Else Else
@ -1513,7 +1535,7 @@ Public Class frmIndex
Sub Refresh_Dokart() Sub Refresh_Dokart()
Try Try
Dim sql = String.Format("select * from VWGI_DOCTYPE where UPPER(USERNAME) = UPPER('{0}') ORDER BY SEQUENCE", Environment.UserName) Dim sql = String.Format("select * from VWGI_DOCTYPE where UPPER(USERNAME) = UPPER('{0}') ORDER BY SEQUENCE", Environment.UserName)
LOGGER.Info(" >> SQL DoctypeList: " & sql) LOGGER.Info("SQL DoctypeList: " & sql)
DT_DOKART = ClassDatabase.Return_Datatable(sql) DT_DOKART = ClassDatabase.Return_Datatable(sql)
cmbDokumentart.DataSource = DT_DOKART cmbDokumentart.DataSource = DT_DOKART
cmbDokumentart.ValueMember = DT_DOKART.Columns("DOCTYPE_ID").ColumnName cmbDokumentart.ValueMember = DT_DOKART.Columns("DOCTYPE_ID").ColumnName
@ -1798,14 +1820,14 @@ Public Class frmIndex
oSqlResult = oSqlResult.Replace(oMatch.Value, oManualIndexResult) oSqlResult = oSqlResult.Replace(oMatch.Value, oManualIndexResult)
End If End If
Next Next
If oSqlResult <> String.Empty Then
LOGGER.Info(" oSqlResult afrer first Replace: " & oSqlResult)
End If
'TODO: Replace Windream Patterns? 'TODO: Replace Windream Patterns?
oSqlResult = ClassPatterns.ReplaceControlValues(oSqlResult, pnlIndex) oSqlResult = ClassPatterns.ReplaceControlValues(oSqlResult, pnlIndex)
oSqlResult = ClassPatterns.ReplaceInternalValues(oSqlResult) oSqlResult = ClassPatterns.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, ' Ergebnis: Es wurden alle einfachen Platzhalter ersetzt, jetzt haben wir einen SQL Befehl,
' der nur noch vektorfelder-platzhalter enthält ' der nur noch vektorfelder-platzhalter enthält
@ -1871,7 +1893,7 @@ Public Class frmIndex
' For Each DR_AUTOINDEX As DataRow In DT_INDEXAUTOM.Rows ' For Each DR_AUTOINDEX As DataRow In DT_INDEXAUTOM.Rows
' Dim optionalIndex As Boolean ' Dim optionalIndex As Boolean
' Dim indexname As String = DR_AUTOINDEX.Item("INDEXNAME") ' Dim indexname As String = DR_AUTOINDEX.Item("INDEXNAME")
' LOGGER.Info(" >> Build Automatischer Index '" & 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 ' 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 ' ' Regulären Ausdruck zum Auslesen der windream-Indexe definieren
' Dim preg As String = "\[%{1}[a-zA-Z0-9\!\$\&\/\(\)\=\?\,\.\-\;\:_öÖüÜäÄ\#\'\+\*\~\{\}\@\€\<\>\ ]+]{1}" ' Dim preg As String = "\[%{1}[a-zA-Z0-9\!\$\&\/\(\)\=\?\,\.\-\;\:_öÖüÜäÄ\#\'\+\*\~\{\}\@\€\<\>\ ]+]{1}"
@ -1885,12 +1907,12 @@ Public Class frmIndex
' For Each element As System.Text.RegularExpressions.Match In elemente ' For Each element As System.Text.RegularExpressions.Match In elemente
' ' MsgBox(element.Value.ToUpper) ' ' MsgBox(element.Value.ToUpper)
' LOGGER.Info(" >> Element: '" & element.Value & "'") ' LOGGER.Info("Element: '" & element.Value & "'")
' '' wenn es sich nicht um dedizeirte Werte handelt (es sollen ja nur die Indexe ausgelesen werden) ' '' 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 ' 'If Not element.Value.ToUpper = "[%SPALTE]" And Not element.Value.ToUpper = "[%VIEW]" Then
' 'die Zeichen [% und ] entfernen (liefert den wirklichen windream-Index) ' 'die Zeichen [% und ] entfernen (liefert den wirklichen windream-Index)
' Dim elementOhneSonderzeichen As String = element.Value.Substring(2, element.Value.Length - 3) ' Dim elementOhneSonderzeichen As String = element.Value.Substring(2, element.Value.Length - 3)
' LOGGER.Info(" >> elementOhneSonderzeichen: '" & elementOhneSonderzeichen & "'") ' 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) ' 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 ' If elementOhneSonderzeichen.StartsWith("$") Then 'windowsParameter
' Dim result = "" ' Dim result = ""
@ -1926,7 +1948,7 @@ Public Class frmIndex
' MsgBox("Unexpected error in Replacement WindowsFilePatterns: " & vbNewLine & ex.Message & vbNewLine & vbNewLine & "Routine will continue - Please check logfile", MsgBoxStyle.Exclamation, ) ' MsgBox("Unexpected error in Replacement WindowsFilePatterns: " & vbNewLine & ex.Message & vbNewLine & vbNewLine & "Routine will continue - Please check logfile", MsgBoxStyle.Exclamation, )
' End Try ' End Try
' If result <> "" Then ' If result <> "" Then
' LOGGER.Info(" >> file-related parameter found: '" & elementOhneSonderzeichen & "' - Result: '" & result & "'") ' LOGGER.Info("file-related parameter found: '" & elementOhneSonderzeichen & "' - Result: '" & result & "'")
' SqlString = SqlString.Replace(element.Value, result) ' SqlString = SqlString.Replace(element.Value, result)
' Else ' Else
' LOGGER.Info(">> Attention: file-related parameter '" & elementOhneSonderzeichen & "' returned an empty string!") ' LOGGER.Info(">> Attention: file-related parameter '" & elementOhneSonderzeichen & "' returned an empty string!")
@ -1943,11 +1965,11 @@ Public Class frmIndex
' End If ' End If
' Next ' Next
' LOGGER.Info(" >> Replaced and complete SQL-result: " & SqlString) ' LOGGER.Info("Replaced and complete SQL-result: " & SqlString)
' LOGGER.Info(" >> Ausführen SQL....") ' LOGGER.Info("Ausführen SQL....")
' Dim automatischerValue As String = "" ' Dim automatischerValue As String = ""
' automatischerValue = GetAutomaticIndexSQLValue(SqlString, DR_AUTOINDEX.Item("CONNECTION_ID"), DR_AUTOINDEX.Item("SQL_PROVIDER")) ' automatischerValue = GetAutomaticIndexSQLValue(SqlString, DR_AUTOINDEX.Item("CONNECTION_ID"), DR_AUTOINDEX.Item("SQL_PROVIDER"))
' LOGGER.Info(" >> Ergebnis SQL: '" & automatischerValue & "'") ' LOGGER.Info("Ergebnis SQL: '" & automatischerValue & "'")
' If automatischerValue <> String.Empty Then ' If automatischerValue <> String.Empty Then
' DR_AUTOINDEX.Item("Indexiert") = True ' DR_AUTOINDEX.Item("Indexiert") = True
' DR_AUTOINDEX.Item("Indexwert") = automatischerValue ' DR_AUTOINDEX.Item("Indexwert") = automatischerValue
@ -1969,7 +1991,7 @@ Public Class frmIndex
' Dim DEFAULTVALUE As String = DR_AUTOINDEX.Item("VALUE") ' Dim DEFAULTVALUE As String = DR_AUTOINDEX.Item("VALUE")
' 'Indexierung mit WindowsVariable ' 'Indexierung mit WindowsVariable
' If DEFAULTVALUE.StartsWith("$") Then ' If DEFAULTVALUE.StartsWith("$") Then
' LOGGER.Info(" >> Indexierung mit einer Windowsvariable: '" & DEFAULTVALUE & "'") ' LOGGER.Info("Indexierung mit einer Windowsvariable: '" & DEFAULTVALUE & "'")
' Select Case DEFAULTVALUE.ToUpper ' Select Case DEFAULTVALUE.ToUpper
' Case "$filename_ext".ToUpper ' Case "$filename_ext".ToUpper
' DEFAULTVALUE = Path.GetFileName(CURRENT_WORKFILE) ' DEFAULTVALUE = Path.GetFileName(CURRENT_WORKFILE)
@ -1995,9 +2017,9 @@ Public Class frmIndex
' DEFAULTVALUE = USER_SHORT_NAME ' DEFAULTVALUE = USER_SHORT_NAME
' End Select ' End Select
' LOGGER.Info(" >> Ergebnis der Windowsvariable: '" & DEFAULTVALUE & "'") ' LOGGER.Info("Ergebnis der Windowsvariable: '" & DEFAULTVALUE & "'")
' Else ' Else
' LOGGER.Info(" >> Indexierung mit einem Festen Wert: '" & DEFAULTVALUE & "'") ' LOGGER.Info("Indexierung mit einem Festen Wert: '" & DEFAULTVALUE & "'")
' End If ' End If
' 'Den Wert in der Zwischentabelle speichern ' 'Den Wert in der Zwischentabelle speichern
' DR_AUTOINDEX.Item("Indexiert") = True ' DR_AUTOINDEX.Item("Indexiert") = True
@ -2051,25 +2073,24 @@ Public Class frmIndex
Private Function WORK_FILE() Private Function WORK_FILE()
Try Try
Me.VWDDINDEX_MANTableAdapter.Fill(Me.MyDataset.VWDDINDEX_MAN, CURRENT_DOKART_ID) Me.VWDDINDEX_MANTableAdapter.Fill(Me.MyDataset.VWDDINDEX_MAN, CURRENT_DOKART_ID)
LOGGER.Info(" >> Manuelle Indexe geladen") LOGGER.Debug("Manuelle Indexe geladen")
If MyDataset.VWDDINDEX_MAN.Rows.Count > 0 Then If MyDataset.VWDDINDEX_MAN.Rows.Count > 0 Then
CURRENT_DOKART_ID = Me.cmbDokumentart.SelectedValue CURRENT_DOKART_ID = Me.cmbDokumentart.SelectedValue
If CheckWrite_IndexeMan(Me.cmbDokumentart.SelectedValue) = True Then If CheckWrite_IndexeMan(Me.cmbDokumentart.SelectedValue) = True Then
'##### Manuelle Indexe indexiert ##### '##### Manuelle Indexe indexiert #####
LOGGER.Info(" >> Datei " & CURRENT_WORKFILE & " wird nun indexiert...") LOGGER.Info("Datei [" & CURRENT_WORKFILE & "] wird nun indexiert...")
If FillIndexe_Autom(Me.cmbDokumentart.SelectedValue) = True Then If FillIndexe_Autom(Me.cmbDokumentart.SelectedValue) = True Then
LOGGER.Info(" ...FillIndexe_Autom durchlaufen") LOGGER.Debug(" ...FillIndexe_Autom durchlaufen")
'Den Zielnamen zusammenbauen 'Den Zielnamen zusammenbauen
If Name_Generieren() = True Then If Name_Generieren() = True Then
LOGGER.Info(" ...Name_Generieren durchlaufen")
'Dokumentenviewer ausblenden um keinen Zugriffsfehler zu produzieren 'Dokumentenviewer ausblenden um keinen Zugriffsfehler zu produzieren
DocumentViewer1.Done() DocumentViewer1.Done()
LOGGER.Info(" ...Viewer geschlossen") LOGGER.Debug(" ...Viewer geschlossen")
'Die Datei verschieben 'Die Datei verschieben
If Move_File2_Target() = True Then If Move_File2_Target() = True Then
LOGGER.Info(" ...Move_File2_Target durchlaufen") LOGGER.Debug(" ...Move_File2_Target durchlaufen")
'Die Originaldatei löschen 'Die Originaldatei löschen
If DropType = "|DROPFROMFSYSTEM|" Then If DropType = "|DROPFROMFSYSTEM|" Then
If CURR_DELETE_ORIGIN = True Then If CURR_DELETE_ORIGIN = True Then
@ -2094,7 +2115,7 @@ Public Class frmIndex
End If End If
CURRENT_LASTDOKART = cmbDokumentart.Text CURRENT_LASTDOKART = cmbDokumentart.Text
LOGGER.Info(" >> Datei '" & CURRENT_NEWFILENAME & "' erfolgreich erzeugt.") LOGGER.Info("Datei '" & CURRENT_NEWFILENAME & "' erfolgreich erzeugt.")
Dim oDEL As String = "DELETE FROM TBGI_FILES_USER WHERE GUID = " & CURRENT_WORKFILE_GUID Dim oDEL As String = "DELETE FROM TBGI_FILES_USER WHERE GUID = " & CURRENT_WORKFILE_GUID
ClassDatabase.Execute_non_Query(oDEL, True) ClassDatabase.Execute_non_Query(oDEL, True)
Return True Return True
@ -2325,16 +2346,16 @@ Public Class frmIndex
'#### '####
' alle Vorkommen innerhalb des Ordnerstrings durchlaufen ' alle Vorkommen innerhalb des Ordnerstrings durchlaufen
For Each element As Match In elemente For Each element As Match In elemente
LOGGER.Info(" >> Elementname in FolderString: '" & element.ToString & "'") LOGGER.Info("Elementname in FolderString: '" & element.ToString & "'")
Select Case element.Value.Substring(2, 1).ToUpper Select Case element.Value.Substring(2, 1).ToUpper
'Manueller Indexwert 'Manueller Indexwert
Case "M" Case "M"
Dim ManIndexname = element.Value.Substring(3, element.Value.Length - 4) Dim ManIndexname = element.Value.Substring(3, element.Value.Length - 4)
Dim optional_index As Boolean = ClassDatabase.Execute_Scalar("SELECT OPTIONAL FROM TBDD_INDEX_MAN WHERE DOK_ID = " & CURRENT_DOKART_ID & " AND UPPER(NAME) = UPPER('" & ManIndexname & "')", MyConnectionString, True) Dim optional_index As Boolean = ClassDatabase.Execute_Scalar("SELECT OPTIONAL FROM TBDD_INDEX_MAN WHERE DOK_ID = " & CURRENT_DOKART_ID & " AND UPPER(NAME) = UPPER('" & ManIndexname & "')", MyConnectionString, True)
LOGGER.Info(" >> Versuch den Indexwert aus '" & ManIndexname & "' auszulesen.") LOGGER.Info("Versuch den Indexwert aus '" & ManIndexname & "' auszulesen.")
Dim ManIndex_Value As String = GetManIndex_Value(ManIndexname, "FILE", optional_index) Dim ManIndex_Value As String = GetManIndex_Value(ManIndexname, "FILE", optional_index)
LOGGER.Info(" >> Ergebnis/Wert für neuen Ordner: '" & ManIndexname & "'") LOGGER.Info("Ergebnis/Wert für neuen Ordner: '" & ManIndexname & "'")
If Not ManIndex_Value = String.Empty Then If Not ManIndex_Value = String.Empty Then
If IsDate(ManIndex_Value) Then If IsDate(ManIndex_Value) Then
ManIndex_Value = CDate(ManIndex_Value).ToString("yyyyMMdd") ManIndex_Value = CDate(ManIndex_Value).ToString("yyyyMMdd")
@ -2342,11 +2363,11 @@ Public Class frmIndex
ManIndex_Value = ClassFilehandle.CleanFilename(ManIndex_Value, "") ManIndex_Value = ClassFilehandle.CleanFilename(ManIndex_Value, "")
myDynamicFolder = myDynamicFolder.Replace(element.ToString, ManIndex_Value) myDynamicFolder = myDynamicFolder.Replace(element.ToString, ManIndex_Value)
LOGGER.Info(" >> FolderPattern: '" & myDynamicFolder & "'") LOGGER.Info("FolderPattern: '" & myDynamicFolder & "'")
Else Else
If optional_index = True Then If optional_index = True Then
LOGGER.Info(" >> Optionaler Indexwert ist NICHT gefüllt") LOGGER.Info("Optionaler Indexwert ist NICHT gefüllt")
Else Else
LOGGER.Info(" - Achtung Ausnahme in 'CrFolderForIndex': der Index ist leer!") LOGGER.Info(" - Achtung Ausnahme in 'CrFolderForIndex': der Index ist leer!")
Return True Return True
@ -2354,16 +2375,16 @@ Public Class frmIndex
End If End If
Case "A" Case "A"
Dim AutoIndexname = element.Value.Substring(3, element.Value.Length - 4) Dim AutoIndexname = element.Value.Substring(3, element.Value.Length - 4)
LOGGER.Info(" >> Versuch den Auto-Indexwert aus '" & AutoIndexname & "' auszulesen.") LOGGER.Info("Versuch den Auto-Indexwert aus '" & AutoIndexname & "' auszulesen.")
Dim AutoIndex_Value As String = GetAutoIndex_Value(AutoIndexname) Dim AutoIndex_Value As String = GetAutoIndex_Value(AutoIndexname)
LOGGER.Info(" >> Ergebnis/Wert für neuen Ordner: '" & AutoIndexname & "'") LOGGER.Info("Ergebnis/Wert für neuen Ordner: '" & AutoIndexname & "'")
If Not AutoIndex_Value = String.Empty Then If Not AutoIndex_Value = String.Empty Then
AutoIndex_Value = ClassFilehandle.CleanFilename(AutoIndex_Value, "") AutoIndex_Value = ClassFilehandle.CleanFilename(AutoIndex_Value, "")
If AutoIndex_Value = "EMPTY_OI" Then If AutoIndex_Value = "EMPTY_OI" Then
myDynamicFolder = myDynamicFolder.Replace(element.ToString, "") myDynamicFolder = myDynamicFolder.Replace(element.ToString, "")
Else Else
myDynamicFolder = myDynamicFolder.Replace(element.ToString, AutoIndex_Value) myDynamicFolder = myDynamicFolder.Replace(element.ToString, AutoIndex_Value)
LOGGER.Info(" >> FolderPattern: '" & myDynamicFolder & "'") LOGGER.Info("FolderPattern: '" & myDynamicFolder & "'")
End If End If
Else Else
@ -2394,7 +2415,7 @@ Public Class frmIndex
oElementTemp = My.Computer.Clock.LocalTime.Year & "-" & _Month oElementTemp = My.Computer.Clock.LocalTime.Year & "-" & _Month
End Select End Select
myDynamicFolder = myDynamicFolder.Replace(element.ToString, oElementTemp) myDynamicFolder = myDynamicFolder.Replace(element.ToString, oElementTemp)
LOGGER.Info(" >> FolderPatter nach V-Element: '" & myDynamicFolder & "'") LOGGER.Info("FolderPatter nach V-Element: '" & myDynamicFolder & "'")
Case Else Case Else
LOGGER.Info(" - Achtung - in der Namenkonvention wurde ein Element gefunden welches nicht zugeordnet werden kann!" & vbNewLine & "Elementname: " & element.Value.ToUpper) LOGGER.Info(" - Achtung - in der Namenkonvention wurde ein Element gefunden welches nicht zugeordnet werden kann!" & vbNewLine & "Elementname: " & element.Value.ToUpper)
@ -2408,13 +2429,13 @@ Public Class frmIndex
LOGGER.Info(" >> Den Root-Folder zusammenfügen>> ") LOGGER.Info("Den Root-Folder zusammenfügen>> ")
Dim oNewFullpath As String = ORootFolder & "\" & myDynamicFolder & "\" Dim oNewFullpath As String = ORootFolder & "\" & myDynamicFolder & "\"
oNewFullpath = oNewFullpath.Replace("\\", "\") oNewFullpath = oNewFullpath.Replace("\\", "\")
oNewFullpath = Path.Combine(ORootFolder, myDynamicFolder) oNewFullpath = Path.Combine(ORootFolder, myDynamicFolder)
LOGGER.Info(" >> Fullpath (mit evtl. Sonderzeichen (SZ)) '" & oNewFullpath & "'") LOGGER.Info("Fullpath (mit evtl. Sonderzeichen (SZ)) '" & oNewFullpath & "'")
Dim invalidPathChars() As Char = Path.GetInvalidPathChars() Dim invalidPathChars() As Char = Path.GetInvalidPathChars()
For Each sonderChar As Char In invalidPathChars For Each sonderChar As Char In invalidPathChars
'Sonderzeichen ausser Whitespace entfernen 'Sonderzeichen ausser Whitespace entfernen
@ -2424,13 +2445,13 @@ Public Class frmIndex
End If End If
End If End If
Next sonderChar Next sonderChar
LOGGER.Info(" >> Fullpath (ohne SZ) '" & oNewFullpath & "'") LOGGER.Info("Fullpath (ohne SZ) '" & oNewFullpath & "'")
If Directory.Exists(oNewFullpath) = False Then If Directory.Exists(oNewFullpath) = False Then
Try Try
Directory.CreateDirectory(oNewFullpath) Directory.CreateDirectory(oNewFullpath)
LOGGER.Info(" >> Folder '" & oNewFullpath & "' wurde angelegt") LOGGER.Info("Folder '" & oNewFullpath & "' wurde angelegt")
Catch ex As Exception Catch ex As Exception
LOGGER.Info(" >> Error in CreateFolderforIndex-Method - Root Folder '" & oNewFullpath & "' could not be created. " & ex.Message) LOGGER.Info("Error in CreateFolderforIndex-Method - Root Folder '" & oNewFullpath & "' could not be created. " & ex.Message)
LOGGER.Error(ex.Message) LOGGER.Error(ex.Message)
MsgBox("Attention: Root Folder '" & oNewFullpath & "' could not be created." & vbNewLine & ex.Message, MsgBoxStyle.Critical) MsgBox("Attention: Root Folder '" & oNewFullpath & "' could not be created." & vbNewLine & ex.Message, MsgBoxStyle.Critical)
Return False Return False
@ -2443,7 +2464,7 @@ Public Class frmIndex
Return True Return True
Catch ex As Exception Catch ex As Exception
MsgBox("Unexpected Error in CreateFolderforIndex-Method:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) MsgBox("Unexpected Error in CreateFolderforIndex-Method:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
LOGGER.Info(" >> Fehler in CrFolderForIndex: " & ex.Message) LOGGER.Info("Fehler in CrFolderForIndex: " & ex.Message)
Return False Return False
End Try End Try
End Function End Function

View File

@ -115,6 +115,7 @@
<File Id="DLLLicenseManager" Name="DLLLicenseManager.dll" Source="P:\Visual Studio Projekte\Bibliotheken\DLLLicenseManager.dll" KeyPath="no" /> <File Id="DLLLicenseManager" Name="DLLLicenseManager.dll" Source="P:\Visual Studio Projekte\Bibliotheken\DLLLicenseManager.dll" KeyPath="no" />
<File Id="DocumentViewer" Name="DigitalData.Controls.DocumentViewer.dll" Source="DigitalData.Controls.DocumentViewer.dll" KeyPath="no" /> <File Id="DocumentViewer" Name="DigitalData.Controls.DocumentViewer.dll" Source="DigitalData.Controls.DocumentViewer.dll" KeyPath="no" />
<File Id="LookupGrid" Name="DigitalData.Controls.LookupGrid.dll" Source="DigitalData.Controls.LookupGrid.dll" KeyPath="no" /> <File Id="LookupGrid" Name="DigitalData.Controls.LookupGrid.dll" Source="DigitalData.Controls.LookupGrid.dll" KeyPath="no" />
<File Id="Windream" Name="DigitalData.Controls.Windream.dll" Source="DigitalData.Controls.Windream.dll" KeyPath="no" />
</Component> </Component>
<Component Id="GDPictureLibs" Guid="9ea5ab43-58ff-4813-9a8b-f854784f0275"> <Component Id="GDPictureLibs" Guid="9ea5ab43-58ff-4813-9a8b-f854784f0275">