From 9e059a37f500111bc1c2a78b7e5637aa2bf8fd97 Mon Sep 17 00:00:00 2001 From: Rich Date: Fri, 30 May 2014 01:13:55 +0000 Subject: [PATCH] Modified vesp_SessionBegin to delete inactive owner records and inactive session records for current user after 5 minutes of inactivity and for all other users after 15 minutes of inactivity during start of new session. Added new stored procedure getOwnersByVersionID. Added method to OwnerInfoList class named GetByVersionID Utilized OwnerInfoList.GetByVersionID method --- PROMS/DataLoader/PROMSFixes.Sql | 63 ++++++++++++++++++- .../Extension/MultiUserExt.cs | 46 +++++++++++++- PROMS/Volian.Controls.Library/vlnTreeView.cs | 4 +- 3 files changed, 108 insertions(+), 5 deletions(-) diff --git a/PROMS/DataLoader/PROMSFixes.Sql b/PROMS/DataLoader/PROMSFixes.Sql index 1c1d6fe8..710a671a 100644 --- a/PROMS/DataLoader/PROMSFixes.Sql +++ b/PROMS/DataLoader/PROMSFixes.Sql @@ -7676,9 +7676,11 @@ BEGIN TRY -- Try Block --delete old closed sessions DELETE FROM Sessions WHERE UserID = @UserID and DTSEnd is not null --delete old owners from inactive sessions - DELETE FROM Owners WHERE SessionID in (SELECT SessionID FROM Sessions WHERE UserID = @UserID and DTSEnd is null and DTSActivity < DATEADD(minute, -15, getdate())) + DELETE FROM Owners WHERE SessionID in (SELECT SessionID FROM Sessions WHERE UserID = @UserID and DTSEnd is null and DTSActivity < DATEADD(minute, -5, getdate())) + DELETE FROM Owners WHERE SessionID in (SELECT SessionID FROM Sessions WHERE DTSEnd is null and DTSActivity < DATEADD(minute, -15, getdate())) --delete inactive sessions where last activity is before 15 minutes ago - DELETE FROM Sessions WHERE UserID = @UserID and DTSEnd is null and DTSActivity < DATEADD(minute, -15, getdate()) + DELETE FROM Sessions WHERE UserID = @UserID and DTSEnd is null and DTSActivity < DATEADD(minute, -5, getdate()) + DELETE FROM Sessions WHERE DTSEnd is null and DTSActivity < DATEADD(minute, -15, getdate()) INSERT INTO [Sessions]([UserID],[MachineName],[ProcessID]) VALUES (@UserID, @MachineName, @ProcessID) SELECT @@ -8551,3 +8553,60 @@ GO IF (@@Error = 0) PRINT 'Procedure Creation: vesp_ListTables3 Succeeded' ELSE PRINT 'Procedure Creation: vesp_ListTables3 Error on Creation' GO + +/****** Object: StoredProcedure [getOwnersByVersionID] ******/ +IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[getOwnersByVersionID]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) + DROP PROCEDURE [getOwnersByVersionID]; +GO + +/***************************************************************************** + Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE + Copyright 2012 - Volian Enterprises, Inc. All rights reserved. +*****************************************************************************/ +CREATE PROCEDURE [dbo].[getOwnersByVersionID] +( + @VersionID int +) + +WITH EXECUTE AS OWNER +AS + SELECT + [OwnerID], + [SessionID], + [OwnerType], + [OwnerItemID], + [DTSStart], + oo.[LastChanged] + FROM [Owners] oo + JOIN vefn_GetVersionItems(@VersionID) vi ON oo.OwnerItemID = vi.ItemID + WHERE oo.OwnerType = 0 + UNION + SELECT + [OwnerID], + [SessionID], + [OwnerType], + [OwnerItemID], + [DTSStart], + oo.[LastChanged] + FROM [Owners] oo + JOIN [Entries] ee on oo.OwnerItemID = ee.DocID + JOIN vefn_GetVersionItems(@VersionID) vi on ee.ContentID = vi.ContentID + WHERE oo.OwnerType = 1 + UNION + SELECT + [OwnerID], + [SessionID], + [OwnerType], + [OwnerItemID], + [DTSStart], + oo.[LastChanged] + FROM [Owners] oo + WHERE oo.OwnerType = 2 + AND oo.OwnerItemID = @VersionID + RETURN +GO +-- Display the status of Proc creation +IF (@@Error = 0) PRINT 'Procedure Creation: getOwnersByVersionID Succeeded' +ELSE PRINT 'Procedure Creation: getOwnersByVersionID Error on Creation' +GO + diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/MultiUserExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/MultiUserExt.cs index 1590a329..921c3002 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/MultiUserExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/MultiUserExt.cs @@ -535,7 +535,51 @@ namespace VEPROMS.CSLA.Library } this.RaiseListChangedEvents = true; } - } + public static OwnerInfoList GetByVersionID(int versionID) + { + OwnerInfoList tmp = DataPortal.Fetch(new GetByVersionIDCriteria(versionID)); + return tmp; + } + [Serializable()] + protected class GetByVersionIDCriteria + { + private int _VersionID; + public int VersionID { get { return _VersionID; } } + public GetByVersionIDCriteria(int versionID) + { + _VersionID = versionID; + } + } + private void DataPortal_Fetch(GetByVersionIDCriteria criteria) + { + this.RaiseListChangedEvents = false; + if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] OwnerInfoList.DataPortal_Fetch", GetHashCode()); + try + { + using (SqlConnection cn = Database.VEPROMS_SqlConnection) + { + using (SqlCommand cm = cn.CreateCommand()) + { + cm.CommandType = CommandType.StoredProcedure; + cm.CommandText = "getOwnersByVersionID"; + cm.Parameters.AddWithValue("@VersionID", criteria.VersionID); + using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader())) + { + IsReadOnly = false; + while (dr.Read()) this.Add(new OwnerInfo(dr)); + IsReadOnly = true; + } + } + } + } + catch (Exception ex) + { + if (_MyLog.IsErrorEnabled) _MyLog.Error("OwnerInfoList.DataPortal_Fetch", ex); + throw new DbCslaException("OwberInfoList.DataPortal_Fetch", ex); + } + this.RaiseListChangedEvents = true; + } + } public partial class OwnerInfo { public static OwnerInfo GetBySessionIDandVersionID(int sessionID, int versionID) diff --git a/PROMS/Volian.Controls.Library/vlnTreeView.cs b/PROMS/Volian.Controls.Library/vlnTreeView.cs index 689a37a6..0ede6946 100644 --- a/PROMS/Volian.Controls.Library/vlnTreeView.cs +++ b/PROMS/Volian.Controls.Library/vlnTreeView.cs @@ -532,7 +532,7 @@ namespace Volian.Controls.Library if (ui.IsAdministrator() || ui.IsSetAdministrator(dvi) || ui.IsWriter(dvi)) { OwnerInfoList.Reset(); - oil = OwnerInfoList.Get(); + oil = OwnerInfoList.GetByVersionID(dvi.VersionID); cm.MenuItems.Add("Refresh Checked Out Procedures", new EventHandler(mi_Click)); cm.MenuItems.Add("New Procedure", new EventHandler(mi_Click)); if (dvi.MultiUnitCount > 1) @@ -572,7 +572,7 @@ namespace Volian.Controls.Library else { OwnerInfoList.Reset(); - oil = OwnerInfoList.Get(); + oil = OwnerInfoList.GetByVersionID(dvi.VersionID); cm.MenuItems.Add("Refresh Checked Out Procedures", new EventHandler(mi_Click)); if (dvi.MultiUnitCount > 1) {