diff --git a/app/DD-Record-Organizer/Classes/ClassDocGrid.vb b/app/DD-Record-Organizer/Classes/ClassDocGrid.vb index 54ddac6..aca90ff 100644 --- a/app/DD-Record-Organizer/Classes/ClassDocGrid.vb +++ b/app/DD-Record-Organizer/Classes/ClassDocGrid.vb @@ -141,7 +141,7 @@ Public Class ClassDocGrid For Each oRowHandle In oSelectedRows Dim oDocId = pGridView.GetRowCellValue(oRowHandle, "DocID") - Dim oSQL = $"Select * FROM TBPMO_DOCRESULT_LIST where DocID = {oDocId}" + Dim oSQL = $"Select * FROM TBPMO_DOCRESULT_LIST WITH (NOLOCK) where DocID = {oDocId}" Dim oDTRow As DataTable = MYDB_ECM.GetDatatable(oSQL) Dim odwParentID = oDTRow.Rows(0).Item("dwParentID") diff --git a/app/DD-Record-Organizer/Classes/ClassFileResult.vb b/app/DD-Record-Organizer/Classes/ClassFileResult.vb index b591ed0..23a11c1 100644 --- a/app/DD-Record-Organizer/Classes/ClassFileResult.vb +++ b/app/DD-Record-Organizer/Classes/ClassFileResult.vb @@ -42,7 +42,7 @@ Public Class ClassFileResult End Function Public Shared Function GET_DATATABLE_INDICES_PMO() Try - Dim sql = String.Format("SELECT * FROM TBPMO_INDEX_MAN WHERE ACTIVE = 1 AND ENTITY_ID = (SELECT CASE REDUNDANT_ENTITY WHEN 0 THEN GUID ELSE REDUNDANT_ENTITY END AS ENTITY_ID FROM TBPMO_FORM WHERE GUID = {0}) AND DOCTYPE_ID = {1}", CURRENT_ENTITY_ID, CURRENT_DOKARTID) + Dim sql = String.Format("SELECT * FROM TBPMO_INDEX_MAN WITH (NOLOCK) WHERE ACTIVE = 1 AND ENTITY_ID = (SELECT CASE REDUNDANT_ENTITY WHEN 0 THEN GUID ELSE REDUNDANT_ENTITY END AS ENTITY_ID FROM TBPMO_FORM WHERE GUID = {0}) AND DOCTYPE_ID = {1}", CURRENT_ENTITY_ID, CURRENT_DOKARTID) Dim DT As DataTable = MYDB_ECM.GetDatatable(sql) LOGGER.Debug("GET_DATATABLE_INDICES_PMO: " & sql) CURRENT_TBPMO_INDEX_MAN = DT diff --git a/app/DD-Record-Organizer/Classes/ClassHelper.vb b/app/DD-Record-Organizer/Classes/ClassHelper.vb index 6d67ed5..c2fc754 100644 --- a/app/DD-Record-Organizer/Classes/ClassHelper.vb +++ b/app/DD-Record-Organizer/Classes/ClassHelper.vb @@ -501,7 +501,7 @@ Public Class ClassHelper End Function Public Shared Function GetDocrecordLinks(pRECORDID As Integer) Try - Dim oSQL = $"SELECT * FROM TBPMO_DOC_RECORD_LINK WHERE RECORD_ID = {pRECORDID}" + Dim oSQL = $"SELECT * FROM TBPMO_DOC_RECORD_LINK WITH (NOLOCK) WHERE RECORD_ID = {pRECORDID}" CURRENT_DT_TBPMO_DOC_RECORD_LINK = MYDB_ECM.GetDatatable(oSQL) Catch ex As Exception LOGGER.Warn("Unexpected Error in GetDocrecordLinks: " & ex.Message) diff --git a/app/DD-Record-Organizer/Classes/ClassImport_Windream.vb b/app/DD-Record-Organizer/Classes/ClassImport_Windream.vb index aab3239..4521aa7 100644 --- a/app/DD-Record-Organizer/Classes/ClassImport_Windream.vb +++ b/app/DD-Record-Organizer/Classes/ClassImport_Windream.vb @@ -7,7 +7,7 @@ Public Class ClassImport_Windream Try Dim err As Boolean = False CURRENT_FILENAME = QuellDatei_Path - Dim DT_DOCTYPE As DataTable = MYDB_ECM.GetDatatable("SELECT * FROM TBDD_DOKUMENTART WHERE GUID = " & DOCTYPE_ID) + Dim DT_DOCTYPE As DataTable = MYDB_ECM.GetDatatable("SELECT * FROM TBDD_DOKUMENTART WITH (NOLOCK) WHERE GUID = " & DOCTYPE_ID) If Not IsNothing(DT_DOCTYPE) Then Dim Targetpath As String = DT_DOCTYPE.Rows(0).Item("ZIEL_PFAD") Dim Dokart As String = DT_DOCTYPE.Rows(0).Item("BEZEICHNUNG") @@ -24,7 +24,7 @@ Public Class ClassImport_Windream If streamresult = True Then Dim sql As String = String.Format("SELECT DocID FROM VWPMO_DOC_SYNC WHERE CONVERT(DATE,Change_DateTime) = CONVERT(DATE,GETDATE()) AND FULL_FILENAME = '{0}'", CURRENT_FILEIN_WD) CURRENT_DOC_ID = MYDB_ECM.GetScalarValue(sql) - sql = $"SELECT * FROM TBDD_INDEX_AUTOM WHERE DOCTYPE_ID = {DOCTYPE_ID} AND ENTITY_ID = {CURRENT_ENTITY_ID}" + sql = $"SELECT * FROM TBDD_INDEX_AUTOM WITH (NOLOCK) WHERE DOCTYPE_ID = {DOCTYPE_ID} AND ENTITY_ID = {CURRENT_ENTITY_ID}" Dim dt As DataTable = MYDB_ECM.GetDatatable(sql) Dim indexierung_erfolgreich As Boolean = False If dt Is Nothing = False Then @@ -108,7 +108,7 @@ Public Class ClassImport_Windream myLogger = LOGCONFIG.GetLogger() Dim FILE_DELIMITER, VERSION_DELIMITER, _WDOBJECTTYPE, _NewFileString As String - Dim sql As String = "select TOP 1 VERSION_DELIMITER, FILE_DELIMITER FROM TBDD_MODULES where NAME In ('fileFLOW', 'Global-Indexer')" + Dim sql As String = "select TOP 1 VERSION_DELIMITER, FILE_DELIMITER FROM TBDD_MODULES WITH (NOLOCK) where NAME In ('fileFLOW', 'Global-Indexer')" Dim DT1 As DataTable = MYDB_ECM.GetDatatable(sql) FILE_DELIMITER = DT1.Rows(0).Item("FILE_DELIMITER") VERSION_DELIMITER = DT1.Rows(0).Item("VERSION_DELIMITER") @@ -116,7 +116,7 @@ Public Class ClassImport_Windream Dim err As Boolean = False Dim oWMTARGET_FOLDER As String Dim oExtension As String = Path.GetExtension(CURRENT_FILENAME) - Dim oDT As DataTable = MYDB_ECM.GetDatatable("SELECT * FROM TBDD_DOKUMENTART WHERE GUID = " & DocTypeID) + Dim oDT As DataTable = MYDB_ECM.GetDatatable("SELECT * FROM TBDD_DOKUMENTART WITH (NOLOCK) WHERE GUID = " & DocTypeID) 'sql_history_INSERT_INTO = "INSERT INTO TBGI_HISTORY (FILENAME_ORIGINAL,FILENAME_NEW" 'sql_history_Index_Values = "" Dim AnzahlIndexe As Integer = 1 @@ -459,7 +459,7 @@ Public Class ClassImport_Windream LOGGER.Warn("SQL-Command: " & CURRENT_LAST_SQL) oReturnValue = "" Else - Dim sql1 = "SELECT * FROM TBPMO_WD_NAMECONVENTION_FORMAT WHERE ID = (SELECT TOP 1 GUID FROM TBPMO_WD_FORMVIEW_DOKTYPES WHERE DOCTYPE_ID = " & pDoctypeID & " AND FORMVIEW_ID = " & CURRENT_FORMVIEW_ID & ")" + Dim sql1 = "SELECT * FROM TBPMO_WD_NAMECONVENTION_FORMAT WITH (NOLOCK) WHERE ID = (SELECT TOP 1 GUID FROM TBPMO_WD_FORMVIEW_DOKTYPES WHERE DOCTYPE_ID = " & pDoctypeID & " AND FORMVIEW_ID = " & CURRENT_FORMVIEW_ID & ")" Dim DT_FORMAT As DataTable = MYDB_ECM.GetDatatable(sql1) If Not IsNothing(DT_FORMAT) Then If DT_FORMAT.Rows.Count > 0 Then @@ -680,7 +680,7 @@ Public Class ClassImport_Windream LOGGER.Warn("Variable folder should be filled with value of Control-ID '" & CONTROL_ID & "', but result was DBNULL.") LOGGER.Warn("SQL-Command: " & CURRENT_LAST_SQL) Else - Dim sql1 = "SELECT * FROM TBPMO_WD_NAMECONVENTION_FORMAT WHERE ID = (SELECT TOP 1 GUID FROM TBPMO_WD_FORMVIEW_DOKTYPES WHERE DOCTYPE_ID = " & DocTypeID & " AND FORMVIEW_ID = " & CURRENT_FORMVIEW_ID & ")" + Dim sql1 = "SELECT * FROM TBPMO_WD_NAMECONVENTION_FORMAT WITH (NOLOCK) WHERE ID = (SELECT TOP 1 GUID FROM TBPMO_WD_FORMVIEW_DOKTYPES WHERE DOCTYPE_ID = " & DocTypeID & " AND FORMVIEW_ID = " & CURRENT_FORMVIEW_ID & ")" Dim DT_FORMAT As DataTable = MYDB_ECM.GetDatatable(sql1) If Not IsNothing(DT_FORMAT) Then If DT_FORMAT.Rows.Count > 0 Then diff --git a/app/DD-Record-Organizer/Classes/ClassInit.vb b/app/DD-Record-Organizer/Classes/ClassInit.vb index 98051b6..2875953 100644 --- a/app/DD-Record-Organizer/Classes/ClassInit.vb +++ b/app/DD-Record-Organizer/Classes/ClassInit.vb @@ -167,7 +167,7 @@ Public Class ClassInit Throw New Exception("Find more information in the logfile.") End If - Dim oSql = String.Format("SELECT * FROM TBPMO_KONFIGURATION WHERE GUID = 1") + Dim oSql = String.Format("SELECT * FROM TBPMO_KONFIGURATION WITH (NOLOCK) WHERE GUID = 1") Dim KONFIG_DT As DataTable = MYDB_ECM.GetDatatable(oSql) If KONFIG_DT.Rows.Count = 1 Then Try @@ -188,7 +188,7 @@ Public Class ClassInit End If End If - oSql = "SELECT * FROM TBDD_SQL_COMMANDS" + oSql = "SELECT * FROM TBDD_SQL_COMMANDS WITH (NOLOCK) " Dim oDTSQL_COMMANDS As DataTable = MYDB_ECM.GetDatatable(oSql) For Each oRow As DataRow In oDTSQL_COMMANDS.Rows If oRow.Item("TITLE") = "ADDI_DOC_SEARCH_RECORD" Then @@ -206,7 +206,7 @@ Public Class ClassInit Next Try - oSql = "SELECT * FROM TBDD_CATALOG" + oSql = "SELECT * FROM TBDD_CATALOG WITH (NOLOCK)" Dim oDTTBDD_CATALOG As DataTable = MYDB_ECM.GetDatatable(oSql) For Each oRow As DataRow In oDTTBDD_CATALOG.Rows If oRow.Item("CAT_TITLE") = "DDSUPPORT_PORTAL" Then @@ -223,7 +223,7 @@ Public Class ClassInit LOGGER.Debug("WM_RWA2 = " + WM_RWA1) ElseIf oRow.Item("CAT_TITLE") = "OF_FILESTORE_ENTITY" Then OF_FILESTORE_ENTITY = oRow.Item("CAT_STRING") - Dim oSQL1 = String.Format("select A.GUID from TBPMO_FORM_CONSTRUCTOR A INNER JOIN TBPMO_FORM_CONSTRUCTOR_DETAIL B ON A.GUID = B.CONSTRUCT_ID WHERE B.FORM_ID = {0}", OF_FILESTORE_ENTITY) + Dim oSQL1 = String.Format("select A.GUID from TBPMO_FORM_CONSTRUCTOR A WITH (NOLOCK) INNER JOIN TBPMO_FORM_CONSTRUCTOR_DETAIL B WITH (NOLOCK) ON A.GUID = B.CONSTRUCT_ID WHERE B.FORM_ID = {0}", OF_FILESTORE_ENTITY) OF_FILESTORE_CONSTRUCTOR = MYDB_ECM.GetScalarValue(oSQL1) LOGGER.Debug(String.Format("OF_FILESTORE_ENTITY = {0}", OF_FILESTORE_ENTITY.ToString)) End If @@ -232,24 +232,24 @@ Public Class ClassInit LOGGER.Error(ex) End Try - oSql = "SELECT * FROM TBPMO_CONTROL" + oSql = "SELECT * FROM TBPMO_CONTROL WITH (NOLOCK)" CURRENT_TBPMO_CONTROL = MYDB_ECM.GetDatatable(oSql) - oSql = "SELECT * FROM TBPMO_DOCSEARCH_RESULTLIST_CONFIG WHERE VISIBLE = 1" + oSql = "SELECT * FROM TBPMO_DOCSEARCH_RESULTLIST_CONFIG WITH (NOLOCK) WHERE VISIBLE = 1" DT_DOCSEARCH_RESULTLIST_CONFIG = MYDB_ECM.GetDatatable(oSql) - oSql = "SELECT * FROM TBPMO_DOCSEARCH_VARIABLE_CONTROLS" + oSql = "SELECT * FROM TBPMO_DOCSEARCH_VARIABLE_CONTROLS WITH (NOLOCK)" CURRENT_VARIABLE_CONTROLS = MYDB_ECM.GetDatatable(oSql) - oSql = "SELECT * FROM TBPMO_FORM_VIEW" + oSql = "SELECT * FROM TBPMO_FORM_VIEW WITH (NOLOCK)" CURRENT_TBPMO_FORM_VIEW = MYDB_ECM.GetDatatable(oSql) - oSql = "select T.*, T1.HEADER_CAPTION,T1.TYPE_ID ,T1.ENTITY_ID,T1.LANGUAGE from TBPMO_DOCRESULT_DROPDOWN_ITEMS T, TBPMO_DOCSEARCH_RESULTLIST_CONFIG T1 WHERE T.CONFIG_ID = T1.GUID" + oSql = "select T.*, T1.HEADER_CAPTION,T1.TYPE_ID ,T1.ENTITY_ID,T1.LANGUAGE from TBPMO_DOCRESULT_DROPDOWN_ITEMS T WITH (NOLOCK), TBPMO_DOCSEARCH_RESULTLIST_CONFIG T1 WITH (NOLOCK) WHERE T.CONFIG_ID = T1.GUID" CURRENT_TBPMO_DOCRESULT_DROPDOWN_ITEMS = MYDB_ECM.GetDatatable(oSql) - oSql = "SELECT * FROM TBFILE_EXTENSION_OVERRIDE" + oSql = "SELECT * FROM TBFILE_EXTENSION_OVERRIDE WITH (NOLOCK)" CURRENT_TBFILE_EXTENSION_OVERRIDE = MYDB_ECM.GetDatatable(oSql) - oSql = String.Format("select* from TBPMO_FILE_FORMATS_CHANGE") + oSql = String.Format("select* from TBPMO_FILE_FORMATS_CHANGE WITH (NOLOCK)") Dim oDTFF_CHANGE As DataTable = MYDB_ECM.GetDatatable(oSql) For Each oRow As DataRow In oDTFF_CHANGE.Rows FILE_FORMATS_CHANGE_DURING_EDIT.Add(oRow.Item("FILE_EXT")) Next - oSql = "Select Top 1 * from TBPMO_WD_OBJECTTYPE" + oSql = "Select Top 1 * from TBPMO_WD_OBJECTTYPE WITH (NOLOCK)" Dim oDTTBPMO_WD_OBJECTTYPE = MYDB_ECM.GetDatatable(oSql) If oDTTBPMO_WD_OBJECTTYPE.Rows.Count = 1 Then WMOBJECTTYPE = oDTTBPMO_WD_OBJECTTYPE.Rows(0).Item("OBJECT_TYPE").ToString @@ -302,7 +302,7 @@ Public Class ClassInit ClassHelper.InsertEssential_Log(0, "USER-ID", String.Format("User '{0}' not listed in Userconfiguration", USER_USERNAME)) Return False Else - DTTBPMO_SERVICE_RIGHT_CONFIG = MYDB_ECM.GetDatatable("SELECT * FROM TBPMO_SERVICE_RIGHT_CONFIG WHERE GUID = 1") + DTTBPMO_SERVICE_RIGHT_CONFIG = MYDB_ECM.GetDatatable("SELECT * FROM TBPMO_SERVICE_RIGHT_CONFIG WITH (NOLOCK) WHERE GUID = 1") WM_DOMAIN = DTTBPMO_SERVICE_RIGHT_CONFIG.Rows(0).Item("AD_DOMAIN") WM_USER = DTTBPMO_SERVICE_RIGHT_CONFIG.Rows(0).Item("AD_USER") WM_SERVER = DTTBPMO_SERVICE_RIGHT_CONFIG.Rows(0).Item("AD_SERVER") @@ -392,12 +392,12 @@ Public Class ClassInit End If 'Me.Close() - oFNSQL = String.Format("select * from TBPMO_RIGHT_USER WHERE USER_ID = " & USER_GUID) + oFNSQL = String.Format("select * from TBPMO_RIGHT_USER WITH (NOLOCK) WHERE USER_ID = " & USER_GUID) CURRENT_TBPMO_RIGHT_USER = MYDB_ECM.GetDatatable(oFNSQL) Init_CONN_SWITCH() - DT_CLIENT_USER = MYDB_ECM.GetDatatable("SELECT T.*, T1.LICENSE_PMO, T1.CLIENT_NAME FROM TBDD_CLIENT_USER T,TBDD_CLIENT T1 WHERE T.CLIENT_ID = T1.GUID AND T.USER_ID = " & USER_GUID) + DT_CLIENT_USER = MYDB_ECM.GetDatatable("SELECT T.*, T1.LICENSE_PMO, T1.CLIENT_NAME FROM TBDD_CLIENT_USER T WITH (NOLOCK), TBDD_CLIENT T1 WITH (NOLOCK) WHERE T.CLIENT_ID = T1.GUID AND T.USER_ID = " & USER_GUID) If DT_CLIENT_USER.Rows.Count > 1 Then frmClientLogin.ShowDialog() ElseIf DT_CLIENT_USER.Rows.Count = 1 Then @@ -482,8 +482,10 @@ Public Class ClassInit SQL_LIC_NAMED_USER = SQL_LIC_NAMED_USER.Replace("@MODULE", "Record-Organizer") SQL_LIC_NAMED_USER = SQL_LIC_NAMED_USER.Replace("@CLIENT", CLIENT_SELECTED.ToString) oFNSQL = SQL_LIC_NAMED_USER + LOGGER.Debug("SQL_LIC_NAMED_USER: " & SQL_LIC_NAMED_USER) Else oFNSQL = String.Format("SELECT COUNT(*) AS Expr1 FROM TBDD_USER_MODULE_LOG_IN WHERE MODULE = 'Record-Organizer' AND CLIENT_ID = {0}", CLIENT_SELECTED) + LOGGER.Debug("Using default SQL for License-Check: " & oFNSQL) End If Dim anzahl = MYDB_ECM.GetScalarValue(oFNSQL) diff --git a/app/DD-Record-Organizer/Classes/ClassOfficeTemplate.vb b/app/DD-Record-Organizer/Classes/ClassOfficeTemplate.vb index 8d8b1f0..1a191f5 100644 --- a/app/DD-Record-Organizer/Classes/ClassOfficeTemplate.vb +++ b/app/DD-Record-Organizer/Classes/ClassOfficeTemplate.vb @@ -4,7 +4,7 @@ Public Class ClassOfficeTemplate Try Dim sql_Template As String = "SELECT * FROM VWPMO_TEMPLATE_ENTITY WHERE TEMPLATE_ID = " & Template_ID Dim DT_TEMPLATE As System.Data.DataTable = MYDB_ECM.GetDatatable(sql_Template) - Dim sql_patterns As String = String.Format("select * from TBPMO_TEMPLATE_PATTERN where TEMPLATE_ENT_ID = (SELECT GUID FROM TBPMO_TEMPLATE_ENTITY WHERE ENTITY_ID = {0} AND TEMPLATE_ID = {1})", CURRENT_ENTITY_ID, Template_ID) + Dim sql_patterns As String = String.Format("select * from TBPMO_TEMPLATE_PATTERN WITH (NOLOCK) where TEMPLATE_ENT_ID = (SELECT GUID FROM TBPMO_TEMPLATE_ENTITY WHERE ENTITY_ID = {0} AND TEMPLATE_ID = {1})", CURRENT_ENTITY_ID, Template_ID) Dim DT_PATTERNS As System.Data.DataTable = MYDB_ECM.GetDatatable(sql_patterns) If IsNothing(DT_PATTERNS) Then diff --git a/app/DD-Record-Organizer/Classes/ClassRightManagement.vb b/app/DD-Record-Organizer/Classes/ClassRightManagement.vb index 2ce4595..288e7f5 100644 --- a/app/DD-Record-Organizer/Classes/ClassRightManagement.vb +++ b/app/DD-Record-Organizer/Classes/ClassRightManagement.vb @@ -36,9 +36,10 @@ Else If DT_RIGHTS_USER Is Nothing Or DT_RIGHTS_GROUP Is Nothing Then Dim Sql As String - Sql = String.Format("select * from TBPMO_RIGHT_USER WHERE USER_ID = {0} AND ENTITY_ID = {1}", USER_GUID, ENTITY_ID) + Sql = String.Format("select * from TBPMO_RIGHT_USER WITH (NOLOCK) WHERE USER_ID = {0} AND ENTITY_ID = {1}", USER_GUID, ENTITY_ID) DT_RIGHTS_USER = MYDB_ECM.GetDatatable(sql) - Sql = String.Format("SELECT DISTINCT EDIT_REC,ADD_REC,DELETE_REC,ADD_DOC,VIEW_DOC,DELETE_DOC FROM TBPMO_RIGHT_GROUP WHERE ENTITY_ID = {0} AND GROUP_ID IN (SELECT GROUP_ID FROM TBDD_GROUPS_USER WHERE USER_ID = {1})", ENTITY_ID, USER_GUID) + Sql = String.Format("SELECT DISTINCT EDIT_REC,ADD_REC,DELETE_REC,ADD_DOC,VIEW_DOC,DELETE_DOC FROM TBPMO_RIGHT_GROUP WITH (NOLOCK) WHERE ENTITY_ID = {0} + AND GROUP_ID IN (SELECT GROUP_ID FROM TBDD_GROUPS_USER WITH (NOLOCK) WHERE USER_ID = {1})", ENTITY_ID, USER_GUID) DT_RIGHTS_GROUP = MYDB_ECM.GetDatatable(sql) End If diff --git a/app/DD-Record-Organizer/Classes/ClassWDRights.vb b/app/DD-Record-Organizer/Classes/ClassWDRights.vb index 0f5be25..ccff057 100644 --- a/app/DD-Record-Organizer/Classes/ClassWDRights.vb +++ b/app/DD-Record-Organizer/Classes/ClassWDRights.vb @@ -38,7 +38,7 @@ Public Class ClassWDRights Try MSG_RESULT = "" LOGGER.Debug(String.Format("Init ClassWDRights started - " & Now & " ...")) - Dim DT_KONFIG As DataTable = MYDB_ECM.GetDatatable("SELECT * FROM TBPMO_SERVICE_RIGHT_CONFIG WHERE GUID = 1") + Dim DT_KONFIG As DataTable = MYDB_ECM.GetDatatable("SELECT * FROM TBPMO_SERVICE_RIGHT_CONFIG WITH (NOLOCK) WHERE GUID = 1") AD_DOMAIN = DT_KONFIG.Rows(0).Item("AD_DOMAIN") AD_USER = DT_KONFIG.Rows(0).Item("AD_USER") WD_RIGHT_ADMIN = DT_KONFIG.Rows(0).Item("WD_RIGHT") diff --git a/app/DD-Record-Organizer/Classes/Commands/ClassFunctionCommands.vb b/app/DD-Record-Organizer/Classes/Commands/ClassFunctionCommands.vb index b3a2842..990eb0a 100644 --- a/app/DD-Record-Organizer/Classes/Commands/ClassFunctionCommands.vb +++ b/app/DD-Record-Organizer/Classes/Commands/ClassFunctionCommands.vb @@ -48,7 +48,7 @@ Public Shared Function LoadFunction(ControlId As Integer) As DataRow Try - Dim SQL As String = "SELECT * FROM TBPMO_FUNCTION_GENERAL WHERE CONTROL_ID = " & ControlId + Dim SQL As String = "SELECT * FROM TBPMO_FUNCTION_GENERAL WITH (NOLOCK) WHERE CONTROL_ID = " & ControlId Dim dt As DataTable = MYDB_ECM.GetDatatable(SQL) If dt.Rows.Count = 1 Then @@ -64,7 +64,7 @@ Public Shared Function GETCONTROL_ID_FOR_COL_NAME(FORM_ID As Integer, Column_Name As String) Try - Dim SQL As String = "SELECT GUID FROM TBPMO_CONTROL WHERE FORM_ID = " & FORM_ID & " AND COL_NAME = '" & Column_Name & "'" + Dim SQL As String = "SELECT GUID FROM TBPMO_CONTROL WITH (NOLOCK) WHERE FORM_ID = " & FORM_ID & " AND COL_NAME = '" & Column_Name & "'" Dim result = MYDB_ECM.GetScalarValue(SQL) Return result Catch ex As Exception diff --git a/app/DD-Record-Organizer/ModuleHelperMethods.vb b/app/DD-Record-Organizer/ModuleHelperMethods.vb index 240e827..87d9055 100644 --- a/app/DD-Record-Organizer/ModuleHelperMethods.vb +++ b/app/DD-Record-Organizer/ModuleHelperMethods.vb @@ -264,64 +264,110 @@ Module ModuleHelperMethods Public Sub OpenFormConstructor(id As Integer, NodeNav As Boolean, EntityID As Int16, Optional pJumpID As Integer = -1) Try + LOGGER.Debug($"OpenFormConstructor called: ID={id}, NodeNav={NodeNav}, EntityID={EntityID}, pJumpID={pJumpID}", False) If pJumpID <> -1 Then ' Wenn JUMP_RECORD_ID gesetzt wurde, wird zu diesem Record gesprungen JUMP_ID = pJumpID + LOGGER.Debug($"JUMP_ID set to {pJumpID}", False) End If - + ' Prüfen ob Form bereits in Liste der geöffneten Forms If CURRENT_OPEN_CONSTRUCTOR_FORMS.Contains(id) Then + LOGGER.Debug($"Form ID {id} is already in CURRENT_OPEN_CONSTRUCTOR_FORMS list", False) + Dim frm1 As New frmConstructor_Main frm1.Tag = id Dim frmCollection = System.Windows.Forms.Application.OpenForms + Dim formFound As Boolean = False + + LOGGER.Debug($"Searching through {frmCollection.Count} open forms", False) + For i As Int16 = 0I To frmCollection.Count - 1I If frmCollection.Item(i).Tag = id Then + formFound = True + LOGGER.Debug($"Found existing form with ID {id} at index {i}, Type: {frmCollection.Item(i).GetType().Name}", False) + frmCollection.Item(i).Activate() frmCollection.Item(i).BringToFront() + If frmCollection.Item(i).WindowState = FormWindowState.Minimized Then frmCollection.Item(i).WindowState = FormWindowState.Normal + LOGGER.Debug($"Restored minimized form ID {id}", False) End If + CURRENT_CONSTRUCTOR_ID = id CURRENT_OPEN_CONSTRUCTOR_FORMS.Add(id) + If pJumpID <> -1 Then ' Nur ausführen, wenn das Form tatsächlich JumptoNode unterstützt If TypeOf frmCollection.Item(i) Is frmNodeNavigation Then + LOGGER.Debug($"Calling JumptoNode on existing frmNodeNavigation", False) DirectCast(frmCollection.Item(i), frmNodeNavigation).JumptoNode() + Else + LOGGER.Warn($"Form ID {id} does not support frmNodeNavigation.JumptoNode - Type is {frmCollection.Item(i).GetType().Name}") End If End If + + LOGGER.Debug($"Successfully activated existing form ID {id}, exiting method", False) Exit Sub End If Next i - Exit Sub + + ' KRITISCHER PUNKT: Form war in Liste, wurde aber nicht gefunden + If Not formFound Then + LOGGER.Warn($"Form ID {id} was in CURRENT_OPEN_CONSTRUCTOR_FORMS but not found in OpenForms collection - removing from list and continuing to create new form") + ' Form aus Liste entfernen, da sie offensichtlich nicht mehr existiert + CURRENT_OPEN_CONSTRUCTOR_FORMS.Remove(id) + Else + ' Form wurde gefunden und aktiviert + Exit Sub + End If + Else + LOGGER.Debug($"Form ID {id} is NOT in CURRENT_OPEN_CONSTRUCTOR_FORMS list", False) End If + ' Neue Form erstellen CURRENT_CONSTRUCTOR_ID = id CURRENT_OPEN_CONSTRUCTOR_FORMS.Add(id) + LOGGER.Debug($"Set CURRENT_CONSTRUCTOR_ID={id} and added to CURRENT_OPEN_CONSTRUCTOR_FORMS", False) If NodeNav Then + LOGGER.Debug($"Creating new frmNodeNavigation for EntityID={EntityID}, ConstructorID={CURRENT_CONSTRUCTOR_ID}", False) + Dim frmNodeNav As New frmNodeNavigation(EntityID, CURRENT_CONSTRUCTOR_ID) frmNodeNav.Tag = id + If My.Settings.EntFormsChild = True Then Dim activeChild1 As Form = MAIN_FORM.ActiveMdiChild If activeChild1 IsNot Nothing Then activeChild1.WindowState = FormWindowState.Normal + LOGGER.Debug($"Normalized active MDI child: {activeChild1.GetType().Name}", False) End If End If - If My.Settings.EntFormsChild = True Then frmNodeNav.MdiParent = MAIN_FORM + LOGGER.Debug($"Set frmNodeNav.MdiParent to MAIN_FORM", False) + Else + LOGGER.Debug($"frmNodeNav will open as standalone window (EntFormsChild=False)", False) End If + LOGGER.Debug($"Calling frmNodeNav.Show() for ID {id}", False) frmNodeNav.Show() + LOGGER.Debug($"frmNodeNav.Show() completed successfully for ID {id}", False) + If pJumpID <> -1 Then + LOGGER.Debug($"Calling JumptoNode on newly created frmNodeNavigation", False) frmNodeNav.JumptoNode() End If Else + LOGGER.Debug($"NodeNav=False - Creating frmConstructor_Main instead (should not happen based on requirements)", False) + Dim frm As New frmConstructor_Main() frm.Tag = id + If My.Settings.EntFormsChild = True Then Dim activeChild As Form = MAIN_FORM.ActiveMdiChild If activeChild IsNot Nothing Then @@ -329,23 +375,23 @@ Module ModuleHelperMethods End If End If - If pJumpID <> -1 Then ' Wenn JUMP_RECORD_ID gesetzt wurde, wird zu diesem Record gesprungen JUMP_ID = pJumpID End If + If My.Settings.EntFormsChild = True Then frm.MdiParent = MAIN_FORM End If frm.Show() + LOGGER.Debug($"frmConstructor_Main.Show() completed for ID {id}", False) End If - - + LOGGER.Debug($"OpenFormConstructor completed successfully for ID {id}", False) Catch ex As Exception - LOGGER.Warn("Error in OpenFormConstructor: " & ex.Message) + LOGGER.Warn($"Error in OpenFormConstructor for ID {id}, NodeNav={NodeNav}: {ex.Message}{vbNewLine}StackTrace: {ex.StackTrace}") MsgBox("Error in OpenFormConstructor: " & vbNewLine & ex.Message, MsgBoxStyle.Critical) End Try End Sub diff --git a/app/DD-Record-Organizer/OrgFlow.vbproj b/app/DD-Record-Organizer/OrgFlow.vbproj index a05770d..758649c 100644 --- a/app/DD-Record-Organizer/OrgFlow.vbproj +++ b/app/DD-Record-Organizer/OrgFlow.vbproj @@ -239,18 +239,6 @@ P:\Visual Studio Projekte\Bibliotheken\windream\Interop.WINDREAMLib.dll False - - P:\Visual Studio Projekte\Bibliotheken\windream\Interop.WMOBRWSLib.dll - True - - - P:\Visual Studio Projekte\Bibliotheken\windream\Interop.WMOSRCHLib.dll - True - - - P:\Visual Studio Projekte\Bibliotheken\windream\Interop.WMOTOOLLib.dll - True - P:\Projekte DIGITAL DATA\DIGITAL DATA - Entwicklung\DLL_Bibliotheken\Limilabs\Mail.dll diff --git a/app/DD-Record-Organizer/frmDocSearchResult.resx b/app/DD-Record-Organizer/frmDocSearchResult.resx index feea62a..0f2f637 100644 --- a/app/DD-Record-Organizer/frmDocSearchResult.resx +++ b/app/DD-Record-Organizer/frmDocSearchResult.resx @@ -124,9 +124,9 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAINJREFUOE9jQAbfvn37TwyGKscEIEknJye8mH4GfHj/EQWTbAAuPIRcgAsPRwO+ - f/+eABLEhX19ffEbABR4n5KSAlcA0rB582YwDRIHacAbjQ8ePABLgDSdPHny/5w5c8Ds5cuXg8VBYjDN - WA2AuQDZZphimAvwGkAoDLBhqFYgYGAAAFMd0furxZnJAAAAAElFTkSuQmCC + vAAADrwBlbxySQAAAIBJREFUOE9jYEAC3759+08MRtaDAkCSTk5OeDH9DPjw/iMKJtkAXJhoAwbeBbjw + cDTg+/fvCSBBXNjX1xe/Ad++fXufkpICVwDSsHnzZjANEgdpwBuNDx48AEuANJ08efL/nDlzwOzly5eD + xUFiRLkA2WaYYpgL8BpAKAywYWT9AFMd0fvHl+weAAAAAElFTkSuQmCC diff --git a/app/DD-Record-Organizer/frmDocSearchResult.vb b/app/DD-Record-Organizer/frmDocSearchResult.vb index c783ccc..0d25caa 100644 --- a/app/DD-Record-Organizer/frmDocSearchResult.vb +++ b/app/DD-Record-Organizer/frmDocSearchResult.vb @@ -50,11 +50,18 @@ Public Class frmDocSearchResult .ShowFlipButton = True, .ShowSettingButton = True }) + ' Event-Handler für Layout-Änderungen hinzufügen + AddHandler GridViewDoc_Search.ColumnPositionChanged, AddressOf GridView_LayoutChanged + AddHandler GridViewDoc_Search.ColumnWidthChanged, AddressOf GridView_LayoutChanged + AddHandler GridViewDoc_Search.Layout, AddressOf GridView_LayoutChanged End Sub Private Sub frmDocSearchResult_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing Save_DocGrid_Layout() End Sub + Private Sub GridView_LayoutChanged(sender As Object, e As EventArgs) + Save_DocGrid_Layout() + End Sub Public Sub LoadDocSearch(reload As Boolean) Try diff --git a/app/DD-Record-Organizer/frmGlobalSearch.resx b/app/DD-Record-Organizer/frmGlobalSearch.resx index 70556f5..126a2fd 100644 --- a/app/DD-Record-Organizer/frmGlobalSearch.resx +++ b/app/DD-Record-Organizer/frmGlobalSearch.resx @@ -123,7 +123,7 @@ - 0, 248 + 0, 237 Fill @@ -135,7 +135,7 @@ orgFLOW-Datensätze - 616, 402 + 616, 412 @@ -205,7 +205,7 @@ Dateien - 841, 402 + 839, 412 4 @@ -232,7 +232,7 @@ 0, 0 - 841, 25 + 839, 25 3 @@ -268,7 +268,7 @@ 1 - 1467, 427 + 1467, 437 8 @@ -442,7 +442,7 @@ Top - 0, 158 + 0, 147 1467, 90 @@ -690,7 +690,7 @@ Springe zu Filestore - + AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40 LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl @@ -742,13 +742,13 @@ Globale Suche - 1467, 158 + 1467, 147 - 0, 675 + 0, 674 - 1467, 22 + 1467, 23 RibbonStatusBar1 diff --git a/app/DD-Record-Organizer/frmGlobalSearch.vb b/app/DD-Record-Organizer/frmGlobalSearch.vb index 1b12d3e..f2f0930 100644 --- a/app/DD-Record-Organizer/frmGlobalSearch.vb +++ b/app/DD-Record-Organizer/frmGlobalSearch.vb @@ -169,7 +169,6 @@ Public Class frmGlobalSearch GridControlFiles.DataSource = DT_Files tslblDocView.Text = String.Format("{0} files found", DT_Files.Rows.Count) Try - GridViewFiles.Columns.Item("FULL_FILENAME").Visible = False GridViewFiles.OptionsView.ColumnAutoWidth = False GridViewFiles.BestFitColumns() Catch ex As Exception diff --git a/app/DD-Record-Organizer/frmMain.vb b/app/DD-Record-Organizer/frmMain.vb index c8c75d9..d9c0537 100644 --- a/app/DD-Record-Organizer/frmMain.vb +++ b/app/DD-Record-Organizer/frmMain.vb @@ -147,9 +147,11 @@ Public Class frmMain Try Dim oSQL As String = "" If SQL_LIC_NAMED_USER <> "" Then + LOGGER.Debug("Using SQL for Named User License: " & SQL_LIC_NAMED_USER) oSQL = SQL_LIC_NAMED_USER Else - oSQL = String.Format("SELECT COUNT(*) AS Expr1 FROM TBDD_USER_MODULE_LOG_IN WHERE UPPER(MODULE) = UPPER('Record-Organizer') AND CLIENT_ID = {0}", CLIENT_SELECTED) + LOGGER.Debug("Using default SQL for License-Check") + oSQL = String.Format("SELECT COUNT(*) AS Expr1 FROM TBDD_USER_MODULE_LOG_IN WHERE MODULE = 'Record-Organizer' AND CLIENT_ID = {0}", CLIENT_SELECTED) End If Dim anzahl = MYDB_ECM.GetScalarValue(oSQL) LICENSES_USED = CInt(anzahl) @@ -1036,7 +1038,7 @@ Public Class frmMain LOGGER.Debug("Closing frmMain - Now logging out...") Try WMMOD.Session.Logout() - LOGGER.Debug("WINDREAM_MOD Session logg ed out successfully.") + LOGGER.Debug("WINDREAM_MOD Session logged out successfully.") Catch ex As Exception LOGGER.Warn("Error while logging out WINDREAM_MOD Session: {0}", ex.Message) diff --git a/app/DD-Record-Organizer/frmNodeNavigation.Designer.vb b/app/DD-Record-Organizer/frmNodeNavigation.Designer.vb index 81a1833..700a8fb 100644 --- a/app/DD-Record-Organizer/frmNodeNavigation.Designer.vb +++ b/app/DD-Record-Organizer/frmNodeNavigation.Designer.vb @@ -97,9 +97,10 @@ Partial Class frmNodeNavigation Me.DocumentViewer = New DigitalData.Controls.DocumentViewer.DocumentViewer() Me.XtraSaveFileDialog1 = New DevExpress.XtraEditors.XtraSaveFileDialog(Me.components) Me.OpenFileDialog1 = New System.Windows.Forms.OpenFileDialog() - Me.CMSAdmin_Treeview = New System.Windows.Forms.ContextMenuStrip(Me.components) + Me.CMSTreeview = New System.Windows.Forms.ContextMenuStrip(Me.components) Me.KnotenLöschenadminToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.KnotenVerschiebenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.KnotenUmbenennenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.PopupMenu1 = New DevExpress.XtraBars.PopupMenu(Me.components) Me.BarManager1 = New DevExpress.XtraBars.BarManager(Me.components) Me.barDockControlTop = New DevExpress.XtraBars.BarDockControl() @@ -129,7 +130,7 @@ Partial Class frmNodeNavigation Me.PopupMenu4 = New DevExpress.XtraBars.PopupMenu(Me.components) Me.PopupMenu5 = New DevExpress.XtraBars.PopupMenu(Me.components) Me.DD_DMSDataSet1 = New DD_Record_Organizer.DD_DMSDataSet() - Me.KnotenUmbenennenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.KnotenUndDateienLöschenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() CType(Me.ribbonNodeNavigation, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.RepositoryItemTextEdit1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.SplitContainerTreeList, System.ComponentModel.ISupportInitialize).BeginInit() @@ -156,7 +157,7 @@ Partial Class frmNodeNavigation CType(Me.SplitContainerDocView.Panel2, System.ComponentModel.ISupportInitialize).BeginInit() Me.SplitContainerDocView.Panel2.SuspendLayout() Me.SplitContainerDocView.SuspendLayout() - Me.CMSAdmin_Treeview.SuspendLayout() + Me.CMSTreeview.SuspendLayout() CType(Me.PopupMenu1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.BarManager1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.PopupMenu2, System.ComponentModel.ISupportInitialize).BeginInit() @@ -181,7 +182,7 @@ Partial Class frmNodeNavigation Me.ribbonNodeNavigation.ShowExpandCollapseButton = DevExpress.Utils.DefaultBoolean.[True] Me.ribbonNodeNavigation.ShowMoreCommandsButton = DevExpress.Utils.DefaultBoolean.[False] Me.ribbonNodeNavigation.ShowToolbarCustomizeItem = False - Me.ribbonNodeNavigation.Size = New System.Drawing.Size(1151, 158) + Me.ribbonNodeNavigation.Size = New System.Drawing.Size(1151, 147) Me.ribbonNodeNavigation.StatusBar = Me.RibbonStatusBar1 Me.ribbonNodeNavigation.Toolbar.ShowCustomizeItem = False ' @@ -392,10 +393,10 @@ Partial Class frmNodeNavigation Me.RibbonStatusBar1.ItemLinks.Add(Me.BarStaticItemLocked) Me.RibbonStatusBar1.ItemLinks.Add(Me.bsitmtInfoDoc) Me.RibbonStatusBar1.ItemLinks.Add(Me.bsiDocIDChanged) - Me.RibbonStatusBar1.Location = New System.Drawing.Point(0, 567) + Me.RibbonStatusBar1.Location = New System.Drawing.Point(0, 566) Me.RibbonStatusBar1.Name = "RibbonStatusBar1" Me.RibbonStatusBar1.Ribbon = Me.ribbonNodeNavigation - Me.RibbonStatusBar1.Size = New System.Drawing.Size(1151, 22) + Me.RibbonStatusBar1.Size = New System.Drawing.Size(1151, 23) ' 'RibbonPage2 ' @@ -417,7 +418,7 @@ Partial Class frmNodeNavigation ' Me.SplitContainerTreeList.Panel2.Controls.Add(Me.SplitContainerDocumentSearch) Me.SplitContainerTreeList.Panel2.Text = "Panel2" - Me.SplitContainerTreeList.Size = New System.Drawing.Size(776, 409) + Me.SplitContainerTreeList.Size = New System.Drawing.Size(776, 419) Me.SplitContainerTreeList.SplitterPosition = 229 Me.SplitContainerTreeList.TabIndex = 2 ' @@ -459,7 +460,7 @@ Partial Class frmNodeNavigation Me.TreeListDevexpress.OptionsView.ShowVertLines = False Me.TreeListDevexpress.OptionsView.TreeLineStyle = DevExpress.XtraTreeList.LineStyle.Dark Me.TreeListDevexpress.ParentFieldName = "PARENT_GUID" - Me.TreeListDevexpress.Size = New System.Drawing.Size(229, 409) + Me.TreeListDevexpress.Size = New System.Drawing.Size(229, 419) Me.TreeListDevexpress.StateImageList = Me.ImageCollection1 Me.TreeListDevexpress.TabIndex = 1 ' @@ -483,7 +484,7 @@ Partial Class frmNodeNavigation ' Me.SplitContainerDocumentSearch.Panel2.Controls.Add(Me.GridControlDocSearch) Me.SplitContainerDocumentSearch.Panel2.Text = "Panel2" - Me.SplitContainerDocumentSearch.Size = New System.Drawing.Size(537, 409) + Me.SplitContainerDocumentSearch.Size = New System.Drawing.Size(535, 419) Me.SplitContainerDocumentSearch.SplitterPosition = 133 Me.SplitContainerDocumentSearch.TabIndex = 1 ' @@ -494,7 +495,7 @@ Partial Class frmNodeNavigation Me.pnlControls.Dock = System.Windows.Forms.DockStyle.Fill Me.pnlControls.Location = New System.Drawing.Point(0, 0) Me.pnlControls.Name = "pnlControls" - Me.pnlControls.Size = New System.Drawing.Size(537, 133) + Me.pnlControls.Size = New System.Drawing.Size(535, 133) Me.pnlControls.TabIndex = 0 ' 'GridControlDocSearch @@ -508,7 +509,7 @@ Partial Class frmNodeNavigation Me.GridControlDocSearch.Location = New System.Drawing.Point(0, 0) Me.GridControlDocSearch.MainView = Me.GridViewDoc_Search Me.GridControlDocSearch.Name = "GridControlDocSearch" - Me.GridControlDocSearch.Size = New System.Drawing.Size(537, 266) + Me.GridControlDocSearch.Size = New System.Drawing.Size(535, 274) Me.GridControlDocSearch.TabIndex = 8 Me.GridControlDocSearch.TabStop = False Me.GridControlDocSearch.ViewCollection.AddRange(New DevExpress.XtraGrid.Views.Base.BaseView() {Me.GridViewDoc_Search}) @@ -747,7 +748,7 @@ Partial Class frmNodeNavigation ' Me.SplitContainerDocView.CollapsePanel = DevExpress.XtraEditors.SplitCollapsePanel.Panel2 Me.SplitContainerDocView.Dock = System.Windows.Forms.DockStyle.Fill - Me.SplitContainerDocView.Location = New System.Drawing.Point(0, 158) + Me.SplitContainerDocView.Location = New System.Drawing.Point(0, 147) Me.SplitContainerDocView.Name = "SplitContainerDocView" ' 'SplitContainerDocView.Panel1 @@ -759,7 +760,7 @@ Partial Class frmNodeNavigation ' Me.SplitContainerDocView.Panel2.Controls.Add(Me.DocumentViewer) Me.SplitContainerDocView.Panel2.Text = "Panel2" - Me.SplitContainerDocView.Size = New System.Drawing.Size(1151, 409) + Me.SplitContainerDocView.Size = New System.Drawing.Size(1151, 419) Me.SplitContainerDocView.SplitterPosition = 776 Me.SplitContainerDocView.TabIndex = 0 ' @@ -770,7 +771,7 @@ Partial Class frmNodeNavigation Me.DocumentViewer.FileLoaded = False Me.DocumentViewer.Location = New System.Drawing.Point(0, 0) Me.DocumentViewer.Name = "DocumentViewer" - Me.DocumentViewer.Size = New System.Drawing.Size(365, 409) + Me.DocumentViewer.Size = New System.Drawing.Size(363, 419) Me.DocumentViewer.TabIndex = 0 Me.DocumentViewer.Viewer_ForceTemporaryMode = False ' @@ -784,26 +785,33 @@ Partial Class frmNodeNavigation ' Me.OpenFileDialog1.FileName = "OpenFileDialog1" ' - 'CMSAdmin_Treeview + 'CMSTreeview ' - Me.CMSAdmin_Treeview.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.KnotenLöschenadminToolStripMenuItem, Me.KnotenVerschiebenToolStripMenuItem, Me.KnotenUmbenennenToolStripMenuItem}) - Me.CMSAdmin_Treeview.Name = "CMSAdmin_Treeview" - Me.CMSAdmin_Treeview.Size = New System.Drawing.Size(202, 92) + Me.CMSTreeview.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.KnotenVerschiebenToolStripMenuItem, Me.KnotenUmbenennenToolStripMenuItem, Me.KnotenLöschenadminToolStripMenuItem, Me.KnotenUndDateienLöschenToolStripMenuItem}) + Me.CMSTreeview.Name = "CMSAdmin_Treeview" + Me.CMSTreeview.Size = New System.Drawing.Size(228, 114) ' 'KnotenLöschenadminToolStripMenuItem ' Me.KnotenLöschenadminToolStripMenuItem.Image = Global.DD_Record_Organizer.My.Resources.Resources.delete Me.KnotenLöschenadminToolStripMenuItem.Name = "KnotenLöschenadminToolStripMenuItem" - Me.KnotenLöschenadminToolStripMenuItem.Size = New System.Drawing.Size(201, 22) - Me.KnotenLöschenadminToolStripMenuItem.Text = "Knoten löschen (admin)" + Me.KnotenLöschenadminToolStripMenuItem.Size = New System.Drawing.Size(186, 22) + Me.KnotenLöschenadminToolStripMenuItem.Text = "Knoten löschen" ' 'KnotenVerschiebenToolStripMenuItem ' Me.KnotenVerschiebenToolStripMenuItem.Image = Global.DD_Record_Organizer.My.Resources.Resources.table_refresh Me.KnotenVerschiebenToolStripMenuItem.Name = "KnotenVerschiebenToolStripMenuItem" - Me.KnotenVerschiebenToolStripMenuItem.Size = New System.Drawing.Size(201, 22) + Me.KnotenVerschiebenToolStripMenuItem.Size = New System.Drawing.Size(186, 22) Me.KnotenVerschiebenToolStripMenuItem.Text = "Knoten verschieben" ' + 'KnotenUmbenennenToolStripMenuItem + ' + Me.KnotenUmbenennenToolStripMenuItem.Image = Global.DD_Record_Organizer.My.Resources.Resources.brick + Me.KnotenUmbenennenToolStripMenuItem.Name = "KnotenUmbenennenToolStripMenuItem" + Me.KnotenUmbenennenToolStripMenuItem.Size = New System.Drawing.Size(186, 22) + Me.KnotenUmbenennenToolStripMenuItem.Text = "Knoten umbenennen" + ' 'PopupMenu1 ' Me.PopupMenu1.Name = "PopupMenu1" @@ -1078,12 +1086,12 @@ Partial Class frmNodeNavigation Me.DD_DMSDataSet1.DataSetName = "DD_DMSDataSet" Me.DD_DMSDataSet1.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema ' - 'KnotenUmbenennenToolStripMenuItem + 'KnotenUndDateienLöschenToolStripMenuItem ' - Me.KnotenUmbenennenToolStripMenuItem.Image = Global.DD_Record_Organizer.My.Resources.Resources.brick - Me.KnotenUmbenennenToolStripMenuItem.Name = "KnotenUmbenennenToolStripMenuItem" - Me.KnotenUmbenennenToolStripMenuItem.Size = New System.Drawing.Size(201, 22) - Me.KnotenUmbenennenToolStripMenuItem.Text = "Knoten umbenennen" + Me.KnotenUndDateienLöschenToolStripMenuItem.Image = Global.DD_Record_Organizer.My.Resources.Resources.delete + Me.KnotenUndDateienLöschenToolStripMenuItem.Name = "KnotenUndDateienLöschenToolStripMenuItem" + Me.KnotenUndDateienLöschenToolStripMenuItem.Size = New System.Drawing.Size(227, 22) + Me.KnotenUndDateienLöschenToolStripMenuItem.Text = "Knoten UND Dateien löschen" ' 'frmNodeNavigation ' @@ -1128,7 +1136,7 @@ Partial Class frmNodeNavigation Me.SplitContainerDocView.Panel2.ResumeLayout(False) CType(Me.SplitContainerDocView, System.ComponentModel.ISupportInitialize).EndInit() Me.SplitContainerDocView.ResumeLayout(False) - Me.CMSAdmin_Treeview.ResumeLayout(False) + Me.CMSTreeview.ResumeLayout(False) CType(Me.PopupMenu1, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.BarManager1, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.PopupMenu2, System.ComponentModel.ISupportInitialize).EndInit() @@ -1204,7 +1212,7 @@ Partial Class frmNodeNavigation Friend WithEvents tsitmDMSReadOnly As DevExpress.XtraBars.BarStaticItem Friend WithEvents XtraSaveFileDialog1 As DevExpress.XtraEditors.XtraSaveFileDialog Friend WithEvents OpenFileDialog1 As OpenFileDialog - Friend WithEvents CMSAdmin_Treeview As ContextMenuStrip + Friend WithEvents CMSTreeview As ContextMenuStrip Friend WithEvents KnotenLöschenadminToolStripMenuItem As ToolStripMenuItem Friend WithEvents KnotenVerschiebenToolStripMenuItem As ToolStripMenuItem Friend WithEvents PopupMenu1 As DevExpress.XtraBars.PopupMenu @@ -1246,4 +1254,5 @@ Partial Class frmNodeNavigation Friend WithEvents AlleDateienAuswählenToolStripMenuItem As ToolStripMenuItem Friend WithEvents AlleDateienEntwaehlenToolStripMenuItem As ToolStripMenuItem Friend WithEvents KnotenUmbenennenToolStripMenuItem As ToolStripMenuItem + Friend WithEvents KnotenUndDateienLöschenToolStripMenuItem As ToolStripMenuItem End Class diff --git a/app/DD-Record-Organizer/frmNodeNavigation.resx b/app/DD-Record-Organizer/frmNodeNavigation.resx index 1973d63..9776d77 100644 --- a/app/DD-Record-Organizer/frmNodeNavigation.resx +++ b/app/DD-Record-Organizer/frmNodeNavigation.resx @@ -529,6 +529,12 @@ 17, 17 + + 483, 17 + + + 17, 17 + @@ -537,9 +543,6 @@ ZXZFeHByZXNzLlV0aWxzLkltYWdlQ29sbGVjdGlvblN0cmVhbWVyAAAAAAIAAAAL - - 483, 17 - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -767,7 +770,7 @@ 1101, 17 - + 1242, 17 diff --git a/app/DD-Record-Organizer/frmNodeNavigation.vb b/app/DD-Record-Organizer/frmNodeNavigation.vb index 7d22f5f..b4f6fe5 100644 --- a/app/DD-Record-Organizer/frmNodeNavigation.vb +++ b/app/DD-Record-Organizer/frmNodeNavigation.vb @@ -199,11 +199,7 @@ Public Class frmNodeNavigation ' ✅ NEU: GridView Performance-Optimierung HIER initialisieren ConfigureGridViewForPerformance() - If USER_IS_ADMIN Then - TreeListDevexpress.ContextMenuStrip = CMSAdmin_Treeview - Else - TreeListDevexpress.ContextMenuStrip = Nothing - End If + UpdateTreeviewContextMenuState() ' Hintergrund Bild initialisieren 'If (System.IO.File.Exists(Application.StartupPath + "\Resources\windream-portrait_col_RGB_Wordpress.png")) Then @@ -431,9 +427,9 @@ Public Class frmNodeNavigation $"ButtonVisible={btnCreateNewNode.Visibility}, HasAddRightForConfigNode={HasAddRightForConfigNode}, ConfigTableRows={If(IsNothing(DT_CONFIGURABLE_NODES), 0, DT_CONFIGURABLE_NODES.Rows.Count)}") - ' NEUE zentrale Methode aufrufen statt direkter Manipulation UpdateCreateNodeButtonState() + UpdateTreeviewContextMenuState() ' END NEW NODE _NODE_ID = oGuid @@ -487,8 +483,7 @@ Public Class frmNodeNavigation CtrlBuilder.ControlsChanged.Clear() Load_DocGrid_Layout() - 'Load_Grid_Layout() - 'Load_Variants_Grid_Layout() + 'swAll.Done() Node_AfterSelect = False @@ -558,6 +553,45 @@ Public Class frmNodeNavigation btnCreateNewNode.Enabled = False End Try End Sub + ''' + ''' Aktiviert das TreeView-Kontextmenü für Admins ODER wenn konfigurierbare Knoten vorhanden sind. + ''' + Private Sub UpdateTreeviewContextMenuState() + Try + NNLogger.Debug($"UpdateTreeviewContextMenuState called - " & + $"USER_IS_ADMIN={USER_IS_ADMIN}, " & + $"ConfigTableExists={Not IsNothing(DT_CONFIGURABLE_NODES)}, " & + $"ConfigTableRows={If(IsNothing(DT_CONFIGURABLE_NODES), 0, DT_CONFIGURABLE_NODES.Rows.Count)}") + + Dim shouldEnableContextMenu As Boolean = False + + ' ✅ Bedingung 1: Admin + ' ✅ Bedingung 2: Konfigurierbare Knoten vorhanden UND Benutzer hat Add-Recht + If USER_IS_ADMIN Then + shouldEnableContextMenu = True + ElseIf Not IsNothing(DT_CONFIGURABLE_NODES) AndAlso + DT_CONFIGURABLE_NODES.Rows.Count > 0 AndAlso + (HasAddRightForConfigNode = True OrElse AvailableConfigNodes.Count > 0) Then + shouldEnableContextMenu = True + End If + + ' Thread-sicheres Update + If Me.InvokeRequired Then + Me.Invoke(Sub() + TreeListDevexpress.ContextMenuStrip = If(shouldEnableContextMenu, CMSTreeview, Nothing) + End Sub) + Else + TreeListDevexpress.ContextMenuStrip = If(shouldEnableContextMenu, CMSTreeview, Nothing) + End If + + NNLogger.Debug($"TreeView ContextMenu = {If(shouldEnableContextMenu, "ENABLED", "DISABLED")}") + + Catch ex As Exception + NNLogger.Error(ex) + ' Im Fehlerfall: Sicherheitshalber deaktivieren + TreeListDevexpress.ContextMenuStrip = Nothing + End Try + End Sub Public Async Function ShowDialogAsync() As Task(Of DialogResult) Return Await Task.Run(Function() Return MessageBox.Show("Der Parent-Node wird nun getauscht? Wollen Sie fortfahren?", @@ -732,6 +766,8 @@ Public Class frmNodeNavigation btnCreateNewNode.Visibility = DevExpress.XtraBars.BarItemVisibility.Always ' Initial-State setzen UpdateCreateNodeButtonState() + ' ✅ NEU: Kontextmenü-Status initial setzen + UpdateTreeviewContextMenuState() End If End If Catch ex As Exception @@ -3675,6 +3711,13 @@ Public Class frmNodeNavigation Dim oSuccess = oNodeCreator.AddNode(_ENTITY_ID, oForm.Title, oParentNodeGuid, oForm.Id, oCreateRecord) If oSuccess = True Then + + If oParentNodeGuid > 0 Then + Dim oSQL = $"EXEC PRCUST_REORDER_CHILD_NODES " + MyTreeListViewState.SaveState() + oSQL += $" {_NODE_ID},0 " + MYDB_ECM.ExecuteNonQuery(oSQL) + End If Dim oMessage As String = "Der Knoten wurde erfolgreich angelegt! Wollen Sie die Sicht jetzt neu laden? Abhängig von der Anzahl der Knoten kann dies einige Sekunden dauern." If MsgBox(oMessage, MsgBoxStyle.Question Or MsgBoxStyle.YesNo, Text) = MsgBoxResult.Yes Then @@ -4068,4 +4111,13 @@ Public Class frmNodeNavigation ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Fehler beim Umbenennen des Knotens: ", ex.Message) End Try End Sub + + Private Sub CMSTreeview_Opening(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles CMSTreeview.Opening + If USER_IS_ADMIN Then + KnotenUndDateienLöschenToolStripMenuItem.Visible = True + Else + KnotenUndDateienLöschenToolStripMenuItem.Visible = False + End If + + End Sub End Class \ No newline at end of file diff --git a/app/DD-Record-Organizer/frmRight_Management.resx b/app/DD-Record-Organizer/frmRight_Management.resx index 1597599..cf5a094 100644 --- a/app/DD-Record-Organizer/frmRight_Management.resx +++ b/app/DD-Record-Organizer/frmRight_Management.resx @@ -159,7 +159,7 @@ 9, 72 - 33, 13 + 32, 13 24 @@ -216,7 +216,7 @@ True - 567, 43 + 708, 43 64, 13 @@ -246,10 +246,10 @@ True - 827, 43 + 869, 43 - 78, 13 + 77, 13 34 @@ -276,7 +276,7 @@ True - 567, 72 + 708, 88 74, 13 @@ -306,10 +306,10 @@ True - 827, 72 + 869, 88 - 88, 13 + 87, 13 36 @@ -350,13 +350,13 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAW9JREFUOE+1kE0ow2Ecx3dV3krt4oJaOSCTvIRkMqSxyITIzCQHDouEdnFwIOVC - DrhIDiQl5UTiNG/z2ppafy1S2gX/uDwfY6i1v7Hie3nqeb7fz+/7/FR/Ilwn0G0Exw4fV5GJlXlEZxXC - rIet9bAQvB5Ymgn2sLYAvSZEux7RUQFzE4qQt4bCXAYjPaHvnDoCkLpsRGMB2JqCTGLIijDlwqQ9bEMV - i9OIytR3EMNWcJ/BWH8A6j8/bOGFxwXNxYEvGbMQ9XnQ1/K78KfY3/VXzkMY0qFGG2H4RoLGQshJQNbG - 86CNhdrsX9a/uQZTPhQl4rMY4OLofbl3aX7I8uwPC7y/g1YdjyVJuEvT8e1tfwUYteHUxCCfHChDeHmG - QQvokjlOU+PbWA0x3pZnILVVI3uvQyHsbiLnqnGmRCF1NYD8pDhpRxOH7HQoAKZGkFKjceszQbpSrumX - bO+G80MFwKUTxgfgcO/b8D9IpXoFiiMDHIQm0skAAAAASUVORK5CYII= + vAAADrwBlbxySQAAAWtJREFUOE+1kE0ow2Ecx/9X5a2UiwtKOSCTmJBMhuQlMo3IvCUHDouEXHZwIOVC + DrhIDiQl5USy07zNa2tKf2laaRf84/J8xBCetab4XL/f76fn+SnKX4DrGLqrwbHDzywkWJlHdJYjLEbY + Wg8q4eYKlma+d1hbgF4TotWIaC+FuYmAktcXCksx2HrknBOHX1KbiTDngrXhW0kMdSBM2TA5Io+/wuI0 + oiz5TcRwB7hPYazfLx3rDz7+gCsXNBb4v1SdgajTQ19TaOMP2NtFmPSIilSo0v1y7FHBnAdZMWi6aO51 + kVCTGZoEzzWYciA/Dl9bBZwfvh3XmxIJy7PBJdx5odnAQ2E87qJUfPbtzwGjVpxJEWjH+4ElPD/BYBsY + EjhKicW3sSoVb0vSUFsq0W6upUxhdxMtOxZnYhhqVz1oj3JJUZSdpCg0p0POmLKhJofjNqaDeikX3tFG + uuHsQM65cML4ABzY5fA/eQGKIwMcVjm2bAAAAABJRU5ErkJggg== @@ -371,12 +371,12 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAASpJREFUOE9jGDygcNbz/00Lnv/PnPj4P1QIA4S3P8Apx5A789n/VUfe/8elKL77 - wf/ghmu4DciY8vT/wn0fsCqK73n4f+n+///9qy/gNiCh58n/aVveYyiKaL8P1pw56/9/r9ITuA2I7Hr0 - v3f1BxRFoa33wJpb1wFt7/z73yX/AG4DApsf/q+b/w6uKLjl7v9Fe///7wBqzpjz879d3c//9hnbcRvg - UXX/f/60NyiK7Ipv/0+f8/u/f9e3/zqF7/5bJKzHbYB96d3/2ZNfYyjSTzn/36ToxX+VrE//jSOX4TbA - Iu/O/9T+11gVGSSd+C+b9vW/bvA83AYYZt3+H9byEqci/dTL/zV8p+E2QCftxn+/6od4Fal4TMBtgFPu - lf8gBXgVDULAwAAA8HbAq6XlmnAAAAAASUVORK5CYII= + vAAADrwBlbxySQAAATFJREFUOE9jYBg0oHDW8/9NC57/z5z4+D+6HAyEtz/AKceQO/PZ/1VH3v/HpSi+ + +8H/4IZrWOXAIGPK0/8L933Aqii+5+H/pfv///evvoAhBwcJPU/+T9vyHkNRRPt9sObMWf//e5WewG1A + ZNej/72rP6AoCm29B9bcuu7/f//Ov/9d8g/gNiCw+eH/uvnv4IqCW+7+X7T3//+Odf//Z8z5+d+u7ud/ + +4ztuA3wqLr/P3/aGxRFdsW3/6fP+f3fv+vbf53Cd/8tEtbjNsC+9O7/7MmvMRTpp5z/b1L04r9K1qf/ + xpHLcBtgkXfnf2r/a6yKDJJO/JdN+/pfN3gehhwcGGbd/h/W8hKnIv3Uy/81fKdhlQMDnbQb//2qH+JV + pOIxAaccg1Pulf8gBXgVDUoAAPB2wKtYlLYeAAAAAElFTkSuQmCC @@ -391,10 +391,10 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAALZJREFUOE9jGDogvP3BfyiTdBDf/eB/cMM18gyI73n4f+n+///9qy+QbkBE+32w - 5sxZ//97lZ4gzYDQ1ntgza3rgLZ3/v3vkn+AeAOCW+7+X7T3//8OoOaMOT//29X9/G+fsZ00F9gV3/6f - Puf3f/+ub/91Ct/9t0hYT3oY6Kec/29S9OK/Stan/8aRy0g3AAQMkk78l037+l83eB55BoCAfurl/xq+ - 08g3AARUPCZQZsBgBQwMANAUYJgEulBVAAAAAElFTkSuQmCC + vAAADrwBlbxySQAAALtJREFUOE9jYBgyILz9wX90MaJBfPeD/8EN18gzIL7n4f+l+///96++QLoBEe33 + wZozZ/3/71V6gjQDQlvvgTW3rvv/37/z73+X/APEGxDccvf/or3//3es+/8/Y87P/3Z1P//bZ2wn3gAQ + sCu+/T99zu///l3f/usUvvtvkbCeNANAQD/l/H+Tohf/VbI+/TeOXEa6ASBgkHTiv2za1/+6wfPIMwAE + 9FMv/9fwnUa+ASCg4jGBMgMGLwAA0BRgmCws/7cAAAAASUVORK5CYII= @@ -433,10 +433,10 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAKNJREFUOE9jGHygcNbz/1AmeSB35rP/Cd33yDckY8rT//P2//6f0HWHPEMSep78 - n73v1//OrX//u5VeJt2QyK5H/6ds+/W/ZOnf/wnT//63yT1LmiGBzQ//t659D9ZsXPLlv3T0tf/GkcuI - N8Sj6v7/krnv4JoVXXpIc4F96d3/gS3PyNMMAhZ5d/7bFFwhTzMIGGbdJl8zCOik3SBf81AEDAwAoH5f - oAc0QjgAAAAASUVORK5CYII= + vAAADrwBlbxySQAAAKRJREFUOE9jYBh0oHDW8//oYiSB3JnP/id03yPfkIwpT//P2//7f0LXHfIMSeh5 + 8n/2vl//O7f+/e9Wepl0QyK7Hv2fsu3X/5Klf/8nTP/73yb3LGmGBDY//N+69j1Ys3HJl//S0df+G0cu + I94Qj6r7/0vmvoNrVnTpIV4zCNiX3v0f2PKMPM0gYJF3579NwRXyNIOAYdZt8jWDgE7aDfI1D00AAKB+ + X6Bjq5qXAAAAAElFTkSuQmCC @@ -451,12 +451,12 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAASxJREFUOE9jGFygcNbz/1AmBgDJNS14/j9z4mOcahhyZz77n9B9D6sCkNyqI+// - h7c/wG1AxpSn/+ft//0/oesOhiKQ3MJ9H/4HN1zDbUBCz5P/s/f9+t+59e9/t9LLKApBctO2vP/vX30B - twGRXY/+T9n263/J0r//E6b//W+TexauGCTXu/rDf6/SE7gNCGx++L917XuwZuOSL/+lo6/9N45cBtYA - kqub/+6/S/4B3AZ4VN3/XzL3HVyzoksPXDFILn/am//2GdtxG2Bfevd/YMszDM0gAJLLnvz6v0XCetwG - WOTd+W9TcAVDMwiA5FL7X8O9hBUYZt3GqhkEQHJhLS//6wbPw22ATtoNnJIgOb/qh/81fKfhNgAfcMq9 - 8l/FYwIYQ4UGBWBgAAC+0b+zuQxOnAAAAABJRU5ErkJggg== + vAAADrwBlbxySQAAAStJREFUOE9jYBhUoHDW8//oYjAAkmta8Px/5sTHONUw5M589j+h+x5WBSC5VUfe + /w9vf4BVHgwypjz9P2//7/8JXXcwFIHkFu778D+44RqGHBwk9Dz5P3vfr/+dW//+dyu9jKIQJDdty/v/ + /tUXcBsQ2fXo/5Rtv/6XLP37P2H63/82uWfhikFyvas//PcqPYHbgMDmh/9b174HazYu+fJfOvraf+PI + ZWANILm6+e/+u+QfwG2AR9X9/yVz38E1K7r0wBWD5PKnvflvn7EdtwH2pXf/B7Y8w9AMk8ue/Pq/RcJ6 + 3AZY5N35b1NwBUMzTC61/zXcS1iBYdZtrJpBACQX1vLyv27wPKzyYKCTdgOnJEjOr/rhfw3faTjV4AVO + uVf+q3hMAGN0uYEFAL7Rv7NmXVYYAAAAAElFTkSuQmCC @@ -490,10 +490,10 @@ ToolStripButton1 - 2, 2 + 3, 3 - 1293, 25 + 1033, 25 4 @@ -547,10 +547,10 @@ None - 0, 424 + 0, 436 - 1169, 22 + 1047, 22 5 @@ -574,7 +574,7 @@ True - 74, 27 + 78, 24 231, 21 @@ -598,7 +598,7 @@ MiddleLeft - 611, 25 + 615, 22 98, 23 @@ -628,7 +628,7 @@ True - 16, 30 + 20, 27 35, 13 @@ -652,7 +652,7 @@ 2 - 374, 27 + 378, 24 231, 21 @@ -680,7 +680,7 @@ NoControl - 319, 30 + 323, 27 49, 13 @@ -707,10 +707,10 @@ Segoe UI, 8.25pt, style=Bold, Italic - 15, 166 + 12, 153 - 914, 71 + 732, 63 43 @@ -731,10 +731,10 @@ 0 - 1151, 85 + 872, 104 - 148, 28 + 148, 22 37 @@ -752,10 +752,10 @@ 2 - 841, 87 + 711, 104 - 186, 28 + 135, 22 36 @@ -773,10 +773,10 @@ 4 - 1151, 48 + 872, 59 - 148, 28 + 148, 22 35 @@ -794,10 +794,10 @@ 6 - 841, 51 + 711, 59 - 186, 28 + 135, 22 33 @@ -962,7 +962,7 @@ 90, 120 - 289, 28 + 289, 22 26 @@ -983,7 +983,7 @@ 90, 87 - 289, 28 + 289, 22 25 @@ -1004,7 +1004,7 @@ 90, 55 - 125, 28 + 125, 22 24 @@ -1079,10 +1079,10 @@ Geändert wann - 12, 196 + 12, 222 - 1259, 179 + 1008, 182 23 @@ -1106,7 +1106,7 @@ 3, 3, 3, 3 - 1161, 398 + 1039, 410 0 @@ -1132,18 +1132,18 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJpSURBVDhPpZP7S1NhGMf9W/SHKEGiGyFhFBTmvMyd - tTa3eTvL9LjFIpam7AzTDGoYuvCHcJbaVSt/yTSxUV4ycnYdWh4rL+3URq3pObumfNsmbS5HEL3weeE8 - PJ/vy3nOeZMA/BcbCgsaTco8Van/QJUzsyqSm1GVcO9JJTNFyvW2UmnKn/1xD4tqDfGJotjvpib4RywI - vLUiMDEK/n43FrRleF1IsC+UQmK9EyfPVVD88t1urM6+Q3DwHoJdzQiaL+Dn7TasjA/CUauFVZ7NP5dm - RkMi27xanRyS7dzNLqwyNgQvn4O72YClphr4LxkQaKHhN56C/8EtLB4nMX7kgH1Msi85GhCSaWe9Hiu2 - yciJPhMN13kdvA3qOLjTJPy91/AqLwPD4gw6GvCROsZ4eq8j2GOG21iFb0XihCxXkeCb6uAwVOMxkc5E - A5gKlTfwsBdBkwHus9pQKfFyyHLgogqxZG6FJW+XN1RaC5ghi7y+ng74G7XwnimPNCda4QBnmQJLba0Y - Em6LBUyXKhiXsQ6+ZhrcSWWkMSHyPLjra7FQq8OgIC32CrZiKc1IBPD2dMKtksBVJtogs9JssAUieLqu - YFS4AwNZW2JDfFMkTn5ZQtgXK0vgudMRGZhTIVwTZblgJSFZIgTf2Y6pYnFYtvcJNsc+Y5jJghxiQnaI - nzuqgOdGB3400nCQcnxRyuBq0IO/2o5pZT76s1L5kBz/I/3mmfQg8fTwftYq2oOvNTq4Wi5G+Fx9Ak9y - todldr0cJi4gzIh4b8qwMF1vIXYzj/J3ckOCrdxAbhrTn52q78vc9PfL9O8g6Rcd0s65aUjWSwAAAABJ - RU5ErkJggg== + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJnSURBVDhPpZPtT1JRHMf9W/RFMzfXelpzzVZbzQQU + uUQg4NMlkys2WjNNx2Wm2VaMhjRfNLGUHrXyTaY5c6WWLbFHpuW1QolbuCL0XhBI923QglTqRZ3tc7Zz + dr6fs/M756QASPkf1k3MVVWlzVKVhndUBTOjIblpTSn3llQzk6TS4CyTp61dv2rg1lURHyiK/Wo1IzQy + hPBrB8Ljo+DvdGFOX46XRQT7TC0mkgqiYZeW4hdvdWFl5g0iA7cRsVsQsZ3F9xttWB4bgLdeD4dSyD+V + 58QlsW5Wp0t1aSkPd82OFcaJyIXT8FuMWDDXIXTeiHALjZDpOEJ3r8N9hMTYwb2eR7LdqXGBS0vR840G + LDsnYjsuWWn4zlQj2KRbBXeCRKjnMl7kZ2NYmk3HBe+pw0yg5woi3Tb4TTX4UixNymINCd7cAK+xFg+I + LCYuYLSaYPheDyJWI/yn9PhT8ypE8FFFWLC1Yih/ezAumCaLg0vdHQg16xE8WbE2F29RwXy5CgttrRgU + b04IpspUjM/UgCULDe6YOrYwKcp8+BvrMVdfjQFBZuIIzhI5zcgECHZ3wq+RwVcuWRdm5UKwhRIE7Bcx + Kt6K/tyNiSK+KpamPi8lPO7KUgRudsQKNq8S/wwq8sDKhGBlYvCd7ZgskUbDnl5BeuIao0wUiohxxX7e + dUiFwNUOfGum4SWV+KRWwNdkAH+pHVPqAvTlZvC9gvTVD+kXT+T7iMcH9rAOyU58rquGr+VcjI+1R/FQ + tCUaZn8PrxNEGZHuShsWZxmGiB3M/YJt3KBgE9efl8n0CTMMvTkb/v6Z/oUfHdLOuUgtmkUAAAAASUVO + RK5CYII= @@ -1262,10 +1262,10 @@ Des Weiteren werden die Rechte für die Zugriffsrechte auf die Dateien angewende iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAALhJREFUOE+tk8ENhCAQRSnFWqiEOiiAO42sJXjmRCnsXriy83VIZCQE153kJcKf - /yM6KFk5Z0NsRBFgz3DbtUhciBhCKNbaorVuwB409KCXbUexOTnnLkaJ9x4hqQmhRYTQM/TgkFjNBq8m - m9bXWt7ps4NnqfNxDAK23pnBKAQeeBHQCJJRCLxNQG0ccQ75f0CPmSM8/ojPfiPPQpyZwkozSCha7KM8 - M43dUUZxyG+X6Vwk3rjOSn0Bs2pSjcG3D98AAAAASUVORK5CYII= + vAAADrwBlbxySQAAAK9JREFUOE+tk8ENwyAQBF1KaqES6qAA/jQSl+A3L0oh+ewXay2w4EwSHPuklSzu + duSzl2kSBUADWAAkIZ5pOb8XgAeA4L1PxpiklGrEM/Y4w9meOVprD0Yp5xwhsYGQyoYc/qQMCcWs+Wpy + aH7O6RXfm/gs+3kdTcDS2/kXhB56CTgYRyH0NoAy+E015H5ATyMrXP6I135jCdJICouaINVRHkljN8oV + 5L/LVNfZ67wCs2pSjfnFgloAAAAASUVORK5CYII= @@ -1610,12 +1610,12 @@ Des Weiteren werden die Rechte für die Zugriffsrechte auf die Dateien angewende iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAASpJREFUOE9jGDygcNbz/00Lnv/PnPj4P1QIA4S3P8Apx5A789n/VUfe/8elKL77 - wf/ghmu4DciY8vT/wn0fsCqK73n4f+n+///9qy/gNiCh58n/aVveYyiKaL8P1pw56/9/r9ITuA2I7Hr0 - v3f1BxRFoa33wJpb1wFt7/z73yX/AG4DApsf/q+b/w6uKLjl7v9Fe///7wBqzpjz879d3c//9hnbcRvg - UXX/f/60NyiK7Ipv/0+f8/u/f9e3/zqF7/5bJKzHbYB96d3/2ZNfYyjSTzn/36ToxX+VrE//jSOX4TbA - Iu/O/9T+11gVGSSd+C+b9vW/bvA83AYYZt3+H9byEqci/dTL/zV8p+E2QCftxn+/6od4Fal4TMBtgFPu - lf8gBXgVDULAwAAA8HbAq6XlmnAAAAAASUVORK5CYII= + vAAADrwBlbxySQAAATFJREFUOE9jYBg0oHDW8/9NC57/z5z4+D+6HAyEtz/AKceQO/PZ/1VH3v/HpSi+ + +8H/4IZrWOXAIGPK0/8L933Aqii+5+H/pfv///evvoAhBwcJPU/+T9vyHkNRRPt9sObMWf//e5WewG1A + ZNej/72rP6AoCm29B9bcuu7/f//Ov/9d8g/gNiCw+eH/uvnv4IqCW+7+X7T3//+Odf//Z8z5+d+u7ud/ + +4ztuA3wqLr/P3/aGxRFdsW3/6fP+f3fv+vbf53Cd/8tEtbjNsC+9O7/7MmvMRTpp5z/b1L04r9K1qf/ + xpHLcBtgkXfnf2r/a6yKDJJO/JdN+/pfN3gehhwcGGbd/h/W8hKnIv3Uy/81fKdhlQMDnbQb//2qH+JV + pOIxAaccg1Pulf8gBXgVDUoAAPB2wKtYlLYeAAAAAElFTkSuQmCC @@ -1630,10 +1630,10 @@ Des Weiteren werden die Rechte für die Zugriffsrechte auf die Dateien angewende iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAALZJREFUOE9jGDogvP3BfyiTdBDf/eB/cMM18gyI73n4f+n+///9qy+QbkBE+32w - 5sxZ//97lZ4gzYDQ1ntgza3rgLZ3/v3vkn+AeAOCW+7+X7T3//8OoOaMOT//29X9/G+fsZ00F9gV3/6f - Puf3f/+ub/91Ct/9t0hYT3oY6Kec/29S9OK/Stan/8aRy0g3AAQMkk78l037+l83eB55BoCAfurl/xq+ - 08g3AARUPCZQZsBgBQwMANAUYJgEulBVAAAAAElFTkSuQmCC + vAAADrwBlbxySQAAALtJREFUOE9jYBgyILz9wX90MaJBfPeD/8EN18gzIL7n4f+l+///96++QLoBEe33 + wZozZ/3/71V6gjQDQlvvgTW3rvv/37/z73+X/APEGxDccvf/or3//3es+/8/Y87P/3Z1P//bZ2wn3gAQ + sCu+/T99zu///l3f/usUvvtvkbCeNANAQD/l/H+Tohf/VbI+/TeOXEa6ASBgkHTiv2za1/+6wfPIMwAE + 9FMv/9fwnUa+ASCg4jGBMgMGLwAA0BRgmCws/7cAAAAASUVORK5CYII= @@ -1672,10 +1672,10 @@ Des Weiteren werden die Rechte für die Zugriffsrechte auf die Dateien angewende iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAAKNJREFUOE9jGHygcNbz/1AmeSB35rP/Cd33yDckY8rT//P2//6f0HWHPEMSep78 - n73v1//OrX//u5VeJt2QyK5H/6ds+/W/ZOnf/wnT//63yT1LmiGBzQ//t659D9ZsXPLlv3T0tf/GkcuI - N8Sj6v7/krnv4JoVXXpIc4F96d3/gS3PyNMMAhZ5d/7bFFwhTzMIGGbdJl8zCOik3SBf81AEDAwAoH5f - oAc0QjgAAAAASUVORK5CYII= + vAAADrwBlbxySQAAAKRJREFUOE9jYBh0oHDW8//oYiSB3JnP/id03yPfkIwpT//P2//7f0LXHfIMSeh5 + 8n/2vl//O7f+/e9Wepl0QyK7Hv2fsu3X/5Klf/8nTP/73yb3LGmGBDY//N+69j1Ys3HJl//S0df+G0cu + I94Qj6r7/0vmvoNrVnTpIV4zCNiX3v0f2PKMPM0gYJF3579NwRXyNIOAYdZt8jWDgE7aDfI1D00AAKB+ + X6Bjq5qXAAAAAElFTkSuQmCC @@ -1690,12 +1690,12 @@ Des Weiteren werden die Rechte für die Zugriffsrechte auf die Dateien angewende iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAASxJREFUOE9jGFygcNbz/1AmBgDJNS14/j9z4mOcahhyZz77n9B9D6sCkNyqI+// - h7c/wG1AxpSn/+ft//0/oesOhiKQ3MJ9H/4HN1zDbUBCz5P/s/f9+t+59e9/t9LLKApBctO2vP/vX30B - twGRXY/+T9n263/J0r//E6b//W+TexauGCTXu/rDf6/SE7gNCGx++L917XuwZuOSL/+lo6/9N45cBtYA - kqub/+6/S/4B3AZ4VN3/XzL3HVyzoksPXDFILn/am//2GdtxG2Bfevd/YMszDM0gAJLLnvz6v0XCetwG - WOTd+W9TcAVDMwiA5FL7X8O9hBUYZt3GqhkEQHJhLS//6wbPw22ATtoNnJIgOb/qh/81fKfhNgAfcMq9 - 8l/FYwIYQ4UGBWBgAAC+0b+zuQxOnAAAAABJRU5ErkJggg== + vAAADrwBlbxySQAAAStJREFUOE9jYBhUoHDW8//oYjAAkmta8Px/5sTHONUw5M589j+h+x5WBSC5VUfe + /w9vf4BVHgwypjz9P2//7/8JXXcwFIHkFu778D+44RqGHBwk9Dz5P3vfr/+dW//+dyu9jKIQJDdty/v/ + /tUXcBsQ2fXo/5Rtv/6XLP37P2H63/82uWfhikFyvas//PcqPYHbgMDmh/9b174HazYu+fJfOvraf+PI + ZWANILm6+e/+u+QfwG2AR9X9/yVz38E1K7r0wBWD5PKnvflvn7EdtwH2pXf/B7Y8w9AMk8ue/Pq/RcJ6 + 3AZY5N35b1NwBUMzTC61/zXcS1iBYdZtrJpBACQX1vLyv27wPKzyYKCTdgOnJEjOr/rhfw3faTjV4AVO + uVf+q3hMAGN0uYEFAL7Rv7NmXVYYAAAAAElFTkSuQmCC @@ -1780,7 +1780,7 @@ Des Weiteren werden die Rechte für die Zugriffsrechte auf die Dateien angewende 0, 0 - 1169, 424 + 1047, 436 6 @@ -1843,7 +1843,7 @@ Des Weiteren werden die Rechte für die Zugriffsrechte auf die Dateien angewende 6, 13 - 1169, 446 + 1047, 458 Segoe UI, 8.25pt