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)
+ Dim oSql As String
- 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 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