From bc4567a62880b61bfa7de2e254c369d3455f7bd0 Mon Sep 17 00:00:00 2001 From: Digital Data - Marlon Schreiber Date: Mon, 27 Apr 2020 10:35:43 +0200 Subject: [PATCH] MS IDB und WINDREAM --- Global_Indexer/ClassControls.vb | 2 +- Global_Indexer/ClassDatabase.vb | 26 + Global_Indexer/ClassIDBData.vb | 226 +++ Global_Indexer/ClassInit.vb | 98 +- Global_Indexer/ClassParamRefresh.vb | 53 + Global_Indexer/ClassWindream.vb | 1760 ----------------- Global_Indexer/Global_Indexer.vbproj | 9 +- Global_Indexer/ModuleCURRENT.vb | 4 +- .../{ModuleMySettings.vb => ModuleRuntime.vb} | 18 +- Global_Indexer/frmAdministration.vb | 64 +- Global_Indexer/frmHotKey_Add.vb | 11 +- Global_Indexer/frmIndex.vb | 48 +- Global_Indexer/frmStart.vb | 11 +- 13 files changed, 464 insertions(+), 1866 deletions(-) create mode 100644 Global_Indexer/ClassIDBData.vb create mode 100644 Global_Indexer/ClassParamRefresh.vb delete mode 100644 Global_Indexer/ClassWindream.vb rename Global_Indexer/{ModuleMySettings.vb => ModuleRuntime.vb} (50%) diff --git a/Global_Indexer/ClassControls.vb b/Global_Indexer/ClassControls.vb index b93dc23..238bfa2 100644 --- a/Global_Indexer/ClassControls.vb +++ b/Global_Indexer/ClassControls.vb @@ -397,7 +397,7 @@ Public Class ClassControls Continue For End If - oControlSql = ClassPatterns.ReplaceUserValues(oControlSql, USER_PRENAME, USER_SURNAME, USER_SHORT_NAME, USER_LANGUAGE, USER_EMAIL, USER_ID, CURRENT_DOKART_ID) + oControlSql = ClassPatterns.ReplaceUserValues(oControlSql, USER_PRENAME, USER_SURNAME, USER_SHORTNAME, USER_LANGUAGE, USER_EMAIL, USER_ID, CURRENT_DOKART_ID) oControlSql = ClassPatterns.ReplaceInternalValues(oControlSql) oControlSql = ClassPatterns.ReplaceControlValues(oControlSql, Panel) diff --git a/Global_Indexer/ClassDatabase.vb b/Global_Indexer/ClassDatabase.vb index e4edef7..3eb9e65 100644 --- a/Global_Indexer/ClassDatabase.vb +++ b/Global_Indexer/ClassDatabase.vb @@ -187,6 +187,32 @@ Public Class ClassDatabase Return False End Try End Function + Public Shared Function Execute_non_Query_ConStr(ExecuteCMD As String, ConnString As String, Optional userInput As Boolean = False) + Try + Dim SQLconnect As New SqlClient.SqlConnection + Dim SQLcommand As SqlClient.SqlCommand + SQLconnect.ConnectionString = ConnString + SQLconnect.Open() + SQLcommand = SQLconnect.CreateCommand + 'Update Last Created Record in Foo + SQLcommand.CommandText = ExecuteCMD + LOGGER.Debug("Execute_non_Query_ConStr Created: " & ExecuteCMD) + SQLcommand.ExecuteNonQuery() + SQLcommand.Dispose() + SQLconnect.Close() + Return True + Catch ex As Exception + LOGGER.Error(ex) + If userInput = True Then + MsgBox("Error in Execute_non_Query_ConStr - Error-Message:" & vbNewLine & ex.Message & vbNewLine & "SQL-Command:" & vbNewLine & ExecuteCMD, MsgBoxStyle.Critical) + End If + Clipboard.SetText("Error Execute_non_Query_ConStr: " & ex.Message & vbNewLine & "SQL: " & ExecuteCMD) + LOGGER.Info("Fehler bei Execute_non_Query_ConStr: " & ex.Message, True) + LOGGER.Info("#SQL: " & ExecuteCMD, False) + + Return False + End Try + End Function Public Shared Function Execute_Scalar(sql_command As String, ConString As String, Optional userInput As Boolean = False) Dim result Try diff --git a/Global_Indexer/ClassIDBData.vb b/Global_Indexer/ClassIDBData.vb new file mode 100644 index 0000000..75cecf3 --- /dev/null +++ b/Global_Indexer/ClassIDBData.vb @@ -0,0 +1,226 @@ +Public Class ClassIDBData + Public DTVWIDB_BE_ATTRIBUTE As DataTable + ''' + ''' Gets all indices by BusinessEntity. + ''' + ''' Title of Business Entity + ''' Array with all Indices + ''' + ''' + Public Function Init() + Dim oSQL = $"SELECT * FROM VWIDB_BE_ATTRIBUTE" + DTVWIDB_BE_ATTRIBUTE = ClassDatabase.Return_Datatable_CS(oSQL, CONNECTION_STRING_IDB) + End Function + Public IDBSystemIndices As List(Of String) + Public Function GetIndicesByBE(ByVal BusinessEntity As String) As String() + Try + Dim aNames(4) As String + aNames(0) = "ObjectID" + aNames(1) = "IDBCreatedWhen" + aNames(2) = "IDBCreatedWho" + aNames(3) = "IDBChangedWhen" + aNames(4) = "IDBChangedWho" + IDBSystemIndices = aNames.ToList + ' Array für Indizes vorbereiten + Dim aIndexNames(DTVWIDB_BE_ATTRIBUTE.Rows.Count + 4) As String + Dim oCount As Integer = 0 + aIndexNames(oCount) = "ObjectID" + oCount += 1 + aIndexNames(oCount) = "IDBCreatedWhen" + oCount += 1 + aIndexNames(oCount) = "IDBCreatedWho" + oCount += 1 + aIndexNames(oCount) = "IDBChangedWhen" + oCount += 1 + aIndexNames(oCount) = "IDBChangedWho" + For Each oRow As DataRow In DTVWIDB_BE_ATTRIBUTE.Rows + oCount += 1 + aIndexNames(oCount) = oRow.Item("ATTR_TITLE") + + Next + + + ' Indexarray sortiert zurückgeben + Array.Sort(aIndexNames) + ' Indexarray zurückgeben + Return aIndexNames + + Catch ex As Exception + LOGGER.Error(ex) + MsgBox(ex.Message, MsgBoxStyle.Critical, "Error getting the IDB Indicies") + Return Nothing + End Try + End Function + Public Function GetTypeOfIndex(ByVal indexname As String) As Integer + Try + For Each oRow As DataRow In DTVWIDB_BE_ATTRIBUTE.Rows + If oRow.Item("ATTR_TITLE") = indexname Then + Dim oType = oRow.Item("TYP_ID") + Return oType + End If + Next + + Catch ex As Exception + LOGGER.Error(ex) + Return Nothing + End Try + + End Function + Public Function GetVariableValue(oAttributeName As String, Optional oIDBTyp As Integer = 0, Optional FromIDB As Boolean = False) As Object + Try + Dim oSingleAttribute As Boolean = True + Select Case oIDBTyp + Case 8 + oSingleAttribute = False + Case 9 + oSingleAttribute = False + End Select + Dim oAttributeValue + + If oSingleAttribute = True And IDB_DT_DOC_DATA.Rows.Count = 1 And FromIDB = False Then + Try + If oAttributeName = "IDBCreatedWhen" Then + oAttributeName = "ADDED_WHEN" + ElseIf oAttributeName = "IDBCreatedWho" Then + oAttributeName = "ADDED_WHO" + ElseIf oAttributeName = "IDBChangedWhen" Then + oAttributeName = "CHANGED_WHEN" + ElseIf oAttributeName = "IDBChangedWho" Then + oAttributeName = "CHANGED_WHO" + End If + + oAttributeValue = IDB_DT_DOC_DATA.Rows(0).Item(oAttributeName) + Catch ex As Exception + LOGGER.Debug($"Error getting Attribute from IDB_DT_DOC_DATA: {ex.Message}") + End Try + + End If + If Not IsNothing(oAttributeValue) Then + Return oAttributeValue + Else + LOGGER.Debug($"oAttributeValue for Attribute [{oAttributeName}] is so far nothing..Now trying FNIDB_PM_GET_VARIABLE_VALUE ") + End If + Dim oFNSQL = $"SELECT * FROM [dbo].[FNIDB_PM_GET_VARIABLE_VALUE] ({IDB_DOC_ID},'{oAttributeName}','{USER_LANGUAGE}',CONVERT(BIT,'{IDB_USES_WMFILESTORE}'))" + oAttributeValue = ClassDatabase.Return_Datatable_CS(oFNSQL, CONNECTION_STRING_IDB) + Dim odt As DataTable = oAttributeValue + If odt.Rows.Count = 1 Then + oAttributeValue = odt.Rows(0).Item(0) + End If + Return oAttributeValue + Catch ex As Exception + LOGGER.Error(ex) + Return Nothing + End Try + + End Function + Public Function Delete_Term_Object_From_Metadata(oAttributeName As String, oTerm2Delete As String) As Object + Try + Dim oAttributeValue + Dim oID_IS_FOREIGN As Integer + oID_IS_FOREIGN = 0 + If IDB_USES_WMFILESTORE Then + oID_IS_FOREIGN = 1 + End If + Dim oDELSQL = $"EXEC PRIDB_DELETE_TERM_OBJECT_METADATA {IDB_DOC_ID},'{oAttributeName}','{oTerm2Delete}','{USER_USERNAME}','{USER_LANGUAGE}',{oID_IS_FOREIGN}" + ClassDatabase.Execute_non_Query_ConStr(oDELSQL, CONNECTION_STRING_IDB) + + Catch ex As Exception + LOGGER.Error(ex) + Return Nothing + End Try + + End Function + Public Function Delete_AttributeData(pIDB_OBJID As Int64, pAttributeName As String) As Object + Try + Dim oDELSQL = $"EXEC PRIDB_DELETE_ATTRIBUTE_DATA {pIDB_OBJID},'{pAttributeName}','{USER_USERNAME}'" + ClassDatabase.Execute_non_Query_ConStr(oDELSQL, CONNECTION_STRING_IDB) + + Catch ex As Exception + LOGGER.Error(ex) + Return Nothing + End Try + + End Function + + Public Function SetVariableValue(oAttributeName As String, oNewValue As Object, Optional CheckDeleted As Boolean = False, Optional oIDBTyp As Integer = 0) + Try + Dim omytype = oNewValue.GetType.ToString + If omytype = "System.Data.DataTable" Then + Dim oDTMyNewValues As DataTable = oNewValue + Dim oOldAttributeResult + Dim oTypeOldResult + + If CheckDeleted = True Then + oOldAttributeResult = GetVariableValue(oAttributeName, oIDBTyp) + oTypeOldResult = oOldAttributeResult.GetType.ToString + If oTypeOldResult = "System.Data.DataTable" Then + Dim myOldValues As DataTable = oOldAttributeResult + If myOldValues.Rows.Count > 1 Then + + 'now Checking whether the old row still remains in Vector? If not it will be deleted as it cannot be replaced in multivalues + For Each oOldValueRow As DataRow In myOldValues.Rows + Dim oExists As Boolean = False + For Each oNewValueRow As DataRow In oDTMyNewValues.Rows + Dim oInfo1 = $"Checking oldValue[{oOldValueRow.Item(0)}] vs NewValue [{oNewValueRow.Item(1)}]" + If oNewValueRow.Item(1).ToString.ToUpper = oOldValueRow.Item(0).ToString.ToUpper Then + oExists = True + Exit For + End If + Next + + If oExists = False Then + Dim oInfo = $"Value [{oOldValueRow.Item(0)}] no longer existing in Vector-Attribute [{oAttributeName}] - will be deleted!" + LOGGER.Info(oInfo) + SetVariableValue(IDB_LOG_INDEX, oInfo) + Delete_Term_Object_From_Metadata(oAttributeName, oOldValueRow.Item(0)) + End If + + Next + End If + Else + If oDTMyNewValues.Rows.Count > 1 Then + Dim oExists As Boolean = False + For Each oNewValueRow As DataRow In oDTMyNewValues.Rows + Dim oInfo1 = $"Checking oldValue[{oOldAttributeResult}] vs NewValue [{oNewValueRow.Item(1)}]" + If oNewValueRow.Item(1).ToString.ToUpper = oOldAttributeResult.ToString.ToUpper Then + oExists = True + Exit For + End If + Next + If oExists = False Then + Dim oInfo2 = $"Value [{oOldAttributeResult}] no longer existing in Vector-Attribute [{oAttributeName}] - will be deleted!" + LOGGER.Info(oInfo2) + SetVariableValue(IDB_LOG_INDEX, oInfo2) + Delete_Term_Object_From_Metadata(oAttributeName, oOldAttributeResult) + End If + Else + Dim oInfo = $"Value [{oOldAttributeResult}] of Attribute [{oAttributeName}] obviously was updated during runtime - will be deleted!" + LOGGER.Info(oInfo) + SetVariableValue(IDB_LOG_INDEX, oInfo) + Delete_Term_Object_From_Metadata(oAttributeName, oOldAttributeResult) + End If + + End If + + End If + + For Each oNewValueRow As DataRow In oDTMyNewValues.Rows + Dim oSuccess As Boolean = False + Dim oFNSQL = $"DECLARE @NEW_OBJ_MD_ID BIGINT " & vbNewLine & $"EXEC PRIDB_NEW_OBJ_DATA {IDB_DOC_ID},'{oAttributeName}','{USER_USERNAME}','{oNewValueRow.Item(1).ToString}','{USER_LANGUAGE}',{IDB_DOC_ID},@OMD_ID = @NEW_OBJ_MD_ID OUTPUT" + oSuccess = ClassDatabase.Execute_non_Query_ConStr(oFNSQL, CONNECTION_STRING_IDB) + If oSuccess = False Then + Return False + End If + Next + Return True + Else + Dim oFNSQL = $"DECLARE @NEW_OBJ_MD_ID BIGINT " & vbNewLine & $"EXEC PRIDB_NEW_OBJ_DATA {IDB_DOC_ID},'{oAttributeName}','{USER_USERNAME}','{oNewValue}','{USER_LANGUAGE}',{IDB_DOC_ID},@OMD_ID = @NEW_OBJ_MD_ID OUTPUT" + Return ClassDatabase.Execute_non_Query_ConStr(oFNSQL, CONNECTION_STRING_IDB) + End If + + Catch ex As Exception + LOGGER.Error(ex) + Return False + End Try + End Function +End Class diff --git a/Global_Indexer/ClassInit.vb b/Global_Indexer/ClassInit.vb index d3a50a9..9e530a8 100644 --- a/Global_Indexer/ClassInit.vb +++ b/Global_Indexer/ClassInit.vb @@ -2,6 +2,7 @@ Imports DLLLicenseManager Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Config +Imports DigitalData.Modules.Windream Public Class ClassInit Public _lizenzManager As ClassLicenseManager @@ -70,6 +71,23 @@ Public Class ClassInit Else Throw New Exception("Unexpected error while initializing basic-settings. More info in the log.") End If + Else + If IDB_ACTIVE = False Then + Try + WINDREAM = New Windream(LOGCONFIG, False, "", "", True, "", "", "", "") + If Not IsNothing(WINDREAM) Then + If WINDREAM.SessionLoggedin = True Then + LOGGER.Debug("windream initialisiert") + Else + Throw New Exception("Could not create a windream session") + End If + End If + Catch ex As Exception + LOGGER.Warn("CHECKING WMConnectivity: " & ex.Message) + Throw New Exception("Unexpected error in CHECKING WMConnectivity") + End Try + End If + End If End Sub @@ -80,12 +98,12 @@ Public Class ClassInit Dim DT As DataTable = ClassDatabase.Return_Datatable(oSql) If DT.Rows.Count = 1 Then GI_withWindream = DT.Rows(0).Item("BIT1") - vWLaufwerk = DT.Rows(0).Item("STRING1") - + 'vWLaufwerk = DT.Rows(0).Item("STRING1") Return True Else Return False End If + Catch ex As Exception MsgBox("Error in Load_BasicConfig" & vbNewLine & ex.Message, MsgBoxStyle.Critical) Return False @@ -199,36 +217,10 @@ Public Class ClassInit End Sub Public Sub InitUserLogin() Try - Dim sql = "SELECT MAX(GUID) FROM TBDD_USER WHERE (LOWER(USERNAME) = LOWER('@user'))" - sql = sql.Replace("@user", Environment.UserName) - ' LOGGER.Info(">> Username: " & Environment.UserName) - - USER_ID = ClassDatabase.Execute_Scalar(sql, MyConnectionString, True) - Try - Dim USERID = CInt(USER_ID) - Catch ex As Exception - LOGGER.Info("User '" & Environment.UserName & "' not configured in Useradministration! (DBNull)") - LOGGER.Error(ex.Message) - 'MsgBox("Achtung: Sie sind nicht in der Userverwaltung hinterlegt." & vbNewLine & "Bitte setzen Sie sich mit dem Systembetreuer in Verbindung!", MsgBoxStyle.Critical, "Achtung:") - 'Me.Close() - START_INCOMPLETE = True - Throw New Exception("You are not configured in the Useradministration." & vbNewLine & "Please contact the system administrator!") - Exit Sub - End Try + Dim oSql As String - Dim oUserDatatable As DataTable = ClassDatabase.Return_Datatable($"SELECT * FROM TBDD_USER WHERE GUID = {USER_ID}") - If Not IsNothing(oUserDatatable) AndAlso Not IsDBNull(oUserDatatable.Rows.Item(0)) Then - Dim oRow As DataRow = oUserDatatable.Rows.Item(0) - USER_SHORT_NAME = NotNull(oRow.Item("SHORTNAME"), String.Empty) - USER_PRENAME = NotNull(oRow.Item("PRENAME"), String.Empty) - USER_SURNAME = NotNull(oRow.Item("NAME"), String.Empty) - USER_EMAIL = NotNull(oRow.Item("EMAIL"), String.Empty) - USER_USERNAME = NotNull(oRow.Item("USERNAME"), String.Empty) - End If - - 'Check_User_Exists_in_GIGroups() - sql = String.Format("SELECT * FROM [dbo].[FNDD_CHECK_USER_MODULE] ('{0}','GLOBIX',{1})", Environment.UserName, 1) - Dim DT_CHECKUSER_MODULE As DataTable = ClassDatabase.Return_Datatable(sql) + oSql = String.Format("SELECT * FROM [dbo].[FNDD_CHECK_USER_MODULE] ('{0}','GLOBIX',{1})", Environment.UserName, 1) + Dim DT_CHECKUSER_MODULE As DataTable = ClassDatabase.Return_Datatable(oSql) If DT_CHECKUSER_MODULE.Rows.Count = 0 Then LOGGER.Info("DT_CHECKUSER_MODULE.Rows.Count = 0") START_INCOMPLETE = True @@ -237,7 +229,23 @@ Public Class ClassInit Exit Sub End If If DT_CHECKUSER_MODULE.Rows.Count = 1 Then + If DT_CHECKUSER_MODULE.Rows(0).Item("USER_ID") = 0 Then + LOGGER.Info("User '" & Environment.UserName & "' not configured in Useradministration!") + START_INCOMPLETE = True + Throw New Exception("You are not configured in the Useradministration." & vbNewLine & "Please contact the system administrator!") + Exit Sub + End If USER_IN_MODULE = DT_CHECKUSER_MODULE.Rows(0).Item("MODULE_ACCESS") + USER_ID = DT_CHECKUSER_MODULE.Rows(0).Item("USER_ID") + USER_SURNAME = IIf(IsDBNull(DT_CHECKUSER_MODULE.Rows(0).Item("USER_SURNAME")), "", DT_CHECKUSER_MODULE.Rows(0).Item("USER_SURNAME")) + USER_PRENAME = IIf(IsDBNull(DT_CHECKUSER_MODULE.Rows(0).Item("USER_PRENAME")), "", DT_CHECKUSER_MODULE.Rows(0).Item("USER_PRENAME")) + USER_SHORTNAME = IIf(IsDBNull(DT_CHECKUSER_MODULE.Rows(0).Item("USER_SHORTNAME")), "", DT_CHECKUSER_MODULE.Rows(0).Item("USER_SHORTNAME")) + USER_EMAIL = IIf(IsDBNull(DT_CHECKUSER_MODULE.Rows(0).Item("USER_EMAIL")), "", DT_CHECKUSER_MODULE.Rows(0).Item("USER_EMAIL")) + USER_LANGUAGE = DT_CHECKUSER_MODULE.Rows(0).Item("USER_LANGUAGE") + USER_IN_MODULE = DT_CHECKUSER_MODULE.Rows(0).Item("MODULE_ACCESS") + USER_IS_ADMIN = DT_CHECKUSER_MODULE.Rows(0).Item("IS_ADMIN") + USERCOUNT_LOGGED_IN = DT_CHECKUSER_MODULE.Rows(0).Item("USERCOUNT_LOGGED_IN") + ClassParamRefresh.Refresh_Params(DT_CHECKUSER_MODULE) If USER_IN_MODULE = False Then LOGGER.Info(" - User: " & Environment.UserName & " nicht für Modul freigegben!") START_INCOMPLETE = True @@ -261,22 +269,22 @@ Public Class ClassInit End If USER_LANGUAGE = DT_CHECKUSER_MODULE.Rows(0).Item("USER_LANGUAGE") - sql = "DELETE FROM TBDD_USER_MODULE_LOG_IN WHERE USER_ID = " & USER_ID & " AND UPPER(MODULE) = UPPER('Global-Indexer')" - ClassDatabase.Execute_non_Query(sql, True) - sql = "INSERT INTO TBDD_USER_MODULE_LOG_IN (USER_ID,MODULE) VALUES (" & USER_ID & ",'Global-Indexer')" - ClassDatabase.Execute_non_Query(sql) - sql = "SELECT COUNT(*) AS Expr1 FROM TBDD_USER_MODULE_LOG_IN WHERE Upper(MODULE) = UPPER('Global-Indexer')" - Dim anzahl = ClassDatabase.Execute_Scalar(sql, MyConnectionString, True) - LOGGER.Info(" >> Anzahl Angemeldete User: " & anzahl.ToString) - UserLoggedin = CInt(anzahl) - UserLoggedin += 1 - If LICENSE_COUNT < UserLoggedin And LICENSE_EXPIRED = False Then - MsgBox("Die Anzahl der aktuell angemeldeten User (" & UserLoggedin.ToString & ") überschreitet die Anzahl der aktuellen Lizenzen!" & vbNewLine & "Anzahl der Lizenzen: " & LICENSE_COUNT.ToString & vbNewLine & "Bitte setzen Sie sich mit dem Systembetreuer in Verbindung!", MsgBoxStyle.Critical, "Achtung:") - LOGGER.Info(" >> Die Anzahl der aktuell angemeldeten User (" & UserLoggedin.ToString & ") überschreitet die Anzahl der Lizenzen (" & LICENSE_COUNT & ") für Global Indexer!") + oSql = "DELETE FROM TBDD_USER_MODULE_LOG_IN WHERE USER_ID = " & USER_ID & " AND UPPER(MODULE) = UPPER('Global-Indexer')" + ClassDatabase.Execute_non_Query(oSql, True) + oSql = "INSERT INTO TBDD_USER_MODULE_LOG_IN (USER_ID,MODULE) VALUES (" & USER_ID & ",'Global-Indexer')" + ClassDatabase.Execute_non_Query(oSql) + oSql = "SELECT COUNT(*) AS Expr1 FROM TBDD_USER_MODULE_LOG_IN WHERE Upper(MODULE) = UPPER('Global-Indexer')" + ' Dim anzahl = ClassDatabase.Execute_Scalar(sql, MyConnectionString, True) + 'LOGGER.Info(" >> Anzahl Angemeldete User: " & anzahl.ToString) + ' UserLoggedin = CInt(anzahl) + ' UserLoggedin += 1 + If LICENSE_COUNT < USERCOUNT_LOGGED_IN And LICENSE_EXPIRED = False Then + MsgBox("Die Anzahl der aktuell angemeldeten User (" & USERCOUNT_LOGGED_IN.ToString & ") überschreitet die Anzahl der aktuellen Lizenzen!" & vbNewLine & "Anzahl der Lizenzen: " & LICENSE_COUNT.ToString & vbNewLine & "Bitte setzen Sie sich mit dem Systembetreuer in Verbindung!", MsgBoxStyle.Critical, "Achtung:") + LOGGER.Info(" >> Die Anzahl der aktuell angemeldeten User (" & USERCOUNT_LOGGED_IN.ToString & ") überschreitet die Anzahl der Lizenzen (" & LICENSE_COUNT & ") für Global Indexer!") If USER_IS_ADMIN = False Then 'Anmeldung wieder herausnehmen - sql = "DELETE FROM TBDD_USER_MODULE_LOG_IN WHERE USER_ID = " & USER_ID & " AND MODULE= 'Global-Indexer'" - ClassDatabase.Execute_non_Query(sql, True) + oSql = "DELETE FROM TBDD_USER_MODULE_LOG_IN WHERE USER_ID = " & USER_ID & " AND MODULE= 'Global-Indexer'" + ClassDatabase.Execute_non_Query(oSql, True) LOGGER.Info(" - Wieder abgemeldet") START_INCOMPLETE = True End If diff --git a/Global_Indexer/ClassParamRefresh.vb b/Global_Indexer/ClassParamRefresh.vb new file mode 100644 index 0000000..b46c9f7 --- /dev/null +++ b/Global_Indexer/ClassParamRefresh.vb @@ -0,0 +1,53 @@ +Public Class ClassParamRefresh + Public Shared Sub Refresh_Params(DT_CHECKUSER As DataTable) + If DT_CHECKUSER.Rows.Count = 1 Then + USERCOUNT_LOGGED_IN = DT_CHECKUSER.Rows(0).Item("USERCOUNT_LOGGED_IN") + Try + WORKING_MODE = DT_CHECKUSER.Rows(0).Item("WORKING_MODE") + Catch ex As Exception + WORKING_MODE = "" + End Try + 'Try + ' ADDITIONAL_TITLE = DT_CHECKUSER.Rows(0).Item("ADDITIONAL_TITLE") + ' If ADDITIONAL_TITLE = String.Empty Then + ' ADDITIONAL_TITLE = My.Application.Info.ProductName + ' End If + 'Catch ex As Exception + ' ADDITIONAL_TITLE = My.Application.Info.ProductName + 'End Try + + Dim oSplitWorkMode As String() = WORKING_MODE.Split("#") + + ' Use For Each loop over words and display them. + Dim oMode As String + For Each oMode In oSplitWorkMode + LOGGER.Debug($"oWorkingMode Parameter: {oMode}") + If oMode.StartsWith("IDB_CONID!") Then + Dim CON_ID = oMode.Replace("GLOBIX.IDB_CONID!", "") + Dim oConString = ClassDatabase.Get_ConnectionString(CON_ID) + CONNECTION_STRING_IDB = oConString + Dim oSQL = $"SELECT * FROM TBIDB_ATTRIBUTE" + Dim oDT As DataTable = ClassDatabase.Return_Datatable_CS(oSQL, CONNECTION_STRING_IDB) + If Not IsNothing(oDT) Then + If oDT.Rows.Count > 0 Then + IDB_ACTIVE = True + Else + LOGGER.Warn($"Got an IDB-ConnID [{CON_ID}] but check DTAttribute.Row.Count is [{oDT.Rows.Count}]!!") + End If + Else + LOGGER.Warn($"Got an IDB-ConnID [{CON_ID}] but check DT Attribute is Nothing!!") + End If + ElseIf oMode.StartsWith("IDB.LOG_INDEX") Then + IDB_LOG_INDEX = oMode.Replace("IDB.LOG_INDEX!", "") + 'ElseIf oMode.StartsWith("PM.COLORSCHEME") Then + ' Dim oColorScheme = oMode.Replace("PM.COLORSCHEME=", "") + ' RIBBON_COLOR_SCHEME = oColorScheme.ToUpper + + Else + LOGGER.Info($"Wrong oMode: {oMode}") + End If + Next + + End If + End Sub +End Class diff --git a/Global_Indexer/ClassWindream.vb b/Global_Indexer/ClassWindream.vb deleted file mode 100644 index e6e128e..0000000 --- a/Global_Indexer/ClassWindream.vb +++ /dev/null @@ -1,1760 +0,0 @@ - -Imports WINDREAMLib -Imports WINDREAMLib.WMCOMEvent -Imports WINDREAMLib.WMEntity -Imports WINDREAMLib.WMObjectEditMode -Imports WINDREAMLib.WMSearchOperator -Imports WINDREAMLib.WMSearchRelation -Imports WMOBRWSLib -Imports WMOSRCHLib -Imports System.IO -Imports System.Text.RegularExpressions - -Public Class ClassWindream - -#Region "+++++ Konstanten +++++" - Const DEBUG = AUS - Const AUS = 0 - Const WINDREAM = 1 - Const VARIABLEN = 2 - Const WMObjectStreamOpenModeReadWrite = 2 - - Const STREAM_BinaryObject = "BinaryObject" - - Public Const WMObjectVariableValueTypeUndefined = 0 - Public Const WMObjectVariableValueTypeString = 1 - Public Const WMObjectVariableValueTypeInteger = 2 - Public Const WMObjectVariableValueTypeFloat = 3 - Public Const WMObjectVariableValueTypeBoolean = 4 - Public Const WMObjectVariableValueTypeDate = 5 - Public Const WMObjectVariableValueTypeFixedPoint = 6 - Public Const WMObjectVariableValueTypeTimeStamp = 7 - Public Const WMObjectVariableValueTypeCurrency = 8 - Public Const WMObjectVariableValueTypeTime = 9 - Public Const WMObjectVariableValueTypeVariant = 10 - Public Const WMObjectVariableValueTypeMask = &HFFF - Public Const WMObjectVariableValueFlagMask = &HFFFFF000 - Public Const WMObjectVariableValueTypeVector = &H1000 - Public Const WMObjectVariableValueTypeFulltext = &H2000 - Public Const WMObjectVariableValueTypeDefaultValue = &H4000 -#End Region - -#Region "+++++ Variablen +++++" - Public Shared oConnect ' der Typ darf nicht festgelegt werden (warum auch immer... geht sonst nicht) - Public Shared _session 'As WINDREAMLib.WMSession ' der Typ darf nicht festgelegt werden (warum auch immer... geht sonst nicht) - Public Shared oBrowser As New WMOBRWSLib.ServerBrowser - Public Shared _DocumentTypes As WINDREAMLib.WMObjects - Private _SearchController As New WMOSearchController - Public Shared _WDObjekttyp As String - Private Shared _currentWMObject As WINDREAMLib.WMObject -#End Region - - -#Region "+++++ Allgemeine Methoden und Funktionen +++++" - - ''' - ''' Konstruktor für die windream-Klasse - ''' - ''' - Sub New() - ' wenn ein Unexpected error in der Initialisierung auftrat - If Not ClassWindream.Init() Then - ' Nachricht ausgeben - MsgBox("Es trat ein Unexpected error in der Initialisierung der Klasse windream auf. Bitte prüfen Sie ob der windream-Server aktiv ist und alle Dienste gestartet sind.", MsgBoxStyle.Exclamation, "Unexpected error in Initialisierung") - - ' das Programm "abschießen" - Process.GetCurrentProcess.Kill() - End If - End Sub - Public Function GetSearchDocuments(ByVal wdfLocation As String) - - If System.IO.File.Exists(wdfLocation) Then - - Try - Dim ProfileName = wdfLocation.Substring(wdfLocation.LastIndexOf("\") + 1) - Dim ProfilePath = wdfLocation.Substring(0, wdfLocation.Length - ProfileName.Length) - - _SearchController = New WMOSearchController - - Me._SearchController.CheckSearchProfile(wdfLocation.ToLower) - Dim suchTyp = Me._SearchController.SearchProfileTargetProgID - Dim ExSettings As Object - Dim oSearch As Object - ExSettings = Me._SearchController.SearchProfileExSettings - If ExSettings = 0 Then ExSettings = 7 - - Dim srchQuick As WMOSRCHLib.WMQuickSearch = CreateObject("WMOSrch.WMQuickSearch") - Dim srchIndex As WMOSRCHLib.WMIndexSearch = CreateObject("WMOSrch.WMIndexSearch") - Dim srchObjectType As WMOSRCHLib.WMObjectTypeSearch = CreateObject("WMOSrch.WMObjectTypeSearch") - - '' Der öffentliche Member CheckSearchProfile für den Typ IWMQuickSearch7 wurde nicht gefunden. [Microsoft.VisualBasic] => GetSearchDocuments() - Select Case suchTyp.ToString.ToUpper - Case "WMOSRCH.WMQUICKSEARCH" - srchQuick.WMSession = CreateObject("Windream.WMSession", Me.GetCurrentServer) - - Me.oConnect.LoginSession(srchQuick.WMSession) - - srchQuick.ClearSearch() - srchQuick.SearchProfilePath = ProfilePath - srchQuick.LoadSearchProfile(ProfileName) - - oSearch = srchQuick.GetSearch() - - Case "WMOSRCH.WMINDEXSEARCH" - srchIndex.WMSession = CreateObject("Windream.WMSession", Me.GetCurrentServer) - - Me.oConnect.LoginSession(srchIndex.WMSession) - - srchIndex.ClearSearch() - srchIndex.SearchProfilePath = ProfilePath - srchIndex.LoadSearchProfile(ProfileName) - - oSearch = srchIndex.GetSearch() - - Case "WMOSRCH.WMOBJECTTYPESEARCH" - srchObjectType.WMSession = CreateObject("Windream.WMSession", Me.GetCurrentServer) - - Me.oConnect.LoginSession(srchObjectType.WMSession) - - srchObjectType.ClearSearch() - srchObjectType.SearchProfilePath = ProfilePath - srchObjectType.LoadSearchProfile(ProfileName) - - oSearch = srchObjectType.GetSearch() - - Case Else - MsgBox("KEIN GÜLTIGER WINDREAM-SUCHTYP") - Return Nothing - End Select - Dim WMObjects As Object - WMObjects = oSearch.Execute - Return oSearch.execute - - Catch ex As Exception - ' bei einem Fehler einen Eintrag in der Logdatei machen - MsgBox("Fehler in GetSearchDocuments: " & vbNewLine & ex.Message, MsgBoxStyle.Critical) - Return Nothing - End Try - - End If - - Return Nothing - - End Function - Public Function GetSearchDocuments_Objekttype(ByVal wdfLocation As String) - - If System.IO.File.Exists(wdfLocation) Then - - Try - Dim ProfileName = wdfLocation.Substring(wdfLocation.LastIndexOf("\") + 1) - Dim ProfilePath = wdfLocation.Substring(0, wdfLocation.Length - ProfileName.Length) - - - - ' Me.oController.CheckSearchProfile(wdfLocation.ToLower) - ' Dim suchTyp = Me.oController.SearchProfileTargetProgID - 'Dim ExSettings As Object - Dim oSearch As Object - 'ExSettings = Me.oController.SearchProfileExSettings - 'If ExSettings = 0 Then ExSettings = 7 - - Dim srchObjectType As WMOSRCHLib.WMObjectTypeSearch = CreateObject("WMOSrch.WMObjectTypeSearch") - - '' Der öffentliche Member CheckSearchProfile für den Typ IWMQuickSearch7 wurde nicht gefunden. [Microsoft.VisualBasic] => GetSearchDocuments() - - srchObjectType.WMSession = CreateObject("Windream.WMSession", Me.GetCurrentServer) - - Me.oConnect.LoginSession(srchObjectType.WMSession) - - srchObjectType.ClearSearch() - srchObjectType.SearchProfilePath = ProfilePath - srchObjectType.LoadSearchProfile(ProfileName) - - oSearch = srchObjectType.GetSearch() - - - Dim WMObjects As Object - WMObjects = oSearch.Execute - Return oSearch.execute - - Catch ex As Exception - ' bei einem Fehler einen Eintrag in der Logdatei machen - MsgBox("Fehler in GetSearchDocuments()" & vbNewLine & ex.Message, MsgBoxStyle.Critical) - Return Nothing - End Try - - End If - - Return Nothing - - End Function - - ''' - ''' Initialisiert die statische Klasse (Login, Session starten, usw.) - ''' - ''' Liefert True wenn das Anmelden erfolgreich war, sonst False - ''' - Public Shared Function Init() As Boolean - Try - Try - ' Session-Objekt instanziieren und mit dem im Client ausgewählten Server belegen - _session = CreateObject("Windream.WMSession", GetCurrentServer) - LOGGER.Info(" ...windream-Server: '" & GetCurrentServer() & "'") - ' Connection-Objekt instanziieren - oConnect = CreateObject("Windream.WMConnect") - 'MsgBox("windrem init 'ed") - Catch ex As Exception - LOGGER.Info("Windream konnte nicht initiiert werden: " & ex.Message) - LOGGER.Error(ex.Message) - Return False - End Try - - - ' wenn windream nicht angemeldet ist - If Not IsLoggedIn() Then - - ' Art der Anmeldung an windream festlegen - ' 0x0L (also 0) = Standard windream Benutzer - ' WM_ODULE_ID_DOCTYPEEDITOR_LIC = ermöglicht Zugriff auf die windream Management Funktionen (Z.B. zur Verwaltung der windream Dokumententypen, Auswahllisten, etc.) - ' WM_MODULE_ID_INDEXSERVICE = ermöglicht der Session die Indexierungs-Events vom windream DMS-Service zu empfangen - oConnect.ModuleID = 0 - - ' setzt die minimal erwartete windream-Version - oConnect.MinReqVersion = "4" - - ' -- Impersonifizierung nur möglich mit registry-eintrag -- - ' oConnect.UserName "\schulung\windream" - ' oConnect.Password "windream" - - ' Verbindung mit Session-Objekt (und dem ausgewählten Server) aufbauen - oConnect.LoginSession(_session) - If _session.aLoggedin = False Then - MsgBox("Es konnte keine Verbindung mit dem windream-Server hergestellt werden", MsgBoxStyle.Exclamation, "Verbindung konnte nicht hergestellt werden") - Return False - End If - - 'If My.Settings.vDetailLog Then - ' LOGGER.Info(" >> windream-Version: '" & oSession.GetSystemInfo("WindreamVersion") & "'") - 'End If - - ' AUSGABE VON SYSTEMINFORMATIONEN - ' Gibt die Versionsart (Lizenztyp) also Small-Business-Edition (SBE), Small-Business-Extension (SBX) - ' oder Business-Edition (BE) aus - 'MsgBox("WindreamVersion: " & oSession.GetSystemInfo("WindreamVersion") & vbNewLine & "LicenceKey: " & oSession.GetSystemInfo("LicenceKey") & vbNewLine & _ - ' vbNewLine & "LicenceName: " & oSession.GetSystemInfo("LicenceName")) - - 'Dim WMCtrl As AISCONTROLDATACOMLib.AISControlData - 'WMCtrl = New AISCONTROLDATACOMLib.AISControlData - - '' liefert die Versionsnummer des Clients - - 'MsgBox(WMCtrl.WMWorkstationBuildNo) - 'MsgBox(WMCtrl.W - '' liefert den Servernamen des angemeldeten windreams - 'MsgBox(WMCtrl.WMServerName) - - Try - _session.SwitchEvents(WMCOMEventWMSessionNeedIndex, False) - ' der Parameter WMEntityDocument definiert, dass nur Dokumenttypen und keine - ' Ordnertypen ausgelesen werden - _DocumentTypes = _session.GetWMObjectTypes(WINDREAMLib.WMEntity.WMEntityDocument) - Catch ex As Exception - Return False - End Try - - End If - - Return True - - Catch ex As Exception - If Err.Number = -2147220985 Then - MsgBox("Die installierte windream-Version ist nicht ausreichend für den Betrieb der Tool Collection für windream." & vbNewLine & - "Bitte kontaktieren Sie Digital Data." & vbNewLine & vbNewLine & "Fehlernachricht:" & vbNewLine & Err.Description, MsgBoxStyle.Exclamation, "Unzureichende windream-Version") - Else - MsgBox("Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Unexpected error inm Login an windream") - End If - Return False - End Try - - End Function - -#End Region - - - -#Region "+++++ Funktionen die für den Objekttyp relevate Informationen zurückliefern +++++" - - ''' - ''' Liefert alle Objekttypen des aktuellen Servers als windream-Objekte. - ''' - ''' Alle Objekttypen als WMObjects-Objekt - ''' - Public Shared Function GetObjecttypesAsObjects() As WMObjects - Try - Return _DocumentTypes - Catch ex As Exception - MsgBox("Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Unexpected error inm Auslesen der Objekttypen") - Return Nothing - End Try - End Function - - - ''' - ''' Liefert alle Indexe eines Objekttypen. - ''' - ''' Name des Objekttyps - ''' Array mit allen Objekttyp zugeordneten Indexen als String - ''' - Public Shared Function GetIndicesByObjecttype(ByVal Objecttype_name As String) As String() - Try - Dim oObjectType As WMObject - Dim oIndexAttributes As WMObjectRelation - Dim oIndexAttribute As WMObject - Dim oIndex As WMObject - Dim oRelProperties As WMObjectRelationClass - - ' den Objekttyp laden - oObjectType = _session.GetWMObjectByName(WMEntityObjectType, Objecttype_name) - - ' Beziehung zu Indizes des Objekttyp auslesen - oIndexAttributes = oObjectType.GetWMObjectRelationByName("TypeAttributes") - - ' Array für Indizes vorbereiten - Dim aIndexNames(oIndexAttributes.Count - 1) As String - - ' alle Indizes durchlaufen - For j As Integer = 0 To oIndexAttributes.Count - 1 - - ' aktuellen Index auslesen - oIndexAttribute = oIndexAttributes.Item(j) - - ' Eigenschaften des Index auslesen - oRelProperties = oIndexAttribute.GetWMObjectRelationByName("Attribute") - - ' Index aus den Eigenschaften auslesen - oIndex = oRelProperties.Item(0) - 'Dim o = oRelProperties.Item(2) - ' Indexname speichern - aIndexNames(j) = oIndex.aName - Next - 'Indexarray sortiert zurückgeben - Array.Sort(aIndexNames) - ' Indexarray zurückgeben - Return aIndexNames - - Catch ex As Exception - MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error inm Auslesen der windream-Indexe") - Return Nothing - End Try - End Function - - ''' - ''' Überprüft ob der angegebene Index im Objekttyp existiert - ''' - ''' Name des zu durchsuchenden Objekttyps - ''' Name des zu suchenden Indexes - ''' Liefert True wenn der Index im Objekttyp existiert, sonst False - ''' - Public Shared Function ExistIndexInObjekttyp(ByVal objekttyp As String, ByVal indexname As String) As Boolean - Try - Dim indexnamen() As String = GetIndicesByObjecttype(objekttyp) - - If indexnamen Is Nothing Then Return False - - Return indexnamen.Contains(indexname) - Catch ex As Exception - MsgBox("Beim Prüfen ob ein Index für einen Objekttypen existiert, ist ein Fehler aufgetreten." & vbNewLine & vbNewLine & "Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Unexpected error inm Prüfen auf Existenz eines Index in einem Objekttyp") - End Try - - Return False - - End Function - -#End Region - - - -#Region "+++++ Allgemeine Funktionen die Informationen zurückliefern +++++" - - ''' - ''' Liefert True wenn die windream-Session angemeldet ist und False für den Fall, dass die Session nicht eingeloggt ist. - ''' - ''' Anmeldestatus als Boolean - ''' - Public Shared Function IsLoggedIn() As Boolean - Try - Return _session.aLoggedin - Catch ex As Exception - MsgBox("Es konnte nicht erfolgreich geprüft werden, ob das Programm am windream-Server angemeldted ist." & vbNewLine & vbNewLine & "Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Unexpected error in Loggedin-Prüfung") - End Try - - Return False - End Function - - ''' - ''' Liefert den Servernamen an dem windream aktuell angemeldet ist. - ''' - ''' Servername als String - ''' - Public Shared Function GetCurrentServer() As String - Try - Return oBrowser.GetCurrentServer 'ClassWindream.oBrowser.GetCurrentServer - Catch ex As Exception - MsgBox("Der aktuell gewählte windream-Server konnte nicht ausgelesen werden." & vbNewLine & vbNewLine & "Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Unexpected error inm Auslesen des windream-Servers") - End Try - - Return "" - End Function - -#End Region - Public Shared Function Stream_File(ByVal SourceFilePath As String, ByVal NewFileName As String) - _currentWMObject = Nothing - - Dim oWindreamFilename As String = NewFileName - Dim oFileName As String = NewFileName - Dim oWDriveRegex As New Regex("^\w{1}:") - - If oWDriveRegex.IsMatch(NewFileName) Then - oFileName = oWDriveRegex.Replace(NewFileName, vWLaufwerk) - oWindreamFilename = oWDriveRegex.Replace(NewFileName, String.Empty) - Else - oWindreamFilename = NewFileName.Replace(vWLaufwerk, String.Empty) - End If - - 'If NewFileName.StartsWith("W:") Then - ' oFileName = NewFileName.Replace("W:", vWLaufwerk) - ' oWindreamFilename = NewFileName.Replace("W:", String.Empty) - 'Else - ' oWindreamFilename = NewFileName.Replace(vWLaufwerk, String.Empty) - 'End If - - Dim oSourceFilename As String = Path.GetFileName(SourceFilePath) - Dim oDestination As String = Path.GetDirectoryName(oFileName) - - If My.Computer.FileSystem.DirectoryExists(oDestination) = False Then - My.Computer.FileSystem.CreateDirectory(oDestination) - LOGGER.Info(" - Zielverzeichnis neu erzeugt!") - End If - - LOGGER.Info(" ...Stream_File wurde gestartet") - - ' Objekt für Datei und Zielverzeichnis anlegen - - - LOGGER.Info(" ...Quelldatei gelesen") - - If My.Computer.FileSystem.DirectoryExists(oDestination) Then - LOGGER.Info(" ...targetPath existiert") - ' Überprüfen ob der zu Kopieren notwendige Speicherplatz auf Ziellaufwerk vorhanden ist - - Dim oFileInfo As New FileInfo(SourceFilePath) - Dim oFileLength As Long = oFileInfo.Length - - - LOGGER.Info(" ...Datei kopieren von '" & SourceFilePath & "' nach '" & NewFileName & "'.") - Dim Connect - Dim Session - Dim WMObject - Dim aFileIO - Dim aWMStream - Dim wmbrwsr - Dim dmsServer As String - LOGGER.Info(" ...Connect definieren: CreateObject('Windream.WMConnect')") - Connect = CreateObject("Windream.WMConnect") - aFileIO = New WMOTOOLLib.WMFileIO - - wmbrwsr = CreateObject("WMOBrws.ServerBrowser") - '================================================================== - ' get the current DMS-server to log in - '================================================================== - dmsServer = wmbrwsr.GetCurrentServer - '================================================================== - ' create a session - '================================================================== - Session = CreateObject("Windream.WMSession", dmsServer) - '================================================================== - ' login session - '================================================================== - Connect.LoginSession(Session) - Dim LoggedIn = Session.aLoggedin - If LoggedIn Then - LOGGER.Info(" ...Login ok. You are logged in as '" & Connect.UserName & "' on Server '" & dmsServer) - 'MsgBox("Login ok. You are logged in as '" + Connect.UserName + "' on Server '" + dmsServer + "'") - Else - LOGGER.Info(" >> Login on dms-Server failed") - ' MsgBox("Login failed. ") - End If - _session = Session - Const WMCOMEventWMSessionNeedIndex = 1 - - 'windream Objekte erstellen ohne Indexierungs-Event - Session.SwitchEvents(WMCOMEventWMSessionNeedIndex, False) - '================================================================== - ' check if files exist - '================================================================== - LOGGER.Info(" ...ÜBERPRÜFTER DATEINAME => " & oWindreamFilename) - Dim wdFilexists As Boolean - LOGGER.Info(" ...Versuch auf die Datei in W: zuzugreifen und zu sperren...") - wdFilexists = Session.WMObjectExists(WMEntityDocument, oWindreamFilename, 0, 0) - Err.Clear() - If wdFilexists = False Then - LOGGER.Info(" ...Datei ist NICHT vorhanden, kann also einfach neu angelegt werden") - - '================================================================== - ' create an object - '================================================================== - WMObject = Session.GetNewWMObjectFS(WMEntityDocument, oWindreamFilename, WMObjectEditModeObject) 'WMEntityDocument, windreamFilename, WMObjectEditModeObject - If Err.Number > 0 Then - LOGGER.Info(" FEHLER: WMObject konnte nicht erzeugt werden - Error: '" & Err.Description & "'") - 'MsgBox(Err.Description) - End If - ' MsgBox("Created file: " + windreamFilename) - Else - ' wenn auf die Datei zugeriffen werden konnte ist sie bereits vorhanden -> Datum anhängen - LOGGER.Info(" ...Es konnte zugegriffen werden -> DATEI IST BEREITS VORHANDEN") - - - Select Case CURRENT_DOKART_DUPLICATE_HANDLING - - Case "New version" - LOGGER.Info("Creating new version of file [{0}]", NewFileName) - oWindreamFilename = ClassFilehandle.Versionierung_Datei(NewFileName).ToString.Substring(2) - CURRENT_NEWFILENAME = oWindreamFilename - Case "Question" - Dim oMessage = $"Eine Datei mit identischem Namen {vbNewLine}'{NewFileName}'{vbNewLine}existiert bereits!{vbNewLine}Wollen Sie die bestehende Datei ersetzen?" - If USER_LANGUAGE <> "de-DE" Then - oMessage = $"There is already a file with the name {NewFileName}!{vbNewLine}Would You like to replace the file?" - End If - - Dim oResult = MessageBox.Show(oMessage, "File exists", MessageBoxButtons.YesNo, MessageBoxIcon.Question) - - If oResult = DialogResult.No Then - oWindreamFilename = ClassFilehandle.Versionierung_Datei(NewFileName).ToString.Substring(2) - Else - If Delete_WDFile(oWindreamFilename) = False Then - Return False - End If - End If - Case Else - If Delete_WDFile(oWindreamFilename) = False Then - Return False - End If - End Select - - WMObject = Session.GetNewWMObjectFS(1, oWindreamFilename, 31) 'WMEntityDocument, windreamFilename, WMObjectEditModeObject - If Err.Number > 0 Then - LOGGER.Info(" FEHLER: Neues WMObject (Kopie) konnte nicht erzeugt werden - Error: '" & Err.Description & "'") - 'MsgBox(Err.Description) - End If - LOGGER.Info(" ...WMObject zugewiesen") - End If - LOGGER.Info(" ...ENDGÜLTIGER DATEINAME => " & oWindreamFilename) - If WMObject IsNot Nothing Then - 'NewFileName = vWLaufwerk & ":" & oWindreamFilename - ' lock object for file system access (to change the file itself) - WMObject.lock() - ' set fileIO the local source file - aFileIO.bstrOriginalFileName = SourceFilePath - If Err.Number > 0 Then - LOGGER.Info(" FEHLER: fileIO konnte nicht gesetzt werden - Datei wird wieder gelöscht - Error: '" & Err.Description & "'") - LOGGER.Info(" HINWEIS: Überprüfen Sie den Verweis auf die Bibliotheken 'WMOTool.WMFileIO' UND 'WMOTOOLLib.WMFileIO' und ändern diese in den Anwendungseinstellungen (DLL_WMOTOOL)'") - WMObject.Unlock() - Delete_WDFile(oWindreamFilename) - - Return False - ' MsgBox(Err.Description) - End If - ' open the windream object's file stream for writing - aWMStream = WMObject.OpenStream(STREAM_BinaryObject, WMObjectStreamOpenModeReadWrite) - If Err.Number > 0 Then - LOGGER.Info(" Unexpected error in OpenStream - Datei wird wieder gelöscht - Error: '" & Err.Description & "'") - WMObject.Unlock() - Delete_WDFile(oWindreamFilename) - Return False - 'MsgBox(Err.Description) - End If - LOGGER.Info(" ...oWMStream erzeugt") - ' give fileIO helper object the windream stream - aFileIO.aWMStream = aWMStream - If Err.Number > 0 Then - LOGGER.Info(" Unexpected error in Zuweisen aWMStream zu aFileIO - Datei wird wieder gelöscht - Error: '" & Err.Description & "'") - WMObject.Unlock() - Delete_WDFile(oWindreamFilename) - Return False - 'MsgBox(Err.Description) - End If - ' let fileIO object import the original file into windream - aFileIO.ImportOriginal(True) - If Err.Number > 0 Then - LOGGER.Info(" Unexpected error in FileIO.ImportOriginal(True) - Datei wird wieder gelöscht - Error: '" & Err.Description & "'") - WMObject.Unlock() - Delete_WDFile(oWindreamFilename) - Return False - ' MsgBox(Err.Description) - End If - LOGGER.Info(" ...Inhalt der Datei konnte übertragen werden") - ' close the windream file stream - aWMStream.Close() - If Err.Number > 0 Then - LOGGER.Info(" Unexpected error in aWMStream.Close() - Datei wird wieder gelöscht - Error: '" & Err.Description & "'") - WMObject.Unlock() - Delete_WDFile(oWindreamFilename) - Return False - 'MsgBox(Err.Description) - End If - ' save new windream object - WMObject.save() - If Err.Number > 0 Then - LOGGER.Info(" Unexpected error in WMObject.save - Datei wird wieder gelöscht - Error: '" & Err.Description & "'") - WMObject.Unlock() - Delete_WDFile(oWindreamFilename) - Return False - 'MsgBox(Err.Description) - End If - LOGGER.Info(" ...Datei konnte gespeichert werden") - ' unlock the windream object - WMObject.unlock() - If Err.Number > 0 Then - LOGGER.Info(" Unexpected error in WMObject.unlock - Datei wird wieder gelöscht - Error: '" & Err.Description & "'") - WMObject.Unlock() - Delete_WDFile(oWindreamFilename) - Return False - 'MsgBox(Err.Description) - End If - 'DATEI GRÖSSE ERMITTELN - MANCHMAL KOMMT ES VOR DAS DATEIGRÖße 0 ist - Dim info2 As New FileInfo(oFileName) - Dim length1 As Long = info2.Length - LOGGER.Info(" ...Length der Zieldatei: " & length1.ToString) - If oFileLength > 0 And Err.Number = 0 Then - - 'Dim p As String - 'If oWindreamFilename.StartsWith("\") Then - ' If oWindreamFilename.StartsWith("\\") Then - ' p = oWindreamFilename.Replace("\\", "\") - ' Else - ' p = oWindreamFilename - ' End If - 'Else - ' p = "\" & oWindreamFilename - 'End If - 'CURRENT_NEWFILENAME = vWLaufwerk & ":" & p - - CURRENT_NEWFILENAME = oFileName - - LOGGER.Info(" >> Datei '" & CURRENT_NEWFILENAME & "' wurde erfolgreich importiert!") - _currentWMObject = WMObject - Return True - Else - Delete_WDFile(oWindreamFilename) - LOGGER.Info("Error Number: [{0}]", Err.Number) - LOGGER.Info(" Unexpected error in Datei-Übertragen - FileLength ist 0, Übertragene Datei wurde gelöscht") - Return False - End If - Else - LOGGER.Info(" Could not create a WMObject for file:'" & oWindreamFilename) - If Not Err() Is Nothing Then - If Not Err.Description Is Nothing Then - LOGGER.Info(Err.Description) - End If - End If - Return False - End If - Else - LOGGER.Info("...targetPath existiert NICHT") - Return False - End If - - End Function - Public Shared Function Delete_WDFile(ByVal WD_File As String) - Try - If Not WD_File.StartsWith("\") Then - WD_File = WD_File.Substring(2) - End If - Dim WMObject As WINDREAMLib.WMObject '= CreateObject("WINDREAMLib.WMObject") 'New WINDREAMLib.WMObject - Try - WMObject = _session.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, WD_File) 'WINDREAMLib.WMEntity.WMEntityDocument - Catch ex As Exception - LOGGER.Info(">> Could not create WMObject for file '" & WD_File & "' - so it is not existing") - LOGGER.Error(ex.Message) - Return False - End Try - - LOGGER.Info(" >> Deleting started - Object created") - WMObject.Delete() - Return True - Catch ex As Exception - MsgBox("Unexpected Error in Delete_WDFile: " & vbNewLine & ex.Message, MsgBoxStyle.Critical) - LOGGER.Info("Unexpected Error in Delete_WDFile: " & ex.Message) - Return False - End Try - End Function - ''' - ''' Übergibt einer in windream gespeicherten Datei Indexwerte - ''' - ''' Name der zu indexierenden Datei - ''' neuer Name der zu indexierenden Datei - ''' Liefert True wenn das Indexieren erfolgreich war, sonst False - ''' - Public Shared Function DateiIndexieren(ByVal WD_File As String, ByVal _Indexname As String, ByVal _Value As String) - Try - - LOGGER.Info(" ...DateiIndexieren wurde aufgerufen") - WD_File = WD_File.Substring(2) - Dim WMObject As WINDREAMLib.WMObject '= CreateObject("WINDREAMLib.WMObject") 'New WINDREAMLib.WMObject - 'MsgBox("DateiIndexieren:" & vbNewLine & ClassDateiimportWindream.GetWindreamDriveLetter & filenameZiel & vbNewLine & Me.selectedProfile.DokumenttypString) - ' den Dokumenttyp schreiben - LOGGER.Info(" ## Indexieren wird gestartet ##") - ' ein windream-Objekt der Datei anlegen - WMObject = _currentWMObject 'oSession.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, WD_File) - Try - LOGGER.Info(" ...Datei wird gesperrt") - ' die Datei sperren - WMObject.lock() - Catch ex As Exception - LOGGER.Info(" ...Datei ist bereits gesperrt") - ' nichts tun (Datei ist bereits gesperrt) - End Try - - If IsNothing(WMObject) Then - LOGGER.Info(" ...Windream Object ist nothing, Indexierung wird abgebrochen") - Return False - End If - - If IsNothing(WMObject.aObjectType) Then - LOGGER.Info(" ...Kein Objekttyp gesetzt, Indexierung wird abgebrochen") - Return False - End If - - LOGGER.Info($" ...Objekttyp wird gesetzt: " & _WDObjekttyp) - ' wenn der Datei noch kein Dokumenttyp zugewiesen wurde - If WMObject.aObjectType.aName = "Standard" Then - - ' ihr den entsprechenden Dokumenttyp zuweisen - WMObject.aObjectType = _session.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityObjectType, _WDObjekttyp) - ' WMObject.aObjectType = Me.selectedProfile.Dokumenttyp - LOGGER.Info(" ...Objekttyp wurde gesetzt") - Else - LOGGER.Info(" ...Objekttyp war bereits gesetzt") - End If - - Try - WMObject.Save() - Catch ex As Exception - ' wenn es einen Unexpected error inm speichern gab, dann konnte auch kein Dokumenttyp gesetzt werden -> es kann also auch keine - ' Indexierung stattfinden und die Indexierung muss nicht fortgesetzt werden - Return False - End Try - - Try - WMObject.unlock() - Catch ex As Exception - ' wenn das entsperren nicht geklappt hat, dann war die Datei auch nicht gesperrt - End Try - LOGGER.Info(" ...Datei wurde gespeichert / Unlock wurde durchgeführt") - ' wenn bis hierher alles geklappt hat wurde ein Dokumenttyp übergeben - - LOGGER.Info(" ...Objekttyp: " & _WDObjekttyp) - - - ' wenn keine Werte vorhanden sind, soll wenigstens der Dokumenttyp eingetragen werden - - Dim indexe As String = "" - - LOGGER.Info(" ...Indexname: '" & _Indexname & "'") - Dim werte = New ArrayList - If (GetTypeOfIndexAsIntByName(_Indexname) = WMObjectVariableValueTypeVector) Or GetTypeOfIndexAsIntByName(_Indexname) = 4097 Then - LOGGER.Info(" ...Es handelt sich um ein Vektor-Feld") - - - 'Am 04.08.2014 aktualisiert: um zu verhindern das die vorangegangene Versionierung "Tilde-Werte" schreibt - LOGGER.Info(" ...Wert vor Überprüfung: " & _Value) - _Value = CheckIndexValue(_Value) - 'Ausstieg da Fehler in der Überprüfung - If _Value Is Nothing Then - Return False - End If - LOGGER.Info(" ...Value für Indexierung: " & _Value) - werte.Add(_Value) - - LOGGER.Info(" ...Werte zu Array hinzugefügt!") - Else - 'Am 04.08.2014 aktualisiert: um zu verhindern das die vorangegangene Versionierung "Tilde-Werte" schreibt - LOGGER.Info(" ...Value vor Überprüfung: " & _Value) - _Value = CheckIndexValue(_Value) - 'Ausstieg da Fehler in der Überprüfung - If _Value Is Nothing Then - Return False - End If - LOGGER.Info(" ...Value für Indexierung: " & _Value) - werte.Add(_Value) - - End If - - Dim arrIndex() As String = Nothing - Dim arrValue() As String = Nothing - ReDim Preserve arrIndex(0) - ReDim Preserve arrValue(0) - arrIndex(0) = _Indexname - arrValue(0) = _Value - Return RunIndexing(WMObject, arrIndex, arrValue) - - Catch ex As Exception - LOGGER.Info("Hinweis: Die Datei " & WD_File & " konnte nicht indexiert werden.") - LOGGER.Error(ex.Message) - LOGGER.Info("Fehler: " & ex.Message) - ' Me.TreeNodeInfos.Add(temp) - Return False - End Try - End Function - Private Shared Function RunIndexing(ByVal oDocument As WMObject, ByVal Indizes() As String, ByVal aValues() As Object) - Dim vektInsState As Integer = 1 - Try - If Indizes IsNot Nothing And aValues IsNot Nothing Then - If Not oDocument.aLocked Then - oDocument.lock() - Dim i As Integer = 0 - Dim indexname As String - If aValues.Length = 1 And aValues(0) = "" Then - LOGGER.Info(" ...Indexwert ist leer/Nothing - Keine Nachindexierung") - End If - ' wenn der Datei noch kein Dokumenttyp zugewiesen wurde - If oDocument.aObjectType.aName <> _WDObjekttyp Then - ' ihr den entsprechenden Dokumenttyp zuweisen - oDocument.aObjectType = _session.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityObjectType, _WDObjekttyp) - ' WMObject.aObjectType = Me.selectedProfile.Dokumenttyp - LOGGER.Info(" ...Objekttyp '" & oDocument.aObjectType.aName & "' wurde in '" & _WDObjekttyp & "' geändert.") - Else - LOGGER.Info(" ...Objekttyp war bereits gesetzt") - End If - - Try - oDocument.Save() - Catch ex As Exception - ' wenn es einen Unexpected error inm speichern gab, dann konnte auch kein Dokumenttyp gesetzt werden -> es kann also auch keine - ' Indexierung stattfinden und die Indexierung muss nicht fortgesetzt werden - Return False - End Try - - 'Jetzt jeden Indexwert durchlaufen - For Each aName As String In Indizes - indexname = aName - If LogErrorsOnly = False Then - LOGGER.Info(" ") - LOGGER.Info(" >> Indexierung von Index '" & indexname & "'") - End If - ' das entsprechende Attribut aus windream auslesen - Dim oAttribute = _session.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, Indizes(i)) - ' den Variablentyp (String, Integer, ...) auslesen - Dim vType = oAttribute.getVariableValue("dwAttrType") - ' wenn in aValues an Position i ein Wert steht - If IsNotEmpty(aValues(i)) Then - Dim _int As Boolean = False - Dim _date As Boolean = False - Dim _dbl As Boolean = False - Dim _bool As Boolean = False - 'If indexname = "Tournr" Then - ' MsgBox("Index: " & indexname & vbNewLine & "wert: " & aValues(i), MsgBoxStyle.Information, "Index: " & aName.ToString) - 'End If - - - 'MsgBox(oDocument.aName & vbNewLine & aValues(i) & vbNewLine & vType, MsgBoxStyle.Exclamation, "Zeile 87") - Dim value = aValues(i) - Dim convertValue - Dim vektor As Boolean = False - 'Den Typ des Index-Feldes auslesen - 'MsgBox(value.GetType.ToString) - Select Case (vType) - 'Case WMObjectVariableValueTypeUndefined - Case WMObjectVariableValueTypeString - LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeString") - convertValue = CStr(value) - Case WMObjectVariableValueTypeInteger - LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeInteger") - value = value.ToString.Replace(" ", "") - If IsNumeric(value) = False Then - LOGGER.Info(" ...Achtung: Value '" & value & "' kann nicht in Zahl konvertiert werden!") - End If - value = value.ToString.Replace(" ", "") - convertValue = CInt(value) - _int = True - Case WMObjectVariableValueTypeFloat - LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeFloat") - value = value.ToString.Replace(" ", "") - convertValue = CDbl(value) - Case WMObjectVariableValueTypeFixedPoint - LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeFixedPoint") - value = value.ToString.Replace(" ", "") - convertValue = CDbl(value) - _dbl = True - Case WMObjectVariableValueTypeBoolean - LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeBoolean") - convertValue = CBool(value) - _bool = True - Case WMObjectVariableValueTypeDate - LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeDate") - _date = True - 'Dim _date As Date = value - convertValue = value - Case WMObjectVariableValueTypeTimeStamp - LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeTimeStamp") - convertValue = value - Case WMObjectVariableValueTypeCurrency - LOGGER.Info(" - Typ des windream-Indexes: WMObjectVariableValueTypeCurrency") - 'Wegen currency muß ein eigenes Objekt vom typ Variant erzeugt werden - Dim aValueWrapper As System.Runtime.InteropServices.CurrencyWrapper = New System.Runtime.InteropServices.CurrencyWrapper(CDec(value)) - convertValue = aValueWrapper - Case WMObjectVariableValueTypeTime - LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeTime") - 'If ((value)) Then - ' convertValue = CDate(value) - 'Else - ' convertValue = "" - 'End If - 'Dim _date As Date = value - convertValue = convertValue '*_date.ToShortTimeString - Case WMObjectVariableValueTypeFloat - LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeFloat") - convertValue = CStr(value) - Case WMObjectVariableValueTypeVariant - LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeVariant") - convertValue = CStr(value) - Case WMObjectVariableValueTypeFulltext - LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeFulltext") - convertValue = CStr(value) - Case 4097 - vektor = True - LOGGER.Info(" ...Typ des windream-Indexes: 4097 Vektor alphanumerisch") - 'Vektor alphanumerisch - convertValue = CStr(value) - Case 4098 - vektor = True - LOGGER.Info(" ...Typ des windream-Indexes: 4098 Vektor Numerisch") - 'Vektor Numerisch - convertValue = CStr(value) - Case 4099 - vektor = True - LOGGER.Info(" ...Typ des windream-Indexes: 4099 Vektor Kommazahl") - 'Vektor Kommazahl - convertValue = CStr(value) - Case 4101 - vektor = True - LOGGER.Info(" ...Typ des windream-Indexes: 4101 Vektor Date") - 'Vektor Kommazahl - convertValue = CStr(value) - Case 4103 - vektor = True - LOGGER.Info(" ...Typ des windream-Indexes: 4103 Vektor DateTime") - 'Vektor DateTime - convertValue = CStr(value) - Case 4107 - vektor = True - LOGGER.Info(" ...Typ des windream-Indexes: 4107 Integer 64bit") - convertValue = CStr(value) - Case 36865 - vektor = True - LOGGER.Info(" ...Typ des windream-Indexes: 36865 Vektor alphanumerisch") - 'Vektor Kommazahl - convertValue = CStr(value) - Case Else - LOGGER.Info(" ...Typ des windream-Indexes konnte nicht bestimmt werden!") - LOGGER.Info(" ...Versuch des Auslesens (vType): " & vType) - 'MsgBox(vType & vbNewLine & CStr(value), MsgBoxStyle.Exclamation, "Marlon-Case Else") - convertValue = "" - End Select - If vektor = False Then - If convertValue.ToString Is Nothing = False Then - LOGGER.Info(" ...Konvertierter Wert: '" & convertValue.ToString & "'") - End If - End If - '############################################################################################ - '####################### Der eigentliche Indexierungsvorgang ################################ - '############################################################################################ - If vektor = False Then - If convertValue.ToString Is Nothing = False Then - LOGGER.Info(" ...Versuch dem Dok einen Index zuzuweisen: oDocument.SetVariableValue(" & aName & ", " & convertValue & ")") - If _int = True Then - convertValue = convertValue.ToString.Replace(" ", "") - oDocument.SetVariableValue(aName, CInt(convertValue)) - ElseIf _date = True Then - oDocument.SetVariableValue(aName, CDate(convertValue)) - ElseIf _bool Then - oDocument.SetVariableValue(aName, CBool(convertValue)) - ElseIf _dbl Then - convertValue = convertValue.ToString.Replace(" ", "") - oDocument.SetVariableValue(aName, CDbl(convertValue)) - Else - oDocument.SetVariableValue(aName, convertValue) - End If - 'Die Datei speichern - oDocument.Save() - - If LogErrorsOnly = False Then - LOGGER.Info(" ...Index '" & aName & "' wurde geschrieben") - LOGGER.Info("") - End If - Else - LOGGER.Info(" >> Kein Indexwert vorhanden") - End If - Else - 'VEKTORFELDER, ALSO ÜBERPRÜFEN OB ERGEBNIS-ARRAY GEFÜLLT IST - LOGGER.Info(" >> VEKTORFELD: Vorbereiten des Arrays") - - Dim myArray() - - - - 'For Each row As DataRow In DT.Rows - 'MsgBox(aName & vbNewLine & row.Item("Indexname") & vbNewLine & CStr(row.Item("Wert"))) - 'Next - Dim Anzahl As Integer = aValues.Length - 'Vektorfeld wird mit EINEM Wert gefüllt - If Anzahl = 1 Then - LOGGER.Info(" >> Vektorfeld wird mit EINEM Wert gefüllt ") - ReDim myArray(0) - Select Case vType - Case 36865 - 'Umwandeln in String - myArray(0) = CStr(value) - Case 4097 - 'Umwandeln in String - myArray(0) = CStr(value) - Case 4098 - 'Umwandeln in Integer - value = value.ToString.Replace(" ", "") - myArray(0) = CInt(value) - Case 4099 - Dim Str As String = value - Str = Str.ToString.Replace(" ", "") - 'Umwandeln in Double - myArray(0) = CDbl(Str.Replace(".", ",")) - Case 4101 - 'Umwandeln in Date - myArray(0) = CDate(value) - Case 4107 - myArray(0) = Convert.ToInt64(value) - Case 4103 - 'Umwandeln in Datum Uhrzeit - myArray(0) = value - Case Else - 'Umwandeln in String - myArray(0) = CStr(value) - End Select - - 'Jetzt überprüfen ob Werte in Vektorfeld angefügt oder überschrieben werden sollen - LOGGER.Info(" >> Konvertierter Wert: " & myArray(0).ToString) - - Dim VektorArray() - - 'Immer anfügen - LOGGER.Info(" >> Check Existing Vektorvalues") - - Dim indicies As New List(Of Object) - - For Each element In myArray - If TypeOf element Is String Then - Dim splitted = element.ToString.Split(ClassConstants.VECTORSEPARATOR) - For Each s In splitted - indicies.Add(s) - Next - Else - indicies.Add(element) - End If - Next - - myArray = indicies.ToArray() - - VektorArray = Return_VektorArray(oDocument, aName, myArray) - - If VektorArray Is Nothing = False Then - ReDim myArray(VektorArray.Length - 1) - Array.Copy(VektorArray, myArray, VektorArray.Length) - - 'Jetzt die Nachindexierung für Vektor-Felder - oDocument.SetVariableValue(aName, myArray) - 'myArray) - LOGGER.Info(" >> 'SetVariableValue' für VEKTOR mit einem Wert erfolgreich") - - 'Die Änderungen festsschreiben/speichern - oDocument.Save() - - End If - Else - LOGGER.Info(" >> Vektorfeld wird mit MEHREREN Werten gefüllt ") - ' das ausgewählte Profil in _selectedProfile laden - - - 'Die Größe des Arrays festlegen - ReDim myArray(Anzahl - 1) - Dim i1 As Integer = 0 - 'Die Datatable durchlaufen und Werte für den Index in Array schreiben - For Each obj In myArray - myArray(i1) = CStr(obj) - LOGGER.Info(" >> Wert (" & i1 & ") aus Datatable: '" & myArray(i1).ToString & "'") - i1 = i1 + 1 - Next - LOGGER.Info(" >> Array wurde erfolgreich erzeugt") - - - Dim VektorArray() - - VektorArray = Return_VektorArray(oDocument, aName, myArray) - - If VektorArray Is Nothing = False Then - 'Das Array wieder anpassen - ReDim myArray(VektorArray.Length - 1) - 'Array.Copy(VektorArray, myArray, VektorArray.Length) - i1 = 0 - For Each _value As Object In VektorArray - Select Case vType - Case 36865 - myArray(i1) = CStr(_value) - Case 4097 - myArray(i1) = CStr(_value) - Case 4098 - Dim v As String = _value.ToString.Replace(" ", "") - myArray(i1) = CInt(v) - Case 4099 - 'Vektroryp Double - Dim Str As String = _value - Str = Str.ToString.Replace(" ", "") - myArray(i1) = CDbl(Str.Replace(".", ",")) - Case 4101 - 'Vektortyp DATE - Dim dat As String = _value - myArray(i1) = CDate(dat.Replace(".", ",")) - Case 4107 - myArray(i1) = Convert.ToInt64(_value) - Case Else - 'Vektortyp ALPHANUMERISCH - 'Die Größe des Arrays festlegen - myArray(i1) = CStr(myArray(0)) - End Select - LOGGER.Info(" >> Konvertierter Wert (" & i1 & ") : '" & myArray(i1).ToString & "'") - i1 += 1 - Next - 'Jetzt die Nachindexierung für Vektor-Felder - Try - oDocument.SetVariableValue(aName, myArray) - Catch ex As Exception - LOGGER.Info("RunIndexing -Unexpected error in indexing Vectorfield: " & ex.Message) - LOGGER.Error(ex.Message) - oDocument.Save() - oDocument.unlock() - Return False - End Try - - LOGGER.Info(" >> 'SetVariableValue' für VEKTOR erfolgreich") - - ' oDocument.LockRights() - - 'Die Änderungen festsschreiben/speichern - oDocument.Save() - LOGGER.Info(">> Indexierung erfolgreich beendet (Save ...") - Else - LOGGER.Info(" - Achtung: VektorArray Is NOTHING") - oDocument.Save() - Return True - End If - End If - End If - End If - - i += 1 - - Next - oDocument.unlock() - If LogErrorsOnly = False Then - LOGGER.Info(">> ...und Unlock durchgeführt)") - LOGGER.Info("") - End If - Return True - Else - LOGGER.Info(" >> Dokument ist gesperrt, Indexierung erst im nächsten Durchlauf!") - 'oDocument.unlock() - Return False - End If - End If - Catch ex As Exception - LOGGER.Info("ClassNiWindream.RunIndexing: " & ex.Message) - LOGGER.Error(ex.Message) - oDocument.Save() - oDocument.unlock() - Return False - End Try - End Function - Private Shared Function Return_VektorArray(ByVal oDocument As WMObject, vktIndexName As String, NIIndexe As Object) - Try - Dim missing As Boolean = False - Dim Anzahl As Integer = 0 - Dim ValueArray() - 'Jeden Wert des Vektorfeldes durchlaufen - Dim wertWD = oDocument.GetVariableValue(vktIndexName) - If wertWD Is Nothing = False Then - 'Nochmals prüfen ob wirklich Array - If wertWD.GetType.ToString.Contains("System.Object") Then - 'Keine Duplikatprüfung also einfach neues Array füllen - LOGGER.Info(" >> Duplikatprüfung soll durchgeführt werden.") - 'Duplikat Prüfung an, also nur anhängen wenn Wert <> - For Each WDValue As Object In wertWD - If WDValue Is Nothing = False Then - 'Erst einmal die ALten Werte schreiben - ReDim Preserve ValueArray(Anzahl) - 'Den Wert im Array speichern - ValueArray(Anzahl) = WDValue.ToString - Anzahl += 1 - End If - Next - 'Jetzt die Neuen Werte auf Duplikate überprüfen - For Each NewValue As Object In NIIndexe - If NewValue Is Nothing = False Then - If ValueArray.Contains(NewValue) = False Then - 'Das Array anpassen - ReDim Preserve ValueArray(Anzahl) - 'Den Wert im Array speichern - ValueArray(Anzahl) = NewValue.ToString - Anzahl += 1 - Else - LOGGER.Info(" >> Value '" & NewValue.ToString & "' bereits in Vektorfeld enthalten") - End If - End If - Next - - End If - Else - LOGGER.Info(" >> Vektorfeld ist noch leer....") - 'Den/die Neuen Wert(e) anfügen - For Each NewValue As Object In NIIndexe - If NewValue Is Nothing = False Then - - If ValueArray Is Nothing = False Then - If ValueArray.Contains(NewValue) = False Then - 'Das Array anpassen - ReDim Preserve ValueArray(Anzahl) - 'Den Wert im Array speichern - ValueArray(Anzahl) = NewValue.ToString - Anzahl += 1 - Else - LOGGER.Info(" >> Value '" & NewValue.ToString & "' bereits in Array enthalten") - End If - Else 'Dererste Wert, also hinzufügen - 'Das Array anpassen - ReDim Preserve ValueArray(Anzahl) - 'Den Wert im Array speichern - ValueArray(Anzahl) = NewValue.ToString - Anzahl += 1 - - End If - - End If - Next - End If - - Return ValueArray - Catch ex As Exception - LOGGER.Info("Unexpected Error in ClassWindream.Return_VektorArray: " & ex.Message) - LOGGER.Error(ex.Message) - End Try - - - End Function - Private Shared Function IsNotEmpty(ByVal aValue As Object) - - If aValue IsNot Nothing Then - Dim itsType As Type = aValue.GetType - If itsType Is GetType(String) Then - - If Not aValue = "" Then - Return True - End If - - Return False - Else - Return True - End If - Else - Return False - End If - - End Function - ''' - ''' Führt das eigendliche Indexieren aus - ''' - ''' - ''' der zu indexierenden Datei - ''' Name des zu indexierenden Indexfeldes - ''' Der Wert/die Werte die dem Index zugewiesen werden sollen - ''' Liefert True wenn das Indexieren erfolgreich war, sonst False - ''' - Public Shared Function Indexiere(ByVal filenameZiel As String, ByVal index As String, ByVal werte As Object) As Boolean - LOGGER.Info(" - In Indexierungsvorgang für: " & filenameZiel) - Try - Dim WMObject As WINDREAMLib.WMObject = Nothing '= CreateObject("WINDREAMLib.WMObject") '= New WINDREAMLib.WMObject 'CreateObject("WINDREAMLib.WMObject") - 'MsgBox("Indexiere: " & vbNewLine & filenameZiel) - 'werte Is Nothing Or _ - ' überprüfen ob alle notwendigen Informationen angegeben wurden (sonst abbrechen) - If filenameZiel Is Nothing Or - filenameZiel = "" Or - index Is Nothing Or - index = "" Or - Not ExistIndexInObjekttyp(_WDObjekttyp, index) Then - LOGGER.Info("=> Hinweis: Die Datei wurde auf Grund eines Problems in der Initialisierung nicht vollständig indexiert.") - Return False - End If - - Dim fileExists As Boolean - - ' prüfen ob die zu indexierende Datei existiert - fileExists = My.Computer.FileSystem.FileExists(vWLaufwerk & ":" & filenameZiel) '_windream.GetWindreamDriveLetter - - Dim an As Integer = 0 - Do While My.Computer.FileSystem.FileExists(vWLaufwerk & ":" & filenameZiel) = False - If an > 500 Then - fileExists = False - Exit Do - Else - LOGGER.Info(" Achtung: Datei exisitiert noch nicht: " & My.Computer.Clock.LocalTime) - End If - an = an + 1 - Loop - ' wenn die Datei existiert - If fileExists Then - WMObject = _session.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, filenameZiel) - - ' eine Variable für den umgewandelten Indexwert anlegen (kein Typ, da noch unklar ist was reingeschrieben wird) - 'Dim convertValue = Nothing - - ' den Typ des Zielindexes auslesen - Dim TypDesIndexes As Integer - - Try - - ' ein windream-Objekt der Datei anlegen - WMObject = _session.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, filenameZiel) - If LogErrorsOnly = False Then - LOGGER.Info(" - windream-Objekt der Datei erzeugt") - LOGGER.Info(" - Ziel: W:\" & filenameZiel) - End If - - 'Me.singleInfoNode.Add("Ziel: " & ClassDateiimportWindream.GetWindreamDriveLetter & filenameZiel) - - Try - ' die Datei sperren - WMObject.lock() - - 'WMObject.LockFor(WINDREAMLib.WMObjectEditMode.WMObjectEditModeObject) - Catch ex As Exception - - End Try - - ' wenn der Datei noch kein Dokumenttyp zugewiesen wurde - If WMObject.aObjectType.aName = "Standard" Then - ' ihr den entsprechenden Dokumenttyp zuweisen - WMObject.aObjectType = _session.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityObjectType, _WDObjekttyp) - ' WMObject.aObjectType = Me.selectedProfile.Dokumenttyp - End If - - - ' wenn keine Werte vorhanden sind, soll wenigstens der Dokumenttyp eingetragen werden - If werte Is Nothing Then - - Try - WMObject.Save() - WMObject.unlock() - Catch ex As Exception - - End Try - - Return Nothing - End If - - ' den Typ des Zielindexes auslesen - TypDesIndexes = GetTypeOfIndexAsIntByName(index) - - ' wenn es sich bei dem Index NICHT um ein Vektorfeld handelt - If TypDesIndexes < WMObjectVariableValueTypeVector Then - LOGGER.Info(" - Bei dem Zielindex handelt es sich um einen Einzelindex.") - Else - LOGGER.Info(" Bei dem Zielindex handelt es sich um ein Vektorfeld.") - ' ein Backup der Indexwerte anlegen - Dim temp As Object = werte - ' und die eigendliche Variable zurücksetzen - werte = Nothing - ' dann soll nur der letzte Wert des Arrays übernommen werden, damit nicht versucht wird ein - ' Array in einen Einzelindex zu speichern - werte = temp - LOGGER.Info(" - Array geleert und erneuert!") - End If - Catch ex As Exception - LOGGER.Info("Hinweis: Beim Initialisieren der Datei auf dem windream-Laufwerk ist ein Fehler aufgetreten.") - LOGGER.Error(ex.Message) - Return False - End Try - - - 'Try - ' den Typ des Zielindexes - LOGGER.Info(" - Typ des Indexes: " & TypDesIndexes.ToString) - Select Case (TypDesIndexes) - Case WMObjectVariableValueTypeUndefined ' zu klären !!!! - 'convertValue = vbEmpty - Case WMObjectVariableValueTypeString - ''Führende Nullen Entfernen - 'If werte.ToString.StartsWith("0") Then - ' Dim wert As String = CStr(CInt(werte.ToString)) - ' convertValue = wert - ' LOGGER.Info(" - Führende Nullen wurden entfernt") - 'Else - ' Dim wert As String = CStr(CInt(werte.ToString)) - ' convertValue = wert - 'End If - 'If convertValue.ToString.Contains("~1") Then - ' convertValue = convertValue.ToString.Replace("~1", "") - 'End If - 'If convertValue.ToString.Contains("~2") Then - ' convertValue = convertValue.ToString.Replace("~2", "") - 'End If - 'If convertValue.ToString.Contains("~3") Then - ' convertValue = convertValue.ToString.Replace("~3", "") - 'End If - 'If convertValue.ToString.Contains("~4") Then - ' convertValue = convertValue.ToString.Replace("~4", "") - 'End If - - Case WMObjectVariableValueTypeInteger - ' convertValue = CInt(werte) - Case WMObjectVariableValueTypeFloat - werte = werte.ToString.Replace(".", ",") - 'convertValue = CDbl(werte) - - Case WMObjectVariableValueTypeBoolean - Try - ' convertValue = CBool(werte) - Catch ex As Exception - ' Nothing zuweisen damit SetVariableValue nicht ausgeführt wird - 'convertValue = Nothing - End Try - Case WMObjectVariableValueTypeDate - If (IsDate(werte)) Then - ' convertValue = CDate(werte) - Else - ' convertValue = vbEmpty - End If - - Case WMObjectVariableValueTypeFixedPoint - werte = werte.ToString.Replace(".", ",") - ' convertValue = CDbl(werte) - - Case WMObjectVariableValueTypeTimeStamp - Dim timestamp As Integer = GetTimestamp(werte) - If timestamp > 0 Then - ' convertValue = timestamp - Else - ' convertValue = vbEmpty - End If - - Case WMObjectVariableValueTypeCurrency - Dim aValue As System.Runtime.InteropServices.CurrencyWrapper = New System.Runtime.InteropServices.CurrencyWrapper(werte) - ' convertValue = aValue - - Case WMObjectVariableValueTypeTime - If (IsDate(werte)) Then - ' convertValue = CDate(werte) ' ggf. aber nur die Zeit - Else - ' convertValue = vbEmpty - End If - - Case WMObjectVariableValueTypeVariant - ' convertValue = werte - - Case WMObjectVariableValueTypeMask ' zu klären !!!! - ' convertValue = vbEmpty - - Case WMObjectVariableValueFlagMask ' zu klären !!!! - ' convertValue = vbEmpty - - - Case WMObjectVariableValueTypeFulltext - 'convertValue = CStr(werte) - - Case WMObjectVariableValueTypeDefaultValue ' zu klären !!!! - ' convertValue = vbEmpty - - Case Else - ' wenn es sich um einen TypVektorIndex handelt - If TypDesIndexes >= 4096 And TypDesIndexes < 8192 Then - LOGGER.Info("- Es handelt sich um einen Vektorindex") - 'Dim temp_arr As New ArrayList - - Dim arrayIndex = 0 - Dim temp_arr As Object - Dim arrayLength As Integer = 0 - For Each element In werte - arrayLength = arrayLength + 1 - Next - - ReDim temp_arr(arrayLength - 1) - - Select Case (TypDesIndexes - WMObjectVariableValueTypeVector) - 'VektorIndex vom Typ String 64' - Case 1 - LOGGER.Info("- VektorIndex vom Typ String 1") - - For Each wert As Object In werte - 'Führende Nullen Entfernen - If werte.ToString.StartsWith("0") Then - Dim werteString As String = CStr(CInt(wert.ToString)) - wert = werteString - temp_arr(arrayIndex) = CStr(wert) - LOGGER.Info("- Führende Nullen wurden entfernt") - Else - temp_arr(arrayIndex) = CStr(wert) - - End If - - arrayIndex = arrayIndex + 1 - - LOGGER.Info("- Wert " & CStr(wert) & " konvertiert") - Next - Case WMObjectVariableValueTypeUndefined - ' convertValue = "" - - Case WMObjectVariableValueTypeString - LOGGER.Info("- VektorIndex vom Typ String 2") - For Each wert As Object In werte - 'Führende Nullen Entfernen - If werte.ToString.StartsWith("0") Then - wert = CInt(wert) - temp_arr(arrayIndex) = CStr(wert) - LOGGER.Info("- Führende Nullen wurden entfernt") - Else - temp_arr(arrayIndex) = CStr(wert) - End If - - arrayIndex = arrayIndex + 1 - - LOGGER.Info("- Wert " & CStr(wert) & " konvertiert") - Next - - Case WMObjectVariableValueTypeInteger - LOGGER.Info("- VektorIndex vom Typ Integer") - For Each wert As Object In werte - temp_arr(arrayIndex) = CInt(wert) - arrayIndex = arrayIndex + 1 - Next - - Case WMObjectVariableValueTypeFloat - For Each wert As Object In werte - wert = wert.ToString.Replace(".", ",") - temp_arr(arrayIndex) = CDbl(wert) - arrayIndex = arrayIndex + 1 - Next - - Case WMObjectVariableValueTypeBoolean - For Each wert As Object In werte - Try - temp_arr(arrayIndex) = CBool(wert) - Catch ex As Exception - ' Nothing zuweisen damit SetVariableValue nicht ausgeführt wird - temp_arr = Nothing - End Try - arrayIndex = arrayIndex + 1 - Next - - Case WMObjectVariableValueTypeDate - For Each wert As Object In werte - 'wert = - temp_arr(arrayIndex) = CDate(wert) - arrayIndex = arrayIndex + 1 - Next - - Case WMObjectVariableValueTypeFixedPoint - For Each wert As Object In werte - temp_arr(arrayIndex) = CDbl(wert) - arrayIndex = arrayIndex + 1 - Next - - Case WMObjectVariableValueTypeTimeStamp - For Each wert As Object In werte - temp_arr(arrayIndex) = CInt(wert) - arrayIndex = arrayIndex + 1 - Next - - Case WMObjectVariableValueTypeCurrency - For Each wert As Object In werte - Dim aValue As System.Runtime.InteropServices.CurrencyWrapper = New System.Runtime.InteropServices.CurrencyWrapper(werte) - temp_arr(arrayIndex) = aValue - arrayIndex = arrayIndex + 1 - Next - - Case WMObjectVariableValueTypeTime - For Each wert As Object In werte - temp_arr(arrayIndex) = CDate(wert) - arrayIndex = arrayIndex + 1 - Next - - Case WMObjectVariableValueTypeVariant - ' dann bleiben alle Werte wie sie sind - - End Select - - werte = temp_arr - - LOGGER.Info("- Werte erfolgreich konvertiert") - Else - ' convertValue = vbEmpty - End If - - End Select - - 'Catch ex As Exception - ' ' einen Hinweis über einen aufgetretenen Fehler an das Array für den TreeView-Log anhängen - ' LOGGER.Info("Unexpected error in Auswerten/Konvertieren des Typs!", ex.Message) - ' ' die Indexierungsinformationen für den TreeView-Log zurückgeben - ' Return False - 'End Try - - - ' Try - ' ***** Anmerkung: das Nachindexieren mit vbEmpty ist möglich (siehe oben) jedoch nicht ***** - ' ***** das Indexieren mit einem Nothing-Wert !!! ***** - ' wenn das Konvertieren soweit gut gelaufen ist (also kein Nothing-Wert zugewiesen wurde) - ' If (convertValue Is Nothing) = False Then - ' den konvertierten Indexwert dem entsprechenden Index zuweisen - WMObject.SetVariableValue(index, werte) - If LogErrorsOnly = False Then - LOGGER.Info(" - den konvertierten Indexwert dem entsprechenden Index zuweisen") - LOGGER.Info(" - Indexname: " & index.ToString) - LOGGER.Info(" - Indexwert: " & werte.ToString) - End If - 'End If - - ' die Indexinformationen des Dokuments speichern - WMObject.Save() - LOGGER.Info(" - die Indexinformationen des Dokuments speichern") - ' Unlock in einem unbehandelten Try-Block um Fehler abzufangen, - ' wenn eine Datei nicht gesperrt ist - Try - ' die Sperrung des Dokuments aufheben - WMObject.unlock() - LOGGER.Info(" - die Sperrung des Dokuments aufheben") - Catch ex As Exception - - ' nichts tun (Datei war nicht gesperrt) - End Try - - ' die Indexierungsinformationen für den TreeView-Log zurückgeben - Return True - Else - ' die Indexierungsinformationen für den TreeView-Log zurückgeben - LOGGER.Info(" Hinweis: Die Datei hat zum Zeitpunkt der Indexierung noch nicht auf dem windream-Laufwerk existiert.") - End If - - Catch ex As Exception - LOGGER.Info(" Hinweis: Unbekannter Unexpected error inm Indexieren der Datei.") - LOGGER.Error(ex.Message) - LOGGER.Info(ex.Message) - End Try - - Return True - - End Function - - ''' - ''' Diese Funktion überprüft ob eine Variable ein Array ist, oder nicht. - ''' - ''' Variable die überprüft werden soll - ''' Liefert True wenn es sich um ein Array handelt, sonst False - ''' - Private Shared Function IsArray(ByVal arrayOrNot As Object) - - Dim arrayType As String = UCase(arrayOrNot.GetType.ToString) - - ' überprüft an welcher Stelle sich ein '['-Zeichen befindet - Dim position = InStr(arrayType, "[") - - ' existiert ein '['-Zeichen, so handelt es sich um ein Array (GetType wäre System.Object[]) - If Not position = 0 Then - Return True - Else - Return False - End If - End Function - - - ''' - ''' Diese Funktion überprüft ob eine Variable eine ArrayList ist, oder nicht. - ''' - ''' Variable die überprüft werden soll - ''' Liefert True wenn es sich um eine ArrayList handelt, sonst False - ''' - Private Shared Function IsArrayList(ByVal arrayOrNot As Object) - - Dim arrayType As String = UCase(arrayOrNot.GetType.ToString) - - ' überprüft an welcher Stelle sich ein '['-Zeichen befindet - Dim position = InStr(arrayType, "[") - - ' existiert ein '['-Zeichen, so handelt es sich um ein Array (GetType wäre System.Object[]) - If arrayOrNot.GetType.ToString = "System.Collections.ArrayList" Then - Return True - Else - Return False - End If - End Function - ''' - ''' Diese Funktion errechnet aus einem Datum den Unix-Timestamp - ''' - ''' Datum, für das der Timestamp errechnet werden soll - ''' Liefert den Timestamp als Integer - ''' - Private Shared Function GetTimestamp(ByVal FromDateTime As DateTime) As Integer - - If IsDate(FromDateTime) Then - Dim Startdate As DateTime = #1/1/1970# - Dim Spanne As TimeSpan - - ' vom Datum das Datum des "Beginns der Zeitrechnung" abziehen - Spanne = FromDateTime.Subtract(Startdate) - - ' die Zeitspanne in einen Integer umwandeln - Return CType(Math.Abs(Spanne.TotalSeconds()), Integer) - Else - Return 0 - End If - End Function - ''' - ''' Liefert den Typen eines Indexes als Integer. - ''' - ''' Name des zu überprüfenden Indexfeldes - ''' Liefert eine Zahl, die einen Typen beschreibt - ''' - Public Shared Function GetTypeOfIndexAsIntByName(ByVal indexname As String) As Integer - Try - Dim oAttribute = _session.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, indexname) - Dim vType = oAttribute.getVariableValue("dwAttrType") - Return vType - Catch ex As Exception - Return Nothing - End Try - End Function - Private Shared Function CheckIndexValue(ByVal input) - Try - 'Ersetzt die Versionierungen Tilde(~) und Klammern ((1)) - For i As Integer = 1 To 20 - If input.ToString.EndsWith("~" & i.ToString) Then - input = input.ToString.Replace("~" & i.ToString, "") - ElseIf input.ToString.EndsWith("(" & i.ToString & ")") Then - input = input.ToString.Replace("(" & i.ToString & ")", "") - End If - - Next - - Return input - Catch ex As Exception - LOGGER.Info("Fehler in CheckIndexValue: " & ex.Message) - LOGGER.Error(ex.Message) - Return Nothing - End Try - - End Function -End Class diff --git a/Global_Indexer/Global_Indexer.vbproj b/Global_Indexer/Global_Indexer.vbproj index 0d8d430..965252e 100644 --- a/Global_Indexer/Global_Indexer.vbproj +++ b/Global_Indexer/Global_Indexer.vbproj @@ -166,6 +166,9 @@ ..\..\DDMonorepo\Modules.Config\bin\Debug\DigitalData.Modules.Logging.dll + + ..\..\DDMonorepo\Modules.Windream\bin\Debug\DigitalData.Modules.Windream.dll + False P:\Visual Studio Projekte\Bibliotheken\DLLLicenseManager.dll @@ -241,15 +244,16 @@ + + - @@ -380,7 +384,7 @@ - + @@ -429,6 +433,7 @@ frmAdministration.vb + Designer frmConfig_Basic.vb diff --git a/Global_Indexer/ModuleCURRENT.vb b/Global_Indexer/ModuleCURRENT.vb index ccc49b2..fe06e88 100644 --- a/Global_Indexer/ModuleCURRENT.vb +++ b/Global_Indexer/ModuleCURRENT.vb @@ -31,14 +31,14 @@ Module ModuleCURRENT Public USER_ID Public USER_IN_MODULE As Boolean = False Public USER_IS_ADMIN As Boolean = False - Public UserLoggedin As Integer = 0 - Public USER_SHORT_NAME As String = "" + Public USER_SHORTNAME As String = "" Public USER_PRENAME As String = "" Public USER_SURNAME As String = "" Public USER_EMAIL As String = "" Public USER_LANGUAGE As String = "DE" Public USER_USERNAME As String = "" + Public USERCOUNT_LOGGED_IN As Integer = 0 Public CURRENT_FOLDERWATCH As String = "" Public CURRENT_SCAN_FOLDERWATCH As String = "" diff --git a/Global_Indexer/ModuleMySettings.vb b/Global_Indexer/ModuleRuntime.vb similarity index 50% rename from Global_Indexer/ModuleMySettings.vb rename to Global_Indexer/ModuleRuntime.vb index 78a579a..87d7baf 100644 --- a/Global_Indexer/ModuleMySettings.vb +++ b/Global_Indexer/ModuleRuntime.vb @@ -1,7 +1,7 @@ Imports System.IO Imports System.Xml - -Module ModuleMySettings +Imports DigitalData.Modules.Windream +Module ModuleRuntime 'Dim ConfigPath As String = Path.Combine(Application.UserAppDataPath(), "UserConfig.xml") Public Const USER_CONFIG_FILE = "UserConfig.xml" Public Const COMPUTER_CONFIG_FILE = "ComputerConfig.xml" @@ -9,7 +9,19 @@ Module ModuleMySettings Public MyConnectionString As String = "" Public LogErrorsOnly As Boolean = True Public GI_withWindream As Boolean = False - Public vWLaufwerk As String = "W" + 'Public vWLaufwerk As String = "W" 'Public myPreviewActive As Boolean = True Public FW_started As Boolean = False + Public IDB_ACTIVE As Boolean = False + Public WORKING_MODE As String + Public CONNECTION_STRING_IDB As String + + Public IDBData As ClassIDBData + Public IDB_USES_WMFILESTORE As Boolean = False + Public IDB_DOC_DATA_SQL As String + Public IDB_DT_DOC_DATA As DataTable + Public IDB_DOC_ID As Int64 + Public IDB_LOG_INDEX As String + + Public WINDREAM As Windream End Module diff --git a/Global_Indexer/frmAdministration.vb b/Global_Indexer/frmAdministration.vb index 4cb6104..63d3712 100644 --- a/Global_Indexer/frmAdministration.vb +++ b/Global_Indexer/frmAdministration.vb @@ -7,7 +7,8 @@ Public Class frmAdministration Public Shared _aktDokart_Id As Integer Private GroupToDelete As Integer = Nothing - + Private SourceAttributes As List(Of String) + Private SourceObjectTypes As List(Of String) Private IsInsert As Boolean = False Dim frmloaded As Boolean = False Private Sub TBDD_DOKUMENTARTBindingNavigatorSaveItem_Click(sender As Object, e As EventArgs) @@ -72,10 +73,15 @@ Public Class frmAdministration Catch ex As Exception MsgBox("Error in frmAdministration_Load: " & vbNewLine & ex.Message, MsgBoxStyle.Exclamation) End Try - If GI_withWindream = True Then - If ClassWindream.Init() = True Then - End If + If IDB_ACTIVE = False Then + WINDREAM_DIRECTCheckBox.Visible = True + Else + WINDREAM_DIRECTCheckBox.Visible = False End If + 'If GI_withWindream = True Then + ' If ClassWindream.Init() = True Then + ' End If + 'End If End Sub Private Sub ObjektTypenEintragen() Try @@ -86,12 +92,17 @@ Public Class frmAdministration Me.OBJEKTTYPComboBox.Items.Clear() ListBoxControl1.Items.Clear() ' alle Objekttypen durchlaufen - For Each oDokumentTyp In ClassWindream.GetObjecttypesAsObjects + If SourceObjectTypes Is Nothing Then + SourceObjectTypes = WINDREAM.ObjectTypes + End If + + For Each otype As String In SourceObjectTypes ' und in die Combobox eintragen Me.OBJEKTTYPComboBox.Items.Add(oDokumentTyp.aName) ListBoxControl1.Items.Add(oDokumentTyp.aName) Next + pnlObjekttype_Config.Enabled = True Catch ex As Exception MsgBox("Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Unexpected error inm Eintragen der Objekttypen") @@ -306,9 +317,14 @@ Public Class frmAdministration If Me.OBJEKTTYPComboBox.SelectedIndex <> -1 Then Me.WD_INDEXComboBox.Items.Clear() Me.WD_INDEXComboBox.Items.Add("") - Dim indexe = ClassWindream.GetIndicesByObjecttype(OBJEKTTYPComboBox.Text) - If indexe IsNot Nothing Then - For Each index As String In indexe + 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.WD_INDEXComboBox.Items.Add(index) Next End If @@ -321,9 +337,11 @@ Public Class frmAdministration Try If Me.OBJEKTTYPComboBox.SelectedIndex <> -1 Then Me.INDEXNAME_AutoIndexCMB.Items.Clear() - Dim indexe = ClassWindream.GetIndicesByObjecttype(OBJEKTTYPComboBox.Text) - If indexe IsNot Nothing Then - For Each index As String In indexe + 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 @@ -510,10 +528,14 @@ Public Class frmAdministration IDX_EMAIL_SUBJECTComboBox.Items.Clear() IDX_EMAIL_TOComboBox.Items.Clear() IDX_CHECK_ATTACHMENTComboBox.Items.Clear() - Dim indexe = ClassWindream.GetIndicesByObjecttype(Otype) - If indexe IsNot Nothing Then - For Each index As String In indexe - Select Case ClassWindream.GetTypeOfIndexAsIntByName(index) + If SourceAttributes Is Nothing Then + SourceAttributes = WINDREAM.GetIndiciesByObjecttype(Otype) + End If + + + If SourceAttributes IsNot Nothing Then + For Each index As String In SourceAttributes + Select Case WINDREAM.GetIndexType(index) Case 4 'Boolean Me.IDX_CHECK_ATTACHMENTComboBox.Items.Add(index) Case Else @@ -537,7 +559,10 @@ Public Class frmAdministration ' Combobox leeren ListBoxControl1.Items.Clear() ' alle Objekttypen durchlaufen - For Each oDokumentTyp In ClassWindream.GetObjecttypesAsObjects + If SourceObjectTypes Is Nothing Then + SourceObjectTypes = WINDREAM.ObjectTypes + End If + For Each oDokumentTyp In SourceObjectTypes ' und in die Combobox eintragen ListBoxControl1.Items.Add(oDokumentTyp.aName) Next @@ -596,10 +621,7 @@ Public Class frmAdministration lblWDINDEX.Visible = True OBJEKTTYPComboBox.Visible = True WD_INDEXComboBox.Visible = True - - If ClassWindream.Init() = True Then - ObjektTypenEintragen() - End If + ObjektTypenEintragen() Else lblObjekttyp.Visible = False lblWDINDEX.Visible = False @@ -1007,7 +1029,7 @@ Public Class frmAdministration End If ' Vektorindexe fangen bei 4000 an - Return ClassWindream.GetTypeOfIndexAsIntByName(selectedIndexName) > 4000 + Return WINDREAM.GetIndexType(selectedIndexName) > 4000 Catch ex As Exception Return False End Try diff --git a/Global_Indexer/frmHotKey_Add.vb b/Global_Indexer/frmHotKey_Add.vb index d4e5351..ec957cc 100644 --- a/Global_Indexer/frmHotKey_Add.vb +++ b/Global_Indexer/frmHotKey_Add.vb @@ -7,10 +7,11 @@ ' Combobox leeren Me.cmbObjekttyp.Items.Clear() ' alle Objekttypen durchlaufen - For Each oDokumentTyp In ClassWindream.GetObjecttypesAsObjects + For Each otype As String In WINDREAM.ObjectTypes ' und in die Combobox eintragen - Me.cmbObjekttyp.Items.Add(oDokumentTyp.aName) + Me.cmbObjekttyp.Items.Add(otype) Next + Catch ex As Exception MsgBox("Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Unexpected error inm Eintragen der Objekttypen") End Try @@ -40,13 +41,11 @@ GroupBox1.Visible = True GroupBox2_Controls.Visible = False GroupBoxMainWindow.Visible = False - If ClassWindream.Init() = True Then + If IDB_ACTIVE = False Then ObjektTypenEintragen() - Else - MsgBox("Windream konnte nicht initiiert werden! Formular wird geschlossen - Check logfile", MsgBoxStyle.Information) - Me.Close() End If + End Sub Sub load_users() Try diff --git a/Global_Indexer/frmIndex.vb b/Global_Indexer/frmIndex.vb index 0e5ffdb..83a6e1d 100644 --- a/Global_Indexer/frmIndex.vb +++ b/Global_Indexer/frmIndex.vb @@ -568,7 +568,7 @@ Public Class frmIndex Case "Username".ToUpper oNamenkonvention = oNamenkonvention.Replace(oElement.Value, Environment.UserName) Case "Usercode".ToUpper - oNamenkonvention = oNamenkonvention.Replace(oElement.Value, USER_SHORT_NAME) + oNamenkonvention = oNamenkonvention.Replace(oElement.Value, USER_SHORTNAME) Case "" End Select If datetemp <> "" Then @@ -697,13 +697,15 @@ Public Class frmIndex Count += 1 ' den Typ des Zielindexes auslesen - Dim indexType As Integer = ClassWindream.GetTypeOfIndexAsIntByName(indexname) + Dim indexType As Integer = WINDREAM.GetIndexType(indexname) - If indexType < ClassWindream.WMObjectVariableValueTypeVector Then - indexierung_erfolgreich = ClassWindream.DateiIndexieren(CURRENT_NEWFILENAME, indexname, idxvalue) + If indexType < WINDREAM.WMObjectVariableValueTypeVector Then + indexierung_erfolgreich = WINDREAM.SetFileIndex(CURRENT_NEWFILENAME, indexname, idxvalue, CURR_DOKART_OBJECTTYPE) Else - Dim indexArray = Split(idxvalue, ClassConstants.VECTORSEPARATOR) - indexierung_erfolgreich = ClassWindream.Indexiere(CURRENT_NEWFILENAME.Substring(2), indexname, indexArray) + Dim oSplitArray = Split(idxvalue, ClassConstants.VECTORSEPARATOR) + Dim oListofString As List(Of String) + oListofString = (From o In oSplitArray Select 0.ToString.ToList) + indexierung_erfolgreich = WINDREAM.SetFileIndex(CURRENT_NEWFILENAME, indexname, oListofString, CURR_DOKART_OBJECTTYPE) End If 'indexierung_erfolgreich = ClassWindream.DateiIndexieren(CURRENT_NEWFILENAME, indexname, idxvalue) @@ -739,16 +741,18 @@ Public Class frmIndex Count += 1 ' den Typ des Zielindexes auslesen - Dim indexType As Integer = ClassWindream.GetTypeOfIndexAsIntByName(indexname) + Dim indexType As Integer = WINDREAM.GetIndexType(indexname) - If indexType < ClassWindream.WMObjectVariableValueTypeVector Then - indexierung_erfolgreich = ClassWindream.DateiIndexieren(CURRENT_NEWFILENAME, indexname, Indexvalue) + If indexType < WINDREAM.WMObjectVariableValueTypeVector Then + indexierung_erfolgreich = WINDREAM.SetFileIndex(CURRENT_NEWFILENAME, indexname, Indexvalue, CURR_DOKART_OBJECTTYPE) Else - Dim indexArray = Split(Indexvalue, ClassConstants.VECTORSEPARATOR) - indexierung_erfolgreich = ClassWindream.Indexiere(CURRENT_NEWFILENAME.Substring(2), indexname, indexArray) + Dim oSplitArray = Split(Indexvalue, ClassConstants.VECTORSEPARATOR) + Dim oListofString As List(Of String) + oListofString = (From o In oSplitArray Select 0.ToString.ToList) + indexierung_erfolgreich = WINDREAM.SetFileIndex(CURRENT_NEWFILENAME, indexname, oListofString, CURR_DOKART_OBJECTTYPE) End If - indexierung_erfolgreich = ClassWindream.DateiIndexieren(CURRENT_NEWFILENAME, indexname, Indexvalue) + indexierung_erfolgreich = WINDREAM.SetFileIndex(CURRENT_NEWFILENAME, indexname, Indexvalue, CURR_DOKART_OBJECTTYPE) If indexierung_erfolgreich = False Then MsgBox("Error in indexing file - See log", MsgBoxStyle.Critical) Return False @@ -782,7 +786,7 @@ Public Class frmIndex Private Function WriteIndex2File(indexname As String, indexvalue As String) Try LOGGER.Info(" >> Indexvalue: " & indexvalue.ToString) - Return ClassWindream.DateiIndexieren(CURRENT_NEWFILENAME, indexname, indexvalue) + Return WINDREAM.SetFileIndex(CURRENT_NEWFILENAME, indexname, indexvalue, CURR_DOKART_OBJECTTYPE) Catch ex As Exception MsgBox("Error in WriteIndex2File:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) Return False @@ -838,9 +842,9 @@ Public Class frmIndex finalize_pattern = rowregex.Item("REGEX") End If Next - Dim DT As DataTable = ClassDatabase.Return_Datatable("SELECT * FROM TBGI_OBJECTTYPE_EMAIL_INDEX WHERE OBJECTTYPE = '" & ClassWindream._WDObjekttyp & "'") + Dim DT As DataTable = ClassDatabase.Return_Datatable("SELECT * FROM TBGI_OBJECTTYPE_EMAIL_INDEX WHERE OBJECTTYPE = '" & CURR_DOKART_OBJECTTYPE & "'") If IsNothing(DT) Then - LOGGER.Info(" >> SELECT * FROM TBGI_OBJECTTYPE_EMAIL_INDEX WHERE OBJECTTYPE = '" & ClassWindream._WDObjekttyp & "' RESULTED in NOTHING") + LOGGER.Info(" >> SELECT * FROM TBGI_OBJECTTYPE_EMAIL_INDEX WHERE OBJECTTYPE = '" & CURR_DOKART_OBJECTTYPE & "' RESULTED in NOTHING") Return False End If If DT.Rows.Count = 1 Then @@ -1127,7 +1131,7 @@ Public Class frmIndex Private Function SetAttachmentIndices() Dim indexierung_erfolgreich As Boolean = True Try - Dim DT As DataTable = ClassDatabase.Return_Datatable("SELECT * FROM TBGI_OBJECTTYPE_EMAIL_INDEX WHERE OBJECTTYPE = '" & ClassWindream._WDObjekttyp & "'") + Dim DT As DataTable = ClassDatabase.Return_Datatable("SELECT * FROM TBGI_OBJECTTYPE_EMAIL_INDEX WHERE OBJECTTYPE = '" & CURR_DOKART_OBJECTTYPE & "'") If DT.Rows.Count = 1 Then If Not CURRENT_MESSAGEID Is Nothing Then @@ -1172,8 +1176,8 @@ Public Class frmIndex Private Function SINGLEFILE_2_WINDREAM(_Objekttyp As String) Try - ClassWindream._WDObjekttyp = _Objekttyp - Dim streamresult = ClassWindream.Stream_File(CURRENT_WORKFILE, CURRENT_NEWFILENAME) + CURR_DOKART_OBJECTTYPE = _Objekttyp + Dim streamresult = WINDREAM.NewFileStream(CURRENT_WORKFILE, CURRENT_NEWFILENAME) If CONFIG.Config.DeleteOriginalFile = True Then Try @@ -1751,7 +1755,7 @@ Public Class frmIndex Dim oPlaceholderResult As String Dim oValue As String = ClassHelper.NotNull(oAutoIndexRow.Item("VALUE"), "") - oPlaceholderResult = GetPlaceholderValue(oValue, CURRENT_WORKFILE, USER_SHORT_NAME) + oPlaceholderResult = GetPlaceholderValue(oValue, CURRENT_WORKFILE, USER_SHORTNAME) If Not IsNothing(oPlaceholderResult) Then oValue = oPlaceholderResult @@ -1774,7 +1778,7 @@ Public Class frmIndex Dim oManualIndexResult As String = Nothing ' Einfachen Platzhalter Wert erzeugen - oPlaceholderResult = GetPlaceholderValue(oIndexValue, CURRENT_WORKFILE, USER_SHORT_NAME) + oPlaceholderResult = GetPlaceholderValue(oIndexValue, CURRENT_WORKFILE, USER_SHORTNAME) ' Einfachen Platzhalter ersetzen If Not IsNothing(oPlaceholderResult) Then @@ -2241,10 +2245,6 @@ Public Class frmIndex exp2WD = SINGLEFILE_2_WINDREAM(CURR_DOKART_OBJECTTYPE) End If If exp2WD = True Then - 'Prüfen ob Session da ist - wenn nicht nochmal neu initiieren - If ClassWindream._session Is Nothing Then - ClassWindream.Init() - End If 'Kein Fehler in Export2windream err = False If Write_Indizes() = True Then diff --git a/Global_Indexer/frmStart.vb b/Global_Indexer/frmStart.vb index 762d8b0..ad8c54f 100644 --- a/Global_Indexer/frmStart.vb +++ b/Global_Indexer/frmStart.vb @@ -318,7 +318,7 @@ Public Class frmStart IndexForm = New frmIndex() 'Lizenz abgellaufen, überprüfen ob User Admin ist - If LICENSE_COUNT < UserLoggedin Then + If LICENSE_COUNT < USERCOUNT_LOGGED_IN Then If USER_IS_ADMIN = True Then LOGGER.Info(">> User is Admin - Timer will be started") If USER_LANGUAGE = "de-DE" Then @@ -647,7 +647,7 @@ Public Class frmStart End If End Sub Private Sub TimerClose3Minutes_Tick(sender As Object, e As EventArgs) Handles TimerClose3Minutes.Tick - If LICENSE_EXPIRED = True Or LICENSE_COUNT < UserLoggedin Then + If LICENSE_EXPIRED = True Or LICENSE_COUNT < USERCOUNT_LOGGED_IN Then If USER_LANGUAGE = "de-DE" Then MsgBox("Global Indexer wird nun geschlossen, weil keine neue Lizenzdaten eingegeben wurden!", MsgBoxStyle.Information) Else @@ -730,4 +730,11 @@ Public Class frmStart End Try End Sub + Private Sub frmStart_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp + If e.KeyCode = Keys.F12 Then + If START_INCOMPLETE Then + frmLicense.ShowDialog() + End If + End If + End Sub End Class \ No newline at end of file