It’s a common issue to have users logged into Dynamics GP without closing the system for several hours, and sometimes for days. The user activity inquiry doesn’t provide much in-depth details regarding the Idle time and login date and timing. In this post, an SQL script is provided to cover this concern as illustrated below:
Tables Included:
- DYNAMICS..ACTIVITY
- DYNAMICS..SY01400 | USER Master
- DYNAMICS..SY01500 | Company Master
- Tempdb..DEX_SESSION
- master..sysprocesses
- master..sysdatabases
/*---------------------------------------------------------------------
Creation Date: 6th of September, 2014
Created by: Mahmoud M. AlSaadi
The main purpose of the script is to provide a user activity report,
along with the Idle and login details
The script has been tested on a very limited sample data.
Please feel free to contact me for any further enhancement
Revision History:
Revision No. RevisionDate Description
1 06/09/2014 Original Version
2 15/09/2014 Modified Version
SELECT RTRIM(A.USERID) AS UserID ,
RTRIM(B.USERNAME) AS UserName ,
RTRIM(C.INTERID) AS CompanyDatabase ,
RTRIM(C.CMPNYNAM) AS CompanyName ,
LOGINDAT AS LoginDate ,
CONVERT(VARCHAR(1000), DATEPART(HH, LOGINTIM)) + ':'
+ CONVERT(VARCHAR(1000), DATEPART(MI, LOGINTIM)) AS LoginTime ,
ISNULL(CONVERT(VARCHAR(1000),E.last_batch),'') AS SQL_LastBatch ,
CASE WHEN D.session_id IS NULL
THEN 'Corrupted Missing DEX_SESSION'
ELSE CONVERT(VARCHAR(1000),session_id)
END DEX_SESSION ,
CASE WHEN CONVERT(VARCHAR(1000),E.SPID) IS NULL
THEN 'Corrupted SQL_SESSION'
ELSE CONVERT(VARCHAR(1000),SPID)
END SQL_SESSION ,
CASE WHEN DATEDIFF(mi, E.last_batch, GETDATE()) > 1
THEN DATEDIFF(hh, E.last_batch, GETDATE())
ELSE 0
END AS 'IdleTime - InHours' ,
CASE WHEN DATEDIFF(MI, LOGINDAT + LOGINTIM, GETDATE()) > 1
THEN DATEDIFF(HH, LOGINDAT + LOGINTIM, GETDATE())
ELSE 0
END AS 'Logged in for – InHours'
FROM DYNAMICS..ACTIVITY A
LEFT JOIN DYNAMICS..SY01400 B ON A.USERID = B.USERID
LEFT JOIN DYNAMICS..SY01500 C ON A.CMPNYNAM = C.CMPNYNAM
LEFT JOIN tempdb..DEX_SESSION D ON A.SQLSESID = D.session_id
LEFT JOIN master..sysprocesses E ON D.sqlsvr_spid = E.spid
AND ecid = 0
LEFT JOIN master..sysdatabases F ON E.dbid = F.dbid
Best Regards,
Mahmoud M. AlSaadi