From e4d6734b030a69b29acf0f78391f501b3c8cb4af Mon Sep 17 00:00:00 2001 From: OlgunR Date: Mon, 27 Apr 2026 16:44:00 +0200 Subject: [PATCH] Improve session management and initialization logic Refactored ClassWindream_allgemein to enhance session lifecycle handling and robustness. Now, after successful impersonation/login, session and object type variables are set and errors are logged if loading fails. Changed impersonation/login to return Boolean for clarity. Init() now returns session creation success. Added GetWMSession to properly reset sessions. Ensured object types are loaded when reusing sessions. These changes improve error handling and maintain consistent session state. --- ToolCollection/ClassWindream_allgemein.vb | 37 ++++++++++++++++++++--- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/ToolCollection/ClassWindream_allgemein.vb b/ToolCollection/ClassWindream_allgemein.vb index 96abb1f..ce8e7d5 100644 --- a/ToolCollection/ClassWindream_allgemein.vb +++ b/ToolCollection/ClassWindream_allgemein.vb @@ -95,10 +95,24 @@ Public Class ClassWindream_allgemein SessionAsUser = aSession If aSession.aLoggedin = True Then _Logger.Debug($"#Impersonate login [{UserName}] successfull!") - Return SessionAsUser + Me.oWMSession = aSession + CURRENToWMSession = aSession + CURRENToWMSession_Created = Now + Me.oObjekttypen = aSession.GetWMObjectTypes(WINDREAMLib.WMEntity.WMEntityDocument) + If Err.Number <> 0 Then + _Logger.Warn("Fehler beim Laden der Objekttypen nach Impersonate-Login: " & Err.Description) + Err.Clear() + End If + Me.oOrdnerTypen = aSession.GetWMObjectTypes(WINDREAMLib.WMEntity.WMEntityFolder) + If Err.Number <> 0 Then + _Logger.Warn("Fehler beim Laden der Ordnertypen nach Impersonate-Login: " & Err.Description) + Err.Clear() + End If + Return True End If End If + Return False End Function ''' @@ -108,21 +122,36 @@ Public Class ClassWindream_allgemein ''' Public Function Init() As Boolean - If IsNothing(CURRENToWMSession) OrElse Not IsLoggedIn() Then + If IsNothing(CURRENToWMSession) OrElse Not CBool(CURRENToWMSession.aLoggedin) Then If WMLOGIN_DOMAIN <> String.Empty Then - GetWMSessionAsUser(WMLOGIN_DOMAIN, Me.GetCurrentServer, WMLOGIN_USER, WMLOGIN_PW) + Return GetWMSessionAsUser(WMLOGIN_DOMAIN, Me.GetCurrentServer, WMLOGIN_USER, WMLOGIN_PW) Else - GetWMSession() + Return GetWMSession() End If Else If My.Settings.vLogErrorsonly = False Then _Logger.Debug("WMSession already created!") oWMSession = CURRENToWMSession + If IsNothing(oObjekttypen) Then + oObjekttypen = oWMSession.GetWMObjectTypes(WINDREAMLib.WMEntity.WMEntityDocument) + End If + If IsNothing(oOrdnerTypen) Then + oOrdnerTypen = oWMSession.GetWMObjectTypes(WINDREAMLib.WMEntity.WMEntityFolder) + End If Return True End If End Function Private Function GetWMSession() + If Not IsNothing(CURRENToWMSession) Then + Try + CURRENToWMSession.Logout() + Catch + ' ignorieren – Session war evtl. schon tot + End Try + CURRENToWMSession = Nothing + End If + Try Try ' Session-Objekt instanziieren und mit dem im Client ausgewählten Server belegen